@webiny/app-admin 6.6.0-alpha.1 → 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 (718) hide show
  1. package/base/Admin.js +19 -2
  2. package/base/Admin.js.map +1 -1
  3. package/base/Base/DefaultFieldRenderers.js +4 -0
  4. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  5. package/base/Base/FieldRenderers/AutoCompleteRenderer.js +1 -0
  6. package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -1
  7. package/base/Base/FieldRenderers/BirthdayInputRenderer.d.ts +21 -0
  8. package/base/Base/FieldRenderers/BirthdayInputRenderer.js +39 -0
  9. package/base/Base/FieldRenderers/BirthdayInputRenderer.js.map +1 -0
  10. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.d.ts +1 -0
  11. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js +123 -0
  12. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js.map +1 -0
  13. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +21 -4
  14. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
  15. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +11 -2
  16. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
  17. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +2 -0
  18. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +14 -5
  19. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  20. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +16 -25
  21. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  22. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +18 -3
  23. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  24. package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
  25. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
  26. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
  27. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
  28. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
  29. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
  30. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
  31. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
  32. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
  33. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
  34. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
  35. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
  37. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +52 -0
  38. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
  39. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
  40. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
  41. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
  42. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
  43. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
  44. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
  45. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
  46. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
  47. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
  48. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
  49. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
  50. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
  51. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
  52. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +8 -3
  53. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +25 -17
  54. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
  55. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.d.ts +1 -0
  56. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.js +106 -0
  57. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.js.map +1 -0
  58. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +3 -2
  59. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
  60. package/base/Base/FieldRenderers/SelectRenderer.js +4 -2
  61. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  62. package/base/Base.js +2 -1
  63. package/base/Base.js.map +1 -1
  64. package/base/createRootContainer.js +4 -0
  65. package/base/createRootContainer.js.map +1 -1
  66. package/base/resolveApiUrl.d.ts +10 -0
  67. package/base/resolveApiUrl.js +11 -3
  68. package/base/resolveApiUrl.js.map +1 -1
  69. package/base/ui/AssumedPermissionsSelector.d.ts +47 -0
  70. package/base/ui/AssumedPermissionsSelector.js +7 -0
  71. package/base/ui/AssumedPermissionsSelector.js.map +1 -0
  72. package/base/ui/DebuggerIndicator.d.ts +23 -0
  73. package/base/ui/DebuggerIndicator.js +5 -0
  74. package/base/ui/DebuggerIndicator.js.map +1 -0
  75. package/base/ui/Layout.d.ts +20 -0
  76. package/base/ui/Layout.js +2 -1
  77. package/base/ui/Layout.js.map +1 -1
  78. package/components/DeveloperMode/DeveloperMode.d.ts +1 -3
  79. package/components/DeveloperMode/DeveloperMode.js.map +1 -1
  80. package/components/Filters/Filters.js +7 -1
  81. package/components/Filters/Filters.js.map +1 -1
  82. package/components/IconPicker/IconPickerComponent.js +1 -1
  83. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  84. package/components/SplitView/SplitView.d.ts +2 -2
  85. package/components/SplitView/SplitView.js +7 -7
  86. package/components/SplitView/SplitView.js.map +1 -1
  87. package/config/AdminConfig/Widget.d.ts +9 -1
  88. package/config/AdminConfig/Widget.js +6 -2
  89. package/config/AdminConfig/Widget.js.map +1 -1
  90. package/domain/Identity.js +1 -1
  91. package/domain/Identity.js.map +1 -1
  92. package/exports/admin/ui.d.ts +4 -0
  93. package/exports/admin/ui.js +4 -1
  94. package/exports/admin.d.ts +4 -0
  95. package/exports/admin.js +2 -0
  96. package/features/{aiChat/AiChatGateway.d.ts → adminAssistant/AdminAssistantGateway.d.ts} +7 -7
  97. package/features/{aiChat/AiChatGateway.js → adminAssistant/AdminAssistantGateway.js} +8 -8
  98. package/features/adminAssistant/AdminAssistantGateway.js.map +1 -0
  99. package/features/adminAssistant/AdminAssistantPresenter.d.ts +60 -0
  100. package/features/adminAssistant/AdminAssistantPresenter.js +377 -0
  101. package/features/adminAssistant/AdminAssistantPresenter.js.map +1 -0
  102. package/features/adminAssistant/abstractions.d.ts +176 -0
  103. package/features/adminAssistant/abstractions.js +6 -0
  104. package/features/adminAssistant/abstractions.js.map +1 -0
  105. package/features/adminAssistant/feature.d.ts +3 -0
  106. package/features/adminAssistant/feature.js +19 -0
  107. package/features/adminAssistant/feature.js.map +1 -0
  108. package/features/adminAssistant/index.d.ts +6 -0
  109. package/features/adminAssistant/index.js +3 -0
  110. package/features/adminAssistant/turnsFromMessages.d.ts +15 -0
  111. package/features/adminAssistant/turnsFromMessages.js +77 -0
  112. package/features/adminAssistant/turnsFromMessages.js.map +1 -0
  113. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.d.ts +11 -0
  114. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js +44 -0
  115. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js.map +1 -0
  116. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.d.ts +10 -0
  117. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js +19 -0
  118. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js.map +1 -0
  119. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.d.ts +16 -0
  120. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js +5 -0
  121. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js.map +1 -0
  122. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.d.ts +10 -0
  123. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js +5 -0
  124. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js.map +1 -0
  125. package/features/adminUsers/account/getCurrentUser/abstractions/index.d.ts +6 -0
  126. package/features/adminUsers/account/getCurrentUser/abstractions/index.js +2 -0
  127. package/features/adminUsers/account/getCurrentUser/feature.d.ts +3 -0
  128. package/features/adminUsers/account/getCurrentUser/feature.js +19 -0
  129. package/features/adminUsers/account/getCurrentUser/feature.js.map +1 -0
  130. package/features/adminUsers/account/getCurrentUser/index.d.ts +1 -0
  131. package/features/adminUsers/account/getCurrentUser/index.js +1 -0
  132. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.d.ts +11 -0
  133. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js +48 -0
  134. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js.map +1 -0
  135. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.d.ts +10 -0
  136. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js +19 -0
  137. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js.map +1 -0
  138. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.d.ts +26 -0
  139. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js +5 -0
  140. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js.map +1 -0
  141. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.d.ts +13 -0
  142. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js +5 -0
  143. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js.map +1 -0
  144. package/features/adminUsers/account/updateCurrentUser/abstractions/index.d.ts +8 -0
  145. package/features/adminUsers/account/updateCurrentUser/abstractions/index.js +2 -0
  146. package/features/adminUsers/account/updateCurrentUser/feature.d.ts +3 -0
  147. package/features/adminUsers/account/updateCurrentUser/feature.js +19 -0
  148. package/features/adminUsers/account/updateCurrentUser/feature.js.map +1 -0
  149. package/features/adminUsers/account/updateCurrentUser/index.d.ts +1 -0
  150. package/features/adminUsers/account/updateCurrentUser/index.js +1 -0
  151. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.d.ts +6 -0
  152. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js +22 -0
  153. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js.map +1 -0
  154. package/features/adminUsers/passwordPolicy/abstractions.d.ts +20 -0
  155. package/features/adminUsers/passwordPolicy/abstractions.js +5 -0
  156. package/features/adminUsers/passwordPolicy/abstractions.js.map +1 -0
  157. package/features/adminUsers/passwordPolicy/feature.d.ts +8 -0
  158. package/features/adminUsers/passwordPolicy/feature.js +18 -0
  159. package/features/adminUsers/passwordPolicy/feature.js.map +1 -0
  160. package/features/adminUsers/passwordPolicy/index.d.ts +3 -0
  161. package/features/adminUsers/passwordPolicy/index.js +3 -0
  162. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.d.ts +10 -0
  163. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js +11 -0
  164. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js.map +1 -0
  165. package/features/adminUsers/permissions/abstractions.d.ts +17 -0
  166. package/features/adminUsers/permissions/abstractions.js +6 -0
  167. package/features/adminUsers/permissions/abstractions.js.map +1 -0
  168. package/features/adminUsers/permissions/feature.d.ts +14 -0
  169. package/features/adminUsers/permissions/feature.js +7 -0
  170. package/features/adminUsers/permissions/feature.js.map +1 -0
  171. package/features/adminUsers/permissionsSchema.d.ts +10 -0
  172. package/features/adminUsers/permissionsSchema.js +18 -0
  173. package/features/adminUsers/permissionsSchema.js.map +1 -0
  174. package/features/adminUsers/users/createUser/CreateUserGateway.d.ts +11 -0
  175. package/features/adminUsers/users/createUser/CreateUserGateway.js +49 -0
  176. package/features/adminUsers/users/createUser/CreateUserGateway.js.map +1 -0
  177. package/features/adminUsers/users/createUser/CreateUserUseCase.d.ts +10 -0
  178. package/features/adminUsers/users/createUser/CreateUserUseCase.js +18 -0
  179. package/features/adminUsers/users/createUser/CreateUserUseCase.js.map +1 -0
  180. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.d.ts +21 -0
  181. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js +5 -0
  182. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js.map +1 -0
  183. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.d.ts +14 -0
  184. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js +5 -0
  185. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js.map +1 -0
  186. package/features/adminUsers/users/createUser/abstractions/index.d.ts +2 -0
  187. package/features/adminUsers/users/createUser/abstractions/index.js +2 -0
  188. package/features/adminUsers/users/createUser/feature.d.ts +3 -0
  189. package/features/adminUsers/users/createUser/feature.js +19 -0
  190. package/features/adminUsers/users/createUser/feature.js.map +1 -0
  191. package/features/adminUsers/users/createUser/index.d.ts +2 -0
  192. package/features/adminUsers/users/createUser/index.js +2 -0
  193. package/features/adminUsers/users/deleteUser/DeleteUserGateway.d.ts +11 -0
  194. package/features/adminUsers/users/deleteUser/DeleteUserGateway.js +40 -0
  195. package/features/adminUsers/users/deleteUser/DeleteUserGateway.js.map +1 -0
  196. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.d.ts +10 -0
  197. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js +18 -0
  198. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js.map +1 -0
  199. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.d.ts +11 -0
  200. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js +5 -0
  201. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js.map +1 -0
  202. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.d.ts +11 -0
  203. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js +5 -0
  204. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js.map +1 -0
  205. package/features/adminUsers/users/deleteUser/abstractions/index.d.ts +2 -0
  206. package/features/adminUsers/users/deleteUser/abstractions/index.js +2 -0
  207. package/features/adminUsers/users/deleteUser/feature.d.ts +3 -0
  208. package/features/adminUsers/users/deleteUser/feature.js +19 -0
  209. package/features/adminUsers/users/deleteUser/feature.js.map +1 -0
  210. package/features/adminUsers/users/deleteUser/index.d.ts +2 -0
  211. package/features/adminUsers/users/deleteUser/index.js +2 -0
  212. package/features/adminUsers/users/getUser/GetUserGateway.d.ts +11 -0
  213. package/features/adminUsers/users/getUser/GetUserGateway.js +57 -0
  214. package/features/adminUsers/users/getUser/GetUserGateway.js.map +1 -0
  215. package/features/adminUsers/users/getUser/GetUserUseCase.d.ts +10 -0
  216. package/features/adminUsers/users/getUser/GetUserUseCase.js +18 -0
  217. package/features/adminUsers/users/getUser/GetUserUseCase.js.map +1 -0
  218. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.d.ts +32 -0
  219. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js +5 -0
  220. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js.map +1 -0
  221. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.d.ts +14 -0
  222. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js +5 -0
  223. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js.map +1 -0
  224. package/features/adminUsers/users/getUser/abstractions/index.d.ts +2 -0
  225. package/features/adminUsers/users/getUser/abstractions/index.js +2 -0
  226. package/features/adminUsers/users/getUser/feature.d.ts +3 -0
  227. package/features/adminUsers/users/getUser/feature.js +19 -0
  228. package/features/adminUsers/users/getUser/feature.js.map +1 -0
  229. package/features/adminUsers/users/getUser/index.d.ts +2 -0
  230. package/features/adminUsers/users/getUser/index.js +2 -0
  231. package/features/adminUsers/users/listUsers/ListUsersGateway.d.ts +11 -0
  232. package/features/adminUsers/users/listUsers/ListUsersGateway.js +39 -0
  233. package/features/adminUsers/users/listUsers/ListUsersGateway.js.map +1 -0
  234. package/features/adminUsers/users/listUsers/ListUsersUseCase.d.ts +10 -0
  235. package/features/adminUsers/users/listUsers/ListUsersUseCase.js +18 -0
  236. package/features/adminUsers/users/listUsers/ListUsersUseCase.js.map +1 -0
  237. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.d.ts +17 -0
  238. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js +5 -0
  239. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js.map +1 -0
  240. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.d.ts +10 -0
  241. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js +5 -0
  242. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js.map +1 -0
  243. package/features/adminUsers/users/listUsers/abstractions/index.d.ts +2 -0
  244. package/features/adminUsers/users/listUsers/abstractions/index.js +2 -0
  245. package/features/adminUsers/users/listUsers/feature.d.ts +3 -0
  246. package/features/adminUsers/users/listUsers/feature.js +19 -0
  247. package/features/adminUsers/users/listUsers/feature.js.map +1 -0
  248. package/features/adminUsers/users/listUsers/index.d.ts +2 -0
  249. package/features/adminUsers/users/listUsers/index.js +2 -0
  250. package/features/adminUsers/users/updateUser/UpdateUserGateway.d.ts +11 -0
  251. package/features/adminUsers/users/updateUser/UpdateUserGateway.js +59 -0
  252. package/features/adminUsers/users/updateUser/UpdateUserGateway.js.map +1 -0
  253. package/features/adminUsers/users/updateUser/UpdateUserUseCase.d.ts +10 -0
  254. package/features/adminUsers/users/updateUser/UpdateUserUseCase.js +18 -0
  255. package/features/adminUsers/users/updateUser/UpdateUserUseCase.js.map +1 -0
  256. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.d.ts +33 -0
  257. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js +5 -0
  258. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js.map +1 -0
  259. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.d.ts +15 -0
  260. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js +5 -0
  261. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js.map +1 -0
  262. package/features/adminUsers/users/updateUser/abstractions/index.d.ts +2 -0
  263. package/features/adminUsers/users/updateUser/abstractions/index.js +2 -0
  264. package/features/adminUsers/users/updateUser/feature.d.ts +3 -0
  265. package/features/adminUsers/users/updateUser/feature.js +19 -0
  266. package/features/adminUsers/users/updateUser/feature.js.map +1 -0
  267. package/features/adminUsers/users/updateUser/index.d.ts +2 -0
  268. package/features/adminUsers/users/updateUser/index.js +2 -0
  269. package/features/aiChats/AiChatSaveError.d.ts +6 -0
  270. package/features/aiChats/AiChatSaveError.js +8 -0
  271. package/features/aiChats/AiChatSaveError.js.map +1 -0
  272. package/features/aiChats/AiChatsGateway.d.ts +18 -0
  273. package/features/aiChats/AiChatsGateway.js +132 -0
  274. package/features/aiChats/AiChatsGateway.js.map +1 -0
  275. package/features/aiChats/AiChatsRepository.d.ts +36 -0
  276. package/features/aiChats/AiChatsRepository.js +110 -0
  277. package/features/aiChats/AiChatsRepository.js.map +1 -0
  278. package/features/aiChats/AiChatsRequestError.d.ts +9 -0
  279. package/features/aiChats/AiChatsRequestError.js +8 -0
  280. package/features/aiChats/AiChatsRequestError.js.map +1 -0
  281. package/features/aiChats/abstractions.d.ts +76 -0
  282. package/features/aiChats/abstractions.js +6 -0
  283. package/features/aiChats/abstractions.js.map +1 -0
  284. package/features/aiChats/feature.d.ts +3 -0
  285. package/features/aiChats/feature.js +19 -0
  286. package/features/aiChats/feature.js.map +1 -0
  287. package/features/aiChats/index.d.ts +9 -0
  288. package/features/aiChats/index.js +3 -0
  289. package/features/aiChats/messageOf.d.ts +2 -0
  290. package/features/aiChats/messageOf.js +7 -0
  291. package/features/aiChats/messageOf.js.map +1 -0
  292. package/features/aiSettings/abstractions.d.ts +16 -0
  293. package/features/aiSettings/abstractions.js +5 -0
  294. package/features/aiSettings/abstractions.js.map +1 -0
  295. package/features/aiSettings/index.d.ts +2 -0
  296. package/features/aiSettings/index.js +1 -0
  297. package/features/assumePermissions/ApiStreamClientDecorator.d.ts +16 -0
  298. package/features/assumePermissions/ApiStreamClientDecorator.js +29 -0
  299. package/features/assumePermissions/ApiStreamClientDecorator.js.map +1 -0
  300. package/features/assumePermissions/AssumePermissionsContext.d.ts +17 -0
  301. package/features/assumePermissions/AssumePermissionsContext.js +32 -0
  302. package/features/assumePermissions/AssumePermissionsContext.js.map +1 -0
  303. package/features/assumePermissions/AssumePermissionsUseCase.d.ts +33 -0
  304. package/features/assumePermissions/AssumePermissionsUseCase.js +48 -0
  305. package/features/assumePermissions/AssumePermissionsUseCase.js.map +1 -0
  306. package/features/assumePermissions/GraphQLClientDecorator.d.ts +16 -0
  307. package/features/assumePermissions/GraphQLClientDecorator.js +29 -0
  308. package/features/assumePermissions/GraphQLClientDecorator.js.map +1 -0
  309. package/features/assumePermissions/ListAssumableTargetsGateway.d.ts +13 -0
  310. package/features/assumePermissions/ListAssumableTargetsGateway.js +74 -0
  311. package/features/assumePermissions/ListAssumableTargetsGateway.js.map +1 -0
  312. package/features/assumePermissions/ListAssumableTargetsUseCase.d.ts +16 -0
  313. package/features/assumePermissions/ListAssumableTargetsUseCase.js +38 -0
  314. package/features/assumePermissions/ListAssumableTargetsUseCase.js.map +1 -0
  315. package/features/assumePermissions/LogInUseCaseDecorator.d.ts +33 -0
  316. package/features/assumePermissions/LogInUseCaseDecorator.js +36 -0
  317. package/features/assumePermissions/LogInUseCaseDecorator.js.map +1 -0
  318. package/features/assumePermissions/LogOutUseCaseDecorator.d.ts +16 -0
  319. package/features/assumePermissions/LogOutUseCaseDecorator.js +21 -0
  320. package/features/assumePermissions/LogOutUseCaseDecorator.js.map +1 -0
  321. package/features/assumePermissions/abstractions.d.ts +78 -0
  322. package/features/assumePermissions/abstractions.js +8 -0
  323. package/features/assumePermissions/abstractions.js.map +1 -0
  324. package/features/assumePermissions/assumePermissionsHeader.d.ts +3 -0
  325. package/features/assumePermissions/assumePermissionsHeader.js +7 -0
  326. package/features/assumePermissions/assumePermissionsHeader.js.map +1 -0
  327. package/features/assumePermissions/feature.d.ts +4 -0
  328. package/features/assumePermissions/feature.js +32 -0
  329. package/features/assumePermissions/feature.js.map +1 -0
  330. package/features/assumePermissions/index.d.ts +4 -0
  331. package/features/assumePermissions/index.js +2 -0
  332. package/features/banners/Banners.d.ts +15 -0
  333. package/features/banners/Banners.js +39 -0
  334. package/features/banners/Banners.js.map +1 -0
  335. package/features/banners/abstractions.d.ts +34 -0
  336. package/features/banners/abstractions.js +5 -0
  337. package/features/banners/abstractions.js.map +1 -0
  338. package/features/banners/feature.d.ts +3 -0
  339. package/features/banners/feature.js +17 -0
  340. package/features/banners/feature.js.map +1 -0
  341. package/features/banners/index.d.ts +2 -0
  342. package/features/banners/index.js +2 -0
  343. package/features/dateFormatter/formatUtcOffset.d.ts +1 -0
  344. package/features/dateFormatter/formatUtcOffset.js +11 -0
  345. package/features/dateFormatter/formatUtcOffset.js.map +1 -0
  346. package/features/debugger/DebugSessionsRepository.d.ts +35 -0
  347. package/features/debugger/DebugSessionsRepository.js +57 -0
  348. package/features/debugger/DebugSessionsRepository.js.map +1 -0
  349. package/features/debugger/GraphQLExtensionsDebugHandler.d.ts +17 -0
  350. package/features/debugger/GraphQLExtensionsDebugHandler.js +21 -0
  351. package/features/debugger/GraphQLExtensionsDebugHandler.js.map +1 -0
  352. package/features/debugger/GraphQLExtensionsDebugHandler.test.d.ts +1 -0
  353. package/features/debugger/GraphQLExtensionsDebugHandler.test.js +112 -0
  354. package/features/debugger/GraphQLExtensionsDebugHandler.test.js.map +1 -0
  355. package/features/debugger/abstractions.d.ts +50 -0
  356. package/features/debugger/abstractions.js +5 -0
  357. package/features/debugger/abstractions.js.map +1 -0
  358. package/features/debugger/constants.d.ts +1 -0
  359. package/features/debugger/constants.js +4 -0
  360. package/features/debugger/constants.js.map +1 -0
  361. package/features/debugger/feature.d.ts +3 -0
  362. package/features/debugger/feature.js +19 -0
  363. package/features/debugger/feature.js.map +1 -0
  364. package/features/debugger/index.d.ts +3 -0
  365. package/features/debugger/index.js +3 -0
  366. package/features/formModel/AccessControlRuleEvaluator.d.ts +12 -0
  367. package/features/formModel/AccessControlRuleEvaluator.js +30 -0
  368. package/features/formModel/AccessControlRuleEvaluator.js.map +1 -0
  369. package/features/formModel/AccessControlRuleEvaluator.test.d.ts +1 -0
  370. package/features/formModel/AccessControlRuleEvaluator.test.js +219 -0
  371. package/features/formModel/AccessControlRuleEvaluator.test.js.map +1 -0
  372. package/features/formModel/ConditionRuleEvaluator.js +34 -4
  373. package/features/formModel/ConditionRuleEvaluator.js.map +1 -1
  374. package/features/formModel/Field.d.ts +14 -1
  375. package/features/formModel/Field.js +41 -5
  376. package/features/formModel/Field.js.map +1 -1
  377. package/features/formModel/FieldBuilder.d.ts +3 -3
  378. package/features/formModel/FieldBuilder.js +2 -1
  379. package/features/formModel/FieldBuilder.js.map +1 -1
  380. package/features/formModel/FieldBuilder.test.js +158 -1
  381. package/features/formModel/FieldBuilder.test.js.map +1 -1
  382. package/features/formModel/FocusManager.js +10 -3
  383. package/features/formModel/FocusManager.js.map +1 -1
  384. package/features/formModel/FormErrors.js +1 -1
  385. package/features/formModel/FormErrors.js.map +1 -1
  386. package/features/formModel/FormModel.d.ts +2 -0
  387. package/features/formModel/FormModel.js +32 -9
  388. package/features/formModel/FormModel.js.map +1 -1
  389. package/features/formModel/FormModel.test.js +835 -4
  390. package/features/formModel/FormModel.test.js.map +1 -1
  391. package/features/formModel/ObjectField.d.ts +12 -1
  392. package/features/formModel/ObjectField.js +70 -20
  393. package/features/formModel/ObjectField.js.map +1 -1
  394. package/features/formModel/Rules.test.js +224 -16
  395. package/features/formModel/Rules.test.js.map +1 -1
  396. package/features/formModel/abstractions.d.ts +56 -4
  397. package/features/formModel/abstractions.js +2 -1
  398. package/features/formModel/abstractions.js.map +1 -1
  399. package/features/formModel/createFieldRenderer.d.ts +42 -0
  400. package/features/formModel/createFieldRenderer.js +33 -10
  401. package/features/formModel/createFieldRenderer.js.map +1 -1
  402. package/features/formModel/feature.js +2 -0
  403. package/features/formModel/feature.js.map +1 -1
  404. package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +67 -4
  405. package/features/formModel/fieldTypes/DateTimeFieldType.js +88 -22
  406. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  407. package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
  408. package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
  409. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  410. package/features/formModel/fieldTypes/dateLimits.d.ts +37 -0
  411. package/features/formModel/fieldTypes/dateLimits.js +64 -0
  412. package/features/formModel/fieldTypes/dateLimits.js.map +1 -0
  413. package/features/formModel/fieldTypes/dateLimits.test.d.ts +1 -0
  414. package/features/formModel/fieldTypes/dateLimits.test.js +60 -0
  415. package/features/formModel/fieldTypes/dateLimits.test.js.map +1 -0
  416. package/features/formModel/hasSubtreeFocusRequest.d.ts +12 -0
  417. package/features/formModel/hasSubtreeFocusRequest.js +15 -0
  418. package/features/formModel/hasSubtreeFocusRequest.js.map +1 -0
  419. package/features/formModel/index.d.ts +3 -2
  420. package/features/formModel/index.js +2 -1
  421. package/features/formModel/jsonSchema/JsonSchema.d.ts +18 -0
  422. package/features/formModel/jsonSchema/JsonSchema.js +0 -0
  423. package/features/formModel/jsonSchema/JsonSchemaFieldOptions.d.ts +4 -0
  424. package/features/formModel/jsonSchema/JsonSchemaFieldOptions.js +0 -0
  425. package/features/formModel/jsonSchema/JsonSchemaIssue.d.ts +4 -0
  426. package/features/formModel/jsonSchema/JsonSchemaIssue.js +0 -0
  427. package/features/formModel/jsonSchema/JsonSchemaValidationResult.d.ts +5 -0
  428. package/features/formModel/jsonSchema/JsonSchemaValidationResult.js +0 -0
  429. package/features/formModel/jsonSchema/JsonSchemaValidator.d.ts +4 -0
  430. package/features/formModel/jsonSchema/JsonSchemaValidator.js +0 -0
  431. package/features/formModel/jsonSchema/PlainObject.d.ts +1 -0
  432. package/features/formModel/jsonSchema/PlainObject.js +0 -0
  433. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.d.ts +5 -0
  434. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js +154 -0
  435. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js.map +1 -0
  436. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.d.ts +1 -0
  437. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js +643 -0
  438. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js.map +1 -0
  439. package/features/formModel/jsonSchema/createJsonSchemaValidator.d.ts +3 -0
  440. package/features/formModel/jsonSchema/createJsonSchemaValidator.js +40 -0
  441. package/features/formModel/jsonSchema/createJsonSchemaValidator.js.map +1 -0
  442. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.d.ts +1 -0
  443. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js +141 -0
  444. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js.map +1 -0
  445. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.d.ts +3 -0
  446. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js +52 -0
  447. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js.map +1 -0
  448. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.d.ts +1 -0
  449. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js +250 -0
  450. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js.map +1 -0
  451. package/features/formModel/jsonSchema/getJsonSchemaKind.d.ts +3 -0
  452. package/features/formModel/jsonSchema/getJsonSchemaKind.js +31 -0
  453. package/features/formModel/jsonSchema/getJsonSchemaKind.js.map +1 -0
  454. package/features/formModel/jsonSchema/getJsonSchemaKind.test.d.ts +1 -0
  455. package/features/formModel/jsonSchema/getJsonSchemaKind.test.js +123 -0
  456. package/features/formModel/jsonSchema/getJsonSchemaKind.test.js.map +1 -0
  457. package/features/formModel/jsonSchema/isPlainObject.d.ts +2 -0
  458. package/features/formModel/jsonSchema/isPlainObject.js +4 -0
  459. package/features/formModel/jsonSchema/isPlainObject.js.map +1 -0
  460. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.d.ts +3 -0
  461. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js +30 -0
  462. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js.map +1 -0
  463. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.d.ts +1 -0
  464. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js +207 -0
  465. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js.map +1 -0
  466. package/features/formModel/jsonSchema/normalizeJsonSchema.d.ts +2 -0
  467. package/features/formModel/jsonSchema/normalizeJsonSchema.js +10 -0
  468. package/features/formModel/jsonSchema/normalizeJsonSchema.js.map +1 -0
  469. package/features/formModel/renderers.d.ts +1 -0
  470. package/features/formModel/renderers.js +1 -0
  471. package/features/notifications/Notifications.d.ts +1 -0
  472. package/features/notifications/Notifications.js +3 -0
  473. package/features/notifications/Notifications.js.map +1 -1
  474. package/features/notifications/Notifications.test.d.ts +1 -0
  475. package/features/notifications/Notifications.test.js +106 -0
  476. package/features/notifications/Notifications.test.js.map +1 -0
  477. package/features/notifications/NotificationsRenderer.d.ts +2 -1
  478. package/features/notifications/NotificationsRenderer.js +23 -4
  479. package/features/notifications/NotificationsRenderer.js.map +1 -1
  480. package/features/notifications/NotificationsRenderer.test.d.ts +1 -0
  481. package/features/notifications/NotificationsRenderer.test.js +261 -0
  482. package/features/notifications/NotificationsRenderer.test.js.map +1 -0
  483. package/features/notifications/abstractions.d.ts +13 -2
  484. package/features/notifications/abstractions.js.map +1 -1
  485. package/features/security/LogIn/LogInUseCase.d.ts +0 -1
  486. package/features/security/LogIn/LogInUseCase.js +2 -5
  487. package/features/security/LogIn/LogInUseCase.js.map +1 -1
  488. package/features/security/LogIn/hasAppPermissions.d.ts +2 -0
  489. package/features/security/LogIn/hasAppPermissions.js +8 -0
  490. package/features/security/LogIn/hasAppPermissions.js.map +1 -0
  491. package/features/wcp/ReactLicense.d.ts +6 -1
  492. package/features/wcp/ReactLicense.js +17 -2
  493. package/features/wcp/ReactLicense.js.map +1 -1
  494. package/features/wcp/WcpGateway.js +4 -0
  495. package/features/wcp/WcpGateway.js.map +1 -1
  496. package/hooks/useHotkeys.js +6 -4
  497. package/hooks/useHotkeys.js.map +1 -1
  498. package/index.d.ts +27 -3
  499. package/index.js +23 -6
  500. package/modules/AccessManagementExtension.js +3 -1
  501. package/modules/AccessManagementExtension.js.map +1 -1
  502. package/modules/DebuggerExtension.d.ts +2 -0
  503. package/modules/DebuggerExtension.js +55 -0
  504. package/modules/DebuggerExtension.js.map +1 -0
  505. package/package.json +41 -41
  506. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +1 -2
  507. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
  508. package/presentation/accessManagement/roles/RolesPresenter.js +1 -2
  509. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
  510. package/presentation/accessManagement/roles/components/RolesDataList.d.ts +10 -0
  511. package/presentation/accessManagement/roles/components/RolesDataList.js +146 -0
  512. package/presentation/accessManagement/roles/components/RolesDataList.js.map +1 -0
  513. package/presentation/accessManagement/roles/components/RolesForm.d.ts +13 -0
  514. package/presentation/accessManagement/roles/components/RolesForm.js +114 -0
  515. package/presentation/accessManagement/roles/components/RolesForm.js.map +1 -0
  516. package/presentation/accessManagement/roles/components/RolesView.js +6 -216
  517. package/presentation/accessManagement/roles/components/RolesView.js.map +1 -1
  518. package/presentation/accessManagement/teams/TeamsPresenter.js +1 -2
  519. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
  520. package/presentation/accessManagement/teams/components/TeamsDataList.d.ts +10 -0
  521. package/presentation/accessManagement/teams/components/TeamsDataList.js +146 -0
  522. package/presentation/accessManagement/teams/components/TeamsDataList.js.map +1 -0
  523. package/presentation/accessManagement/teams/components/TeamsForm.d.ts +13 -0
  524. package/presentation/accessManagement/teams/components/TeamsForm.js +96 -0
  525. package/presentation/accessManagement/teams/components/TeamsForm.js.map +1 -0
  526. package/presentation/accessManagement/teams/components/TeamsView.js +6 -198
  527. package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -1
  528. package/presentation/adminUsers/AdminUsers.d.ts +10 -0
  529. package/presentation/adminUsers/AdminUsers.js +77 -0
  530. package/presentation/adminUsers/AdminUsers.js.map +1 -0
  531. package/presentation/adminUsers/SecurityPermission.d.ts +2 -0
  532. package/presentation/adminUsers/SecurityPermission.js +15 -0
  533. package/presentation/adminUsers/SecurityPermission.js.map +1 -0
  534. package/presentation/adminUsers/UserItem.d.ts +10 -0
  535. package/presentation/adminUsers/UserItem.js +0 -0
  536. package/presentation/adminUsers/components/AvatarImage/AvatarImage.d.ts +3 -0
  537. package/presentation/adminUsers/components/AvatarImage/AvatarImage.js +31 -0
  538. package/presentation/adminUsers/components/AvatarImage/AvatarImage.js.map +1 -0
  539. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
  540. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js +53 -0
  541. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js.map +1 -0
  542. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
  543. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js +28 -0
  544. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
  545. package/presentation/adminUsers/components/AvatarImage/index.d.ts +1 -0
  546. package/presentation/adminUsers/components/AvatarImage/index.js +1 -0
  547. package/presentation/adminUsers/routes.d.ts +10 -0
  548. package/presentation/adminUsers/routes.js +20 -0
  549. package/presentation/adminUsers/routes.js.map +1 -0
  550. package/presentation/adminUsers/userMenu/AccountDetails.d.ts +6 -0
  551. package/presentation/adminUsers/userMenu/AccountDetails.js +20 -0
  552. package/presentation/adminUsers/userMenu/AccountDetails.js.map +1 -0
  553. package/presentation/adminUsers/userMenu/useIsDefaultTenant.d.ts +1 -0
  554. package/presentation/adminUsers/userMenu/useIsDefaultTenant.js +9 -0
  555. package/presentation/adminUsers/userMenu/useIsDefaultTenant.js.map +1 -0
  556. package/presentation/adminUsers/views/Account/Account.d.ts +2 -0
  557. package/presentation/adminUsers/views/Account/Account.js +137 -0
  558. package/presentation/adminUsers/views/Account/Account.js.map +1 -0
  559. package/presentation/adminUsers/views/Account/index.d.ts +1 -0
  560. package/presentation/adminUsers/views/Account/index.js +1 -0
  561. package/presentation/adminUsers/views/Users/UsersDataList.d.ts +3 -0
  562. package/presentation/adminUsers/views/Users/UsersDataList.js +180 -0
  563. package/presentation/adminUsers/views/Users/UsersDataList.js.map +1 -0
  564. package/presentation/adminUsers/views/Users/UsersForm.d.ts +5 -0
  565. package/presentation/adminUsers/views/Users/UsersForm.js +175 -0
  566. package/presentation/adminUsers/views/Users/UsersForm.js.map +1 -0
  567. package/presentation/adminUsers/views/Users/UsersView.d.ts +2 -0
  568. package/presentation/adminUsers/views/Users/UsersView.js +15 -0
  569. package/presentation/adminUsers/views/Users/UsersView.js.map +1 -0
  570. package/presentation/adminUsers/views/Users/components/DeleteAction.d.ts +7 -0
  571. package/presentation/adminUsers/views/Users/components/DeleteAction.js +29 -0
  572. package/presentation/adminUsers/views/Users/components/DeleteAction.js.map +1 -0
  573. package/presentation/adminUsers/views/Users/hooks/useUserForm.d.ts +27 -0
  574. package/presentation/adminUsers/views/Users/hooks/useUserForm.js +101 -0
  575. package/presentation/adminUsers/views/Users/hooks/useUserForm.js.map +1 -0
  576. package/presentation/adminUsers/views/Users/search.js +21 -0
  577. package/presentation/adminUsers/views/Users/search.js.map +1 -0
  578. package/presentation/adminUsers/views/Users/search.svg +20 -0
  579. package/presentation/adminUsers/views/utils.d.ts +3 -0
  580. package/presentation/adminUsers/views/utils.js +12 -0
  581. package/presentation/adminUsers/views/utils.js.map +1 -0
  582. package/presentation/aiChats/AiChatsPanelPresenter.d.ts +28 -0
  583. package/presentation/aiChats/AiChatsPanelPresenter.js +132 -0
  584. package/presentation/aiChats/AiChatsPanelPresenter.js.map +1 -0
  585. package/presentation/aiChats/abstractions.d.ts +69 -0
  586. package/presentation/aiChats/abstractions.js +5 -0
  587. package/presentation/aiChats/abstractions.js.map +1 -0
  588. package/presentation/aiChats/feature.d.ts +3 -0
  589. package/presentation/aiChats/feature.js +17 -0
  590. package/presentation/aiChats/feature.js.map +1 -0
  591. package/presentation/aiChats/index.d.ts +2 -0
  592. package/presentation/aiChats/index.js +2 -0
  593. package/presentation/assumePermissions/AssumePermissionsPresenter.d.ts +36 -0
  594. package/presentation/assumePermissions/AssumePermissionsPresenter.js +153 -0
  595. package/presentation/assumePermissions/AssumePermissionsPresenter.js.map +1 -0
  596. package/presentation/assumePermissions/abstractions.d.ts +30 -0
  597. package/presentation/assumePermissions/abstractions.js +5 -0
  598. package/presentation/assumePermissions/abstractions.js.map +1 -0
  599. package/presentation/assumePermissions/components/AssumePermissionsButton.d.ts +14 -0
  600. package/presentation/assumePermissions/components/AssumePermissionsButton.js +42 -0
  601. package/presentation/assumePermissions/components/AssumePermissionsButton.js.map +1 -0
  602. package/presentation/assumePermissions/components/AssumedPermissionsBanner.d.ts +11 -0
  603. package/presentation/assumePermissions/components/AssumedPermissionsBanner.js +25 -0
  604. package/presentation/assumePermissions/components/AssumedPermissionsBanner.js.map +1 -0
  605. package/presentation/assumePermissions/components/AssumedPermissionsSelector.d.ts +2 -0
  606. package/presentation/assumePermissions/components/AssumedPermissionsSelector.js +68 -0
  607. package/presentation/assumePermissions/components/AssumedPermissionsSelector.js.map +1 -0
  608. package/presentation/assumePermissions/feature.d.ts +3 -0
  609. package/presentation/assumePermissions/feature.js +17 -0
  610. package/presentation/assumePermissions/feature.js.map +1 -0
  611. package/presentation/assumePermissions/index.d.ts +4 -0
  612. package/presentation/assumePermissions/index.js +4 -0
  613. package/presentation/banners/BannersPresenter.d.ts +14 -0
  614. package/presentation/banners/BannersPresenter.js +60 -0
  615. package/presentation/banners/BannersPresenter.js.map +1 -0
  616. package/presentation/banners/abstractions.d.ts +24 -0
  617. package/presentation/banners/abstractions.js +5 -0
  618. package/presentation/banners/abstractions.js.map +1 -0
  619. package/presentation/banners/components/Banner.d.ts +10 -0
  620. package/presentation/banners/components/Banner.js +32 -0
  621. package/presentation/banners/components/Banner.js.map +1 -0
  622. package/presentation/banners/components/BannerBar.d.ts +11 -0
  623. package/presentation/banners/components/BannerBar.js +51 -0
  624. package/presentation/banners/components/BannerBar.js.map +1 -0
  625. package/presentation/banners/feature.d.ts +3 -0
  626. package/presentation/banners/feature.js +17 -0
  627. package/presentation/banners/feature.js.map +1 -0
  628. package/presentation/banners/index.d.ts +6 -0
  629. package/presentation/banners/index.js +4 -0
  630. package/presentation/banners/useBanner.d.ts +10 -0
  631. package/presentation/banners/useBanner.js +15 -0
  632. package/presentation/banners/useBanner.js.map +1 -0
  633. package/presentation/commandPalette/CommandPalettePresenter.js +3 -1
  634. package/presentation/commandPalette/CommandPalettePresenter.js.map +1 -1
  635. package/presentation/commandPalette/abstractions.d.ts +5 -0
  636. package/presentation/commandPalette/abstractions.js.map +1 -1
  637. package/presentation/commandPalette/commands/AiChatsCommand.d.ts +24 -0
  638. package/presentation/commandPalette/commands/AiChatsCommand.js +41 -0
  639. package/presentation/commandPalette/commands/AiChatsCommand.js.map +1 -0
  640. package/presentation/commandPalette/commands/AskAiCommand.d.ts +1 -0
  641. package/presentation/commandPalette/commands/AskAiCommand.js +3 -2
  642. package/presentation/commandPalette/commands/AskAiCommand.js.map +1 -1
  643. package/presentation/commandPalette/commands/feature.js +2 -0
  644. package/presentation/commandPalette/commands/feature.js.map +1 -1
  645. package/presentation/createReactiveComponent.d.ts +1 -0
  646. package/presentation/createReactiveComponent.js +1 -0
  647. package/presentation/debugger/DebuggerPresenter.d.ts +14 -0
  648. package/presentation/debugger/DebuggerPresenter.js +45 -0
  649. package/presentation/debugger/DebuggerPresenter.js.map +1 -0
  650. package/presentation/debugger/abstractions.d.ts +17 -0
  651. package/presentation/debugger/abstractions.js +5 -0
  652. package/presentation/debugger/abstractions.js.map +1 -0
  653. package/presentation/debugger/components/DebuggerIndicator.d.ts +2 -0
  654. package/presentation/debugger/components/DebuggerIndicator.js +45 -0
  655. package/presentation/debugger/components/DebuggerIndicator.js.map +1 -0
  656. package/presentation/debugger/components/DebuggerView.d.ts +4 -0
  657. package/presentation/debugger/components/DebuggerView.js +44 -0
  658. package/presentation/debugger/components/DebuggerView.js.map +1 -0
  659. package/presentation/debugger/downloadJson.d.ts +7 -0
  660. package/presentation/debugger/downloadJson.js +17 -0
  661. package/presentation/debugger/downloadJson.js.map +1 -0
  662. package/presentation/debugger/feature.d.ts +3 -0
  663. package/presentation/debugger/feature.js +17 -0
  664. package/presentation/debugger/feature.js.map +1 -0
  665. package/presentation/debugger/routes.d.ts +4 -0
  666. package/presentation/debugger/routes.js +10 -0
  667. package/presentation/debugger/routes.js.map +1 -0
  668. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +4 -3
  669. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
  670. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -1
  671. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  672. package/presentation/listPresenter/FolderAwareDataSource.d.ts +5 -0
  673. package/presentation/listPresenter/FolderAwareDataSource.js +4 -3
  674. package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -1
  675. package/presentation/listPresenter/QueryMatcher.d.ts +28 -5
  676. package/presentation/listPresenter/QueryMatcher.js +72 -2
  677. package/presentation/listPresenter/QueryMatcher.js.map +1 -1
  678. package/presentation/listPresenter/QueryMatcher.test.d.ts +1 -0
  679. package/presentation/listPresenter/QueryMatcher.test.js +345 -0
  680. package/presentation/listPresenter/QueryMatcher.test.js.map +1 -0
  681. package/presentation/trashBin/TrashBinPresenter.js +3 -1
  682. package/presentation/trashBin/TrashBinPresenter.js.map +1 -1
  683. package/presentation/trashBin/TrashBinPresenter.test.d.ts +1 -0
  684. package/presentation/trashBin/TrashBinPresenter.test.js +91 -0
  685. package/presentation/trashBin/TrashBinPresenter.test.js.map +1 -0
  686. package/presentation/trashBin/abstractions.d.ts +1 -1
  687. package/presentation/trashBin/abstractions.js.map +1 -1
  688. package/presentation/trashBin/components/BulkActions/DeleteItems.js +5 -1
  689. package/presentation/trashBin/components/BulkActions/DeleteItems.js.map +1 -1
  690. package/presentation/trashBin/components/BulkActions/DeleteItems.test.d.ts +1 -0
  691. package/presentation/trashBin/components/BulkActions/DeleteItems.test.js +100 -0
  692. package/presentation/trashBin/components/BulkActions/DeleteItems.test.js.map +1 -0
  693. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js +2 -1
  694. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js.map +1 -1
  695. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.d.ts +1 -0
  696. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js +67 -0
  697. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js.map +1 -0
  698. package/static/svg/search.43fa797c.svg +20 -0
  699. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
  700. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
  701. package/features/aiChat/AiChatGateway.js.map +0 -1
  702. package/features/aiChat/AiChatPresenter.d.ts +0 -32
  703. package/features/aiChat/AiChatPresenter.js +0 -220
  704. package/features/aiChat/AiChatPresenter.js.map +0 -1
  705. package/features/aiChat/abstractions.d.ts +0 -124
  706. package/features/aiChat/abstractions.js +0 -6
  707. package/features/aiChat/abstractions.js.map +0 -1
  708. package/features/aiChat/feature.d.ts +0 -3
  709. package/features/aiChat/feature.js +0 -19
  710. package/features/aiChat/feature.js.map +0 -1
  711. package/features/aiChat/index.d.ts +0 -6
  712. package/features/aiChat/index.js +0 -3
  713. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.d.ts +0 -8
  714. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +0 -17
  715. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +0 -1
  716. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.d.ts +0 -1
  717. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js +0 -16
  718. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js.map +0 -1
@@ -1,8 +1,11 @@
1
+ import { z } from "zod";
1
2
  import { FieldType } from "../abstractions.js";
2
3
  import { FieldBuilder } from "../FieldBuilder.js";
4
+ import { DateFormatter } from "../../dateFormatter/abstractions.js";
5
+ import { createDateLimitsSchema } from "./dateLimits.js";
3
6
  class DateTimeFieldBuilder extends FieldBuilder {
4
- constructor(){
5
- super("datetime"), this._subtype = "date";
7
+ constructor(dateFormatter){
8
+ super("datetime"), this.dateFormatter = dateFormatter, this._subtype = "date", this._dateGte = [], this._dateLte = [];
6
9
  this._config.renderer = "dateTimeInput";
7
10
  this._config.rendererSettings = {
8
11
  type: "date"
@@ -13,18 +16,24 @@ class DateTimeFieldBuilder extends FieldBuilder {
13
16
  this._config.renderer = "dateTimeInputs";
14
17
  return this;
15
18
  }
19
+ _defaultRenderer() {
20
+ return this._config.isList ? "dateTimeInputs" : "dateTimeInput";
21
+ }
16
22
  dateOnly() {
17
23
  this._subtype = "date";
18
- this._config.renderer = "dateTimeInput";
24
+ this._config.renderer = this._isBirthdayPicker() && !this._config.isList ? "birthdayInput" : this._defaultRenderer();
19
25
  this._config.rendererSettings = {
20
26
  ...this._config.rendererSettings,
21
27
  type: "date"
22
28
  };
23
29
  return this;
24
30
  }
31
+ _isBirthdayPicker() {
32
+ return "birthdayInput" === this._config.renderer;
33
+ }
25
34
  timeOnly() {
26
35
  this._subtype = "time";
27
- this._config.renderer = "dateTimeInput";
36
+ this._config.renderer = this._defaultRenderer();
28
37
  this._config.rendererSettings = {
29
38
  ...this._config.rendererSettings,
30
39
  type: "time"
@@ -33,7 +42,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
33
42
  }
34
43
  withTimezone() {
35
44
  this._subtype = "dateTimeWithTimezone";
36
- this._config.renderer = "dateTimeInput";
45
+ this._config.renderer = this._defaultRenderer();
37
46
  this._config.rendererSettings = {
38
47
  ...this._config.rendererSettings,
39
48
  type: "dateTimeWithTimezone"
@@ -42,7 +51,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
42
51
  }
43
52
  withoutTimezone() {
44
53
  this._subtype = "dateTimeWithoutTimezone";
45
- this._config.renderer = "dateTimeInput";
54
+ this._config.renderer = this._defaultRenderer();
46
55
  this._config.rendererSettings = {
47
56
  ...this._config.rendererSettings,
48
57
  type: "dateTimeWithoutTimezone"
@@ -51,7 +60,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
51
60
  }
52
61
  monthOnly() {
53
62
  this._subtype = "month";
54
- this._config.renderer = "dateTimeInput";
63
+ this._config.renderer = this._defaultRenderer();
55
64
  this._config.rendererSettings = {
56
65
  ...this._config.rendererSettings,
57
66
  type: "month"
@@ -60,7 +69,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
60
69
  }
61
70
  weekOnly(options) {
62
71
  this._subtype = "week";
63
- this._config.renderer = "dateTimeInput";
72
+ this._config.renderer = this._defaultRenderer();
64
73
  this._config.rendererSettings = {
65
74
  ...this._config.rendererSettings,
66
75
  type: "week",
@@ -72,7 +81,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
72
81
  }
73
82
  yearOnly(options) {
74
83
  this._subtype = "year";
75
- this._config.renderer = "dateTimeInput";
84
+ this._config.renderer = this._defaultRenderer();
76
85
  this._config.rendererSettings = {
77
86
  ...this._config.rendererSettings,
78
87
  type: "year",
@@ -84,7 +93,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
84
93
  }
85
94
  dateRange() {
86
95
  this._subtype = "dateRange";
87
- this._config.renderer = "dateTimeInput";
96
+ this._config.renderer = this._defaultRenderer();
88
97
  this._config.rendererSettings = {
89
98
  ...this._config.rendererSettings,
90
99
  type: "dateRange"
@@ -93,7 +102,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
93
102
  }
94
103
  multipleDates() {
95
104
  this._subtype = "multipleDates";
96
- this._config.renderer = "dateTimeInput";
105
+ this._config.renderer = this._defaultRenderer();
97
106
  this._config.rendererSettings = {
98
107
  ...this._config.rendererSettings,
99
108
  type: "multipleDates"
@@ -102,7 +111,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
102
111
  }
103
112
  multipleMonths() {
104
113
  this._subtype = "multipleMonths";
105
- this._config.renderer = "dateTimeInput";
114
+ this._config.renderer = this._defaultRenderer();
106
115
  this._config.rendererSettings = {
107
116
  ...this._config.rendererSettings,
108
117
  type: "multipleMonths"
@@ -111,7 +120,7 @@ class DateTimeFieldBuilder extends FieldBuilder {
111
120
  }
112
121
  multipleYears(options) {
113
122
  this._subtype = "multipleYears";
114
- this._config.renderer = "dateTimeInput";
123
+ this._config.renderer = this._defaultRenderer();
115
124
  this._config.rendererSettings = {
116
125
  ...this._config.rendererSettings,
117
126
  type: "multipleYears",
@@ -128,6 +137,54 @@ class DateTimeFieldBuilder extends FieldBuilder {
128
137
  };
129
138
  return this;
130
139
  }
140
+ dateGte(bound, message) {
141
+ this._dateGte.push({
142
+ bound,
143
+ message
144
+ });
145
+ return this;
146
+ }
147
+ dateLte(bound, message) {
148
+ this._dateLte.push({
149
+ bound,
150
+ message
151
+ });
152
+ return this;
153
+ }
154
+ build(name) {
155
+ const config = super.build(name);
156
+ if (0 === this._dateGte.length && 0 === this._dateLte.length) return config;
157
+ const dateLimits = {
158
+ gte: this._dateGte.map((limit)=>limit.bound),
159
+ lte: this._dateLte.map((limit)=>limit.bound)
160
+ };
161
+ const limitsSchema = createDateLimitsSchema(this._dateGte, this._dateLte, this._formatDateLimit());
162
+ return {
163
+ ...config,
164
+ rendererSettings: {
165
+ ...config.rendererSettings,
166
+ dateLimits
167
+ },
168
+ schema: config.schema ? z.intersection(config.schema, limitsSchema) : limitsSchema
169
+ };
170
+ }
171
+ _formatDateLimit() {
172
+ const formatter = this.dateFormatter;
173
+ if (!formatter) return;
174
+ switch(this._subtype){
175
+ case "date":
176
+ return (date)=>formatter.format(date, {
177
+ hour: void 0,
178
+ minute: void 0,
179
+ timeZone: "UTC"
180
+ });
181
+ case "dateTimeWithTimezone":
182
+ case "dateTimeWithoutTimezone":
183
+ return (date)=>formatter.format(date);
184
+ default:
185
+ return;
186
+ }
187
+ }
131
188
  displayFormat(format) {
132
189
  this._config.rendererSettings = {
133
190
  ...this._config.rendererSettings,
@@ -191,16 +248,17 @@ function normalizeDateTimeWithTimezone(value) {
191
248
  if (!value.includes("T")) return value;
192
249
  const [initialDate, rest] = value.split("T");
193
250
  if (!rest) return value;
251
+ const match = rest.match(/^(.+?)(Z|[+-]\d{2}:\d{2})$/);
252
+ if (!match) return value;
253
+ const [, timePart, zone] = match;
194
254
  let date;
195
255
  try {
196
256
  date = new Date(initialDate).toISOString().slice(0, 10);
197
257
  } catch {
198
258
  return value;
199
259
  }
200
- const sign = rest.includes("+") ? "+" : "-";
201
- const [timePart, tz] = rest.split(sign);
202
- const time = normalizeTime(timePart);
203
- return `${date}T${time}${sign}${tz}`;
260
+ const tz = "Z" === zone ? "+00:00" : zone;
261
+ return `${date}T${normalizeTime(timePart)}${tz}`;
204
262
  }
205
263
  function normalizeMonth(value) {
206
264
  if (/^\d{4}-\d{2}$/.test(value)) return value;
@@ -230,16 +288,24 @@ function normalizeMultipleYears(value) {
230
288
  });
231
289
  }
232
290
  class DateTimeFieldTypeFactory {
233
- create(_registry) {
234
- return new DateTimeFieldBuilder();
235
- }
236
- constructor(){
291
+ constructor(dateFormatter){
292
+ this.dateFormatter = dateFormatter;
237
293
  this.type = "datetime";
238
294
  }
295
+ create(_registry) {
296
+ return new DateTimeFieldBuilder(this.dateFormatter);
297
+ }
239
298
  }
240
299
  const DateTimeFieldType = FieldType.createImplementation({
241
300
  implementation: DateTimeFieldTypeFactory,
242
- dependencies: []
301
+ dependencies: [
302
+ [
303
+ DateFormatter,
304
+ {
305
+ optional: true
306
+ }
307
+ ]
308
+ ]
243
309
  });
244
310
  export { DateTimeFieldBuilder, DateTimeFieldType };
245
311
 
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/fieldTypes/DateTimeFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/DateTimeFieldType.ts"],"sourcesContent":["import { FieldType, type IFieldTypeFactory } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ntype DateTimeSubtype =\n | \"date\"\n | \"time\"\n | \"dateTimeWithTimezone\"\n | \"dateTimeWithoutTimezone\"\n | \"month\"\n | \"week\"\n | \"year\"\n | \"dateRange\"\n | \"multipleDates\"\n | \"multipleMonths\"\n | \"multipleYears\";\n\nexport class DateTimeFieldBuilder extends FieldBuilder<\"datetime\"> {\n private _subtype: DateTimeSubtype = \"date\";\n\n constructor() {\n super(\"datetime\");\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { type: \"date\" };\n }\n\n override list(): this {\n super.list();\n this._config.renderer = \"dateTimeInputs\";\n return this;\n }\n\n /**\n * Calendar date only.\n * @example datetime().dateOnly()\n *\n * Value format: `\"2026-05-01\"` (YYYY-MM-DD)\n */\n dateOnly(): this {\n this._subtype = \"date\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"date\" };\n return this;\n }\n\n /**\n * Time only, no date component.\n * @example datetime().timeOnly()\n *\n * Value format: `\"14:30:00\"` (HH:mm:ss)\n */\n timeOnly(): this {\n this._subtype = \"time\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"time\" };\n return this;\n }\n\n /**\n * Date and time with explicit timezone offset.\n * @example datetime().withTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00+02:00\"` (ISO 8601 with offset)\n */\n withTimezone(): this {\n this._subtype = \"dateTimeWithTimezone\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithTimezone\"\n };\n return this;\n }\n\n /**\n * Date and time in UTC, no timezone offset.\n * @example datetime().withoutTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00.000Z\"` (ISO 8601 UTC)\n */\n withoutTimezone(): this {\n this._subtype = \"dateTimeWithoutTimezone\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithoutTimezone\"\n };\n return this;\n }\n\n /**\n * Month and year picker.\n * @example datetime().monthOnly()\n *\n * Value format: `\"2026-05\"` (YYYY-MM)\n */\n monthOnly(): this {\n this._subtype = \"month\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"month\" };\n return this;\n }\n\n /**\n * ISO week picker. Selecting any day highlights and selects the full week.\n * @example\n * datetime().weekOnly()\n * datetime().weekOnly({ startsOn: 1 }) // weeks start on Monday\n *\n * Value format: `\"2026-W18\"` (YYYY-Www)\n */\n weekOnly(options?: { startsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): this {\n this._subtype = \"week\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"week\",\n ...(options?.startsOn !== undefined && { weekStartsOn: options.startsOn })\n };\n return this;\n }\n\n /**\n * Year picker with a scrollable grid.\n * @example\n * datetime().yearOnly()\n * datetime().yearOnly({ range: [2010, 2030] })\n *\n * Value format: `2026` (number)\n */\n yearOnly(options?: { range?: [number, number] }): this {\n this._subtype = \"year\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"year\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Date range picker with a two-month calendar.\n * @example datetime().dateRange()\n *\n * Value format: `{ from: \"2026-05-01\", to: \"2026-05-15\" }`\n */\n dateRange(): this {\n this._subtype = \"dateRange\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"dateRange\" };\n return this;\n }\n\n /**\n * Select multiple individual dates.\n * @example datetime().multipleDates()\n *\n * Value format: `[\"2026-05-01\", \"2026-05-03\"]`\n */\n multipleDates(): this {\n this._subtype = \"multipleDates\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleDates\"\n };\n return this;\n }\n\n /**\n * Select multiple months.\n * @example datetime().multipleMonths()\n *\n * Value format: `[\"2026-01\", \"2026-03\"]`\n */\n multipleMonths(): this {\n this._subtype = \"multipleMonths\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleMonths\"\n };\n return this;\n }\n\n /**\n * Select multiple years.\n * @example\n * datetime().multipleYears()\n * datetime().multipleYears({ range: [2020, 2035] })\n *\n * Value format: `[2024, 2025, 2026]`\n */\n multipleYears(options?: { range?: [number, number] }): this {\n this._subtype = \"multipleYears\";\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleYears\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Add quick-select preset buttons to the picker. Available on all variants.\n * Each preset's `value` function is called at click time, and the variant\n * handles formatting the Date into its value type.\n * @example\n * datetime().dateOnly().presets([\n * { label: \"Today\", value: () => new Date() },\n * { label: \"In a week\", value: () => addDays(new Date(), 7) }\n * ])\n */\n presets(presets: Array<{ label: string; value: () => Date }>): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, presets };\n return this;\n }\n\n /**\n * Customize the display format shown in the picker trigger.\n * Uses date-fns format tokens.\n * @example\n * datetime().dateOnly().displayFormat(\"MM/dd/yyyy\") // \"05/01/2026\"\n * datetime().dateOnly().displayFormat(\"dd MMM yyyy\") // \"01 May 2026\"\n * datetime().monthOnly().displayFormat(\"MMMM yyyy\") // \"May 2026\"\n */\n displayFormat(format: string): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, displayFormat: format };\n return this;\n }\n\n override normalizeValue(value: unknown): unknown {\n if (value == null || value === \"\") {\n return value;\n }\n switch (this._subtype) {\n case \"date\":\n return normalizeDateOnly(String(value));\n case \"time\":\n return normalizeTime(String(value));\n case \"dateTimeWithoutTimezone\":\n return normalizeDateTimeWithoutTimezone(String(value));\n case \"dateTimeWithTimezone\":\n return normalizeDateTimeWithTimezone(String(value));\n case \"month\":\n return normalizeMonth(String(value));\n case \"week\":\n return normalizeWeek(String(value));\n case \"year\":\n return normalizeYear(value);\n case \"dateRange\":\n case \"multipleDates\":\n case \"multipleMonths\":\n return value;\n case \"multipleYears\":\n return normalizeMultipleYears(value);\n default:\n return value;\n }\n }\n}\n\nfunction normalizeDateOnly(value: string): string {\n try {\n return new Date(value).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n}\n\nfunction normalizeTime(value: string): string {\n if (!value.includes(\":\")) {\n return value;\n }\n const parts = value.split(\":\");\n if (parts.length === 3) {\n return value;\n }\n if (parts.length === 2) {\n return `${value}:00`;\n }\n return value;\n}\n\nfunction normalizeDateTimeWithoutTimezone(value: string): string {\n if (!value.includes(\" \") && !value.includes(\"T\")) {\n return value;\n }\n try {\n const normalized = value.includes(\" \") ? value.replace(\" \", \"T\") : value;\n const withZ =\n normalized.endsWith(\"Z\") ||\n normalized.includes(\"+\") ||\n /\\d-\\d{2}:\\d{2}$/.test(normalized)\n ? normalized\n : `${normalized}.000Z`;\n return new Date(withZ).toISOString();\n } catch {\n return value;\n }\n}\n\nfunction normalizeDateTimeWithTimezone(value: string): string {\n if (!value.includes(\"T\")) {\n return value;\n }\n const [initialDate, rest] = value.split(\"T\");\n if (!rest) {\n return value;\n }\n\n let date: string;\n try {\n date = new Date(initialDate).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n\n const sign = rest.includes(\"+\") ? \"+\" : \"-\";\n const [timePart, tz] = rest.split(sign);\n const time = normalizeTime(timePart);\n\n return `${date}T${time}${sign}${tz}`;\n}\n\nfunction normalizeMonth(value: string): string {\n if (/^\\d{4}-\\d{2}$/.test(value)) {\n return value;\n }\n try {\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n return `${y}-${m}`;\n } catch {\n return value;\n }\n}\n\nfunction normalizeWeek(value: string): string {\n if (/^\\d{4}-W\\d{2}$/.test(value)) {\n return value;\n }\n return value;\n}\n\nfunction normalizeYear(value: unknown): number | unknown {\n const num = Number(value);\n if (!Number.isNaN(num) && Number.isFinite(num)) {\n return Math.round(num);\n }\n return value;\n}\n\nfunction normalizeMultipleYears(value: unknown): unknown {\n if (!Array.isArray(value)) {\n return value;\n }\n return value.map(v => {\n const num = Number(v);\n return !Number.isNaN(num) && Number.isFinite(num) ? Math.round(num) : v;\n });\n}\n\nclass DateTimeFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"datetime\";\n create(_registry: any) {\n return new DateTimeFieldBuilder();\n }\n}\n\nexport const DateTimeFieldType = FieldType.createImplementation({\n implementation: DateTimeFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n /**\n * Defines a field that stores date and/or time values.\n *\n * Variant methods (pick one):\n * - `dateOnly()` — \"2026-05-01\"\n * - `timeOnly()` — \"14:30:00\"\n * - `withoutTimezone()` — \"2026-05-01T14:30:00.000Z\"\n * - `withTimezone()` — \"2026-05-01T14:30:00+02:00\"\n * - `monthOnly()` — \"2026-05\"\n * - `weekOnly()` — \"2026-W18\"\n * - `yearOnly()` — 2026\n * - `dateRange()` — { from: \"2026-05-01\", to: \"2026-05-15\" }\n * - `multipleDates()` — [\"2026-05-01\", \"2026-05-03\"]\n * - `multipleMonths()` — [\"2026-01\", \"2026-03\"]\n * - `multipleYears()` — [2024, 2025, 2026]\n *\n * Configuration methods (chain after variant):\n * - `.presets([...])` — quick-select buttons (all variants)\n * - `.displayFormat(\"MM/dd/yyyy\")` — customize trigger display\n *\n * Variant-specific options (passed to variant method):\n * - `yearOnly({ range: [2020, 2030] })` — year range\n * - `multipleYears({ range: [2020, 2035] })` — year range\n * - `weekOnly({ startsOn: 1 })` — first day of week (0=Sun, 1=Mon)\n *\n * @example\n * datetime() // full UTC datetime (default)\n * datetime().dateOnly() // birthdays, due dates, holidays\n * datetime().timeOnly() // opening hours, daily reminders\n * datetime().withTimezone() // events tied to a specific locale\n * datetime().withoutTimezone() // timestamps, logs, sortable moments\n * datetime().monthOnly() // billing cycles, report periods\n * datetime().weekOnly() // sprint planning, weekly schedules\n * datetime().yearOnly({ range: [2010, 2030] }) // fiscal years\n * datetime().dateRange() // vacation requests, booking windows\n * datetime().multipleDates() // blackout dates, recurring events\n * datetime().multipleMonths() // seasonal availability\n * datetime().multipleYears({ range: [2020, 2035] }) // multi-year budgets\n * datetime().dateOnly().presets([...]).displayFormat(\"dd/MM/yyyy\")\n */\n datetime(): DateTimeFieldBuilder;\n }\n}\n"],"names":["DateTimeFieldBuilder","FieldBuilder","options","undefined","presets","format","value","normalizeDateOnly","String","normalizeTime","normalizeDateTimeWithoutTimezone","normalizeDateTimeWithTimezone","normalizeMonth","normalizeWeek","normalizeYear","normalizeMultipleYears","Date","parts","normalized","withZ","initialDate","rest","date","sign","timePart","tz","time","d","y","m","num","Number","Math","Array","v","DateTimeFieldTypeFactory","_registry","DateTimeFieldType","FieldType"],"mappings":"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"}
1
+ {"version":3,"file":"features/formModel/fieldTypes/DateTimeFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/DateTimeFieldType.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { FieldType, type IFieldConfig, type IFieldTypeFactory } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\nimport { DateFormatter } from \"~/features/dateFormatter/abstractions.js\";\nimport {\n createDateLimitsSchema,\n type DateBound,\n type DateLimitFormatter,\n type IDateLimit,\n type IDateLimits\n} from \"./dateLimits.js\";\n\ntype DateTimeSubtype =\n | \"date\"\n | \"time\"\n | \"dateTimeWithTimezone\"\n | \"dateTimeWithoutTimezone\"\n | \"month\"\n | \"week\"\n | \"year\"\n | \"dateRange\"\n | \"multipleDates\"\n | \"multipleMonths\"\n | \"multipleYears\";\n\nexport class DateTimeFieldBuilder extends FieldBuilder<\"datetime\"> {\n private _subtype: DateTimeSubtype = \"date\";\n private _dateGte: IDateLimit[] = [];\n private _dateLte: IDateLimit[] = [];\n\n /**\n * @param dateFormatter shows a limit in its message's `{date}` in the admin's date format;\n * without it, the limit shows as it is stored.\n */\n constructor(private readonly dateFormatter?: DateFormatter.Interface) {\n super(\"datetime\");\n this._config.renderer = \"dateTimeInput\";\n this._config.rendererSettings = { type: \"date\" };\n }\n\n override list(): this {\n super.list();\n this._config.renderer = \"dateTimeInputs\";\n return this;\n }\n\n /** Subtype methods reset the renderer; a list field keeps the list renderer. */\n private _defaultRenderer(): \"dateTimeInput\" | \"dateTimeInputs\" {\n return this._config.isList ? \"dateTimeInputs\" : \"dateTimeInput\";\n }\n\n /**\n * Calendar date only.\n * @example\n * datetime().dateOnly()\n * // day, then month, then year; suits dates far in the past, like a date of birth.\n * // The picker offers only the dates the `dateGte`/`dateLte` limits allow.\n * datetime()\n * .dateOnly()\n * .dateGte({ expression: \"today-100y\" })\n * .dateLte({ expression: \"today-18y\" }, \"You must be 18 or older.\")\n * .renderer(\"birthdayInput\")\n *\n * Value format: `\"2026-05-01\"` (YYYY-MM-DD)\n */\n dateOnly(): this {\n this._subtype = \"date\";\n this._config.renderer =\n this._isBirthdayPicker() && !this._config.isList\n ? \"birthdayInput\"\n : this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"date\" };\n return this;\n }\n\n /**\n * The CMS form sets a field's renderer before its subtype, so a birthday picker set\n * earlier survives `dateOnly()`, since it renders the same value. Every other subtype\n * resets it.\n */\n private _isBirthdayPicker(): boolean {\n return this._config.renderer === \"birthdayInput\";\n }\n\n /**\n * Time only, no date component.\n * @example datetime().timeOnly()\n *\n * Value format: `\"14:30:00\"` (HH:mm:ss)\n */\n timeOnly(): this {\n this._subtype = \"time\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"time\" };\n return this;\n }\n\n /**\n * Date and time with explicit timezone offset.\n * @example datetime().withTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00+02:00\"` (ISO 8601 with offset)\n */\n withTimezone(): this {\n this._subtype = \"dateTimeWithTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithTimezone\"\n };\n return this;\n }\n\n /**\n * Date and time in UTC, no timezone offset.\n * @example datetime().withoutTimezone()\n *\n * Value format: `\"2026-05-01T14:30:00.000Z\"` (ISO 8601 UTC)\n */\n withoutTimezone(): this {\n this._subtype = \"dateTimeWithoutTimezone\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"dateTimeWithoutTimezone\"\n };\n return this;\n }\n\n /**\n * Month and year picker.\n * @example datetime().monthOnly()\n *\n * Value format: `\"2026-05\"` (YYYY-MM)\n */\n monthOnly(): this {\n this._subtype = \"month\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"month\" };\n return this;\n }\n\n /**\n * ISO week picker. Selecting any day highlights and selects the full week.\n * @example\n * datetime().weekOnly()\n * datetime().weekOnly({ startsOn: 1 }) // weeks start on Monday\n *\n * Value format: `\"2026-W18\"` (YYYY-Www)\n */\n weekOnly(options?: { startsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 }): this {\n this._subtype = \"week\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"week\",\n ...(options?.startsOn !== undefined && { weekStartsOn: options.startsOn })\n };\n return this;\n }\n\n /**\n * Year picker with a scrollable grid.\n * @example\n * datetime().yearOnly()\n * datetime().yearOnly({ range: [2010, 2030] })\n *\n * Value format: `2026` (number)\n */\n yearOnly(options?: { range?: [number, number] }): this {\n this._subtype = \"year\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"year\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Date range picker with a two-month calendar.\n * @example datetime().dateRange()\n *\n * Value format: `{ from: \"2026-05-01\", to: \"2026-05-15\" }`\n */\n dateRange(): this {\n this._subtype = \"dateRange\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = { ...this._config.rendererSettings, type: \"dateRange\" };\n return this;\n }\n\n /**\n * Select multiple individual dates.\n * @example datetime().multipleDates()\n *\n * Value format: `[\"2026-05-01\", \"2026-05-03\"]`\n */\n multipleDates(): this {\n this._subtype = \"multipleDates\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleDates\"\n };\n return this;\n }\n\n /**\n * Select multiple months.\n * @example datetime().multipleMonths()\n *\n * Value format: `[\"2026-01\", \"2026-03\"]`\n */\n multipleMonths(): this {\n this._subtype = \"multipleMonths\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleMonths\"\n };\n return this;\n }\n\n /**\n * Select multiple years.\n * @example\n * datetime().multipleYears()\n * datetime().multipleYears({ range: [2020, 2035] })\n *\n * Value format: `[2024, 2025, 2026]`\n */\n multipleYears(options?: { range?: [number, number] }): this {\n this._subtype = \"multipleYears\";\n this._config.renderer = this._defaultRenderer();\n this._config.rendererSettings = {\n ...this._config.rendererSettings,\n type: \"multipleYears\",\n ...(options?.range && { yearRange: options.range })\n };\n return this;\n }\n\n /**\n * Add quick-select preset buttons to the picker. Available on all variants.\n * Each preset's `value` function is called at click time, and the variant\n * handles formatting the Date into its value type.\n * @example\n * datetime().dateOnly().presets([\n * { label: \"Today\", value: () => new Date() },\n * { label: \"In a week\", value: () => addDays(new Date(), 7) }\n * ])\n */\n presets(presets: Array<{ label: string; value: () => Date }>): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, presets };\n return this;\n }\n\n /**\n * The value must be on or after the given one: a fixed value, or, on a date-only field, an\n * expression worked out from the editor's local date every time the value is checked.\n * Expressions: `today`, or `today` plus or minus a number of days (`d`), months (`m`) or\n * years (`y`). The birthday picker offers only the dates the limits allow.\n * @example\n * datetime().dateOnly().dateGte(\"1900-01-01\")\n * datetime().dateOnly().dateGte({ expression: \"today-100y\" }) // not older than 100 years\n * datetime().dateOnly().dateGte({ expression: \"today+1d\" }, \"Pick a date in the future.\")\n */\n dateGte(bound: DateBound, message?: string): this {\n this._dateGte.push({ bound, message });\n return this;\n }\n\n /**\n * The value must be on or before the given one: a fixed value, or, on a date-only field, an\n * expression worked out from the editor's local date every time the value is checked.\n * In `message`, `{date}` is the limit in the admin's date format; the default message is\n * \"Must be on or before {date}.\" (`dateGte`: \"Must be on or after {date}.\").\n * @example\n * datetime().dateOnly().dateLte(\"2026-12-31\")\n * datetime()\n * .dateOnly()\n * .dateLte({ expression: \"today-18y\" }, \"You must be 18 or older.\")\n * .renderer(\"birthdayInput\")\n */\n dateLte(bound: DateBound, message?: string): this {\n this._dateLte.push({ bound, message });\n return this;\n }\n\n /**\n * The limits are applied here, so a `renderer()` or `schema()` call after `dateGte()` or\n * `dateLte()` doesn't drop them: the check runs after the field's own schema, and the\n * renderer finds them in `rendererSettings.dateLimits`.\n */\n override build(name: string): IFieldConfig {\n const config = super.build(name);\n if (this._dateGte.length === 0 && this._dateLte.length === 0) {\n return config;\n }\n const dateLimits: IDateLimits = {\n gte: this._dateGte.map(limit => limit.bound),\n lte: this._dateLte.map(limit => limit.bound)\n };\n const limitsSchema = createDateLimitsSchema(\n this._dateGte,\n this._dateLte,\n this._formatDateLimit()\n );\n return {\n ...config,\n rendererSettings: { ...config.rendererSettings, dateLimits },\n schema: config.schema ? z.intersection(config.schema, limitsSchema) : limitsSchema\n };\n }\n\n /** A limit in the admin's date format: the date alone on a date-only field. */\n private _formatDateLimit(): DateLimitFormatter | undefined {\n const formatter = this.dateFormatter;\n if (!formatter) {\n return undefined;\n }\n switch (this._subtype) {\n case \"date\":\n // A `YYYY-MM-DD` limit is midnight UTC, so it's shown in UTC to keep its day.\n return date =>\n formatter.format(date, {\n hour: undefined,\n minute: undefined,\n timeZone: \"UTC\"\n });\n case \"dateTimeWithTimezone\":\n case \"dateTimeWithoutTimezone\":\n return date => formatter.format(date);\n default:\n return undefined;\n }\n }\n\n /**\n * Customize the display format shown in the picker trigger.\n * Uses date-fns format tokens.\n * @example\n * datetime().dateOnly().displayFormat(\"MM/dd/yyyy\") // \"05/01/2026\"\n * datetime().dateOnly().displayFormat(\"dd MMM yyyy\") // \"01 May 2026\"\n * datetime().monthOnly().displayFormat(\"MMMM yyyy\") // \"May 2026\"\n */\n displayFormat(format: string): this {\n this._config.rendererSettings = { ...this._config.rendererSettings, displayFormat: format };\n return this;\n }\n\n override normalizeValue(value: unknown): unknown {\n if (value == null || value === \"\") {\n return value;\n }\n switch (this._subtype) {\n case \"date\":\n return normalizeDateOnly(String(value));\n case \"time\":\n return normalizeTime(String(value));\n case \"dateTimeWithoutTimezone\":\n return normalizeDateTimeWithoutTimezone(String(value));\n case \"dateTimeWithTimezone\":\n return normalizeDateTimeWithTimezone(String(value));\n case \"month\":\n return normalizeMonth(String(value));\n case \"week\":\n return normalizeWeek(String(value));\n case \"year\":\n return normalizeYear(value);\n case \"dateRange\":\n case \"multipleDates\":\n case \"multipleMonths\":\n return value;\n case \"multipleYears\":\n return normalizeMultipleYears(value);\n default:\n return value;\n }\n }\n}\n\nfunction normalizeDateOnly(value: string): string {\n try {\n return new Date(value).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n}\n\nfunction normalizeTime(value: string): string {\n if (!value.includes(\":\")) {\n return value;\n }\n const parts = value.split(\":\");\n if (parts.length === 3) {\n return value;\n }\n if (parts.length === 2) {\n return `${value}:00`;\n }\n return value;\n}\n\nfunction normalizeDateTimeWithoutTimezone(value: string): string {\n if (!value.includes(\" \") && !value.includes(\"T\")) {\n return value;\n }\n try {\n const normalized = value.includes(\" \") ? value.replace(\" \", \"T\") : value;\n const withZ =\n normalized.endsWith(\"Z\") ||\n normalized.includes(\"+\") ||\n /\\d-\\d{2}:\\d{2}$/.test(normalized)\n ? normalized\n : `${normalized}.000Z`;\n return new Date(withZ).toISOString();\n } catch {\n return value;\n }\n}\n\nfunction normalizeDateTimeWithTimezone(value: string): string {\n if (!value.includes(\"T\")) {\n return value;\n }\n const [initialDate, rest] = value.split(\"T\");\n if (!rest) {\n return value;\n }\n\n const match = rest.match(/^(.+?)(Z|[+-]\\d{2}:\\d{2})$/);\n if (!match) {\n return value;\n }\n const [, timePart, zone] = match;\n\n let date: string;\n try {\n date = new Date(initialDate).toISOString().slice(0, 10);\n } catch {\n return value;\n }\n\n // A UTC value is valid; express it with the explicit offset the API expects.\n const tz = zone === \"Z\" ? \"+00:00\" : zone;\n\n return `${date}T${normalizeTime(timePart)}${tz}`;\n}\n\nfunction normalizeMonth(value: string): string {\n if (/^\\d{4}-\\d{2}$/.test(value)) {\n return value;\n }\n try {\n const d = new Date(value);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n return `${y}-${m}`;\n } catch {\n return value;\n }\n}\n\nfunction normalizeWeek(value: string): string {\n if (/^\\d{4}-W\\d{2}$/.test(value)) {\n return value;\n }\n return value;\n}\n\nfunction normalizeYear(value: unknown): number | unknown {\n const num = Number(value);\n if (!Number.isNaN(num) && Number.isFinite(num)) {\n return Math.round(num);\n }\n return value;\n}\n\nfunction normalizeMultipleYears(value: unknown): unknown {\n if (!Array.isArray(value)) {\n return value;\n }\n return value.map(v => {\n const num = Number(v);\n return !Number.isNaN(num) && Number.isFinite(num) ? Math.round(num) : v;\n });\n}\n\nclass DateTimeFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"datetime\";\n\n constructor(private readonly dateFormatter?: DateFormatter.Interface) {}\n\n create(_registry: any) {\n return new DateTimeFieldBuilder(this.dateFormatter);\n }\n}\n\nexport const DateTimeFieldType = FieldType.createImplementation({\n implementation: DateTimeFieldTypeFactory,\n dependencies: [[DateFormatter, { optional: true }]]\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n /**\n * Defines a field that stores date and/or time values.\n *\n * Variant methods (pick one):\n * - `dateOnly()` — \"2026-05-01\"\n * - `timeOnly()` — \"14:30:00\"\n * - `withoutTimezone()` — \"2026-05-01T14:30:00.000Z\"\n * - `withTimezone()` — \"2026-05-01T14:30:00+02:00\"\n * - `monthOnly()` — \"2026-05\"\n * - `weekOnly()` — \"2026-W18\"\n * - `yearOnly()` — 2026\n * - `dateRange()` — { from: \"2026-05-01\", to: \"2026-05-15\" }\n * - `multipleDates()` — [\"2026-05-01\", \"2026-05-03\"]\n * - `multipleMonths()` — [\"2026-01\", \"2026-03\"]\n * - `multipleYears()` — [2024, 2025, 2026]\n *\n * Configuration methods (chain after variant):\n * - `.presets([...])` — quick-select buttons (all variants)\n * - `.displayFormat(\"MM/dd/yyyy\")` — customize trigger display\n * - `.dateGte(bound)` / `.dateLte(bound)` — limits: a fixed value, or\n * `{ expression: \"today-18y\" }` on a date-only field\n *\n * Variant-specific options (passed to variant method):\n * - `yearOnly({ range: [2020, 2030] })` — year range\n * - `multipleYears({ range: [2020, 2035] })` — year range\n * - `weekOnly({ startsOn: 1 })` — first day of week (0=Sun, 1=Mon)\n *\n * @example\n * datetime() // full UTC datetime (default)\n * datetime().dateOnly() // due dates, holidays\n * datetime().dateOnly().renderer(\"birthdayInput\") // dates of birth\n * datetime().dateOnly().dateLte({ expression: \"today-18y\" }) // 18 or older\n * datetime().timeOnly() // opening hours, daily reminders\n * datetime().withTimezone() // events tied to a specific locale\n * datetime().withoutTimezone() // timestamps, logs, sortable moments\n * datetime().monthOnly() // billing cycles, report periods\n * datetime().weekOnly() // sprint planning, weekly schedules\n * datetime().yearOnly({ range: [2010, 2030] }) // fiscal years\n * datetime().dateRange() // vacation requests, booking windows\n * datetime().multipleDates() // blackout dates, recurring events\n * datetime().multipleMonths() // seasonal availability\n * datetime().multipleYears({ range: [2020, 2035] }) // multi-year budgets\n * datetime().dateOnly().presets([...]).displayFormat(\"dd/MM/yyyy\")\n */\n datetime(): DateTimeFieldBuilder;\n }\n}\n"],"names":["DateTimeFieldBuilder","FieldBuilder","dateFormatter","options","undefined","presets","bound","message","name","config","dateLimits","limit","limitsSchema","createDateLimitsSchema","z","formatter","date","format","value","normalizeDateOnly","String","normalizeTime","normalizeDateTimeWithoutTimezone","normalizeDateTimeWithTimezone","normalizeMonth","normalizeWeek","normalizeYear","normalizeMultipleYears","Date","parts","normalized","withZ","initialDate","rest","match","timePart","zone","tz","d","y","m","num","Number","Math","Array","v","DateTimeFieldTypeFactory","_registry","DateTimeFieldType","FieldType","DateFormatter"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { z } from "zod";
2
- import { type IFieldTypeFactory, type IFieldBuilder, type IFieldBuilderRegistry, type IObjectFieldBuilder, type IObjectFieldConfig, type ITemplateBuilder, type ITemplateConfig } from "../abstractions.js";
2
+ import { type IFieldTypeFactory, type IFieldBuilder, type IFieldBuilderRegistry, type ILayoutBuilder, type ILayoutNodeBuilder, type IObjectFieldBuilder, type IObjectFieldConfig, type ITemplateBuilder, type ITemplateConfig } from "../abstractions.js";
3
3
  import { FieldBuilder } from "../FieldBuilder.js";
4
4
  interface TemplateBuilderInternal extends ITemplateBuilder {
5
5
  _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;
@@ -11,12 +11,14 @@ export declare class ObjectFieldBuilder extends FieldBuilder<"object"> implement
11
11
  private _listSchema?;
12
12
  private _templates?;
13
13
  private _templateIds;
14
+ private _layout?;
14
15
  private _registry;
15
16
  constructor(registry: IFieldBuilderRegistry);
16
17
  fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this;
17
18
  list(): this;
18
19
  listSchema(schema: z.ZodTypeAny): this;
19
20
  template(id: string, configure: (t: ITemplateBuilder) => void): this;
21
+ layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this;
20
22
  build(name: string): IObjectFieldConfig;
21
23
  }
22
24
  declare class ObjectFieldTypeFactory implements IFieldTypeFactory {
@@ -1,15 +1,25 @@
1
1
  import { FieldType } from "../abstractions.js";
2
2
  import { FieldBuilder } from "../FieldBuilder.js";
3
+ import { LayoutBuilderFactory } from "../LayoutBuilderFactory.js";
4
+ function resolveInnerLayout(factory) {
5
+ return LayoutBuilderFactory.resolveObjectInner(factory);
6
+ }
3
7
  function createTemplateBuilder() {
4
8
  let label = "";
9
+ let description;
5
10
  let icon;
6
11
  let fieldsFactory;
12
+ let layout;
7
13
  let visibleFn;
8
14
  const builder = {
9
15
  label (text) {
10
16
  label = text;
11
17
  return builder;
12
18
  },
19
+ description (text) {
20
+ description = text;
21
+ return builder;
22
+ },
13
23
  icon (i) {
14
24
  icon = i;
15
25
  return builder;
@@ -18,6 +28,10 @@ function createTemplateBuilder() {
18
28
  fieldsFactory = factory;
19
29
  return builder;
20
30
  },
31
+ layout (factory) {
32
+ layout = resolveInnerLayout(factory);
33
+ return builder;
34
+ },
21
35
  visible (predicate) {
22
36
  visibleFn = predicate;
23
37
  return builder;
@@ -29,8 +43,10 @@ function createTemplateBuilder() {
29
43
  return {
30
44
  id,
31
45
  label,
46
+ description,
32
47
  icon,
33
48
  childBuilders,
49
+ layout,
34
50
  visible: visibleFn
35
51
  };
36
52
  }
@@ -67,15 +83,21 @@ class ObjectFieldBuilder extends FieldBuilder {
67
83
  if ("objectAccordionSingle" === this._config.renderer || "objectAccordionMultiple" === this._config.renderer) this._config.renderer = "dynamicZone";
68
84
  return this;
69
85
  }
86
+ layout(factory) {
87
+ this._layout = resolveInnerLayout(factory);
88
+ return this;
89
+ }
70
90
  build(name) {
71
91
  this._config.name = name;
72
92
  if (this._templates && Object.keys(this._childBuilders).length > 0) throw new Error(`Object field "${name}" has both .fields() and .template() defined. Templates are mutually exclusive with .fields(); each template defines its own children.`);
93
+ if (this._templates && this._layout) throw new Error(`Object field "${name}" has both .layout() and .template() defined. Templated objects declare their layouts per template.`);
73
94
  return {
74
95
  ...this._config,
75
96
  childBuilders: this._childBuilders,
76
97
  isList: this._isList,
77
98
  listSchema: this._listSchema,
78
- templates: this._templates
99
+ templates: this._templates,
100
+ layout: this._layout
79
101
  };
80
102
  }
81
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, icon, childBuilders, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["createTemplateBuilder","label","icon","fieldsFactory","visibleFn","builder","text","i","factory","predicate","id","registry","childBuilders","Error","fieldName","Object","ObjectFieldBuilder","FieldBuilder","Set","fn","schema","configure","tb","name","ObjectFieldTypeFactory","ObjectFieldType","FieldType"],"mappings":";;AAmBO,SAASA;IACZ,IAAIC,QAAQ;IACZ,IAAIC;IACJ,IAAIC;IAGJ,IAAIC;IAEJ,MAAMC,UAAmC;QACrC,OAAMC,IAAY;YACdL,QAAQK;YACR,OAAOD;QACX;QACA,MAAKE,CAAgB;YACjBL,OAAOK;YACP,OAAOF;QACX;QACA,QAAOG,OAAO;YACVL,gBAAgBK;YAChB,OAAOH;QACX;QACA,SAAQI,SAAS;YACbL,YAAYK;YACZ,OAAOJ;QACX;QACA,QAAOK,EAAU,EAAEC,QAA+B;YAC9C,MAAMC,gBAAgBT,gBAAgBA,cAAcQ,YAAY,CAAC;YACjE,IAAI,iBAAiBC,eACjB,MAAM,IAAIC,MACN,CAAC,UAAU,EAAEH,GAAG,mFAA0C,CAAC;YAInE,KAAK,MAAM,CAACI,WAAWT,QAAQ,IAAIU,OAAO,OAAO,CAACH,eAC9C,IAAIP,SACAA,QAAQ,KAAK,CAACS;YAGtB,OAAO;gBAAEJ;gBAAIT;gBAAOC;gBAAMU;gBAAe,SAASR;YAAU;QAChE;IACJ;IACA,OAAOC;AACX;AAEO,MAAMW,2BAA2BC;IAQpC,YAAYN,QAA+B,CAAE;QACzC,KAAK,CAAC,gBARF,cAAc,GAAkC,CAAC,QACjD,OAAO,GAAG,YAGV,YAAY,GAAG,IAAIO;QAKvB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;QACxB,IAAI,CAAC,SAAS,GAAGP;IACrB;IAEA,OAAOQ,EAAsE,EAAQ;QACjF,IAAI,CAAC,cAAc,GAAGA,GAAG,IAAI,CAAC,SAAS;QACvC,OAAO,IAAI;IACf;IAES,OAAa;QAClB,IAAI,CAAC,OAAO,GAAG;QACf,IAAI,AAA0B,4BAA1B,IAAI,CAAC,OAAO,CAAC,QAAQ,EACrB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;QAE5B,OAAO,IAAI;IACf;IAEA,WAAWC,MAAoB,EAAQ;QACnC,IAAI,CAAC,WAAW,GAAGA;QACnB,OAAO,IAAI;IACf;IAEA,SAASV,EAAU,EAAEW,SAAwC,EAAQ;QACjE,IAAIX,AAAO,kBAAPA,IACA,MAAM,IAAIG,MAAM;QAEpB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAACH,KACtB,MAAM,IAAIG,MAAM,CAAC,uBAAuB,EAAEH,GAAG,EAAE,CAAC;QAEpD,IAAI,CAAC,YAAY,CAAC,GAAG,CAACA;QAEtB,MAAMY,KAAKtB;QACXqB,UAAUC;QAEV,IAAI,CAAC,IAAI,CAAC,UAAU,EAChB,IAAI,CAAC,UAAU,GAAG,EAAE;QAExB,IAAI,CAAC,UAAU,CAAC,IAAI,CAACA,GAAG,MAAM,CAACZ,IAAI,IAAI,CAAC,SAAS;QAEjD,IACI,AAA0B,4BAA1B,IAAI,CAAC,OAAO,CAAC,QAAQ,IACrB,AAA0B,8BAA1B,IAAI,CAAC,OAAO,CAAC,QAAQ,EAErB,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG;QAG5B,OAAO,IAAI;IACf;IAES,MAAMa,IAAY,EAAsB;QAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,GAAGA;QAEpB,IAAI,IAAI,CAAC,UAAU,IAAIR,OAAO,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,GAC7D,MAAM,IAAIF,MACN,CAAC,cAAc,EAAEU,KAAK,sIAA8C,CAAC;QAK7E,OAAO;YACH,GAAG,IAAI,CAAC,OAAO;YACf,eAAe,IAAI,CAAC,cAAc;YAClC,QAAQ,IAAI,CAAC,OAAO;YACpB,YAAY,IAAI,CAAC,WAAW;YAC5B,WAAW,IAAI,CAAC,UAAU;QAC9B;IACJ;AACJ;AAEA,MAAMC;IAEF,OAAOb,QAA+B,EAAE;QACpC,OAAO,IAAIK,mBAAmBL;IAClC;;aAHS,IAAI,GAAG;;AAIpB;AAEO,MAAMc,kBAAkBC,UAAU,oBAAoB,CAAC;IAC1D,gBAAgBF;IAChB,cAAc,EAAE;AACpB"}
1
+ {"version":3,"file":"features/formModel/fieldTypes/ObjectFieldType.js","sources":["../../../../src/features/formModel/fieldTypes/ObjectFieldType.ts"],"sourcesContent":["import type { z } from \"zod\";\nimport {\n FieldType,\n type IFieldTypeFactory,\n type IFieldBuilder,\n type IFieldBuilderRegistry,\n type ILayoutBuilder,\n type ILayoutNodeBuilder,\n type IObjectFieldBuilder,\n type IObjectFieldConfig,\n type ITemplateBuilder,\n type ITemplateConfig,\n type ITemplateIcon,\n type LayoutNode\n} from \"../abstractions.js\";\nimport type { IFormModel } from \"../abstractions.js\";\nimport { FieldBuilder } from \"../FieldBuilder.js\";\nimport { LayoutBuilderFactory } from \"../LayoutBuilderFactory.js\";\n\nfunction resolveInnerLayout(\n factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]\n): LayoutNode[] {\n return LayoutBuilderFactory.resolveObjectInner(factory) as LayoutNode[];\n}\n\ninterface TemplateBuilderInternal extends ITemplateBuilder {\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig;\n}\n\nexport function createTemplateBuilder(): TemplateBuilderInternal {\n let label = \"\";\n let description: string | undefined;\n let icon: ITemplateIcon | undefined;\n let fieldsFactory:\n | ((registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>)\n | undefined;\n let layout: LayoutNode[] | undefined;\n let visibleFn: ((form: IFormModel) => boolean) | undefined;\n\n const builder: TemplateBuilderInternal = {\n label(text: string) {\n label = text;\n return builder;\n },\n description(text: string) {\n description = text;\n return builder;\n },\n icon(i: ITemplateIcon) {\n icon = i;\n return builder;\n },\n fields(factory) {\n fieldsFactory = factory;\n return builder;\n },\n layout(factory) {\n layout = resolveInnerLayout(factory);\n return builder;\n },\n visible(predicate) {\n visibleFn = predicate;\n return builder;\n },\n _build(id: string, registry: IFieldBuilderRegistry): ITemplateConfig {\n const childBuilders = fieldsFactory ? fieldsFactory(registry) : {};\n if (\"_templateId\" in childBuilders) {\n throw new Error(\n `Template \"${id}\" defines a reserved field \"_templateId\". ` +\n `The discriminator is added automatically.`\n );\n }\n for (const [fieldName, builder] of Object.entries(childBuilders)) {\n if (builder) {\n builder.build(fieldName);\n }\n }\n return { id, label, description, icon, childBuilders, layout, visible: visibleFn };\n }\n };\n return builder;\n}\n\nexport class ObjectFieldBuilder extends FieldBuilder<\"object\"> implements IObjectFieldBuilder {\n private _childBuilders: Record<string, IFieldBuilder> = {};\n private _isList = false;\n private _listSchema?: z.ZodTypeAny;\n private _templates?: ITemplateConfig[];\n private _templateIds = new Set<string>();\n private _layout?: LayoutNode[];\n private _registry: IFieldBuilderRegistry;\n\n constructor(registry: IFieldBuilderRegistry) {\n super(\"object\");\n this._config.renderer = \"objectAccordionSingle\";\n this._registry = registry;\n }\n\n fields(fn: (registry: IFieldBuilderRegistry) => Record<string, IFieldBuilder>): this {\n this._childBuilders = fn(this._registry);\n return this;\n }\n\n override list(): this {\n this._isList = true;\n if (this._config.renderer === \"objectAccordionSingle\") {\n this._config.renderer = \"objectAccordionMultiple\";\n }\n return this;\n }\n\n listSchema(schema: z.ZodTypeAny): this {\n this._listSchema = schema;\n return this;\n }\n\n template(id: string, configure: (t: ITemplateBuilder) => void): this {\n if (id === \"_templateId\") {\n throw new Error(`Template id \"_templateId\" is reserved. Choose a different id.`);\n }\n if (this._templateIds.has(id)) {\n throw new Error(`Duplicate template id \"${id}\".`);\n }\n this._templateIds.add(id);\n\n const tb = createTemplateBuilder();\n configure(tb);\n\n if (!this._templates) {\n this._templates = [];\n }\n this._templates.push(tb._build(id, this._registry));\n\n if (\n this._config.renderer === \"objectAccordionSingle\" ||\n this._config.renderer === \"objectAccordionMultiple\"\n ) {\n this._config.renderer = \"dynamicZone\";\n }\n\n return this;\n }\n\n layout(factory: (layout: ILayoutBuilder) => ILayoutNodeBuilder[]): this {\n this._layout = resolveInnerLayout(factory);\n return this;\n }\n\n override build(name: string): IObjectFieldConfig {\n this._config.name = name;\n\n if (this._templates && Object.keys(this._childBuilders).length > 0) {\n throw new Error(\n `Object field \"${name}\" has both .fields() and .template() defined. ` +\n `Templates are mutually exclusive with .fields(); each template defines its own children.`\n );\n }\n\n if (this._templates && this._layout) {\n throw new Error(\n `Object field \"${name}\" has both .layout() and .template() defined. ` +\n `Templated objects declare their layouts per template.`\n );\n }\n\n return {\n ...this._config,\n childBuilders: this._childBuilders,\n isList: this._isList,\n listSchema: this._listSchema,\n templates: this._templates,\n layout: this._layout\n };\n }\n}\n\nclass ObjectFieldTypeFactory implements IFieldTypeFactory {\n readonly type = \"object\";\n create(registry: IFieldBuilderRegistry) {\n return new ObjectFieldBuilder(registry);\n }\n}\n\nexport const ObjectFieldType = FieldType.createImplementation({\n implementation: ObjectFieldTypeFactory,\n dependencies: []\n});\n\ndeclare module \"../abstractions.js\" {\n interface IFieldBuilderRegistry {\n object(): IObjectFieldBuilder;\n }\n}\n"],"names":["resolveInnerLayout","factory","LayoutBuilderFactory","createTemplateBuilder","label","description","icon","fieldsFactory","layout","visibleFn","builder","text","i","predicate","id","registry","childBuilders","Error","fieldName","Object","ObjectFieldBuilder","FieldBuilder","Set","fn","schema","configure","tb","name","ObjectFieldTypeFactory","ObjectFieldType","FieldType"],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { z } from "zod";
2
+ import { type DateBound } from "@webiny/utils";
3
+ export type { DateBound };
4
+ export interface IDateLimit {
5
+ bound: DateBound;
6
+ message?: string;
7
+ }
8
+ /** A field's date limits, as `datetime()` hands them to its renderer in `rendererSettings`. */
9
+ export interface IDateLimits {
10
+ gte: DateBound[];
11
+ lte: DateBound[];
12
+ }
13
+ /** The resolved limits: the latest lower limit and the earliest upper one. */
14
+ export interface IResolvedDateLimits {
15
+ min?: string;
16
+ max?: string;
17
+ }
18
+ /**
19
+ * A field's limits as dates, with expressions worked out against `today` (the editor's local
20
+ * date by default). An expression that can't be read is left out.
21
+ */
22
+ export declare function resolveDateLimits(limits: IDateLimits | undefined, today?: string): IResolvedDateLimits;
23
+ /** Reads the limits `datetime()` put into a field's renderer settings. */
24
+ export declare function getDateLimits(rendererSettings: unknown): IDateLimits | undefined;
25
+ /** Shows a worked-out limit in a message; by default as it is stored (`2008-10-19`). */
26
+ export type DateLimitFormatter = (date: string) => string;
27
+ /** The message when a limit has none of its own. */
28
+ export declare const DEFAULT_DATE_GTE_MESSAGE = "Must be on or after {date}.";
29
+ export declare const DEFAULT_DATE_LTE_MESSAGE = "Must be on or before {date}.";
30
+ /** Puts the worked-out limit into a message's `{date}`. */
31
+ export declare function formatDateLimitMessage(message: string, date: string): string;
32
+ /**
33
+ * A schema that checks a value, or each value of a list, against the limits. Expressions are
34
+ * worked out against the editor's local date at the moment of the check, so a form left open
35
+ * overnight checks against the new day. A message's `{date}` is the worked-out limit.
36
+ */
37
+ export declare function createDateLimitsSchema(gte: IDateLimit[], lte: IDateLimit[], formatDate?: DateLimitFormatter): z.ZodTypeAny;
@@ -0,0 +1,64 @@
1
+ import { z } from "zod";
2
+ import { getLocalToday, resolveDateBound } from "@webiny/utils";
3
+ const describeBound = (bound)=>"string" == typeof bound ? bound : `"${bound.expression}"`;
4
+ function resolveDateLimits(limits, today = getLocalToday()) {
5
+ const resolve = (bounds = [])=>bounds.flatMap((bound)=>{
6
+ try {
7
+ return [
8
+ resolveDateBound(bound, today)
9
+ ];
10
+ } catch {
11
+ return [];
12
+ }
13
+ });
14
+ const gte = resolve(limits?.gte);
15
+ const lte = resolve(limits?.lte);
16
+ return {
17
+ min: gte.length ? gte.reduce((a, b)=>a > b ? a : b) : void 0,
18
+ max: lte.length ? lte.reduce((a, b)=>a < b ? a : b) : void 0
19
+ };
20
+ }
21
+ function getDateLimits(rendererSettings) {
22
+ if (!rendererSettings || "object" != typeof rendererSettings) return;
23
+ return rendererSettings.dateLimits;
24
+ }
25
+ const DEFAULT_DATE_GTE_MESSAGE = "Must be on or after {date}.";
26
+ const DEFAULT_DATE_LTE_MESSAGE = "Must be on or before {date}.";
27
+ function formatDateLimitMessage(message, date) {
28
+ return message.replace(/\{date}/g, date);
29
+ }
30
+ function createDateLimitsSchema(gte, lte, formatDate = (date)=>date) {
31
+ return z.any().superRefine((value, ctx)=>{
32
+ const values = (Array.isArray(value) ? value : [
33
+ value
34
+ ]).filter((v)=>null != v && "" !== v);
35
+ if (0 === values.length) return;
36
+ const today = getLocalToday();
37
+ const check = (limit, kind)=>{
38
+ let date;
39
+ try {
40
+ date = resolveDateBound(limit.bound, today);
41
+ } catch {
42
+ ctx.addIssue({
43
+ code: "custom",
44
+ message: `Invalid date limit ${describeBound(limit.bound)}.`
45
+ });
46
+ return false;
47
+ }
48
+ const ok = values.every((v)=>"gte" === kind ? String(v) >= date : String(v) <= date);
49
+ if (!ok) {
50
+ const message = limit.message || ("gte" === kind ? DEFAULT_DATE_GTE_MESSAGE : DEFAULT_DATE_LTE_MESSAGE);
51
+ ctx.addIssue({
52
+ code: "custom",
53
+ message: formatDateLimitMessage(message, formatDate(date))
54
+ });
55
+ }
56
+ return ok;
57
+ };
58
+ for (const limit of gte)if (!check(limit, "gte")) return;
59
+ for (const limit of lte)if (!check(limit, "lte")) return;
60
+ });
61
+ }
62
+ export { DEFAULT_DATE_GTE_MESSAGE, DEFAULT_DATE_LTE_MESSAGE, createDateLimitsSchema, formatDateLimitMessage, getDateLimits, resolveDateLimits };
63
+
64
+ //# sourceMappingURL=dateLimits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/formModel/fieldTypes/dateLimits.js","sources":["../../../../src/features/formModel/fieldTypes/dateLimits.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { getLocalToday, resolveDateBound, type DateBound } from \"@webiny/utils\";\n\nexport type { DateBound };\n\nexport interface IDateLimit {\n bound: DateBound;\n message?: string;\n}\n\n/** A field's date limits, as `datetime()` hands them to its renderer in `rendererSettings`. */\nexport interface IDateLimits {\n gte: DateBound[];\n lte: DateBound[];\n}\n\n/** The resolved limits: the latest lower limit and the earliest upper one. */\nexport interface IResolvedDateLimits {\n min?: string;\n max?: string;\n}\n\nconst describeBound = (bound: DateBound) =>\n typeof bound === \"string\" ? bound : `\"${bound.expression}\"`;\n\n/**\n * A field's limits as dates, with expressions worked out against `today` (the editor's local\n * date by default). An expression that can't be read is left out.\n */\nexport function resolveDateLimits(\n limits: IDateLimits | undefined,\n today: string = getLocalToday()\n): IResolvedDateLimits {\n const resolve = (bounds: DateBound[] = []) =>\n bounds.flatMap(bound => {\n try {\n return [resolveDateBound(bound, today)];\n } catch {\n return [];\n }\n });\n const gte = resolve(limits?.gte);\n const lte = resolve(limits?.lte);\n return {\n min: gte.length ? gte.reduce((a, b) => (a > b ? a : b)) : undefined,\n max: lte.length ? lte.reduce((a, b) => (a < b ? a : b)) : undefined\n };\n}\n\n/** Reads the limits `datetime()` put into a field's renderer settings. */\nexport function getDateLimits(rendererSettings: unknown): IDateLimits | undefined {\n if (!rendererSettings || typeof rendererSettings !== \"object\") {\n return undefined;\n }\n return (rendererSettings as { dateLimits?: IDateLimits }).dateLimits;\n}\n\n/** Shows a worked-out limit in a message; by default as it is stored (`2008-10-19`). */\nexport type DateLimitFormatter = (date: string) => string;\n\n/** The message when a limit has none of its own. */\nexport const DEFAULT_DATE_GTE_MESSAGE = \"Must be on or after {date}.\";\nexport const DEFAULT_DATE_LTE_MESSAGE = \"Must be on or before {date}.\";\n\n/** Puts the worked-out limit into a message's `{date}`. */\nexport function formatDateLimitMessage(message: string, date: string): string {\n return message.replace(/\\{date}/g, date);\n}\n\n/**\n * A schema that checks a value, or each value of a list, against the limits. Expressions are\n * worked out against the editor's local date at the moment of the check, so a form left open\n * overnight checks against the new day. A message's `{date}` is the worked-out limit.\n */\nexport function createDateLimitsSchema(\n gte: IDateLimit[],\n lte: IDateLimit[],\n formatDate: DateLimitFormatter = date => date\n): z.ZodTypeAny {\n return z.any().superRefine((value, ctx) => {\n const values = (Array.isArray(value) ? value : [value]).filter(\n v => v !== null && v !== undefined && v !== \"\"\n );\n if (values.length === 0) {\n return;\n }\n const today = getLocalToday();\n const check = (limit: IDateLimit, kind: \"gte\" | \"lte\") => {\n let date: string;\n try {\n date = resolveDateBound(limit.bound, today);\n } catch {\n ctx.addIssue({\n code: \"custom\",\n message: `Invalid date limit ${describeBound(limit.bound)}.`\n });\n return false;\n }\n const ok = values.every(v => (kind === \"gte\" ? String(v) >= date : String(v) <= date));\n if (!ok) {\n const message =\n limit.message ||\n (kind === \"gte\" ? DEFAULT_DATE_GTE_MESSAGE : DEFAULT_DATE_LTE_MESSAGE);\n ctx.addIssue({\n code: \"custom\",\n message: formatDateLimitMessage(message, formatDate(date))\n });\n }\n return ok;\n };\n for (const limit of gte) {\n if (!check(limit, \"gte\")) {\n return;\n }\n }\n for (const limit of lte) {\n if (!check(limit, \"lte\")) {\n return;\n }\n }\n });\n}\n"],"names":["describeBound","bound","resolveDateLimits","limits","today","getLocalToday","resolve","bounds","resolveDateBound","gte","lte","a","b","undefined","getDateLimits","rendererSettings","DEFAULT_DATE_GTE_MESSAGE","DEFAULT_DATE_LTE_MESSAGE","formatDateLimitMessage","message","date","createDateLimitsSchema","formatDate","z","value","ctx","values","Array","v","check","limit","kind","ok","String"],"mappings":";;AAsBA,MAAMA,gBAAgB,CAACC,QACnB,AAAiB,YAAjB,OAAOA,QAAqBA,QAAQ,CAAC,CAAC,EAAEA,MAAM,UAAU,CAAC,CAAC,CAAC;AAMxD,SAASC,kBACZC,MAA+B,EAC/BC,QAAgBC,eAAe;IAE/B,MAAMC,UAAU,CAACC,SAAsB,EAAE,GACrCA,OAAO,OAAO,CAACN,CAAAA;YACX,IAAI;gBACA,OAAO;oBAACO,iBAAiBP,OAAOG;iBAAO;YAC3C,EAAE,OAAM;gBACJ,OAAO,EAAE;YACb;QACJ;IACJ,MAAMK,MAAMH,QAAQH,QAAQ;IAC5B,MAAMO,MAAMJ,QAAQH,QAAQ;IAC5B,OAAO;QACH,KAAKM,IAAI,MAAM,GAAGA,IAAI,MAAM,CAAC,CAACE,GAAGC,IAAOD,IAAIC,IAAID,IAAIC,KAAMC;QAC1D,KAAKH,IAAI,MAAM,GAAGA,IAAI,MAAM,CAAC,CAACC,GAAGC,IAAOD,IAAIC,IAAID,IAAIC,KAAMC;IAC9D;AACJ;AAGO,SAASC,cAAcC,gBAAyB;IACnD,IAAI,CAACA,oBAAoB,AAA4B,YAA5B,OAAOA,kBAC5B;IAEJ,OAAQA,iBAAkD,UAAU;AACxE;AAMO,MAAMC,2BAA2B;AACjC,MAAMC,2BAA2B;AAGjC,SAASC,uBAAuBC,OAAe,EAAEC,IAAY;IAChE,OAAOD,QAAQ,OAAO,CAAC,YAAYC;AACvC;AAOO,SAASC,uBACZZ,GAAiB,EACjBC,GAAiB,EACjBY,aAAiCF,CAAAA,OAAQA,IAAI;IAE7C,OAAOG,EAAE,GAAG,GAAG,WAAW,CAAC,CAACC,OAAOC;QAC/B,MAAMC,SAAUC,AAAAA,CAAAA,MAAM,OAAO,CAACH,SAASA,QAAQ;YAACA;SAAK,A,EAAG,MAAM,CAC1DI,CAAAA,IAAKA,QAAAA,KAAiCA,AAAM,OAANA;QAE1C,IAAIF,AAAkB,MAAlBA,OAAO,MAAM,EACb;QAEJ,MAAMtB,QAAQC;QACd,MAAMwB,QAAQ,CAACC,OAAmBC;YAC9B,IAAIX;YACJ,IAAI;gBACAA,OAAOZ,iBAAiBsB,MAAM,KAAK,EAAE1B;YACzC,EAAE,OAAM;gBACJqB,IAAI,QAAQ,CAAC;oBACT,MAAM;oBACN,SAAS,CAAC,mBAAmB,EAAEzB,cAAc8B,MAAM,KAAK,EAAE,CAAC,CAAC;gBAChE;gBACA,OAAO;YACX;YACA,MAAME,KAAKN,OAAO,KAAK,CAACE,CAAAA,IAAMG,AAAS,UAATA,OAAiBE,OAAOL,MAAMR,OAAOa,OAAOL,MAAMR;YAChF,IAAI,CAACY,IAAI;gBACL,MAAMb,UACFW,MAAM,OAAO,IACZC,CAAAA,AAAS,UAATA,OAAiBf,2BAA2BC,wBAAuB;gBACxEQ,IAAI,QAAQ,CAAC;oBACT,MAAM;oBACN,SAASP,uBAAuBC,SAASG,WAAWF;gBACxD;YACJ;YACA,OAAOY;QACX;QACA,KAAK,MAAMF,SAASrB,IAChB,IAAI,CAACoB,MAAMC,OAAO,QACd;QAGR,KAAK,MAAMA,SAASpB,IAChB,IAAI,CAACmB,MAAMC,OAAO,QACd;IAGZ;AACJ"}
@@ -0,0 +1 @@
1
+ export {};