@sudobility/devops-components-rn 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog.d.ts +23 -0
- package/dist/AlertDialog.d.ts.map +1 -0
- package/dist/ApiPlayground.d.ts +9 -0
- package/dist/ApiPlayground.d.ts.map +1 -0
- package/dist/ApiReference.d.ts +8 -0
- package/dist/ApiReference.d.ts.map +1 -0
- package/dist/AuditLog.d.ts +8 -0
- package/dist/AuditLog.d.ts.map +1 -0
- package/dist/BodyMetrics.d.ts +8 -0
- package/dist/BodyMetrics.d.ts.map +1 -0
- package/dist/BuildLog.d.ts +9 -0
- package/dist/BuildLog.d.ts.map +1 -0
- package/dist/ChangelogDisplay.d.ts +8 -0
- package/dist/ChangelogDisplay.d.ts.map +1 -0
- package/dist/CodePlayground.d.ts +9 -0
- package/dist/CodePlayground.d.ts.map +1 -0
- package/dist/ConflictResolver.d.ts +9 -0
- package/dist/ConflictResolver.d.ts.map +1 -0
- package/dist/DealPipeline.d.ts +8 -0
- package/dist/DealPipeline.d.ts.map +1 -0
- package/dist/DeploymentStatus.d.ts +9 -0
- package/dist/DeploymentStatus.d.ts.map +1 -0
- package/dist/DriverLog.d.ts +8 -0
- package/dist/DriverLog.d.ts.map +1 -0
- package/dist/MemoryUsage.d.ts +8 -0
- package/dist/MemoryUsage.d.ts.map +1 -0
- package/dist/MetricsGrid.d.ts +26 -0
- package/dist/MetricsGrid.d.ts.map +1 -0
- package/dist/PipelineView.d.ts +9 -0
- package/dist/PipelineView.d.ts.map +1 -0
- package/dist/RegressionTest.d.ts +8 -0
- package/dist/RegressionTest.d.ts.map +1 -0
- package/dist/SystemStatusIndicator.d.ts +12 -0
- package/dist/SystemStatusIndicator.d.ts.map +1 -0
- package/dist/TestResult.d.ts +8 -0
- package/dist/TestResult.d.ts.map +1 -0
- package/dist/TestRunner.d.ts +9 -0
- package/dist/TestRunner.d.ts.map +1 -0
- package/dist/WebhookLogger.d.ts +8 -0
- package/dist/WebhookLogger.d.ts.map +1 -0
- package/dist/WorkflowBuilder.d.ts +9 -0
- package/dist/WorkflowBuilder.d.ts.map +1 -0
- package/dist/WorkflowTemplate.d.ts +9 -0
- package/dist/WorkflowTemplate.d.ts.map +1 -0
- package/dist/XmlParser.d.ts +8 -0
- package/dist/XmlParser.d.ts.map +1 -0
- package/dist/index.cjs.js +1593 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.esm.js +1593 -0
- package/dist/index.esm.js.map +1 -0
- package/package.json +56 -0
- package/src/AlertDialog.tsx +176 -0
- package/src/ApiPlayground.tsx +32 -0
- package/src/ApiReference.tsx +27 -0
- package/src/AuditLog.tsx +27 -0
- package/src/BodyMetrics.tsx +27 -0
- package/src/BuildLog.tsx +32 -0
- package/src/ChangelogDisplay.tsx +27 -0
- package/src/CodePlayground.tsx +32 -0
- package/src/ConflictResolver.tsx +32 -0
- package/src/DealPipeline.tsx +27 -0
- package/src/DeploymentStatus.tsx +32 -0
- package/src/DriverLog.tsx +27 -0
- package/src/MemoryUsage.tsx +27 -0
- package/src/MetricsGrid.tsx +115 -0
- package/src/PipelineView.tsx +32 -0
- package/src/RegressionTest.tsx +27 -0
- package/src/SystemStatusIndicator.tsx +74 -0
- package/src/TestResult.tsx +27 -0
- package/src/TestRunner.tsx +32 -0
- package/src/WebhookLogger.tsx +27 -0
- package/src/WorkflowBuilder.tsx +32 -0
- package/src/WorkflowTemplate.tsx +32 -0
- package/src/XmlParser.tsx +27 -0
- package/src/index.ts +32 -0
- package/src/nativewind.d.ts +23 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface ChangelogDisplayProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const ChangelogDisplay: React.FC<ChangelogDisplayProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Changelog Display"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">ChangelogDisplay Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface CodePlaygroundProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const CodePlayground: React.FC<CodePlaygroundProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Code Playground"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">CodePlayground Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface ConflictResolverProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const ConflictResolver: React.FC<ConflictResolverProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Conflict Resolver"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">ConflictResolver Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface DealPipelineProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const DealPipeline: React.FC<DealPipelineProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Deal Pipeline"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">DealPipeline Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface DeploymentStatusProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const DeploymentStatus: React.FC<DeploymentStatusProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Deployment Status"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">DeploymentStatus Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface DriverLogProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const DriverLog: React.FC<DriverLogProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Driver Log"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">DriverLog Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface MemoryUsageProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const MemoryUsage: React.FC<MemoryUsageProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Memory Usage"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">MemoryUsage Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, FlatList, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
type MetricColor = 'blue' | 'green' | 'purple' | 'orange' | 'pink' | 'gray';
|
|
6
|
+
|
|
7
|
+
export interface MetricItem {
|
|
8
|
+
value: string | number;
|
|
9
|
+
label: string;
|
|
10
|
+
color?: MetricColor;
|
|
11
|
+
icon?: React.ReactNode;
|
|
12
|
+
trend?: {
|
|
13
|
+
direction: 'up' | 'down';
|
|
14
|
+
value: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface MetricsGridProps extends ViewProps {
|
|
19
|
+
title?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
metrics: MetricItem[];
|
|
22
|
+
columns?: 2 | 3 | 4;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const colorClasses: Record<MetricColor, string> = {
|
|
26
|
+
blue: 'text-blue-600 dark:text-blue-400',
|
|
27
|
+
green: 'text-green-600 dark:text-green-400',
|
|
28
|
+
purple: 'text-purple-600 dark:text-purple-400',
|
|
29
|
+
orange: 'text-orange-600 dark:text-orange-400',
|
|
30
|
+
pink: 'text-pink-600 dark:text-pink-400',
|
|
31
|
+
gray: 'text-gray-600 dark:text-gray-400',
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
interface MetricCardProps {
|
|
35
|
+
metric: MetricItem;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const MetricCard: React.FC<MetricCardProps> = ({ metric }) => {
|
|
39
|
+
const colorClass = metric.color ? colorClasses[metric.color] : colorClasses.blue;
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<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">
|
|
43
|
+
{metric.icon && (
|
|
44
|
+
<View className={cn('mb-4', colorClass)}>{metric.icon}</View>
|
|
45
|
+
)}
|
|
46
|
+
|
|
47
|
+
<View className="gap-2 items-center">
|
|
48
|
+
<Text className={cn('text-3xl font-bold', colorClass)}>
|
|
49
|
+
{metric.value}
|
|
50
|
+
</Text>
|
|
51
|
+
|
|
52
|
+
<Text className="text-gray-600 dark:text-gray-400 font-medium">
|
|
53
|
+
{metric.label}
|
|
54
|
+
</Text>
|
|
55
|
+
|
|
56
|
+
{metric.trend && (
|
|
57
|
+
<Text
|
|
58
|
+
className={cn(
|
|
59
|
+
'text-sm font-semibold',
|
|
60
|
+
metric.trend.direction === 'up'
|
|
61
|
+
? 'text-green-600 dark:text-green-400'
|
|
62
|
+
: 'text-red-600 dark:text-red-400'
|
|
63
|
+
)}
|
|
64
|
+
>
|
|
65
|
+
{metric.trend.direction === 'up' ? '↑' : '↓'} {metric.trend.value}
|
|
66
|
+
</Text>
|
|
67
|
+
)}
|
|
68
|
+
</View>
|
|
69
|
+
</View>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* MetricsGrid component for React Native
|
|
75
|
+
* Grid display of metric cards
|
|
76
|
+
*/
|
|
77
|
+
export const MetricsGrid: React.FC<MetricsGridProps> = ({
|
|
78
|
+
title,
|
|
79
|
+
description,
|
|
80
|
+
metrics,
|
|
81
|
+
columns = 2,
|
|
82
|
+
className,
|
|
83
|
+
...props
|
|
84
|
+
}) => {
|
|
85
|
+
return (
|
|
86
|
+
<View className={cn('py-8 px-4', className)} {...props}>
|
|
87
|
+
{(title || description) && (
|
|
88
|
+
<View className="items-center mb-8">
|
|
89
|
+
{title && (
|
|
90
|
+
<Text className="text-2xl font-bold text-gray-900 dark:text-white mb-4 text-center">
|
|
91
|
+
{title}
|
|
92
|
+
</Text>
|
|
93
|
+
)}
|
|
94
|
+
{description && (
|
|
95
|
+
<Text className="text-lg text-gray-600 dark:text-gray-300 text-center max-w-lg">
|
|
96
|
+
{description}
|
|
97
|
+
</Text>
|
|
98
|
+
)}
|
|
99
|
+
</View>
|
|
100
|
+
)}
|
|
101
|
+
|
|
102
|
+
<FlatList
|
|
103
|
+
data={metrics}
|
|
104
|
+
keyExtractor={(_, index) => index.toString()}
|
|
105
|
+
numColumns={columns > 2 ? 2 : columns}
|
|
106
|
+
renderItem={({ item }) => (
|
|
107
|
+
<View className="flex-1">
|
|
108
|
+
<MetricCard metric={item} />
|
|
109
|
+
</View>
|
|
110
|
+
)}
|
|
111
|
+
scrollEnabled={false}
|
|
112
|
+
/>
|
|
113
|
+
</View>
|
|
114
|
+
);
|
|
115
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface PipelineViewProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const PipelineView: React.FC<PipelineViewProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Pipeline View"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">PipelineView Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface RegressionTestProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const RegressionTest: React.FC<RegressionTestProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Regression Test"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">RegressionTest Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface SystemStatusIndicatorProps extends ViewProps {
|
|
6
|
+
status: 'operational' | 'degraded' | 'partial' | 'major' | 'maintenance';
|
|
7
|
+
label?: string;
|
|
8
|
+
showPulse?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const statusConfig = {
|
|
12
|
+
operational: {
|
|
13
|
+
color: 'bg-green-500',
|
|
14
|
+
textColor: 'text-green-700 dark:text-green-400',
|
|
15
|
+
label: 'Operational',
|
|
16
|
+
},
|
|
17
|
+
degraded: {
|
|
18
|
+
color: 'bg-yellow-500',
|
|
19
|
+
textColor: 'text-yellow-700 dark:text-yellow-400',
|
|
20
|
+
label: 'Degraded Performance',
|
|
21
|
+
},
|
|
22
|
+
partial: {
|
|
23
|
+
color: 'bg-orange-500',
|
|
24
|
+
textColor: 'text-orange-700 dark:text-orange-400',
|
|
25
|
+
label: 'Partial Outage',
|
|
26
|
+
},
|
|
27
|
+
major: {
|
|
28
|
+
color: 'bg-red-500',
|
|
29
|
+
textColor: 'text-red-700 dark:text-red-400',
|
|
30
|
+
label: 'Major Outage',
|
|
31
|
+
},
|
|
32
|
+
maintenance: {
|
|
33
|
+
color: 'bg-blue-500',
|
|
34
|
+
textColor: 'text-blue-700 dark:text-blue-400',
|
|
35
|
+
label: 'Under Maintenance',
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* System status indicator component for displaying service health
|
|
41
|
+
*/
|
|
42
|
+
export const SystemStatusIndicator: React.FC<SystemStatusIndicatorProps> = ({
|
|
43
|
+
status,
|
|
44
|
+
label,
|
|
45
|
+
showPulse = true,
|
|
46
|
+
className,
|
|
47
|
+
...props
|
|
48
|
+
}) => {
|
|
49
|
+
const config = statusConfig[status];
|
|
50
|
+
|
|
51
|
+
return (
|
|
52
|
+
<View
|
|
53
|
+
className={cn('flex-row items-center gap-2', className)}
|
|
54
|
+
accessibilityRole="text"
|
|
55
|
+
accessibilityLabel={`System status: ${label || config.label}`}
|
|
56
|
+
{...props}
|
|
57
|
+
>
|
|
58
|
+
<View className="relative">
|
|
59
|
+
<View className={cn('w-3 h-3 rounded-full', config.color)} />
|
|
60
|
+
{showPulse && status === 'operational' && (
|
|
61
|
+
<View
|
|
62
|
+
className={cn(
|
|
63
|
+
'absolute inset-0 rounded-full opacity-75',
|
|
64
|
+
config.color
|
|
65
|
+
)}
|
|
66
|
+
/>
|
|
67
|
+
)}
|
|
68
|
+
</View>
|
|
69
|
+
<Text className={cn('text-sm font-medium', config.textColor)}>
|
|
70
|
+
{label || config.label}
|
|
71
|
+
</Text>
|
|
72
|
+
</View>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface TestResultProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const TestResult: React.FC<TestResultProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Test Result"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">TestResult Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface TestRunnerProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const TestRunner: React.FC<TestRunnerProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Test Runner"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">TestRunner Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface WebhookLoggerProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const WebhookLogger: React.FC<WebhookLoggerProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="Webhook Logger"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">WebhookLogger Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface WorkflowBuilderProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const WorkflowBuilder: React.FC<WorkflowBuilderProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Workflow Builder"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">WorkflowBuilder Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Text, Pressable, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface WorkflowTemplateProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
onPress?: () => void;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const WorkflowTemplate: React.FC<WorkflowTemplateProps> = ({
|
|
12
|
+
className,
|
|
13
|
+
children,
|
|
14
|
+
disabled = false,
|
|
15
|
+
onPress,
|
|
16
|
+
...props
|
|
17
|
+
}) => (
|
|
18
|
+
<Pressable
|
|
19
|
+
onPress={disabled ? undefined : onPress}
|
|
20
|
+
disabled={disabled}
|
|
21
|
+
accessibilityRole="button"
|
|
22
|
+
accessibilityLabel="Workflow Template"
|
|
23
|
+
className={cn(
|
|
24
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
25
|
+
disabled && 'opacity-50',
|
|
26
|
+
className
|
|
27
|
+
)}
|
|
28
|
+
{...props}
|
|
29
|
+
>
|
|
30
|
+
{children || <Text className="text-gray-900 dark:text-white">WorkflowTemplate Component</Text>}
|
|
31
|
+
</Pressable>
|
|
32
|
+
);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, type ViewProps } from 'react-native';
|
|
3
|
+
import { cn } from '@sudobility/components-rn';
|
|
4
|
+
|
|
5
|
+
export interface XmlParserProps extends ViewProps {
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const XmlParser: React.FC<XmlParserProps> = ({
|
|
11
|
+
className,
|
|
12
|
+
children,
|
|
13
|
+
disabled,
|
|
14
|
+
...props
|
|
15
|
+
}) => (
|
|
16
|
+
<View
|
|
17
|
+
className={cn(
|
|
18
|
+
'p-4 rounded-lg border bg-white dark:bg-gray-900 border-gray-200 dark:border-gray-700',
|
|
19
|
+
disabled && 'opacity-50',
|
|
20
|
+
className
|
|
21
|
+
)}
|
|
22
|
+
accessibilityLabel="XML Parser"
|
|
23
|
+
{...props}
|
|
24
|
+
>
|
|
25
|
+
{children || <Text className="text-gray-900 dark:text-white">XmlParser Component</Text>}
|
|
26
|
+
</View>
|
|
27
|
+
);
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sudobility/devops-components-rn
|
|
3
|
+
* React Native DevOps components for Sudobility
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export { AlertDialog, type AlertDialogProps } from './AlertDialog';
|
|
7
|
+
export { ApiPlayground, type ApiPlaygroundProps } from './ApiPlayground';
|
|
8
|
+
export { ApiReference, type ApiReferenceProps } from './ApiReference';
|
|
9
|
+
export { AuditLog, type AuditLogProps } from './AuditLog';
|
|
10
|
+
export { BodyMetrics, type BodyMetricsProps } from './BodyMetrics';
|
|
11
|
+
export { BuildLog, type BuildLogProps } from './BuildLog';
|
|
12
|
+
export { ChangelogDisplay, type ChangelogDisplayProps } from './ChangelogDisplay';
|
|
13
|
+
export { CodePlayground, type CodePlaygroundProps } from './CodePlayground';
|
|
14
|
+
export { ConflictResolver, type ConflictResolverProps } from './ConflictResolver';
|
|
15
|
+
export { DealPipeline, type DealPipelineProps } from './DealPipeline';
|
|
16
|
+
export { DeploymentStatus, type DeploymentStatusProps } from './DeploymentStatus';
|
|
17
|
+
export { DriverLog, type DriverLogProps } from './DriverLog';
|
|
18
|
+
export { MemoryUsage, type MemoryUsageProps } from './MemoryUsage';
|
|
19
|
+
export {
|
|
20
|
+
MetricsGrid,
|
|
21
|
+
type MetricsGridProps,
|
|
22
|
+
type MetricItem,
|
|
23
|
+
} from './MetricsGrid';
|
|
24
|
+
export { PipelineView, type PipelineViewProps } from './PipelineView';
|
|
25
|
+
export { RegressionTest, type RegressionTestProps } from './RegressionTest';
|
|
26
|
+
export { SystemStatusIndicator, type SystemStatusIndicatorProps } from './SystemStatusIndicator';
|
|
27
|
+
export { TestResult, type TestResultProps } from './TestResult';
|
|
28
|
+
export { TestRunner, type TestRunnerProps } from './TestRunner';
|
|
29
|
+
export { WebhookLogger, type WebhookLoggerProps } from './WebhookLogger';
|
|
30
|
+
export { WorkflowBuilder, type WorkflowBuilderProps } from './WorkflowBuilder';
|
|
31
|
+
export { WorkflowTemplate, type WorkflowTemplateProps } from './WorkflowTemplate';
|
|
32
|
+
export { XmlParser, type XmlParserProps } from './XmlParser';
|