@solidxai/core-ui 0.1.8-beta.8 → 0.1.8

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