@oneuptime/common 11.3.28 → 11.4.1

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 (244) hide show
  1. package/Models/DatabaseModels/AIRun.ts +50 -0
  2. package/Models/DatabaseModels/Project.ts +60 -0
  3. package/Server/API/AIAgentTaskAPI.ts +10 -24
  4. package/Server/API/AIInvestigationAPI.ts +148 -0
  5. package/Server/API/TelemetryAPI.ts +4 -3
  6. package/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.ts +19 -0
  7. package/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.ts +33 -0
  8. package/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.ts +19 -0
  9. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +6 -0
  10. package/Server/Services/AIAgentTaskService.ts +62 -0
  11. package/Server/Services/AlertService.ts +25 -0
  12. package/Server/Services/AnalyticsDatabaseService.ts +27 -0
  13. package/Server/Services/IncidentService.ts +25 -0
  14. package/Server/Services/IncidentStateTimelineService.ts +19 -0
  15. package/Server/Services/LogAggregationService.ts +29 -11
  16. package/Server/Services/MetricService.ts +603 -13
  17. package/Server/Utils/AI/Chat/ObservabilityAssistant.ts +119 -11
  18. package/Server/Utils/AI/Sentinel/AlertInvestigationRunner.ts +141 -0
  19. package/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.ts +178 -0
  20. package/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.ts +105 -0
  21. package/Server/Utils/AI/Sentinel/README.md +10 -0
  22. package/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.ts +405 -0
  23. package/Server/Utils/AI/Sentinel/SentinelMemory.ts +167 -0
  24. package/Server/Utils/AI/Toolbox/Index.ts +11 -0
  25. package/Server/Utils/AI/Toolbox/SentinelActionTools.ts +577 -0
  26. package/Server/Utils/Monitor/Criteria/APIRequestCriteria.ts +44 -0
  27. package/Server/Utils/Monitor/MonitorMetricUtil.ts +108 -2
  28. package/Tests/Server/API/BaseAPI.test.ts +1 -0
  29. package/Tests/Server/Services/AIAgentTaskServiceClaim.test.ts +146 -0
  30. package/Tests/Server/Services/LogAggregationService.test.ts +22 -0
  31. package/Tests/Server/Services/MetricServiceAggregate.test.ts +194 -0
  32. package/Tests/Types/AI/AIAgentTaskStatus.test.ts +86 -0
  33. package/Tests/Types/BaseDatabase/AggregationIntervalUtil.test.ts +127 -0
  34. package/Tests/Types/BaseDatabase/DatabaseCommonInteractionPropsUtil.test.ts +152 -0
  35. package/Tests/Types/OnCallDutyPolicy/ScheduleShiftUtil.test.ts +260 -0
  36. package/Tests/Types/Trace/TraceRecordingRuleDefinition.test.ts +308 -0
  37. package/Tests/UI/Components/Dropdown.test.tsx +17 -0
  38. package/Tests/UI/Components/EntityDropdown.test.tsx +130 -0
  39. package/Tests/UI/Components/Modal.test.tsx +144 -2
  40. package/Tests/UI/Components/TelemetrySearchBar.test.tsx +90 -0
  41. package/Tests/UI/Utils/Theme.test.ts +161 -0
  42. package/Types/BaseDatabase/AggregateBy.ts +12 -0
  43. package/Types/Dashboard/DashboardComponentType.ts +1 -0
  44. package/Types/Dashboard/DashboardComponents/ComponentArgument.ts +1 -0
  45. package/Types/Dashboard/DashboardComponents/DashboardLogChartComponent.ts +19 -0
  46. package/Types/Dashboard/DashboardTemplates.ts +9 -1
  47. package/Types/Date.ts +46 -0
  48. package/Types/Monitor/CriteriaFilter.ts +4 -0
  49. package/Types/Monitor/HttpPhaseTimings.ts +16 -0
  50. package/Types/Monitor/MonitorMetricType.ts +17 -0
  51. package/Types/Monitor/PingMonitor/PingMonitorResponse.ts +20 -0
  52. package/Types/OnCallDutyPolicy/ScheduleShiftUtil.ts +257 -0
  53. package/Types/Probe/ProbeMonitorResponse.ts +14 -0
  54. package/UI/Components/Calendar/Calendar.tsx +8 -2
  55. package/UI/Components/Charts/ChartGroup/ChartGroup.tsx +5 -5
  56. package/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.tsx +8 -5
  57. package/UI/Components/Charts/ChartLibrary/BarChart/BarChart.tsx +4 -1
  58. package/UI/Components/Charts/ChartLibrary/LineChart/LineChart.tsx +6 -3
  59. package/UI/Components/CodeBlock/CodeBlock.tsx +2 -1
  60. package/UI/Components/CodeEditor/CodeEditor.tsx +3 -0
  61. package/UI/Components/Divider/Divider.tsx +1 -1
  62. package/UI/Components/Dropdown/Dropdown.tsx +13 -4
  63. package/UI/Components/EntityDropdown/EntityDropdown.tsx +110 -2
  64. package/UI/Components/ErrorBoundary.tsx +2 -1
  65. package/UI/Components/EventItem/EventItem.tsx +2 -2
  66. package/UI/Components/GanttChart/Bar/Index.tsx +1 -1
  67. package/UI/Components/Graphs/UptimeBarTooltip.tsx +30 -23
  68. package/UI/Components/Header/Header.tsx +7 -0
  69. package/UI/Components/Header/HeaderIconDropdownButton.tsx +2 -0
  70. package/UI/Components/Label/Label.tsx +2 -2
  71. package/UI/Components/LogsViewer/components/LogsAnalyticsView.tsx +22 -10
  72. package/UI/Components/LogsViewer/components/LogsHistogram.tsx +9 -3
  73. package/UI/Components/Markdown.tsx/MarkdownEditor.tsx +8 -8
  74. package/UI/Components/Markdown.tsx/MarkdownViewer.tsx +44 -20
  75. package/UI/Components/Modal/ConfirmModal.tsx +1 -1
  76. package/UI/Components/Modal/Modal.tsx +213 -121
  77. package/UI/Components/Modal/ModalFooter.tsx +33 -22
  78. package/UI/Components/ModelTable/TableView.tsx +1 -1
  79. package/UI/Components/MonitorGraphs/UptimeBarDayModal.tsx +20 -12
  80. package/UI/Components/Pill/Pill.tsx +21 -13
  81. package/UI/Components/StatusBubble/StatusBubble.tsx +3 -3
  82. package/UI/Components/TelemetryViewer/TelemetryViewer.tsx +7 -1
  83. package/UI/Components/TelemetryViewer/components/TelemetryHistogram.tsx +9 -3
  84. package/UI/Components/TelemetryViewer/components/TelemetrySearchBar.tsx +62 -4
  85. package/UI/Components/Workflow/Component.tsx +53 -33
  86. package/UI/Components/Workflow/ComponentPortViewer.tsx +6 -6
  87. package/UI/Components/Workflow/ComponentReturnValueViewer.tsx +8 -8
  88. package/UI/Components/Workflow/ComponentsModal.tsx +16 -9
  89. package/UI/Components/Workflow/Workflow.tsx +13 -11
  90. package/UI/Utils/Theme.ts +140 -0
  91. package/Utils/Dashboard/Components/DashboardLogChartComponent.ts +104 -0
  92. package/Utils/Dashboard/Components/Index.ts +7 -0
  93. package/Utils/Monitor/MonitorMetricType.ts +70 -2
  94. package/build/dist/Models/DatabaseModels/AIRun.js +52 -0
  95. package/build/dist/Models/DatabaseModels/AIRun.js.map +1 -1
  96. package/build/dist/Models/DatabaseModels/Project.js +62 -0
  97. package/build/dist/Models/DatabaseModels/Project.js.map +1 -1
  98. package/build/dist/Server/API/AIAgentTaskAPI.js +8 -23
  99. package/build/dist/Server/API/AIAgentTaskAPI.js.map +1 -1
  100. package/build/dist/Server/API/AIInvestigationAPI.js +107 -0
  101. package/build/dist/Server/API/AIInvestigationAPI.js.map +1 -0
  102. package/build/dist/Server/API/TelemetryAPI.js.map +1 -1
  103. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.js +12 -0
  104. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783598145111-AddEnableAutomaticIncidentInvestigationToProject.js.map +1 -0
  105. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.js +18 -0
  106. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783615884106-AddInvestigationSubjectToAIRun.js.map +1 -0
  107. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.js +12 -0
  108. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1783632447975-AddEnableAutomaticAlertInvestigationToProject.js.map +1 -0
  109. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +6 -0
  110. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  111. package/build/dist/Server/Services/AIAgentTaskService.js +59 -0
  112. package/build/dist/Server/Services/AIAgentTaskService.js.map +1 -1
  113. package/build/dist/Server/Services/AlertService.js +24 -0
  114. package/build/dist/Server/Services/AlertService.js.map +1 -1
  115. package/build/dist/Server/Services/AnalyticsDatabaseService.js +19 -0
  116. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  117. package/build/dist/Server/Services/IncidentService.js +24 -0
  118. package/build/dist/Server/Services/IncidentService.js.map +1 -1
  119. package/build/dist/Server/Services/IncidentStateTimelineService.js +19 -0
  120. package/build/dist/Server/Services/IncidentStateTimelineService.js.map +1 -1
  121. package/build/dist/Server/Services/LogAggregationService.js +21 -7
  122. package/build/dist/Server/Services/LogAggregationService.js.map +1 -1
  123. package/build/dist/Server/Services/MetricService.js +449 -7
  124. package/build/dist/Server/Services/MetricService.js.map +1 -1
  125. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js +59 -11
  126. package/build/dist/Server/Utils/AI/Chat/ObservabilityAssistant.js.map +1 -1
  127. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js +119 -0
  128. package/build/dist/Server/Utils/AI/Sentinel/AlertInvestigationRunner.js.map +1 -0
  129. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js +147 -0
  130. package/build/dist/Server/Utils/AI/Sentinel/IncidentInvestigationRunner.js.map +1 -0
  131. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js +93 -0
  132. package/build/dist/Server/Utils/AI/Sentinel/IncidentPostmortemRunner.js.map +1 -0
  133. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js +311 -0
  134. package/build/dist/Server/Utils/AI/Sentinel/SentinelInvestigationEngine.js.map +1 -0
  135. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js +143 -0
  136. package/build/dist/Server/Utils/AI/Sentinel/SentinelMemory.js.map +1 -0
  137. package/build/dist/Server/Utils/AI/Toolbox/Index.js +6 -0
  138. package/build/dist/Server/Utils/AI/Toolbox/Index.js.map +1 -1
  139. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js +451 -0
  140. package/build/dist/Server/Utils/AI/Toolbox/SentinelActionTools.js.map +1 -0
  141. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js +29 -0
  142. package/build/dist/Server/Utils/Monitor/Criteria/APIRequestCriteria.js.map +1 -1
  143. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js +86 -2
  144. package/build/dist/Server/Utils/Monitor/MonitorMetricUtil.js.map +1 -1
  145. package/build/dist/Types/Dashboard/DashboardComponentType.js +1 -0
  146. package/build/dist/Types/Dashboard/DashboardComponentType.js.map +1 -1
  147. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js +1 -0
  148. package/build/dist/Types/Dashboard/DashboardComponents/ComponentArgument.js.map +1 -1
  149. package/build/dist/Types/Dashboard/DashboardComponents/DashboardLogChartComponent.js +2 -0
  150. package/build/dist/Types/Dashboard/DashboardComponents/DashboardLogChartComponent.js.map +1 -0
  151. package/build/dist/Types/Dashboard/DashboardTemplates.js +9 -1
  152. package/build/dist/Types/Dashboard/DashboardTemplates.js.map +1 -1
  153. package/build/dist/Types/Date.js +32 -0
  154. package/build/dist/Types/Date.js.map +1 -1
  155. package/build/dist/Types/Monitor/CriteriaFilter.js +4 -0
  156. package/build/dist/Types/Monitor/CriteriaFilter.js.map +1 -1
  157. package/build/dist/Types/Monitor/HttpPhaseTimings.js +2 -0
  158. package/build/dist/Types/Monitor/HttpPhaseTimings.js.map +1 -0
  159. package/build/dist/Types/Monitor/MonitorMetricType.js +15 -0
  160. package/build/dist/Types/Monitor/MonitorMetricType.js.map +1 -1
  161. package/build/dist/Types/Monitor/PingMonitor/PingMonitorResponse.js +2 -0
  162. package/build/dist/Types/Monitor/PingMonitor/PingMonitorResponse.js.map +1 -0
  163. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js +159 -0
  164. package/build/dist/Types/OnCallDutyPolicy/ScheduleShiftUtil.js.map +1 -0
  165. package/build/dist/UI/Components/Calendar/Calendar.js +2 -2
  166. package/build/dist/UI/Components/Calendar/Calendar.js.map +1 -1
  167. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js +2 -2
  168. package/build/dist/UI/Components/Charts/ChartGroup/ChartGroup.js.map +1 -1
  169. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js +7 -4
  170. package/build/dist/UI/Components/Charts/ChartLibrary/AreaChart/AreaChart.js.map +1 -1
  171. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js +4 -1
  172. package/build/dist/UI/Components/Charts/ChartLibrary/BarChart/BarChart.js.map +1 -1
  173. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js +6 -3
  174. package/build/dist/UI/Components/Charts/ChartLibrary/LineChart/LineChart.js.map +1 -1
  175. package/build/dist/UI/Components/CodeBlock/CodeBlock.js +1 -1
  176. package/build/dist/UI/Components/CodeBlock/CodeBlock.js.map +1 -1
  177. package/build/dist/UI/Components/CodeEditor/CodeEditor.js +3 -1
  178. package/build/dist/UI/Components/CodeEditor/CodeEditor.js.map +1 -1
  179. package/build/dist/UI/Components/Divider/Divider.js +1 -1
  180. package/build/dist/UI/Components/Divider/Divider.js.map +1 -1
  181. package/build/dist/UI/Components/Dropdown/Dropdown.js +10 -4
  182. package/build/dist/UI/Components/Dropdown/Dropdown.js.map +1 -1
  183. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js +76 -3
  184. package/build/dist/UI/Components/EntityDropdown/EntityDropdown.js.map +1 -1
  185. package/build/dist/UI/Components/ErrorBoundary.js +2 -1
  186. package/build/dist/UI/Components/ErrorBoundary.js.map +1 -1
  187. package/build/dist/UI/Components/EventItem/EventItem.js +2 -2
  188. package/build/dist/UI/Components/EventItem/EventItem.js.map +1 -1
  189. package/build/dist/UI/Components/GanttChart/Bar/Index.js +1 -1
  190. package/build/dist/UI/Components/GanttChart/Bar/Index.js.map +1 -1
  191. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js +29 -23
  192. package/build/dist/UI/Components/Graphs/UptimeBarTooltip.js.map +1 -1
  193. package/build/dist/UI/Components/Header/Header.js +1 -0
  194. package/build/dist/UI/Components/Header/Header.js.map +1 -1
  195. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js +1 -1
  196. package/build/dist/UI/Components/Header/HeaderIconDropdownButton.js.map +1 -1
  197. package/build/dist/UI/Components/Label/Label.js +2 -2
  198. package/build/dist/UI/Components/Label/Label.js.map +1 -1
  199. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js +20 -8
  200. package/build/dist/UI/Components/LogsViewer/components/LogsAnalyticsView.js.map +1 -1
  201. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js +8 -2
  202. package/build/dist/UI/Components/LogsViewer/components/LogsHistogram.js.map +1 -1
  203. package/build/dist/UI/Components/Markdown.tsx/MarkdownEditor.js +8 -8
  204. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js +40 -20
  205. package/build/dist/UI/Components/Markdown.tsx/MarkdownViewer.js.map +1 -1
  206. package/build/dist/UI/Components/Modal/ConfirmModal.js +1 -1
  207. package/build/dist/UI/Components/Modal/ConfirmModal.js.map +1 -1
  208. package/build/dist/UI/Components/Modal/Modal.js +109 -51
  209. package/build/dist/UI/Components/Modal/Modal.js.map +1 -1
  210. package/build/dist/UI/Components/Modal/ModalFooter.js +13 -10
  211. package/build/dist/UI/Components/Modal/ModalFooter.js.map +1 -1
  212. package/build/dist/UI/Components/ModelTable/TableView.js +1 -1
  213. package/build/dist/UI/Components/ModelTable/TableView.js.map +1 -1
  214. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js +17 -12
  215. package/build/dist/UI/Components/MonitorGraphs/UptimeBarDayModal.js.map +1 -1
  216. package/build/dist/UI/Components/Pill/Pill.js +12 -13
  217. package/build/dist/UI/Components/Pill/Pill.js.map +1 -1
  218. package/build/dist/UI/Components/StatusBubble/StatusBubble.js +3 -3
  219. package/build/dist/UI/Components/StatusBubble/StatusBubble.js.map +1 -1
  220. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js +1 -1
  221. package/build/dist/UI/Components/TelemetryViewer/TelemetryViewer.js.map +1 -1
  222. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js +8 -2
  223. package/build/dist/UI/Components/TelemetryViewer/components/TelemetryHistogram.js.map +1 -1
  224. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js +36 -6
  225. package/build/dist/UI/Components/TelemetryViewer/components/TelemetrySearchBar.js.map +1 -1
  226. package/build/dist/UI/Components/Workflow/Component.js +43 -33
  227. package/build/dist/UI/Components/Workflow/Component.js.map +1 -1
  228. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js +6 -6
  229. package/build/dist/UI/Components/Workflow/ComponentPortViewer.js.map +1 -1
  230. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js +8 -8
  231. package/build/dist/UI/Components/Workflow/ComponentReturnValueViewer.js.map +1 -1
  232. package/build/dist/UI/Components/Workflow/ComponentsModal.js +15 -9
  233. package/build/dist/UI/Components/Workflow/ComponentsModal.js.map +1 -1
  234. package/build/dist/UI/Components/Workflow/Workflow.js +13 -11
  235. package/build/dist/UI/Components/Workflow/Workflow.js.map +1 -1
  236. package/build/dist/UI/Utils/Theme.js +106 -0
  237. package/build/dist/UI/Utils/Theme.js.map +1 -0
  238. package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js +92 -0
  239. package/build/dist/Utils/Dashboard/Components/DashboardLogChartComponent.js.map +1 -0
  240. package/build/dist/Utils/Dashboard/Components/Index.js +4 -0
  241. package/build/dist/Utils/Dashboard/Components/Index.js.map +1 -1
  242. package/build/dist/Utils/Monitor/MonitorMetricType.js +70 -3
  243. package/build/dist/Utils/Monitor/MonitorMetricType.js.map +1 -1
  244. package/package.json +1 -1
@@ -41,7 +41,8 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
41
41
  width: "48px",
42
42
  height: "48px",
43
43
  borderRadius: "50%",
44
- backgroundColor: "#f0fdf4",
44
+ backgroundColor:
45
+ "color-mix(in srgb, #22c55e 14%, var(--ou-surface-primary, #ffffff))",
45
46
  display: "flex",
46
47
  alignItems: "center",
47
48
  justifyContent: "center",
@@ -65,13 +66,18 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
65
66
  style={{
66
67
  fontSize: "14px",
67
68
  fontWeight: 600,
68
- color: "#111827",
69
+ color: "var(--ou-text-primary, #111827)",
69
70
  marginBottom: "4px",
70
71
  }}
71
72
  >
72
73
  No incidents
73
74
  </div>
74
- <div style={{ fontSize: "13px", color: "#6b7280" }}>
75
+ <div
76
+ style={{
77
+ fontSize: "13px",
78
+ color: "var(--ou-text-muted, #6b7280)",
79
+ }}
80
+ >
75
81
  No incidents were reported on this day.
76
82
  </div>
77
83
  </div>
@@ -91,20 +97,20 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
91
97
  : undefined
92
98
  }
93
99
  style={{
94
- border: "1px solid #e5e7eb",
100
+ border: "1px solid var(--ou-border-default, #e5e7eb)",
95
101
  borderRadius: "10px",
96
102
  padding: "14px 16px",
97
103
  marginBottom: "10px",
98
104
  cursor: isClickable ? "pointer" : "default",
99
105
  transition: "all 0.15s ease",
100
- backgroundColor: "#ffffff",
106
+ backgroundColor: "var(--ou-surface-primary, #ffffff)",
101
107
  }}
102
108
  onMouseEnter={(e: React.MouseEvent<HTMLDivElement>) => {
103
109
  if (isClickable) {
104
110
  (e.currentTarget as HTMLDivElement).style.backgroundColor =
105
- "#f9fafb";
111
+ "var(--ou-surface-secondary, #f9fafb)";
106
112
  (e.currentTarget as HTMLDivElement).style.borderColor =
107
- "#d1d5db";
113
+ "var(--ou-border-strong, #d1d5db)";
108
114
  (e.currentTarget as HTMLDivElement).style.boxShadow =
109
115
  "0 1px 3px rgba(0,0,0,0.06)";
110
116
  }
@@ -112,9 +118,9 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
112
118
  onMouseLeave={(e: React.MouseEvent<HTMLDivElement>) => {
113
119
  if (isClickable) {
114
120
  (e.currentTarget as HTMLDivElement).style.backgroundColor =
115
- "#ffffff";
121
+ "var(--ou-surface-primary, #ffffff)";
116
122
  (e.currentTarget as HTMLDivElement).style.borderColor =
117
- "#e5e7eb";
123
+ "var(--ou-border-default, #e5e7eb)";
118
124
  (e.currentTarget as HTMLDivElement).style.boxShadow = "none";
119
125
  }
120
126
  }}
@@ -132,7 +138,9 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
132
138
  style={{
133
139
  fontSize: "14px",
134
140
  fontWeight: 600,
135
- color: isClickable ? "#2563eb" : "#111827",
141
+ color: isClickable
142
+ ? "var(--ou-link, #2563eb)"
143
+ : "var(--ou-text-primary, #111827)",
136
144
  lineHeight: "1.4",
137
145
  marginBottom: "4px",
138
146
  }}
@@ -142,7 +150,7 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
142
150
  <div
143
151
  style={{
144
152
  fontSize: "12px",
145
- color: "#6b7280",
153
+ color: "var(--ou-text-muted, #6b7280)",
146
154
  }}
147
155
  >
148
156
  Declared{" "}
@@ -162,7 +170,7 @@ const UptimeBarDayModal: FunctionComponent<ComponentProps> = (
162
170
  >
163
171
  <path
164
172
  d="M6 3l5 5-5 5"
165
- stroke="#9ca3af"
173
+ stroke="var(--ou-text-subtle, #9ca3af)"
166
174
  strokeWidth="1.5"
167
175
  strokeLinecap="round"
168
176
  strokeLinejoin="round"
@@ -1,4 +1,4 @@
1
- import { Black } from "../../../Types/BrandColors";
1
+ import { Gray500 } from "../../../Types/BrandColors";
2
2
  import Color from "../../../Types/Color";
3
3
  import Icon, { SizeProp, ThickProp } from "../Icon/Icon";
4
4
  import IconProp from "../../../Types/Icon/IconProp";
@@ -26,22 +26,32 @@ export interface ComponentProps {
26
26
  const Pill: FunctionComponent<ComponentProps> = (
27
27
  props: ComponentProps,
28
28
  ): ReactElement => {
29
+ const color: Color = props.color || Gray500;
30
+ const backgroundColor: string = color.toString();
31
+
29
32
  if (props.isMinimal) {
30
33
  return (
31
- <span className="relative inline-flex items-center rounded-full border border-gray-300 px-3 py-0.5 text-sm">
34
+ <span
35
+ className="relative inline-flex items-center rounded-full border px-3 py-0.5 text-sm"
36
+ style={{
37
+ borderColor: "var(--ou-border-strong, #d1d5db)",
38
+ }}
39
+ >
32
40
  <span className="absolute flex flex-shrink-0 items-center justify-center">
33
41
  <span
34
42
  className="h-1.5 w-1.5 rounded-full bg-rose-500"
35
43
  style={{
36
- backgroundColor:
37
- props.style?.backgroundColor || props.color
38
- ? props.color.toString()
39
- : Black.toString(),
44
+ backgroundColor: backgroundColor,
40
45
  }}
41
46
  aria-hidden="true"
42
47
  ></span>
43
48
  </span>
44
- <span className="ml-3.5 font-medium text-gray-900">{props.text}</span>
49
+ <span
50
+ className="ml-3.5 font-medium"
51
+ style={{ color: "var(--ou-text-primary, #111827)" }}
52
+ >
53
+ {props.text}
54
+ </span>
45
55
  </span>
46
56
  );
47
57
  }
@@ -50,18 +60,16 @@ const Pill: FunctionComponent<ComponentProps> = (
50
60
  return (
51
61
  <span
52
62
  data-testid="pill"
53
- className="inline-flex items-center rounded-full p-1 pl-3 pr-3"
63
+ className="inline-flex items-center rounded-full border p-1 pl-3 pr-3"
54
64
  style={{
55
65
  // https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color
56
66
 
57
67
  color:
58
- props.style?.color || Color.shouldUseDarkText(props.color || Black)
68
+ props.style?.color || Color.shouldUseDarkText(color)
59
69
  ? "#000000"
60
70
  : "#ffffff",
61
- backgroundColor:
62
- props.style?.backgroundColor || props.color
63
- ? props.color.toString()
64
- : Black.toString(),
71
+ backgroundColor: backgroundColor,
72
+ borderColor: "var(--ou-border-strong, #d1d5db)",
65
73
  fontSize: props.size ? props.size.toString() : PillSize.Normal,
66
74
  ...props.style,
67
75
  }}
@@ -1,4 +1,3 @@
1
- import { Black } from "../../../Types/BrandColors";
2
1
  import Color from "../../../Types/Color";
3
2
  import React, { CSSProperties, FunctionComponent, ReactElement } from "react";
4
3
 
@@ -14,7 +13,7 @@ const Statusbubble: FunctionComponent<ComponentProps> = (
14
13
  ): ReactElement => {
15
14
  const backgroundColor: string = props.color
16
15
  ? props.color.toString()
17
- : Black.toString();
16
+ : "var(--ou-text-subtle, #9ca3af)";
18
17
 
19
18
  return (
20
19
  <div
@@ -37,6 +36,7 @@ const Statusbubble: FunctionComponent<ComponentProps> = (
37
36
  className="relative inline-flex rounded-full h-3.5 w-3.5"
38
37
  style={{
39
38
  backgroundColor: backgroundColor,
39
+ boxShadow: "0 0 0 1px var(--ou-border-strong, #d1d5db)",
40
40
  }}
41
41
  ></span>
42
42
  </span>
@@ -44,7 +44,7 @@ const Statusbubble: FunctionComponent<ComponentProps> = (
44
44
  <div
45
45
  className="text-sm font-medium"
46
46
  style={{
47
- color: props.color ? props.color.toString() : Black.toString(),
47
+ color: "var(--ou-text-secondary, #4b5563)",
48
48
  }}
49
49
  >
50
50
  {props.text}
@@ -45,8 +45,13 @@ export interface TelemetryViewerProps<T> {
45
45
  searchAttributeSuggestions?: Array<string> | undefined;
46
46
  searchValueSuggestions?: Record<string, Array<string>> | undefined;
47
47
  searchFieldAliasMap?: Record<string, string> | undefined;
48
+ /*
49
+ * Return `false` when the field is filtered via the raw search string
50
+ * rather than a chip — the search bar then keeps the token in the input
51
+ * and submits the search instead of clearing the token.
52
+ */
48
53
  onSearchFieldValueSelect?:
49
- | ((fieldKey: string, value: string) => void)
54
+ | ((fieldKey: string, value: string) => boolean | void)
50
55
  | undefined;
51
56
  searchHelpRows?: Array<SearchHelpRow> | undefined;
52
57
  searchHelpCombinedExample?: string | undefined;
@@ -147,6 +152,7 @@ function TelemetryViewerInner<T>(props: TelemetryViewerProps<T>): ReactElement {
147
152
  helpCombinedExample={props.searchHelpCombinedExample}
148
153
  isAttributesLoading={props.searchAttributesLoading}
149
154
  isValuesLoading={props.searchValuesLoading}
155
+ isLoading={props.isLoading}
150
156
  />
151
157
  </div>
152
158
 
@@ -242,15 +242,21 @@ const TelemetryHistogram: FunctionComponent<TelemetryHistogramProps> = (
242
242
  <XAxis
243
243
  dataKey="time"
244
244
  tickFormatter={formatTickTime}
245
- tick={{ fontSize: 10, fill: "#9ca3af" }}
246
- axisLine={{ stroke: "#e5e7eb" }}
245
+ tick={{
246
+ fontSize: 10,
247
+ fill: "var(--ou-chart-tick, #9ca3af)",
248
+ }}
249
+ axisLine={{ stroke: "var(--ou-chart-grid, #e5e7eb)" }}
247
250
  tickLine={false}
248
251
  minTickGap={40}
249
252
  dy={4}
250
253
  interval="preserveStartEnd"
251
254
  />
252
255
  <YAxis
253
- tick={{ fontSize: 10, fill: "#9ca3af" }}
256
+ tick={{
257
+ fontSize: 10,
258
+ fill: "var(--ou-chart-tick, #9ca3af)",
259
+ }}
254
260
  axisLine={false}
255
261
  tickLine={false}
256
262
  width={48}
@@ -31,8 +31,16 @@ export interface TelemetrySearchBarProps {
31
31
  attributeSuggestions?: Array<string> | undefined;
32
32
  // field → allowed value completions (resolved field keys).
33
33
  valueSuggestions?: Record<string, Array<string>> | undefined;
34
- // Called when the user picks a concrete field:value chip from the dropdown.
35
- onFieldValueSelect?: ((fieldKey: string, value: string) => void) | undefined;
34
+ /*
35
+ * Called when the user picks a concrete field:value chip from the dropdown.
36
+ * Return `false` when the field is NOT consumed as a chip (the parent
37
+ * filters it through the raw search string instead, e.g. `name:` in the
38
+ * metrics viewer) — the bar then keeps the token in the input and submits
39
+ * the search as-is rather than clearing the token.
40
+ */
41
+ onFieldValueSelect?:
42
+ | ((fieldKey: string, value: string) => boolean | void)
43
+ | undefined;
36
44
  // User-facing alias → backing field key (e.g. "service" -> "serviceId").
37
45
  fieldAliasMap?: Record<string, string> | undefined;
38
46
  placeholder?: string | undefined;
@@ -43,6 +51,8 @@ export interface TelemetrySearchBarProps {
43
51
  isAttributesLoading?: boolean | undefined;
44
52
  // Loading state for `@attribute:value` autocomplete (per-key value fetch).
45
53
  isValuesLoading?: boolean | undefined;
54
+ // Loading state for the telemetry results shown by the parent viewer.
55
+ isLoading?: boolean | undefined;
46
56
  }
47
57
 
48
58
  export interface TelemetrySearchBarRef {
@@ -198,7 +208,24 @@ const TelemetrySearchBar: React.ForwardRefExoticComponent<
198
208
  ? filteredSuggestions[0]!
199
209
  : partialValue);
200
210
 
201
- props.onFieldValueSelect(fieldPrefix, resolvedMatch);
211
+ const consumed: boolean | void = props.onFieldValueSelect(
212
+ fieldPrefix,
213
+ resolvedMatch,
214
+ );
215
+
216
+ if (consumed === false) {
217
+ /*
218
+ * The parent filters this field through the raw search
219
+ * string. Keep the token in the input and submit — clearing
220
+ * it here would erase the filter the user just typed.
221
+ */
222
+ props.onSubmit();
223
+ setShowSuggestions(false);
224
+ setShowHelp(false);
225
+ e.preventDefault();
226
+ return;
227
+ }
228
+
202
229
  const parts: Array<string> = props.value.split(/\s+/);
203
230
  parts.pop();
204
231
  const remaining: string = parts.join(" ");
@@ -256,12 +283,32 @@ const TelemetrySearchBar: React.ForwardRefExoticComponent<
256
283
  const applySuggestion: (suggestion: string) => void = useCallback(
257
284
  (suggestion: string): void => {
258
285
  if (isValueMode) {
286
+ let consumed: boolean | void = undefined;
259
287
  if (props.onFieldValueSelect) {
260
- props.onFieldValueSelect(fieldPrefix, suggestion);
288
+ consumed = props.onFieldValueSelect(fieldPrefix, suggestion);
261
289
  }
262
290
 
263
291
  const parts: Array<string> = props.value.split(/\s+/);
264
292
  parts.pop();
293
+
294
+ if (consumed === false) {
295
+ /*
296
+ * Not consumed as a chip — the parent filters this field via
297
+ * the raw search string, so complete the token in place
298
+ * instead of clearing it.
299
+ */
300
+ const completedToken: string = `${hasAtPrefix ? "@" : ""}${fieldPrefix}:${suggestion}`;
301
+ props.onChange(
302
+ parts.length > 0
303
+ ? `${parts.join(" ")} ${completedToken}`
304
+ : completedToken,
305
+ );
306
+ setShowSuggestions(false);
307
+ setShowHelp(false);
308
+ inputRef.current?.focus();
309
+ return;
310
+ }
311
+
265
312
  const remaining: string = parts.join(" ");
266
313
  props.onChange(remaining ? remaining + " " : "");
267
314
  setShowSuggestions(false);
@@ -337,6 +384,7 @@ const TelemetrySearchBar: React.ForwardRefExoticComponent<
337
384
  ? "border-indigo-400 ring-2 ring-indigo-100"
338
385
  : "border-gray-200 hover:border-gray-300"
339
386
  }`}
387
+ aria-busy={props.isLoading || false}
340
388
  >
341
389
  <Icon
342
390
  icon={IconProp.Search}
@@ -367,6 +415,16 @@ const TelemetrySearchBar: React.ForwardRefExoticComponent<
367
415
  spellCheck={false}
368
416
  autoComplete="off"
369
417
  />
418
+ {props.isLoading && (
419
+ <div
420
+ className="flex-none text-indigo-500"
421
+ role="status"
422
+ aria-label="Loading results"
423
+ title="Loading results..."
424
+ >
425
+ <Icon icon={IconProp.Spinner} className="h-4 w-4 animate-spin" />
426
+ </div>
427
+ )}
370
428
  {props.value.length > 0 && (
371
429
  <button
372
430
  type="button"
@@ -36,8 +36,9 @@ const getCategoryColors: (
36
36
  ): CategoryColorScheme => {
37
37
  if (componentType === ComponentType.Trigger) {
38
38
  return {
39
- bg: "#fefce8",
40
- border: "#fde68a",
39
+ bg: "color-mix(in srgb, #f59e0b 12%, var(--ou-surface-primary, #ffffff))",
40
+ border:
41
+ "color-mix(in srgb, #f59e0b 38%, var(--ou-border-default, #e5e7eb))",
41
42
  headerBg: "linear-gradient(135deg, #f59e0b, #d97706)",
42
43
  headerText: "#ffffff",
43
44
  iconColor: "#ffffff",
@@ -52,8 +53,9 @@ const getCategoryColors: (
52
53
 
53
54
  if (lowerCategory.includes("condition") || lowerCategory.includes("logic")) {
54
55
  return {
55
- bg: "#faf5ff",
56
- border: "#e9d5ff",
56
+ bg: "color-mix(in srgb, #a855f7 12%, var(--ou-surface-primary, #ffffff))",
57
+ border:
58
+ "color-mix(in srgb, #a855f7 38%, var(--ou-border-default, #e5e7eb))",
57
59
  headerBg: "linear-gradient(135deg, #a855f7, #7c3aed)",
58
60
  headerText: "#ffffff",
59
61
  iconColor: "#ffffff",
@@ -66,8 +68,9 @@ const getCategoryColors: (
66
68
 
67
69
  if (lowerCategory.includes("api") || lowerCategory.includes("webhook")) {
68
70
  return {
69
- bg: "#eff6ff",
70
- border: "#bfdbfe",
71
+ bg: "color-mix(in srgb, #3b82f6 12%, var(--ou-surface-primary, #ffffff))",
72
+ border:
73
+ "color-mix(in srgb, #3b82f6 38%, var(--ou-border-default, #e5e7eb))",
71
74
  headerBg: "linear-gradient(135deg, #3b82f6, #2563eb)",
72
75
  headerText: "#ffffff",
73
76
  iconColor: "#ffffff",
@@ -87,8 +90,9 @@ const getCategoryColors: (
87
90
  lowerCategory.includes("notification")
88
91
  ) {
89
92
  return {
90
- bg: "#ecfdf5",
91
- border: "#a7f3d0",
93
+ bg: "color-mix(in srgb, #10b981 12%, var(--ou-surface-primary, #ffffff))",
94
+ border:
95
+ "color-mix(in srgb, #10b981 38%, var(--ou-border-default, #e5e7eb))",
92
96
  headerBg: "linear-gradient(135deg, #10b981, #059669)",
93
97
  headerText: "#ffffff",
94
98
  iconColor: "#ffffff",
@@ -105,8 +109,9 @@ const getCategoryColors: (
105
109
  lowerCategory.includes("custom")
106
110
  ) {
107
111
  return {
108
- bg: "#fef2f2",
109
- border: "#fecaca",
112
+ bg: "color-mix(in srgb, #ef4444 12%, var(--ou-surface-primary, #ffffff))",
113
+ border:
114
+ "color-mix(in srgb, #ef4444 38%, var(--ou-border-default, #e5e7eb))",
110
115
  headerBg: "linear-gradient(135deg, #ef4444, #dc2626)",
111
116
  headerText: "#ffffff",
112
117
  iconColor: "#ffffff",
@@ -119,8 +124,9 @@ const getCategoryColors: (
119
124
 
120
125
  if (lowerCategory.includes("json") || lowerCategory.includes("util")) {
121
126
  return {
122
- bg: "#f0fdf4",
123
- border: "#bbf7d0",
127
+ bg: "color-mix(in srgb, #22c55e 12%, var(--ou-surface-primary, #ffffff))",
128
+ border:
129
+ "color-mix(in srgb, #22c55e 38%, var(--ou-border-default, #e5e7eb))",
124
130
  headerBg: "linear-gradient(135deg, #22c55e, #16a34a)",
125
131
  headerText: "#ffffff",
126
132
  iconColor: "#ffffff",
@@ -137,8 +143,9 @@ const getCategoryColors: (
137
143
  lowerCategory.includes("timer")
138
144
  ) {
139
145
  return {
140
- bg: "#fff7ed",
141
- border: "#fed7aa",
146
+ bg: "color-mix(in srgb, #f97316 12%, var(--ou-surface-primary, #ffffff))",
147
+ border:
148
+ "color-mix(in srgb, #f97316 38%, var(--ou-border-default, #e5e7eb))",
142
149
  headerBg: "linear-gradient(135deg, #f97316, #ea580c)",
143
150
  headerText: "#ffffff",
144
151
  iconColor: "#ffffff",
@@ -151,8 +158,8 @@ const getCategoryColors: (
151
158
 
152
159
  // Default / database models
153
160
  return {
154
- bg: "#f8fafc",
155
- border: "#e2e8f0",
161
+ bg: "var(--ou-surface-secondary, #f8fafc)",
162
+ border: "var(--ou-border-default, #e2e8f0)",
156
163
  headerBg: "linear-gradient(135deg, #6366f1, #4f46e5)",
157
164
  headerText: "#ffffff",
158
165
  iconColor: "#ffffff",
@@ -223,8 +230,14 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
223
230
  style={{
224
231
  width: "16rem",
225
232
  borderRadius: "12px",
226
- border: `2px dashed ${isHovering ? "#94a3b8" : "#cbd5e1"}`,
227
- backgroundColor: isHovering ? "#f8fafc" : "#ffffff",
233
+ border: `2px dashed ${
234
+ isHovering
235
+ ? "var(--ou-text-subtle, #94a3b8)"
236
+ : "var(--ou-border-strong, #cbd5e1)"
237
+ }`,
238
+ backgroundColor: isHovering
239
+ ? "var(--ou-surface-secondary, #f8fafc)"
240
+ : "var(--ou-surface-primary, #ffffff)",
228
241
  padding: "1.5rem",
229
242
  display: "flex",
230
243
  flexDirection: "column",
@@ -245,7 +258,9 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
245
258
  width: "2.5rem",
246
259
  height: "2.5rem",
247
260
  borderRadius: "50%",
248
- backgroundColor: isHovering ? "#e2e8f0" : "#f1f5f9",
261
+ backgroundColor: isHovering
262
+ ? "var(--ou-border-default, #e2e8f0)"
263
+ : "var(--ou-surface-tertiary, #f1f5f9)",
249
264
  display: "flex",
250
265
  alignItems: "center",
251
266
  justifyContent: "center",
@@ -255,7 +270,9 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
255
270
  <Icon
256
271
  icon={IconProp.Add}
257
272
  style={{
258
- color: isHovering ? "#64748b" : "#94a3b8",
273
+ color: isHovering
274
+ ? "var(--ou-text-muted, #64748b)"
275
+ : "var(--ou-text-subtle, #94a3b8)",
259
276
  width: "1.25rem",
260
277
  height: "1.25rem",
261
278
  transition: "all 0.2s ease",
@@ -264,7 +281,9 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
264
281
  </div>
265
282
  <p
266
283
  style={{
267
- color: isHovering ? "#64748b" : "#94a3b8",
284
+ color: isHovering
285
+ ? "var(--ou-text-muted, #64748b)"
286
+ : "var(--ou-text-subtle, #94a3b8)",
268
287
  fontSize: "0.8125rem",
269
288
  fontWeight: 500,
270
289
  textAlign: "center",
@@ -302,13 +321,13 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
302
321
  ? colors.selectedBorder
303
322
  : colors.border
304
323
  }`,
305
- backgroundColor: "#ffffff",
324
+ backgroundColor: "var(--ou-surface-primary, #ffffff)",
306
325
  overflow: "visible",
307
326
  boxShadow: props.selected
308
- ? colors.selectedShadow
327
+ ? `var(--ou-card-shadow-selected, ${colors.selectedShadow})`
309
328
  : isHovering
310
- ? `0 8px 25px -5px rgba(0, 0, 0, 0.1), 0 4px 10px -6px rgba(0, 0, 0, 0.05)`
311
- : `0 1px 3px 0 rgba(0, 0, 0, 0.07), 0 1px 2px -1px rgba(0, 0, 0, 0.05)`,
329
+ ? "var(--ou-card-shadow-hover, 0 8px 25px -5px rgba(0, 0, 0, 0.1), 0 4px 10px -6px rgba(0, 0, 0, 0.05))"
330
+ : "var(--ou-card-shadow, 0 1px 3px 0 rgba(0, 0, 0, 0.07), 0 1px 2px -1px rgba(0, 0, 0, 0.05))",
312
331
  transition: "all 0.2s ease",
313
332
  transform: isHovering ? "translateY(-1px)" : "none",
314
333
  position: "relative",
@@ -364,11 +383,12 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
364
383
  width: "22px",
365
384
  height: "22px",
366
385
  borderRadius: "50%",
367
- backgroundColor: "#fef2f2",
386
+ backgroundColor:
387
+ "color-mix(in srgb, #ef4444 15%, var(--ou-surface-primary, #ffffff))",
368
388
  display: "flex",
369
389
  alignItems: "center",
370
390
  justifyContent: "center",
371
- border: "1px solid #fecaca",
391
+ border: "1px solid rgb(248 113 113 / 45%)",
372
392
  }}
373
393
  >
374
394
  <Icon
@@ -451,8 +471,8 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
451
471
  style={{
452
472
  display: "inline-flex",
453
473
  alignItems: "center",
454
- backgroundColor: "#ffffff",
455
- border: "1px solid #e2e8f0",
474
+ backgroundColor: "var(--ou-surface-primary, #ffffff)",
475
+ border: "1px solid var(--ou-border-default, #e2e8f0)",
456
476
  borderRadius: "6px",
457
477
  padding: "0.125rem 0.5rem",
458
478
  marginBottom: "0.5rem",
@@ -460,7 +480,7 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
460
480
  >
461
481
  <span
462
482
  style={{
463
- color: "#64748b",
483
+ color: "var(--ou-text-muted, #64748b)",
464
484
  fontSize: "0.6875rem",
465
485
  fontWeight: 500,
466
486
  fontFamily:
@@ -475,7 +495,7 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
475
495
  {/* Description */}
476
496
  <p
477
497
  style={{
478
- color: "#64748b",
498
+ color: "var(--ou-text-muted, #64748b)",
479
499
  fontSize: "0.75rem",
480
500
  lineHeight: "1.125rem",
481
501
  margin: 0,
@@ -504,7 +524,7 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
504
524
  props.data.metadata.outPorts.length === 1
505
525
  ? "center"
506
526
  : "space-between",
507
- backgroundColor: "#ffffff",
527
+ backgroundColor: "var(--ou-surface-primary, #ffffff)",
508
528
  borderRadius: "0 0 10px 10px",
509
529
  }}
510
530
  >
@@ -513,7 +533,7 @@ const Node: FunctionComponent<ComponentProps> = (props: ComponentProps) => {
513
533
  <Tooltip key={i} text={port.description || ""}>
514
534
  <span
515
535
  style={{
516
- color: "#94a3b8",
536
+ color: "var(--ou-text-subtle, #94a3b8)",
517
537
  fontSize: "0.6875rem",
518
538
  fontWeight: 500,
519
539
  }}
@@ -34,8 +34,8 @@ const ComponentPortViewer: FunctionComponent<ComponentProps> = (
34
34
  gap: "0.625rem",
35
35
  padding: "0.5rem 0.75rem",
36
36
  borderRadius: "8px",
37
- backgroundColor: "#f8fafc",
38
- border: "1px solid #f1f5f9",
37
+ backgroundColor: "var(--ou-surface-secondary, #f8fafc)",
38
+ border: "1px solid var(--ou-border-subtle, #f1f5f9)",
39
39
  marginBottom: "0.375rem",
40
40
  }}
41
41
  >
@@ -44,7 +44,7 @@ const ComponentPortViewer: FunctionComponent<ComponentProps> = (
44
44
  width: "8px",
45
45
  height: "8px",
46
46
  borderRadius: "50%",
47
- backgroundColor: "#94a3b8",
47
+ backgroundColor: "var(--ou-text-subtle, #94a3b8)",
48
48
  flexShrink: 0,
49
49
  }}
50
50
  />
@@ -53,7 +53,7 @@ const ComponentPortViewer: FunctionComponent<ComponentProps> = (
53
53
  style={{
54
54
  fontSize: "0.8125rem",
55
55
  fontWeight: 500,
56
- color: "#334155",
56
+ color: "var(--ou-text-secondary, #334155)",
57
57
  margin: 0,
58
58
  lineHeight: "1.25rem",
59
59
  }}
@@ -61,7 +61,7 @@ const ComponentPortViewer: FunctionComponent<ComponentProps> = (
61
61
  {port.title}
62
62
  <span
63
63
  style={{
64
- color: "#94a3b8",
64
+ color: "var(--ou-text-subtle, #94a3b8)",
65
65
  fontWeight: 400,
66
66
  fontSize: "0.6875rem",
67
67
  marginLeft: "0.375rem",
@@ -76,7 +76,7 @@ const ComponentPortViewer: FunctionComponent<ComponentProps> = (
76
76
  <p
77
77
  style={{
78
78
  fontSize: "0.75rem",
79
- color: "#94a3b8",
79
+ color: "var(--ou-text-subtle, #94a3b8)",
80
80
  margin: 0,
81
81
  lineHeight: "1rem",
82
82
  }}