@solidxai/core-ui 0.1.8-beta.2 → 0.1.8-beta.20

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 (507) hide show
  1. package/dist/adapters/auth/getSession.d.ts.map +1 -1
  2. package/dist/adapters/auth/getSession.js +1 -1
  3. package/dist/adapters/auth/getSession.js.map +1 -1
  4. package/dist/adapters/auth/getSession.ts +1 -0
  5. package/dist/adapters/auth/helper.d.ts.map +1 -1
  6. package/dist/adapters/auth/helper.js +1 -0
  7. package/dist/adapters/auth/helper.js.map +1 -1
  8. package/dist/adapters/auth/helper.ts +3 -1
  9. package/dist/adapters/auth/signIn.d.ts.map +1 -1
  10. package/dist/adapters/auth/signIn.js +1 -0
  11. package/dist/adapters/auth/signIn.js.map +1 -1
  12. package/dist/adapters/auth/signIn.ts +3 -1
  13. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts +1 -0
  14. package/dist/adapters/auth/signInWithOAuthAccessCode.d.ts.map +1 -1
  15. package/dist/adapters/auth/signInWithOAuthAccessCode.js +10 -9
  16. package/dist/adapters/auth/signInWithOAuthAccessCode.js.map +1 -1
  17. package/dist/adapters/auth/signInWithOAuthAccessCode.ts +6 -3
  18. package/dist/adapters/auth/signOut.d.ts.map +1 -1
  19. package/dist/adapters/auth/signOut.js +7 -1
  20. package/dist/adapters/auth/signOut.js.map +1 -1
  21. package/dist/adapters/auth/signOut.ts +7 -1
  22. package/dist/adapters/auth/types.d.ts +1 -0
  23. package/dist/adapters/auth/types.d.ts.map +1 -1
  24. package/dist/adapters/auth/types.js.map +1 -1
  25. package/dist/adapters/auth/types.ts +1 -0
  26. package/dist/components/auth/AuthLayout.d.ts.map +1 -1
  27. package/dist/components/auth/AuthLayout.js +95 -38
  28. package/dist/components/auth/AuthLayout.js.map +1 -1
  29. package/dist/components/auth/AuthLayout.tsx +50 -39
  30. package/dist/components/auth/AuthSettingsContext.d.ts +10 -0
  31. package/dist/components/auth/AuthSettingsContext.d.ts.map +1 -0
  32. package/dist/components/auth/AuthSettingsContext.js +49 -0
  33. package/dist/components/auth/AuthSettingsContext.js.map +1 -0
  34. package/dist/components/auth/AuthSettingsContext.tsx +19 -0
  35. package/dist/components/auth/AuthTabs.d.ts.map +1 -1
  36. package/dist/components/auth/AuthTabs.js +9 -9
  37. package/dist/components/auth/AuthTabs.js.map +1 -1
  38. package/dist/components/auth/AuthTabs.tsx +14 -15
  39. package/dist/components/auth/FacebookAuthChecking.d.ts +2 -0
  40. package/dist/components/auth/FacebookAuthChecking.d.ts.map +1 -0
  41. package/dist/components/auth/FacebookAuthChecking.js +103 -0
  42. package/dist/components/auth/FacebookAuthChecking.js.map +1 -0
  43. package/dist/components/auth/FacebookAuthChecking.tsx +64 -0
  44. package/dist/components/auth/ForgotPasswordThankYou.d.ts.map +1 -1
  45. package/dist/components/auth/ForgotPasswordThankYou.js +2 -6
  46. package/dist/components/auth/ForgotPasswordThankYou.js.map +1 -1
  47. package/dist/components/auth/ForgotPasswordThankYou.tsx +2 -7
  48. package/dist/components/auth/GoogleAuthChecking.js +0 -1
  49. package/dist/components/auth/GoogleAuthChecking.js.map +1 -1
  50. package/dist/components/auth/GoogleAuthChecking.tsx +1 -1
  51. package/dist/components/auth/MicrosoftAuthChecking.d.ts +2 -0
  52. package/dist/components/auth/MicrosoftAuthChecking.d.ts.map +1 -0
  53. package/dist/components/auth/MicrosoftAuthChecking.js +103 -0
  54. package/dist/components/auth/MicrosoftAuthChecking.js.map +1 -0
  55. package/dist/components/auth/MicrosoftAuthChecking.tsx +64 -0
  56. package/dist/components/auth/SolidForgotPassword.d.ts.map +1 -1
  57. package/dist/components/auth/SolidForgotPassword.js +3 -7
  58. package/dist/components/auth/SolidForgotPassword.js.map +1 -1
  59. package/dist/components/auth/SolidForgotPassword.tsx +3 -7
  60. package/dist/components/auth/SolidInitialLoginOtp.d.ts.map +1 -1
  61. package/dist/components/auth/SolidInitialLoginOtp.js +4 -8
  62. package/dist/components/auth/SolidInitialLoginOtp.js.map +1 -1
  63. package/dist/components/auth/SolidInitialLoginOtp.tsx +3 -6
  64. package/dist/components/auth/SolidInitiateRegisterOtp.d.ts.map +1 -1
  65. package/dist/components/auth/SolidInitiateRegisterOtp.js +27 -14
  66. package/dist/components/auth/SolidInitiateRegisterOtp.js.map +1 -1
  67. package/dist/components/auth/SolidInitiateRegisterOtp.tsx +27 -15
  68. package/dist/components/auth/SolidLogin.d.ts.map +1 -1
  69. package/dist/components/auth/SolidLogin.js +11 -11
  70. package/dist/components/auth/SolidLogin.js.map +1 -1
  71. package/dist/components/auth/SolidLogin.tsx +20 -9
  72. package/dist/components/auth/SolidRegister.d.ts.map +1 -1
  73. package/dist/components/auth/SolidRegister.js +53 -25
  74. package/dist/components/auth/SolidRegister.js.map +1 -1
  75. package/dist/components/auth/SolidRegister.tsx +107 -40
  76. package/dist/components/auth/SolidResetPassword.d.ts.map +1 -1
  77. package/dist/components/auth/SolidResetPassword.js +2 -6
  78. package/dist/components/auth/SolidResetPassword.js.map +1 -1
  79. package/dist/components/auth/SolidResetPassword.tsx +2 -6
  80. package/dist/components/common/AuthBanner.js.map +1 -1
  81. package/dist/components/common/GeneralSettings.d.ts.map +1 -1
  82. package/dist/components/common/GeneralSettings.js +235 -156
  83. package/dist/components/common/GeneralSettings.js.map +1 -1
  84. package/dist/components/common/GeneralSettings.tsx +1109 -795
  85. package/dist/components/common/SettingsComponent.d.ts +2 -0
  86. package/dist/components/common/SettingsComponent.d.ts.map +1 -0
  87. package/dist/components/common/SettingsComponent.js +351 -0
  88. package/dist/components/common/SettingsComponent.js.map +1 -0
  89. package/dist/components/common/SettingsComponent.module.css +421 -0
  90. package/dist/components/common/SettingsComponent.tsx +582 -0
  91. package/dist/components/common/SocialMediaLogin.d.ts +8 -1
  92. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  93. package/dist/components/common/SocialMediaLogin.js +6 -13
  94. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  95. package/dist/components/common/SocialMediaLogin.tsx +120 -58
  96. package/dist/components/common/SolidAdmin.js +1 -1
  97. package/dist/components/common/SolidAdmin.js.map +1 -1
  98. package/dist/components/common/SolidAdmin.tsx +1 -1
  99. package/dist/components/common/SolidExport.d.ts.map +1 -1
  100. package/dist/components/common/SolidExport.js +1 -1
  101. package/dist/components/common/SolidExport.js.map +1 -1
  102. package/dist/components/common/SolidExport.tsx +2 -1
  103. package/dist/components/common/SolidFormStepper.d.ts.map +1 -1
  104. package/dist/components/common/SolidFormStepper.js +2 -1
  105. package/dist/components/common/SolidFormStepper.js.map +1 -1
  106. package/dist/components/common/SolidFormStepper.tsx +2 -1
  107. package/dist/components/common/SolidThemeProvider.d.ts.map +1 -1
  108. package/dist/components/common/SolidThemeProvider.js +5 -21
  109. package/dist/components/common/SolidThemeProvider.js.map +1 -1
  110. package/dist/components/common/SolidThemeProvider.tsx +6 -24
  111. package/dist/components/common/solid-export.css +26 -0
  112. package/dist/components/common/solidModuleHome.module.css +1 -2
  113. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  114. package/dist/components/core/card/SolidCardView.js +24 -25
  115. package/dist/components/core/card/SolidCardView.js.map +1 -1
  116. package/dist/components/core/card/SolidCardView.tsx +23 -28
  117. package/dist/components/core/card/SolidCardViewConfigure.js +1 -1
  118. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  119. package/dist/components/core/card/SolidCardViewConfigure.tsx +1 -1
  120. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  121. package/dist/components/core/chatter/SolidChatter.js +39 -9
  122. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  123. package/dist/components/core/chatter/SolidChatter.tsx +42 -7
  124. package/dist/components/core/chatter/SolidChatterAuditMessage.d.ts.map +1 -1
  125. package/dist/components/core/chatter/SolidChatterAuditMessage.js +19 -1
  126. package/dist/components/core/chatter/SolidChatterAuditMessage.js.map +1 -1
  127. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +22 -1
  128. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +3 -0
  129. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  130. package/dist/components/core/chatter/SolidChatterMessageBox.js +68 -4
  131. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  132. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +45 -3
  133. package/dist/components/core/chatter/chatter.module.css +3 -6
  134. package/dist/components/core/common/PDFViewer.js +1 -1
  135. package/dist/components/core/common/PDFViewer.js.map +1 -1
  136. package/dist/components/core/common/PDFViewer.tsx +2 -2
  137. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
  138. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +3 -1
  139. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
  140. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +1 -1
  141. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +3 -1
  142. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  143. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +9 -8
  144. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  145. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +4 -2
  146. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +3 -4
  147. package/dist/components/core/common/dndCompat.d.ts +8 -0
  148. package/dist/components/core/common/dndCompat.d.ts.map +1 -0
  149. package/dist/components/core/common/dndCompat.js +5 -0
  150. package/dist/components/core/common/dndCompat.js.map +1 -0
  151. package/dist/components/core/common/dndCompat.ts +9 -0
  152. package/dist/components/core/dashboard/SolidDashboardFilterRequired.js +2 -2
  153. package/dist/components/core/dashboard/SolidDashboardFilterRequired.js.map +1 -1
  154. package/dist/components/core/dashboard/SolidDashboardFilterRequired.tsx +2 -2
  155. package/dist/components/core/dashboard/SolidDashboardNotAvailable.js +2 -2
  156. package/dist/components/core/dashboard/SolidDashboardNotAvailable.js.map +1 -1
  157. package/dist/components/core/dashboard/SolidDashboardNotAvailable.tsx +2 -2
  158. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js +1 -1
  159. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -1
  160. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +1 -1
  161. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js +1 -1
  162. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -1
  163. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +1 -1
  164. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js +1 -1
  165. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js.map +1 -1
  166. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.tsx +1 -1
  167. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js +1 -1
  168. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js.map +1 -1
  169. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.tsx +1 -1
  170. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts +7 -0
  171. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts.map +1 -0
  172. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js +75 -0
  173. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js.map +1 -0
  174. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.ts +45 -0
  175. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts +3 -0
  176. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts.map +1 -0
  177. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js +81 -0
  178. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js.map +1 -0
  179. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.tsx +114 -0
  180. package/dist/components/core/form/SolidFormActionHeader.d.ts +1 -1
  181. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  182. package/dist/components/core/form/SolidFormActionHeader.js +5 -3
  183. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  184. package/dist/components/core/form/SolidFormActionHeader.tsx +27 -1
  185. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  186. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  187. package/dist/components/core/form/SolidFormLayouts.tsx +1 -1
  188. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  189. package/dist/components/core/form/SolidFormView.js +141 -50
  190. package/dist/components/core/form/SolidFormView.js.map +1 -1
  191. package/dist/components/core/form/SolidFormView.tsx +123 -25
  192. package/dist/components/core/form/fields/SolidComputedField.d.ts +25 -0
  193. package/dist/components/core/form/fields/SolidComputedField.d.ts.map +1 -0
  194. package/dist/components/core/form/fields/SolidComputedField.js +128 -0
  195. package/dist/components/core/form/fields/SolidComputedField.js.map +1 -0
  196. package/dist/components/core/form/fields/SolidComputedField.tsx +134 -0
  197. package/dist/components/core/form/fields/SolidDateTimeField.d.ts.map +1 -1
  198. package/dist/components/core/form/fields/SolidDateTimeField.js +8 -2
  199. package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
  200. package/dist/components/core/form/fields/SolidDateTimeField.tsx +8 -2
  201. package/dist/components/core/form/fields/SolidEmailField.d.ts.map +1 -1
  202. package/dist/components/core/form/fields/SolidEmailField.js +5 -4
  203. package/dist/components/core/form/fields/SolidEmailField.js.map +1 -1
  204. package/dist/components/core/form/fields/SolidEmailField.tsx +17 -15
  205. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  206. package/dist/components/core/form/fields/SolidIntegerField.js +5 -4
  207. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  208. package/dist/components/core/form/fields/SolidIntegerField.tsx +3 -1
  209. package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  210. package/dist/components/core/form/fields/SolidSelectionDynamicField.js +35 -24
  211. package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
  212. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +30 -14
  213. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  214. package/dist/components/core/form/fields/SolidSelectionStaticField.js +29 -28
  215. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  216. package/dist/components/core/form/fields/SolidSelectionStaticField.tsx +17 -12
  217. package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
  218. package/dist/components/core/form/fields/SolidShortTextField.js +8 -6
  219. package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
  220. package/dist/components/core/form/fields/SolidShortTextField.tsx +7 -1
  221. package/dist/components/core/form/fields/SolidTimeField.js +1 -1
  222. package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
  223. package/dist/components/core/form/fields/SolidTimeField.tsx +1 -1
  224. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.d.ts.map +1 -1
  225. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js +3 -3
  226. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js.map +1 -1
  227. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +0 -5
  228. package/dist/components/core/form/fields/solidFields.module.css +0 -3
  229. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.d.ts +1 -1
  230. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js +1 -1
  231. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js.map +1 -1
  232. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +1 -1
  233. package/dist/components/core/kanban/KanbanBoard.js +1 -1
  234. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  235. package/dist/components/core/kanban/KanbanBoard.tsx +1 -1
  236. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  237. package/dist/components/core/kanban/KanbanCard.js +2 -2
  238. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  239. package/dist/components/core/kanban/KanbanCard.tsx +4 -3
  240. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  241. package/dist/components/core/kanban/KanbanColumn.js +3 -3
  242. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  243. package/dist/components/core/kanban/KanbanColumn.tsx +5 -4
  244. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  245. package/dist/components/core/kanban/SolidKanbanView.js +220 -109
  246. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  247. package/dist/components/core/kanban/SolidKanbanView.tsx +219 -96
  248. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +1 -1
  249. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  250. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +1 -1
  251. package/dist/components/core/kanban/SolidManyToOneFilterElement.d.ts.map +1 -1
  252. package/dist/components/core/kanban/SolidManyToOneFilterElement.js.map +1 -1
  253. package/dist/components/core/kanban/SolidManyToOneFilterElement.tsx +1 -2
  254. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.d.ts.map +1 -1
  255. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js +2 -2
  256. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.js.map +1 -1
  257. package/dist/components/core/kanban/kanban-fields/SolidMediaMultipleKanbanField.tsx +21 -10
  258. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.d.ts.map +1 -1
  259. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js +2 -2
  260. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.js.map +1 -1
  261. package/dist/components/core/kanban/kanban-fields/SolidMediaSingleKanbanField.tsx +18 -10
  262. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.d.ts.map +1 -1
  263. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js +3 -6
  264. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.js.map +1 -1
  265. package/dist/components/core/kanban/kanban-fields/SolidShortTextKanbanField.tsx +30 -24
  266. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.js.map +1 -1
  267. package/dist/components/core/kanban/kanban-fields/relations/SolidRelationManyToOneKanbanField.tsx +2 -2
  268. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
  269. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +4 -3
  270. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
  271. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +13 -12
  272. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  273. package/dist/components/core/list/SolidDataTable.js +6 -5
  274. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  275. package/dist/components/core/list/SolidDataTable.tsx +6 -5
  276. package/dist/components/core/list/SolidDataTablePagination.d.ts +15 -0
  277. package/dist/components/core/list/SolidDataTablePagination.d.ts.map +1 -0
  278. package/dist/components/core/list/SolidDataTablePagination.js +22 -0
  279. package/dist/components/core/list/SolidDataTablePagination.js.map +1 -0
  280. package/dist/components/core/list/SolidDataTablePagination.tsx +71 -0
  281. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
  282. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +3 -3
  283. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
  284. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +7 -4
  285. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  286. package/dist/components/core/list/SolidListView.js +64 -74
  287. package/dist/components/core/list/SolidListView.js.map +1 -1
  288. package/dist/components/core/list/SolidListView.tsx +72 -97
  289. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  290. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  291. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  292. package/dist/components/core/list/SolidListViewRowActionsMenu.js +2 -2
  293. package/dist/components/core/list/SolidListViewRowActionsMenu.js.map +1 -1
  294. package/dist/components/core/list/SolidListViewRowActionsMenu.tsx +2 -2
  295. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts +1 -1
  296. package/dist/components/core/list/SolidListViewRowButtonContextMenu.d.ts.map +1 -1
  297. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js +6 -7
  298. package/dist/components/core/list/SolidListViewRowButtonContextMenu.js.map +1 -1
  299. package/dist/components/core/list/SolidListViewRowButtonContextMenu.tsx +9 -10
  300. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +1 -1
  301. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  302. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +1 -1
  303. package/dist/components/core/solid-ai/SolidAiChat.module.css +3 -3
  304. package/dist/components/core/tree/SolidTreeView.js +1 -1
  305. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  306. package/dist/components/core/tree/SolidTreeView.tsx +1 -1
  307. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.css +283 -9
  308. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts.map +1 -1
  309. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js +35 -28
  310. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js.map +1 -1
  311. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.tsx +64 -62
  312. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts +2 -1
  313. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
  314. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +4 -4
  315. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
  316. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +17 -10
  317. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.d.ts.map +1 -1
  318. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.js +2 -19
  319. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.js.map +1 -1
  320. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx +24 -43
  321. package/dist/components/core/users/CreateUser.css +114 -0
  322. package/dist/components/core/users/CreateUser.d.ts +1 -0
  323. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  324. package/dist/components/core/users/CreateUser.js +4 -3
  325. package/dist/components/core/users/CreateUser.js.map +1 -1
  326. package/dist/components/core/users/CreateUser.tsx +32 -26
  327. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  328. package/dist/components/layout/AdminTopHeader.js +25 -1
  329. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  330. package/dist/components/layout/AdminTopHeader.tsx +38 -1
  331. package/dist/components/layout/context/layoutcontext.js +2 -2
  332. package/dist/components/layout/context/layoutcontext.js.map +1 -1
  333. package/dist/components/layout/context/layoutcontext.tsx +2 -2
  334. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  335. package/dist/components/layout/user-profile-menu.js +15 -14
  336. package/dist/components/layout/user-profile-menu.js.map +1 -1
  337. package/dist/components/layout/user-profile-menu.tsx +8 -6
  338. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  339. package/dist/components/shad-cn-ui/SolidAutocomplete.js +9 -1
  340. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  341. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +10 -1
  342. package/dist/components/shad-cn-ui/SolidConfirmDialog.d.ts +6 -1
  343. package/dist/components/shad-cn-ui/SolidConfirmDialog.d.ts.map +1 -1
  344. package/dist/components/shad-cn-ui/SolidConfirmDialog.js +3 -3
  345. package/dist/components/shad-cn-ui/SolidConfirmDialog.js.map +1 -1
  346. package/dist/components/shad-cn-ui/SolidConfirmDialog.tsx +15 -3
  347. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
  348. package/dist/components/shad-cn-ui/SolidDatePicker.js +12 -2
  349. package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
  350. package/dist/components/shad-cn-ui/SolidDatePicker.tsx +13 -2
  351. package/dist/components/shad-cn-ui/SolidDialog.d.ts +1 -1
  352. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  353. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  354. package/dist/components/shad-cn-ui/SolidDialog.tsx +1 -1
  355. package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -2
  356. package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
  357. package/dist/components/shad-cn-ui/SolidIcon.js +3 -4
  358. package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
  359. package/dist/components/shad-cn-ui/SolidIcon.tsx +12 -15
  360. package/dist/components/shad-cn-ui/SolidRichTextEditor.d.ts.map +1 -1
  361. package/dist/components/shad-cn-ui/SolidRichTextEditor.js +9 -1
  362. package/dist/components/shad-cn-ui/SolidRichTextEditor.js.map +1 -1
  363. package/dist/components/shad-cn-ui/SolidRichTextEditor.tsx +8 -1
  364. package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
  365. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  366. package/dist/components/shad-cn-ui/SolidTabs.js +6 -3
  367. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  368. package/dist/components/shad-cn-ui/SolidTabs.tsx +63 -26
  369. package/dist/components/solid-ui/SolidButton.d.ts +14 -0
  370. package/dist/components/solid-ui/SolidButton.d.ts.map +1 -0
  371. package/dist/components/solid-ui/SolidButton.js +36 -0
  372. package/dist/components/solid-ui/SolidButton.js.map +1 -0
  373. package/dist/components/solid-ui/SolidButton.tsx +54 -0
  374. package/dist/components/solid-ui/SolidTabs.d.ts +18 -0
  375. package/dist/components/solid-ui/SolidTabs.d.ts.map +1 -0
  376. package/dist/components/solid-ui/SolidTabs.js +22 -0
  377. package/dist/components/solid-ui/SolidTabs.js.map +1 -0
  378. package/dist/components/solid-ui/SolidTabs.tsx +73 -0
  379. package/dist/components/solid-ui/index.d.ts +3 -0
  380. package/dist/components/solid-ui/index.d.ts.map +1 -0
  381. package/dist/components/solid-ui/index.js +3 -0
  382. package/dist/components/solid-ui/index.js.map +1 -0
  383. package/dist/components/solid-ui/index.ts +2 -0
  384. package/dist/helpers/hydrateRelationRules.js +1 -1
  385. package/dist/helpers/hydrateRelationRules.js.map +1 -1
  386. package/dist/helpers/hydrateRelationRules.ts +1 -1
  387. package/dist/helpers/permissions.js +2 -2
  388. package/dist/helpers/permissions.js.map +1 -1
  389. package/dist/helpers/permissions.ts +2 -2
  390. package/dist/helpers/registry.d.ts +2 -2
  391. package/dist/helpers/registry.d.ts.map +1 -1
  392. package/dist/helpers/registry.js +6 -0
  393. package/dist/helpers/registry.js.map +1 -1
  394. package/dist/helpers/registry.ts +9 -2
  395. package/dist/helpers/settingsPayload.d.ts +32 -0
  396. package/dist/helpers/settingsPayload.d.ts.map +1 -0
  397. package/dist/helpers/settingsPayload.js +72 -0
  398. package/dist/helpers/settingsPayload.js.map +1 -0
  399. package/dist/helpers/settingsPayload.ts +125 -0
  400. package/dist/index.d.ts +4 -0
  401. package/dist/index.d.ts.map +1 -1
  402. package/dist/index.js +4 -0
  403. package/dist/index.js.map +1 -1
  404. package/dist/index.ts +4 -0
  405. package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
  406. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  407. package/dist/redux/api/solidChatterMessageApi.js +11 -1
  408. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  409. package/dist/redux/api/solidChatterMessageApi.ts +10 -1
  410. package/dist/redux/api/solidEntityApi.js +1 -1
  411. package/dist/redux/api/solidEntityApi.js.map +1 -1
  412. package/dist/redux/api/solidEntityApi.tsx +1 -1
  413. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  414. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  415. package/dist/resources/globals.css +114 -90
  416. package/dist/resources/images/Background.svg +3 -5
  417. package/dist/resources/images/Navigation/SolidSettinsIcon.svg +3 -5
  418. package/dist/resources/images/errors/error.svg +12 -14
  419. package/dist/resources/shadcn-base.css +356 -429
  420. package/dist/resources/solid-responsive.css +22 -4
  421. package/dist/resources/themes/solid-dark-purple/theme.css +23 -33
  422. package/dist/resources/themes/solid-light-purple/theme.css +31 -31
  423. package/dist/routes/AppEventListener.js +1 -1
  424. package/dist/routes/AppEventListener.js.map +1 -1
  425. package/dist/routes/AppEventListener.tsx +1 -1
  426. package/dist/routes/SolidLayoutRegistry.d.ts.map +1 -1
  427. package/dist/routes/SolidLayoutRegistry.js +3 -1
  428. package/dist/routes/SolidLayoutRegistry.js.map +1 -1
  429. package/dist/routes/SolidLayoutRegistry.tsx +3 -1
  430. package/dist/routes/guards/AuthGuard.d.ts.map +1 -1
  431. package/dist/routes/guards/AuthGuard.js +4 -1
  432. package/dist/routes/guards/AuthGuard.js.map +1 -1
  433. package/dist/routes/guards/AuthGuard.tsx +6 -1
  434. package/dist/routes/pages/admin/core/CardPage.js +1 -1
  435. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  436. package/dist/routes/pages/admin/core/CardPage.tsx +1 -1
  437. package/dist/routes/pages/admin/core/FormPage.js +1 -1
  438. package/dist/routes/pages/admin/core/FormPage.js.map +1 -1
  439. package/dist/routes/pages/admin/core/FormPage.tsx +1 -1
  440. package/dist/routes/pages/admin/core/KanbanPage.js +1 -1
  441. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  442. package/dist/routes/pages/admin/core/KanbanPage.tsx +1 -1
  443. package/dist/routes/pages/admin/core/ListPage.js +1 -1
  444. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  445. package/dist/routes/pages/admin/core/ListPage.tsx +1 -1
  446. package/dist/routes/pages/admin/core/SettingsPage.js +2 -2
  447. package/dist/routes/pages/admin/core/SettingsPage.js.map +1 -1
  448. package/dist/routes/pages/admin/core/SettingsPage.tsx +2 -2
  449. package/dist/routes/pages/admin/core/TreePage.js +1 -1
  450. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  451. package/dist/routes/pages/admin/core/TreePage.tsx +1 -1
  452. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts +2 -0
  453. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts.map +1 -0
  454. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js +6 -0
  455. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js.map +1 -0
  456. package/dist/routes/pages/auth/InitiateFacebookOauthPage.tsx +5 -0
  457. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts +2 -0
  458. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts.map +1 -0
  459. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js +6 -0
  460. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js.map +1 -0
  461. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.tsx +5 -0
  462. package/dist/routes/solidRoutes.d.ts.map +1 -1
  463. package/dist/routes/solidRoutes.js +5 -1
  464. package/dist/routes/solidRoutes.js.map +1 -1
  465. package/dist/routes/solidRoutes.tsx +5 -1
  466. package/dist/routes/types.d.ts +1 -1
  467. package/dist/routes/types.d.ts.map +1 -1
  468. package/dist/routes/types.js.map +1 -1
  469. package/dist/routes/types.ts +2 -0
  470. package/dist/types/extension-registry.d.ts +1 -0
  471. package/dist/types/extension-registry.d.ts.map +1 -1
  472. package/dist/types/extension-registry.js +1 -0
  473. package/dist/types/extension-registry.js.map +1 -1
  474. package/dist/types/extension-registry.ts +1 -0
  475. package/dist/types/index.d.ts +2 -0
  476. package/dist/types/solid-core.d.ts +11 -0
  477. package/package.json +1 -2
  478. package/dist/components/auth/SolidOTPVerify.d.ts +0 -3
  479. package/dist/components/auth/SolidOTPVerify.d.ts.map +0 -1
  480. package/dist/components/auth/SolidOTPVerify.js +0 -67
  481. package/dist/components/auth/SolidOTPVerify.js.map +0 -1
  482. package/dist/components/auth/SolidOTPVerify.tsx +0 -133
  483. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts +0 -2
  484. package/dist/components/core/common/LoadDynamicJsxComponent.d.ts.map +0 -1
  485. package/dist/components/core/common/LoadDynamicJsxComponent.js +0 -50
  486. package/dist/components/core/common/LoadDynamicJsxComponent.js.map +0 -1
  487. package/dist/components/core/common/LoadDynamicJsxComponent.tsx +0 -70
  488. package/dist/nextAuth/authProviders.d.ts +0 -4
  489. package/dist/nextAuth/authProviders.d.ts.map +0 -1
  490. package/dist/nextAuth/authProviders.js +0 -198
  491. package/dist/nextAuth/authProviders.js.map +0 -1
  492. package/dist/nextAuth/authProviders.tsx +0 -232
  493. package/dist/nextAuth/handleLogout.d.ts +0 -2
  494. package/dist/nextAuth/handleLogout.d.ts.map +0 -1
  495. package/dist/nextAuth/handleLogout.js +0 -36
  496. package/dist/nextAuth/handleLogout.js.map +0 -1
  497. package/dist/nextAuth/handleLogout.tsx +0 -39
  498. package/dist/nextAuth/refreshAccessToken.d.ts +0 -2
  499. package/dist/nextAuth/refreshAccessToken.d.ts.map +0 -1
  500. package/dist/nextAuth/refreshAccessToken.js +0 -24
  501. package/dist/nextAuth/refreshAccessToken.js.map +0 -1
  502. package/dist/nextAuth/refreshAccessToken.tsx +0 -28
  503. package/dist/redux/features/settingsSlice.d.ts +0 -20
  504. package/dist/redux/features/settingsSlice.d.ts.map +0 -1
  505. package/dist/redux/features/settingsSlice.js +0 -39
  506. package/dist/redux/features/settingsSlice.js.map +0 -1
  507. package/dist/redux/features/settingsSlice.ts +0 -60
@@ -0,0 +1,2 @@
1
+ export declare function SettingsComponent(): import("react/jsx-runtime").JSX.Element;
2
+ //# sourceMappingURL=SettingsComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsComponent.d.ts","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":"AA0GA,wBAAgB,iBAAiB,4CA2dhC"}
@@ -0,0 +1,351 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14
+ return new (P || (P = Promise))(function (resolve, reject) {
15
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
17
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
18
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
19
+ });
20
+ };
21
+ var __generator = (this && this.__generator) || function (thisArg, body) {
22
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
24
+ function verb(n) { return function (v) { return step([n, v]); }; }
25
+ function step(op) {
26
+ if (f) throw new TypeError("Generator is already executing.");
27
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
28
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
29
+ if (y = 0, t) op = [op[0] & 2, t.value];
30
+ switch (op[0]) {
31
+ case 0: case 1: t = op; break;
32
+ case 4: _.label++; return { value: op[1], done: false };
33
+ case 5: _.label++; y = op[1]; op = [0]; continue;
34
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
35
+ default:
36
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
37
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
40
+ if (t[2]) _.ops.pop();
41
+ _.trys.pop(); continue;
42
+ }
43
+ op = body.call(thisArg, _);
44
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
45
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
46
+ }
47
+ };
48
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
49
+ import { useEffect, useMemo, useState } from "react";
50
+ import { Search } from "lucide-react";
51
+ import { useDispatch } from "react-redux";
52
+ import { env } from "../../adapters/env";
53
+ import { ERROR_MESSAGES } from "../../constants/error-messages";
54
+ import { getExtensionComponent } from "../../helpers/registry";
55
+ import { extractSettingsList, getSettingOptionLabel, getSettingsMap, humanizeSettingToken, } from "../../helpers/settingsPayload";
56
+ import { showToast } from "../../redux/features/toastSlice";
57
+ import { useBulkUpdateSolidSettingsMutation, useGetSolidSettingsQuery, } from "../../redux/api/solidSettingsApi";
58
+ import { SolidButton, SolidDatePicker, SolidInput, SolidSelect, SolidSwitch, SolidTabGroup, SolidTag, SolidTextarea, SolidTooltip, SolidTooltipContent, SolidTooltipTrigger, } from "../shad-cn-ui";
59
+ import { SettingDropzoneActivePlaceholder } from "./SolidSettings/SettingDropzoneActivePlaceholder";
60
+ import { SettingsImageRemoveButton } from "./SolidSettings/SettingsImageRemoveButton";
61
+ import { SolidUploadedImage } from "./SolidSettings/SolidUploadedImage";
62
+ import styles from "./SettingsComponent.module.css";
63
+ function normalizeAssetUrl(src) {
64
+ if (!src)
65
+ return "";
66
+ var isBlobOrAbsolute = src.startsWith("blob:") || src.startsWith("http");
67
+ if (isBlobOrAbsolute || src.startsWith("/"))
68
+ return src;
69
+ return "".concat(env("API_URL"), "/").concat(src);
70
+ }
71
+ function toModuleInitials(moduleName) {
72
+ return moduleName
73
+ .split(/[-_\s]+/)
74
+ .filter(Boolean)
75
+ .map(function (token) { var _a; return (_a = token[0]) === null || _a === void 0 ? void 0 : _a.toUpperCase(); })
76
+ .join("")
77
+ .slice(0, 2);
78
+ }
79
+ function serializeValue(value) {
80
+ if (value === null || value === undefined)
81
+ return "";
82
+ if (typeof value === "string")
83
+ return value;
84
+ return JSON.stringify(value);
85
+ }
86
+ function areValuesEqual(left, right) {
87
+ if (left instanceof File || right instanceof File)
88
+ return false;
89
+ return serializeValue(left) === serializeValue(right);
90
+ }
91
+ function formatReadonlyValue(setting, value) {
92
+ if (value === null || value === undefined || value === "") {
93
+ return "Not set";
94
+ }
95
+ if (setting.controlType === "boolean") {
96
+ return value ? "Enabled" : "Disabled";
97
+ }
98
+ if (setting.controlType === "selectionStatic") {
99
+ return getSettingOptionLabel(setting, value);
100
+ }
101
+ if (setting.controlType === "mediaSingle") {
102
+ return String(value);
103
+ }
104
+ if (typeof value === "object") {
105
+ return JSON.stringify(value, null, 2);
106
+ }
107
+ return String(value);
108
+ }
109
+ function getSettingsWidgetName(setting) {
110
+ return setting.settingsWidget || "";
111
+ }
112
+ function getCustomWidgetErrorText(setting, widgetName, settingsWidget) {
113
+ if (setting.controlType !== "custom")
114
+ return null;
115
+ if (!widgetName) {
116
+ return "controlType is \"custom\" for setting \"".concat(setting.key, "\" but no settingsWidget is specified.");
117
+ }
118
+ if (!settingsWidget) {
119
+ return "Widget \"".concat(widgetName, "\" is not registered for setting \"").concat(setting.key, "\".");
120
+ }
121
+ return null;
122
+ }
123
+ export function SettingsComponent() {
124
+ var _this = this;
125
+ var dispatch = useDispatch();
126
+ var _a = useGetSolidSettingsQuery(undefined), settingsResponse = _a.data, refetch = _a.refetch;
127
+ var bulkUpdateSolidSettings = useBulkUpdateSolidSettingsMutation()[0];
128
+ var _b = useState(""), searchTerm = _b[0], setSearchTerm = _b[1];
129
+ var _c = useState("all"), filterMode = _c[0], setFilterMode = _c[1];
130
+ var _d = useState(""), activeModule = _d[0], setActiveModule = _d[1];
131
+ var _e = useState({}), formValues = _e[0], setFormValues = _e[1];
132
+ var _f = useState({}), filePreviews = _f[0], setFilePreviews = _f[1];
133
+ var settingsList = useMemo(function () { return extractSettingsList(settingsResponse).filter(function (setting) { return setting.level !== "internal-user"; }); }, [settingsResponse]);
134
+ var settingsMap = useMemo(function () { return getSettingsMap(settingsResponse); }, [settingsResponse]);
135
+ var totalSettingsCount = settingsList.length;
136
+ var editableSettingsCount = useMemo(function () { return settingsList.filter(function (setting) { return setting.editable; }).length; }, [settingsList]);
137
+ useEffect(function () {
138
+ if (!settingsList.length)
139
+ return;
140
+ var nextValues = Object.fromEntries(settingsList.map(function (setting) { var _a, _b; return [setting.key, (_b = (_a = settingsMap[setting.key]) !== null && _a !== void 0 ? _a : setting.value) !== null && _b !== void 0 ? _b : null]; }));
141
+ setFormValues(nextValues);
142
+ }, [settingsList, settingsMap]);
143
+ var filteredSettings = useMemo(function () {
144
+ var scopedSettings = settingsList.filter(function (setting) {
145
+ if (filterMode === "read-only")
146
+ return !setting.editable;
147
+ if (filterMode === "editable")
148
+ return setting.editable;
149
+ return true;
150
+ });
151
+ var query = searchTerm.trim().toLowerCase();
152
+ if (!query)
153
+ return scopedSettings;
154
+ return scopedSettings.filter(function (setting) {
155
+ var _a;
156
+ var haystack = [
157
+ setting.moduleName,
158
+ setting.group,
159
+ setting.key,
160
+ setting.label,
161
+ setting.description,
162
+ (_a = setting.options) === null || _a === void 0 ? void 0 : _a.map(function (option) { return "".concat(option.label, " ").concat(option.value); }).join(" "),
163
+ ]
164
+ .filter(Boolean)
165
+ .join(" ")
166
+ .toLowerCase();
167
+ return haystack.includes(query);
168
+ });
169
+ }, [filterMode, searchTerm, settingsList]);
170
+ var moduleEntries = useMemo(function () {
171
+ var grouped = new Map();
172
+ filteredSettings.forEach(function (setting) {
173
+ var _a;
174
+ var current = (_a = grouped.get(setting.moduleName)) !== null && _a !== void 0 ? _a : [];
175
+ current.push(setting);
176
+ grouped.set(setting.moduleName, current);
177
+ });
178
+ return Array.from(grouped.entries()).map(function (_a) {
179
+ var moduleName = _a[0], moduleSettings = _a[1];
180
+ return ({
181
+ moduleName: moduleName,
182
+ label: humanizeSettingToken(moduleName),
183
+ badge: toModuleInitials(moduleName) || "S",
184
+ settings: moduleSettings,
185
+ });
186
+ });
187
+ }, [filteredSettings]);
188
+ useEffect(function () {
189
+ if (!moduleEntries.length) {
190
+ setActiveModule("");
191
+ return;
192
+ }
193
+ if (!moduleEntries.some(function (entry) { return entry.moduleName === activeModule; })) {
194
+ setActiveModule(moduleEntries[0].moduleName);
195
+ }
196
+ }, [activeModule, moduleEntries]);
197
+ var hasChanges = useMemo(function () {
198
+ return settingsList.some(function (setting) {
199
+ var _a, _b;
200
+ return setting.editable &&
201
+ !areValuesEqual(formValues[setting.key], (_b = (_a = settingsMap[setting.key]) !== null && _a !== void 0 ? _a : setting.value) !== null && _b !== void 0 ? _b : null);
202
+ });
203
+ }, [formValues, settingsList, settingsMap]);
204
+ var groupedModuleSettings = useMemo(function () {
205
+ var currentModule = moduleEntries.find(function (entry) { return entry.moduleName === activeModule; });
206
+ if (!currentModule)
207
+ return [];
208
+ var grouped = new Map();
209
+ currentModule.settings.forEach(function (setting) {
210
+ var _a;
211
+ var groupKey = setting.group || "general";
212
+ var current = (_a = grouped.get(groupKey)) !== null && _a !== void 0 ? _a : [];
213
+ current.push(setting);
214
+ grouped.set(groupKey, current);
215
+ });
216
+ return Array.from(grouped.entries()).map(function (_a) {
217
+ var groupKey = _a[0], groupSettings = _a[1];
218
+ return ({
219
+ key: groupKey,
220
+ label: humanizeSettingToken(groupKey),
221
+ settings: groupSettings.sort(function (left, right) {
222
+ var _a, _b, _c, _d;
223
+ var leftSort = (_a = left.sortOrder) !== null && _a !== void 0 ? _a : Number.MAX_SAFE_INTEGER;
224
+ var rightSort = (_b = right.sortOrder) !== null && _b !== void 0 ? _b : Number.MAX_SAFE_INTEGER;
225
+ if (leftSort !== rightSort)
226
+ return leftSort - rightSort;
227
+ return ((_c = left.label) !== null && _c !== void 0 ? _c : left.key).localeCompare((_d = right.label) !== null && _d !== void 0 ? _d : right.key);
228
+ }),
229
+ });
230
+ });
231
+ }, [activeModule, moduleEntries]);
232
+ var updateValue = function (key, value) {
233
+ setFormValues(function (current) {
234
+ var _a;
235
+ return (__assign(__assign({}, current), (_a = {}, _a[key] = value, _a)));
236
+ });
237
+ };
238
+ var updateFileValue = function (key, file) {
239
+ if (!file) {
240
+ if (filePreviews[key]) {
241
+ URL.revokeObjectURL(filePreviews[key]);
242
+ }
243
+ setFilePreviews(function (current) {
244
+ var next = __assign({}, current);
245
+ delete next[key];
246
+ return next;
247
+ });
248
+ updateValue(key, null);
249
+ return;
250
+ }
251
+ if (file.size > 2 * 1024 * 1024) {
252
+ dispatch(showToast({ severity: "error", summary: "File too large", detail: "Maximum file size is 2MB" }));
253
+ return;
254
+ }
255
+ if (filePreviews[key]) {
256
+ URL.revokeObjectURL(filePreviews[key]);
257
+ }
258
+ var preview = URL.createObjectURL(file);
259
+ setFilePreviews(function (current) {
260
+ var _a;
261
+ return (__assign(__assign({}, current), (_a = {}, _a[key] = preview, _a)));
262
+ });
263
+ updateValue(key, file);
264
+ };
265
+ useEffect(function () { return function () {
266
+ Object.values(filePreviews).forEach(function (preview) { return URL.revokeObjectURL(preview); });
267
+ }; }, [filePreviews]);
268
+ var handleSave = function () { return __awaiter(_this, void 0, void 0, function () {
269
+ var updatedSettingsArray_1, formData_1, response, error_1;
270
+ var _a;
271
+ return __generator(this, function (_b) {
272
+ switch (_b.label) {
273
+ case 0:
274
+ _b.trys.push([0, 3, , 4]);
275
+ updatedSettingsArray_1 = [];
276
+ formData_1 = new FormData();
277
+ settingsList.forEach(function (setting) {
278
+ var _a, _b;
279
+ if (!setting.editable)
280
+ return;
281
+ var nextValue = formValues[setting.key];
282
+ var currentValue = (_b = (_a = settingsMap[setting.key]) !== null && _a !== void 0 ? _a : setting.value) !== null && _b !== void 0 ? _b : null;
283
+ if (nextValue instanceof File) {
284
+ formData_1.append(setting.key, nextValue);
285
+ updatedSettingsArray_1.push({ key: setting.key, value: "", type: "system" });
286
+ return;
287
+ }
288
+ if (!areValuesEqual(nextValue, currentValue)) {
289
+ updatedSettingsArray_1.push({
290
+ key: setting.key,
291
+ value: serializeValue(nextValue),
292
+ type: "system",
293
+ });
294
+ }
295
+ });
296
+ if (!updatedSettingsArray_1.length) {
297
+ dispatch(showToast({ severity: "success", summary: "No Changes", detail: "No settings were updated" }));
298
+ return [2 /*return*/];
299
+ }
300
+ formData_1.append("settings", JSON.stringify(updatedSettingsArray_1));
301
+ return [4 /*yield*/, bulkUpdateSolidSettings({ data: formData_1 }).unwrap()];
302
+ case 1:
303
+ response = _b.sent();
304
+ if ((response === null || response === void 0 ? void 0 : response.statusCode) === 200) {
305
+ dispatch(showToast({ severity: "success", summary: "Updated", detail: "Settings updated" }));
306
+ }
307
+ else {
308
+ dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FAILED, detail: ERROR_MESSAGES.SOMETHING_WRONG }));
309
+ }
310
+ return [4 /*yield*/, refetch()];
311
+ case 2:
312
+ _b.sent();
313
+ setFilePreviews({});
314
+ return [3 /*break*/, 4];
315
+ case 3:
316
+ error_1 = _b.sent();
317
+ dispatch(showToast({ severity: "error", summary: ERROR_MESSAGES.FAILED, detail: ((_a = error_1 === null || error_1 === void 0 ? void 0 : error_1.data) === null || _a === void 0 ? void 0 : _a.message) || ERROR_MESSAGES.SOMETHING_WRONG }));
318
+ return [3 /*break*/, 4];
319
+ case 4: return [2 /*return*/];
320
+ }
321
+ });
322
+ }); };
323
+ var moduleTabs = moduleEntries.map(function (entry) { return ({
324
+ value: entry.moduleName,
325
+ label: (_jsxs("span", { className: styles.moduleTab, children: [_jsx("span", { className: styles.moduleTabBadge, children: entry.badge }), _jsxs("span", { className: styles.moduleTabText, children: [_jsx("span", { className: styles.moduleTabLabel, children: entry.label }), _jsxs("span", { className: styles.moduleTabMeta, children: [entry.settings.length, " settings"] })] })] })),
326
+ content: (_jsx("div", { children: groupedModuleSettings.length ? (groupedModuleSettings.map(function (group) { return (_jsx("section", { className: styles.groupSection, children: _jsxs("div", { className: styles.groupCard, children: [_jsx("div", { className: styles.groupHeader, children: _jsxs("div", { children: [_jsx("h3", { className: styles.groupTitle, children: group.label }), _jsxs("div", { className: styles.groupMeta, children: [group.settings.length, " item", group.settings.length === 1 ? "" : "s"] })] }) }), _jsx("div", { className: styles.groupBody, children: group.settings.map(function (setting) {
327
+ var value = formValues[setting.key];
328
+ var settingsWidgetName = getSettingsWidgetName(setting);
329
+ var SettingsWidget = settingsWidgetName ? getExtensionComponent(settingsWidgetName) : null;
330
+ var customWidgetErrorText = getCustomWidgetErrorText(setting, settingsWidgetName, SettingsWidget);
331
+ var settingsWidgetProps = {
332
+ setting: setting,
333
+ value: value,
334
+ settingsMap: settingsMap,
335
+ formValues: formValues,
336
+ editable: Boolean(setting.editable),
337
+ updateValue: updateValue,
338
+ updateFileValue: updateFileValue,
339
+ };
340
+ return (_jsxs("div", { className: styles.settingRow, children: [_jsxs("div", { className: styles.settingLabelWrap, children: [_jsxs("div", { className: styles.settingLabelLine, children: [_jsx("p", { className: styles.settingLabel, children: setting.label || humanizeSettingToken(setting.key) }), !setting.editable ? (_jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: _jsx("span", { children: _jsx(SolidTag, { tone: "warn", children: "Read only" }) }) }), _jsx(SolidTooltipContent, { children: "This value comes from system configuration and cannot be changed from the admin UI." })] })) : null] }), setting.description ? _jsx("p", { className: styles.settingDescription, children: setting.description }) : null] }), !setting.editable ? (setting.controlType === "custom" ? (customWidgetErrorText ? (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: styles.customWidgetError, children: customWidgetErrorText }) })) : SettingsWidget ? ((function () {
341
+ var ResolvedSettingsWidget = SettingsWidget;
342
+ return _jsx(ResolvedSettingsWidget, __assign({}, settingsWidgetProps));
343
+ })()) : null) : setting.controlType === "mediaSingle" && value ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: value === null || value === undefined || value === "" ? styles.emptyValue : undefined, children: formatReadonlyValue(setting, value) }) }))) : (_jsxs("div", { className: "".concat(styles.controlStack, " ").concat(setting.controlType === "custom" ? styles.customControlStack : ""), children: [setting.controlType === "boolean" ? (_jsxs("div", { className: styles.boolRow, children: [_jsx(SolidSwitch, { checked: Boolean(value), onChange: function (checked) { return updateValue(setting.key, checked); } }), _jsx("span", { className: styles.boolText, children: value ? "Enabled" : "Disabled" })] })) : null, setting.controlType === "shortText" ? (_jsx(SolidInput, { type: "text", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "longText" ? (_jsx(SolidTextarea, { rows: 4, value: value == null ? "" : typeof value === "string" ? value : JSON.stringify(value, null, 2), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value); } })) : null, setting.controlType === "numeric" ? (_jsx(SolidInput, { type: "number", value: value == null ? "" : String(value), placeholder: setting.placeholder || setting.label, onChange: function (event) { return updateValue(setting.key, event.target.value === "" ? null : Number(event.target.value)); } })) : null, setting.controlType === "selectionStatic" ? (_jsx(SolidSelect, { value: value, options: setting.options || [], placeholder: setting.placeholder || "Select", onChange: function (event) { return updateValue(setting.key, event.value); } })) : null, setting.controlType === "date" || setting.controlType === "datetime" ? (_jsx(SolidDatePicker, { selected: value ? new Date(String(value)) : null, showTimeSelect: setting.controlType === "datetime", dateFormat: setting.controlType === "datetime" ? "yyyy-MM-dd HH:mm:ss" : "yyyy-MM-dd", onChange: function (date) { return updateValue(setting.key, date instanceof Date ? date.toISOString() : null); } })) : null, setting.controlType === "mediaSingle" ? (_jsxs("div", { className: styles.mediaField, children: [_jsxs("div", { className: styles.mediaComposer, children: [_jsxs("label", { className: styles.mediaDropzone, children: [_jsx("input", { className: styles.mediaInput, type: "file", accept: ".png,.jpg,.jpeg,.svg,.webp", onChange: function (event) { var _a, _b; return updateFileValue(setting.key, (_b = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null); } }), _jsx(SettingDropzoneActivePlaceholder, { note: "PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB" })] }), (filePreviews[setting.key] || value) ? (_jsx("div", { className: styles.mediaPreview, children: _jsx(SolidUploadedImage, { src: filePreviews[setting.key] || normalizeAssetUrl(String(value)) }) })) : (_jsx("div", { className: styles.mediaEmptyState, children: "Preview appears here after upload" }))] }), (filePreviews[setting.key] || value) ? (_jsx(SettingsImageRemoveButton, { onClick: function () { return updateFileValue(setting.key, null); } })) : null] })) : null, setting.controlType === "custom" ? (customWidgetErrorText ? (_jsx("div", { className: styles.readonlyValue, children: _jsx("span", { className: styles.customWidgetError, children: customWidgetErrorText }) })) : SettingsWidget ? ((function () {
344
+ var ResolvedSettingsWidget = SettingsWidget;
345
+ return _jsx(ResolvedSettingsWidget, __assign({}, settingsWidgetProps));
346
+ })()) : null) : null] }))] }, setting.key));
347
+ }) })] }) }, group.key)); })) : (_jsx("div", { className: styles.emptyState, children: "No settings match the current filter." })) })),
348
+ }); });
349
+ return (_jsxs("div", { className: styles.page, children: [_jsxs("div", { className: "page-header secondary-border-bottom", children: [_jsxs("div", { className: styles.headerIntro, children: [_jsx("div", { className: "form-wrapper-title", children: "Settings" }), _jsx("div", { className: styles.subtitle, children: "Manage platform configuration across modules from a single workspace." }), _jsxs("div", { className: styles.summaryChips, children: [_jsxs("span", { className: styles.summaryChip, children: [moduleEntries.length, " module", moduleEntries.length === 1 ? "" : "s"] }), _jsxs("span", { className: styles.summaryChip, children: [totalSettingsCount, " setting", totalSettingsCount === 1 ? "" : "s"] }), _jsxs("button", { type: "button", className: "".concat(styles.summaryChip, " ").concat(styles.summaryChipButton, " ").concat(filterMode === "editable" ? styles.summaryChipActive : ""), "aria-pressed": filterMode === "editable", onClick: function () { return setFilterMode(function (current) { return (current === "editable" ? "all" : "editable"); }); }, children: [editableSettingsCount, " editable"] })] })] }), _jsxs("div", { className: styles.headerSearch, children: [_jsxs("div", { className: styles.searchIcon, children: [_jsx(Search, { size: 16 }), _jsx(SolidInput, { className: styles.searchInput, value: searchTerm, placeholder: "Search settings, groups, or modules", onChange: function (event) { return setSearchTerm(event.target.value); } })] }), searchTerm ? (_jsxs("span", { className: styles.resultsMeta, children: [filteredSettings.length, " result", filteredSettings.length === 1 ? "" : "s"] })) : null] }), _jsxs("div", { className: styles.toolbarActions, children: [_jsxs("div", { className: styles.legend, children: [_jsx("button", { type: "button", className: "".concat(styles.readonlyFilterButton, " ").concat(filterMode === "read-only" ? styles.readonlyFilterButtonActive : ""), "aria-pressed": filterMode === "read-only", "aria-label": filterMode === "read-only" ? "Disable read-only filter" : "Enable read-only filter", onClick: function () { return setFilterMode(function (current) { return (current === "read-only" ? "all" : "read-only"); }); }, children: _jsx(SolidTag, { tone: "warn", children: "Read only" }) }), _jsx("span", { className: filterMode === "read-only" ? styles.legendLabelActive : undefined, children: filterMode === "read-only" ? "Read-only filter active" : "System-managed value" }), _jsxs(SolidTooltip, { children: [_jsx(SolidTooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", className: styles.legendButton, "aria-label": "Read-only legend details", children: "i" }) }), _jsx(SolidTooltipContent, { children: "Read-only settings are visible here for context, but can only be changed through environment or backend configuration." })] })] }), _jsx(SolidButton, { size: "sm", type: "button", loading: false, onClick: handleSave, disabled: !hasChanges, children: "Save" })] })] }), _jsx("div", { className: styles.workspace, children: moduleTabs.length ? (_jsx(SolidTabGroup, { tabs: moduleTabs, value: activeModule, onValueChange: setActiveModule, className: styles.tabGroup, listClassName: styles.tabList, panelClassName: styles.tabPanel, orientation: "vertical" })) : (_jsx("div", { className: styles.emptyState, children: "No settings are available." })) })] }));
350
+ }
351
+ //# sourceMappingURL=SettingsComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsComponent.js","sourceRoot":"","sources":["../../../src/components/common/SettingsComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useMemo, useState, type ComponentType } from \"react\";\nimport { Search } from \"lucide-react\";\nimport { useDispatch } from \"react-redux\";\nimport { env } from \"../../adapters/env\";\nimport { ERROR_MESSAGES } from \"../../constants/error-messages\";\nimport { getExtensionComponent } from \"../../helpers/registry\";\nimport {\n extractSettingsList,\n getSettingOptionLabel,\n getSettingsMap,\n humanizeSettingToken,\n type AdminSettingDefinition,\n} from \"../../helpers/settingsPayload\";\nimport type { SolidSettingsWidgetProps } from \"../../types/solid-core\";\nimport { showToast } from \"../../redux/features/toastSlice\";\nimport {\n useBulkUpdateSolidSettingsMutation,\n useGetSolidSettingsQuery,\n} from \"../../redux/api/solidSettingsApi\";\nimport {\n SolidButton,\n SolidDatePicker,\n SolidInput,\n SolidSelect,\n SolidSwitch,\n SolidTabGroup,\n SolidTag,\n SolidTextarea,\n SolidTooltip,\n SolidTooltipContent,\n SolidTooltipTrigger,\n} from \"../shad-cn-ui\";\nimport { SettingDropzoneActivePlaceholder } from \"./SolidSettings/SettingDropzoneActivePlaceholder\";\nimport { SettingsImageRemoveButton } from \"./SolidSettings/SettingsImageRemoveButton\";\nimport { SolidUploadedImage } from \"./SolidSettings/SolidUploadedImage\";\nimport styles from \"./SettingsComponent.module.css\";\n\ntype SettingsFormValue = string | number | boolean | null | File;\ntype SettingsFilterMode = \"all\" | \"read-only\" | \"editable\";\n\nfunction normalizeAssetUrl(src?: string | null) {\n if (!src) return \"\";\n const isBlobOrAbsolute = src.startsWith(\"blob:\") || src.startsWith(\"http\");\n if (isBlobOrAbsolute || src.startsWith(\"/\")) return src;\n return `${env(\"API_URL\")}/${src}`;\n}\n\nfunction toModuleInitials(moduleName: string) {\n return moduleName\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((token) => token[0]?.toUpperCase())\n .join(\"\")\n .slice(0, 2);\n}\n\nfunction serializeValue(value: unknown) {\n if (value === null || value === undefined) return \"\";\n if (typeof value === \"string\") return value;\n return JSON.stringify(value);\n}\n\nfunction areValuesEqual(left: unknown, right: unknown) {\n if (left instanceof File || right instanceof File) return false;\n return serializeValue(left) === serializeValue(right);\n}\n\nfunction formatReadonlyValue(setting: AdminSettingDefinition, value: unknown) {\n if (value === null || value === undefined || value === \"\") {\n return \"Not set\";\n }\n\n if (setting.controlType === \"boolean\") {\n return value ? \"Enabled\" : \"Disabled\";\n }\n\n if (setting.controlType === \"selectionStatic\") {\n return getSettingOptionLabel(setting, value);\n }\n\n if (setting.controlType === \"mediaSingle\") {\n return String(value);\n }\n\n if (typeof value === \"object\") {\n return JSON.stringify(value, null, 2);\n }\n\n return String(value);\n}\n\nfunction getSettingsWidgetName(setting: AdminSettingDefinition) {\n return setting.settingsWidget || \"\";\n}\n\nfunction getCustomWidgetErrorText(setting: AdminSettingDefinition, widgetName: string, settingsWidget: ComponentType<any> | null) {\n if (setting.controlType !== \"custom\") return null;\n if (!widgetName) {\n return `controlType is \"custom\" for setting \"${setting.key}\" but no settingsWidget is specified.`;\n }\n if (!settingsWidget) {\n return `Widget \"${widgetName}\" is not registered for setting \"${setting.key}\".`;\n }\n return null;\n}\n\nexport function SettingsComponent() {\n const dispatch = useDispatch();\n const { data: settingsResponse, refetch } = useGetSolidSettingsQuery(undefined);\n const [bulkUpdateSolidSettings] = useBulkUpdateSolidSettingsMutation();\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [filterMode, setFilterMode] = useState<SettingsFilterMode>(\"all\");\n const [activeModule, setActiveModule] = useState(\"\");\n const [formValues, setFormValues] = useState<Record<string, SettingsFormValue>>({});\n const [filePreviews, setFilePreviews] = useState<Record<string, string>>({});\n\n const settingsList = useMemo(\n () => extractSettingsList(settingsResponse).filter((setting) => setting.level !== \"internal-user\"),\n [settingsResponse],\n );\n const settingsMap = useMemo(() => getSettingsMap(settingsResponse), [settingsResponse]);\n const totalSettingsCount = settingsList.length;\n const editableSettingsCount = useMemo(\n () => settingsList.filter((setting) => setting.editable).length,\n [settingsList],\n );\n\n useEffect(() => {\n if (!settingsList.length) return;\n const nextValues = Object.fromEntries(\n settingsList.map((setting) => [setting.key, settingsMap[setting.key] ?? setting.value ?? null]),\n );\n setFormValues(nextValues);\n }, [settingsList, settingsMap]);\n\n const filteredSettings = useMemo(() => {\n const scopedSettings = settingsList.filter((setting) => {\n if (filterMode === \"read-only\") return !setting.editable;\n if (filterMode === \"editable\") return setting.editable;\n return true;\n });\n const query = searchTerm.trim().toLowerCase();\n if (!query) return scopedSettings;\n\n return scopedSettings.filter((setting) => {\n const haystack = [\n setting.moduleName,\n setting.group,\n setting.key,\n setting.label,\n setting.description,\n setting.options?.map((option) => `${option.label} ${option.value}`).join(\" \"),\n ]\n .filter(Boolean)\n .join(\" \")\n .toLowerCase();\n\n return haystack.includes(query);\n });\n }, [filterMode, searchTerm, settingsList]);\n\n const moduleEntries = useMemo(() => {\n const grouped = new Map<string, AdminSettingDefinition[]>();\n filteredSettings.forEach((setting) => {\n const current = grouped.get(setting.moduleName) ?? [];\n current.push(setting);\n grouped.set(setting.moduleName, current);\n });\n\n return Array.from(grouped.entries()).map(([moduleName, moduleSettings]) => ({\n moduleName,\n label: humanizeSettingToken(moduleName),\n badge: toModuleInitials(moduleName) || \"S\",\n settings: moduleSettings,\n }));\n }, [filteredSettings]);\n\n useEffect(() => {\n if (!moduleEntries.length) {\n setActiveModule(\"\");\n return;\n }\n\n if (!moduleEntries.some((entry) => entry.moduleName === activeModule)) {\n setActiveModule(moduleEntries[0].moduleName);\n }\n }, [activeModule, moduleEntries]);\n\n const hasChanges = useMemo(\n () =>\n settingsList.some(\n (setting) =>\n setting.editable &&\n !areValuesEqual(formValues[setting.key], settingsMap[setting.key] ?? setting.value ?? null),\n ),\n [formValues, settingsList, settingsMap],\n );\n\n const groupedModuleSettings = useMemo(() => {\n const currentModule = moduleEntries.find((entry) => entry.moduleName === activeModule);\n if (!currentModule) return [];\n\n const grouped = new Map<string, AdminSettingDefinition[]>();\n currentModule.settings.forEach((setting) => {\n const groupKey = setting.group || \"general\";\n const current = grouped.get(groupKey) ?? [];\n current.push(setting);\n grouped.set(groupKey, current);\n });\n\n return Array.from(grouped.entries()).map(([groupKey, groupSettings]) => ({\n key: groupKey,\n label: humanizeSettingToken(groupKey),\n settings: groupSettings.sort((left, right) => {\n const leftSort = left.sortOrder ?? Number.MAX_SAFE_INTEGER;\n const rightSort = right.sortOrder ?? Number.MAX_SAFE_INTEGER;\n if (leftSort !== rightSort) return leftSort - rightSort;\n return (left.label ?? left.key).localeCompare(right.label ?? right.key);\n }),\n }));\n }, [activeModule, moduleEntries]);\n\n const updateValue = (key: string, value: SettingsFormValue) => {\n setFormValues((current) => ({ ...current, [key]: value }));\n };\n\n const updateFileValue = (key: string, file: File | null) => {\n if (!file) {\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n setFilePreviews((current) => {\n const next = { ...current };\n delete next[key];\n return next;\n });\n updateValue(key, null);\n return;\n }\n\n if (file.size > 2 * 1024 * 1024) {\n dispatch(showToast({ severity: \"error\", summary: \"File too large\", detail: \"Maximum file size is 2MB\" }));\n return;\n }\n\n if (filePreviews[key]) {\n URL.revokeObjectURL(filePreviews[key]);\n }\n\n const preview = URL.createObjectURL(file);\n setFilePreviews((current) => ({ ...current, [key]: preview }));\n updateValue(key, file);\n };\n\n useEffect(\n () => () => {\n Object.values(filePreviews).forEach((preview) => URL.revokeObjectURL(preview));\n },\n [filePreviews],\n );\n\n const handleSave = async () => {\n try {\n const updatedSettingsArray: Array<{ key: string; value: string; type: string }> = [];\n const formData = new FormData();\n\n settingsList.forEach((setting) => {\n if (!setting.editable) return;\n\n const nextValue = formValues[setting.key];\n const currentValue = settingsMap[setting.key] ?? setting.value ?? null;\n\n if (nextValue instanceof File) {\n formData.append(setting.key, nextValue);\n updatedSettingsArray.push({ key: setting.key, value: \"\", type: \"system\" });\n return;\n }\n\n if (!areValuesEqual(nextValue, currentValue)) {\n updatedSettingsArray.push({\n key: setting.key,\n value: serializeValue(nextValue),\n type: \"system\",\n });\n }\n });\n\n if (!updatedSettingsArray.length) {\n dispatch(showToast({ severity: \"success\", summary: \"No Changes\", detail: \"No settings were updated\" }));\n return;\n }\n\n formData.append(\"settings\", JSON.stringify(updatedSettingsArray));\n const response = await bulkUpdateSolidSettings({ data: formData }).unwrap();\n\n if (response?.statusCode === 200) {\n dispatch(showToast({ severity: \"success\", summary: \"Updated\", detail: \"Settings updated\" }));\n } else {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n\n await refetch();\n setFilePreviews({});\n } catch (error: any) {\n dispatch(showToast({ severity: \"error\", summary: ERROR_MESSAGES.FAILED, detail: error?.data?.message || ERROR_MESSAGES.SOMETHING_WRONG }));\n }\n };\n\n const moduleTabs = moduleEntries.map((entry) => ({\n value: entry.moduleName,\n label: (\n <span className={styles.moduleTab}>\n <span className={styles.moduleTabBadge}>{entry.badge}</span>\n <span className={styles.moduleTabText}>\n <span className={styles.moduleTabLabel}>{entry.label}</span>\n <span className={styles.moduleTabMeta}>{entry.settings.length} settings</span>\n </span>\n </span>\n ),\n content: (\n <div>\n {groupedModuleSettings.length ? (\n groupedModuleSettings.map((group) => (\n <section key={group.key} className={styles.groupSection}>\n <div className={styles.groupCard}>\n <div className={styles.groupHeader}>\n <div>\n <h3 className={styles.groupTitle}>{group.label}</h3>\n <div className={styles.groupMeta}>{group.settings.length} item{group.settings.length === 1 ? \"\" : \"s\"}</div>\n </div>\n </div>\n <div className={styles.groupBody}>\n {group.settings.map((setting) => {\n const value = formValues[setting.key];\n const settingsWidgetName = getSettingsWidgetName(setting);\n const SettingsWidget = settingsWidgetName ? getExtensionComponent(settingsWidgetName) : null;\n const customWidgetErrorText = getCustomWidgetErrorText(setting, settingsWidgetName, SettingsWidget);\n const settingsWidgetProps: SolidSettingsWidgetProps = {\n setting,\n value,\n settingsMap,\n formValues,\n editable: Boolean(setting.editable),\n updateValue,\n updateFileValue,\n };\n return (\n <div key={setting.key} className={styles.settingRow}>\n <div className={styles.settingLabelWrap}>\n <div className={styles.settingLabelLine}>\n <p className={styles.settingLabel}>{setting.label || humanizeSettingToken(setting.key)}</p>\n {!setting.editable ? (\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <span>\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </span>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n This value comes from system configuration and cannot be changed from the admin UI.\n </SolidTooltipContent>\n </SolidTooltip>\n ) : null}\n </div>\n {setting.description ? <p className={styles.settingDescription}>{setting.description}</p> : null}\n </div>\n\n {!setting.editable ? (\n setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : setting.controlType === \"mediaSingle\" && value ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.readonlyValue}>\n <span className={value === null || value === undefined || value === \"\" ? styles.emptyValue : undefined}>\n {formatReadonlyValue(setting, value)}\n </span>\n </div>\n )\n ) : (\n <div className={`${styles.controlStack} ${setting.controlType === \"custom\" ? styles.customControlStack : \"\"}`}>\n {setting.controlType === \"boolean\" ? (\n <div className={styles.boolRow}>\n <SolidSwitch checked={Boolean(value)} onChange={(checked) => updateValue(setting.key, checked)} />\n <span className={styles.boolText}>{value ? \"Enabled\" : \"Disabled\"}</span>\n </div>\n ) : null}\n\n {setting.controlType === \"shortText\" ? (\n <SolidInput\n type=\"text\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"longText\" ? (\n <SolidTextarea\n rows={4}\n value={value == null ? \"\" : typeof value === \"string\" ? value : JSON.stringify(value, null, 2)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value)}\n />\n ) : null}\n\n {setting.controlType === \"numeric\" ? (\n <SolidInput\n type=\"number\"\n value={value == null ? \"\" : String(value)}\n placeholder={setting.placeholder || setting.label}\n onChange={(event: any) => updateValue(setting.key, event.target.value === \"\" ? null : Number(event.target.value))}\n />\n ) : null}\n\n {setting.controlType === \"selectionStatic\" ? (\n <SolidSelect\n value={value}\n options={setting.options || []}\n placeholder={setting.placeholder || \"Select\"}\n onChange={(event) => updateValue(setting.key, event.value)}\n />\n ) : null}\n\n {setting.controlType === \"date\" || setting.controlType === \"datetime\" ? (\n <SolidDatePicker\n selected={value ? new Date(String(value)) : null}\n showTimeSelect={setting.controlType === \"datetime\"}\n dateFormat={setting.controlType === \"datetime\" ? \"yyyy-MM-dd HH:mm:ss\" : \"yyyy-MM-dd\"}\n onChange={(date: Date | null) => updateValue(setting.key, date instanceof Date ? date.toISOString() : null)}\n />\n ) : null}\n\n {setting.controlType === \"mediaSingle\" ? (\n <div className={styles.mediaField}>\n <div className={styles.mediaComposer}>\n <label className={styles.mediaDropzone}>\n <input\n className={styles.mediaInput}\n type=\"file\"\n accept=\".png,.jpg,.jpeg,.svg,.webp\"\n onChange={(event) => updateFileValue(setting.key, event.target.files?.[0] ?? null)}\n />\n <SettingDropzoneActivePlaceholder note=\"PNG, JPG, JPEG, SVG, WEBP | Max size: 2 MB\" />\n </label>\n {(filePreviews[setting.key] || value) ? (\n <div className={styles.mediaPreview}>\n <SolidUploadedImage src={filePreviews[setting.key] || normalizeAssetUrl(String(value))} />\n </div>\n ) : (\n <div className={styles.mediaEmptyState}>Preview appears here after upload</div>\n )}\n </div>\n {(filePreviews[setting.key] || value) ? (\n <SettingsImageRemoveButton onClick={() => updateFileValue(setting.key, null)} />\n ) : null}\n </div>\n ) : null}\n\n {setting.controlType === \"custom\" ? (\n customWidgetErrorText ? (\n <div className={styles.readonlyValue}>\n <span className={styles.customWidgetError}>{customWidgetErrorText}</span>\n </div>\n ) : SettingsWidget ? (\n (() => {\n const ResolvedSettingsWidget = SettingsWidget as ComponentType<any>;\n return <ResolvedSettingsWidget {...settingsWidgetProps} />;\n })()\n ) : null\n ) : null}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n </section>\n ))\n ) : (\n <div className={styles.emptyState}>No settings match the current filter.</div>\n )}\n </div>\n ),\n }));\n\n return (\n <div className={styles.page}>\n <div className=\"page-header secondary-border-bottom\">\n <div className={styles.headerIntro}>\n <div className=\"form-wrapper-title\">Settings</div>\n <div className={styles.subtitle}>Manage platform configuration across modules from a single workspace.</div>\n <div className={styles.summaryChips}>\n <span className={styles.summaryChip}>{moduleEntries.length} module{moduleEntries.length === 1 ? \"\" : \"s\"}</span>\n <span className={styles.summaryChip}>{totalSettingsCount} setting{totalSettingsCount === 1 ? \"\" : \"s\"}</span>\n <button\n type=\"button\"\n className={`${styles.summaryChip} ${styles.summaryChipButton} ${filterMode === \"editable\" ? styles.summaryChipActive : \"\"}`}\n aria-pressed={filterMode === \"editable\"}\n onClick={() => setFilterMode((current) => (current === \"editable\" ? \"all\" : \"editable\"))}\n >\n {editableSettingsCount} editable\n </button>\n </div>\n </div>\n <div className={styles.headerSearch}>\n <div className={styles.searchIcon}>\n <Search size={16} />\n <SolidInput\n className={styles.searchInput}\n value={searchTerm}\n placeholder=\"Search settings, groups, or modules\"\n onChange={(event: any) => setSearchTerm(event.target.value)}\n />\n </div>\n {searchTerm ? (\n <span className={styles.resultsMeta}>\n {filteredSettings.length} result{filteredSettings.length === 1 ? \"\" : \"s\"}\n </span>\n ) : null}\n </div>\n <div className={styles.toolbarActions}>\n <div className={styles.legend}>\n <button\n type=\"button\"\n className={`${styles.readonlyFilterButton} ${filterMode === \"read-only\" ? styles.readonlyFilterButtonActive : \"\"}`}\n aria-pressed={filterMode === \"read-only\"}\n aria-label={filterMode === \"read-only\" ? \"Disable read-only filter\" : \"Enable read-only filter\"}\n onClick={() => setFilterMode((current) => (current === \"read-only\" ? \"all\" : \"read-only\"))}\n >\n <SolidTag tone=\"warn\">Read only</SolidTag>\n </button>\n <span className={filterMode === \"read-only\" ? styles.legendLabelActive : undefined}>\n {filterMode === \"read-only\" ? \"Read-only filter active\" : \"System-managed value\"}\n </span>\n <SolidTooltip>\n <SolidTooltipTrigger asChild>\n <button type=\"button\" className={styles.legendButton} aria-label=\"Read-only legend details\">\n i\n </button>\n </SolidTooltipTrigger>\n <SolidTooltipContent>\n Read-only settings are visible here for context, but can only be changed through environment or backend configuration.\n </SolidTooltipContent>\n </SolidTooltip>\n </div>\n <SolidButton size=\"sm\" type=\"button\" loading={false} onClick={handleSave} disabled={!hasChanges}>\n Save\n </SolidButton>\n </div>\n </div>\n\n <div className={styles.workspace}>\n {moduleTabs.length ? (\n <SolidTabGroup\n tabs={moduleTabs}\n value={activeModule}\n onValueChange={setActiveModule}\n className={styles.tabGroup}\n listClassName={styles.tabList}\n panelClassName={styles.tabPanel}\n orientation=\"vertical\"\n />\n ) : (\n <div className={styles.emptyState}>No settings are available.</div>\n )}\n </div>\n </div>\n );\n}\n"]}