@solidxai/core-ui 0.1.8-beta.9 → 0.1.9-beta.0

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 (430) hide show
  1. package/README.md +2 -2
  2. package/dist/adapters/auth/getSession.d.ts.map +1 -1
  3. package/dist/adapters/auth/getSession.js +1 -1
  4. package/dist/adapters/auth/getSession.js.map +1 -1
  5. package/dist/adapters/auth/getSession.ts +1 -0
  6. package/dist/adapters/auth/helper.d.ts.map +1 -1
  7. package/dist/adapters/auth/helper.js +1 -0
  8. package/dist/adapters/auth/helper.js.map +1 -1
  9. package/dist/adapters/auth/helper.ts +3 -1
  10. package/dist/adapters/auth/signIn.d.ts.map +1 -1
  11. package/dist/adapters/auth/signIn.js +1 -0
  12. package/dist/adapters/auth/signIn.js.map +1 -1
  13. package/dist/adapters/auth/signIn.ts +3 -1
  14. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts +1 -0
  15. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts.map +1 -1
  16. package/dist/adapters/auth/signInWithOAuthAccessCode.js +10 -9
  17. package/dist/adapters/auth/signInWithOAuthAccessCode.js.map +1 -1
  18. package/dist/adapters/auth/signInWithOAuthAccessCode.ts +6 -3
  19. package/dist/adapters/auth/signOut.d.ts.map +1 -1
  20. package/dist/adapters/auth/signOut.js +7 -1
  21. package/dist/adapters/auth/signOut.js.map +1 -1
  22. package/dist/adapters/auth/signOut.ts +7 -1
  23. package/dist/adapters/auth/types.d.ts +1 -0
  24. package/dist/adapters/auth/types.d.ts.map +1 -1
  25. package/dist/adapters/auth/types.js.map +1 -1
  26. package/dist/adapters/auth/types.ts +1 -0
  27. package/dist/components/auth/AuthLayout.d.ts +1 -1
  28. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  29. package/dist/components/auth/AuthLayout.js +87 -18
  30. package/dist/components/auth/AuthLayout.js.map +1 -1
  31. package/dist/components/auth/AuthLayout.tsx +35 -11
  32. package/dist/components/auth/AuthSettingsContext.d.ts +10 -0
  33. package/dist/components/auth/AuthSettingsContext.d.ts.map +1 -0
  34. package/dist/components/auth/AuthSettingsContext.js +49 -0
  35. package/dist/components/auth/AuthSettingsContext.js.map +1 -0
  36. package/dist/components/auth/AuthSettingsContext.tsx +19 -0
  37. package/dist/components/auth/FacebookAuthChecking.d.ts +2 -0
  38. package/dist/components/auth/FacebookAuthChecking.d.ts.map +1 -0
  39. package/dist/components/auth/FacebookAuthChecking.js +98 -0
  40. package/dist/components/auth/FacebookAuthChecking.js.map +1 -0
  41. package/dist/components/auth/FacebookAuthChecking.tsx +59 -0
  42. package/dist/components/auth/ForgotPasswordThankYou.d.ts.map +1 -1
  43. package/dist/components/auth/ForgotPasswordThankYou.js +2 -6
  44. package/dist/components/auth/ForgotPasswordThankYou.js.map +1 -1
  45. package/dist/components/auth/ForgotPasswordThankYou.tsx +2 -7
  46. package/dist/components/auth/GoogleAuthChecking.d.ts.map +1 -1
  47. package/dist/components/auth/GoogleAuthChecking.js +10 -16
  48. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  49. package/dist/components/auth/GoogleAuthChecking.tsx +2 -7
  50. package/dist/components/auth/MicrosoftAuthChecking.d.ts +2 -0
  51. package/dist/components/auth/MicrosoftAuthChecking.d.ts.map +1 -0
  52. package/dist/components/auth/MicrosoftAuthChecking.js +98 -0
  53. package/dist/components/auth/MicrosoftAuthChecking.js.map +1 -0
  54. package/dist/components/auth/MicrosoftAuthChecking.tsx +59 -0
  55. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  56. package/dist/components/auth/SolidForgotPassword.js +2 -6
  57. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  58. package/dist/components/auth/SolidForgotPassword.tsx +2 -7
  59. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  60. package/dist/components/auth/SolidInitialLoginOtp.js +13 -22
  61. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  62. package/dist/components/auth/SolidInitialLoginOtp.tsx +4 -12
  63. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  64. package/dist/components/auth/SolidInitiateRegisterOtp.js +27 -14
  65. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  66. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +27 -15
  67. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  68. package/dist/components/auth/SolidLogin.js +18 -23
  69. package/dist/components/auth/SolidLogin.js.map +1 -1
  70. package/dist/components/auth/SolidLogin.tsx +18 -15
  71. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  72. package/dist/components/auth/SolidRegister.js +50 -22
  73. package/dist/components/auth/SolidRegister.js.map +1 -1
  74. package/dist/components/auth/SolidRegister.tsx +89 -36
  75. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  76. package/dist/components/auth/SolidResetPassword.js +2 -6
  77. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  78. package/dist/components/auth/SolidResetPassword.tsx +2 -6
  79. package/dist/components/common/AuthBanner.js.map +1 -1
  80. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  81. package/dist/components/common/GeneralSettings.js +235 -151
  82. package/dist/components/common/GeneralSettings.js.map +1 -1
  83. package/dist/components/common/GeneralSettings.tsx +1109 -776
  84. package/dist/components/common/SettingsComponent.d.ts +2 -0
  85. package/dist/components/common/SettingsComponent.d.ts.map +1 -0
  86. package/dist/components/common/SettingsComponent.js +351 -0
  87. package/dist/components/common/SettingsComponent.js.map +1 -0
  88. package/dist/components/common/SettingsComponent.module.css +421 -0
  89. package/dist/components/common/SettingsComponent.tsx +582 -0
  90. package/dist/components/common/SocialMediaLogin.d.ts +8 -1
  91. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  92. package/dist/components/common/SocialMediaLogin.js +6 -13
  93. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  94. package/dist/components/common/SocialMediaLogin.tsx +120 -58
  95. package/dist/components/common/SolidExport.d.ts.map +1 -1
  96. package/dist/components/common/SolidExport.js +1 -1
  97. package/dist/components/common/SolidExport.js.map +1 -1
  98. package/dist/components/common/SolidExport.tsx +2 -1
  99. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  100. package/dist/components/common/SolidFormStepper.js +2 -1
  101. package/dist/components/common/SolidFormStepper.js.map +1 -1
  102. package/dist/components/common/SolidFormStepper.tsx +2 -1
  103. package/dist/components/common/solid-export.css +26 -0
  104. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  105. package/dist/components/core/card/SolidCardView.js +24 -25
  106. package/dist/components/core/card/SolidCardView.js.map +1 -1
  107. package/dist/components/core/card/SolidCardView.tsx +22 -27
  108. package/dist/components/core/card/SolidCardViewConfigure.js +1 -1
  109. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  110. package/dist/components/core/card/SolidCardViewConfigure.tsx +1 -1
  111. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  112. package/dist/components/core/chatter/SolidChatter.js +39 -9
  113. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  114. package/dist/components/core/chatter/SolidChatter.tsx +42 -7
  115. package/dist/components/core/chatter/SolidChatterAuditMessage.d.ts.map +1 -1
  116. package/dist/components/core/chatter/SolidChatterAuditMessage.js +19 -1
  117. package/dist/components/core/chatter/SolidChatterAuditMessage.js.map +1 -1
  118. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +22 -1
  119. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +3 -0
  120. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  121. package/dist/components/core/chatter/SolidChatterMessageBox.js +68 -4
  122. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  123. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +45 -3
  124. package/dist/components/core/chatter/chatter.module.css +0 -3
  125. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
  126. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +3 -1
  127. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
  128. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +149 -0
  129. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +3 -1
  130. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  131. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +9 -8
  132. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  133. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +4 -2
  134. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.d.ts.map +1 -1
  135. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js +21 -4
  136. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.js.map +1 -1
  137. package/dist/components/core/common/SolidAccountSettings/SolidVersionInfo.tsx +128 -1
  138. package/dist/components/core/common/SolidGlobalSearchElement.js +1 -1
  139. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  140. package/dist/components/core/common/SolidGlobalSearchElement.tsx +1 -1
  141. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts +7 -0
  142. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts.map +1 -0
  143. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js +75 -0
  144. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js.map +1 -0
  145. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.ts +45 -0
  146. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts +3 -0
  147. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts.map +1 -0
  148. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js +81 -0
  149. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js.map +1 -0
  150. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.tsx +114 -0
  151. package/dist/components/core/form/SolidFormActionHeader.d.ts +1 -1
  152. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  153. package/dist/components/core/form/SolidFormActionHeader.js +5 -3
  154. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  155. package/dist/components/core/form/SolidFormActionHeader.tsx +27 -1
  156. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  157. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  158. package/dist/components/core/form/SolidFormLayouts.tsx +1 -1
  159. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  160. package/dist/components/core/form/SolidFormView.js +117 -27
  161. package/dist/components/core/form/SolidFormView.js.map +1 -1
  162. package/dist/components/core/form/SolidFormView.tsx +107 -9
  163. package/dist/components/core/form/fields/SolidComputedField.d.ts +25 -0
  164. package/dist/components/core/form/fields/SolidComputedField.d.ts.map +1 -0
  165. package/dist/components/core/form/fields/SolidComputedField.js +128 -0
  166. package/dist/components/core/form/fields/SolidComputedField.js.map +1 -0
  167. package/dist/components/core/form/fields/SolidComputedField.tsx +134 -0
  168. package/dist/components/core/form/fields/SolidDateTimeField.js +1 -1
  169. package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
  170. package/dist/components/core/form/fields/SolidDateTimeField.tsx +1 -1
  171. package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  172. package/dist/components/core/form/fields/SolidSelectionDynamicField.js +35 -24
  173. package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
  174. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +30 -14
  175. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  176. package/dist/components/core/form/fields/SolidSelectionStaticField.js +29 -28
  177. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  178. package/dist/components/core/form/fields/SolidSelectionStaticField.tsx +17 -12
  179. package/dist/components/core/form/fields/SolidTimeField.js +1 -1
  180. package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
  181. package/dist/components/core/form/fields/SolidTimeField.tsx +1 -1
  182. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.d.ts.map +1 -1
  183. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js +3 -3
  184. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js.map +1 -1
  185. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +0 -5
  186. package/dist/components/core/kanban/KanbanBoard.js +1 -1
  187. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  188. package/dist/components/core/kanban/KanbanBoard.tsx +1 -1
  189. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  190. package/dist/components/core/kanban/SolidKanbanView.js +216 -102
  191. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  192. package/dist/components/core/kanban/SolidKanbanView.tsx +204 -72
  193. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +1 -1
  194. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  195. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +1 -1
  196. package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
  197. package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
  198. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
  199. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
  200. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
  201. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
  202. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
  203. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
  204. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
  205. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
  206. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
  207. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
  208. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
  209. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
  210. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
  211. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
  212. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
  213. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  214. package/dist/components/core/list/SolidDataTable.js +6 -5
  215. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  216. package/dist/components/core/list/SolidDataTable.tsx +6 -5
  217. package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
  218. package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
  219. package/dist/components/core/list/SolidDataTablePagination.js +22 -0
  220. package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
  221. package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
  222. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
  223. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +3 -3
  224. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
  225. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +1 -0
  226. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  227. package/dist/components/core/list/SolidListView.js +60 -63
  228. package/dist/components/core/list/SolidListView.js.map +1 -1
  229. package/dist/components/core/list/SolidListView.tsx +43 -48
  230. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  231. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  232. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  233. package/dist/components/core/list/SolidListViewRowActionsMenu.js +2 -2
  234. package/dist/components/core/list/SolidListViewRowActionsMenu.js.map +1 -1
  235. package/dist/components/core/list/SolidListViewRowActionsMenu.tsx +2 -2
  236. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
  237. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
  238. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
  239. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
  240. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
  241. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +1 -1
  242. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  243. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +1 -1
  244. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  245. package/dist/components/layout/user-profile-menu.js +15 -14
  246. package/dist/components/layout/user-profile-menu.js.map +1 -1
  247. package/dist/components/layout/user-profile-menu.tsx +8 -6
  248. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  249. package/dist/components/shad-cn-ui/SolidAutocomplete.js +9 -1
  250. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  251. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +10 -1
  252. package/dist/components/shad-cn-ui/SolidButton.d.ts +14 -15
  253. package/dist/components/shad-cn-ui/SolidButton.d.ts.map +1 -1
  254. package/dist/components/shad-cn-ui/SolidButton.js +13 -3
  255. package/dist/components/shad-cn-ui/SolidButton.js.map +1 -1
  256. package/dist/components/shad-cn-ui/SolidButton.tsx +24 -4
  257. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
  258. package/dist/components/shad-cn-ui/SolidDatePicker.js +1 -1
  259. package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
  260. package/dist/components/shad-cn-ui/SolidDatePicker.tsx +2 -0
  261. package/dist/components/shad-cn-ui/SolidDialog.d.ts +1 -1
  262. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  263. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  264. package/dist/components/shad-cn-ui/SolidDialog.tsx +1 -1
  265. package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -2
  266. package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
  267. package/dist/components/shad-cn-ui/SolidIcon.js +3 -4
  268. package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
  269. package/dist/components/shad-cn-ui/SolidIcon.tsx +12 -15
  270. package/dist/components/shad-cn-ui/SolidRichTextEditor.d.ts.map +1 -1
  271. package/dist/components/shad-cn-ui/SolidRichTextEditor.js +9 -1
  272. package/dist/components/shad-cn-ui/SolidRichTextEditor.js.map +1 -1
  273. package/dist/components/shad-cn-ui/SolidRichTextEditor.tsx +8 -1
  274. package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
  275. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  276. package/dist/components/shad-cn-ui/SolidTabs.js +2 -2
  277. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  278. package/dist/components/shad-cn-ui/SolidTabs.tsx +12 -1
  279. package/dist/components/solid-ui/SolidButton.d.ts +14 -0
  280. package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
  281. package/dist/components/solid-ui/SolidButton.js +36 -0
  282. package/dist/components/solid-ui/SolidButton.js.map +1 -0
  283. package/dist/components/solid-ui/SolidButton.tsx +54 -0
  284. package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
  285. package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
  286. package/dist/components/solid-ui/SolidTabs.js +22 -0
  287. package/dist/components/solid-ui/SolidTabs.js.map +1 -0
  288. package/dist/components/solid-ui/SolidTabs.tsx +73 -0
  289. package/dist/components/solid-ui/index.d.ts +3 -0
  290. package/dist/components/solid-ui/index.d.ts.map +1 -0
  291. package/dist/components/solid-ui/index.js +3 -0
  292. package/dist/components/solid-ui/index.js.map +1 -0
  293. package/dist/components/solid-ui/index.ts +2 -0
  294. package/dist/helpers/hydrateRelationRules.js +1 -1
  295. package/dist/helpers/hydrateRelationRules.js.map +1 -1
  296. package/dist/helpers/hydrateRelationRules.ts +1 -1
  297. package/dist/helpers/permissions.js +2 -2
  298. package/dist/helpers/permissions.js.map +1 -1
  299. package/dist/helpers/permissions.ts +2 -2
  300. package/dist/helpers/registry.d.ts +2 -2
  301. package/dist/helpers/registry.d.ts.map +1 -1
  302. package/dist/helpers/registry.js +6 -0
  303. package/dist/helpers/registry.js.map +1 -1
  304. package/dist/helpers/registry.ts +9 -2
  305. package/dist/helpers/settingsPayload.d.ts +32 -0
  306. package/dist/helpers/settingsPayload.d.ts.map +1 -0
  307. package/dist/helpers/settingsPayload.js +72 -0
  308. package/dist/helpers/settingsPayload.js.map +1 -0
  309. package/dist/helpers/settingsPayload.ts +125 -0
  310. package/dist/index.d.ts +5 -0
  311. package/dist/index.d.ts.map +1 -1
  312. package/dist/index.js +5 -0
  313. package/dist/index.js.map +1 -1
  314. package/dist/index.ts +5 -0
  315. package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
  316. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  317. package/dist/redux/api/solidChatterMessageApi.js +11 -1
  318. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  319. package/dist/redux/api/solidChatterMessageApi.ts +10 -1
  320. package/dist/redux/api/solidEntityApi.d.ts.map +1 -1
  321. package/dist/redux/api/solidEntityApi.js +14 -1
  322. package/dist/redux/api/solidEntityApi.js.map +1 -1
  323. package/dist/redux/api/solidEntityApi.tsx +17 -1
  324. package/dist/redux/store/createSolidStore.d.ts +1 -1
  325. package/dist/redux/store/createSolidStore.d.ts.map +1 -1
  326. package/dist/redux/store/createSolidStore.js +20 -11
  327. package/dist/redux/store/createSolidStore.js.map +1 -1
  328. package/dist/redux/store/createSolidStore.ts +20 -11
  329. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  330. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  331. package/dist/redux/store/dynamicEntityApiMiddleware.d.ts +10 -0
  332. package/dist/redux/store/dynamicEntityApiMiddleware.d.ts.map +1 -0
  333. package/dist/redux/store/dynamicEntityApiMiddleware.js +44 -0
  334. package/dist/redux/store/dynamicEntityApiMiddleware.js.map +1 -0
  335. package/dist/redux/store/dynamicEntityApiMiddleware.ts +58 -0
  336. package/dist/redux/store/dynamicReducerManager.d.ts +10 -0
  337. package/dist/redux/store/dynamicReducerManager.d.ts.map +1 -0
  338. package/dist/redux/store/dynamicReducerManager.js +51 -0
  339. package/dist/redux/store/dynamicReducerManager.js.map +1 -0
  340. package/dist/redux/store/dynamicReducerManager.ts +51 -0
  341. package/dist/redux/store/solidEntityApiPool.d.ts +31 -0
  342. package/dist/redux/store/solidEntityApiPool.d.ts.map +1 -0
  343. package/dist/redux/store/solidEntityApiPool.js +123 -0
  344. package/dist/redux/store/solidEntityApiPool.js.map +1 -0
  345. package/dist/redux/store/solidEntityApiPool.ts +167 -0
  346. package/dist/resources/globals.css +20 -6
  347. package/dist/resources/shadcn-base.css +248 -87
  348. package/dist/resources/solid-responsive.css +22 -4
  349. package/dist/routes/AppEventListener.js +1 -1
  350. package/dist/routes/AppEventListener.js.map +1 -1
  351. package/dist/routes/AppEventListener.tsx +1 -1
  352. package/dist/routes/pages/admin/core/CardPage.js +1 -1
  353. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  354. package/dist/routes/pages/admin/core/CardPage.tsx +1 -1
  355. package/dist/routes/pages/admin/core/DiagnosticsPage.d.ts +2 -0
  356. package/dist/routes/pages/admin/core/DiagnosticsPage.d.ts.map +1 -0
  357. package/dist/routes/pages/admin/core/DiagnosticsPage.js +48 -0
  358. package/dist/routes/pages/admin/core/DiagnosticsPage.js.map +1 -0
  359. package/dist/routes/pages/admin/core/DiagnosticsPage.tsx +167 -0
  360. package/dist/routes/pages/admin/core/FormPage.js +1 -1
  361. package/dist/routes/pages/admin/core/FormPage.js.map +1 -1
  362. package/dist/routes/pages/admin/core/FormPage.tsx +1 -1
  363. package/dist/routes/pages/admin/core/KanbanPage.js +1 -1
  364. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  365. package/dist/routes/pages/admin/core/KanbanPage.tsx +1 -1
  366. package/dist/routes/pages/admin/core/ListPage.js +1 -1
  367. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  368. package/dist/routes/pages/admin/core/ListPage.tsx +1 -1
  369. package/dist/routes/pages/admin/core/SettingsPage.js +2 -2
  370. package/dist/routes/pages/admin/core/SettingsPage.js.map +1 -1
  371. package/dist/routes/pages/admin/core/SettingsPage.tsx +2 -2
  372. package/dist/routes/pages/admin/core/TreePage.js +1 -1
  373. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  374. package/dist/routes/pages/admin/core/TreePage.tsx +1 -1
  375. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts +2 -0
  376. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts.map +1 -0
  377. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js +6 -0
  378. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js.map +1 -0
  379. package/dist/routes/pages/auth/InitiateFacebookOauthPage.tsx +5 -0
  380. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts +2 -0
  381. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts.map +1 -0
  382. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js +6 -0
  383. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js.map +1 -0
  384. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.tsx +5 -0
  385. package/dist/routes/solidRoutes.d.ts.map +1 -1
  386. package/dist/routes/solidRoutes.js +5 -1
  387. package/dist/routes/solidRoutes.js.map +1 -1
  388. package/dist/routes/solidRoutes.tsx +5 -1
  389. package/dist/routes/types.d.ts +1 -1
  390. package/dist/routes/types.d.ts.map +1 -1
  391. package/dist/routes/types.js.map +1 -1
  392. package/dist/routes/types.ts +2 -0
  393. package/dist/types/extension-registry.d.ts +1 -0
  394. package/dist/types/extension-registry.d.ts.map +1 -1
  395. package/dist/types/extension-registry.js +1 -0
  396. package/dist/types/extension-registry.js.map +1 -1
  397. package/dist/types/extension-registry.ts +1 -0
  398. package/dist/types/index.d.ts +2 -0
  399. package/dist/types/solid-core.d.ts +11 -0
  400. package/package.json +1 -2
  401. package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
  402. package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
  403. package/dist/components/auth/SolidOTPVerify.js +0 -67
  404. package/dist/components/auth/SolidOTPVerify.js.map +0 -1
  405. package/dist/components/auth/SolidOTPVerify.tsx +0 -133
  406. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
  407. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
  408. package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
  409. package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
  410. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
  411. package/dist/nextAuth/authProviders.d.ts +0 -4
  412. package/dist/nextAuth/authProviders.d.ts.map +0 -1
  413. package/dist/nextAuth/authProviders.js +0 -198
  414. package/dist/nextAuth/authProviders.js.map +0 -1
  415. package/dist/nextAuth/authProviders.tsx +0 -232
  416. package/dist/nextAuth/handleLogout.d.ts +0 -2
  417. package/dist/nextAuth/handleLogout.d.ts.map +0 -1
  418. package/dist/nextAuth/handleLogout.js +0 -36
  419. package/dist/nextAuth/handleLogout.js.map +0 -1
  420. package/dist/nextAuth/handleLogout.tsx +0 -39
  421. package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
  422. package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
  423. package/dist/nextAuth/refreshAccessToken.js +0 -24
  424. package/dist/nextAuth/refreshAccessToken.js.map +0 -1
  425. package/dist/nextAuth/refreshAccessToken.tsx +0 -28
  426. package/dist/redux/features/settingsSlice.d.ts +0 -20
  427. package/dist/redux/features/settingsSlice.d.ts.map +0 -1
  428. package/dist/redux/features/settingsSlice.js +0 -39
  429. package/dist/redux/features/settingsSlice.js.map +0 -1
  430. package/dist/redux/features/settingsSlice.ts +0 -60
@@ -18,8 +18,7 @@ import { useDispatch, useSelector } from 'react-redux';
18
18
  import { ERROR_MESSAGES } from '../../constants/error-messages';
19
19
  import { useBulkUpdateSolidSettingsMutation, useLazyGetSolidSettingsQuery } from '../../redux/api/solidSettingsApi';
20
20
  import { env } from "../../adapters/env";
21
- import { showToast } from '../../redux/features/toastSlice';
22
-
21
+ import { showToast } from "../../redux/features/toastSlice";
23
22
 
24
23
  export const GeneralSettings = () => {
25
24
  const { data: session } = useSession();
@@ -30,7 +29,7 @@ export const GeneralSettings = () => {
30
29
  const [authScreenCenterBackgroundImagePreview, setAuthScreenCenterBackgroundImagePreview] = useState<string | null>(null);
31
30
  const dispatch = useDispatch()
32
31
 
33
- const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();
32
+ const [trigger, { data: solidSettingsData }] = useLazyGetSolidSettingsQuery();
34
33
 
35
34
  useEffect(() => {
36
35
  trigger("") // Fetch settings on mount
@@ -47,6 +46,9 @@ export const GeneralSettings = () => {
47
46
  passwordLessAuth: solidSettingsData?.data?.passwordLessAuth ?? false,
48
47
  activateUserOnRegistration: solidSettingsData?.data?.activateUserOnRegistration ?? false,
49
48
  iamGoogleOAuthEnabled: solidSettingsData?.data?.iamGoogleOAuthEnabled ?? false,
49
+ iamMicrosoftOAuthEnabled: solidSettingsData?.data?.iamMicrosoftOAuthEnabled ?? false,
50
+ iamFacebookOAuthEnabled: solidSettingsData?.data?.iamFacebookOAuthEnabled ?? false,
51
+ iamAppleOAuthEnabled: solidSettingsData?.data?.iamAppleOAuthEnabled ?? false,
50
52
  // shouldQueueEmails: solidSettingsData?.data?.shouldQueueEmails ?? false,
51
53
  // shouldQueueSms: solidSettingsData?.data?.shouldQueueSms ?? false,
52
54
  authPagesLayout: solidSettingsData?.data?.authPagesLayout ?? "center",
@@ -100,788 +102,1119 @@ export const GeneralSettings = () => {
100
102
  try {
101
103
 
102
104
  const updatedSettingsArray: Array<{ key: string; value: string; type: string }> = [];
103
- const currentSettings = solidSettingsData || {};
104
-
105
- const formData = new FormData();
106
-
107
- // Compare changed fields
108
- Object.entries(values).forEach(([key, value]) => {
109
- const currentValue = currentSettings[key];
110
-
111
- const normalizedCurrent = currentValue ?? "";
112
- const normalizedValue = value ?? "";
113
-
114
- if (normalizedCurrent !== normalizedValue) {
115
- // If file, append to formData and use placeholder value in JSON
116
- if (value instanceof File) {
117
- formData.append(key, value);
118
- updatedSettingsArray.push({
119
- key,
120
- value: "",
121
- type: "system",
122
- });
123
- } else {
124
- updatedSettingsArray.push({
125
- key,
126
- value: typeof value === "string" ? value : JSON.stringify(value),
127
- type: "system",
128
- });
129
- }
130
- }
131
- });
132
-
133
- if (updatedSettingsArray.length === 0) {
134
- dispatch(showToast({ severity: "success", summary: "No Changes", detail: "No settings were updated" }));
135
- return;
136
- }
137
-
138
- // Append settings array to formData
139
- formData.append("settings", JSON.stringify(updatedSettingsArray));
140
-
141
- // Call API
142
- const response = await bulkUpdateSolidSettings({ data: formData }).unwrap();
143
-
144
- if (response.statusCode === 200) {
145
- dispatch(showToast({ severity: "success", summary: "Updated", detail: "Settings updated" }));
146
- trigger("")
147
- }
148
-
149
- } catch (error: any) {
150
- console.log("Error updating settings:", error);
151
- dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FAILED, detail: error?.data?.message || ERROR_MESSAGES.SOMETHING_WRONG }));
105
+ const currentSettings = solidSettingsData?.data || {};
106
+
107
+ const formData = new FormData();
108
+
109
+ // Compare changed fields
110
+ Object.entries(values).forEach(([key, value]) => {
111
+ const currentValue = currentSettings[key];
112
+
113
+ const wasCleared = currentValue != null && currentValue !== "" && (value === null || value === "");
114
+ const isFile = value instanceof File;
115
+ const normalizedCurrent = currentValue ?? "";
116
+ const normalizedValue = value ?? "";
117
+ const changed = isFile || wasCleared || normalizedCurrent !== normalizedValue;
118
+
119
+ if (changed) {
120
+ if (isFile) {
121
+ formData.append(key, value as File);
122
+ updatedSettingsArray.push({
123
+ key,
124
+ value: "",
125
+ type: "system",
126
+ });
127
+ } else {
128
+ updatedSettingsArray.push({
129
+ key,
130
+ value:
131
+ value === null || value === undefined ? "" : (typeof value === "string" ? value : JSON.stringify(value)),
132
+ type: "system",
133
+ });
152
134
  }
153
- },
154
- });
155
-
156
- const showError = async () => {
157
- const errors = await formik.validateForm();
158
- const errorMessages = Object.values(errors);
159
-
160
- if (errorMessages.length > 0) {
161
- dispatch(showToast({ severity: 'error', summary: 'Error', detail: Array.isArray(errorMessages) ? errorMessages.join(', ') : errorMessages }));
135
+ }
136
+ });
137
+
138
+ if (updatedSettingsArray.length === 0) {
139
+ dispatch(
140
+ showToast({
141
+ severity: "success",
142
+ summary: "No Changes",
143
+ detail: "No settings were updated",
144
+ }),
145
+ );
146
+ return;
162
147
  }
163
- }
164
- useEffect(() => {
165
-
166
- }, [pathname])
167
148
 
168
- const positionMap: Record<'left' | 'center' | 'right', string> = {
169
- left: 'The form will appear on the left side of the screen, while the banner will be positioned on the right side',
170
- center: 'The form will be centered in the middle of the screen for balanced alignment',
171
- right: 'The form will appear on the right side of the screen, and the banner will be positioned on the left side'
172
- };
173
-
174
- const onAppLogoDrop = useCallback(
175
- (acceptedFiles: File[]) => {
176
- const file = acceptedFiles[0];
177
- if (file) {
178
- if (file.size > 2 * 1024 * 1024) {
179
- dispatch(showToast({ severity: "error", summary: "File too large", detail: "Maximum file size is 2MB" }));
180
- return;
181
- }
182
- formik.setFieldValue("appLogo", file);
183
- setAppLogoPreview(URL.createObjectURL(file));
184
- }
185
- },
186
- [formik]
187
- );
188
-
189
- const onCompanyLogoDrop = useCallback((acceptedFiles: File[]) => {
190
- const file = acceptedFiles[0];
191
- if (file) {
192
- if (file.size > 2 * 1024 * 1024) {
193
- dispatch(showToast({ severity: "error", summary: "File too large", detail: "Maximum file size is 2MB" }));
194
- return;
195
- }
196
- formik.setFieldValue("companylogo", file);
197
- setCompanyLogoPreview(URL.createObjectURL(file));
198
- }
199
- }, [formik]);
200
-
201
- const {
202
- getRootProps: getAppLogoRootProps,
203
- getInputProps: getAppLogoInputProps,
204
- isDragActive: isAppLogoDragActive
205
- } = useDropzone({
206
- accept: {
207
- 'image/png': ['.png'],
208
- 'image/jpeg': ['.jpeg', '.jpg'],
209
- 'image/svg+xml': ['.svg'],
210
- 'image/webp': ['.webp']
211
- },
212
- multiple: false,
213
- onDrop: onAppLogoDrop
214
- });
215
- const {
216
- getRootProps: getCompanyLogoRootProps,
217
- getInputProps: getCompanyLogoInputProps,
218
- isDragActive: isCompanyLogoDragActive
219
- } = useDropzone({
220
- accept: {
221
- 'image/png': ['.png'],
222
- 'image/jpeg': ['.jpeg', '.jpg'],
223
- 'image/svg+xml': ['.svg'],
224
- 'image/webp': ['.webp']
225
- },
226
- multiple: false,
227
- onDrop: onCompanyLogoDrop
228
- });
229
-
230
- const removeAppLogo = () => {
231
- formik.setFieldValue("appLogo", null);
232
- if (appLogoPreview) {
233
- URL.revokeObjectURL(appLogoPreview);
234
- setAppLogoPreview(null);
235
- }
236
- };
237
-
238
- const removeCompanyLogo = () => {
239
- formik.setFieldValue("companylogo", null);
240
- if (companyLogoPreview) {
241
- URL.revokeObjectURL(companyLogoPreview);
242
- setCompanyLogoPreview(null);
149
+ // Append settings array to formData
150
+ formData.append("settings", JSON.stringify(updatedSettingsArray));
151
+
152
+ // Call API
153
+ const response = await bulkUpdateSolidSettings({
154
+ data: formData,
155
+ }).unwrap();
156
+
157
+ if (response.statusCode === 200) {
158
+ dispatch(
159
+ showToast({
160
+ severity: "success",
161
+ summary: "Updated",
162
+ detail: "Settings updated",
163
+ }),
164
+ );
165
+ trigger("");
243
166
  }
244
- };
245
-
246
-
247
- const onAuthScreenRightBackgroundImageDrop = useCallback(
248
- (acceptedFiles: File[]) => {
249
- const file = acceptedFiles[0];
250
- if (file) {
251
- if (file.size > 2 * 1024 * 1024) {
252
- dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FILE_LARGE, detail: ERROR_MESSAGES.MAX_FILE_SIZE }));
253
- return;
254
- }
255
- formik.setFieldValue("authScreenRightBackgroundImage", file);
256
- setAuthScreenRightBackgroundImagePreview(URL.createObjectURL(file));
257
- }
258
- },
259
- [formik]
260
- );
261
-
262
- const onAuthScreenLeftBackgroundImageDrop = useCallback((acceptedFiles: File[]) => {
263
- const file = acceptedFiles[0];
264
- if (file) {
265
- if (file.size > 2 * 1024 * 1024) {
266
- dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FILE_LARGE, detail: ERROR_MESSAGES.MAX_FILE_SIZE }));
267
- return;
268
- }
269
- formik.setFieldValue("authScreenLeftBackgroundImage", file);
270
- setAuthScreenLeftBackgroundImagePreview(URL.createObjectURL(file));
167
+ } catch (error: any) {
168
+ console.log("Error updating settings:", error);
169
+ dispatch(
170
+ showToast({
171
+ severity: "error",
172
+ summary: ERROR_MESSAGES.FAILED,
173
+ detail: error?.data?.message || ERROR_MESSAGES.SOMETHING_WRONG,
174
+ }),
175
+ );
176
+ }
177
+ },
178
+ });
179
+
180
+ const showError = async () => {
181
+ const errors = await formik.validateForm();
182
+ const errorMessages = Object.values(errors);
183
+
184
+ if (errorMessages.length > 0) {
185
+ dispatch(
186
+ showToast({
187
+ severity: "error",
188
+ summary: "Error",
189
+ detail: Array.isArray(errorMessages)
190
+ ? errorMessages.join(", ")
191
+ : errorMessages,
192
+ }),
193
+ );
194
+ }
195
+ };
196
+ useEffect(() => {}, [pathname]);
197
+
198
+ const positionMap: Record<"left" | "center" | "right", string> = {
199
+ left: "The form will appear on the left side of the screen, while the banner will be positioned on the right side",
200
+ center:
201
+ "The form will be centered in the middle of the screen for balanced alignment",
202
+ right:
203
+ "The form will appear on the right side of the screen, and the banner will be positioned on the left side",
204
+ };
205
+
206
+ const onAppLogoDrop = useCallback(
207
+ (acceptedFiles: File[]) => {
208
+ const file = acceptedFiles[0];
209
+ if (file) {
210
+ if (file.size > 2 * 1024 * 1024) {
211
+ dispatch(
212
+ showToast({
213
+ severity: "error",
214
+ summary: "File too large",
215
+ detail: "Maximum file size is 2MB",
216
+ }),
217
+ );
218
+ return;
271
219
  }
272
- }, [formik]);
273
-
274
- const onAuthScreenCenterBackgroundImageDrop = useCallback((acceptedFiles: File[]) => {
275
- const file = acceptedFiles[0];
276
- if (file) {
277
- if (file.size > 2 * 1024 * 1024) {
278
- dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FILE_LARGE, detail: ERROR_MESSAGES.MAX_FILE_SIZE }));
279
- return;
280
- }
281
- formik.setFieldValue("authScreenCenterBackgroundImage", file);
282
- setAuthScreenCenterBackgroundImagePreview(URL.createObjectURL(file));
220
+ formik.setFieldValue("appLogo", file);
221
+ setAppLogoPreview(URL.createObjectURL(file));
222
+ }
223
+ },
224
+ [formik],
225
+ );
226
+
227
+ const onCompanyLogoDrop = useCallback(
228
+ (acceptedFiles: File[]) => {
229
+ const file = acceptedFiles[0];
230
+ if (file) {
231
+ if (file.size > 2 * 1024 * 1024) {
232
+ dispatch(
233
+ showToast({
234
+ severity: "error",
235
+ summary: "File too large",
236
+ detail: "Maximum file size is 2MB",
237
+ }),
238
+ );
239
+ return;
283
240
  }
284
- }, [formik]);
285
-
286
- const {
287
- getRootProps: getAuthScreenRightBackgroundImageRootProps,
288
- getInputProps: getAuthScreenRightBackgroundImageInputProps,
289
- isDragActive: isAuthScreenRightBackgroundImageDragActive
290
- } = useDropzone({
291
- accept: {
292
- 'image/png': ['.png'],
293
- 'image/jpeg': ['.jpeg', '.jpg'],
294
- 'image/svg+xml': ['.svg'],
295
- 'image/webp': ['.webp']
296
- },
297
- multiple: false,
298
- onDrop: onAuthScreenRightBackgroundImageDrop
299
- });
300
-
301
- const {
302
- getRootProps: getAuthScreenLeftBackgroundImageRootProps,
303
- getInputProps: getAuthScreenLeftBackgroundImageInputProps,
304
- isDragActive: isAuthScreenLeftBackgroundImageDragActive
305
- } = useDropzone({
306
- accept: {
307
- 'image/png': ['.png'],
308
- 'image/jpeg': ['.jpeg', '.jpg'],
309
- 'image/svg+xml': ['.svg'],
310
- 'image/webp': ['.webp']
311
- },
312
- multiple: false,
313
- onDrop: onAuthScreenLeftBackgroundImageDrop
314
- });
315
-
316
- const {
317
- getRootProps: getAuthScreenCenterBackgroundImageRootProps,
318
- getInputProps: getAuthScreenCenterBackgroundImageInputProps,
319
- isDragActive: isAuthScreenCenterBackgroundImageDragActive
320
- } = useDropzone({
321
- accept: {
322
- 'image/png': ['.png'],
323
- 'image/jpeg': ['.jpeg', '.jpg'],
324
- 'image/svg+xml': ['.svg'],
325
- 'image/webp': ['.webp']
326
- },
327
- multiple: false,
328
- onDrop: onAuthScreenCenterBackgroundImageDrop
329
- });
241
+ formik.setFieldValue("companylogo", file);
242
+ setCompanyLogoPreview(URL.createObjectURL(file));
243
+ }
244
+ },
245
+ [formik],
246
+ );
247
+
248
+ const {
249
+ getRootProps: getAppLogoRootProps,
250
+ getInputProps: getAppLogoInputProps,
251
+ isDragActive: isAppLogoDragActive,
252
+ } = useDropzone({
253
+ accept: {
254
+ "image/png": [".png"],
255
+ "image/jpeg": [".jpeg", ".jpg"],
256
+ "image/svg+xml": [".svg"],
257
+ "image/webp": [".webp"],
258
+ },
259
+ multiple: false,
260
+ onDrop: onAppLogoDrop,
261
+ });
262
+ const {
263
+ getRootProps: getCompanyLogoRootProps,
264
+ getInputProps: getCompanyLogoInputProps,
265
+ isDragActive: isCompanyLogoDragActive,
266
+ } = useDropzone({
267
+ accept: {
268
+ 'image/png': ['.png'],
269
+ 'image/jpeg': ['.jpeg', '.jpg'],
270
+ 'image/svg+xml': ['.svg'],
271
+ 'image/webp': ['.webp'],
272
+ },
273
+ multiple: false,
274
+ onDrop: onCompanyLogoDrop,
275
+ });
276
+
277
+ const removeAppLogo = () => {
278
+ formik.setFieldValue("appLogo", null);
279
+ if (appLogoPreview) {
280
+ URL.revokeObjectURL(appLogoPreview);
281
+ setAppLogoPreview(null);
282
+ }
283
+ };
330
284
 
331
- const removeAuthScreenRightBackgroundImage = () => {
332
- formik.setFieldValue("authScreenRightBackgroundImage", null);
333
- if (authScreenRightBackgroundImagePreview) {
334
- URL.revokeObjectURL(authScreenRightBackgroundImagePreview);
335
- setAuthScreenRightBackgroundImagePreview(null);
285
+ const removeCompanyLogo = () => {
286
+ formik.setFieldValue("companylogo", null);
287
+ if (companyLogoPreview) {
288
+ URL.revokeObjectURL(companyLogoPreview);
289
+ setCompanyLogoPreview(null);
290
+ }
291
+ };
292
+
293
+ const onAuthScreenRightBackgroundImageDrop = useCallback(
294
+ (acceptedFiles: File[]) => {
295
+ const file = acceptedFiles[0];
296
+ if (file) {
297
+ if (file.size > 2 * 1024 * 1024) {
298
+ dispatch(
299
+ showToast({
300
+ severity: "error",
301
+ summary: ERROR_MESSAGES.FILE_LARGE,
302
+ detail: ERROR_MESSAGES.MAX_FILE_SIZE,
303
+ }),
304
+ );
305
+ return;
336
306
  }
337
- };
338
-
339
- const removeAuthScreenLeftBackgroundImage = () => {
340
- formik.setFieldValue("authScreenLeftBackgroundImage", null);
341
- if (authScreenLeftBackgroundImagePreview) {
342
- URL.revokeObjectURL(authScreenLeftBackgroundImagePreview);
343
- setAuthScreenLeftBackgroundImagePreview(null);
307
+ formik.setFieldValue("authScreenRightBackgroundImage", file);
308
+ setAuthScreenRightBackgroundImagePreview(URL.createObjectURL(file));
309
+ }
310
+ },
311
+ [formik],
312
+ );
313
+
314
+ const onAuthScreenLeftBackgroundImageDrop = useCallback(
315
+ (acceptedFiles: File[]) => {
316
+ const file = acceptedFiles[0];
317
+ if (file) {
318
+ if (file.size > 2 * 1024 * 1024) {
319
+ dispatch(
320
+ showToast({
321
+ severity: "error",
322
+ summary: ERROR_MESSAGES.FILE_LARGE,
323
+ detail: ERROR_MESSAGES.MAX_FILE_SIZE,
324
+ }),
325
+ );
326
+ return;
344
327
  }
345
- };
346
-
347
- const removeAuthScreenCenterBackgroundImage = () => {
348
- formik.setFieldValue("authScreenCenterBackgroundImage", null);
349
- if (authScreenCenterBackgroundImagePreview) {
350
- URL.revokeObjectURL(authScreenCenterBackgroundImagePreview);
351
- setAuthScreenCenterBackgroundImagePreview(null);
328
+ formik.setFieldValue("authScreenLeftBackgroundImage", file);
329
+ setAuthScreenLeftBackgroundImagePreview(URL.createObjectURL(file));
330
+ }
331
+ },
332
+ [formik],
333
+ );
334
+
335
+ const onAuthScreenCenterBackgroundImageDrop = useCallback(
336
+ (acceptedFiles: File[]) => {
337
+ const file = acceptedFiles[0];
338
+ if (file) {
339
+ if (file.size > 2 * 1024 * 1024) {
340
+ dispatch(
341
+ showToast({
342
+ severity: "error",
343
+ summary: ERROR_MESSAGES.FILE_LARGE,
344
+ detail: ERROR_MESSAGES.MAX_FILE_SIZE,
345
+ }),
346
+ );
347
+ return;
352
348
  }
353
- };
354
-
355
-
356
-
357
- const handleAiConfigChange = (newConfig: SolidAiConfig) => {
358
- formik.setFieldValue("solidXGenAiCodeBuilderConfig", newConfig);
359
- };
349
+ formik.setFieldValue("authScreenCenterBackgroundImage", file);
350
+ setAuthScreenCenterBackgroundImagePreview(URL.createObjectURL(file));
351
+ }
352
+ },
353
+ [formik],
354
+ );
355
+
356
+ const {
357
+ getRootProps: getAuthScreenRightBackgroundImageRootProps,
358
+ getInputProps: getAuthScreenRightBackgroundImageInputProps,
359
+ isDragActive: isAuthScreenRightBackgroundImageDragActive,
360
+ } = useDropzone({
361
+ accept: {
362
+ 'image/png': ['.png'],
363
+ 'image/jpeg': ['.jpeg', '.jpg'],
364
+ 'image/svg+xml': ['.svg'],
365
+ 'image/webp': ['.webp'],
366
+ },
367
+ multiple: false,
368
+ onDrop: onAuthScreenRightBackgroundImageDrop,
369
+ });
370
+
371
+ const {
372
+ getRootProps: getAuthScreenLeftBackgroundImageRootProps,
373
+ getInputProps: getAuthScreenLeftBackgroundImageInputProps,
374
+ isDragActive: isAuthScreenLeftBackgroundImageDragActive,
375
+ } = useDropzone({
376
+ accept: {
377
+ 'image/png': ['.png'],
378
+ 'image/jpeg': ['.jpeg', '.jpg'],
379
+ 'image/svg+xml': ['.svg'],
380
+ 'image/webp': ['.webp']
381
+ },
382
+ multiple: false,
383
+ onDrop: onAuthScreenLeftBackgroundImageDrop
384
+ });
385
+
386
+ const {
387
+ getRootProps: getAuthScreenCenterBackgroundImageRootProps,
388
+ getInputProps: getAuthScreenCenterBackgroundImageInputProps,
389
+ isDragActive: isAuthScreenCenterBackgroundImageDragActive
390
+ } = useDropzone({
391
+ accept: {
392
+ 'image/png': ['.png'],
393
+ 'image/jpeg': ['.jpeg', '.jpg'],
394
+ 'image/svg+xml': ['.svg'],
395
+ 'image/webp': ['.webp']
396
+ },
397
+ multiple: false,
398
+ onDrop: onAuthScreenCenterBackgroundImageDrop
399
+ });
400
+
401
+ const removeAuthScreenRightBackgroundImage = () => {
402
+ formik.setFieldValue("authScreenRightBackgroundImage", null);
403
+ if (authScreenRightBackgroundImagePreview) {
404
+ URL.revokeObjectURL(authScreenRightBackgroundImagePreview);
405
+ setAuthScreenRightBackgroundImagePreview(null);
406
+ }
407
+ };
360
408
 
409
+ const removeAuthScreenLeftBackgroundImage = () => {
410
+ formik.setFieldValue("authScreenLeftBackgroundImage", null);
411
+ if (authScreenLeftBackgroundImagePreview) {
412
+ URL.revokeObjectURL(authScreenLeftBackgroundImagePreview);
413
+ setAuthScreenLeftBackgroundImagePreview(null);
414
+ }
415
+ };
361
416
 
362
- return (
363
- <div className="page-parent-wrapper">
364
- <div className="solid-form-wrapper">
365
- <div className="solid-form-section">
366
- <form onSubmit={formik.handleSubmit}>
367
- <div className="page-header secondary-border-bottom">
368
- <div className="form-wrapper-title ">Settings</div>
369
- <div className="gap-3 flex">
370
- {formik.dirty && (
371
- <SolidButton size="sm" type="submit" loading={formik.isSubmitting} onClick={() => showError()}>
372
- Save
373
- </SolidButton>
374
- )}
375
- {/* <CancelButton /> */}
417
+ const removeAuthScreenCenterBackgroundImage = () => {
418
+ formik.setFieldValue("authScreenCenterBackgroundImage", null);
419
+ if (authScreenCenterBackgroundImagePreview) {
420
+ URL.revokeObjectURL(authScreenCenterBackgroundImagePreview);
421
+ setAuthScreenCenterBackgroundImagePreview(null);
422
+ }
423
+ };
424
+
425
+ const handleAiConfigChange = (newConfig: SolidAiConfig) => {
426
+ formik.setFieldValue("solidXGenAiCodeBuilderConfig", newConfig);
427
+ };
428
+
429
+ return (
430
+ <div className="page-parent-wrapper">
431
+ <div className="solid-form-wrapper">
432
+ <div className="solid-form-section">
433
+ <form onSubmit={formik.handleSubmit}>
434
+ <div className="page-header secondary-border-bottom">
435
+ <div className="form-wrapper-title ">Settings</div>
436
+ <div className="gap-3 flex">
437
+ {formik.dirty && (
438
+ <SolidButton
439
+ size="sm"
440
+ type="submit"
441
+ loading={formik.isSubmitting}
442
+ onClick={() => showError()}
443
+ >
444
+ Save
445
+ </SolidButton>
446
+ )}
447
+ {/* <CancelButton /> */}
448
+ </div>
449
+ </div>
450
+ <div className="px-4 py-3 md:p-4 solid-form-content">
451
+ {pathname.includes("app-settings") && (
452
+ <>
453
+ <div className="formgrid grid">
454
+ <div className="col-12 lg:col-10 xl:col-8">
455
+ <div className="formgrid grid">
456
+ <div className="col-12 md:col-6">
457
+ <p className="solid-settings-subheading">App Logo</p>
458
+ <div>
459
+ <div
460
+ {...getAppLogoRootProps()}
461
+ className="solid-dropzone-wrapper"
462
+ style={{ borderRadius: 8 }}
463
+ >
464
+ <input {...getAppLogoInputProps()} />
465
+ {/* {isAppLogoDragActive && */}
466
+ <SettingDropzoneActivePlaceholder />
467
+ {/* } */}
468
+ </div>
469
+ <div className="mt-2">
470
+ {(() => {
471
+ const logoSrc =
472
+ (SolidLogo as any).src || SolidLogo;
473
+
474
+ let src = appLogoPreview
475
+ ? appLogoPreview
476
+ : formik.values.appLogo
477
+ ? formik.values.appLogo
478
+ : logoSrc;
479
+
480
+ const isBlobOrAbsolute =
481
+ src?.startsWith("blob:") ||
482
+ src?.startsWith("http");
483
+
484
+ if (!isBlobOrAbsolute && !src.startsWith("/")) {
485
+ src = `${env("API_URL")}/${src}`;
486
+ }
487
+ return (
488
+ <SolidUploadedImage
489
+ src={src}
490
+ className="solid-app-logo"
491
+ />
492
+ );
493
+ })()}
376
494
  </div>
495
+ {formik.values.appLogo && (
496
+ <SettingsImageRemoveButton
497
+ onClick={removeAppLogo}
498
+ />
499
+ )}
500
+ </div>
377
501
  </div>
378
- <div className="px-4 py-3 md:p-4 solid-form-content">
379
- {pathname.includes("app-settings") &&
380
- <>
381
- <div className='formgrid grid'>
382
- <div className='col-12 lg:col-10 xl:col-8'>
383
- <div className="formgrid grid">
384
- <div className="col-12 md:col-6">
385
- <p className="solid-settings-subheading">App Logo</p>
386
- <div>
387
- <div {...getAppLogoRootProps()} className="solid-dropzone-wrapper" style={{ borderRadius: 8 }}>
388
- <input {...getAppLogoInputProps()} />
389
- {/* {isAppLogoDragActive && */}
390
- <SettingDropzoneActivePlaceholder />
391
- {/* } */}
392
- </div>
393
- <div className="mt-2">
394
- {(() => {
395
- const logoSrc = (SolidLogo as any).src || SolidLogo;
396
-
397
- let src = appLogoPreview
398
- ? appLogoPreview
399
- : formik.values.appLogo
400
- ? formik.values.appLogo
401
- : logoSrc
402
-
403
- const isBlobOrAbsolute = src?.startsWith("blob:") || src?.startsWith("http");
404
-
405
- if (!isBlobOrAbsolute && !src.startsWith("/")) {
406
- src = `${env("API_URL")}/${src}`;
407
- }
408
- return (
409
- <SolidUploadedImage src={src} className='solid-app-logo' />
410
- );
411
- })()}
412
- </div>
413
- {formik.values.appLogo && (
414
- <SettingsImageRemoveButton onClick={removeAppLogo} />
415
- )}
416
- </div>
417
- </div>
418
- <div className="col-12 md:col-6">
419
- <p className="solid-settings-subheading">Company Logo</p>
420
- <div>
421
- <div {...getCompanyLogoRootProps()} className="solid-dropzone-wrapper" style={{ borderRadius: 8 }}>
422
- <input {...getCompanyLogoInputProps()} />
423
- {/* {isCompanyLogoDragActive && */}
424
- <SettingDropzoneActivePlaceholder />
425
- {/* } */}
426
- </div>
427
- <div className="mt-2">
428
- {(() => {
429
- const logoSrc = (SolidLogo as any).src || SolidLogo;
430
-
431
- let src = companyLogoPreview
432
- ? companyLogoPreview
433
- : formik.values.companylogo
434
- ? formik.values.companylogo
435
- : logoSrc
436
-
437
- const isBlobOrAbsolute = src?.startsWith("blob:") || src?.startsWith("http");
438
-
439
- if (!isBlobOrAbsolute && !src.startsWith("/")) {
440
- src = `${env("API_URL")}/${src}`;
441
- }
442
-
443
- return (
444
- <SolidUploadedImage src={src} className='solid-compony-logo' />
445
- );
446
- })()}
447
- </div>
448
- {formik.values.companylogo && (
449
- <SettingsImageRemoveButton onClick={removeCompanyLogo} />
450
- )}
451
- </div>
452
- </div>
453
- </div>
454
- </div>
455
- </div>
456
- <p className="solid-settings-heading">App Logo Position</p>
457
- <div className='formgrid grid'>
458
- <div className='col-12 lg:col-10 xl:col-8'>
459
- <div className="flex">
460
- <SolidSegmentedControl
461
- className="solid-settings-segmented"
462
- value={formik.values.appLogoPosition}
463
- options={[
464
- { value: "in_form_view", label: "In Form View" },
465
- { value: "in_image_view", label: "In Image View" },
466
- ]}
467
- onChange={(value) => formik.setFieldValue("appLogoPosition", value)}
468
- />
469
- </div>
470
- </div>
471
- </div>
472
- <SolidDivider className="my-4" />
473
- <p className="solid-settings-heading">Title & Description Details</p>
502
+ <div className="col-12 md:col-6">
503
+ <p className="solid-settings-subheading">
504
+ Company Logo
505
+ </p>
506
+ <div>
507
+ <div
508
+ {...getCompanyLogoRootProps()}
509
+ className="solid-dropzone-wrapper"
510
+ style={{ borderRadius: 8 }}
511
+ >
512
+ <input {...getCompanyLogoInputProps()} />
513
+ {/* {isCompanyLogoDragActive && */}
514
+ <SettingDropzoneActivePlaceholder />
515
+ {/* } */}
516
+ </div>
517
+ <div className="mt-2">
518
+ {(() => {
519
+ const logoSrc =
520
+ (SolidLogo as any).src || SolidLogo;
521
+
522
+ let src = companyLogoPreview
523
+ ? companyLogoPreview
524
+ : formik.values.companylogo
525
+ ? formik.values.companylogo
526
+ : logoSrc;
527
+
528
+ const isBlobOrAbsolute =
529
+ src?.startsWith("blob:") ||
530
+ src?.startsWith("http");
531
+
532
+ if (!isBlobOrAbsolute && !src.startsWith("/")) {
533
+ src = `${env("API_URL")}/${src}`;
534
+ }
535
+
536
+ return (
537
+ <SolidUploadedImage
538
+ src={src}
539
+ className="solid-compony-logo"
540
+ />
541
+ );
542
+ })()}
543
+ </div>
544
+ {formik.values.companylogo && (
545
+ <SettingsImageRemoveButton
546
+ onClick={removeCompanyLogo}
547
+ />
548
+ )}
549
+ </div>
550
+ </div>
551
+ </div>
552
+ </div>
553
+ </div>
554
+ <p className="solid-settings-heading">App Logo Position</p>
555
+ <div className="formgrid grid">
556
+ <div className="col-12 lg:col-10 xl:col-8">
557
+ <div className="flex">
558
+ <SolidSegmentedControl
559
+ className="solid-settings-segmented"
560
+ value={formik.values.appLogoPosition}
561
+ options={[
562
+ { value: "in_form_view", label: "In Form View" },
563
+ { value: "in_image_view", label: "In Image View" },
564
+ ]}
565
+ onChange={(value) => formik.setFieldValue("appLogoPosition", value)}
566
+ />
567
+ </div>
568
+ </div>
569
+ </div>
570
+ <SolidDivider className="my-4" />
571
+ <p className="solid-settings-heading">Title & Description Details</p>
474
572
  <div className='formgrid grid'>
475
573
  <div className='col-12 lg:col-10 xl:col-8'>
476
- <div className="formgrid grid">
477
- <div className="col-12 md:col-6">
478
- <div className="formgrid grid align-items-center">
479
- <div className="col-10 sm:col-9 lg:col-5 pb-2 md:pb-0">
574
+ <div className="formgrid grid">
575
+ <div className="col-12 md:col-6">
576
+ <div className="formgrid grid align-items-center">
577
+ <div className="col-10 sm:col-9 lg:col-5 pb-2 md:pb-0">
480
578
  <label className="form-field-label">Show Details on Authentication Screen</label>
481
- </div>
482
- <div className="col-2 sm:col-3 lg:col-7">
483
- <SolidSwitch
484
- name="showAuthContent"
485
- checked={formik.values.showAuthContent}
486
- onChange={(checked) => formik.setFieldValue("showAuthContent", checked)}
487
- />
488
- </div>
489
- </div>
490
- </div>
491
- <div className="col-12 md:col-6">
492
- <div className="formgrid grid align-items-center">
493
- <div className="col-12 md:col-5 pb-2 md:pb-0">
494
- <label className="form-field-label">App Title</label>
495
- </div>
496
- <div className="col-12 md:col-7">
497
- <SolidInput
498
- type="text"
499
- id="appTitle"
500
- name="appTitle"
501
- onChange={formik.handleChange}
502
- value={formik.values.appTitle ?? ''}
503
- className='w-full'
504
- />
505
- </div>
506
- </div>
507
- </div>
508
- <div className="col-12 md:col-6 mt-4">
509
- <div className="formgrid grid align-items-center">
510
- <div className="col-12 md:col-5 pb-2 md:pb-0">
511
- <label className="form-field-label">App Subtitle</label>
512
- </div>
513
- <div className="col-12 md:col-7">
514
- <SolidInput
515
- type="text"
516
- id="appSubtitle"
517
- name="appSubtitle"
518
- onChange={formik.handleChange}
519
- value={formik.values.appSubtitle ?? ''}
520
- className='w-full'
521
- />
522
- </div>
523
- </div>
524
- </div>
525
- <div className="col-12 md:col-6 mt-4">
526
- <div className="formgrid grid align-items-start">
527
- <div className="col-12 md:col-5 pb-2 md:pb-0">
528
- <label className="form-field-label">Description</label>
529
- </div>
530
- <div className="col-12 md:col-7">
531
- <SolidTextarea
532
- rows={3}
533
- id="appDescription"
534
- name="appDescription"
535
- onChange={formik.handleChange}
536
- value={formik.values.appDescription ?? ''}
537
- className='w-full'
538
- />
539
- </div>
540
- </div>
541
- </div>
542
- <div className="col-12 md:col-6 mt-4">
543
- <div className="formgrid grid align-items-start">
544
- <div className="col-12 md:col-5 pb-2 md:pb-0">
545
- <label className="form-field-label">Copyright</label>
546
- </div>
547
- <div className="col-12 md:col-7">
548
- <SolidTextarea
549
- rows={3}
550
- id="copyright"
551
- name="copyright"
552
- onChange={formik.handleChange}
553
- value={formik.values.copyright ?? ''}
554
- className='w-full'
555
- />
556
- </div>
557
- </div>
558
- </div>
559
- </div>
560
- </div>
561
- </div>
562
- <SolidDivider className="my-4" />
563
-
564
- <p className="solid-settings-heading">Legal Links</p>
565
- <div className='formgrid grid'>
566
- <div className='col-12 lg:col-10 xl:col-8'>
567
- <div className="formgrid grid">
568
- <div className="col-12 md:col-6">
569
- <div className="formgrid grid align-items-center">
570
- <div className="col-10 sm:col-9 lg:col-5">
571
- <label className="form-field-label">Show Legal Links</label>
572
- </div>
573
- <div className="col-2 sm:col-3 lg:col-7">
574
- <SolidSwitch
575
- name="showLegalLinks"
576
- checked={formik.values.showLegalLinks}
577
- onChange={(checked) => formik.setFieldValue("showLegalLinks", checked)}
578
- />
579
- </div>
580
- </div>
581
- </div>
582
- <div className="col-12 md:col-6">
583
- <div className="formgrid grid align-items-center">
584
- <div className="col-12 md:col-5 py-2 md:py-0">
585
- <label className="form-field-label">Terms and Conditions Link</label>
586
- </div>
587
- <div className="col-12 md:col-7">
588
- <SolidInput
589
- type="text"
590
- id="appTnc"
591
- name="appTnc"
592
- onChange={formik.handleChange}
593
- value={formik.values.appTnc ?? ''}
594
- className='w-full'
595
- />
596
- </div>
597
- </div>
598
- </div>
599
- <div className="col-12 md:col-6 mt-3">
600
- <div className="formgrid grid align-items-center">
601
- <div className="col-12 md:col-5 pb-2 md:pb-0">
602
- <label className="form-field-label">Privacy Policy Link</label>
603
- </div>
604
- <div className="col-12 md:col-7">
605
- <SolidInput
606
- type="text"
607
- id="appPrivacyPolicy"
608
- name="appPrivacyPolicy"
609
- onChange={formik.handleChange}
610
- value={formik.values.appPrivacyPolicy ?? ''}
611
- className='w-full'
612
- />
613
- </div>
614
- </div>
615
- </div>
616
- </div>
617
- </div>
618
- </div>
619
- <SolidDivider className="my-4" />
620
- <p className="solid-settings-heading">Theme</p>
621
- <div className='formgrid grid'>
622
- <div className='col-12 lg:col-10 xl:col-8'>
623
- <div className="formgrid grid">
624
- <div className="col-12 md:col-6">
625
- <div className="formgrid grid align-items-center">
626
- <div className="col-10 sm:col-10 lg:col-5">
627
- <label className="form-field-label">Enable Dark Mode</label>
628
- </div>
629
- <div className="col-2 sm:col-3 lg:col-7">
630
- <SolidSwitch
631
- name="enableDarkMode"
632
- checked={formik.values.enableDarkMode}
633
- onChange={(checked) => formik.setFieldValue("enableDarkMode", checked)}
634
- />
635
- </div>
636
- </div>
637
- </div>
638
- </div>
639
- </div>
640
- </div>
641
- </>
642
- }
643
- {pathname.includes("authentication-settings") &&
644
- <>
645
- <p className="solid-settings-heading">User Authentication</p>
646
- <div className='formgrid grid'>
647
- <div className='col-12 lg:col-10 xl:col-8'>
648
- <div className="formgrid grid">
649
- <div className="col-12">
650
- <div className="formgrid grid align-items-center">
651
- <div className="col-10 sm:col-9 lg:col-5">
652
- <label className="form-field-label">Public Registration</label>
653
- </div>
654
- <div className="col-2 sm:col-3 lg:col-7">
655
- <SolidSwitch
656
- name="allowPublicRegistration"
657
- checked={formik.values.allowPublicRegistration}
658
- onChange={(checked) => formik.setFieldValue("allowPublicRegistration", checked)}
659
- />
660
- </div>
661
- </div>
662
- </div>
663
- <div className="col-12 mt-3">
664
- <div className="formgrid grid align-items-center">
665
- <div className="col-10 sm:col-9 lg:col-5">
666
- <label className="form-field-label">Password Based Authentication</label>
667
- </div>
668
- <div className="col-2 sm:col-3 lg:col-7">
669
- <SolidSwitch
670
- name="passwordBasedAuth"
671
- checked={formik.values.passwordBasedAuth}
672
- onChange={(checked) => formik.setFieldValue("passwordBasedAuth", checked)}
673
- />
674
- </div>
675
- </div>
676
- </div>
677
- <div className="col-12 mt-3">
678
- <div className="formgrid grid align-items-center">
679
- <div className="col-10 sm:col-9 lg:col-5">
680
- <label className="form-field-label">Password Less Authentication</label>
681
- </div>
682
- <div className="col-2 sm:col-3 lg:col-7">
683
- <SolidSwitch
684
- name="passwordLessAuth"
685
- checked={formik.values.passwordLessAuth}
686
- onChange={(checked) => formik.setFieldValue("passwordLessAuth", checked)}
687
- />
688
- </div>
689
- </div>
690
- </div>
691
- <div className="col-12 mt-3">
692
- <div className="formgrid grid align-items-center">
693
- <div className="col-10 sm:col-9 lg:col-5">
694
- <label className="form-field-label">Auto Activate User on Registration </label>
695
- </div>
696
- <div className="col-2 sm:col-3 lg:col-7">
697
- <SolidSwitch
698
- name="activateUserOnRegistration"
699
- checked={formik.values.activateUserOnRegistration}
700
- onChange={(checked) => formik.setFieldValue("activateUserOnRegistration", checked)}
701
- />
702
- </div>
703
- </div>
704
- </div>
705
- <div className="col-12 mt-3">
706
- <div className="formgrid grid align-items-center">
707
- <div className="col-10 sm:col-9 lg:col-5">
708
- <label className="form-field-label">Allow Login/ Signup with Google </label>
709
- </div>
710
- <div className="col-2 sm:col-3 lg:col-7">
711
- <SolidSwitch
712
- name="iamGoogleOAuthEnabled"
713
- checked={formik.values.iamGoogleOAuthEnabled}
714
- onChange={(checked) => formik.setFieldValue("iamGoogleOAuthEnabled", checked)}
715
- />
716
- </div>
717
- </div>
718
- </div>
719
- <div className="col-12 mt-3">
720
- <div className="formgrid grid align-items-center">
721
- <div className="col-10 sm:col-9 lg:col-5">
722
- <label className="form-field-label">Force Password change on first Login </label>
723
- </div>
724
- <div className="col-2 sm:col-3 lg:col-7">
725
- <SolidSwitch
726
- name="forceChangePasswordOnFirstLogin"
727
- checked={formik.values.forceChangePasswordOnFirstLogin}
728
- onChange={(checked) => formik.setFieldValue("forceChangePasswordOnFirstLogin", checked)}
729
- />
730
- </div>
731
- </div>
732
- </div>
733
- {formik.values.passwordLessAuth === true &&
734
- <div className="col-12 mt-3">
735
- <div className="formgrid grid align-items-center">
736
- <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
737
- <label className="form-field-label">Password Less Registration Method</label>
738
- </div>
739
- <div className='col-12 sm:col-12 lg:col-6 xl:col-6'>
740
- <SolidSegmentedControl
741
- className="solid-settings-segmented mt-3 lg:mt-0"
742
- value={formik.values.passwordlessRegistrationValidateWhat}
743
- options={[
744
- { value: "email", label: "Email" },
745
- { value: "mobile", label: "Mobile" },
746
- ]}
747
- onChange={(value) => formik.setFieldValue("passwordlessRegistrationValidateWhat", value)}
748
- />
749
- </div>
750
- </div>
751
- </div>
752
- }
753
- {formik.values.passwordLessAuth === true &&
754
- <div className="col-12 mt-3">
755
- <div className="formgrid grid align-items-center">
756
- <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
757
- <label className="form-field-label">Password Less Login Method</label>
758
- </div>
759
- <div className='col-12 sm:col-12 lg:col-6 xl:col-6'>
760
- <SolidSegmentedControl
761
- className="solid-settings-segmented mt-3 lg:mt-0"
762
- value={formik.values.passwordlessLoginValidateWhat}
763
- options={[
764
- { value: "email", label: "Email" },
765
- { value: "mobile", label: "Mobile" },
766
- { value: "selectable", label: "Selectable" },
767
- ]}
768
- onChange={(value) => formik.setFieldValue("passwordlessLoginValidateWhat", value)}
769
- />
770
- </div>
771
- </div>
772
- </div>
773
- }
774
- </div>
775
- </div>
776
- </div>
777
- <SolidDivider className="my-4" />
778
- <p className="solid-settings-heading">Authentication Screen Layout</p>
779
- <div className='formgrid grid'>
780
- <div className='col-12 lg:col-10 xl:col-8'>
781
- <SolidSegmentedControl
782
- className="solid-settings-segmented"
783
- value={formik.values.authPagesLayout}
784
- options={[
785
- { value: "left", label: "Left" },
786
- { value: "center", label: "Center" },
787
- { value: "right", label: "Right" },
788
- ]}
789
- onChange={(value) => formik.setFieldValue("authPagesLayout", value)}
790
- />
791
- <p className="mt-3 text-sm font-bold">Note : {positionMap[formik.values.authPagesLayout as 'left' | 'center' | 'right']}</p>
792
- </div>
793
- </div>
794
- {formik.values.authPagesLayout === "center" && <></>}
795
- <div className='formgrid grid'>
796
- <div className='col-12 lg:col-10 xl:col-8'>
797
- <div className="formgrid grid">
798
- <div className="col-12 md:col-8 lg:col-6">
799
- <p className="solid-settings-subheading">
800
- {formik.values.authPagesLayout === "center" ? "Background" : "Banner"} Image
801
- </p>
802
- {formik.values.authPagesLayout === "left" &&
803
- <div>
804
- <div {...getAuthScreenLeftBackgroundImageRootProps()} className="solid-dropzone-wrapper" style={{ borderRadius: 8 }}>
805
- <input {...getAuthScreenLeftBackgroundImageInputProps()} />
806
- {/* {isAuthScreenLeftBackgroundImageDragActive && */}
807
- <SettingDropzoneActivePlaceholder note={"Recommended: 724×724px | Aspect ratio: 1:1"} />
808
- {/* } */}
809
- </div>
810
- <div className="mt-2">
811
- {(() => {
812
- const logoSrc = (AuthScreenLeftBackgroundImage as any).src || AuthScreenLeftBackgroundImage;
813
-
814
- let src = authScreenLeftBackgroundImagePreview
815
- ? authScreenLeftBackgroundImagePreview
816
- : formik.values.authScreenLeftBackgroundImage
817
- ? formik.values.authScreenLeftBackgroundImage
818
- : logoSrc
819
-
820
- const isBlobOrAbsolute = src?.startsWith("blob:") || src?.startsWith("http");
821
-
822
- if (!isBlobOrAbsolute && !src.startsWith("/")) {
823
- src = `${env("API_URL")}/${src}`;
824
- }
825
- return (
826
- <SolidUploadedImage src={src} height={400} width={400} maxHeight={400} />
827
- );
828
- })()}
829
- </div>
830
- {formik.values.authScreenLeftBackgroundImage && (
831
- <SettingsImageRemoveButton onClick={removeAuthScreenLeftBackgroundImage} />
832
- )}
833
- </div>
834
- }
835
- {formik.values.authPagesLayout === "right" &&
836
- <div>
837
- <div {...getAuthScreenRightBackgroundImageRootProps()} className="solid-dropzone-wrapper" style={{ borderRadius: 8 }}>
838
- <input {...getAuthScreenRightBackgroundImageInputProps()} />
839
- {/* {isAuthScreenRightBackgroundImageDragActive && */}
840
- <SettingDropzoneActivePlaceholder note={"Recommended: 724×724px | Aspect ratio: 1:1"} />
841
- {/* } */}
842
- </div>
843
- <div className="mt-2">
844
- {(() => {
845
- const logoSrc = (AuthScreenRightBackgroundImage as any).src || AuthScreenRightBackgroundImage;
846
-
847
- let src = authScreenRightBackgroundImagePreview
848
- ? authScreenRightBackgroundImagePreview
849
- : formik.values.authScreenRightBackgroundImage
850
- ? formik.values.authScreenRightBackgroundImage
851
- : logoSrc
852
-
853
- const isBlobOrAbsolute = src?.startsWith("blob:") || src?.startsWith("http");
854
-
855
- if (!isBlobOrAbsolute && !src.startsWith("/")) {
856
- src = `${env("API_URL")}/${src}`;
857
- }
858
- return (
859
- <SolidUploadedImage src={src} height={400} width={400} maxHeight={400} />
860
- );
861
- })()}
862
- </div>
863
- {formik.values.authScreenRightBackgroundImage && (
864
- <SettingsImageRemoveButton onClick={removeAuthScreenRightBackgroundImage} />
865
- )}
866
- </div>
867
- }
868
- {formik.values.authPagesLayout === "center" &&
869
- <div>
870
- <div {...getAuthScreenCenterBackgroundImageRootProps()} className="solid-dropzone-wrapper" style={{ borderRadius: 8 }}>
871
- <input {...getAuthScreenCenterBackgroundImageInputProps()} />
872
- <SettingDropzoneActivePlaceholder note={"Recommended: 1440px × 724px | Aspect ratio: 2:1"} />
873
- </div>
874
- <div className="mt-2">
875
- {(() => {
876
- const logoSrc = (AuthScreenCenterBackgroundImage as any).src || AuthScreenCenterBackgroundImage;
877
-
878
- let src = authScreenCenterBackgroundImagePreview
879
- ? authScreenCenterBackgroundImagePreview
880
- : formik.values.authScreenCenterBackgroundImage
881
- ? formik.values.authScreenCenterBackgroundImage
882
- : logoSrc
883
-
884
- const isBlobOrAbsolute = src?.startsWith("blob:") || src?.startsWith("http");
579
+ </div>
580
+ <div className="col-2 sm:col-3 lg:col-7">
581
+ <SolidSwitch
582
+ name="showAuthContent"
583
+ checked={formik.values.showAuthContent}
584
+ onChange={(checked) =>
585
+ formik.setFieldValue(
586
+ "showAuthContent",
587
+ checked,
588
+ )
589
+ }
590
+ />
591
+ </div>
592
+ </div>
593
+ </div>
594
+ <div className="col-12 md:col-6">
595
+ <div className="formgrid grid align-items-center">
596
+ <div className="col-12 md:col-5 pb-2 md:pb-0">
597
+ <label className="form-field-label">
598
+ App Title
599
+ </label>
600
+ </div>
601
+ <div className="col-12 md:col-7">
602
+ <SolidInput
603
+ type="text"
604
+ id="appTitle"
605
+ name="appTitle"
606
+ onChange={formik.handleChange}
607
+ value={formik.values.appTitle ?? ''}
608
+ className="w-full"
609
+ />
610
+ </div>
611
+ </div>
612
+ </div>
613
+ <div className="col-12 md:col-6 mt-4">
614
+ <div className="formgrid grid align-items-center">
615
+ <div className="col-12 md:col-5 pb-2 md:pb-0">
616
+ <label className="form-field-label">
617
+ App Subtitle
618
+ </label>
619
+ </div>
620
+ <div className="col-12 md:col-7">
621
+ <SolidInput
622
+ type="text"
623
+ id="appSubtitle"
624
+ name="appSubtitle"
625
+ onChange={formik.handleChange}
626
+ value={formik.values.appSubtitle ?? ''}
627
+ className="w-full"
628
+ />
629
+ </div>
630
+ </div>
631
+ </div>
632
+ <div className="col-12 md:col-6 mt-4">
633
+ <div className="formgrid grid align-items-start">
634
+ <div className="col-12 md:col-5 pb-2 md:pb-0">
635
+ <label className="form-field-label">
636
+ Description
637
+ </label>
638
+ </div>
639
+ <div className="col-12 md:col-7">
640
+ <SolidTextarea
641
+ rows={3}
642
+ id="appDescription"
643
+ name="appDescription"
644
+ onChange={formik.handleChange}
645
+ value={formik.values.appDescription ?? ''}
646
+ className='w-full'
647
+ />
648
+ </div>
649
+ </div>
650
+ </div>
651
+ <div className="col-12 md:col-6 mt-4">
652
+ <div className="formgrid grid align-items-start">
653
+ <div className="col-12 md:col-5 pb-2 md:pb-0">
654
+ <label className="form-field-label">Copyright</label>
655
+ </div>
656
+ <div className="col-12 md:col-7">
657
+ <SolidTextarea
658
+ rows={3}
659
+ id="copyright"
660
+ name="copyright"
661
+ onChange={formik.handleChange}
662
+ value={formik.values.copyright ?? ''}
663
+ className='w-full'
664
+ />
665
+ </div>
666
+ </div>
667
+ </div>
668
+ </div>
669
+ </div>
670
+ </div>
671
+ <SolidDivider className="my-4" />
672
+
673
+ <p className="solid-settings-heading">Legal Links</p>
674
+ <div className='formgrid grid'>
675
+ <div className='col-12 lg:col-10 xl:col-8'>
676
+ <div className="formgrid grid">
677
+ <div className="col-12 md:col-6">
678
+ <div className="formgrid grid align-items-center">
679
+ <div className="col-10 sm:col-9 lg:col-5">
680
+ <label className="form-field-label">Show Legal Links</label>
681
+ </div>
682
+ <div className="col-2 sm:col-3 lg:col-7">
683
+ <SolidSwitch
684
+ name="showLegalLinks"
685
+ checked={formik.values.showLegalLinks}
686
+ onChange={(checked) => formik.setFieldValue("showLegalLinks", checked)}
687
+ />
688
+ </div>
689
+ </div>
690
+ </div>
691
+ <div className="col-12 md:col-6">
692
+ <div className="formgrid grid align-items-center">
693
+ <div className="col-12 md:col-5 py-2 md:py-0">
694
+ <label className="form-field-label">
695
+ Terms and Conditions Link
696
+ </label>
697
+ </div>
698
+ <div className="col-12 md:col-7">
699
+ <SolidInput
700
+ type="text"
701
+ id="appTnc"
702
+ name="appTnc"
703
+ onChange={formik.handleChange}
704
+ value={formik.values.appTnc ?? ""}
705
+ className="w-full"
706
+ />
707
+ </div>
708
+ </div>
709
+ </div>
710
+ <div className="col-12 md:col-6 mt-3">
711
+ <div className="formgrid grid align-items-center">
712
+ <div className="col-12 md:col-5 pb-2 md:pb-0">
713
+ <label className="form-field-label">
714
+ Privacy Policy Link
715
+ </label>
716
+ </div>
717
+ <div className="col-12 md:col-7">
718
+ <SolidInput
719
+ type="text"
720
+ id="appPrivacyPolicy"
721
+ name="appPrivacyPolicy"
722
+ onChange={formik.handleChange}
723
+ value={formik.values.appPrivacyPolicy ?? ""}
724
+ className="w-full"
725
+ />
726
+ </div>
727
+ </div>
728
+ </div>
729
+ </div>
730
+ </div>
731
+ </div>
732
+ <SolidDivider className="my-4" />
733
+ <p className="solid-settings-heading">Theme</p>
734
+ <div className="formgrid grid">
735
+ <div className="col-12 lg:col-10 xl:col-8">
736
+ <div className="formgrid grid">
737
+ <div className="col-12 md:col-6">
738
+ <div className="formgrid grid align-items-center">
739
+ <div className="col-10 sm:col-10 lg:col-5">
740
+ <label className="form-field-label">
741
+ Enable Dark Mode
742
+ </label>
743
+ </div>
744
+ <div className="col-2 sm:col-3 lg:col-7">
745
+ <SolidSwitch
746
+ name="enableDarkMode"
747
+ checked={formik.values.enableDarkMode}
748
+ onChange={(checked) => formik.setFieldValue("enableDarkMode",checked)}
749
+ />
750
+ </div>
751
+ </div>
752
+ </div>
753
+ </div>
754
+ </div>
755
+ </div>
756
+ </>
757
+ )}
758
+ {pathname.includes("authentication-settings") && (
759
+ <>
760
+ <p className="solid-settings-heading">User Authentication</p>
761
+ <div className="formgrid grid">
762
+ <div className="col-12 lg:col-10 xl:col-8">
763
+ <div className="formgrid grid">
764
+ <div className="col-12">
765
+ <div className="formgrid grid align-items-center">
766
+ <div className="col-10 sm:col-9 lg:col-5">
767
+ <label className="form-field-label">
768
+ Public Registration
769
+ </label>
770
+ </div>
771
+ <div className="col-2 sm:col-3 lg:col-7">
772
+ <SolidSwitch
773
+ name="allowPublicRegistration"
774
+ checked={formik.values.allowPublicRegistration}
775
+ onChange={(checked) =>
776
+ formik.setFieldValue(
777
+ "allowPublicRegistration",
778
+ checked,
779
+ )
780
+ }
781
+ />
782
+ </div>
783
+ </div>
784
+ </div>
785
+ <div className="col-12 mt-3">
786
+ <div className="formgrid grid align-items-center">
787
+ <div className="col-10 sm:col-9 lg:col-5">
788
+ <label className="form-field-label">
789
+ Password Based Authentication
790
+ </label>
791
+ </div>
792
+ <div className="col-2 sm:col-3 lg:col-7">
793
+ <SolidSwitch
794
+ name="passwordBasedAuth"
795
+ checked={formik.values.passwordBasedAuth}
796
+ onChange={(checked) =>
797
+ formik.setFieldValue(
798
+ "passwordBasedAuth",
799
+ checked,
800
+ )
801
+ }
802
+ />
803
+ </div>
804
+ </div>
805
+ </div>
806
+ <div className="col-12 mt-3">
807
+ <div className="formgrid grid align-items-center">
808
+ <div className="col-10 sm:col-9 lg:col-5">
809
+ <label className="form-field-label">
810
+ Password Less Authentication
811
+ </label>
812
+ </div>
813
+ <div className="col-2 sm:col-3 lg:col-7">
814
+ <SolidSwitch
815
+ name="passwordLessAuth"
816
+ checked={formik.values.passwordLessAuth}
817
+ onChange={(checked) =>
818
+ formik.setFieldValue(
819
+ "passwordLessAuth",
820
+ checked,
821
+ )
822
+ }
823
+ />
824
+ </div>
825
+ </div>
826
+ </div>
827
+ <div className="col-12 mt-3">
828
+ <div className="formgrid grid align-items-center">
829
+ <div className="col-10 sm:col-9 lg:col-5">
830
+ <label className="form-field-label">
831
+ Auto Activate User on Registration{" "}
832
+ </label>
833
+ </div>
834
+ <div className="col-2 sm:col-3 lg:col-7">
835
+ <SolidSwitch
836
+ name="activateUserOnRegistration"
837
+ checked={
838
+ formik.values.activateUserOnRegistration
839
+ }
840
+ onChange={(checked) =>
841
+ formik.setFieldValue(
842
+ "activateUserOnRegistration",
843
+ checked,
844
+ )
845
+ }
846
+ />
847
+ </div>
848
+ </div>
849
+ </div>
850
+ <div className="col-12 mt-3">
851
+ <div className="formgrid grid align-items-center">
852
+ <div className="col-10 sm:col-9 lg:col-5">
853
+ <label className="form-field-label">
854
+ Allow Login/ Signup with Google{" "}
855
+ </label>
856
+ </div>
857
+ <div className="col-2 sm:col-3 lg:col-7">
858
+ <SolidSwitch
859
+ name="iamGoogleOAuthEnabled"
860
+ checked={formik.values.iamGoogleOAuthEnabled}
861
+ onChange={(checked) =>
862
+ formik.setFieldValue(
863
+ "iamGoogleOAuthEnabled",
864
+ checked,
865
+ )
866
+ }
867
+ />
868
+ </div>
869
+ </div>
870
+ </div>
871
+ <div className="col-12 mt-3">
872
+ <div className="formgrid grid align-items-center">
873
+ <div className="col-10 sm:col-9 lg:col-5">
874
+ <label className="form-field-label">
875
+ Allow Login/ Signup with Microsoft{" "}
876
+ </label>
877
+ </div>
878
+ <div className="col-2 sm:col-3 lg:col-7">
879
+ <SolidSwitch
880
+ name="iamMicrosoftOAuthEnabled"
881
+ checked={formik.values.iamMicrosoftOAuthEnabled}
882
+ onChange={(checked) =>
883
+ formik.setFieldValue(
884
+ "iamMicrosoftOAuthEnabled",
885
+ checked,
886
+ )
887
+ }
888
+ />
889
+ </div>
890
+ </div>
891
+ </div>
892
+ <div className="col-12 mt-3">
893
+ <div className="formgrid grid align-items-center">
894
+ <div className="col-10 sm:col-9 lg:col-5">
895
+ <label className="form-field-label">
896
+ Allow Login/ Signup with Facebook{" "}
897
+ </label>
898
+ </div>
899
+ <div className="col-2 sm:col-3 lg:col-7">
900
+ <SolidSwitch
901
+ name="iamFacebookOAuthEnabled"
902
+ checked={formik.values.iamFacebookOAuthEnabled}
903
+ onChange={(checked) =>
904
+ formik.setFieldValue(
905
+ "iamFacebookOAuthEnabled",
906
+ checked,
907
+ )
908
+ }
909
+ />
910
+ </div>
911
+ </div>
912
+ </div>
913
+ <div className="col-12 mt-3">
914
+ <div className="formgrid grid align-items-center">
915
+ <div className="col-10 sm:col-9 lg:col-5">
916
+ <label className="form-field-label">
917
+ Allow Login/ Signup with Apple{" "}
918
+ </label>
919
+ </div>
920
+ <div className="col-2 sm:col-3 lg:col-7">
921
+ <SolidSwitch
922
+ name="iamAppleOAuthEnabled"
923
+ checked={formik.values.iamAppleOAuthEnabled}
924
+ onChange={(checked) =>
925
+ formik.setFieldValue(
926
+ "iamAppleOAuthEnabled",
927
+ checked,
928
+ )
929
+ }
930
+ />
931
+ </div>
932
+ </div>
933
+ </div>
934
+ <div className="col-12 mt-3">
935
+ <div className="formgrid grid align-items-center">
936
+ <div className="col-10 sm:col-9 lg:col-5">
937
+ <label className="form-field-label">
938
+ Force Password change on first Login{" "}
939
+ </label>
940
+ </div>
941
+ <div className="col-2 sm:col-3 lg:col-7">
942
+ <SolidSwitch
943
+ name="forceChangePasswordOnFirstLogin"
944
+ checked={
945
+ formik.values.forceChangePasswordOnFirstLogin
946
+ }
947
+ onChange={(checked) =>
948
+ formik.setFieldValue(
949
+ "forceChangePasswordOnFirstLogin",
950
+ checked,
951
+ )
952
+ }
953
+ />
954
+ </div>
955
+ </div>
956
+ </div>
957
+ {formik.values.passwordLessAuth === true && (
958
+ <div className="col-12 mt-3">
959
+ <div className="formgrid grid align-items-center">
960
+ <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
961
+ <label className="form-field-label">
962
+ Password Less Registration Method
963
+ </label>
964
+ </div>
965
+ <div className="col-12 sm:col-12 lg:col-6 xl:col-6">
966
+ <SolidSegmentedControl
967
+ className="solid-settings-segmented mt-3 lg:mt-0"
968
+ value={
969
+ formik.values
970
+ .passwordlessRegistrationValidateWhat
971
+ }
972
+ options={[
973
+ { value: "email", label: "Email" },
974
+ { value: "mobile", label: "Mobile" },
975
+ ]}
976
+ onChange={(value) =>
977
+ formik.setFieldValue(
978
+ "passwordlessRegistrationValidateWhat",
979
+ value,
980
+ )
981
+ }
982
+ />
983
+ </div>
984
+ </div>
985
+ </div>
986
+ )}
987
+ {formik.values.passwordLessAuth === true && (
988
+ <div className="col-12 mt-3">
989
+ <div className="formgrid grid align-items-center">
990
+ <div className="col-12 sm:col-12 lg:col-5 xl:col-5">
991
+ <label className="form-field-label">
992
+ Password Less Login Method
993
+ </label>
994
+ </div>
995
+ <div className="col-12 sm:col-12 lg:col-6 xl:col-6">
996
+ <SolidSegmentedControl
997
+ className="solid-settings-segmented mt-3 lg:mt-0"
998
+ value={
999
+ formik.values.passwordlessLoginValidateWhat
1000
+ }
1001
+ options={[
1002
+ { value: "email", label: "Email" },
1003
+ { value: "mobile", label: "Mobile" },
1004
+ {
1005
+ value: "selectable",
1006
+ label: "Selectable",
1007
+ },
1008
+ ]}
1009
+ onChange={(value) =>
1010
+ formik.setFieldValue(
1011
+ "passwordlessLoginValidateWhat",
1012
+ value,
1013
+ )
1014
+ }
1015
+ />
1016
+ </div>
1017
+ </div>
1018
+ </div>
1019
+ )}
1020
+ </div>
1021
+ </div>
1022
+ </div>
1023
+ <SolidDivider className="my-4" />
1024
+ <p className="solid-settings-heading">
1025
+ Authentication Screen Layout
1026
+ </p>
1027
+ <div className="formgrid grid">
1028
+ <div className="col-12 lg:col-10 xl:col-8">
1029
+ <SolidSegmentedControl
1030
+ className="solid-settings-segmented"
1031
+ value={formik.values.authPagesLayout}
1032
+ options={[
1033
+ { value: "left", label: "Left" },
1034
+ { value: "center", label: "Center" },
1035
+ { value: "right", label: "Right" },
1036
+ ]}
1037
+ onChange={(value) =>
1038
+ formik.setFieldValue("authPagesLayout", value)
1039
+ }
1040
+ />
1041
+ <p className="mt-3 text-sm font-bold">
1042
+ Note :{" "}
1043
+ {
1044
+ positionMap[
1045
+ formik.values.authPagesLayout as
1046
+ | "left"
1047
+ | "center"
1048
+ | "right"
1049
+ ]
1050
+ }
1051
+ </p>
1052
+ </div>
1053
+ </div>
1054
+ {formik.values.authPagesLayout === "center" && <></>}
1055
+ <div className="formgrid grid">
1056
+ <div className="col-12 lg:col-10 xl:col-8">
1057
+ <div className="formgrid grid">
1058
+ <div className="col-12 md:col-8 lg:col-6">
1059
+ <p className="solid-settings-subheading">
1060
+ {formik.values.authPagesLayout === "center"
1061
+ ? "Background"
1062
+ : "Banner"}{" "}
1063
+ Image
1064
+ </p>
1065
+ {formik.values.authPagesLayout === "left" && (
1066
+ <div>
1067
+ <div
1068
+ {...getAuthScreenLeftBackgroundImageRootProps()}
1069
+ className="solid-dropzone-wrapper"
1070
+ style={{ borderRadius: 8 }}
1071
+ >
1072
+ <input
1073
+ {...getAuthScreenLeftBackgroundImageInputProps()}
1074
+ />
1075
+ {/* {isAuthScreenLeftBackgroundImageDragActive && */}
1076
+ <SettingDropzoneActivePlaceholder
1077
+ note={
1078
+ "Recommended: 724×724px | Aspect ratio: 1:1"
1079
+ }
1080
+ />
1081
+ {/* } */}
1082
+ </div>
1083
+ <div className="mt-2">
1084
+ {(() => {
1085
+ const logoSrc =
1086
+ (AuthScreenLeftBackgroundImage as any)
1087
+ .src || AuthScreenLeftBackgroundImage;
1088
+
1089
+ let src = authScreenLeftBackgroundImagePreview
1090
+ ? authScreenLeftBackgroundImagePreview
1091
+ : formik.values
1092
+ .authScreenLeftBackgroundImage
1093
+ ? formik.values
1094
+ .authScreenLeftBackgroundImage
1095
+ : logoSrc;
1096
+
1097
+ const isBlobOrAbsolute =
1098
+ src?.startsWith("blob:") ||
1099
+ src?.startsWith("http");
1100
+
1101
+ if (
1102
+ !isBlobOrAbsolute &&
1103
+ !src.startsWith("/")
1104
+ ) {
1105
+ src = `${env("API_URL")}/${src}`;
1106
+ }
1107
+ return (
1108
+ <SolidUploadedImage
1109
+ src={src}
1110
+ height={400}
1111
+ width={400}
1112
+ maxHeight={400}
1113
+ />
1114
+ );
1115
+ })()}
1116
+ </div>
1117
+ {formik.values.authScreenLeftBackgroundImage && (
1118
+ <SettingsImageRemoveButton
1119
+ onClick={removeAuthScreenLeftBackgroundImage}
1120
+ />
1121
+ )}
1122
+ </div>
1123
+ )}
1124
+ {formik.values.authPagesLayout === "right" && (
1125
+ <div>
1126
+ <div
1127
+ {...getAuthScreenRightBackgroundImageRootProps()}
1128
+ className="solid-dropzone-wrapper"
1129
+ style={{ borderRadius: 8 }}
1130
+ >
1131
+ <input
1132
+ {...getAuthScreenRightBackgroundImageInputProps()}
1133
+ />
1134
+ {/* {isAuthScreenRightBackgroundImageDragActive && */}
1135
+ <SettingDropzoneActivePlaceholder
1136
+ note={
1137
+ "Recommended: 724×724px | Aspect ratio: 1:1"
1138
+ }
1139
+ />
1140
+ {/* } */}
1141
+ </div>
1142
+ <div className="mt-2">
1143
+ {(() => {
1144
+ const logoSrc =
1145
+ (AuthScreenRightBackgroundImage as any)
1146
+ .src || AuthScreenRightBackgroundImage;
1147
+
1148
+ let src =
1149
+ authScreenRightBackgroundImagePreview
1150
+ ? authScreenRightBackgroundImagePreview
1151
+ : formik.values
1152
+ .authScreenRightBackgroundImage
1153
+ ? formik.values
1154
+ .authScreenRightBackgroundImage
1155
+ : logoSrc;
1156
+
1157
+ const isBlobOrAbsolute =
1158
+ src?.startsWith("blob:") ||
1159
+ src?.startsWith("http");
1160
+
1161
+ if (
1162
+ !isBlobOrAbsolute &&
1163
+ !src.startsWith("/")
1164
+ ) {
1165
+ src = `${env("API_URL")}/${src}`;
1166
+ }
1167
+ return (
1168
+ <SolidUploadedImage
1169
+ src={src}
1170
+ height={400}
1171
+ width={400}
1172
+ maxHeight={400}
1173
+ />
1174
+ );
1175
+ })()}
1176
+ </div>
1177
+ {formik.values.authScreenRightBackgroundImage && (
1178
+ <SettingsImageRemoveButton
1179
+ onClick={removeAuthScreenRightBackgroundImage}
1180
+ />
1181
+ )}
1182
+ </div>
1183
+ )}
1184
+ {formik.values.authPagesLayout === "center" && (
1185
+ <div>
1186
+ <div
1187
+ {...getAuthScreenCenterBackgroundImageRootProps()}
1188
+ className="solid-dropzone-wrapper"
1189
+ style={{ borderRadius: 8 }}
1190
+ >
1191
+ <input
1192
+ {...getAuthScreenCenterBackgroundImageInputProps()}
1193
+ />
1194
+ <SettingDropzoneActivePlaceholder
1195
+ note={
1196
+ "Recommended: 1440px × 724px | Aspect ratio: 2:1"
1197
+ }
1198
+ />
1199
+ </div>
1200
+ <div className="mt-2">
1201
+ {(() => {
1202
+ const logoSrc =
1203
+ (AuthScreenCenterBackgroundImage as any)
1204
+ .src || AuthScreenCenterBackgroundImage;
1205
+
1206
+ let src =
1207
+ authScreenCenterBackgroundImagePreview
1208
+ ? authScreenCenterBackgroundImagePreview
1209
+ : formik.values
1210
+ .authScreenCenterBackgroundImage
1211
+ ? formik.values
1212
+ .authScreenCenterBackgroundImage
1213
+ : logoSrc;
1214
+
1215
+ const isBlobOrAbsolute =
1216
+ src?.startsWith("blob:") ||
1217
+ src?.startsWith("http");
885
1218
 
886
1219
  if (!isBlobOrAbsolute && !src.startsWith("/")) {
887
1220
  src = `${env("API_URL")}/${src}`;
@@ -895,18 +1228,18 @@ export const GeneralSettings = () => {
895
1228
  <SettingsImageRemoveButton onClick={removeAuthScreenCenterBackgroundImage} />
896
1229
  )}
897
1230
  </div>
898
- }
1231
+ )}
899
1232
  </div>
900
1233
  </div>
901
1234
  </div>
902
1235
  </div>
903
1236
  <SolidDivider className="my-4" />
904
1237
  </>
905
- }
1238
+ )}
906
1239
 
907
- {pathname.includes("misc-settings") &&
908
- <>
909
- {/*
1240
+ {pathname.includes("misc-settings") && (
1241
+ <>
1242
+ {/*
910
1243
  <p className='font-bold' style={{ fontSize: 16, color: 'var(--solid-setting-title)' }}>Misc Details</p>
911
1244
  <div className='formgrid grid'>
912
1245
  <div className='col-12 lg:col-10 xl:col-8'>
@@ -986,7 +1319,7 @@ export const GeneralSettings = () => {
986
1319
  </div>
987
1320
  </div>
988
1321
  </>
989
- }
1322
+ )}
990
1323
  {pathname.includes("ai-settings") &&
991
1324
  <AiSettingsSection
992
1325
  aiConfig={formik.values.solidXGenAiCodeBuilderConfig as SolidAiConfig}
@@ -1008,8 +1341,8 @@ export const GeneralSettings = () => {
1008
1341
  }
1009
1342
 
1010
1343
  interface AiSettingsSectionProps {
1011
- aiConfig: SolidAiConfig;
1012
- onAiConfigChange: (config: SolidAiConfig) => void;
1344
+ aiConfig: SolidAiConfig;
1345
+ onAiConfigChange: (config: SolidAiConfig) => void;
1013
1346
  }
1014
1347
 
1015
1348
  const DEFAULT_BEHAVIOR: ModelBehavior = { streaming: false, custom: "" };