@oneuptime/common 9.2.27 → 9.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. package/Models/DatabaseModels/AIAgent.ts +589 -0
  2. package/Models/DatabaseModels/AIAgentOwnerTeam.ts +434 -0
  3. package/Models/DatabaseModels/AIAgentOwnerUser.ts +433 -0
  4. package/Models/DatabaseModels/AIAgentTask.ts +549 -0
  5. package/Models/DatabaseModels/AIAgentTaskLog.ts +417 -0
  6. package/Models/DatabaseModels/AIAgentTaskPullRequest.ts +731 -0
  7. package/Models/DatabaseModels/AIAgentTaskTelemetryException.ts +388 -0
  8. package/Models/DatabaseModels/Index.ts +15 -0
  9. package/Models/DatabaseModels/Monitor.ts +33 -0
  10. package/Models/DatabaseModels/Project.ts +25 -0
  11. package/Models/DatabaseModels/TelemetryException.ts +1 -1
  12. package/Server/API/AIAgentAPI.ts +200 -0
  13. package/Server/API/AIAgentDataAPI.ts +692 -0
  14. package/Server/API/AIAgentTaskAPI.ts +286 -0
  15. package/Server/API/AIAgentTaskLogAPI.ts +165 -0
  16. package/Server/API/AIAgentTaskPullRequestAPI.ts +14 -0
  17. package/Server/API/GitHubAPI.ts +25 -7
  18. package/Server/API/TelemetryExceptionAPI.ts +169 -0
  19. package/Server/EnvironmentConfig.ts +3 -0
  20. package/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.ts +195 -0
  21. package/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.ts +31 -0
  22. package/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.ts +17 -0
  23. package/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.ts +63 -0
  24. package/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.ts +75 -0
  25. package/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.ts +157 -0
  26. package/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.ts +33 -0
  27. package/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.ts +27 -0
  28. package/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.ts +37 -0
  29. package/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.ts +31 -0
  30. package/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.ts +35 -0
  31. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +22 -0
  32. package/Server/Services/AIAgentOwnerTeamService.ts +10 -0
  33. package/Server/Services/AIAgentOwnerUserService.ts +10 -0
  34. package/Server/Services/AIAgentService.ts +564 -0
  35. package/Server/Services/AIAgentTaskLogService.ts +10 -0
  36. package/Server/Services/AIAgentTaskPullRequestService.ts +10 -0
  37. package/Server/Services/AIAgentTaskService.ts +178 -0
  38. package/Server/Services/AIAgentTaskTelemetryExceptionService.ts +39 -0
  39. package/Server/Services/Index.ts +10 -0
  40. package/Server/Services/TelemetryExceptionService.ts +162 -0
  41. package/Server/Utils/Monitor/MonitorResource.ts +228 -0
  42. package/Server/Utils/PushNotificationUtil.ts +29 -0
  43. package/Server/Utils/WhatsAppTemplateUtil.ts +6 -0
  44. package/Tests/UI/Components/Badge.test.tsx +5 -5
  45. package/Tests/UI/Components/Card.test.tsx +4 -8
  46. package/Tests/UI/Components/HiddenText.test.tsx +2 -5
  47. package/Tests/UI/Components/SideMenuItem.test.tsx +4 -2
  48. package/Types/AI/AIAgentTaskMetadata.ts +25 -0
  49. package/Types/AI/AIAgentTaskStatus.ts +65 -0
  50. package/Types/AI/AIAgentTaskType.ts +40 -0
  51. package/Types/Email/EmailTemplateType.ts +2 -0
  52. package/Types/Monitor/MonitorEvaluationSummary.ts +2 -1
  53. package/Types/NotificationSetting/NotificationSettingEventType.ts +4 -0
  54. package/Types/Permission.ts +176 -0
  55. package/Types/WhatsApp/WhatsAppTemplates.ts +9 -0
  56. package/UI/Components/AIAgent/AIAgent.tsx +69 -0
  57. package/UI/Components/Badge/Badge.tsx +9 -5
  58. package/UI/Components/Banner/Banner.tsx +1 -1
  59. package/UI/Components/Card/Card.tsx +14 -12
  60. package/UI/Components/CodeBlock/CodeBlock.tsx +47 -4
  61. package/UI/Components/Detail/Detail.tsx +239 -49
  62. package/UI/Components/Detail/FieldLabel.tsx +35 -11
  63. package/UI/Components/Detail/PlaceholderText.tsx +18 -1
  64. package/UI/Components/Footer/Footer.tsx +9 -7
  65. package/UI/Components/Header/Header.tsx +4 -3
  66. package/UI/Components/Header/HeaderIconDropdownButton.tsx +13 -11
  67. package/UI/Components/Header/IconDropdown/IconDropdownItem.tsx +3 -3
  68. package/UI/Components/Header/IconDropdown/IconDropdownMenu.tsx +1 -1
  69. package/UI/Components/Header/ProjectPicker/CreateNewProjectButton.tsx +4 -4
  70. package/UI/Components/Header/ProjectPicker/ProjectPicker.tsx +6 -6
  71. package/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.tsx +3 -3
  72. package/UI/Components/Header/ProjectPicker/ProjectPickerMenu.tsx +1 -1
  73. package/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.tsx +4 -4
  74. package/UI/Components/HeaderAlert/HeaderAlert.tsx +32 -32
  75. package/UI/Components/HeaderAlert/HeaderAlertGroup.tsx +1 -7
  76. package/UI/Components/HiddenText/HiddenText.tsx +98 -27
  77. package/UI/Components/Icon/Icon.tsx +12 -9
  78. package/UI/Components/InfoCard/InfoCard.tsx +7 -3
  79. package/UI/Components/ModelTable/BaseModelTable.tsx +1 -1
  80. package/UI/Components/ObjectID/ObjectIDView.tsx +73 -0
  81. package/UI/Components/Page/Page.tsx +3 -5
  82. package/UI/Components/SideMenu/SideMenu.tsx +175 -40
  83. package/UI/Components/SideMenu/SideMenuDivider.tsx +17 -0
  84. package/UI/Components/SideMenu/SideMenuItem.tsx +111 -158
  85. package/UI/Components/SideMenu/SideMenuSection.tsx +53 -3
  86. package/UI/Components/Table/Table.tsx +1 -1
  87. package/UI/Components/Types/FieldType.ts +2 -0
  88. package/UI/Config.ts +5 -0
  89. package/build/dist/Models/DatabaseModels/AIAgent.js +614 -0
  90. package/build/dist/Models/DatabaseModels/AIAgent.js.map +1 -0
  91. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js +452 -0
  92. package/build/dist/Models/DatabaseModels/AIAgentOwnerTeam.js.map +1 -0
  93. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js +451 -0
  94. package/build/dist/Models/DatabaseModels/AIAgentOwnerUser.js.map +1 -0
  95. package/build/dist/Models/DatabaseModels/AIAgentTask.js +580 -0
  96. package/build/dist/Models/DatabaseModels/AIAgentTask.js.map +1 -0
  97. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js +438 -0
  98. package/build/dist/Models/DatabaseModels/AIAgentTaskLog.js.map +1 -0
  99. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js +771 -0
  100. package/build/dist/Models/DatabaseModels/AIAgentTaskPullRequest.js.map +1 -0
  101. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js +404 -0
  102. package/build/dist/Models/DatabaseModels/AIAgentTaskTelemetryException.js.map +1 -0
  103. package/build/dist/Models/DatabaseModels/Index.js +14 -0
  104. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  105. package/build/dist/Models/DatabaseModels/Monitor.js +34 -0
  106. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  107. package/build/dist/Models/DatabaseModels/Project.js +26 -0
  108. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  109. package/build/dist/Models/DatabaseModels/TelemetryException.js +1 -1
  110. package/build/dist/Models/DatabaseModels/TelemetryException.js.map +1 -1
  111. package/build/dist/Server/API/AIAgentAPI.js +141 -0
  112. package/build/dist/Server/API/AIAgentAPI.js.map +1 -0
  113. package/build/dist/Server/API/AIAgentDataAPI.js +415 -0
  114. package/build/dist/Server/API/AIAgentDataAPI.js.map +1 -0
  115. package/build/dist/Server/API/AIAgentTaskAPI.js +199 -0
  116. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -0
  117. package/build/dist/Server/API/AIAgentTaskLogAPI.js +106 -0
  118. package/build/dist/Server/API/AIAgentTaskLogAPI.js.map +1 -0
  119. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js +9 -0
  120. package/build/dist/Server/API/AIAgentTaskPullRequestAPI.js.map +1 -0
  121. package/build/dist/Server/API/GitHubAPI.js +23 -8
  122. package/build/dist/Server/API/GitHubAPI.js.map +1 -1
  123. package/build/dist/Server/API/TelemetryExceptionAPI.js +120 -0
  124. package/build/dist/Server/API/TelemetryExceptionAPI.js.map +1 -0
  125. package/build/dist/Server/EnvironmentConfig.js +2 -0
  126. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  127. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js +74 -0
  128. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766590916627-MigrationName.js.map +1 -0
  129. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js +18 -0
  130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766600860972-MigrationName.js.map +1 -0
  131. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js +12 -0
  132. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766606720183-MigrationName.js.map +1 -0
  133. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js +28 -0
  134. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766688107858-MigrationName.js.map +1 -0
  135. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js +32 -0
  136. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766754182870-MigrationName.js.map +1 -0
  137. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js +60 -0
  138. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766774689743-MigrationName.js.map +1 -0
  139. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js +18 -0
  140. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766777986427-MigrationName.js.map +1 -0
  141. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js +16 -0
  142. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766918848434-AddAIAgentIsDefault.js.map +1 -0
  143. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js +20 -0
  144. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766923324521-MigrationName.js.map +1 -0
  145. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js +16 -0
  146. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1766958924188-AddGitHubAppInstallationIdToProject.js.map +1 -0
  147. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js +18 -0
  148. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1767009661768-MigrationName.js.map +1 -0
  149. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +22 -0
  150. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  151. package/build/dist/Server/Services/AIAgentOwnerTeamService.js +9 -0
  152. package/build/dist/Server/Services/AIAgentOwnerTeamService.js.map +1 -0
  153. package/build/dist/Server/Services/AIAgentOwnerUserService.js +9 -0
  154. package/build/dist/Server/Services/AIAgentOwnerUserService.js.map +1 -0
  155. package/build/dist/Server/Services/AIAgentService.js +471 -0
  156. package/build/dist/Server/Services/AIAgentService.js.map +1 -0
  157. package/build/dist/Server/Services/AIAgentTaskLogService.js +9 -0
  158. package/build/dist/Server/Services/AIAgentTaskLogService.js.map +1 -0
  159. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js +9 -0
  160. package/build/dist/Server/Services/AIAgentTaskPullRequestService.js.map +1 -0
  161. package/build/dist/Server/Services/AIAgentTaskService.js +158 -0
  162. package/build/dist/Server/Services/AIAgentTaskService.js.map +1 -0
  163. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js +36 -0
  164. package/build/dist/Server/Services/AIAgentTaskTelemetryExceptionService.js.map +1 -0
  165. package/build/dist/Server/Services/Index.js +10 -0
  166. package/build/dist/Server/Services/Index.js.map +1 -1
  167. package/build/dist/Server/Services/TelemetryExceptionService.js +137 -0
  168. package/build/dist/Server/Services/TelemetryExceptionService.js.map +1 -1
  169. package/build/dist/Server/Utils/Monitor/MonitorResource.js +168 -0
  170. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  171. package/build/dist/Server/Utils/PushNotificationUtil.js +21 -0
  172. package/build/dist/Server/Utils/PushNotificationUtil.js.map +1 -1
  173. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js +4 -0
  174. package/build/dist/Server/Utils/WhatsAppTemplateUtil.js.map +1 -1
  175. package/build/dist/Tests/UI/Components/Badge.test.js +5 -5
  176. package/build/dist/Tests/UI/Components/Badge.test.js.map +1 -1
  177. package/build/dist/Tests/UI/Components/Card.test.js +4 -8
  178. package/build/dist/Tests/UI/Components/Card.test.js.map +1 -1
  179. package/build/dist/Tests/UI/Components/HiddenText.test.js +2 -3
  180. package/build/dist/Tests/UI/Components/HiddenText.test.js.map +1 -1
  181. package/build/dist/Tests/UI/Components/SideMenuItem.test.js +3 -2
  182. package/build/dist/Tests/UI/Components/SideMenuItem.test.js.map +1 -1
  183. package/build/dist/Types/AI/AIAgentTaskMetadata.js +6 -0
  184. package/build/dist/Types/AI/AIAgentTaskMetadata.js.map +1 -0
  185. package/build/dist/Types/AI/AIAgentTaskStatus.js +51 -0
  186. package/build/dist/Types/AI/AIAgentTaskStatus.js.map +1 -0
  187. package/build/dist/Types/AI/AIAgentTaskType.js +29 -0
  188. package/build/dist/Types/AI/AIAgentTaskType.js.map +1 -0
  189. package/build/dist/Types/Email/EmailTemplateType.js +2 -0
  190. package/build/dist/Types/Email/EmailTemplateType.js.map +1 -1
  191. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js +3 -0
  192. package/build/dist/Types/NotificationSetting/NotificationSettingEventType.js.map +1 -1
  193. package/build/dist/Types/Permission.js +160 -0
  194. package/build/dist/Types/Permission.js.map +1 -1
  195. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js +6 -0
  196. package/build/dist/Types/WhatsApp/WhatsAppTemplates.js.map +1 -1
  197. package/build/dist/UI/Components/AIAgent/AIAgent.js +32 -0
  198. package/build/dist/UI/Components/AIAgent/AIAgent.js.map +1 -0
  199. package/build/dist/UI/Components/Badge/Badge.js +9 -5
  200. package/build/dist/UI/Components/Badge/Badge.js.map +1 -1
  201. package/build/dist/UI/Components/Banner/Banner.js +1 -1
  202. package/build/dist/UI/Components/Banner/Banner.js.map +1 -1
  203. package/build/dist/UI/Components/Card/Card.js +12 -12
  204. package/build/dist/UI/Components/Card/Card.js.map +1 -1
  205. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +22 -2
  206. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  207. package/build/dist/UI/Components/Detail/Detail.js +117 -37
  208. package/build/dist/UI/Components/Detail/Detail.js.map +1 -1
  209. package/build/dist/UI/Components/Detail/FieldLabel.js +12 -7
  210. package/build/dist/UI/Components/Detail/FieldLabel.js.map +1 -1
  211. package/build/dist/UI/Components/Detail/PlaceholderText.js +4 -1
  212. package/build/dist/UI/Components/Detail/PlaceholderText.js.map +1 -1
  213. package/build/dist/UI/Components/Footer/Footer.js +6 -6
  214. package/build/dist/UI/Components/Footer/Footer.js.map +1 -1
  215. package/build/dist/UI/Components/Header/Header.js +4 -3
  216. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  217. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +7 -7
  218. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  219. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js +3 -3
  220. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownItem.js.map +1 -1
  221. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js +1 -1
  222. package/build/dist/UI/Components/Header/IconDropdown/IconDropdownMenu.js.map +1 -1
  223. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js +4 -4
  224. package/build/dist/UI/Components/Header/ProjectPicker/CreateNewProjectButton.js.map +1 -1
  225. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js +6 -6
  226. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPicker.js.map +1 -1
  227. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js +2 -2
  228. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerFilterBox.js.map +1 -1
  229. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js +1 -1
  230. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenu.js.map +1 -1
  231. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js +4 -4
  232. package/build/dist/UI/Components/Header/ProjectPicker/ProjectPickerMenuItem.js.map +1 -1
  233. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js +31 -29
  234. package/build/dist/UI/Components/HeaderAlert/HeaderAlert.js.map +1 -1
  235. package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js +1 -3
  236. package/build/dist/UI/Components/HeaderAlert/HeaderAlertGroup.js.map +1 -1
  237. package/build/dist/UI/Components/HiddenText/HiddenText.js +33 -14
  238. package/build/dist/UI/Components/HiddenText/HiddenText.js.map +1 -1
  239. package/build/dist/UI/Components/Icon/Icon.js +3 -4
  240. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  241. package/build/dist/UI/Components/InfoCard/InfoCard.js +3 -3
  242. package/build/dist/UI/Components/InfoCard/InfoCard.js.map +1 -1
  243. package/build/dist/UI/Components/ModelTable/BaseModelTable.js +1 -1
  244. package/build/dist/UI/Components/ModelTable/BaseModelTable.js.map +1 -1
  245. package/build/dist/UI/Components/ObjectID/ObjectIDView.js +30 -0
  246. package/build/dist/UI/Components/ObjectID/ObjectIDView.js.map +1 -0
  247. package/build/dist/UI/Components/Page/Page.js +3 -3
  248. package/build/dist/UI/Components/Page/Page.js.map +1 -1
  249. package/build/dist/UI/Components/SideMenu/SideMenu.js +82 -17
  250. package/build/dist/UI/Components/SideMenu/SideMenu.js.map +1 -1
  251. package/build/dist/UI/Components/SideMenu/SideMenuDivider.js +7 -0
  252. package/build/dist/UI/Components/SideMenu/SideMenuDivider.js.map +1 -0
  253. package/build/dist/UI/Components/SideMenu/SideMenuItem.js +68 -97
  254. package/build/dist/UI/Components/SideMenu/SideMenuItem.js.map +1 -1
  255. package/build/dist/UI/Components/SideMenu/SideMenuSection.js +18 -3
  256. package/build/dist/UI/Components/SideMenu/SideMenuSection.js.map +1 -1
  257. package/build/dist/UI/Components/Table/Table.js +1 -1
  258. package/build/dist/UI/Components/Table/Table.js.map +1 -1
  259. package/build/dist/UI/Components/Types/FieldType.js +2 -0
  260. package/build/dist/UI/Components/Types/FieldType.js.map +1 -1
  261. package/build/dist/UI/Config.js +2 -0
  262. package/build/dist/UI/Config.js.map +1 -1
  263. package/package.json +1 -1
@@ -24,12 +24,14 @@ const Footer: FunctionComponent<ComponentProps> = (
24
24
  return (
25
25
  <React.Fragment>
26
26
  <footer
27
- className={props.className || "bg-white min-h-16"}
27
+ className={
28
+ props.className || "bg-gray-50/50 border-t border-gray-100 min-h-16"
29
+ }
28
30
  style={props.style}
29
31
  >
30
- <div className="mx-auto w-full py-5 px-6 md:flex md:items-center md:justify-between lg:px-0">
32
+ <div className="mx-auto w-full py-6 px-6 md:flex md:items-center md:justify-between lg:px-8">
31
33
  {/* Mobile: Stack links vertically, Desktop: Horizontal layout */}
32
- <div className="flex flex-col space-y-3 md:flex-row md:justify-center md:space-y-0 md:space-x-6 md:order-2">
34
+ <div className="flex flex-col space-y-3 md:flex-row md:justify-center md:items-center md:space-y-0 md:space-x-8 md:order-2">
33
35
  {props.links &&
34
36
  props.links.length > 0 &&
35
37
  props.links.map((link: FooterLink, i: number) => {
@@ -37,7 +39,7 @@ const Footer: FunctionComponent<ComponentProps> = (
37
39
  return (
38
40
  <div
39
41
  key={i}
40
- className="text-gray-400 hover:text-gray-500 text-center md:text-left"
42
+ className="text-gray-500 text-sm text-center md:text-left transition-colors duration-200"
41
43
  >
42
44
  {link.content}
43
45
  </div>
@@ -51,7 +53,7 @@ const Footer: FunctionComponent<ComponentProps> = (
51
53
  return (
52
54
  <UILink
53
55
  key={i}
54
- className="text-gray-400 hover:text-gray-500 text-center md:text-left"
56
+ className="text-gray-500 hover:text-gray-700 text-sm font-medium text-center md:text-left transition-colors duration-200"
55
57
  to={link.to}
56
58
  openInNewTab={link.openInNewTab}
57
59
  onClick={link.onClick}
@@ -62,9 +64,9 @@ const Footer: FunctionComponent<ComponentProps> = (
62
64
  })}
63
65
  </div>
64
66
  {/* Copyright: Show on mobile, hide on larger screens unless specified */}
65
- <div className="mt-4 md:order-1 md:mt-0 block md:hidden lg:block">
67
+ <div className="mt-5 md:order-1 md:mt-0 block md:hidden lg:block">
66
68
  {props.copyright && (
67
- <p className="text-center text-base text-gray-400">
69
+ <p className="text-center text-sm text-gray-400">
68
70
  &copy; {props.copyright}
69
71
  </p>
70
72
  )}
@@ -14,10 +14,11 @@ const Header: FunctionComponent<ComponentProps> = (
14
14
  <React.Fragment>
15
15
  <div
16
16
  className={
17
- props.className || "relative flex h-16 justify-between bg-white"
17
+ props.className ||
18
+ "relative flex h-16 justify-between bg-white shadow-sm px-4"
18
19
  }
19
20
  >
20
- <div className="relative z-20 flex px-2 lg:px-0">
21
+ <div className="relative z-20 flex items-center">
21
22
  {props.leftComponents}
22
23
  </div>
23
24
 
@@ -27,7 +28,7 @@ const Header: FunctionComponent<ComponentProps> = (
27
28
  </div>
28
29
  )}
29
30
 
30
- <div className="hidden lg:relative lg:z-10 lg:ml-4 lg:flex lg:items-center">
31
+ <div className="hidden lg:relative lg:z-10 lg:ml-4 lg:flex lg:items-center lg:gap-2">
31
32
  {props.rightComponents}
32
33
  </div>
33
34
  </div>
@@ -1,5 +1,5 @@
1
1
  import useComponentOutsideClick from "../../Types/UseComponentOutsideClick";
2
- import Icon, { SizeProp } from "../Icon/Icon";
2
+ import Icon from "../Icon/Icon";
3
3
  import Image from "../Image/Image";
4
4
  import Route from "../../../Types/API/Route";
5
5
  import IconProp from "../../../Types/Icon/IconProp";
@@ -38,11 +38,11 @@ const HeaderIconDropdownButton: FunctionComponent<ComponentProps> = (
38
38
  }, [props.showDropdown]);
39
39
 
40
40
  return (
41
- <div className="relative ml-4 flex-shrink-0">
41
+ <div className="relative ml-1 flex-shrink-0">
42
42
  <div>
43
43
  <button
44
44
  type="button"
45
- className="flex rounded-full bg-white focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2"
45
+ className="flex items-center justify-center h-9 w-9 rounded-lg bg-gray-50 border border-gray-200 hover:bg-gray-100 hover:border-gray-300 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-1 transition-all duration-150"
46
46
  id="user-menu-button"
47
47
  aria-expanded="false"
48
48
  aria-haspopup="true"
@@ -54,7 +54,7 @@ const HeaderIconDropdownButton: FunctionComponent<ComponentProps> = (
54
54
  <span className="sr-only">{props.name}</span>
55
55
  {props.iconImageUrl && (
56
56
  <Image
57
- className="h-8 w-8 rounded-full"
57
+ className="h-7 w-7 rounded-md object-cover"
58
58
  onClick={() => {
59
59
  props.onClick?.();
60
60
  }}
@@ -63,16 +63,18 @@ const HeaderIconDropdownButton: FunctionComponent<ComponentProps> = (
63
63
  />
64
64
  )}
65
65
  {props.icon && (
66
- <Icon
67
- className="text-gray-400 hover:text-indigo-500"
68
- icon={props.icon}
69
- size={SizeProp.Large}
70
- />
66
+ <Icon className="h-5 w-5 text-gray-500" icon={props.icon} />
71
67
  )}
72
68
  </button>
73
- {props.title}
69
+ {props.title && (
70
+ <span className="ml-2 text-sm font-medium text-gray-700">
71
+ {props.title}
72
+ </span>
73
+ )}
74
74
  {props.badge && props.badge > 0 && (
75
- <span className="badge bg-danger rounded-pill">{props.badge}</span>
75
+ <span className="absolute -top-1 -right-1 flex h-5 w-5 items-center justify-center rounded-full bg-red-500 text-xs font-semibold text-white ring-2 ring-white">
76
+ {props.badge}
77
+ </span>
76
78
  )}
77
79
  </div>
78
80
 
@@ -18,15 +18,15 @@ const IconDropdown: FunctionComponent<ComponentProps> = (
18
18
  ): ReactElement => {
19
19
  return (
20
20
  <Link
21
- className="block py-2 px-4 text-sm text-gray-700 flex hover:bg-gray-100"
21
+ className="flex items-center gap-3 py-2.5 px-4 text-sm text-gray-700 hover:bg-gray-50 hover:text-gray-900 transition-colors duration-150 mx-2 rounded-lg"
22
22
  to={props.url}
23
23
  openInNewTab={props.openInNewTab}
24
24
  onClick={props.onClick}
25
25
  >
26
- <div className="mr-1 h-5 w-5">
26
+ <div className="flex-shrink-0 h-5 w-5 text-gray-400">
27
27
  {props.icon ? <Icon icon={props.icon} /> : <></>}
28
28
  </div>
29
- <span className="">{props.title}</span>
29
+ <span className="font-medium">{props.title}</span>
30
30
  </Link>
31
31
  );
32
32
  };
@@ -9,7 +9,7 @@ const IconDropdown: FunctionComponent<ComponentProps> = (
9
9
  ): ReactElement => {
10
10
  return (
11
11
  <div
12
- className="absolute right-0 z-10 mt-2 w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none transform opacity-100 scale-100"
12
+ className="absolute right-0 z-10 mt-2 w-56 origin-top-right rounded-xl bg-white py-2 shadow-lg ring-1 ring-gray-200 focus:outline-none transform opacity-100 scale-100 animate-in fade-in slide-in-from-top-1 duration-150"
13
13
  role="menu"
14
14
  aria-orientation="vertical"
15
15
  aria-labelledby="user-menu-button"
@@ -11,19 +11,19 @@ const CreateNewProjectButton: FunctionComponent<ComponentProps> = (
11
11
  ): ReactElement => {
12
12
  return (
13
13
  <li
14
- className="text-gray-900 relative cursor-default select-none py-2 pl-3 pr-9 bg-gray-100 cursor-pointer hover:bg-gray-200 hover:text-gray-900 text-gray-500 -mb-1"
14
+ className="relative select-none py-2.5 px-3 mx-2 mt-2 cursor-pointer bg-indigo-50 hover:bg-indigo-100 rounded-lg transition-colors duration-150 border border-indigo-200"
15
15
  id="listbox-option-0"
16
16
  role="option"
17
17
  onClick={() => {
18
18
  props.onCreateButtonClicked();
19
19
  }}
20
20
  >
21
- <div className="flex items-center">
21
+ <div className="flex items-center gap-3">
22
22
  <Icon
23
23
  icon={IconProp.Add}
24
- className="h-6 w-6 flex-shrink-0 rounded-full"
24
+ className="h-5 w-5 flex-shrink-0 text-indigo-500"
25
25
  />
26
- <span className="cursor-pointer rounded-md py-2 px-3 inline-flex items-center text-sm font-medium block truncate">
26
+ <span className="text-sm font-medium text-indigo-600">
27
27
  Create New Project
28
28
  </span>
29
29
  </div>
@@ -36,14 +36,14 @@ const ProjectPicker: FunctionComponent<ComponentProps> = (
36
36
  }, [isComponentVisible]);
37
37
 
38
38
  return (
39
- <div className="w-64 mr-3">
40
- <div className="relative mt-3 w-full">
39
+ <div className="w-64">
40
+ <div className="relative w-full">
41
41
  <button
42
42
  onClick={() => {
43
43
  setIsComponentVisible(!isDropdownVisible);
44
44
  }}
45
45
  type="button"
46
- className="relative w-full cursor-default rounded-md border border-gray-300 bg-white py-2 pl-3 pr-10 text-left shadow-sm focus:border-indigo-500 focus:outline-none focus:ring-1 focus:ring-indigo-500 sm:text-sm"
46
+ className="relative w-full cursor-pointer rounded-lg border border-gray-200 bg-gray-50 py-2.5 pl-3 pr-10 text-left hover:bg-gray-100 hover:border-gray-300 focus:border-indigo-500 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-1 transition-all duration-150 sm:text-sm"
47
47
  aria-haspopup="listbox"
48
48
  aria-expanded="true"
49
49
  aria-labelledby="listbox-label"
@@ -51,17 +51,17 @@ const ProjectPicker: FunctionComponent<ComponentProps> = (
51
51
  <span className="flex items-center">
52
52
  <Icon
53
53
  icon={props.selectedProjectIcon}
54
- className="h-6 w-6 flex-shrink-0 rounded-full"
54
+ className="h-5 w-5 flex-shrink-0 text-gray-500"
55
55
  />
56
56
 
57
- <span className="ml-3 block truncate">
57
+ <span className="ml-2.5 block truncate font-medium text-gray-700">
58
58
  {props.selectedProjectName}
59
59
  </span>
60
60
  </span>
61
61
  <span className="pointer-events-none absolute inset-y-0 right-0 ml-3 flex items-center pr-2">
62
62
  <Icon
63
63
  icon={IconProp.UpDownArrow}
64
- className="h-5 w-5 text-gray-400"
64
+ className="h-4 w-4 text-gray-400"
65
65
  />
66
66
  </span>
67
67
  </button>
@@ -9,15 +9,15 @@ const ProjectPickerFilterBox: FunctionComponent<ComponentProps> = (
9
9
  props: ComponentProps,
10
10
  ): ReactElement => {
11
11
  return (
12
- <div className="sm:max-w-xs m-2">
12
+ <div className="px-2 pb-2 mb-1 border-b border-gray-100">
13
13
  <label className="sr-only">Search Projects</label>
14
14
  <div className="relative">
15
15
  <Input
16
16
  onChange={(value: string) => {
17
17
  props.onChange(value);
18
18
  }}
19
- className="block w-full rounded-md border border-gray-300 bg-white py-2 pl-5 pr-3 text-sm placeholder-gray-500 focus:border-indigo-500 focus:text-gray-900 focus:placeholder-gray-400 focus:outline-none focus:ring-1 focus:ring-indigo-500 sm:text-sm"
20
- placeholder="Search Projects"
19
+ className="block w-full rounded-lg border border-gray-200 bg-gray-50 py-2 pl-4 pr-3 text-sm placeholder-gray-400 focus:border-indigo-500 focus:bg-white focus:text-gray-900 focus:placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-1 transition-all duration-150 sm:text-sm"
20
+ placeholder="Search projects..."
21
21
  />
22
22
  </div>
23
23
  </div>
@@ -11,7 +11,7 @@ const ProjectPickerMenu: FunctionComponent<ComponentProps> = (
11
11
  ): ReactElement => {
12
12
  return (
13
13
  <ul
14
- className="absolute z-10 mt-1 max-h-56 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm"
14
+ className="absolute z-10 mt-2 max-h-72 w-full overflow-auto rounded-xl bg-white py-2 text-base shadow-lg ring-1 ring-gray-200 focus:outline-none sm:text-sm"
15
15
  role="listbox"
16
16
  aria-labelledby="listbox-label"
17
17
  aria-activedescendant="listbox-option-3"
@@ -19,7 +19,7 @@ const ProjectPickerMenuItem: FunctionComponent<ComponentProps> = (
19
19
 
20
20
  return (
21
21
  <li
22
- className="text-gray-900 relative cursor-default select-none py-2 pl-3 pr-9 cursor-pointer hover:bg-gray-50"
22
+ className="text-gray-700 relative select-none py-2.5 px-3 mx-2 cursor-pointer hover:bg-gray-50 rounded-lg transition-colors duration-150"
23
23
  id="listbox-option-0"
24
24
  role="option"
25
25
  onClick={() => {
@@ -27,12 +27,12 @@ const ProjectPickerMenuItem: FunctionComponent<ComponentProps> = (
27
27
  Navigation.navigate(route);
28
28
  }}
29
29
  >
30
- <div className="flex items-center">
30
+ <div className="flex items-center gap-3">
31
31
  <Icon
32
32
  icon={props.icon}
33
- className="h-6 w-6 flex-shrink-0 rounded-full"
33
+ className="h-5 w-5 flex-shrink-0 text-gray-400"
34
34
  />
35
- <span className="cursor-pointer text-gray-500 hover:bg-gray-50 hover:text-gray-900 rounded-md py-2 px-3 inline-flex items-center text-sm font-medium block truncate">
35
+ <span className="text-sm font-medium text-gray-700 truncate">
36
36
  {title}
37
37
  </span>
38
38
  </div>
@@ -26,69 +26,69 @@ export interface ComponentProps {
26
26
  const HeaderAlert: (props: ComponentProps) => ReactElement = (
27
27
  props: ComponentProps,
28
28
  ): ReactElement => {
29
- let textColor: string = "text-indigo-500"; // default color info.
29
+ let textColor: string = "text-indigo-600";
30
+ let bgColor: string = "bg-indigo-50";
31
+ let hoverBgColor: string = "hover:bg-indigo-100";
32
+ let borderColor: string = "border-indigo-200";
30
33
 
31
34
  switch (props.alertType) {
32
35
  case HeaderAlertType.SUCCESS:
33
- textColor = "text-emerald-500 hover:text-emerald-600";
36
+ textColor = "text-emerald-600";
37
+ bgColor = "bg-emerald-50";
38
+ hoverBgColor = "hover:bg-emerald-100";
39
+ borderColor = "border-emerald-200";
34
40
  break;
35
41
  case HeaderAlertType.ERROR:
36
- textColor = "text-red-500 hover:text-red-600";
42
+ textColor = "text-red-600";
43
+ bgColor = "bg-red-50";
44
+ hoverBgColor = "hover:bg-red-100";
45
+ borderColor = "border-red-200";
37
46
  break;
38
47
  case HeaderAlertType.WARNING:
39
- textColor = "text-yellow-500 hover:text-yellow-600";
48
+ textColor = "text-amber-600";
49
+ bgColor = "bg-amber-50";
50
+ hoverBgColor = "hover:bg-amber-100";
51
+ borderColor = "border-amber-200";
40
52
  break;
41
53
  case HeaderAlertType.INFO:
42
- textColor = "text-indigo-500 hover:text-indigo-600";
43
- break;
44
- }
45
-
46
- let bgColor: string = "bg-gray";
47
-
48
- switch (props.alertType) {
49
- case HeaderAlertType.SUCCESS:
50
- bgColor = "bg-emerald";
51
- break;
52
- case HeaderAlertType.ERROR:
53
- bgColor = "bg-red";
54
- break;
55
- case HeaderAlertType.WARNING:
56
- bgColor = "bg-yellow";
57
- break;
58
- case HeaderAlertType.INFO:
59
- bgColor = "bg-indigo";
54
+ textColor = "text-indigo-600";
55
+ bgColor = "bg-indigo-50";
56
+ hoverBgColor = "hover:bg-indigo-100";
57
+ borderColor = "border-indigo-200";
60
58
  break;
61
59
  }
62
60
 
63
61
  // color swatch overrides the color.
64
62
  if (props.colorSwatch) {
65
- textColor = `text-${props.colorSwatch}-500 hover:text-${props.colorSwatch}-600`;
66
- bgColor = `bg-${props.colorSwatch}`;
63
+ textColor = `text-${props.colorSwatch}-600`;
64
+ bgColor = `bg-${props.colorSwatch}-50`;
65
+ hoverBgColor = `hover:bg-${props.colorSwatch}-100`;
66
+ borderColor = `border-${props.colorSwatch}-200`;
67
67
  }
68
68
 
69
69
  const getElement: GetReactElementFunction = (): ReactElement => {
70
70
  return (
71
71
  <div
72
- className={`cursor-pointer ${bgColor}-50 hover:${bgColor}-200 mr-2 ml-2 p-1 h-7 pl-2 pr-2 rounded-full ${props.className}`}
72
+ className={`cursor-pointer ${bgColor} ${hoverBgColor} border ${borderColor} mx-1 py-1.5 px-3 rounded-lg transition-all duration-150 ${props.className}`}
73
73
  onClick={() => {
74
74
  props.onClick?.();
75
75
  }}
76
76
  >
77
- <div className="flex">
78
- <div className={`flex-shrink-0 mt-0.5 ${textColor}`}>
77
+ <div className="flex items-center gap-1.5">
78
+ <div className={`flex-shrink-0 ${textColor}`}>
79
79
  <Icon
80
80
  icon={props.icon}
81
81
  thick={ThickProp.Thick}
82
- className={`h-4 w-4 stroke-[3px] font-bold ${textColor}`}
82
+ className={`h-4 w-4 stroke-[2.5px] ${textColor}`}
83
83
  />
84
84
  </div>
85
- <div className="ml-1 flex-1 md:flex md:justify-between">
86
- <p className={`text-sm font-semibold ${textColor}`}>
85
+ <div className="flex items-center gap-1">
86
+ <span className={`text-sm font-semibold ${textColor}`}>
87
87
  {props.title}
88
- </p>
88
+ </span>
89
89
  {props.suffix && (
90
90
  <span
91
- className={`ml-1 ${textColor} text-sm font-semibold hidden md:block`}
91
+ className={`${textColor} text-sm font-medium opacity-80 hidden md:block`}
92
92
  >
93
93
  {props.suffix}
94
94
  </span>
@@ -26,20 +26,14 @@ const HeaderAlertGroup: (props: ComponentProps) => ReactElement = (
26
26
  return <></>;
27
27
  }
28
28
 
29
- // const className: string = "rounded-lg m-3 h-10 pr-0 pl-0 flex border-2 border-gray-200";
30
- const className: string = "rounded-lg m-3 mt-5 h-10 pr-0 pl-0 flex";
29
+ const className: string = "flex items-center gap-1 ml-4";
31
30
 
32
31
  return (
33
32
  <div className={className}>
34
33
  {children.map((child: ReactElement | false, index: number) => {
35
- // const isLastElement: boolean = index === props.children.length - 1;
36
-
37
34
  return (
38
35
  <div key={index} className="flex">
39
36
  {child}
40
- {/* {!isLastElement && (
41
- <div className="border-r-2 border-gray-200"></div>
42
- )} */}
43
37
  </div>
44
38
  );
45
39
  })}
@@ -1,5 +1,5 @@
1
- import CopyableButton from "../CopyableButton/CopyableButton";
2
- import Icon from "../Icon/Icon";
1
+ import Icon, { SizeProp, ThickProp } from "../Icon/Icon";
2
+ import Tooltip from "../Tooltip/Tooltip";
3
3
  import IconProp from "../../../Types/Icon/IconProp";
4
4
  import React, { FunctionComponent, ReactElement, useState } from "react";
5
5
 
@@ -12,44 +12,115 @@ const HiddenText: FunctionComponent<ComponentProps> = (
12
12
  props: ComponentProps,
13
13
  ): ReactElement => {
14
14
  const [showText, setShowText] = useState<boolean>(false);
15
+ const [copied, setCopied] = useState<boolean>(false);
16
+
17
+ const handleCopy: () => Promise<void> = async (): Promise<void> => {
18
+ await navigator.clipboard?.writeText(props.text);
19
+ setCopied(true);
20
+ setTimeout(() => {
21
+ setCopied(false);
22
+ }, 2000);
23
+ };
15
24
 
16
25
  if (!showText) {
17
26
  return (
18
- <p
27
+ <div
19
28
  role="hidden-text"
20
- className="cursor-pointer underline"
29
+ className="inline-flex items-center gap-2 px-3 py-1.5 rounded-md cursor-pointer transition-all duration-200 bg-gray-50 border border-gray-200 hover:bg-gray-100 hover:border-gray-300 group"
21
30
  onClick={() => {
22
31
  setShowText(true);
23
32
  }}
24
33
  >
25
- Click here to reveal
26
- </p>
34
+ <Icon
35
+ icon={IconProp.Lock}
36
+ size={SizeProp.Small}
37
+ thick={ThickProp.Thick}
38
+ className="h-3.5 w-3.5 text-gray-400 group-hover:text-gray-500"
39
+ />
40
+ <span className="text-sm text-gray-500 group-hover:text-gray-600">
41
+ Click to reveal
42
+ </span>
43
+ <Icon
44
+ icon={IconProp.ChevronRight}
45
+ size={SizeProp.Small}
46
+ thick={ThickProp.Thick}
47
+ className="h-3 w-3 text-gray-400 group-hover:text-gray-500 transition-transform duration-200 group-hover:translate-x-0.5"
48
+ />
49
+ </div>
27
50
  );
28
51
  }
29
52
 
30
53
  return (
31
- <div className="flex">
32
- <div className="flex">
33
- <div
34
- style={{
35
- marginRight: "5px",
36
- }}
37
- role="revealed-text"
38
- >
39
- {props.text}
40
- </div>{" "}
41
- <Icon
42
- icon={IconProp.Hide}
43
- className="cursor-pointer text-gray-400 h-4 w-4"
44
- data-testid="hide-text-icon"
45
- onClick={() => {
46
- setShowText(false);
47
- }}
48
- />
54
+ <div
55
+ className={`inline-flex items-center gap-2 px-3 py-1.5 rounded-md transition-all duration-200 ${
56
+ copied
57
+ ? "bg-green-50 border border-green-200"
58
+ : "bg-amber-50 border border-amber-200"
59
+ }`}
60
+ >
61
+ <Icon
62
+ icon={IconProp.Lock}
63
+ size={SizeProp.Small}
64
+ thick={ThickProp.Thick}
65
+ className={`h-3.5 w-3.5 flex-shrink-0 ${copied ? "text-green-500" : "text-amber-500"}`}
66
+ />
67
+ <code
68
+ role="revealed-text"
69
+ className={`font-mono text-sm break-all ${copied ? "text-green-700" : "text-amber-800"}`}
70
+ >
71
+ {props.text}
72
+ </code>
73
+ <div className="flex items-center gap-1 ml-1 flex-shrink-0">
74
+ {props.isCopyable && (
75
+ <Tooltip text={copied ? "Copied!" : "Copy"}>
76
+ <div
77
+ className={`p-1 rounded cursor-pointer transition-all duration-200 ${
78
+ copied
79
+ ? "text-green-500"
80
+ : "text-amber-400 hover:text-amber-600 hover:bg-amber-100"
81
+ }`}
82
+ data-testid="copy-to-clipboard-icon"
83
+ onClick={handleCopy}
84
+ >
85
+ {copied ? (
86
+ <Icon
87
+ icon={IconProp.CheckCircle}
88
+ size={SizeProp.Small}
89
+ thick={ThickProp.Thick}
90
+ className="h-3.5 w-3.5"
91
+ />
92
+ ) : (
93
+ <Icon
94
+ icon={IconProp.Copy}
95
+ size={SizeProp.Small}
96
+ thick={ThickProp.Thick}
97
+ className="h-3.5 w-3.5"
98
+ />
99
+ )}
100
+ </div>
101
+ </Tooltip>
102
+ )}
103
+ <Tooltip text="Hide">
104
+ <div
105
+ className={`p-1 rounded cursor-pointer transition-all duration-200 ${
106
+ copied
107
+ ? "text-green-400 hover:text-green-600 hover:bg-green-100"
108
+ : "text-amber-400 hover:text-amber-600 hover:bg-amber-100"
109
+ }`}
110
+ data-testid="hide-text-icon"
111
+ onClick={() => {
112
+ setShowText(false);
113
+ }}
114
+ >
115
+ <Icon
116
+ icon={IconProp.Hide}
117
+ size={SizeProp.Small}
118
+ thick={ThickProp.Thick}
119
+ className="h-3.5 w-3.5"
120
+ />
121
+ </div>
122
+ </Tooltip>
49
123
  </div>
50
- {props.isCopyable && showText && (
51
- <CopyableButton textToBeCopied={props.text} />
52
- )}
53
124
  </div>
54
125
  );
55
126
  };
@@ -1044,15 +1044,18 @@ const Icon: FunctionComponent<ComponentProps> = ({
1044
1044
  );
1045
1045
  } else if (icon === IconProp.WhatsApp) {
1046
1046
  return getSvgWrapper(
1047
- <path
1048
- strokeLinecap="round"
1049
- strokeLinejoin="round"
1050
- d="M26.576 5.363c-2.69-2.69-6.406-4.354-10.511-4.354-8.209 0-14.865 6.655-14.865 14.865 0 2.732 0.737 5.291 2.022 7.491l-0.038-0.070-2.109 7.702 7.879-2.067c2.051 1.139 4.498 1.809 7.102 1.809h0.006c8.209-0.003 14.862-6.659 14.862-14.868 0-4.103-1.662-7.817-4.349-10.507l0 0zM16.062 28.228h-0.005c-0 0-0.001 0-0.001 0-2.319 0-4.489-0.64-6.342-1.753l0.056 0.031-0.451-0.267-4.675 1.227 1.247-4.559-0.294-0.467c-1.185-1.862-1.889-4.131-1.889-6.565 0-6.822 5.531-12.353 12.353-12.353s12.353 5.531 12.353 12.353c0 6.822-5.53 12.353-12.353 12.353h-0zM22.838 18.977c-0.371-0.186-2.197-1.083-2.537-1.208-0.341-0.124-0.589-0.185-0.837 0.187-0.246 0.371-0.958 1.207-1.175 1.455-0.216 0.249-0.434 0.279-0.805 0.094-1.15-0.466-2.138-1.087-2.997-1.852l0.010 0.009c-0.799-0.74-1.484-1.587-2.037-2.521l-0.028-0.052c-0.216-0.371-0.023-0.572 0.162-0.757 0.167-0.166 0.372-0.434 0.557-0.65 0.146-0.179 0.271-0.384 0.366-0.604l0.006-0.017c0.043-0.087 0.068-0.188 0.068-0.296 0-0.131-0.037-0.253-0.101-0.357l0.002 0.003c-0.094-0.186-0.836-2.014-1.145-2.758-0.302-0.724-0.609-0.625-0.836-0.637-0.216-0.010-0.464-0.012-0.712-0.012-0.395 0.010-0.746 0.188-0.988 0.463l-0.001 0.002c-0.802 0.761-1.3 1.834-1.3 3.023 0 0.026 0 0.053 0.001 0.079l-0-0.004c0.131 1.467 0.681 2.784 1.527 3.857l-0.012-0.015c1.604 2.379 3.742 4.282 6.251 5.564l0.094 0.043c0.548 0.248 1.25 0.513 1.968 0.74l0.149 0.041c0.442 0.14 0.951 0.221 1.479 0.221 0.303 0 0.601-0.027 0.889-0.078l-0.031 0.004c1.069-0.223 1.956-0.868 2.497-1.749l0.009-0.017c0.165-0.366 0.261-0.793 0.261-1.242 0-0.185-0.016-0.366-0.047-0.542l0.003 0.019c-0.092-0.155-0.34-0.247-0.712-0.434z"
1051
- />,
1052
- {
1053
- viewBox: "0 0 32 32",
1054
- strokeWidth: "1.2",
1055
- },
1047
+ <>
1048
+ <path
1049
+ strokeLinecap="round"
1050
+ strokeLinejoin="round"
1051
+ d="M12 2C6.48 2 2 6.48 2 12c0 1.77.46 3.43 1.27 4.88L2 22l5.12-1.27C8.57 21.54 10.23 22 12 22c5.52 0 10-4.48 10-10S17.52 2 12 2z"
1052
+ />
1053
+ <path
1054
+ strokeLinecap="round"
1055
+ strokeLinejoin="round"
1056
+ d="M16.5 14.38c-.25-.13-1.47-.73-1.7-.81-.23-.08-.4-.13-.56.12-.16.25-.64.81-.79.98-.14.17-.29.19-.54.06-.25-.13-1.05-.39-2-1.23-.74-.66-1.24-1.47-1.38-1.72-.14-.25-.02-.38.11-.51.11-.11.25-.29.37-.43.12-.15.16-.25.25-.42.08-.17.04-.31-.02-.43-.06-.13-.56-1.35-.77-1.85-.2-.48-.41-.42-.56-.43-.14-.01-.31-.01-.48-.01-.17 0-.44.06-.67.31-.23.25-.87.85-.87 2.08 0 1.22.89 2.4 1.02 2.57.12.17 1.75 2.67 4.25 3.74.59.26 1.06.41 1.42.52.6.19 1.14.16 1.57.1.48-.07 1.47-.6 1.68-1.18.21-.58.21-1.08.14-1.18-.06-.1-.23-.16-.48-.29z"
1057
+ />
1058
+ </>,
1056
1059
  );
1057
1060
  } else if (icon === IconProp.Hide) {
1058
1061
  return getSvgWrapper(
@@ -12,11 +12,15 @@ const InfoCard: FunctionComponent<ComponentProps> = (
12
12
  props: ComponentProps,
13
13
  ): ReactElement => {
14
14
  return (
15
- <div className={`rounded-md bg-white shadow p-5 ${props.className || ""}`}>
16
- <div>
15
+ <div
16
+ className={`rounded-xl bg-white border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200 p-5 ${props.className || ""}`}
17
+ >
18
+ <div className="mb-2">
17
19
  <FieldLabelElement title={props.title} />
18
20
  </div>
19
- <div className={props.textClassName || ""}>{props.value}</div>
21
+ <div className={props.textClassName || "text-gray-900"}>
22
+ {props.value}
23
+ </div>
20
24
  </div>
21
25
  );
22
26
  };
@@ -1956,7 +1956,7 @@ const BaseModelTable: <TBaseModel extends BaseModel | AnalyticsBaseModel>(
1956
1956
 
1957
1957
  return (
1958
1958
  <>
1959
- <div className="mb-5 mt-5">{getCardComponent()}</div>
1959
+ <div className="">{getCardComponent()}</div>
1960
1960
 
1961
1961
  {showModel ? (
1962
1962
  props.callbacks.showCreateEditModal({