@sudobility/devops-components-rn 1.0.0 → 1.0.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.
- package/dist/AlertDialog.d.ts.map +1 -1
- package/dist/ApiPlayground.d.ts.map +1 -1
- package/dist/ApiReference.d.ts.map +1 -1
- package/dist/AuditLog.d.ts +26 -4
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/BodyMetrics.d.ts.map +1 -1
- package/dist/BuildLog.d.ts +16 -5
- package/dist/BuildLog.d.ts.map +1 -1
- package/dist/ChangelogDisplay.d.ts.map +1 -1
- package/dist/CodePlayground.d.ts.map +1 -1
- package/dist/ConflictResolver.d.ts.map +1 -1
- package/dist/DealPipeline.d.ts.map +1 -1
- package/dist/DeploymentStatus.d.ts +11 -4
- package/dist/DeploymentStatus.d.ts.map +1 -1
- package/dist/DriverLog.d.ts.map +1 -1
- package/dist/MemoryUsage.d.ts.map +1 -1
- package/dist/MetricsGrid.d.ts +12 -19
- package/dist/MetricsGrid.d.ts.map +1 -1
- package/dist/PipelineView.d.ts +21 -5
- package/dist/PipelineView.d.ts.map +1 -1
- package/dist/RegressionTest.d.ts.map +1 -1
- package/dist/SystemStatusIndicator.d.ts +9 -8
- package/dist/SystemStatusIndicator.d.ts.map +1 -1
- package/dist/TestResult.d.ts.map +1 -1
- package/dist/TestRunner.d.ts.map +1 -1
- package/dist/WebhookLogger.d.ts.map +1 -1
- package/dist/WorkflowBuilder.d.ts.map +1 -1
- package/dist/WorkflowTemplate.d.ts.map +1 -1
- package/dist/XmlParser.d.ts.map +1 -1
- package/dist/{index.cjs.js → index.cjs} +634 -614
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +6 -27
- package/dist/index.d.ts.map +1 -1
- package/dist/{index.esm.js → index.mjs} +637 -617
- package/dist/index.mjs.map +1 -0
- package/package.json +8 -15
- package/src/AlertDialog.tsx +21 -16
- package/src/ApiPlayground.tsx +7 -3
- package/src/ApiReference.tsx +6 -2
- package/src/AuditLog.tsx +244 -21
- package/src/BodyMetrics.tsx +6 -2
- package/src/BuildLog.tsx +132 -26
- package/src/ChangelogDisplay.tsx +6 -2
- package/src/CodePlayground.tsx +7 -3
- package/src/ConflictResolver.tsx +7 -3
- package/src/DealPipeline.tsx +6 -2
- package/src/DeploymentStatus.tsx +159 -25
- package/src/DriverLog.tsx +4 -2
- package/src/MemoryUsage.tsx +6 -2
- package/src/MetricsGrid.tsx +99 -94
- package/src/PipelineView.tsx +225 -26
- package/src/RegressionTest.tsx +6 -2
- package/src/SystemStatusIndicator.tsx +70 -47
- package/src/TestResult.tsx +6 -2
- package/src/TestRunner.tsx +7 -3
- package/src/WebhookLogger.tsx +6 -2
- package/src/WorkflowBuilder.tsx +7 -3
- package/src/WorkflowTemplate.tsx +7 -3
- package/src/XmlParser.tsx +4 -2
- package/src/index.ts +41 -30
- package/src/nativewind.d.ts +3 -0
- package/dist/index.cjs.js.map +0 -1
- package/dist/index.esm.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import require$$0 from "react";
|
|
2
|
-
import {
|
|
3
|
-
import { cn } from "@sudobility/components-rn";
|
|
2
|
+
import { View, Text, Pressable, ScrollView } from "react-native";
|
|
3
|
+
import { Card, cn } from "@sudobility/components-rn";
|
|
4
4
|
var jsxRuntime = { exports: {} };
|
|
5
5
|
var reactJsxRuntime_production_min = {};
|
|
6
6
|
/**
|
|
@@ -929,665 +929,685 @@ function requireJsxRuntime() {
|
|
|
929
929
|
return jsxRuntime.exports;
|
|
930
930
|
}
|
|
931
931
|
var jsxRuntimeExports = requireJsxRuntime();
|
|
932
|
-
const
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
},
|
|
938
|
-
danger: {
|
|
939
|
-
iconBg: "bg-red-100 dark:bg-red-900/30",
|
|
940
|
-
icon: "text-red-600 dark:text-red-400",
|
|
941
|
-
button: "bg-red-600 active:bg-red-700"
|
|
932
|
+
const statusConfig$1 = {
|
|
933
|
+
operational: {
|
|
934
|
+
color: "bg-green-500",
|
|
935
|
+
darkColor: "dark:bg-green-400",
|
|
936
|
+
label: "Operational"
|
|
942
937
|
},
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
938
|
+
degraded: {
|
|
939
|
+
color: "bg-yellow-500",
|
|
940
|
+
darkColor: "dark:bg-yellow-400",
|
|
941
|
+
label: "Degraded"
|
|
947
942
|
},
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
943
|
+
"major-outage": {
|
|
944
|
+
color: "bg-red-500",
|
|
945
|
+
darkColor: "dark:bg-red-400",
|
|
946
|
+
label: "Major Outage"
|
|
952
947
|
}
|
|
953
948
|
};
|
|
954
|
-
const
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
warning: "⚠️",
|
|
958
|
-
success: "✓"
|
|
959
|
-
};
|
|
960
|
-
const AlertDialog = ({
|
|
961
|
-
isOpen,
|
|
962
|
-
onClose,
|
|
963
|
-
title,
|
|
949
|
+
const SystemStatusIndicator = ({
|
|
950
|
+
status,
|
|
951
|
+
systemName,
|
|
964
952
|
description,
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
variant = "default",
|
|
969
|
-
showCancel = true,
|
|
970
|
-
confirmDisabled = false,
|
|
971
|
-
loading = false,
|
|
972
|
-
className,
|
|
973
|
-
...props
|
|
953
|
+
lastChecked,
|
|
954
|
+
onPress,
|
|
955
|
+
className
|
|
974
956
|
}) => {
|
|
975
|
-
const
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
};
|
|
980
|
-
const styles = variantClasses[variant];
|
|
981
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
982
|
-
Modal,
|
|
983
|
-
{
|
|
984
|
-
visible: isOpen,
|
|
985
|
-
transparent: true,
|
|
986
|
-
animationType: "fade",
|
|
987
|
-
onRequestClose: onClose,
|
|
988
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "flex-1 justify-center items-center bg-black/50 p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
957
|
+
const config = statusConfig$1[status];
|
|
958
|
+
const content = /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: cn("p-4", className), children: [
|
|
959
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center", children: [
|
|
960
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
989
961
|
View,
|
|
990
962
|
{
|
|
991
963
|
className: cn(
|
|
992
|
-
"w-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
children: [
|
|
997
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "p-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-start gap-4", children: [
|
|
998
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
999
|
-
View,
|
|
1000
|
-
{
|
|
1001
|
-
className: cn(
|
|
1002
|
-
"w-12 h-12 rounded-full items-center justify-center",
|
|
1003
|
-
styles.iconBg
|
|
1004
|
-
),
|
|
1005
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: cn("text-xl", styles.icon), children: variantIcons[variant] })
|
|
1006
|
-
}
|
|
1007
|
-
),
|
|
1008
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-1", children: [
|
|
1009
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-lg font-semibold text-gray-900 dark:text-white mb-2", children: typeof title === "string" ? title : null }),
|
|
1010
|
-
typeof title !== "string" && title,
|
|
1011
|
-
description && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm text-gray-600 dark:text-gray-400", children: typeof description === "string" ? description : null }),
|
|
1012
|
-
typeof description !== "string" && description
|
|
1013
|
-
] })
|
|
1014
|
-
] }) }),
|
|
1015
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row gap-3 px-6 py-4 bg-gray-50 dark:bg-gray-800/50 rounded-b-lg", children: [
|
|
1016
|
-
showCancel && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1017
|
-
Pressable,
|
|
1018
|
-
{
|
|
1019
|
-
onPress: onClose,
|
|
1020
|
-
disabled: loading,
|
|
1021
|
-
accessibilityRole: "button",
|
|
1022
|
-
className: cn(
|
|
1023
|
-
"flex-1 px-4 py-2 rounded-md border",
|
|
1024
|
-
"bg-white dark:bg-gray-700",
|
|
1025
|
-
"border-gray-300 dark:border-gray-600",
|
|
1026
|
-
loading && "opacity-50"
|
|
1027
|
-
),
|
|
1028
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm font-medium text-center text-gray-700 dark:text-gray-300", children: cancelLabel })
|
|
1029
|
-
}
|
|
1030
|
-
),
|
|
1031
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1032
|
-
Pressable,
|
|
1033
|
-
{
|
|
1034
|
-
onPress: handleConfirm,
|
|
1035
|
-
disabled: confirmDisabled || loading,
|
|
1036
|
-
accessibilityRole: "button",
|
|
1037
|
-
className: cn(
|
|
1038
|
-
"flex-1 px-4 py-2 rounded-md",
|
|
1039
|
-
styles.button,
|
|
1040
|
-
(confirmDisabled || loading) && "opacity-50"
|
|
1041
|
-
),
|
|
1042
|
-
children: loading ? /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center justify-center gap-2", children: [
|
|
1043
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(ActivityIndicator, { size: "small", color: "white" }),
|
|
1044
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm font-medium text-white", children: "Loading..." })
|
|
1045
|
-
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm font-medium text-center text-white", children: confirmLabel })
|
|
1046
|
-
}
|
|
1047
|
-
)
|
|
1048
|
-
] })
|
|
1049
|
-
]
|
|
964
|
+
"w-3 h-3 rounded-full mr-3",
|
|
965
|
+
config.color,
|
|
966
|
+
config.darkColor
|
|
967
|
+
)
|
|
1050
968
|
}
|
|
1051
|
-
)
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
className:
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
)
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
);
|
|
1077
|
-
const ApiReference = ({
|
|
1078
|
-
className,
|
|
1079
|
-
children,
|
|
1080
|
-
disabled,
|
|
1081
|
-
...props
|
|
1082
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1083
|
-
View,
|
|
1084
|
-
{
|
|
1085
|
-
className: cn(
|
|
1086
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1087
|
-
disabled && "opacity-50",
|
|
1088
|
-
className
|
|
1089
|
-
),
|
|
1090
|
-
accessibilityLabel: "API Reference",
|
|
1091
|
-
...props,
|
|
1092
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "ApiReference Component" })
|
|
1093
|
-
}
|
|
1094
|
-
);
|
|
1095
|
-
const AuditLog = ({
|
|
1096
|
-
className,
|
|
1097
|
-
children,
|
|
1098
|
-
disabled,
|
|
1099
|
-
...props
|
|
1100
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1101
|
-
View,
|
|
1102
|
-
{
|
|
1103
|
-
className: cn(
|
|
1104
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1105
|
-
disabled && "opacity-50",
|
|
1106
|
-
className
|
|
1107
|
-
),
|
|
1108
|
-
accessibilityLabel: "Audit Log",
|
|
1109
|
-
...props,
|
|
1110
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "AuditLog Component" })
|
|
1111
|
-
}
|
|
1112
|
-
);
|
|
1113
|
-
const BodyMetrics = ({
|
|
1114
|
-
className,
|
|
1115
|
-
children,
|
|
1116
|
-
disabled,
|
|
1117
|
-
...props
|
|
1118
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1119
|
-
View,
|
|
1120
|
-
{
|
|
1121
|
-
className: cn(
|
|
1122
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1123
|
-
disabled && "opacity-50",
|
|
1124
|
-
className
|
|
1125
|
-
),
|
|
1126
|
-
accessibilityLabel: "Body Metrics",
|
|
1127
|
-
...props,
|
|
1128
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "BodyMetrics Component" })
|
|
1129
|
-
}
|
|
1130
|
-
);
|
|
1131
|
-
const BuildLog = ({
|
|
1132
|
-
className,
|
|
1133
|
-
children,
|
|
1134
|
-
disabled = false,
|
|
1135
|
-
onPress,
|
|
1136
|
-
...props
|
|
1137
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1138
|
-
Pressable,
|
|
1139
|
-
{
|
|
1140
|
-
onPress: disabled ? void 0 : onPress,
|
|
1141
|
-
disabled,
|
|
1142
|
-
accessibilityRole: "button",
|
|
1143
|
-
accessibilityLabel: "Build Log",
|
|
1144
|
-
className: cn(
|
|
1145
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1146
|
-
disabled && "opacity-50",
|
|
1147
|
-
className
|
|
1148
|
-
),
|
|
1149
|
-
...props,
|
|
1150
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "BuildLog Component" })
|
|
1151
|
-
}
|
|
1152
|
-
);
|
|
1153
|
-
const ChangelogDisplay = ({
|
|
1154
|
-
className,
|
|
1155
|
-
children,
|
|
1156
|
-
disabled,
|
|
1157
|
-
...props
|
|
1158
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1159
|
-
View,
|
|
1160
|
-
{
|
|
1161
|
-
className: cn(
|
|
1162
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1163
|
-
disabled && "opacity-50",
|
|
1164
|
-
className
|
|
1165
|
-
),
|
|
1166
|
-
accessibilityLabel: "Changelog Display",
|
|
1167
|
-
...props,
|
|
1168
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "ChangelogDisplay Component" })
|
|
1169
|
-
}
|
|
1170
|
-
);
|
|
1171
|
-
const CodePlayground = ({
|
|
1172
|
-
className,
|
|
1173
|
-
children,
|
|
1174
|
-
disabled = false,
|
|
1175
|
-
onPress,
|
|
1176
|
-
...props
|
|
1177
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1178
|
-
Pressable,
|
|
1179
|
-
{
|
|
1180
|
-
onPress: disabled ? void 0 : onPress,
|
|
1181
|
-
disabled,
|
|
1182
|
-
accessibilityRole: "button",
|
|
1183
|
-
accessibilityLabel: "Code Playground",
|
|
1184
|
-
className: cn(
|
|
1185
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1186
|
-
disabled && "opacity-50",
|
|
1187
|
-
className
|
|
1188
|
-
),
|
|
1189
|
-
...props,
|
|
1190
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "CodePlayground Component" })
|
|
1191
|
-
}
|
|
1192
|
-
);
|
|
1193
|
-
const ConflictResolver = ({
|
|
1194
|
-
className,
|
|
1195
|
-
children,
|
|
1196
|
-
disabled = false,
|
|
1197
|
-
onPress,
|
|
1198
|
-
...props
|
|
1199
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1200
|
-
Pressable,
|
|
1201
|
-
{
|
|
1202
|
-
onPress: disabled ? void 0 : onPress,
|
|
1203
|
-
disabled,
|
|
1204
|
-
accessibilityRole: "button",
|
|
1205
|
-
accessibilityLabel: "Conflict Resolver",
|
|
1206
|
-
className: cn(
|
|
1207
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1208
|
-
disabled && "opacity-50",
|
|
1209
|
-
className
|
|
1210
|
-
),
|
|
1211
|
-
...props,
|
|
1212
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "ConflictResolver Component" })
|
|
969
|
+
),
|
|
970
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-1", children: [
|
|
971
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: systemName }),
|
|
972
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
973
|
+
Text,
|
|
974
|
+
{
|
|
975
|
+
className: cn(
|
|
976
|
+
"text-sm",
|
|
977
|
+
status === "operational" && "text-green-600 dark:text-green-400",
|
|
978
|
+
status === "degraded" && "text-yellow-600 dark:text-yellow-400",
|
|
979
|
+
status === "major-outage" && "text-red-600 dark:text-red-400"
|
|
980
|
+
),
|
|
981
|
+
children: config.label
|
|
982
|
+
}
|
|
983
|
+
)
|
|
984
|
+
] })
|
|
985
|
+
] }),
|
|
986
|
+
description && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "mt-2 text-sm text-gray-600 dark:text-gray-400", children: description }),
|
|
987
|
+
lastChecked && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "mt-2 text-xs text-gray-500 dark:text-gray-500", children: [
|
|
988
|
+
"Last checked: ",
|
|
989
|
+
lastChecked.toLocaleString()
|
|
990
|
+
] })
|
|
991
|
+
] });
|
|
992
|
+
if (onPress) {
|
|
993
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Pressable, { onPress, accessibilityRole: "button", children: content });
|
|
1213
994
|
}
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
995
|
+
return content;
|
|
996
|
+
};
|
|
997
|
+
const stateConfig = {
|
|
998
|
+
pending: {
|
|
999
|
+
color: "text-gray-600 dark:text-gray-400",
|
|
1000
|
+
bgColor: "bg-gray-100",
|
|
1001
|
+
darkBgColor: "dark:bg-gray-800",
|
|
1002
|
+
label: "Pending",
|
|
1003
|
+
icon: "⏳"
|
|
1004
|
+
},
|
|
1005
|
+
building: {
|
|
1006
|
+
color: "text-blue-600 dark:text-blue-400",
|
|
1007
|
+
bgColor: "bg-blue-100",
|
|
1008
|
+
darkBgColor: "dark:bg-blue-900",
|
|
1009
|
+
label: "Building",
|
|
1010
|
+
icon: "🔨"
|
|
1011
|
+
},
|
|
1012
|
+
deploying: {
|
|
1013
|
+
color: "text-purple-600 dark:text-purple-400",
|
|
1014
|
+
bgColor: "bg-purple-100",
|
|
1015
|
+
darkBgColor: "dark:bg-purple-900",
|
|
1016
|
+
label: "Deploying",
|
|
1017
|
+
icon: "🚀"
|
|
1018
|
+
},
|
|
1019
|
+
success: {
|
|
1020
|
+
color: "text-green-600 dark:text-green-400",
|
|
1021
|
+
bgColor: "bg-green-100",
|
|
1022
|
+
darkBgColor: "dark:bg-green-900",
|
|
1023
|
+
label: "Success",
|
|
1024
|
+
icon: "✓"
|
|
1025
|
+
},
|
|
1026
|
+
failed: {
|
|
1027
|
+
color: "text-red-600 dark:text-red-400",
|
|
1028
|
+
bgColor: "bg-red-100",
|
|
1029
|
+
darkBgColor: "dark:bg-red-900",
|
|
1030
|
+
label: "Failed",
|
|
1031
|
+
icon: "✗"
|
|
1032
|
+
},
|
|
1033
|
+
cancelled: {
|
|
1034
|
+
color: "text-orange-600 dark:text-orange-400",
|
|
1035
|
+
bgColor: "bg-orange-100",
|
|
1036
|
+
darkBgColor: "dark:bg-orange-900",
|
|
1037
|
+
label: "Cancelled",
|
|
1038
|
+
icon: "⊘"
|
|
1231
1039
|
}
|
|
1232
|
-
|
|
1040
|
+
};
|
|
1041
|
+
const formatDuration$1 = (seconds) => {
|
|
1042
|
+
if (seconds < 60) return `${seconds}s`;
|
|
1043
|
+
const minutes = Math.floor(seconds / 60);
|
|
1044
|
+
const remainingSeconds = seconds % 60;
|
|
1045
|
+
if (minutes < 60) return `${minutes}m ${remainingSeconds}s`;
|
|
1046
|
+
const hours = Math.floor(minutes / 60);
|
|
1047
|
+
const remainingMinutes = minutes % 60;
|
|
1048
|
+
return `${hours}h ${remainingMinutes}m`;
|
|
1049
|
+
};
|
|
1233
1050
|
const DeploymentStatus = ({
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1051
|
+
state,
|
|
1052
|
+
environment,
|
|
1053
|
+
version,
|
|
1054
|
+
timestamp,
|
|
1055
|
+
commitHash,
|
|
1056
|
+
commitMessage,
|
|
1057
|
+
duration,
|
|
1237
1058
|
onPress,
|
|
1238
|
-
|
|
1239
|
-
}) =>
|
|
1240
|
-
|
|
1241
|
-
{
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
})
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1265
|
-
disabled && "opacity-50",
|
|
1266
|
-
className
|
|
1267
|
-
),
|
|
1268
|
-
accessibilityLabel: "Driver Log",
|
|
1269
|
-
...props,
|
|
1270
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "DriverLog Component" })
|
|
1271
|
-
}
|
|
1272
|
-
);
|
|
1273
|
-
const MemoryUsage = ({
|
|
1274
|
-
className,
|
|
1275
|
-
children,
|
|
1276
|
-
disabled,
|
|
1277
|
-
...props
|
|
1278
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1279
|
-
View,
|
|
1280
|
-
{
|
|
1281
|
-
className: cn(
|
|
1282
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1283
|
-
disabled && "opacity-50",
|
|
1284
|
-
className
|
|
1285
|
-
),
|
|
1286
|
-
accessibilityLabel: "Memory Usage",
|
|
1287
|
-
...props,
|
|
1288
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "MemoryUsage Component" })
|
|
1289
|
-
}
|
|
1290
|
-
);
|
|
1291
|
-
const colorClasses = {
|
|
1292
|
-
blue: "text-blue-600 dark:text-blue-400",
|
|
1293
|
-
green: "text-green-600 dark:text-green-400",
|
|
1294
|
-
purple: "text-purple-600 dark:text-purple-400",
|
|
1295
|
-
orange: "text-orange-600 dark:text-orange-400",
|
|
1296
|
-
pink: "text-pink-600 dark:text-pink-400",
|
|
1297
|
-
gray: "text-gray-600 dark:text-gray-400"
|
|
1298
|
-
};
|
|
1299
|
-
const MetricCard = ({ metric }) => {
|
|
1300
|
-
const colorClass = metric.color ? colorClasses[metric.color] : colorClasses.blue;
|
|
1301
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "bg-white dark:bg-gray-800 rounded-xl p-6 border border-gray-200 dark:border-gray-700 items-center mb-4 mx-2", children: [
|
|
1302
|
-
metric.icon && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: cn("mb-4", colorClass), children: metric.icon }),
|
|
1303
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "gap-2 items-center", children: [
|
|
1304
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: cn("text-3xl font-bold", colorClass), children: metric.value }),
|
|
1305
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-600 dark:text-gray-400 font-medium", children: metric.label }),
|
|
1306
|
-
metric.trend && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1059
|
+
className
|
|
1060
|
+
}) => {
|
|
1061
|
+
const config = stateConfig[state];
|
|
1062
|
+
const content = /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: cn("p-4", className), children: [
|
|
1063
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "flex-row items-start justify-between", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-1", children: [
|
|
1064
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center", children: [
|
|
1065
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1066
|
+
View,
|
|
1067
|
+
{
|
|
1068
|
+
className: cn(
|
|
1069
|
+
"px-2 py-1 rounded-md mr-2",
|
|
1070
|
+
config.bgColor,
|
|
1071
|
+
config.darkBgColor
|
|
1072
|
+
),
|
|
1073
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: cn("text-xs font-medium", config.color), children: [
|
|
1074
|
+
config.icon,
|
|
1075
|
+
" ",
|
|
1076
|
+
config.label
|
|
1077
|
+
] })
|
|
1078
|
+
}
|
|
1079
|
+
),
|
|
1080
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "bg-gray-100 dark:bg-gray-800 px-2 py-1 rounded-md", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs font-medium text-gray-700 dark:text-gray-300", children: environment }) })
|
|
1081
|
+
] }),
|
|
1082
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "mt-2 text-base font-semibold text-gray-900 dark:text-gray-100", children: version }),
|
|
1083
|
+
commitHash && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "mt-1 text-sm font-mono text-gray-600 dark:text-gray-400", children: commitHash.substring(0, 7) }),
|
|
1084
|
+
commitMessage && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1307
1085
|
Text,
|
|
1308
1086
|
{
|
|
1309
|
-
className:
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
),
|
|
1313
|
-
children: [
|
|
1314
|
-
metric.trend.direction === "up" ? "↑" : "↓",
|
|
1315
|
-
" ",
|
|
1316
|
-
metric.trend.value
|
|
1317
|
-
]
|
|
1087
|
+
className: "mt-1 text-sm text-gray-600 dark:text-gray-400",
|
|
1088
|
+
numberOfLines: 2,
|
|
1089
|
+
children: commitMessage
|
|
1318
1090
|
}
|
|
1319
1091
|
)
|
|
1092
|
+
] }) }),
|
|
1093
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center justify-between mt-3 pt-3 border-t border-gray-200 dark:border-gray-700", children: [
|
|
1094
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: timestamp.toLocaleString() }),
|
|
1095
|
+
duration !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: [
|
|
1096
|
+
"Duration: ",
|
|
1097
|
+
formatDuration$1(duration)
|
|
1098
|
+
] })
|
|
1320
1099
|
] })
|
|
1321
1100
|
] });
|
|
1101
|
+
if (onPress) {
|
|
1102
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Pressable, { onPress, accessibilityRole: "button", children: content });
|
|
1103
|
+
}
|
|
1104
|
+
return content;
|
|
1322
1105
|
};
|
|
1323
|
-
const
|
|
1106
|
+
const levelConfig = {
|
|
1107
|
+
info: {
|
|
1108
|
+
color: "text-blue-600 dark:text-blue-400",
|
|
1109
|
+
bgColor: "bg-blue-50",
|
|
1110
|
+
darkBgColor: "dark:bg-blue-950",
|
|
1111
|
+
prefix: "INFO"
|
|
1112
|
+
},
|
|
1113
|
+
warn: {
|
|
1114
|
+
color: "text-yellow-600 dark:text-yellow-400",
|
|
1115
|
+
bgColor: "bg-yellow-50",
|
|
1116
|
+
darkBgColor: "dark:bg-yellow-950",
|
|
1117
|
+
prefix: "WARN"
|
|
1118
|
+
},
|
|
1119
|
+
error: {
|
|
1120
|
+
color: "text-red-600 dark:text-red-400",
|
|
1121
|
+
bgColor: "bg-red-50",
|
|
1122
|
+
darkBgColor: "dark:bg-red-950",
|
|
1123
|
+
prefix: "ERROR"
|
|
1124
|
+
},
|
|
1125
|
+
debug: {
|
|
1126
|
+
color: "text-gray-600 dark:text-gray-400",
|
|
1127
|
+
bgColor: "bg-gray-50",
|
|
1128
|
+
darkBgColor: "dark:bg-gray-900",
|
|
1129
|
+
prefix: "DEBUG"
|
|
1130
|
+
},
|
|
1131
|
+
success: {
|
|
1132
|
+
color: "text-green-600 dark:text-green-400",
|
|
1133
|
+
bgColor: "bg-green-50",
|
|
1134
|
+
darkBgColor: "dark:bg-green-950",
|
|
1135
|
+
prefix: "SUCCESS"
|
|
1136
|
+
}
|
|
1137
|
+
};
|
|
1138
|
+
const formatTime = (date) => {
|
|
1139
|
+
return date.toLocaleTimeString("en-US", {
|
|
1140
|
+
hour12: false,
|
|
1141
|
+
hour: "2-digit",
|
|
1142
|
+
minute: "2-digit",
|
|
1143
|
+
second: "2-digit"
|
|
1144
|
+
});
|
|
1145
|
+
};
|
|
1146
|
+
const BuildLog = ({
|
|
1147
|
+
entries,
|
|
1324
1148
|
title,
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
className
|
|
1329
|
-
...props
|
|
1149
|
+
maxHeight = 400,
|
|
1150
|
+
showTimestamp = true,
|
|
1151
|
+
showSource = false,
|
|
1152
|
+
className
|
|
1330
1153
|
}) => {
|
|
1331
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1332
|
-
|
|
1333
|
-
title && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-2xl font-bold text-gray-900 dark:text-white mb-4 text-center", children: title }),
|
|
1334
|
-
description && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-lg text-gray-600 dark:text-gray-300 text-center max-w-lg", children: description })
|
|
1335
|
-
] }),
|
|
1154
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: cn("overflow-hidden", className), children: [
|
|
1155
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: title }) }),
|
|
1336
1156
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1337
|
-
|
|
1157
|
+
ScrollView,
|
|
1338
1158
|
{
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1159
|
+
style: { maxHeight },
|
|
1160
|
+
className: "bg-gray-900 dark:bg-black",
|
|
1161
|
+
showsVerticalScrollIndicator: true,
|
|
1162
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "p-3", children: entries.map((entry) => {
|
|
1163
|
+
const config = levelConfig[entry.level];
|
|
1164
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1165
|
+
View,
|
|
1166
|
+
{
|
|
1167
|
+
className: cn(
|
|
1168
|
+
"flex-row flex-wrap py-1 px-2 mb-1 rounded",
|
|
1169
|
+
config.bgColor,
|
|
1170
|
+
config.darkBgColor
|
|
1171
|
+
),
|
|
1172
|
+
children: [
|
|
1173
|
+
showTimestamp && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "font-mono text-xs text-gray-500 dark:text-gray-500 mr-2", children: [
|
|
1174
|
+
"[",
|
|
1175
|
+
formatTime(entry.timestamp),
|
|
1176
|
+
"]"
|
|
1177
|
+
] }),
|
|
1178
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
1179
|
+
Text,
|
|
1180
|
+
{
|
|
1181
|
+
className: cn(
|
|
1182
|
+
"font-mono text-xs font-bold mr-2",
|
|
1183
|
+
config.color
|
|
1184
|
+
),
|
|
1185
|
+
children: [
|
|
1186
|
+
"[",
|
|
1187
|
+
config.prefix,
|
|
1188
|
+
"]"
|
|
1189
|
+
]
|
|
1190
|
+
}
|
|
1191
|
+
),
|
|
1192
|
+
showSource && entry.source && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "font-mono text-xs text-gray-400 dark:text-gray-600 mr-2", children: [
|
|
1193
|
+
"[",
|
|
1194
|
+
entry.source,
|
|
1195
|
+
"]"
|
|
1196
|
+
] }),
|
|
1197
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "font-mono text-xs text-gray-200 dark:text-gray-300 flex-1", children: entry.message })
|
|
1198
|
+
]
|
|
1199
|
+
},
|
|
1200
|
+
entry.id
|
|
1201
|
+
);
|
|
1202
|
+
}) })
|
|
1344
1203
|
}
|
|
1345
|
-
)
|
|
1204
|
+
),
|
|
1205
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-2 bg-gray-800 dark:bg-gray-950 border-t border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-400 dark:text-gray-500", children: [
|
|
1206
|
+
entries.length,
|
|
1207
|
+
" log entries"
|
|
1208
|
+
] }) })
|
|
1346
1209
|
] });
|
|
1347
1210
|
};
|
|
1348
|
-
const
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
disabled = false,
|
|
1352
|
-
onPress,
|
|
1353
|
-
...props
|
|
1354
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1355
|
-
Pressable,
|
|
1356
|
-
{
|
|
1357
|
-
onPress: disabled ? void 0 : onPress,
|
|
1358
|
-
disabled,
|
|
1359
|
-
accessibilityRole: "button",
|
|
1360
|
-
accessibilityLabel: "Pipeline View",
|
|
1361
|
-
className: cn(
|
|
1362
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1363
|
-
disabled && "opacity-50",
|
|
1364
|
-
className
|
|
1365
|
-
),
|
|
1366
|
-
...props,
|
|
1367
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "PipelineView Component" })
|
|
1368
|
-
}
|
|
1369
|
-
);
|
|
1370
|
-
const RegressionTest = ({
|
|
1371
|
-
className,
|
|
1372
|
-
children,
|
|
1373
|
-
disabled,
|
|
1374
|
-
...props
|
|
1375
|
-
}) => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1376
|
-
View,
|
|
1377
|
-
{
|
|
1378
|
-
className: cn(
|
|
1379
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1380
|
-
disabled && "opacity-50",
|
|
1381
|
-
className
|
|
1382
|
-
),
|
|
1383
|
-
accessibilityLabel: "Regression Test",
|
|
1384
|
-
...props,
|
|
1385
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "RegressionTest Component" })
|
|
1386
|
-
}
|
|
1387
|
-
);
|
|
1388
|
-
const statusConfig = {
|
|
1389
|
-
operational: {
|
|
1390
|
-
color: "bg-green-500",
|
|
1391
|
-
textColor: "text-green-700 dark:text-green-400",
|
|
1392
|
-
label: "Operational"
|
|
1393
|
-
},
|
|
1394
|
-
degraded: {
|
|
1395
|
-
color: "bg-yellow-500",
|
|
1396
|
-
textColor: "text-yellow-700 dark:text-yellow-400",
|
|
1397
|
-
label: "Degraded Performance"
|
|
1398
|
-
},
|
|
1399
|
-
partial: {
|
|
1400
|
-
color: "bg-orange-500",
|
|
1401
|
-
textColor: "text-orange-700 dark:text-orange-400",
|
|
1402
|
-
label: "Partial Outage"
|
|
1403
|
-
},
|
|
1404
|
-
major: {
|
|
1405
|
-
color: "bg-red-500",
|
|
1406
|
-
textColor: "text-red-700 dark:text-red-400",
|
|
1407
|
-
label: "Major Outage"
|
|
1408
|
-
},
|
|
1409
|
-
maintenance: {
|
|
1410
|
-
color: "bg-blue-500",
|
|
1411
|
-
textColor: "text-blue-700 dark:text-blue-400",
|
|
1412
|
-
label: "Under Maintenance"
|
|
1413
|
-
}
|
|
1211
|
+
const formatChange = (change) => {
|
|
1212
|
+
const sign = change >= 0 ? "+" : "";
|
|
1213
|
+
return sign + change.toFixed(1) + "%";
|
|
1414
1214
|
};
|
|
1415
|
-
const
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
className
|
|
1420
|
-
...props
|
|
1215
|
+
const MetricsGrid = ({
|
|
1216
|
+
metrics,
|
|
1217
|
+
columns = 2,
|
|
1218
|
+
onMetricPress,
|
|
1219
|
+
className
|
|
1421
1220
|
}) => {
|
|
1422
|
-
const
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
children: [
|
|
1431
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
1432
|
-
|
|
1433
|
-
|
|
1221
|
+
const columnWidthClass = {
|
|
1222
|
+
1: "w-full",
|
|
1223
|
+
2: "w-1/2",
|
|
1224
|
+
3: "w-1/3",
|
|
1225
|
+
4: "w-1/4"
|
|
1226
|
+
}[columns];
|
|
1227
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: cn("flex-row flex-wrap -m-1", className), children: metrics.map((metric) => {
|
|
1228
|
+
const content = /* @__PURE__ */ jsxRuntimeExports.jsx(Card, { className: "p-4 m-1 flex-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-start justify-between", children: [
|
|
1229
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-1", children: [
|
|
1230
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm text-gray-600 dark:text-gray-400 mb-1", children: metric.label }),
|
|
1231
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-baseline", children: [
|
|
1232
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-2xl font-bold text-gray-900 dark:text-gray-100", children: metric.value }),
|
|
1233
|
+
metric.unit && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm text-gray-500 dark:text-gray-500 ml-1", children: metric.unit })
|
|
1234
|
+
] }),
|
|
1235
|
+
metric.change !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center mt-2", children: [
|
|
1236
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1434
1237
|
View,
|
|
1435
1238
|
{
|
|
1436
1239
|
className: cn(
|
|
1437
|
-
"
|
|
1438
|
-
|
|
1240
|
+
"px-1.5 py-0.5 rounded",
|
|
1241
|
+
metric.change >= 0 ? "bg-green-100 dark:bg-green-900" : "bg-red-100 dark:bg-red-900"
|
|
1242
|
+
),
|
|
1243
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1244
|
+
Text,
|
|
1245
|
+
{
|
|
1246
|
+
className: cn(
|
|
1247
|
+
"text-xs font-medium",
|
|
1248
|
+
metric.change >= 0 ? "text-green-700 dark:text-green-300" : "text-red-700 dark:text-red-300"
|
|
1249
|
+
),
|
|
1250
|
+
children: formatChange(metric.change)
|
|
1251
|
+
}
|
|
1439
1252
|
)
|
|
1440
1253
|
}
|
|
1441
|
-
)
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
]
|
|
1254
|
+
),
|
|
1255
|
+
metric.changeLabel && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs text-gray-500 dark:text-gray-500 ml-2", children: metric.changeLabel })
|
|
1256
|
+
] })
|
|
1257
|
+
] }),
|
|
1258
|
+
metric.icon && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "ml-2", children: metric.icon })
|
|
1259
|
+
] }) });
|
|
1260
|
+
if (onMetricPress) {
|
|
1261
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: columnWidthClass, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1262
|
+
Pressable,
|
|
1263
|
+
{
|
|
1264
|
+
onPress: () => onMetricPress(metric),
|
|
1265
|
+
accessibilityRole: "button",
|
|
1266
|
+
accessibilityLabel: metric.label + ": " + metric.value + (metric.unit || ""),
|
|
1267
|
+
children: content
|
|
1268
|
+
}
|
|
1269
|
+
) }, metric.id);
|
|
1445
1270
|
}
|
|
1446
|
-
|
|
1271
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: columnWidthClass, children: content }, metric.id);
|
|
1272
|
+
}) });
|
|
1447
1273
|
};
|
|
1448
|
-
const
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
{
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
"p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700",
|
|
1521
|
-
disabled && "opacity-50",
|
|
1522
|
-
className
|
|
1523
|
-
),
|
|
1524
|
-
...props,
|
|
1525
|
-
children: children || /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-gray-900 dark:text-white", children: "WorkflowBuilder Component" })
|
|
1274
|
+
const actionConfig = {
|
|
1275
|
+
create: {
|
|
1276
|
+
color: "text-green-700 dark:text-green-300",
|
|
1277
|
+
bgColor: "bg-green-100",
|
|
1278
|
+
darkBgColor: "dark:bg-green-900",
|
|
1279
|
+
icon: "+"
|
|
1280
|
+
},
|
|
1281
|
+
update: {
|
|
1282
|
+
color: "text-blue-700 dark:text-blue-300",
|
|
1283
|
+
bgColor: "bg-blue-100",
|
|
1284
|
+
darkBgColor: "dark:bg-blue-900",
|
|
1285
|
+
icon: "~"
|
|
1286
|
+
},
|
|
1287
|
+
delete: {
|
|
1288
|
+
color: "text-red-700 dark:text-red-300",
|
|
1289
|
+
bgColor: "bg-red-100",
|
|
1290
|
+
darkBgColor: "dark:bg-red-900",
|
|
1291
|
+
icon: "-"
|
|
1292
|
+
},
|
|
1293
|
+
login: {
|
|
1294
|
+
color: "text-purple-700 dark:text-purple-300",
|
|
1295
|
+
bgColor: "bg-purple-100",
|
|
1296
|
+
darkBgColor: "dark:bg-purple-900",
|
|
1297
|
+
icon: "→"
|
|
1298
|
+
},
|
|
1299
|
+
logout: {
|
|
1300
|
+
color: "text-gray-700 dark:text-gray-300",
|
|
1301
|
+
bgColor: "bg-gray-100",
|
|
1302
|
+
darkBgColor: "dark:bg-gray-800",
|
|
1303
|
+
icon: "←"
|
|
1304
|
+
},
|
|
1305
|
+
access: {
|
|
1306
|
+
color: "text-cyan-700 dark:text-cyan-300",
|
|
1307
|
+
bgColor: "bg-cyan-100",
|
|
1308
|
+
darkBgColor: "dark:bg-cyan-900",
|
|
1309
|
+
icon: "◉"
|
|
1310
|
+
},
|
|
1311
|
+
export: {
|
|
1312
|
+
color: "text-orange-700 dark:text-orange-300",
|
|
1313
|
+
bgColor: "bg-orange-100",
|
|
1314
|
+
darkBgColor: "dark:bg-orange-900",
|
|
1315
|
+
icon: "↑"
|
|
1316
|
+
},
|
|
1317
|
+
import: {
|
|
1318
|
+
color: "text-teal-700 dark:text-teal-300",
|
|
1319
|
+
bgColor: "bg-teal-100",
|
|
1320
|
+
darkBgColor: "dark:bg-teal-900",
|
|
1321
|
+
icon: "↓"
|
|
1322
|
+
},
|
|
1323
|
+
approve: {
|
|
1324
|
+
color: "text-emerald-700 dark:text-emerald-300",
|
|
1325
|
+
bgColor: "bg-emerald-100",
|
|
1326
|
+
darkBgColor: "dark:bg-emerald-900",
|
|
1327
|
+
icon: "✓"
|
|
1328
|
+
},
|
|
1329
|
+
reject: {
|
|
1330
|
+
color: "text-rose-700 dark:text-rose-300",
|
|
1331
|
+
bgColor: "bg-rose-100",
|
|
1332
|
+
darkBgColor: "dark:bg-rose-900",
|
|
1333
|
+
icon: "✗"
|
|
1334
|
+
},
|
|
1335
|
+
deploy: {
|
|
1336
|
+
color: "text-indigo-700 dark:text-indigo-300",
|
|
1337
|
+
bgColor: "bg-indigo-100",
|
|
1338
|
+
darkBgColor: "dark:bg-indigo-900",
|
|
1339
|
+
icon: "▲"
|
|
1340
|
+
},
|
|
1341
|
+
rollback: {
|
|
1342
|
+
color: "text-amber-700 dark:text-amber-300",
|
|
1343
|
+
bgColor: "bg-amber-100",
|
|
1344
|
+
darkBgColor: "dark:bg-amber-900",
|
|
1345
|
+
icon: "↺"
|
|
1526
1346
|
}
|
|
1527
|
-
|
|
1528
|
-
const
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
{
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1347
|
+
};
|
|
1348
|
+
const formatTimestamp = (date) => {
|
|
1349
|
+
const now = /* @__PURE__ */ new Date();
|
|
1350
|
+
const diffMs = now.getTime() - date.getTime();
|
|
1351
|
+
const diffMins = Math.floor(diffMs / 6e4);
|
|
1352
|
+
const diffHours = Math.floor(diffMs / 36e5);
|
|
1353
|
+
const diffDays = Math.floor(diffMs / 864e5);
|
|
1354
|
+
if (diffMins < 1) return "Just now";
|
|
1355
|
+
if (diffMins < 60) return `${diffMins}m ago`;
|
|
1356
|
+
if (diffHours < 24) return `${diffHours}h ago`;
|
|
1357
|
+
if (diffDays < 7) return `${diffDays}d ago`;
|
|
1358
|
+
return date.toLocaleDateString();
|
|
1359
|
+
};
|
|
1360
|
+
const AuditLog = ({
|
|
1361
|
+
entries,
|
|
1362
|
+
title,
|
|
1363
|
+
maxHeight = 500,
|
|
1364
|
+
onEntryPress,
|
|
1365
|
+
className
|
|
1366
|
+
}) => {
|
|
1367
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: cn("overflow-hidden", className), children: [
|
|
1368
|
+
title && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: title }) }),
|
|
1369
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(ScrollView, { style: { maxHeight }, showsVerticalScrollIndicator: true, children: entries.map((entry, index) => {
|
|
1370
|
+
const config = actionConfig[entry.action];
|
|
1371
|
+
const isLast = index === entries.length - 1;
|
|
1372
|
+
const content = /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1373
|
+
View,
|
|
1374
|
+
{
|
|
1375
|
+
className: cn(
|
|
1376
|
+
"px-4 py-3",
|
|
1377
|
+
!isLast && "border-b border-gray-100 dark:border-gray-800"
|
|
1378
|
+
),
|
|
1379
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-start", children: [
|
|
1380
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1381
|
+
View,
|
|
1382
|
+
{
|
|
1383
|
+
className: cn(
|
|
1384
|
+
"w-8 h-8 rounded-full items-center justify-center mr-3",
|
|
1385
|
+
config.bgColor,
|
|
1386
|
+
config.darkBgColor
|
|
1387
|
+
),
|
|
1388
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: cn("text-sm font-bold", config.color), children: config.icon })
|
|
1389
|
+
}
|
|
1390
|
+
),
|
|
1391
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-1", children: [
|
|
1392
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center flex-wrap", children: [
|
|
1393
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: entry.actor.name }),
|
|
1394
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-sm text-gray-600 dark:text-gray-400 mx-1", children: [
|
|
1395
|
+
entry.action,
|
|
1396
|
+
"d"
|
|
1397
|
+
] }),
|
|
1398
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-sm font-medium text-gray-900 dark:text-gray-100", children: entry.resource.name })
|
|
1399
|
+
] }),
|
|
1400
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center mt-1", children: [
|
|
1401
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1402
|
+
View,
|
|
1403
|
+
{
|
|
1404
|
+
className: cn(
|
|
1405
|
+
"px-1.5 py-0.5 rounded mr-2",
|
|
1406
|
+
config.bgColor,
|
|
1407
|
+
config.darkBgColor
|
|
1408
|
+
),
|
|
1409
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1410
|
+
Text,
|
|
1411
|
+
{
|
|
1412
|
+
className: cn(
|
|
1413
|
+
"text-xs font-medium uppercase",
|
|
1414
|
+
config.color
|
|
1415
|
+
),
|
|
1416
|
+
children: entry.action
|
|
1417
|
+
}
|
|
1418
|
+
)
|
|
1419
|
+
}
|
|
1420
|
+
),
|
|
1421
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: entry.resource.type })
|
|
1422
|
+
] }),
|
|
1423
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center mt-2", children: [
|
|
1424
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs text-gray-400 dark:text-gray-600", children: formatTimestamp(entry.timestamp) }),
|
|
1425
|
+
entry.ipAddress && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-400 dark:text-gray-600 ml-2", children: [
|
|
1426
|
+
"IP: ",
|
|
1427
|
+
entry.ipAddress
|
|
1428
|
+
] })
|
|
1429
|
+
] })
|
|
1430
|
+
] })
|
|
1431
|
+
] })
|
|
1432
|
+
}
|
|
1433
|
+
);
|
|
1434
|
+
if (onEntryPress) {
|
|
1435
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1436
|
+
Pressable,
|
|
1437
|
+
{
|
|
1438
|
+
onPress: () => onEntryPress(entry),
|
|
1439
|
+
accessibilityRole: "button",
|
|
1440
|
+
children: content
|
|
1441
|
+
},
|
|
1442
|
+
entry.id
|
|
1443
|
+
);
|
|
1444
|
+
}
|
|
1445
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(View, { children: content }, entry.id);
|
|
1446
|
+
}) }),
|
|
1447
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-2 bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: [
|
|
1448
|
+
"Showing ",
|
|
1449
|
+
entries.length,
|
|
1450
|
+
" audit entries"
|
|
1451
|
+
] }) })
|
|
1452
|
+
] });
|
|
1453
|
+
};
|
|
1454
|
+
const statusConfig = {
|
|
1455
|
+
pending: {
|
|
1456
|
+
color: "text-gray-600 dark:text-gray-400",
|
|
1457
|
+
bgColor: "bg-gray-100",
|
|
1458
|
+
darkBgColor: "dark:bg-gray-800",
|
|
1459
|
+
borderColor: "border-gray-300 dark:border-gray-600",
|
|
1460
|
+
icon: "○"
|
|
1461
|
+
},
|
|
1462
|
+
running: {
|
|
1463
|
+
color: "text-blue-600 dark:text-blue-400",
|
|
1464
|
+
bgColor: "bg-blue-100",
|
|
1465
|
+
darkBgColor: "dark:bg-blue-900",
|
|
1466
|
+
borderColor: "border-blue-400 dark:border-blue-500",
|
|
1467
|
+
icon: "◐"
|
|
1468
|
+
},
|
|
1469
|
+
success: {
|
|
1470
|
+
color: "text-green-600 dark:text-green-400",
|
|
1471
|
+
bgColor: "bg-green-100",
|
|
1472
|
+
darkBgColor: "dark:bg-green-900",
|
|
1473
|
+
borderColor: "border-green-400 dark:border-green-500",
|
|
1474
|
+
icon: "●"
|
|
1475
|
+
},
|
|
1476
|
+
failed: {
|
|
1477
|
+
color: "text-red-600 dark:text-red-400",
|
|
1478
|
+
bgColor: "bg-red-100",
|
|
1479
|
+
darkBgColor: "dark:bg-red-900",
|
|
1480
|
+
borderColor: "border-red-400 dark:border-red-500",
|
|
1481
|
+
icon: "✗"
|
|
1482
|
+
},
|
|
1483
|
+
skipped: {
|
|
1484
|
+
color: "text-gray-400 dark:text-gray-600",
|
|
1485
|
+
bgColor: "bg-gray-50",
|
|
1486
|
+
darkBgColor: "dark:bg-gray-900",
|
|
1487
|
+
borderColor: "border-gray-200 dark:border-gray-700",
|
|
1488
|
+
icon: "◌"
|
|
1489
|
+
},
|
|
1490
|
+
cancelled: {
|
|
1491
|
+
color: "text-orange-600 dark:text-orange-400",
|
|
1492
|
+
bgColor: "bg-orange-100",
|
|
1493
|
+
darkBgColor: "dark:bg-orange-900",
|
|
1494
|
+
borderColor: "border-orange-400 dark:border-orange-500",
|
|
1495
|
+
icon: "⊘"
|
|
1548
1496
|
}
|
|
1549
|
-
|
|
1550
|
-
const
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1497
|
+
};
|
|
1498
|
+
const formatDuration = (seconds) => {
|
|
1499
|
+
if (seconds < 60) return `${seconds}s`;
|
|
1500
|
+
const minutes = Math.floor(seconds / 60);
|
|
1501
|
+
const remainingSeconds = seconds % 60;
|
|
1502
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
1503
|
+
};
|
|
1504
|
+
const PipelineView = ({
|
|
1505
|
+
stages,
|
|
1506
|
+
pipelineName,
|
|
1507
|
+
pipelineId,
|
|
1508
|
+
onStagePress,
|
|
1509
|
+
className
|
|
1510
|
+
}) => {
|
|
1511
|
+
const overallStatus = stages.some((s) => s.status === "failed") ? "failed" : stages.some((s) => s.status === "running") ? "running" : stages.every((s) => s.status === "success") ? "success" : stages.every((s) => s.status === "pending") ? "pending" : "running";
|
|
1512
|
+
const overallConfig = statusConfig[overallStatus];
|
|
1513
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Card, { className: cn("overflow-hidden", className), children: [
|
|
1514
|
+
(pipelineName || pipelineId) && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center justify-between", children: [
|
|
1515
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(View, { children: [
|
|
1516
|
+
pipelineName && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-base font-semibold text-gray-900 dark:text-gray-100", children: pipelineName }),
|
|
1517
|
+
pipelineId && /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs font-mono text-gray-500 dark:text-gray-500", children: [
|
|
1518
|
+
"#",
|
|
1519
|
+
pipelineId
|
|
1520
|
+
] })
|
|
1521
|
+
] }),
|
|
1522
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1523
|
+
View,
|
|
1524
|
+
{
|
|
1525
|
+
className: cn(
|
|
1526
|
+
"px-2 py-1 rounded-full",
|
|
1527
|
+
overallConfig.bgColor,
|
|
1528
|
+
overallConfig.darkBgColor
|
|
1529
|
+
),
|
|
1530
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: cn("text-xs font-medium", overallConfig.color), children: [
|
|
1531
|
+
overallConfig.icon,
|
|
1532
|
+
" ",
|
|
1533
|
+
overallStatus.charAt(0).toUpperCase() + overallStatus.slice(1)
|
|
1534
|
+
] })
|
|
1535
|
+
}
|
|
1536
|
+
)
|
|
1537
|
+
] }) }),
|
|
1538
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1539
|
+
ScrollView,
|
|
1540
|
+
{
|
|
1541
|
+
horizontal: true,
|
|
1542
|
+
showsHorizontalScrollIndicator: true,
|
|
1543
|
+
contentContainerStyle: { padding: 16 },
|
|
1544
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "flex-row items-center", children: stages.map((stage, index) => {
|
|
1545
|
+
const config = statusConfig[stage.status];
|
|
1546
|
+
const isLast = index === stages.length - 1;
|
|
1547
|
+
const stageContent = /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "items-center", children: [
|
|
1548
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1549
|
+
View,
|
|
1550
|
+
{
|
|
1551
|
+
className: cn(
|
|
1552
|
+
"w-24 p-3 rounded-lg border-2",
|
|
1553
|
+
config.bgColor,
|
|
1554
|
+
config.darkBgColor,
|
|
1555
|
+
config.borderColor
|
|
1556
|
+
),
|
|
1557
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "items-center", children: [
|
|
1558
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: cn("text-lg", config.color), children: config.icon }),
|
|
1559
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1560
|
+
Text,
|
|
1561
|
+
{
|
|
1562
|
+
className: "text-xs font-medium text-gray-900 dark:text-gray-100 mt-1 text-center",
|
|
1563
|
+
numberOfLines: 2,
|
|
1564
|
+
children: stage.name
|
|
1565
|
+
}
|
|
1566
|
+
),
|
|
1567
|
+
stage.duration !== void 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "text-xs text-gray-500 dark:text-gray-500 mt-1", children: formatDuration(stage.duration) })
|
|
1568
|
+
] })
|
|
1569
|
+
}
|
|
1570
|
+
),
|
|
1571
|
+
stage.jobs && stage.jobs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: [
|
|
1572
|
+
stage.jobs.filter((j) => j.status === "success").length,
|
|
1573
|
+
"/",
|
|
1574
|
+
stage.jobs.length,
|
|
1575
|
+
" jobs"
|
|
1576
|
+
] }) })
|
|
1577
|
+
] });
|
|
1578
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "flex-row items-center", children: [
|
|
1579
|
+
onStagePress ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
1580
|
+
Pressable,
|
|
1581
|
+
{
|
|
1582
|
+
onPress: () => onStagePress(stage),
|
|
1583
|
+
accessibilityRole: "button",
|
|
1584
|
+
accessibilityLabel: `${stage.name} - ${stage.status}`,
|
|
1585
|
+
children: stageContent
|
|
1586
|
+
}
|
|
1587
|
+
) : stageContent,
|
|
1588
|
+
!isLast && /* @__PURE__ */ jsxRuntimeExports.jsxs(View, { className: "mx-2", children: [
|
|
1589
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "w-8 h-0.5 bg-gray-300 dark:bg-gray-600" }),
|
|
1590
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: "absolute -top-2 left-2 text-gray-400 dark:text-gray-600", children: "→" })
|
|
1591
|
+
] })
|
|
1592
|
+
] }, stage.id);
|
|
1593
|
+
}) })
|
|
1594
|
+
}
|
|
1562
1595
|
),
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
)
|
|
1596
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(View, { className: "px-4 py-2 bg-gray-50 dark:bg-gray-900 border-t border-gray-200 dark:border-gray-700", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Text, { className: "text-xs text-gray-500 dark:text-gray-500", children: [
|
|
1597
|
+
stages.length,
|
|
1598
|
+
" stages |",
|
|
1599
|
+
" ",
|
|
1600
|
+
stages.filter((s) => s.status === "success").length,
|
|
1601
|
+
" completed"
|
|
1602
|
+
] }) })
|
|
1603
|
+
] });
|
|
1604
|
+
};
|
|
1568
1605
|
export {
|
|
1569
|
-
AlertDialog,
|
|
1570
|
-
ApiPlayground,
|
|
1571
|
-
ApiReference,
|
|
1572
1606
|
AuditLog,
|
|
1573
|
-
BodyMetrics,
|
|
1574
1607
|
BuildLog,
|
|
1575
|
-
ChangelogDisplay,
|
|
1576
|
-
CodePlayground,
|
|
1577
|
-
ConflictResolver,
|
|
1578
|
-
DealPipeline,
|
|
1579
1608
|
DeploymentStatus,
|
|
1580
|
-
DriverLog,
|
|
1581
|
-
MemoryUsage,
|
|
1582
1609
|
MetricsGrid,
|
|
1583
1610
|
PipelineView,
|
|
1584
|
-
|
|
1585
|
-
SystemStatusIndicator,
|
|
1586
|
-
TestResult,
|
|
1587
|
-
TestRunner,
|
|
1588
|
-
WebhookLogger,
|
|
1589
|
-
WorkflowBuilder,
|
|
1590
|
-
WorkflowTemplate,
|
|
1591
|
-
XmlParser
|
|
1611
|
+
SystemStatusIndicator
|
|
1592
1612
|
};
|
|
1593
|
-
//# sourceMappingURL=index.
|
|
1613
|
+
//# sourceMappingURL=index.mjs.map
|