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

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 (434) 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/GeneralSettings.d.ts.map +1 -1
  81. package/dist/components/common/GeneralSettings.js +235 -156
  82. package/dist/components/common/GeneralSettings.js.map +1 -1
  83. package/dist/components/common/GeneralSettings.tsx +1109 -795
  84. package/dist/components/common/SettingsComponent.d.ts +2 -0
  85. package/dist/components/common/SettingsComponent.d.ts.map +1 -0
  86. package/dist/components/common/SettingsComponent.js +351 -0
  87. package/dist/components/common/SettingsComponent.js.map +1 -0
  88. package/dist/components/common/SettingsComponent.module.css +421 -0
  89. package/dist/components/common/SettingsComponent.tsx +582 -0
  90. package/dist/components/common/SocialMediaLogin.d.ts +8 -1
  91. package/dist/components/common/SocialMediaLogin.d.ts.map +1 -1
  92. package/dist/components/common/SocialMediaLogin.js +6 -13
  93. package/dist/components/common/SocialMediaLogin.js.map +1 -1
  94. package/dist/components/common/SocialMediaLogin.tsx +120 -58
  95. package/dist/components/common/SolidAdmin.js +1 -1
  96. package/dist/components/common/SolidAdmin.js.map +1 -1
  97. package/dist/components/common/SolidAdmin.tsx +1 -1
  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/common/solidModuleHome.module.css +1 -2
  112. package/dist/components/core/card/SolidCardView.d.ts.map +1 -1
  113. package/dist/components/core/card/SolidCardView.js +24 -25
  114. package/dist/components/core/card/SolidCardView.js.map +1 -1
  115. package/dist/components/core/card/SolidCardView.tsx +23 -28
  116. package/dist/components/core/card/SolidCardViewConfigure.js +1 -1
  117. package/dist/components/core/card/SolidCardViewConfigure.js.map +1 -1
  118. package/dist/components/core/card/SolidCardViewConfigure.tsx +1 -1
  119. package/dist/components/core/chatter/SolidChatter.d.ts.map +1 -1
  120. package/dist/components/core/chatter/SolidChatter.js +39 -9
  121. package/dist/components/core/chatter/SolidChatter.js.map +1 -1
  122. package/dist/components/core/chatter/SolidChatter.tsx +42 -7
  123. package/dist/components/core/chatter/SolidChatterAuditMessage.d.ts.map +1 -1
  124. package/dist/components/core/chatter/SolidChatterAuditMessage.js +19 -1
  125. package/dist/components/core/chatter/SolidChatterAuditMessage.js.map +1 -1
  126. package/dist/components/core/chatter/SolidChatterAuditMessage.tsx +22 -1
  127. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts +3 -0
  128. package/dist/components/core/chatter/SolidChatterMessageBox.d.ts.map +1 -1
  129. package/dist/components/core/chatter/SolidChatterMessageBox.js +68 -4
  130. package/dist/components/core/chatter/SolidChatterMessageBox.js.map +1 -1
  131. package/dist/components/core/chatter/SolidChatterMessageBox.tsx +45 -3
  132. package/dist/components/core/chatter/chatter.module.css +3 -6
  133. package/dist/components/core/common/PDFViewer.js +1 -1
  134. package/dist/components/core/common/PDFViewer.js.map +1 -1
  135. package/dist/components/core/common/PDFViewer.tsx +2 -2
  136. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.d.ts.map +1 -1
  137. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js +3 -1
  138. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.js.map +1 -1
  139. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.module.css +1 -1
  140. package/dist/components/core/common/SolidAccountSettings/SolidAccountSettings.tsx +3 -1
  141. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.d.ts.map +1 -1
  142. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js +9 -8
  143. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.js.map +1 -1
  144. package/dist/components/core/common/SolidAccountSettings/SolidNotifications.tsx +4 -2
  145. package/dist/components/core/common/SolidGenericImport/SolidImport.module.css +3 -4
  146. package/dist/components/core/common/dndCompat.d.ts +8 -0
  147. package/dist/components/core/common/dndCompat.d.ts.map +1 -0
  148. package/dist/components/core/common/dndCompat.js +5 -0
  149. package/dist/components/core/common/dndCompat.js.map +1 -0
  150. package/dist/components/core/common/dndCompat.ts +9 -0
  151. package/dist/components/core/dashboard/SolidDashboardFilterRequired.js +2 -2
  152. package/dist/components/core/dashboard/SolidDashboardFilterRequired.js.map +1 -1
  153. package/dist/components/core/dashboard/SolidDashboardFilterRequired.tsx +2 -2
  154. package/dist/components/core/dashboard/SolidDashboardNotAvailable.js +2 -2
  155. package/dist/components/core/dashboard/SolidDashboardNotAvailable.js.map +1 -1
  156. package/dist/components/core/dashboard/SolidDashboardNotAvailable.tsx +2 -2
  157. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js +1 -1
  158. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.js.map +1 -1
  159. package/dist/components/core/extension/solid-core/chatterMessage/form/SolidChatterMessageCoModelEntityIdFormViewWidget.tsx +1 -1
  160. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js +1 -1
  161. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.js.map +1 -1
  162. package/dist/components/core/extension/solid-core/chatterMessage/list/SolidChatterMessageCoModelEntityIdListViewWidget.tsx +1 -1
  163. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js +1 -1
  164. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.js.map +1 -1
  165. package/dist/components/core/extension/solid-core/mqMessage/list/SolidMqMessagesSummarizeListHeaderAction.tsx +1 -1
  166. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js +1 -1
  167. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.js.map +1 -1
  168. package/dist/components/core/extension/solid-core/mqMessage/ui/MqMessageStageBadge.tsx +1 -1
  169. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts +7 -0
  170. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.d.ts.map +1 -0
  171. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js +75 -0
  172. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.js.map +1 -0
  173. package/dist/components/core/extension/solid-core/scheduled-job/scheduleFrequencyOnFieldChangeHandler.ts +45 -0
  174. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts +3 -0
  175. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.d.ts.map +1 -0
  176. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js +81 -0
  177. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.js.map +1 -0
  178. package/dist/components/core/extension/solid-core/settings/solidXGenAiCodeBuilderConfigWidget.tsx +114 -0
  179. package/dist/components/core/form/SolidFormActionHeader.d.ts +1 -1
  180. package/dist/components/core/form/SolidFormActionHeader.d.ts.map +1 -1
  181. package/dist/components/core/form/SolidFormActionHeader.js +5 -3
  182. package/dist/components/core/form/SolidFormActionHeader.js.map +1 -1
  183. package/dist/components/core/form/SolidFormActionHeader.tsx +27 -1
  184. package/dist/components/core/form/SolidFormLayouts.js +1 -1
  185. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  186. package/dist/components/core/form/SolidFormLayouts.tsx +1 -1
  187. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  188. package/dist/components/core/form/SolidFormView.js +141 -50
  189. package/dist/components/core/form/SolidFormView.js.map +1 -1
  190. package/dist/components/core/form/SolidFormView.tsx +123 -25
  191. package/dist/components/core/form/fields/SolidComputedField.d.ts +25 -0
  192. package/dist/components/core/form/fields/SolidComputedField.d.ts.map +1 -0
  193. package/dist/components/core/form/fields/SolidComputedField.js +128 -0
  194. package/dist/components/core/form/fields/SolidComputedField.js.map +1 -0
  195. package/dist/components/core/form/fields/SolidComputedField.tsx +134 -0
  196. package/dist/components/core/form/fields/SolidDateTimeField.d.ts.map +1 -1
  197. package/dist/components/core/form/fields/SolidDateTimeField.js +8 -2
  198. package/dist/components/core/form/fields/SolidDateTimeField.js.map +1 -1
  199. package/dist/components/core/form/fields/SolidDateTimeField.tsx +8 -2
  200. package/dist/components/core/form/fields/SolidEmailField.d.ts.map +1 -1
  201. package/dist/components/core/form/fields/SolidEmailField.js +5 -4
  202. package/dist/components/core/form/fields/SolidEmailField.js.map +1 -1
  203. package/dist/components/core/form/fields/SolidEmailField.tsx +17 -15
  204. package/dist/components/core/form/fields/SolidIntegerField.d.ts.map +1 -1
  205. package/dist/components/core/form/fields/SolidIntegerField.js +5 -4
  206. package/dist/components/core/form/fields/SolidIntegerField.js.map +1 -1
  207. package/dist/components/core/form/fields/SolidIntegerField.tsx +3 -1
  208. package/dist/components/core/form/fields/SolidSelectionDynamicField.d.ts.map +1 -1
  209. package/dist/components/core/form/fields/SolidSelectionDynamicField.js +35 -24
  210. package/dist/components/core/form/fields/SolidSelectionDynamicField.js.map +1 -1
  211. package/dist/components/core/form/fields/SolidSelectionDynamicField.tsx +30 -14
  212. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  213. package/dist/components/core/form/fields/SolidSelectionStaticField.js +29 -28
  214. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  215. package/dist/components/core/form/fields/SolidSelectionStaticField.tsx +17 -12
  216. package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
  217. package/dist/components/core/form/fields/SolidShortTextField.js +8 -6
  218. package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
  219. package/dist/components/core/form/fields/SolidShortTextField.tsx +7 -1
  220. package/dist/components/core/form/fields/SolidTimeField.js +1 -1
  221. package/dist/components/core/form/fields/SolidTimeField.js.map +1 -1
  222. package/dist/components/core/form/fields/SolidTimeField.tsx +1 -1
  223. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.d.ts.map +1 -1
  224. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js +3 -3
  225. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.js.map +1 -1
  226. package/dist/components/core/form/fields/relations/widgets/helpers/InlineRelationEntityDialog.tsx +0 -5
  227. package/dist/components/core/form/fields/solidFields.module.css +0 -3
  228. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.d.ts +1 -1
  229. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js +1 -1
  230. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.js.map +1 -1
  231. package/dist/components/core/form/fields/widgets/SolidS3FileViewerWidget.tsx +1 -1
  232. package/dist/components/core/kanban/KanbanBoard.js +1 -1
  233. package/dist/components/core/kanban/KanbanBoard.js.map +1 -1
  234. package/dist/components/core/kanban/KanbanBoard.tsx +1 -1
  235. package/dist/components/core/kanban/KanbanCard.d.ts.map +1 -1
  236. package/dist/components/core/kanban/KanbanCard.js +2 -2
  237. package/dist/components/core/kanban/KanbanCard.js.map +1 -1
  238. package/dist/components/core/kanban/KanbanCard.tsx +4 -3
  239. package/dist/components/core/kanban/KanbanColumn.d.ts.map +1 -1
  240. package/dist/components/core/kanban/KanbanColumn.js +3 -3
  241. package/dist/components/core/kanban/KanbanColumn.js.map +1 -1
  242. package/dist/components/core/kanban/KanbanColumn.tsx +5 -4
  243. package/dist/components/core/kanban/SolidKanbanView.d.ts.map +1 -1
  244. package/dist/components/core/kanban/SolidKanbanView.js +220 -109
  245. package/dist/components/core/kanban/SolidKanbanView.js.map +1 -1
  246. package/dist/components/core/kanban/SolidKanbanView.tsx +219 -96
  247. package/dist/components/core/kanban/SolidKanbanViewConfigure.js +1 -1
  248. package/dist/components/core/kanban/SolidKanbanViewConfigure.js.map +1 -1
  249. package/dist/components/core/kanban/SolidKanbanViewConfigure.tsx +1 -1
  250. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.d.ts.map +1 -1
  251. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js +4 -3
  252. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.js.map +1 -1
  253. package/dist/components/core/list/SolidColumnSelector/SolidListColumnSelector.tsx +13 -12
  254. package/dist/components/core/list/SolidDataTable.d.ts.map +1 -1
  255. package/dist/components/core/list/SolidDataTable.js +6 -5
  256. package/dist/components/core/list/SolidDataTable.js.map +1 -1
  257. package/dist/components/core/list/SolidDataTable.tsx +6 -5
  258. package/dist/components/core/list/SolidEmptyListViewPlaceholder.d.ts.map +1 -1
  259. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js +3 -3
  260. package/dist/components/core/list/SolidEmptyListViewPlaceholder.js.map +1 -1
  261. package/dist/components/core/list/SolidEmptyListViewPlaceholder.tsx +7 -4
  262. package/dist/components/core/list/SolidListView.d.ts.map +1 -1
  263. package/dist/components/core/list/SolidListView.js +64 -74
  264. package/dist/components/core/list/SolidListView.js.map +1 -1
  265. package/dist/components/core/list/SolidListView.tsx +72 -97
  266. package/dist/components/core/list/SolidListViewConfigure.js +1 -1
  267. package/dist/components/core/list/SolidListViewConfigure.js.map +1 -1
  268. package/dist/components/core/list/SolidListViewConfigure.tsx +1 -1
  269. package/dist/components/core/list/SolidListViewRowActionsMenu.js +2 -2
  270. package/dist/components/core/list/SolidListViewRowActionsMenu.js.map +1 -1
  271. package/dist/components/core/list/SolidListViewRowActionsMenu.tsx +2 -2
  272. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js +1 -1
  273. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.js.map +1 -1
  274. package/dist/components/core/list/columns/relations/SolidRelationManyToOneColumn.tsx +1 -1
  275. package/dist/components/core/solid-ai/SolidAiChat.module.css +3 -3
  276. package/dist/components/core/tree/SolidTreeView.js +1 -1
  277. package/dist/components/core/tree/SolidTreeView.js.map +1 -1
  278. package/dist/components/core/tree/SolidTreeView.tsx +1 -1
  279. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.css +283 -9
  280. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.d.ts.map +1 -1
  281. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js +35 -28
  282. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.js.map +1 -1
  283. package/dist/components/core/users/ApiKeysTab/ApiKeysTab.tsx +64 -62
  284. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts +2 -1
  285. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.d.ts.map +1 -1
  286. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js +4 -4
  287. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.js.map +1 -1
  288. package/dist/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx +17 -10
  289. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.d.ts.map +1 -1
  290. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.js +2 -19
  291. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.js.map +1 -1
  292. package/dist/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx +24 -43
  293. package/dist/components/core/users/CreateUser.css +114 -0
  294. package/dist/components/core/users/CreateUser.d.ts +1 -0
  295. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  296. package/dist/components/core/users/CreateUser.js +4 -3
  297. package/dist/components/core/users/CreateUser.js.map +1 -1
  298. package/dist/components/core/users/CreateUser.tsx +32 -26
  299. package/dist/components/layout/AdminTopHeader.d.ts.map +1 -1
  300. package/dist/components/layout/AdminTopHeader.js +25 -1
  301. package/dist/components/layout/AdminTopHeader.js.map +1 -1
  302. package/dist/components/layout/AdminTopHeader.tsx +38 -1
  303. package/dist/components/layout/context/layoutcontext.js +2 -2
  304. package/dist/components/layout/context/layoutcontext.js.map +1 -1
  305. package/dist/components/layout/context/layoutcontext.tsx +2 -2
  306. package/dist/components/layout/user-profile-menu.d.ts.map +1 -1
  307. package/dist/components/layout/user-profile-menu.js +15 -14
  308. package/dist/components/layout/user-profile-menu.js.map +1 -1
  309. package/dist/components/layout/user-profile-menu.tsx +8 -6
  310. package/dist/components/shad-cn-ui/SolidAutocomplete.d.ts.map +1 -1
  311. package/dist/components/shad-cn-ui/SolidAutocomplete.js +9 -1
  312. package/dist/components/shad-cn-ui/SolidAutocomplete.js.map +1 -1
  313. package/dist/components/shad-cn-ui/SolidAutocomplete.tsx +10 -1
  314. package/dist/components/shad-cn-ui/SolidConfirmDialog.d.ts +6 -1
  315. package/dist/components/shad-cn-ui/SolidConfirmDialog.d.ts.map +1 -1
  316. package/dist/components/shad-cn-ui/SolidConfirmDialog.js +3 -3
  317. package/dist/components/shad-cn-ui/SolidConfirmDialog.js.map +1 -1
  318. package/dist/components/shad-cn-ui/SolidConfirmDialog.tsx +15 -3
  319. package/dist/components/shad-cn-ui/SolidDatePicker.d.ts.map +1 -1
  320. package/dist/components/shad-cn-ui/SolidDatePicker.js +12 -2
  321. package/dist/components/shad-cn-ui/SolidDatePicker.js.map +1 -1
  322. package/dist/components/shad-cn-ui/SolidDatePicker.tsx +13 -2
  323. package/dist/components/shad-cn-ui/SolidDialog.d.ts +1 -1
  324. package/dist/components/shad-cn-ui/SolidDialog.d.ts.map +1 -1
  325. package/dist/components/shad-cn-ui/SolidDialog.js.map +1 -1
  326. package/dist/components/shad-cn-ui/SolidDialog.tsx +1 -1
  327. package/dist/components/shad-cn-ui/SolidIcon.d.ts +2 -2
  328. package/dist/components/shad-cn-ui/SolidIcon.d.ts.map +1 -1
  329. package/dist/components/shad-cn-ui/SolidIcon.js +3 -4
  330. package/dist/components/shad-cn-ui/SolidIcon.js.map +1 -1
  331. package/dist/components/shad-cn-ui/SolidIcon.tsx +12 -15
  332. package/dist/components/shad-cn-ui/SolidRichTextEditor.d.ts.map +1 -1
  333. package/dist/components/shad-cn-ui/SolidRichTextEditor.js +9 -1
  334. package/dist/components/shad-cn-ui/SolidRichTextEditor.js.map +1 -1
  335. package/dist/components/shad-cn-ui/SolidRichTextEditor.tsx +8 -1
  336. package/dist/components/shad-cn-ui/SolidTabs.d.ts +2 -1
  337. package/dist/components/shad-cn-ui/SolidTabs.d.ts.map +1 -1
  338. package/dist/components/shad-cn-ui/SolidTabs.js +6 -3
  339. package/dist/components/shad-cn-ui/SolidTabs.js.map +1 -1
  340. package/dist/components/shad-cn-ui/SolidTabs.tsx +63 -26
  341. package/dist/helpers/hydrateRelationRules.js +1 -1
  342. package/dist/helpers/hydrateRelationRules.js.map +1 -1
  343. package/dist/helpers/hydrateRelationRules.ts +1 -1
  344. package/dist/helpers/permissions.js +2 -2
  345. package/dist/helpers/permissions.js.map +1 -1
  346. package/dist/helpers/permissions.ts +2 -2
  347. package/dist/helpers/registry.d.ts +2 -2
  348. package/dist/helpers/registry.d.ts.map +1 -1
  349. package/dist/helpers/registry.js +6 -0
  350. package/dist/helpers/registry.js.map +1 -1
  351. package/dist/helpers/registry.ts +9 -2
  352. package/dist/helpers/settingsPayload.d.ts +32 -0
  353. package/dist/helpers/settingsPayload.d.ts.map +1 -0
  354. package/dist/helpers/settingsPayload.js +72 -0
  355. package/dist/helpers/settingsPayload.js.map +1 -0
  356. package/dist/helpers/settingsPayload.ts +125 -0
  357. package/dist/index.d.ts +4 -0
  358. package/dist/index.d.ts.map +1 -1
  359. package/dist/index.js +4 -0
  360. package/dist/index.js.map +1 -1
  361. package/dist/index.ts +4 -0
  362. package/dist/redux/api/solidChatterMessageApi.d.ts +2 -1
  363. package/dist/redux/api/solidChatterMessageApi.d.ts.map +1 -1
  364. package/dist/redux/api/solidChatterMessageApi.js +11 -1
  365. package/dist/redux/api/solidChatterMessageApi.js.map +1 -1
  366. package/dist/redux/api/solidChatterMessageApi.ts +10 -1
  367. package/dist/redux/api/solidEntityApi.js +1 -1
  368. package/dist/redux/api/solidEntityApi.js.map +1 -1
  369. package/dist/redux/api/solidEntityApi.tsx +1 -1
  370. package/dist/redux/store/defaultStoreConfig.d.ts +1 -0
  371. package/dist/redux/store/defaultStoreConfig.d.ts.map +1 -1
  372. package/dist/resources/globals.css +114 -90
  373. package/dist/resources/images/Background.svg +3 -5
  374. package/dist/resources/images/Navigation/SolidSettinsIcon.svg +3 -5
  375. package/dist/resources/images/errors/error.svg +12 -14
  376. package/dist/resources/shadcn-base.css +356 -429
  377. package/dist/resources/solid-responsive.css +22 -4
  378. package/dist/resources/themes/solid-dark-purple/theme.css +23 -33
  379. package/dist/resources/themes/solid-light-purple/theme.css +31 -31
  380. package/dist/routes/AppEventListener.js +1 -1
  381. package/dist/routes/AppEventListener.js.map +1 -1
  382. package/dist/routes/AppEventListener.tsx +1 -1
  383. package/dist/routes/SolidLayoutRegistry.d.ts.map +1 -1
  384. package/dist/routes/SolidLayoutRegistry.js +3 -1
  385. package/dist/routes/SolidLayoutRegistry.js.map +1 -1
  386. package/dist/routes/SolidLayoutRegistry.tsx +3 -1
  387. package/dist/routes/guards/AuthGuard.d.ts.map +1 -1
  388. package/dist/routes/guards/AuthGuard.js +4 -1
  389. package/dist/routes/guards/AuthGuard.js.map +1 -1
  390. package/dist/routes/guards/AuthGuard.tsx +6 -1
  391. package/dist/routes/pages/admin/core/CardPage.js +1 -1
  392. package/dist/routes/pages/admin/core/CardPage.js.map +1 -1
  393. package/dist/routes/pages/admin/core/CardPage.tsx +1 -1
  394. package/dist/routes/pages/admin/core/FormPage.js +1 -1
  395. package/dist/routes/pages/admin/core/FormPage.js.map +1 -1
  396. package/dist/routes/pages/admin/core/FormPage.tsx +1 -1
  397. package/dist/routes/pages/admin/core/KanbanPage.js +1 -1
  398. package/dist/routes/pages/admin/core/KanbanPage.js.map +1 -1
  399. package/dist/routes/pages/admin/core/KanbanPage.tsx +1 -1
  400. package/dist/routes/pages/admin/core/ListPage.js +1 -1
  401. package/dist/routes/pages/admin/core/ListPage.js.map +1 -1
  402. package/dist/routes/pages/admin/core/ListPage.tsx +1 -1
  403. package/dist/routes/pages/admin/core/SettingsPage.js +2 -2
  404. package/dist/routes/pages/admin/core/SettingsPage.js.map +1 -1
  405. package/dist/routes/pages/admin/core/SettingsPage.tsx +2 -2
  406. package/dist/routes/pages/admin/core/TreePage.js +1 -1
  407. package/dist/routes/pages/admin/core/TreePage.js.map +1 -1
  408. package/dist/routes/pages/admin/core/TreePage.tsx +1 -1
  409. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts +2 -0
  410. package/dist/routes/pages/auth/InitiateFacebookOauthPage.d.ts.map +1 -0
  411. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js +6 -0
  412. package/dist/routes/pages/auth/InitiateFacebookOauthPage.js.map +1 -0
  413. package/dist/routes/pages/auth/InitiateFacebookOauthPage.tsx +5 -0
  414. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts +2 -0
  415. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.d.ts.map +1 -0
  416. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js +6 -0
  417. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.js.map +1 -0
  418. package/dist/routes/pages/auth/InitiateMicrosoftOauthPage.tsx +5 -0
  419. package/dist/routes/solidRoutes.d.ts.map +1 -1
  420. package/dist/routes/solidRoutes.js +5 -1
  421. package/dist/routes/solidRoutes.js.map +1 -1
  422. package/dist/routes/solidRoutes.tsx +5 -1
  423. package/dist/routes/types.d.ts +1 -1
  424. package/dist/routes/types.d.ts.map +1 -1
  425. package/dist/routes/types.js.map +1 -1
  426. package/dist/routes/types.ts +2 -0
  427. package/dist/types/extension-registry.d.ts +1 -0
  428. package/dist/types/extension-registry.d.ts.map +1 -1
  429. package/dist/types/extension-registry.js +1 -0
  430. package/dist/types/extension-registry.js.map +1 -1
  431. package/dist/types/extension-registry.ts +1 -0
  432. package/dist/types/index.d.ts +2 -0
  433. package/dist/types/solid-core.d.ts +11 -0
  434. package/package.json +1 -2
@@ -1,4 +1,4 @@
1
- import { useState } from "react";
1
+ import { useMemo, useState } from "react";
2
2
  import { useDispatch } from "react-redux";
3
3
  import { KeyRound, Plus } from "lucide-react";
4
4
  import "./ApiKeysTab.css";
@@ -33,33 +33,43 @@ function ApiKeysTable({
33
33
  keys,
34
34
  onToggleActive,
35
35
  isTogglingId,
36
+ onGenerateFirstKey,
37
+ canCreate,
36
38
  }: {
37
39
  keys: ApiKeyRecord[];
38
40
  onToggleActive: (key: ApiKeyRecord) => void;
39
41
  isTogglingId: string | null;
42
+ onGenerateFirstKey: () => void;
43
+ canCreate: boolean;
40
44
  }) {
41
45
  if (keys.length === 0) {
42
46
  return (
43
- <div
44
- className="flex flex-column align-items-center justify-content-center gap-3 py-6"
45
- style={{ color: "var(--solid-text-secondary, #888)" }}
46
- >
47
- <KeyRound size={32} strokeWidth={1.5} />
47
+ <div className="solid-api-keys-empty">
48
+ <div className="solid-api-keys-empty-icon">
49
+ <KeyRound size={30} strokeWidth={1.6} />
50
+ </div>
48
51
  <div className="text-center">
49
- <p className="m-0" style={{ fontSize: 14, fontWeight: 500 }}>
50
- No API keys
51
- </p>
52
- <p className="m-0 mt-1" style={{ fontSize: 12 }}>
53
- Generate a key to enable programmatic access.
52
+ <p className="solid-api-keys-empty-title m-0">No API keys yet</p>
53
+ <p className="solid-api-keys-empty-copy m-0">
54
+ {canCreate
55
+ ? "Generate a key to enable secure programmatic access for this user."
56
+ : "API key generation is disabled for this user account."}
54
57
  </p>
55
58
  </div>
59
+ {canCreate ? (
60
+ <SolidButton type="button" onClick={onGenerateFirstKey}>
61
+ <Plus size={14} />
62
+ Generate First Key
63
+ </SolidButton>
64
+ ) : null}
56
65
  </div>
57
66
  );
58
67
  }
59
68
 
60
69
  return (
61
- <div style={{ overflowX: "auto" }}>
62
- <table style={{ width: "100%", borderCollapse: "collapse", tableLayout: "fixed" }}>
70
+ <div className="solid-api-keys-table-shell">
71
+ <div className="solid-api-keys-table-wrap">
72
+ <table className="solid-api-keys-table">
63
73
  <colgroup>
64
74
  <col style={{ width: "18%" }} />
65
75
  <col style={{ width: "22%" }} />
@@ -75,7 +85,7 @@ function ApiKeysTable({
75
85
  <th className="solid-api-keys-th">Status</th>
76
86
  <th className="solid-api-keys-th">Expires</th>
77
87
  <th className="solid-api-keys-th">Last Used</th>
78
- <th className="solid-api-keys-th" style={{ textAlign: "right" }}>Active</th>
88
+ <th className="solid-api-keys-th solid-api-keys-th--right">Active</th>
79
89
  </tr>
80
90
  </thead>
81
91
  <tbody>
@@ -86,21 +96,11 @@ function ApiKeysTable({
86
96
  return (
87
97
  <tr key={key.id} className={isExpired ? "solid-api-keys-row--expired" : undefined}>
88
98
  <td className="solid-api-keys-td">
89
- <span style={{ fontWeight: 500 }}>{key.name}</span>
99
+ <span className="solid-api-keys-name">{key.name}</span>
90
100
  </td>
91
101
 
92
102
  <td className="solid-api-keys-td">
93
- <code
94
- style={{
95
- fontFamily: "monospace",
96
- fontSize: 13,
97
- background: "var(--solid-surface-secondary, #f5f5f5)",
98
- padding: "2px 6px",
99
- borderRadius: 4,
100
- }}
101
- >
102
- {key.maskedKey}
103
- </code>
103
+ <code className="solid-api-keys-code">{key.maskedKey}</code>
104
104
  </td>
105
105
 
106
106
  <td className="solid-api-keys-td">
@@ -115,29 +115,19 @@ function ApiKeysTable({
115
115
  )}
116
116
  </td>
117
117
 
118
- <td
119
- className="solid-api-keys-td"
120
- style={{
121
- color:
122
- expiryStatus === "expired"
123
- ? "var(--solid-danger-color, #ef4444)"
124
- : expiryStatus === "expiring-soon"
125
- ? "var(--solid-warn-color, #f59e0b)"
126
- : undefined,
127
- }}
128
- >
118
+ <td className={`solid-api-keys-td ${expiryStatus === "expired" ? "solid-api-keys-date--expired" : ""} ${expiryStatus === "expiring-soon" ? "solid-api-keys-date--warning" : ""}`}>
129
119
  {expiryStatus === "never" ? (
130
- <span style={{ color: "var(--solid-text-secondary, #888)" }}>Never</span>
120
+ <span className="solid-api-keys-muted">Never</span>
131
121
  ) : (
132
122
  formatDate(key.expiresAt)
133
123
  )}
134
124
  </td>
135
125
 
136
- <td className="solid-api-keys-td" style={{ color: "var(--solid-text-secondary, #888)" }}>
126
+ <td className="solid-api-keys-td solid-api-keys-muted">
137
127
  {formatDate(key.lastUsedAt)}
138
128
  </td>
139
129
 
140
- <td className="solid-api-keys-td" style={{ textAlign: "right" }}>
130
+ <td className="solid-api-keys-td solid-api-keys-td--right">
141
131
  {isTogglingId === key.id ? (
142
132
  <SolidSpinner />
143
133
  ) : (
@@ -152,7 +142,8 @@ function ApiKeysTable({
152
142
  );
153
143
  })}
154
144
  </tbody>
155
- </table>
145
+ </table>
146
+ </div>
156
147
  </div>
157
148
  );
158
149
  }
@@ -164,13 +155,18 @@ interface ApiKeysTabProps {
164
155
 
165
156
  export function ApiKeysTab({ userId, canCreate = false }: ApiKeysTabProps) {
166
157
  const dispatch = useDispatch();
167
- const { data, isLoading, isError } = useGetUserApiKeysQuery(userId);
158
+ const { data, isLoading, isError, refetch } = useGetUserApiKeysQuery(userId);
168
159
  const [updateApiKey] = useUpdateApiKeyMutation();
169
160
  const [togglingId, setTogglingId] = useState<string | null>(null);
170
161
  const [showGenerate, setShowGenerate] = useState(false);
171
162
  const [revealKey, setRevealKey] = useState<{ apiKey: string; keyName: string } | null>(null);
163
+ const [optimisticKeys, setOptimisticKeys] = useState<ApiKeyRecord[]>([]);
172
164
 
173
- const keys: ApiKeyRecord[] = data?.data?.apiKeys ?? [];
165
+ const keys = useMemo(() => {
166
+ const serverKeys = data?.data?.apiKeys ?? [];
167
+ const merged = [...optimisticKeys.filter((key) => !serverKeys.some((serverKey) => serverKey.id === key.id)), ...serverKeys];
168
+ return merged.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
169
+ }, [data?.data?.apiKeys, optimisticKeys]);
174
170
 
175
171
  const handleToggle = async (key: ApiKeyRecord) => {
176
172
  setTogglingId(key.id);
@@ -199,37 +195,41 @@ export function ApiKeysTab({ userId, canCreate = false }: ApiKeysTabProps) {
199
195
  return (
200
196
  <>
201
197
  <div className="solid-api-keys-tab">
202
- <div className="flex align-items-center justify-content-between mb-4">
203
- <div>
204
- <p className="m-0" style={{ fontWeight: 600, fontSize: 14 }}>
205
- API Keys
206
- </p>
207
- <p className="m-0 mt-1" style={{ fontSize: 12, color: "var(--solid-text-secondary, #888)" }}>
198
+ <div className="solid-api-keys-hero">
199
+ <div className="solid-api-keys-copy">
200
+ <p className="solid-api-keys-title m-0">API Keys</p>
201
+ <p className="solid-api-keys-subtitle m-0">
208
202
  Keys grant programmatic access. Store them securely — they are shown only once.
209
203
  </p>
210
204
  </div>
211
- {canCreate && (
212
- <SolidButton size="small" type="button" onClick={() => setShowGenerate(true)}>
213
- <Plus size={14} />
214
- Generate Key
215
- </SolidButton>
216
- )}
205
+ <div className="solid-api-keys-actions">
206
+ <span className="solid-api-keys-count">{keys.length} key{keys.length === 1 ? "" : "s"}</span>
207
+ {canCreate ? (
208
+ <SolidButton size="small" type="button" onClick={() => setShowGenerate(true)}>
209
+ <Plus size={14} />
210
+ Generate Key
211
+ </SolidButton>
212
+ ) : null}
213
+ </div>
217
214
  </div>
218
215
 
219
216
  {isLoading ? (
220
- <div className="flex justify-content-center py-5">
217
+ <div className="solid-api-keys-state">
221
218
  <SolidSpinner />
222
219
  </div>
223
220
  ) : isError && keys.length === 0 ? (
224
- <div
225
- className="flex flex-column align-items-center justify-content-center gap-2 py-5"
226
- style={{ color: "var(--solid-text-secondary, #888)", fontSize: 13 }}
227
- >
221
+ <div className="solid-api-keys-error">
228
222
  <p className="m-0">Something went wrong while loading API keys.</p>
229
223
  <p className="m-0">Please refresh the page and try again.</p>
230
224
  </div>
231
225
  ) : (
232
- <ApiKeysTable keys={keys} onToggleActive={handleToggle} isTogglingId={togglingId} />
226
+ <ApiKeysTable
227
+ keys={keys}
228
+ onToggleActive={handleToggle}
229
+ isTogglingId={togglingId}
230
+ onGenerateFirstKey={() => setShowGenerate(true)}
231
+ canCreate={canCreate}
232
+ />
233
233
  )}
234
234
  </div>
235
235
 
@@ -237,8 +237,10 @@ export function ApiKeysTab({ userId, canCreate = false }: ApiKeysTabProps) {
237
237
  open={showGenerate}
238
238
  userId={Number(userId)}
239
239
  onClose={() => setShowGenerate(false)}
240
- onCreated={(apiKey, keyName) => {
240
+ onCreated={(apiKey, keyName, record) => {
241
241
  setShowGenerate(false);
242
+ setOptimisticKeys((previous) => [record, ...previous.filter((existing) => existing.id !== record.id)]);
243
+ void refetch();
242
244
  setRevealKey({ apiKey, keyName });
243
245
  }}
244
246
  />
@@ -1,7 +1,8 @@
1
+ import { type ApiKeyRecord } from "../../../../redux/api/apiKeyApi";
1
2
  interface GenerateApiKeyModalProps {
2
3
  open: boolean;
3
4
  onClose: () => void;
4
- onCreated: (rawApiKey: string, keyName: string) => void;
5
+ onCreated: (rawApiKey: string, keyName: string, record: ApiKeyRecord) => void;
5
6
  userId?: number;
6
7
  }
7
8
  export declare function GenerateApiKeyModal({ open, onClose, onCreated, userId }: GenerateApiKeyModalProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateApiKeyModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx"],"names":[],"mappings":"AAmDA,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CA4HjG"}
1
+ {"version":3,"file":"GenerateApiKeyModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx"],"names":[],"mappings":"AAmBA,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,iCAAiC,CAAC;AAiCtG,UAAU,wBAAwB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,wBAAwB,2CAkIjG"}
@@ -50,7 +50,7 @@ import { useEffect, useState } from "react";
50
50
  import { useDispatch } from "react-redux";
51
51
  import { useFormik } from "formik";
52
52
  import * as Yup from "yup";
53
- import { SolidButton, SolidDatePicker, SolidDialog, SolidDialogBody, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, SolidInput, SolidMessage, SolidSelect, } from "../../../shad-cn-ui";
53
+ import { SolidButton, SolidDatePicker, SolidDialog, SolidDialogBody, SolidDialogDescription, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, SolidInput, SolidMessage, SolidSelect, } from "../../../shad-cn-ui";
54
54
  import { showToast } from "../../../../redux/features/toastSlice";
55
55
  import { useGenerateApiKeyForUserMutation } from "../../../../redux/api/apiKeyApi";
56
56
  var EXPIRY_OPTIONS = [
@@ -118,7 +118,7 @@ export function GenerateApiKeyModal(_a) {
118
118
  return [4 /*yield*/, generateApiKeyForUser({ userId: userId, body: body }).unwrap()];
119
119
  case 2:
120
120
  response = _b.sent();
121
- onCreated(response.data.apiKey, values.name.trim());
121
+ onCreated(response.data.apiKey, values.name.trim(), response.data.record);
122
122
  handleClose();
123
123
  return [3 /*break*/, 4];
124
124
  case 3:
@@ -147,11 +147,11 @@ export function GenerateApiKeyModal(_a) {
147
147
  var expiryError = formik.touched.expiryOption && formik.errors.expiryOption
148
148
  ? String(formik.errors.expiryOption)
149
149
  : "";
150
- return (_jsxs(SolidDialog, { open: open, onOpenChange: handleClose, style: { maxWidth: 480 }, children: [_jsx(SolidDialogHeader, { children: _jsx(SolidDialogTitle, { children: "Generate API Key" }) }), _jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { children: _jsx("form", { id: "generate-api-key-form", onSubmit: formik.handleSubmit, children: _jsxs("div", { className: "flex flex-column gap-3", children: [_jsxs("div", { className: "flex flex-column gap-2", children: [_jsxs("label", { htmlFor: "api-key-name", className: "form-field-label", children: ["Key Name ", _jsx("span", { style: { color: "var(--solid-danger-color, #ef4444)" }, children: "*" })] }), _jsx(SolidInput, { id: "api-key-name", name: "name", autoComplete: "off", placeholder: "e.g. CI/CD pipeline, Mobile app", value: formik.values.name, onChange: formik.handleChange, onBlur: formik.handleBlur }), nameError && _jsx(SolidMessage, { severity: "error", text: nameError })] }), _jsxs("div", { className: "flex flex-column gap-2", children: [_jsx("label", { htmlFor: "api-key-expiry", className: "form-field-label", children: "Expires" }), _jsx(SolidSelect, { value: formik.values.expiryOption, options: EXPIRY_OPTIONS, optionLabel: "label", optionValue: "value", onChange: function (_a) {
150
+ return (_jsxs(SolidDialog, { open: open, onOpenChange: handleClose, style: { maxWidth: 480 }, className: "solid-api-key-dialog", children: [_jsxs(SolidDialogHeader, { className: "solid-api-key-dialog-header", children: [_jsx(SolidDialogTitle, { children: "Generate API Key" }), _jsx(SolidDialogDescription, { children: "Create a named key for this user. The raw key will be shown only once after generation." })] }), _jsx(SolidDialogSeparator, {}), _jsx(SolidDialogBody, { className: "solid-api-key-dialog-body", children: _jsx("form", { id: "generate-api-key-form", onSubmit: formik.handleSubmit, children: _jsxs("div", { className: "solid-api-key-dialog-fields", children: [_jsxs("div", { className: "solid-api-key-dialog-field", children: [_jsxs("label", { htmlFor: "api-key-name", className: "form-field-label", children: ["Key Name ", _jsx("span", { style: { color: "var(--solid-danger-color, #ef4444)" }, children: "*" })] }), _jsx(SolidInput, { id: "api-key-name", name: "name", autoComplete: "off", placeholder: "e.g. CI/CD pipeline, Mobile app", value: formik.values.name, onChange: formik.handleChange, onBlur: formik.handleBlur }), nameError && _jsx(SolidMessage, { severity: "error", text: nameError })] }), _jsxs("div", { className: "solid-api-key-dialog-field", children: [_jsx("label", { htmlFor: "api-key-expiry", className: "form-field-label", children: "Expires" }), _jsx(SolidSelect, { value: formik.values.expiryOption, options: EXPIRY_OPTIONS, optionLabel: "label", optionValue: "value", onChange: function (_a) {
151
151
  var value = _a.value;
152
152
  formik.setFieldValue("expiryOption", value);
153
153
  if (value !== "custom")
154
154
  setCustomDate(null);
155
- } }), formik.values.expiryOption === "custom" && (_jsx(SolidDatePicker, { selected: customDate, onChange: function (date) { return setCustomDate(date); }, minDate: new Date(), placeholderText: "Select expiry date", dateFormat: "dd/MM/yyyy" })), expiryError && _jsx(SolidMessage, { severity: "error", text: expiryError })] })] }) }) }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { variant: "outline", type: "button", onClick: handleClose, disabled: isLoading, children: "Cancel" }), _jsx(SolidButton, { type: "submit", form: "generate-api-key-form", loading: isLoading, children: "Generate Key" })] })] }));
155
+ } }), formik.values.expiryOption === "custom" && (_jsx(SolidDatePicker, { selected: customDate, onChange: function (date) { return setCustomDate(date); }, minDate: new Date(), placeholderText: "Select expiry date", dateFormat: "dd/MM/yyyy" })), formik.values.expiryOption !== "custom" ? (_jsx("p", { className: "solid-api-key-dialog-hint m-0", children: "Choose how long this key should remain valid." })) : null, expiryError && _jsx(SolidMessage, { severity: "error", text: expiryError })] })] }) }) }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogFooter, { className: "solid-api-key-dialog-footer", children: [_jsx(SolidButton, { variant: "outline", type: "button", onClick: handleClose, disabled: isLoading, children: "Cancel" }), _jsx(SolidButton, { type: "submit", form: "generate-api-key-form", loading: isLoading, children: "Generate Key" })] })] }));
156
156
  }
157
157
  //# sourceMappingURL=GenerateApiKeyModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenerateApiKeyModal.js","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport {\n SolidButton,\n SolidDatePicker,\n SolidDialog,\n SolidDialogBody,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidInput,\n SolidMessage,\n SolidSelect,\n} from \"../../../shad-cn-ui\";\nimport { showToast } from \"../../../../redux/features/toastSlice\";\nimport { useGenerateApiKeyForUserMutation } from \"../../../../redux/api/apiKeyApi\";\n\nconst EXPIRY_OPTIONS = [\n { label: \"30 days\", value: \"30d\" },\n { label: \"60 days\", value: \"60d\" },\n { label: \"90 days\", value: \"90d\" },\n { label: \"Never\", value: \"never\" },\n { label: \"Custom date\", value: \"custom\" },\n];\n\nfunction addDays(days: number): string {\n const d = new Date();\n d.setDate(d.getDate() + days);\n return d.toISOString();\n}\n\nfunction resolveExpiresAt(expiryOption: string, customDate: Date | null): string | undefined {\n switch (expiryOption) {\n case \"30d\":\n return addDays(30);\n case \"60d\":\n return addDays(60);\n case \"90d\":\n return addDays(90);\n case \"never\":\n return undefined;\n case \"custom\":\n return customDate ? customDate.toISOString() : undefined;\n default:\n return undefined;\n }\n}\n\ninterface GenerateApiKeyModalProps {\n open: boolean;\n onClose: () => void;\n onCreated: (rawApiKey: string, keyName: string) => void;\n userId?: number;\n}\n\nexport function GenerateApiKeyModal({ open, onClose, onCreated, userId }: GenerateApiKeyModalProps) {\n const dispatch = useDispatch();\n const [generateApiKeyForUser, { isLoading }] = useGenerateApiKeyForUserMutation();\n const [customDate, setCustomDate] = useState<Date | null>(null);\n\n const formik = useFormik({\n initialValues: {\n name: \"\",\n expiryOption: \"30d\",\n },\n validationSchema: Yup.object({\n name: Yup.string()\n .trim()\n .min(2, \"Name must be at least 2 characters\")\n .max(64, \"Name must be 64 characters or fewer\")\n .required(\"Key name is required\"),\n expiryOption: Yup.string().required(\"Expiry is required\"),\n }),\n onSubmit: async (values, helpers) => {\n if (values.expiryOption === \"custom\" && !customDate) {\n helpers.setFieldError(\"expiryOption\", \"Please select a custom expiry date\");\n return;\n }\n\n const expiresAt = resolveExpiresAt(values.expiryOption, customDate);\n\n try {\n const body = { name: values.name.trim(), ...(expiresAt ? { expiresAt } : {}) };\n const response = await generateApiKeyForUser({ userId: userId!, body }).unwrap();\n\n onCreated(response.data.apiKey, values.name.trim());\n handleClose();\n } catch (err: any) {\n const detail = err?.data?.message || \"Failed to generate API key. Please try again.\";\n dispatch(showToast({ severity: \"error\", summary: \"Error\", detail }));\n }\n },\n });\n\n const handleClose = () => {\n formik.resetForm();\n setCustomDate(null);\n onClose();\n };\n\n // Reset form when modal opens\n useEffect(() => {\n if (open) {\n formik.resetForm();\n setCustomDate(null);\n }\n }, [open]);\n\n const nameError =\n formik.touched.name && formik.errors.name ? String(formik.errors.name) : \"\";\n const expiryError =\n formik.touched.expiryOption && formik.errors.expiryOption\n ? String(formik.errors.expiryOption)\n : \"\";\n\n return (\n <SolidDialog open={open} onOpenChange={handleClose} style={{ maxWidth: 480 }}>\n <SolidDialogHeader>\n <SolidDialogTitle>Generate API Key</SolidDialogTitle>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody>\n <form id=\"generate-api-key-form\" onSubmit={formik.handleSubmit}>\n <div className=\"flex flex-column gap-3\">\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"api-key-name\" className=\"form-field-label\">\n Key Name <span style={{ color: \"var(--solid-danger-color, #ef4444)\" }}>*</span>\n </label>\n <SolidInput\n id=\"api-key-name\"\n name=\"name\"\n autoComplete=\"off\"\n placeholder=\"e.g. CI/CD pipeline, Mobile app\"\n value={formik.values.name}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n />\n {nameError && <SolidMessage severity=\"error\" text={nameError} />}\n </div>\n\n <div className=\"flex flex-column gap-2\">\n <label htmlFor=\"api-key-expiry\" className=\"form-field-label\">\n Expires\n </label>\n <SolidSelect\n value={formik.values.expiryOption}\n options={EXPIRY_OPTIONS}\n optionLabel=\"label\"\n optionValue=\"value\"\n onChange={({ value }) => {\n formik.setFieldValue(\"expiryOption\", value);\n if (value !== \"custom\") setCustomDate(null);\n }}\n />\n {formik.values.expiryOption === \"custom\" && (\n <SolidDatePicker\n selected={customDate}\n onChange={(date: Date | null) => setCustomDate(date)}\n minDate={new Date()}\n placeholderText=\"Select expiry date\"\n dateFormat=\"dd/MM/yyyy\"\n />\n )}\n {expiryError && <SolidMessage severity=\"error\" text={expiryError} />}\n </div>\n </div>\n </form>\n </SolidDialogBody>\n <SolidDialogSeparator />\n <SolidDialogFooter>\n <SolidButton variant=\"outline\" type=\"button\" onClick={handleClose} disabled={isLoading}>\n Cancel\n </SolidButton>\n <SolidButton type=\"submit\" form=\"generate-api-key-form\" loading={isLoading}>\n Generate Key\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n );\n}\n"]}
1
+ {"version":3,"file":"GenerateApiKeyModal.js","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/GenerateApiKeyModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { useFormik } from \"formik\";\nimport * as Yup from \"yup\";\nimport {\n SolidButton,\n SolidDatePicker,\n SolidDialog,\n SolidDialogBody,\n SolidDialogDescription,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n SolidInput,\n SolidMessage,\n SolidSelect,\n} from \"../../../shad-cn-ui\";\nimport { showToast } from \"../../../../redux/features/toastSlice\";\nimport { type ApiKeyRecord, useGenerateApiKeyForUserMutation } from \"../../../../redux/api/apiKeyApi\";\n\nconst EXPIRY_OPTIONS = [\n { label: \"30 days\", value: \"30d\" },\n { label: \"60 days\", value: \"60d\" },\n { label: \"90 days\", value: \"90d\" },\n { label: \"Never\", value: \"never\" },\n { label: \"Custom date\", value: \"custom\" },\n];\n\nfunction addDays(days: number): string {\n const d = new Date();\n d.setDate(d.getDate() + days);\n return d.toISOString();\n}\n\nfunction resolveExpiresAt(expiryOption: string, customDate: Date | null): string | undefined {\n switch (expiryOption) {\n case \"30d\":\n return addDays(30);\n case \"60d\":\n return addDays(60);\n case \"90d\":\n return addDays(90);\n case \"never\":\n return undefined;\n case \"custom\":\n return customDate ? customDate.toISOString() : undefined;\n default:\n return undefined;\n }\n}\n\ninterface GenerateApiKeyModalProps {\n open: boolean;\n onClose: () => void;\n onCreated: (rawApiKey: string, keyName: string, record: ApiKeyRecord) => void;\n userId?: number;\n}\n\nexport function GenerateApiKeyModal({ open, onClose, onCreated, userId }: GenerateApiKeyModalProps) {\n const dispatch = useDispatch();\n const [generateApiKeyForUser, { isLoading }] = useGenerateApiKeyForUserMutation();\n const [customDate, setCustomDate] = useState<Date | null>(null);\n\n const formik = useFormik({\n initialValues: {\n name: \"\",\n expiryOption: \"30d\",\n },\n validationSchema: Yup.object({\n name: Yup.string()\n .trim()\n .min(2, \"Name must be at least 2 characters\")\n .max(64, \"Name must be 64 characters or fewer\")\n .required(\"Key name is required\"),\n expiryOption: Yup.string().required(\"Expiry is required\"),\n }),\n onSubmit: async (values, helpers) => {\n if (values.expiryOption === \"custom\" && !customDate) {\n helpers.setFieldError(\"expiryOption\", \"Please select a custom expiry date\");\n return;\n }\n\n const expiresAt = resolveExpiresAt(values.expiryOption, customDate);\n\n try {\n const body = { name: values.name.trim(), ...(expiresAt ? { expiresAt } : {}) };\n const response = await generateApiKeyForUser({ userId: userId!, body }).unwrap();\n\n onCreated(response.data.apiKey, values.name.trim(), response.data.record);\n handleClose();\n } catch (err: any) {\n const detail = err?.data?.message || \"Failed to generate API key. Please try again.\";\n dispatch(showToast({ severity: \"error\", summary: \"Error\", detail }));\n }\n },\n });\n\n const handleClose = () => {\n formik.resetForm();\n setCustomDate(null);\n onClose();\n };\n\n // Reset form when modal opens\n useEffect(() => {\n if (open) {\n formik.resetForm();\n setCustomDate(null);\n }\n }, [open]);\n\n const nameError =\n formik.touched.name && formik.errors.name ? String(formik.errors.name) : \"\";\n const expiryError =\n formik.touched.expiryOption && formik.errors.expiryOption\n ? String(formik.errors.expiryOption)\n : \"\";\n\n return (\n <SolidDialog open={open} onOpenChange={handleClose} style={{ maxWidth: 480 }} className=\"solid-api-key-dialog\">\n <SolidDialogHeader className=\"solid-api-key-dialog-header\">\n <SolidDialogTitle>Generate API Key</SolidDialogTitle>\n <SolidDialogDescription>\n Create a named key for this user. The raw key will be shown only once after generation.\n </SolidDialogDescription>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody className=\"solid-api-key-dialog-body\">\n <form id=\"generate-api-key-form\" onSubmit={formik.handleSubmit}>\n <div className=\"solid-api-key-dialog-fields\">\n <div className=\"solid-api-key-dialog-field\">\n <label htmlFor=\"api-key-name\" className=\"form-field-label\">\n Key Name <span style={{ color: \"var(--solid-danger-color, #ef4444)\" }}>*</span>\n </label>\n <SolidInput\n id=\"api-key-name\"\n name=\"name\"\n autoComplete=\"off\"\n placeholder=\"e.g. CI/CD pipeline, Mobile app\"\n value={formik.values.name}\n onChange={formik.handleChange}\n onBlur={formik.handleBlur}\n />\n {nameError && <SolidMessage severity=\"error\" text={nameError} />}\n </div>\n\n <div className=\"solid-api-key-dialog-field\">\n <label htmlFor=\"api-key-expiry\" className=\"form-field-label\">\n Expires\n </label>\n <SolidSelect\n value={formik.values.expiryOption}\n options={EXPIRY_OPTIONS}\n optionLabel=\"label\"\n optionValue=\"value\"\n onChange={({ value }) => {\n formik.setFieldValue(\"expiryOption\", value);\n if (value !== \"custom\") setCustomDate(null);\n }}\n />\n {formik.values.expiryOption === \"custom\" && (\n <SolidDatePicker\n selected={customDate}\n onChange={(date: Date | null) => setCustomDate(date)}\n minDate={new Date()}\n placeholderText=\"Select expiry date\"\n dateFormat=\"dd/MM/yyyy\"\n />\n )}\n {formik.values.expiryOption !== \"custom\" ? (\n <p className=\"solid-api-key-dialog-hint m-0\">Choose how long this key should remain valid.</p>\n ) : null}\n {expiryError && <SolidMessage severity=\"error\" text={expiryError} />}\n </div>\n </div>\n </form>\n </SolidDialogBody>\n <SolidDialogSeparator />\n <SolidDialogFooter className=\"solid-api-key-dialog-footer\">\n <SolidButton variant=\"outline\" type=\"button\" onClick={handleClose} disabled={isLoading}>\n Cancel\n </SolidButton>\n <SolidButton type=\"submit\" form=\"generate-api-key-form\" loading={isLoading}>\n Generate Key\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n );\n}\n"]}
@@ -7,6 +7,7 @@ import {
7
7
  SolidDatePicker,
8
8
  SolidDialog,
9
9
  SolidDialogBody,
10
+ SolidDialogDescription,
10
11
  SolidDialogFooter,
11
12
  SolidDialogHeader,
12
13
  SolidDialogSeparator,
@@ -16,7 +17,7 @@ import {
16
17
  SolidSelect,
17
18
  } from "../../../shad-cn-ui";
18
19
  import { showToast } from "../../../../redux/features/toastSlice";
19
- import { useGenerateApiKeyForUserMutation } from "../../../../redux/api/apiKeyApi";
20
+ import { type ApiKeyRecord, useGenerateApiKeyForUserMutation } from "../../../../redux/api/apiKeyApi";
20
21
 
21
22
  const EXPIRY_OPTIONS = [
22
23
  { label: "30 days", value: "30d" },
@@ -52,7 +53,7 @@ function resolveExpiresAt(expiryOption: string, customDate: Date | null): string
52
53
  interface GenerateApiKeyModalProps {
53
54
  open: boolean;
54
55
  onClose: () => void;
55
- onCreated: (rawApiKey: string, keyName: string) => void;
56
+ onCreated: (rawApiKey: string, keyName: string, record: ApiKeyRecord) => void;
56
57
  userId?: number;
57
58
  }
58
59
 
@@ -86,7 +87,7 @@ export function GenerateApiKeyModal({ open, onClose, onCreated, userId }: Genera
86
87
  const body = { name: values.name.trim(), ...(expiresAt ? { expiresAt } : {}) };
87
88
  const response = await generateApiKeyForUser({ userId: userId!, body }).unwrap();
88
89
 
89
- onCreated(response.data.apiKey, values.name.trim());
90
+ onCreated(response.data.apiKey, values.name.trim(), response.data.record);
90
91
  handleClose();
91
92
  } catch (err: any) {
92
93
  const detail = err?.data?.message || "Failed to generate API key. Please try again.";
@@ -117,15 +118,18 @@ export function GenerateApiKeyModal({ open, onClose, onCreated, userId }: Genera
117
118
  : "";
118
119
 
119
120
  return (
120
- <SolidDialog open={open} onOpenChange={handleClose} style={{ maxWidth: 480 }}>
121
- <SolidDialogHeader>
121
+ <SolidDialog open={open} onOpenChange={handleClose} style={{ maxWidth: 480 }} className="solid-api-key-dialog">
122
+ <SolidDialogHeader className="solid-api-key-dialog-header">
122
123
  <SolidDialogTitle>Generate API Key</SolidDialogTitle>
124
+ <SolidDialogDescription>
125
+ Create a named key for this user. The raw key will be shown only once after generation.
126
+ </SolidDialogDescription>
123
127
  </SolidDialogHeader>
124
128
  <SolidDialogSeparator />
125
- <SolidDialogBody>
129
+ <SolidDialogBody className="solid-api-key-dialog-body">
126
130
  <form id="generate-api-key-form" onSubmit={formik.handleSubmit}>
127
- <div className="flex flex-column gap-3">
128
- <div className="flex flex-column gap-2">
131
+ <div className="solid-api-key-dialog-fields">
132
+ <div className="solid-api-key-dialog-field">
129
133
  <label htmlFor="api-key-name" className="form-field-label">
130
134
  Key Name <span style={{ color: "var(--solid-danger-color, #ef4444)" }}>*</span>
131
135
  </label>
@@ -141,7 +145,7 @@ export function GenerateApiKeyModal({ open, onClose, onCreated, userId }: Genera
141
145
  {nameError && <SolidMessage severity="error" text={nameError} />}
142
146
  </div>
143
147
 
144
- <div className="flex flex-column gap-2">
148
+ <div className="solid-api-key-dialog-field">
145
149
  <label htmlFor="api-key-expiry" className="form-field-label">
146
150
  Expires
147
151
  </label>
@@ -164,13 +168,16 @@ export function GenerateApiKeyModal({ open, onClose, onCreated, userId }: Genera
164
168
  dateFormat="dd/MM/yyyy"
165
169
  />
166
170
  )}
171
+ {formik.values.expiryOption !== "custom" ? (
172
+ <p className="solid-api-key-dialog-hint m-0">Choose how long this key should remain valid.</p>
173
+ ) : null}
167
174
  {expiryError && <SolidMessage severity="error" text={expiryError} />}
168
175
  </div>
169
176
  </div>
170
177
  </form>
171
178
  </SolidDialogBody>
172
179
  <SolidDialogSeparator />
173
- <SolidDialogFooter>
180
+ <SolidDialogFooter className="solid-api-key-dialog-footer">
174
181
  <SolidButton variant="outline" type="button" onClick={handleClose} disabled={isLoading}>
175
182
  Cancel
176
183
  </SolidButton>
@@ -1 +1 @@
1
- {"version":3,"file":"RevealApiKeyModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx"],"names":[],"mappings":"AAYA,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CA2F3F"}
1
+ {"version":3,"file":"RevealApiKeyModal.d.ts","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx"],"names":[],"mappings":"AAaA,UAAU,sBAAsB;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,sBAAsB,2CAuE3F"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useState } from "react";
3
3
  import { AlertTriangle, CheckCircle, Copy } from "lucide-react";
4
- import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, } from "../../../shad-cn-ui";
4
+ import { SolidButton, SolidDialog, SolidDialogBody, SolidDialogDescription, SolidDialogFooter, SolidDialogHeader, SolidDialogSeparator, SolidDialogTitle, } from "../../../shad-cn-ui";
5
5
  export function RevealApiKeyModal(_a) {
6
6
  var open = _a.open, apiKey = _a.apiKey, keyName = _a.keyName, onClose = _a.onClose;
7
7
  var _b = useState(false), copied = _b[0], setCopied = _b[1];
@@ -15,23 +15,6 @@ export function RevealApiKeyModal(_a) {
15
15
  setCopied(false);
16
16
  onClose();
17
17
  };
18
- return (_jsxs(SolidDialog, { open: open, onOpenChange: handleClose, dismissible: false, style: { maxWidth: 520 }, children: [_jsx(SolidDialogHeader, { children: _jsx(SolidDialogTitle, { children: "API Key Created" }) }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogBody, { children: [_jsxs("div", { className: "solid-api-key-reveal-warning flex align-items-start gap-2 mb-4", children: [_jsx(AlertTriangle, { size: 16, className: "flex-shrink-0 mt-1" }), _jsxs("p", { className: "m-0", style: { fontSize: 13 }, children: [_jsx("strong", { children: "Copy this key now." }), " It will not be shown again once you close this dialog. Store it somewhere secure."] })] }), _jsx("p", { className: "form-field-label mb-2", children: keyName }), _jsxs("div", { className: "solid-api-key-reveal-box flex align-items-center gap-2 p-3", style: {
19
- background: "var(--solid-surface-secondary, #f5f5f5)",
20
- borderRadius: 6,
21
- border: "1px solid var(--solid-border-color, #e0e0e0)",
22
- }, children: [_jsx("code", { className: "flex-1", style: {
23
- fontFamily: "monospace",
24
- fontSize: 13,
25
- wordBreak: "break-all",
26
- userSelect: "all",
27
- }, children: apiKey }), _jsx("button", { type: "button", title: copied ? "Copied!" : "Copy to clipboard", onClick: handleCopy, style: {
28
- background: "none",
29
- border: "none",
30
- cursor: "pointer",
31
- padding: "4px",
32
- display: "flex",
33
- alignItems: "center",
34
- flexShrink: 0,
35
- }, children: copied ? (_jsx(CheckCircle, { size: 16, style: { color: "var(--solid-success-color, #22c55e)" } })) : (_jsx(Copy, { size: 16 })) })] }), copied && (_jsx("p", { className: "m-0 mt-2", style: { fontSize: 12, color: "var(--solid-success-color, #22c55e)" }, children: "Copied to clipboard!" }))] }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogFooter, { children: [_jsx(SolidButton, { variant: "outline", onClick: handleClose, children: "Close" }), _jsx(SolidButton, { onClick: handleClose, children: "I've Saved This Key" })] })] }));
18
+ return (_jsxs(SolidDialog, { open: open, onOpenChange: handleClose, dismissible: false, style: { maxWidth: 520 }, className: "solid-api-key-dialog solid-api-key-dialog--reveal", children: [_jsxs(SolidDialogHeader, { className: "solid-api-key-dialog-header", children: [_jsx(SolidDialogTitle, { children: "API Key Created" }), _jsx(SolidDialogDescription, { children: "Copy this key now and store it in a secure place before closing this dialog." })] }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogBody, { className: "solid-api-key-dialog-body", children: [_jsxs("div", { className: "solid-api-key-reveal-warning", children: [_jsx(AlertTriangle, { size: 16, className: "solid-api-key-reveal-warning-icon" }), _jsxs("p", { className: "m-0", children: [_jsx("strong", { children: "Shown only once." }), " After this dialog closes, the raw key cannot be retrieved again."] })] }), _jsx("p", { className: "form-field-label mb-2", children: keyName }), _jsxs("div", { className: "solid-api-key-reveal-box", children: [_jsx("code", { className: "solid-api-key-reveal-code", children: apiKey }), _jsx("button", { type: "button", title: copied ? "Copied!" : "Copy to clipboard", onClick: handleCopy, className: "solid-api-key-reveal-copy", children: copied ? (_jsx(CheckCircle, { size: 16, className: "solid-api-key-reveal-copy-success" })) : (_jsx(Copy, { size: 16 })) })] }), copied && (_jsx("p", { className: "solid-api-key-reveal-copied m-0 mt-2", children: "Copied to clipboard." }))] }), _jsx(SolidDialogSeparator, {}), _jsxs(SolidDialogFooter, { className: "solid-api-key-dialog-footer", children: [_jsx(SolidButton, { variant: "outline", onClick: handleClose, children: "Close" }), _jsx(SolidButton, { onClick: handleClose, children: "I've Saved This Key" })] })] }));
36
19
  }
37
20
  //# sourceMappingURL=RevealApiKeyModal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RevealApiKeyModal.js","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState } from \"react\";\nimport { AlertTriangle, CheckCircle, Copy } from \"lucide-react\";\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n} from \"../../../shad-cn-ui\";\n\ninterface RevealApiKeyModalProps {\n open: boolean;\n apiKey: string;\n keyName: string;\n onClose: () => void;\n}\n\nexport function RevealApiKeyModal({ open, apiKey, keyName, onClose }: RevealApiKeyModalProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(apiKey).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 3000);\n });\n };\n\n const handleClose = () => {\n setCopied(false);\n onClose();\n };\n\n return (\n <SolidDialog open={open} onOpenChange={handleClose} dismissible={false} style={{ maxWidth: 520 }}>\n <SolidDialogHeader>\n <SolidDialogTitle>API Key Created</SolidDialogTitle>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody>\n <div className=\"solid-api-key-reveal-warning flex align-items-start gap-2 mb-4\">\n <AlertTriangle size={16} className=\"flex-shrink-0 mt-1\" />\n <p className=\"m-0\" style={{ fontSize: 13 }}>\n <strong>Copy this key now.</strong> It will not be shown again once you close this dialog. Store it somewhere secure.\n </p>\n </div>\n\n <p className=\"form-field-label mb-2\">\n {keyName}\n </p>\n\n <div\n className=\"solid-api-key-reveal-box flex align-items-center gap-2 p-3\"\n style={{\n background: \"var(--solid-surface-secondary, #f5f5f5)\",\n borderRadius: 6,\n border: \"1px solid var(--solid-border-color, #e0e0e0)\",\n }}\n >\n <code\n className=\"flex-1\"\n style={{\n fontFamily: \"monospace\",\n fontSize: 13,\n wordBreak: \"break-all\",\n userSelect: \"all\",\n }}\n >\n {apiKey}\n </code>\n <button\n type=\"button\"\n title={copied ? \"Copied!\" : \"Copy to clipboard\"}\n onClick={handleCopy}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px\",\n display: \"flex\",\n alignItems: \"center\",\n flexShrink: 0,\n }}\n >\n {copied ? (\n <CheckCircle size={16} style={{ color: \"var(--solid-success-color, #22c55e)\" }} />\n ) : (\n <Copy size={16} />\n )}\n </button>\n </div>\n\n {copied && (\n <p className=\"m-0 mt-2\" style={{ fontSize: 12, color: \"var(--solid-success-color, #22c55e)\" }}>\n Copied to clipboard!\n </p>\n )}\n </SolidDialogBody>\n <SolidDialogSeparator />\n <SolidDialogFooter>\n <SolidButton variant=\"outline\" onClick={handleClose}>\n Close\n </SolidButton>\n <SolidButton onClick={handleClose}>\n I've Saved This Key\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n );\n}\n"]}
1
+ {"version":3,"file":"RevealApiKeyModal.js","sourceRoot":"","sources":["../../../../../src/components/core/users/ApiKeysTab/RevealApiKeyModal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,WAAW,EACX,WAAW,EACX,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAS7B,MAAM,UAAU,iBAAiB,CAAC,EAA0D;QAAxD,IAAI,UAAA,EAAE,MAAM,YAAA,EAAE,OAAO,aAAA,EAAE,OAAO,aAAA;IAC1D,IAAA,KAAsB,QAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,QAAA,EAAE,SAAS,QAAmB,CAAC;IAE5C,IAAM,UAAU,GAAG;QACjB,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,UAAU,CAAC,cAAM,OAAA,SAAS,CAAC,KAAK,CAAC,EAAhB,CAAgB,EAAE,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAM,WAAW,GAAG;QAClB,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,WAAW,IACV,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,WAAW,EACzB,WAAW,EAAE,KAAK,EAClB,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EACxB,SAAS,EAAC,mDAAmD,aAE7D,MAAC,iBAAiB,IAAC,SAAS,EAAC,6BAA6B,aACxD,KAAC,gBAAgB,kCAAmC,EACpD,KAAC,sBAAsB,+FAEE,IACP,EACpB,KAAC,oBAAoB,KAAG,EACxB,MAAC,eAAe,IAAC,SAAS,EAAC,2BAA2B,aACpD,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,aAAa,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,mCAAmC,GAAG,EACzE,aAAG,SAAS,EAAC,KAAK,aAChB,gDAAiC,yEAC/B,IACA,EAEN,YAAG,SAAS,EAAC,uBAAuB,YAAE,OAAO,GAAK,EAElD,eAAK,SAAS,EAAC,0BAA0B,aACvC,eAAM,SAAS,EAAC,2BAA2B,YAAE,MAAM,GAAQ,EAC3D,iBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,mBAAmB,EAC/C,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,2BAA2B,YAEpC,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,mCAAmC,GAAG,CACxE,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,GAAI,CACnB,GACM,IACL,EAEL,MAAM,IAAI,CACT,YAAG,SAAS,EAAC,sCAAsC,qCAAyB,CAC7E,IACe,EAClB,KAAC,oBAAoB,KAAG,EACxB,MAAC,iBAAiB,IAAC,SAAS,EAAC,6BAA6B,aACxD,KAAC,WAAW,IAAC,OAAO,EAAC,SAAS,EAAC,OAAO,EAAE,WAAW,sBAErC,EACd,KAAC,WAAW,IAAC,OAAO,EAAE,WAAW,oCAEnB,IACI,IACR,CACf,CAAC;AACJ,CAAC","sourcesContent":["import { useState } from \"react\";\nimport { AlertTriangle, CheckCircle, Copy } from \"lucide-react\";\nimport {\n SolidButton,\n SolidDialog,\n SolidDialogBody,\n SolidDialogDescription,\n SolidDialogFooter,\n SolidDialogHeader,\n SolidDialogSeparator,\n SolidDialogTitle,\n} from \"../../../shad-cn-ui\";\n\ninterface RevealApiKeyModalProps {\n open: boolean;\n apiKey: string;\n keyName: string;\n onClose: () => void;\n}\n\nexport function RevealApiKeyModal({ open, apiKey, keyName, onClose }: RevealApiKeyModalProps) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(apiKey).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 3000);\n });\n };\n\n const handleClose = () => {\n setCopied(false);\n onClose();\n };\n\n return (\n <SolidDialog\n open={open}\n onOpenChange={handleClose}\n dismissible={false}\n style={{ maxWidth: 520 }}\n className=\"solid-api-key-dialog solid-api-key-dialog--reveal\"\n >\n <SolidDialogHeader className=\"solid-api-key-dialog-header\">\n <SolidDialogTitle>API Key Created</SolidDialogTitle>\n <SolidDialogDescription>\n Copy this key now and store it in a secure place before closing this dialog.\n </SolidDialogDescription>\n </SolidDialogHeader>\n <SolidDialogSeparator />\n <SolidDialogBody className=\"solid-api-key-dialog-body\">\n <div className=\"solid-api-key-reveal-warning\">\n <AlertTriangle size={16} className=\"solid-api-key-reveal-warning-icon\" />\n <p className=\"m-0\">\n <strong>Shown only once.</strong> After this dialog closes, the raw key cannot be retrieved again.\n </p>\n </div>\n\n <p className=\"form-field-label mb-2\">{keyName}</p>\n\n <div className=\"solid-api-key-reveal-box\">\n <code className=\"solid-api-key-reveal-code\">{apiKey}</code>\n <button\n type=\"button\"\n title={copied ? \"Copied!\" : \"Copy to clipboard\"}\n onClick={handleCopy}\n className=\"solid-api-key-reveal-copy\"\n >\n {copied ? (\n <CheckCircle size={16} className=\"solid-api-key-reveal-copy-success\" />\n ) : (\n <Copy size={16} />\n )}\n </button>\n </div>\n\n {copied && (\n <p className=\"solid-api-key-reveal-copied m-0 mt-2\">Copied to clipboard.</p>\n )}\n </SolidDialogBody>\n <SolidDialogSeparator />\n <SolidDialogFooter className=\"solid-api-key-dialog-footer\">\n <SolidButton variant=\"outline\" onClick={handleClose}>\n Close\n </SolidButton>\n <SolidButton onClick={handleClose}>\n I've Saved This Key\n </SolidButton>\n </SolidDialogFooter>\n </SolidDialog>\n );\n}\n"]}
@@ -4,6 +4,7 @@ import {
4
4
  SolidButton,
5
5
  SolidDialog,
6
6
  SolidDialogBody,
7
+ SolidDialogDescription,
7
8
  SolidDialogFooter,
8
9
  SolidDialogHeader,
9
10
  SolidDialogSeparator,
@@ -33,58 +34,40 @@ export function RevealApiKeyModal({ open, apiKey, keyName, onClose }: RevealApiK
33
34
  };
34
35
 
35
36
  return (
36
- <SolidDialog open={open} onOpenChange={handleClose} dismissible={false} style={{ maxWidth: 520 }}>
37
- <SolidDialogHeader>
37
+ <SolidDialog
38
+ open={open}
39
+ onOpenChange={handleClose}
40
+ dismissible={false}
41
+ style={{ maxWidth: 520 }}
42
+ className="solid-api-key-dialog solid-api-key-dialog--reveal"
43
+ >
44
+ <SolidDialogHeader className="solid-api-key-dialog-header">
38
45
  <SolidDialogTitle>API Key Created</SolidDialogTitle>
46
+ <SolidDialogDescription>
47
+ Copy this key now and store it in a secure place before closing this dialog.
48
+ </SolidDialogDescription>
39
49
  </SolidDialogHeader>
40
50
  <SolidDialogSeparator />
41
- <SolidDialogBody>
42
- <div className="solid-api-key-reveal-warning flex align-items-start gap-2 mb-4">
43
- <AlertTriangle size={16} className="flex-shrink-0 mt-1" />
44
- <p className="m-0" style={{ fontSize: 13 }}>
45
- <strong>Copy this key now.</strong> It will not be shown again once you close this dialog. Store it somewhere secure.
51
+ <SolidDialogBody className="solid-api-key-dialog-body">
52
+ <div className="solid-api-key-reveal-warning">
53
+ <AlertTriangle size={16} className="solid-api-key-reveal-warning-icon" />
54
+ <p className="m-0">
55
+ <strong>Shown only once.</strong> After this dialog closes, the raw key cannot be retrieved again.
46
56
  </p>
47
57
  </div>
48
58
 
49
- <p className="form-field-label mb-2">
50
- {keyName}
51
- </p>
59
+ <p className="form-field-label mb-2">{keyName}</p>
52
60
 
53
- <div
54
- className="solid-api-key-reveal-box flex align-items-center gap-2 p-3"
55
- style={{
56
- background: "var(--solid-surface-secondary, #f5f5f5)",
57
- borderRadius: 6,
58
- border: "1px solid var(--solid-border-color, #e0e0e0)",
59
- }}
60
- >
61
- <code
62
- className="flex-1"
63
- style={{
64
- fontFamily: "monospace",
65
- fontSize: 13,
66
- wordBreak: "break-all",
67
- userSelect: "all",
68
- }}
69
- >
70
- {apiKey}
71
- </code>
61
+ <div className="solid-api-key-reveal-box">
62
+ <code className="solid-api-key-reveal-code">{apiKey}</code>
72
63
  <button
73
64
  type="button"
74
65
  title={copied ? "Copied!" : "Copy to clipboard"}
75
66
  onClick={handleCopy}
76
- style={{
77
- background: "none",
78
- border: "none",
79
- cursor: "pointer",
80
- padding: "4px",
81
- display: "flex",
82
- alignItems: "center",
83
- flexShrink: 0,
84
- }}
67
+ className="solid-api-key-reveal-copy"
85
68
  >
86
69
  {copied ? (
87
- <CheckCircle size={16} style={{ color: "var(--solid-success-color, #22c55e)" }} />
70
+ <CheckCircle size={16} className="solid-api-key-reveal-copy-success" />
88
71
  ) : (
89
72
  <Copy size={16} />
90
73
  )}
@@ -92,13 +75,11 @@ export function RevealApiKeyModal({ open, apiKey, keyName, onClose }: RevealApiK
92
75
  </div>
93
76
 
94
77
  {copied && (
95
- <p className="m-0 mt-2" style={{ fontSize: 12, color: "var(--solid-success-color, #22c55e)" }}>
96
- Copied to clipboard!
97
- </p>
78
+ <p className="solid-api-key-reveal-copied m-0 mt-2">Copied to clipboard.</p>
98
79
  )}
99
80
  </SolidDialogBody>
100
81
  <SolidDialogSeparator />
101
- <SolidDialogFooter>
82
+ <SolidDialogFooter className="solid-api-key-dialog-footer">
102
83
  <SolidButton variant="outline" onClick={handleClose}>
103
84
  Close
104
85
  </SolidButton>