synapse-sdk 1.0.0a98__py3-none-any.whl → 1.0.0b2__py3-none-any.whl
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.
Potentially problematic release.
This version of synapse-sdk might be problematic. Click here for more details.
- synapse_sdk/cli/__init__.py +139 -84
- synapse_sdk/cli/code_server.py +169 -0
- synapse_sdk/cli/config.py +105 -4
- synapse_sdk/cli/devtools.py +54 -34
- synapse_sdk/clients/base.py +3 -4
- synapse_sdk/devtools/server.py +24 -791
- synapse_sdk/devtools/streamlit_app/__init__.py +5 -0
- synapse_sdk/devtools/streamlit_app/app.py +128 -0
- synapse_sdk/devtools/streamlit_app/services/__init__.py +11 -0
- synapse_sdk/devtools/streamlit_app/services/job_service.py +233 -0
- synapse_sdk/devtools/streamlit_app/services/plugin_service.py +236 -0
- synapse_sdk/devtools/streamlit_app/services/serve_service.py +95 -0
- synapse_sdk/devtools/streamlit_app/ui/__init__.py +15 -0
- synapse_sdk/devtools/streamlit_app/ui/config_tab.py +76 -0
- synapse_sdk/devtools/streamlit_app/ui/deployment_tab.py +66 -0
- synapse_sdk/devtools/streamlit_app/ui/http_tab.py +125 -0
- synapse_sdk/devtools/streamlit_app/ui/jobs_tab.py +573 -0
- synapse_sdk/devtools/streamlit_app/ui/serve_tab.py +346 -0
- synapse_sdk/devtools/streamlit_app/ui/status_bar.py +118 -0
- synapse_sdk/devtools/streamlit_app/utils/__init__.py +40 -0
- synapse_sdk/devtools/streamlit_app/utils/json_viewer.py +197 -0
- synapse_sdk/devtools/streamlit_app/utils/log_formatter.py +38 -0
- synapse_sdk/devtools/streamlit_app/utils/styles.py +241 -0
- synapse_sdk/devtools/streamlit_app/utils/ui_components.py +289 -0
- synapse_sdk/devtools/streamlit_app.py +10 -0
- synapse_sdk/plugins/categories/upload/actions/upload.py +2 -1
- synapse_sdk/utils/converters/coco/from_dm.py +2 -2
- synapse_sdk/utils/converters/dm/__init__.py +0 -1
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/METADATA +4 -6
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/RECORD +34 -45
- synapse_sdk/devtools/models.py +0 -55
- synapse_sdk/devtools/utils.py +0 -52
- synapse_sdk/devtools/web/.gitignore +0 -2
- synapse_sdk/devtools/web/README.md +0 -34
- synapse_sdk/devtools/web/dist/index.html +0 -17
- synapse_sdk/devtools/web/index.html +0 -16
- synapse_sdk/devtools/web/jsconfig.json +0 -15
- synapse_sdk/devtools/web/package-lock.json +0 -2609
- synapse_sdk/devtools/web/package.json +0 -27
- synapse_sdk/devtools/web/pnpm-lock.yaml +0 -1055
- synapse_sdk/devtools/web/src/App.jsx +0 -14
- synapse_sdk/devtools/web/src/App.module.css +0 -33
- synapse_sdk/devtools/web/src/assets/favicon.ico +0 -0
- synapse_sdk/devtools/web/src/components/Breadcrumbs.jsx +0 -42
- synapse_sdk/devtools/web/src/components/Layout.jsx +0 -12
- synapse_sdk/devtools/web/src/components/LogViewer.jsx +0 -280
- synapse_sdk/devtools/web/src/components/MessageViewer.jsx +0 -150
- synapse_sdk/devtools/web/src/components/NavigationSidebar.jsx +0 -128
- synapse_sdk/devtools/web/src/components/ServerStatusBar.jsx +0 -245
- synapse_sdk/devtools/web/src/components/icons.jsx +0 -325
- synapse_sdk/devtools/web/src/index.css +0 -470
- synapse_sdk/devtools/web/src/index.jsx +0 -15
- synapse_sdk/devtools/web/src/logo.svg +0 -1
- synapse_sdk/devtools/web/src/router.jsx +0 -34
- synapse_sdk/devtools/web/src/utils/api.js +0 -442
- synapse_sdk/devtools/web/src/views/ApplicationDetailView.jsx +0 -241
- synapse_sdk/devtools/web/src/views/ApplicationsView.jsx +0 -224
- synapse_sdk/devtools/web/src/views/HomeView.jsx +0 -197
- synapse_sdk/devtools/web/src/views/JobDetailView.jsx +0 -310
- synapse_sdk/devtools/web/src/views/PluginView.jsx +0 -914
- synapse_sdk/devtools/web/vite.config.js +0 -13
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/WHEEL +0 -0
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/entry_points.txt +0 -0
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/licenses/LICENSE +0 -0
- {synapse_sdk-1.0.0a98.dist-info → synapse_sdk-1.0.0b2.dist-info}/top_level.txt +0 -0
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
import { createSignal, createEffect, onCleanup, Show } from "solid-js";
|
|
2
|
-
import { createStatusResource, fetchUserInfo } from "../utils/api";
|
|
3
|
-
import { StatusIcon, RefreshIcon, CheckIcon, AlertCircleIcon } from "./icons";
|
|
4
|
-
|
|
5
|
-
export default function ServerStatusBar() {
|
|
6
|
-
const [user, setUser] = createSignal(null);
|
|
7
|
-
const [backendHealth, setBackendHealth] = createSignal({ status: "checking" });
|
|
8
|
-
const [agentHealth, setAgentHealth] = createSignal({ status: "checking" });
|
|
9
|
-
const [isManualRefresh, setIsManualRefresh] = createSignal(false);
|
|
10
|
-
|
|
11
|
-
// Get status data for version and config info
|
|
12
|
-
const { data: status } = createStatusResource();
|
|
13
|
-
|
|
14
|
-
const checkBackendStatus = async () => {
|
|
15
|
-
try {
|
|
16
|
-
const response = await fetch("/health/backend");
|
|
17
|
-
if (response.ok) {
|
|
18
|
-
const healthData = await response.json();
|
|
19
|
-
setBackendHealth({
|
|
20
|
-
status: healthData.status,
|
|
21
|
-
latency: healthData.latency,
|
|
22
|
-
url: healthData.url,
|
|
23
|
-
httpStatus: healthData.httpStatus,
|
|
24
|
-
error: healthData.error
|
|
25
|
-
});
|
|
26
|
-
} else {
|
|
27
|
-
setBackendHealth({
|
|
28
|
-
status: "down",
|
|
29
|
-
error: `HTTP ${response.status}: ${response.statusText}`
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
} catch (error) {
|
|
33
|
-
setBackendHealth({
|
|
34
|
-
status: "down",
|
|
35
|
-
error: `Connection failed: ${error.message}`
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const checkAgentStatus = async () => {
|
|
41
|
-
try {
|
|
42
|
-
const response = await fetch("/health/agent");
|
|
43
|
-
if (response.ok) {
|
|
44
|
-
const healthData = await response.json();
|
|
45
|
-
setAgentHealth({
|
|
46
|
-
status: healthData.status,
|
|
47
|
-
latency: healthData.latency,
|
|
48
|
-
url: healthData.url,
|
|
49
|
-
httpStatus: healthData.httpStatus,
|
|
50
|
-
error: healthData.error
|
|
51
|
-
});
|
|
52
|
-
} else {
|
|
53
|
-
setAgentHealth({
|
|
54
|
-
status: "down",
|
|
55
|
-
error: `HTTP ${response.status}: ${response.statusText}`
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
} catch (error) {
|
|
59
|
-
setAgentHealth({
|
|
60
|
-
status: "down",
|
|
61
|
-
error: `Connection failed: ${error.message}`
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const checkStatus = async () => {
|
|
67
|
-
setIsManualRefresh(false);
|
|
68
|
-
await Promise.all([checkBackendStatus(), checkAgentStatus()]);
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
const manualRefresh = async () => {
|
|
72
|
-
setIsManualRefresh(true);
|
|
73
|
-
await checkStatus();
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const initializeAuth = async () => {
|
|
77
|
-
try {
|
|
78
|
-
// Get token from devtools server
|
|
79
|
-
const tokenResponse = await fetch("/auth/token");
|
|
80
|
-
if (tokenResponse.ok) {
|
|
81
|
-
const tokenData = await tokenResponse.json();
|
|
82
|
-
|
|
83
|
-
if (tokenData.token) {
|
|
84
|
-
// Get backend host from status
|
|
85
|
-
const statusData = status();
|
|
86
|
-
if (statusData?.backend?.host) {
|
|
87
|
-
// Fetch user info using token and backend host
|
|
88
|
-
const userInfo = await fetchUserInfo(tokenData.token, statusData.backend.host);
|
|
89
|
-
if (userInfo) {
|
|
90
|
-
setUser(userInfo);
|
|
91
|
-
}
|
|
92
|
-
} else {
|
|
93
|
-
console.warn("No backend host configured for authentication");
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
} catch (error) {
|
|
98
|
-
console.error("Error initializing auth:", error);
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
const getStatusIcon = (health) => {
|
|
103
|
-
switch (health.status) {
|
|
104
|
-
case "healthy":
|
|
105
|
-
return <div class="w-2 h-2 rounded-full bg-emerald-500"></div>;
|
|
106
|
-
case "down":
|
|
107
|
-
return <div class="w-2 h-2 rounded-full bg-red-500"></div>;
|
|
108
|
-
case "checking":
|
|
109
|
-
return <div class="loading loading-spinner loading-sm"></div>;
|
|
110
|
-
default:
|
|
111
|
-
return <div class="w-2 h-2 rounded-full bg-slate-400"></div>;
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
const getStatusText = (health) => {
|
|
116
|
-
switch (health.status) {
|
|
117
|
-
case "healthy":
|
|
118
|
-
return "Online";
|
|
119
|
-
case "down":
|
|
120
|
-
return "Offline";
|
|
121
|
-
case "checking":
|
|
122
|
-
return "Checking...";
|
|
123
|
-
default:
|
|
124
|
-
return "Unknown";
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
const getHostFromUrl = (url) => {
|
|
129
|
-
if (!url) return "";
|
|
130
|
-
try {
|
|
131
|
-
const urlObj = new URL(url);
|
|
132
|
-
return urlObj.hostname + (urlObj.port ? `:${urlObj.port}` : "");
|
|
133
|
-
} catch {
|
|
134
|
-
return url;
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
// Initialize auth when status is available
|
|
139
|
-
createEffect(() => {
|
|
140
|
-
if (status()) {
|
|
141
|
-
initializeAuth();
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
// Check status immediately and every 60 seconds (reduced polling)
|
|
146
|
-
createEffect(() => {
|
|
147
|
-
checkStatus();
|
|
148
|
-
const interval = setInterval(checkStatus, 5000);
|
|
149
|
-
onCleanup(() => clearInterval(interval));
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
return (
|
|
153
|
-
<div class="bg-white border-b border-slate-200 px-6 py-3">
|
|
154
|
-
<div class="max-w-7xl mx-auto flex items-center justify-between">
|
|
155
|
-
<div class="flex items-center gap-8">
|
|
156
|
-
{/* Backend Status */}
|
|
157
|
-
<div class="flex items-center gap-3">
|
|
158
|
-
{getStatusIcon(backendHealth())}
|
|
159
|
-
<div class="flex flex-col">
|
|
160
|
-
<div class="flex items-center gap-2">
|
|
161
|
-
<span class="text-sm font-medium text-slate-800">Backend</span>
|
|
162
|
-
<span class="text-sm text-slate-600">{getStatusText(backendHealth())}</span>
|
|
163
|
-
<Show when={backendHealth().latency}>
|
|
164
|
-
<span class="text-sm text-slate-500">({backendHealth().latency}ms)</span>
|
|
165
|
-
</Show>
|
|
166
|
-
</div>
|
|
167
|
-
<div class="text-sm text-slate-500">
|
|
168
|
-
<Show when={backendHealth().url}>
|
|
169
|
-
<span>{getHostFromUrl(backendHealth().url)}</span>
|
|
170
|
-
</Show>
|
|
171
|
-
<Show when={backendHealth().httpStatus}>
|
|
172
|
-
<span class="ml-2">[HTTP {backendHealth().httpStatus}]</span>
|
|
173
|
-
</Show>
|
|
174
|
-
<Show when={backendHealth().error}>
|
|
175
|
-
<span class="ml-2 text-red-500">{backendHealth().error}</span>
|
|
176
|
-
</Show>
|
|
177
|
-
</div>
|
|
178
|
-
</div>
|
|
179
|
-
</div>
|
|
180
|
-
|
|
181
|
-
{/* Agent Status */}
|
|
182
|
-
<div class="flex items-center gap-3">
|
|
183
|
-
{getStatusIcon(agentHealth())}
|
|
184
|
-
<div class="flex flex-col">
|
|
185
|
-
<div class="flex items-center gap-2">
|
|
186
|
-
<span class="text-sm font-medium text-slate-800">Agent</span>
|
|
187
|
-
<span class="text-sm text-slate-600">{getStatusText(agentHealth())}</span>
|
|
188
|
-
<Show when={agentHealth().latency}>
|
|
189
|
-
<span class="text-sm text-slate-500">({agentHealth().latency}ms)</span>
|
|
190
|
-
</Show>
|
|
191
|
-
<Show when={status()?.agent?.name}>
|
|
192
|
-
<span class="text-sm text-blue-600">[{status().agent.name}]</span>
|
|
193
|
-
</Show>
|
|
194
|
-
</div>
|
|
195
|
-
<div class="text-sm text-slate-500">
|
|
196
|
-
<Show when={status()?.agent?.id}>
|
|
197
|
-
<span>(ID: {status().agent.id})</span>
|
|
198
|
-
</Show>
|
|
199
|
-
<Show when={agentHealth().url}>
|
|
200
|
-
<span>{getHostFromUrl(agentHealth().url)}</span>
|
|
201
|
-
</Show>
|
|
202
|
-
<Show when={agentHealth().httpStatus}>
|
|
203
|
-
<span class="ml-2">[{agentHealth().httpStatus}]</span>
|
|
204
|
-
</Show>
|
|
205
|
-
</div>
|
|
206
|
-
</div>
|
|
207
|
-
</div>
|
|
208
|
-
|
|
209
|
-
<button
|
|
210
|
-
class="btn btn-sm btn-ghost"
|
|
211
|
-
onClick={manualRefresh}
|
|
212
|
-
disabled={isManualRefresh()}
|
|
213
|
-
title="Refresh status"
|
|
214
|
-
>
|
|
215
|
-
<Show when={!isManualRefresh()}>
|
|
216
|
-
<RefreshIcon class="w-3 h-3" />
|
|
217
|
-
</Show>
|
|
218
|
-
<Show when={isManualRefresh()}>
|
|
219
|
-
<div class="loading loading-spinner loading-sm"></div>
|
|
220
|
-
</Show>
|
|
221
|
-
</button>
|
|
222
|
-
</div>
|
|
223
|
-
|
|
224
|
-
<div class="flex items-center gap-4">
|
|
225
|
-
{/* User Info */}
|
|
226
|
-
<Show when={user()}>
|
|
227
|
-
<div class="flex items-center gap-2">
|
|
228
|
-
<div class="w-6 h-6 bg-slate-200 rounded-full flex items-center justify-center">
|
|
229
|
-
<span class="text-sm font-medium text-slate-600">
|
|
230
|
-
{user().name.charAt(0).toUpperCase()}
|
|
231
|
-
</span>
|
|
232
|
-
</div>
|
|
233
|
-
<span class="text-sm font-medium text-slate-700">
|
|
234
|
-
{user().name} ({user().email})
|
|
235
|
-
</span>
|
|
236
|
-
</div>
|
|
237
|
-
</Show>
|
|
238
|
-
<Show when={!user()}>
|
|
239
|
-
<span class="text-sm text-amber-600">Not authenticated</span>
|
|
240
|
-
</Show>
|
|
241
|
-
</div>
|
|
242
|
-
</div>
|
|
243
|
-
</div>
|
|
244
|
-
);
|
|
245
|
-
}
|
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
// Icon components using SolidJS JSX with Heroicons
|
|
2
|
-
|
|
3
|
-
export const SaveIcon = (props) => (
|
|
4
|
-
<svg
|
|
5
|
-
fill="none"
|
|
6
|
-
stroke="currentColor"
|
|
7
|
-
stroke-width="2"
|
|
8
|
-
viewBox="0 0 24 24"
|
|
9
|
-
{...props}
|
|
10
|
-
>
|
|
11
|
-
<path
|
|
12
|
-
stroke-linecap="round"
|
|
13
|
-
stroke-linejoin="round"
|
|
14
|
-
d="M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4"
|
|
15
|
-
/>
|
|
16
|
-
</svg>
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
export const RefreshIcon = (props) => (
|
|
20
|
-
<svg
|
|
21
|
-
fill="none"
|
|
22
|
-
stroke="currentColor"
|
|
23
|
-
stroke-width="2"
|
|
24
|
-
viewBox="0 0 24 24"
|
|
25
|
-
{...props}
|
|
26
|
-
>
|
|
27
|
-
<path
|
|
28
|
-
stroke-linecap="round"
|
|
29
|
-
stroke-linejoin="round"
|
|
30
|
-
d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
|
|
31
|
-
/>
|
|
32
|
-
</svg>
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
export const AlertCircleIcon = (props) => (
|
|
36
|
-
<svg
|
|
37
|
-
fill="none"
|
|
38
|
-
stroke="currentColor"
|
|
39
|
-
stroke-width="2"
|
|
40
|
-
viewBox="0 0 24 24"
|
|
41
|
-
{...props}
|
|
42
|
-
>
|
|
43
|
-
<circle cx="12" cy="12" r="10" />
|
|
44
|
-
<line x1="12" y1="8" x2="12" y2="12" />
|
|
45
|
-
<line x1="12" y1="16" x2="12.01" y2="16" />
|
|
46
|
-
</svg>
|
|
47
|
-
);
|
|
48
|
-
|
|
49
|
-
export const CheckIcon = (props) => (
|
|
50
|
-
<svg
|
|
51
|
-
fill="none"
|
|
52
|
-
stroke="currentColor"
|
|
53
|
-
stroke-width="2"
|
|
54
|
-
viewBox="0 0 24 24"
|
|
55
|
-
{...props}
|
|
56
|
-
>
|
|
57
|
-
<polyline points="20,6 9,17 4,12" />
|
|
58
|
-
</svg>
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
export const AlertTriangleIcon = (props) => (
|
|
62
|
-
<svg
|
|
63
|
-
fill="none"
|
|
64
|
-
stroke="currentColor"
|
|
65
|
-
stroke-width="2"
|
|
66
|
-
viewBox="0 0 24 24"
|
|
67
|
-
{...props}
|
|
68
|
-
>
|
|
69
|
-
<path
|
|
70
|
-
stroke-linecap="round"
|
|
71
|
-
stroke-linejoin="round"
|
|
72
|
-
d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4.5c-.77-.833-2.694-.833-3.464 0L3.34 16.5c-.77.833.192 2.5 1.732 2.5z"
|
|
73
|
-
/>
|
|
74
|
-
</svg>
|
|
75
|
-
);
|
|
76
|
-
|
|
77
|
-
export const InfoIcon = (props) => (
|
|
78
|
-
<svg
|
|
79
|
-
fill="none"
|
|
80
|
-
stroke="currentColor"
|
|
81
|
-
stroke-width="2"
|
|
82
|
-
viewBox="0 0 24 24"
|
|
83
|
-
{...props}
|
|
84
|
-
>
|
|
85
|
-
<circle cx="12" cy="12" r="10" />
|
|
86
|
-
<line x1="12" y1="16" x2="12" y2="12" />
|
|
87
|
-
<line x1="12" y1="8" x2="12.01" y2="8" />
|
|
88
|
-
</svg>
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
export const PlayIcon = (props) => (
|
|
92
|
-
<svg
|
|
93
|
-
fill="none"
|
|
94
|
-
stroke="currentColor"
|
|
95
|
-
stroke-width="2"
|
|
96
|
-
viewBox="0 0 24 24"
|
|
97
|
-
{...props}
|
|
98
|
-
>
|
|
99
|
-
<polygon points="5,3 19,12 5,21" />
|
|
100
|
-
</svg>
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
export const TrashIcon = (props) => (
|
|
104
|
-
<svg
|
|
105
|
-
fill="none"
|
|
106
|
-
stroke="currentColor"
|
|
107
|
-
stroke-width="2"
|
|
108
|
-
viewBox="0 0 24 24"
|
|
109
|
-
{...props}
|
|
110
|
-
>
|
|
111
|
-
<polyline points="3,6 5,6 21,6" />
|
|
112
|
-
<path d="m19,6v14a2,2 0 0,1 -2,2H7a2,2 0 0,1 -2,-2V6m3,0V4a2,2 0 0,1 2,-2h4a2,2 0 0,1 2,2v2" />
|
|
113
|
-
</svg>
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
export const XIcon = (props) => (
|
|
117
|
-
<svg
|
|
118
|
-
fill="none"
|
|
119
|
-
stroke="currentColor"
|
|
120
|
-
stroke-width="2"
|
|
121
|
-
viewBox="0 0 24 24"
|
|
122
|
-
{...props}
|
|
123
|
-
>
|
|
124
|
-
<line x1="18" y1="6" x2="6" y2="18" />
|
|
125
|
-
<line x1="6" y1="6" x2="18" y2="18" />
|
|
126
|
-
</svg>
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
export const UploadIcon = (props) => (
|
|
130
|
-
<svg
|
|
131
|
-
fill="none"
|
|
132
|
-
stroke="currentColor"
|
|
133
|
-
stroke-width="2"
|
|
134
|
-
viewBox="0 0 24 24"
|
|
135
|
-
{...props}
|
|
136
|
-
>
|
|
137
|
-
<path
|
|
138
|
-
stroke-linecap="round"
|
|
139
|
-
stroke-linejoin="round"
|
|
140
|
-
d="M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12"
|
|
141
|
-
/>
|
|
142
|
-
</svg>
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
export const CheckCircleIcon = (props) => (
|
|
146
|
-
<svg
|
|
147
|
-
fill="none"
|
|
148
|
-
stroke="currentColor"
|
|
149
|
-
stroke-width="2"
|
|
150
|
-
viewBox="0 0 24 24"
|
|
151
|
-
{...props}
|
|
152
|
-
>
|
|
153
|
-
<path
|
|
154
|
-
stroke-linecap="round"
|
|
155
|
-
stroke-linejoin="round"
|
|
156
|
-
d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
157
|
-
/>
|
|
158
|
-
</svg>
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
export const SettingsIcon = (props) => (
|
|
162
|
-
<svg
|
|
163
|
-
fill="none"
|
|
164
|
-
stroke="currentColor"
|
|
165
|
-
stroke-width="2"
|
|
166
|
-
viewBox="0 0 24 24"
|
|
167
|
-
{...props}
|
|
168
|
-
>
|
|
169
|
-
<circle cx="12" cy="12" r="3" />
|
|
170
|
-
<path d="m12,1 1.27,2.418c.3.568.92.885 1.544.784l2.617-.427a1.031,1.031 0 0 1 1.205.968l.212,2.706c.023.294.177.569.425.762l2.209,1.719a1.031,1.031 0 0 1 0 1.614l-2.209,1.719c-.248.193-.402.468-.425.762l-.212,2.706a1.031,1.031 0 0 1 -1.205.968l-2.617-.427c-.624-.101-1.244.216-1.544.784L12,23l-1.27-2.418c-.3-.568-.92-.885-1.544-.784l-2.617.427a1.031,1.031 0 0 1 -1.205-.968l-.212-2.706c-.023-.294-.177-.569-.425-.762L2.518,14.07a1.031,1.031 0 0 1 0,-1.614l2.209-1.719c.248-.193.402-.468.425-.762l.212-2.706a1.031,1.031 0 0 1 1.205-.968l2.617.427c.624.101,1.244-.216,1.544-.784L12,1z" />
|
|
171
|
-
</svg>
|
|
172
|
-
);
|
|
173
|
-
|
|
174
|
-
export const FlaskIcon = (props) => (
|
|
175
|
-
<svg
|
|
176
|
-
fill="none"
|
|
177
|
-
stroke="currentColor"
|
|
178
|
-
stroke-width="2"
|
|
179
|
-
viewBox="0 0 24 24"
|
|
180
|
-
{...props}
|
|
181
|
-
>
|
|
182
|
-
<path
|
|
183
|
-
stroke-linecap="round"
|
|
184
|
-
stroke-linejoin="round"
|
|
185
|
-
d="M11 6L8 21l4-7 4 7-3-15M8 8h8M15 6h1a2 2 0 012 2v1M9 6V4a2 2 0 012-2h2a2 2 0 012 2v2"
|
|
186
|
-
/>
|
|
187
|
-
</svg>
|
|
188
|
-
);
|
|
189
|
-
|
|
190
|
-
export const RocketIcon = (props) => (
|
|
191
|
-
<svg
|
|
192
|
-
fill="none"
|
|
193
|
-
stroke="currentColor"
|
|
194
|
-
stroke-width="2"
|
|
195
|
-
viewBox="0 0 24 24"
|
|
196
|
-
{...props}
|
|
197
|
-
>
|
|
198
|
-
<path
|
|
199
|
-
stroke-linecap="round"
|
|
200
|
-
stroke-linejoin="round"
|
|
201
|
-
d="M4.5 19.5l15-15m0 0H8m11.5 0v11.5M12 18.5L9.5 21L7 18.5l1.5-1.5L12 18.5zM2.5 13.5L5 16l2.5-2.5L6 12l-3.5 1.5z"
|
|
202
|
-
/>
|
|
203
|
-
</svg>
|
|
204
|
-
);
|
|
205
|
-
|
|
206
|
-
export const HomeIcon = (props) => (
|
|
207
|
-
<svg
|
|
208
|
-
fill="none"
|
|
209
|
-
stroke="currentColor"
|
|
210
|
-
stroke-width="2"
|
|
211
|
-
viewBox="0 0 24 24"
|
|
212
|
-
{...props}
|
|
213
|
-
>
|
|
214
|
-
<path
|
|
215
|
-
stroke-linecap="round"
|
|
216
|
-
stroke-linejoin="round"
|
|
217
|
-
d="m3 12 2-2m0 0 7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"
|
|
218
|
-
/>
|
|
219
|
-
</svg>
|
|
220
|
-
);
|
|
221
|
-
|
|
222
|
-
export const DocumentIcon = (props) => (
|
|
223
|
-
<svg
|
|
224
|
-
fill="none"
|
|
225
|
-
stroke="currentColor"
|
|
226
|
-
stroke-width="2"
|
|
227
|
-
viewBox="0 0 24 24"
|
|
228
|
-
{...props}
|
|
229
|
-
>
|
|
230
|
-
<path
|
|
231
|
-
stroke-linecap="round"
|
|
232
|
-
stroke-linejoin="round"
|
|
233
|
-
d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
|
234
|
-
/>
|
|
235
|
-
</svg>
|
|
236
|
-
);
|
|
237
|
-
|
|
238
|
-
export const CubeIcon = (props) => (
|
|
239
|
-
<svg
|
|
240
|
-
fill="none"
|
|
241
|
-
stroke="currentColor"
|
|
242
|
-
stroke-width="2"
|
|
243
|
-
viewBox="0 0 24 24"
|
|
244
|
-
{...props}
|
|
245
|
-
>
|
|
246
|
-
<path
|
|
247
|
-
stroke-linecap="round"
|
|
248
|
-
stroke-linejoin="round"
|
|
249
|
-
d="m7.875 14.25 1.214 1.942a2.25 2.25 0 0 0 1.908 1.058h2.006c.776 0 1.497-.4 1.908-1.058l1.214-1.942M2.41 9h4.636a2.25 2.25 0 0 1 1.872 1.002l.164.246a2.25 2.25 0 0 0 1.872 1.002h2.092a2.25 2.25 0 0 0 1.872-1.002l.164-.246A2.25 2.25 0 0 1 16.954 9h4.636M7.5 14.25v-3.375c0-.621.504-1.125 1.125-1.125h6.75c.621 0 1.125.504 1.125 1.125v3.375m-8 0V18a2.25 2.25 0 0 0 2.25 2.25h3.5A2.25 2.25 0 0 0 16.5 18v-3.625"
|
|
250
|
-
/>
|
|
251
|
-
</svg>
|
|
252
|
-
);
|
|
253
|
-
|
|
254
|
-
export const ArrowLeftIcon = (props) => (
|
|
255
|
-
<svg
|
|
256
|
-
fill="none"
|
|
257
|
-
stroke="currentColor"
|
|
258
|
-
stroke-width="2"
|
|
259
|
-
viewBox="0 0 24 24"
|
|
260
|
-
{...props}
|
|
261
|
-
>
|
|
262
|
-
<path
|
|
263
|
-
stroke-linecap="round"
|
|
264
|
-
stroke-linejoin="round"
|
|
265
|
-
d="M15 19l-7-7 7-7"
|
|
266
|
-
/>
|
|
267
|
-
</svg>
|
|
268
|
-
);
|
|
269
|
-
|
|
270
|
-
export const EyeIcon = (props) => (
|
|
271
|
-
<svg
|
|
272
|
-
fill="none"
|
|
273
|
-
stroke="currentColor"
|
|
274
|
-
stroke-width="2"
|
|
275
|
-
viewBox="0 0 24 24"
|
|
276
|
-
{...props}
|
|
277
|
-
>
|
|
278
|
-
<path
|
|
279
|
-
stroke-linecap="round"
|
|
280
|
-
stroke-linejoin="round"
|
|
281
|
-
d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
|
282
|
-
/>
|
|
283
|
-
<path
|
|
284
|
-
stroke-linecap="round"
|
|
285
|
-
stroke-linejoin="round"
|
|
286
|
-
d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
|
|
287
|
-
/>
|
|
288
|
-
</svg>
|
|
289
|
-
);
|
|
290
|
-
|
|
291
|
-
export const StatusIcon = (props) => (
|
|
292
|
-
<div class={`inline-flex items-center justify-center w-2 h-2 rounded-full ${props.class}`} />
|
|
293
|
-
);
|
|
294
|
-
|
|
295
|
-
export const MenuIcon = (props) => (
|
|
296
|
-
<svg
|
|
297
|
-
fill="none"
|
|
298
|
-
stroke="currentColor"
|
|
299
|
-
stroke-width="2"
|
|
300
|
-
viewBox="0 0 24 24"
|
|
301
|
-
{...props}
|
|
302
|
-
>
|
|
303
|
-
<path
|
|
304
|
-
stroke-linecap="round"
|
|
305
|
-
stroke-linejoin="round"
|
|
306
|
-
d="M3 12h18M3 6h18M3 18h18"
|
|
307
|
-
/>
|
|
308
|
-
</svg>
|
|
309
|
-
);
|
|
310
|
-
|
|
311
|
-
export const CloseIcon = (props) => (
|
|
312
|
-
<svg
|
|
313
|
-
fill="none"
|
|
314
|
-
stroke="currentColor"
|
|
315
|
-
stroke-width="2"
|
|
316
|
-
viewBox="0 0 24 24"
|
|
317
|
-
{...props}
|
|
318
|
-
>
|
|
319
|
-
<path
|
|
320
|
-
stroke-linecap="round"
|
|
321
|
-
stroke-linejoin="round"
|
|
322
|
-
d="M6 18L18 6M6 6l12 12"
|
|
323
|
-
/>
|
|
324
|
-
</svg>
|
|
325
|
-
);
|