@stacksjs/ts-cloud 0.6.0 → 0.6.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/bin/cli.js +1 -1
- package/dist/ui/index.html +4 -4
- package/dist/ui/server/actions.html +4 -4
- package/dist/ui/server/activity.html +1 -1
- package/dist/ui/server/backups.html +4 -4
- package/dist/ui/server/database.html +4 -4
- package/dist/ui/server/deployments.html +4 -4
- package/dist/ui/server/diagnostics.html +1 -1
- package/dist/ui/server/firewall.html +4 -4
- package/dist/ui/server/logs.html +4 -4
- package/dist/ui/server/metrics.html +1 -1
- package/dist/ui/server/security.html +1 -1
- package/dist/ui/server/services.html +4 -4
- package/dist/ui/server/sites.html +4 -4
- package/dist/ui/server/ssh-keys.html +4 -4
- package/dist/ui/server/terminal.html +4 -4
- package/dist/ui/server/workers.html +4 -4
- package/dist/ui/serverless/alarms.html +4 -4
- package/dist/ui/serverless/assets.html +4 -4
- package/dist/ui/serverless/cost.html +1 -1
- package/dist/ui/serverless/data.html +4 -4
- package/dist/ui/serverless/deployments.html +4 -4
- package/dist/ui/serverless/firewall.html +1 -1
- package/dist/ui/serverless/functions.html +4 -4
- package/dist/ui/serverless/logs.html +4 -4
- package/dist/ui/serverless/metrics.html +1 -1
- package/dist/ui/serverless/queues.html +4 -4
- package/dist/ui/serverless/scheduler.html +4 -4
- package/dist/ui/serverless/secrets.html +4 -4
- package/dist/ui/serverless/traces.html +4 -4
- package/dist/ui/serverless.html +4 -4
- package/dist/ui-src/pages/partials/head.stx +42 -30
- package/package.json +3 -3
|
@@ -1,36 +1,45 @@
|
|
|
1
1
|
<meta charset="UTF-8">
|
|
2
2
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
3
3
|
<title>{{ title ?? 'ts-cloud' }}</title>
|
|
4
|
-
<!-- Inline SVG favicon (
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%
|
|
4
|
+
<!-- Inline SVG favicon (single-accent tile) - declaring it stops the browser requesting /favicon.ico. -->
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect x='3' y='3' width='26' height='26' rx='8' fill='%235a8be0'/%3E%3C/svg%3E">
|
|
6
6
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
7
7
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
|
8
8
|
<style>
|
|
9
9
|
:root {
|
|
10
|
-
--bg: #
|
|
11
|
-
--txt: #
|
|
12
|
-
--accent: #
|
|
13
|
-
--
|
|
10
|
+
--bg: #0a0e15; --bg2: #0b0f18; --panel: rgba(255,255,255,0.03); --panel-br: rgba(255,255,255,0.072);
|
|
11
|
+
--txt: #e9edf5; --txt2: #94a1b8; --txt3: #5a6577;
|
|
12
|
+
--accent: #5a8be0; --accent-dim: rgba(90,139,224,0.14); --accent-ink: #061019;
|
|
13
|
+
--ok: #35d19b; --okbg: rgba(53,209,155,0.11);
|
|
14
|
+
--bad: #f0736e; --badbg: rgba(240,115,110,0.11); --warn: #edb949; --warnbg: rgba(237,185,73,0.11);
|
|
15
|
+
--mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace;
|
|
14
16
|
}
|
|
15
17
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
16
18
|
html { background: var(--bg); min-height: 100%; }
|
|
17
19
|
body {
|
|
18
20
|
font-family: 'Inter', system-ui, sans-serif; color: var(--txt); min-height: 100vh;
|
|
19
|
-
|
|
21
|
+
/* One calm accent wash, no AI blue-purple mesh. */
|
|
22
|
+
background:
|
|
23
|
+
radial-gradient(900px 460px at 88% -8%, rgba(90,139,224,0.06), transparent 62%),
|
|
24
|
+
linear-gradient(175deg, var(--bg), var(--bg2));
|
|
20
25
|
-webkit-font-smoothing: antialiased;
|
|
26
|
+
font-feature-settings: 'tnum' 1, 'ss01' 1;
|
|
21
27
|
}
|
|
28
|
+
/* Tabular monospaced numerals wherever a value is read at a glance (density 7). */
|
|
29
|
+
.stat, .gauge .pct, .vital .vval, .health-hero .hmeta .item b, .kv > b, td.mono { font-variant-numeric: tabular-nums; }
|
|
30
|
+
.stat, .gauge .pct { font-family: var(--mono); letter-spacing: -0.03em; }
|
|
22
31
|
a { color: inherit; text-decoration: none; }
|
|
23
32
|
.wrap { max-width: 1180px; margin: 0 auto; padding: 0 24px 64px; }
|
|
24
33
|
|
|
25
34
|
nav {
|
|
26
|
-
display: flex; align-items: center; gap: 16px; padding:
|
|
27
|
-
background: rgba(
|
|
35
|
+
display: flex; align-items: center; gap: 16px; padding: 16px 24px; position: sticky; top: 0; z-index: 10;
|
|
36
|
+
background: rgba(10,14,21,0.72); backdrop-filter: blur(14px); border-bottom: 1px solid var(--panel-br);
|
|
28
37
|
}
|
|
29
|
-
.brand { display: flex; align-items: center; gap: 10px; font-weight:
|
|
30
|
-
.brand .dot { width:
|
|
38
|
+
.brand { display: flex; align-items: center; gap: 10px; font-weight: 700; font-size: 17px; letter-spacing: -0.02em; }
|
|
39
|
+
.brand .dot { width: 20px; height: 20px; border-radius: 6px; background: var(--accent); box-shadow: inset 0 1px 0 rgba(255,255,255,0.35); }
|
|
31
40
|
.tabs { display: flex; gap: 4px; margin-left: 18px; }
|
|
32
41
|
.tabs a { padding: 6px 12px; border-radius: 8px; font-size: 13px; font-weight: 600; color: var(--txt2); }
|
|
33
|
-
.tabs a.active { background: rgba(
|
|
42
|
+
.tabs a.active { background: rgba(90,139,224,0.14); color: var(--accent); }
|
|
34
43
|
.nav-meta { margin-left: auto; display: flex; align-items: center; gap: 14px; color: var(--txt2); font-size: 13px; }
|
|
35
44
|
.env { padding: 4px 10px; border-radius: 999px; background: var(--okbg); color: var(--ok); font-weight: 600; font-size: 12px; }
|
|
36
45
|
.env-switch { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--panel-br); background: rgba(255,255,255,0.035); border-radius: 999px; }
|
|
@@ -58,12 +67,12 @@
|
|
|
58
67
|
@media (max-width: 880px) { .cards, .cards-3, .cards-2 { grid-template-columns: repeat(2, 1fr); } }
|
|
59
68
|
.panel { background: var(--panel); border: 1px solid var(--panel-br); border-radius: 16px; padding: 18px; backdrop-filter: blur(6px); }
|
|
60
69
|
a.panel { display: block; transition: border-color .15s, transform .15s; }
|
|
61
|
-
a.panel:hover { border-color: rgba(
|
|
70
|
+
a.panel:hover { border-color: rgba(90,139,224,0.5); transform: translateY(-1px); }
|
|
62
71
|
.panel h3 { font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; color: var(--txt3); font-weight: 700; }
|
|
63
72
|
.stat { font-size: 28px; font-weight: 800; margin-top: 8px; letter-spacing: -0.02em; }
|
|
64
73
|
.stat small { font-size: 14px; color: var(--txt2); font-weight: 500; }
|
|
65
74
|
.bar { height: 7px; border-radius: 999px; background: rgba(255,255,255,0.07); margin-top: 12px; overflow: hidden; }
|
|
66
|
-
.bar > i { display: block; height: 100%; border-radius: 999px; background:
|
|
75
|
+
.bar > i { display: block; height: 100%; border-radius: 999px; background: var(--accent); }
|
|
67
76
|
|
|
68
77
|
.section { margin-top: 30px; }
|
|
69
78
|
.section > h2 { font-size: 15px; font-weight: 700; margin-bottom: 12px; display: flex; align-items: center; gap: 8px; }
|
|
@@ -83,7 +92,7 @@
|
|
|
83
92
|
.pill.ok { background: var(--okbg); color: var(--ok); }
|
|
84
93
|
.pill.bad { background: var(--badbg); color: var(--bad); }
|
|
85
94
|
.pill.warn { background: var(--warnbg); color: var(--warn); }
|
|
86
|
-
.tag { padding: 2px 8px; border-radius: 6px; background: rgba(
|
|
95
|
+
.tag { padding: 2px 8px; border-radius: 6px; background: rgba(90,139,224,0.12); color: var(--accent); font-size: 12px; font-weight: 600; }
|
|
87
96
|
|
|
88
97
|
.kv { display: flex; justify-content: space-between; padding: 9px 0; border-top: 1px solid rgba(255,255,255,0.05); font-size: 14px; gap: 16px; }
|
|
89
98
|
.kv:first-of-type { border-top: 0; }
|
|
@@ -93,10 +102,13 @@
|
|
|
93
102
|
.deploy:first-of-type { border-top: 0; }
|
|
94
103
|
.deploy .when { margin-left: auto; color: var(--txt3); font-size: 12px; }
|
|
95
104
|
|
|
96
|
-
.btn { background:
|
|
97
|
-
.btn:hover { filter: brightness(1.
|
|
98
|
-
.btn
|
|
99
|
-
.btn.
|
|
105
|
+
.btn { background: var(--accent); color: var(--accent-ink); border: 0; border-radius: 10px; padding: 9px 16px; font-weight: 700; font-size: 13.5px; cursor: pointer; font-family: inherit; white-space: nowrap; transition: filter .12s, transform .12s; }
|
|
106
|
+
.btn:hover { filter: brightness(1.06); }
|
|
107
|
+
.btn:active { transform: translateY(1px); }
|
|
108
|
+
.btn.ghost { background: rgba(255,255,255,0.045); border: 1px solid var(--panel-br); color: var(--txt); }
|
|
109
|
+
.btn.ghost:hover { background: rgba(255,255,255,0.075); filter: none; }
|
|
110
|
+
.btn.danger { background: transparent; border: 1px solid var(--badbg); color: var(--bad); }
|
|
111
|
+
.btn.danger:hover { background: var(--badbg); filter: none; }
|
|
100
112
|
.btn.sm { padding: 6px 12px; font-size: 12px; }
|
|
101
113
|
|
|
102
114
|
.data-item { display: flex; align-items: center; gap: 12px; padding: 11px 0; border-top: 1px solid rgba(255,255,255,0.05); font-size: 14px; }
|
|
@@ -109,7 +121,7 @@
|
|
|
109
121
|
|
|
110
122
|
/* Drill-down extras */
|
|
111
123
|
.spark { display: flex; align-items: flex-end; gap: 3px; height: 48px; margin-top: 12px; }
|
|
112
|
-
.spark > i { flex: 1; background: linear-gradient(180deg, var(--accent), rgba(
|
|
124
|
+
.spark > i { flex: 1; background: linear-gradient(180deg, var(--accent), rgba(90,139,224,0.25)); border-radius: 3px 3px 0 0; min-height: 2px; }
|
|
113
125
|
.logs { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; line-height: 1.7; color: var(--txt2); max-height: 360px; overflow: auto; }
|
|
114
126
|
.logs .ts { color: var(--txt3); }
|
|
115
127
|
.logs .err { color: var(--bad); }
|
|
@@ -166,7 +178,7 @@
|
|
|
166
178
|
padding: 10px 12px; color: var(--txt); font-family: inherit; font-size: 14px;
|
|
167
179
|
}
|
|
168
180
|
.field-block textarea { resize: vertical; min-height: 92px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12px; line-height: 1.5; }
|
|
169
|
-
.field-block input:focus, .field-block textarea:focus, .select-filter select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(
|
|
181
|
+
.field-block input:focus, .field-block textarea:focus, .select-filter select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px rgba(90,139,224,0.12); }
|
|
170
182
|
.form-actions { grid-column: 1 / -1; display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
|
|
171
183
|
.msg { color: var(--txt3); font-size: 13px; }
|
|
172
184
|
.msg.ok { color: var(--ok); }
|
|
@@ -175,7 +187,7 @@
|
|
|
175
187
|
.filters { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; margin: 16px 0; }
|
|
176
188
|
.segmented { display: inline-flex; padding: 4px; border: 1px solid var(--panel-br); background: rgba(255,255,255,0.035); border-radius: 12px; gap: 2px; }
|
|
177
189
|
.segmented button { appearance: none; border: 0; background: transparent; color: var(--txt2); border-radius: 9px; padding: 7px 12px; font: inherit; font-size: 13px; font-weight: 700; cursor: pointer; }
|
|
178
|
-
.segmented button.active { background: rgba(
|
|
190
|
+
.segmented button.active { background: rgba(90,139,224,0.18); color: var(--accent); box-shadow: inset 0 0 0 1px rgba(90,139,224,0.18); }
|
|
179
191
|
.select-filter { display: inline-flex; align-items: center; gap: 8px; }
|
|
180
192
|
.select-filter select { min-width: 150px; padding: 8px 10px; }
|
|
181
193
|
@media (max-width: 760px) {
|
|
@@ -189,7 +201,7 @@
|
|
|
189
201
|
backend - the buttons would POST nowhere, so we show the exact command). */
|
|
190
202
|
.cmd { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border-radius: 10px; background: rgba(255,255,255,0.05); border: 1px solid var(--panel-br); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 12.5px; color: var(--txt); white-space: nowrap; }
|
|
191
203
|
.cmd::before { content: '$'; color: var(--txt3); }
|
|
192
|
-
.cmd.accent { border-color: rgba(
|
|
204
|
+
.cmd.accent { border-color: rgba(90,139,224,0.4); color: var(--accent); }
|
|
193
205
|
.cmds { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
|
|
194
206
|
|
|
195
207
|
/* Server dashboard components */
|
|
@@ -210,7 +222,7 @@
|
|
|
210
222
|
svg.chart .bar-mark.ok rect { fill: var(--ok); opacity: 0.85; }
|
|
211
223
|
svg.chart .bar-mark.warn rect { fill: var(--warn); opacity: 0.88; }
|
|
212
224
|
svg.chart .bar-mark.bad rect { fill: var(--bad); opacity: 0.9; }
|
|
213
|
-
svg.chart .spark-path { fill: none; stroke: var(--accent); stroke-width:
|
|
225
|
+
svg.chart .spark-path { fill: none; stroke: var(--accent); stroke-width: 2.25; stroke-linecap: round; stroke-linejoin: round; }
|
|
214
226
|
svg.chart circle.ok { fill: var(--ok); }
|
|
215
227
|
svg.chart circle.bad { fill: var(--bad); }
|
|
216
228
|
svg.chart.disabled { opacity: 0.86; }
|
|
@@ -230,7 +242,7 @@
|
|
|
230
242
|
.health-hero .status { display: inline-flex; align-items: center; gap: 12px; font-weight: 800; font-size: 17px; letter-spacing: -0.01em; color: var(--hue); }
|
|
231
243
|
.health-hero .status .led {
|
|
232
244
|
width: 13px; height: 13px; border-radius: 50%; background: var(--hue);
|
|
233
|
-
box-shadow: 0 0 0 4px var(--huebg)
|
|
245
|
+
box-shadow: 0 0 0 4px var(--huebg); animation: hb-pulse 2.4s ease-in-out infinite;
|
|
234
246
|
}
|
|
235
247
|
.health-hero .status small { display: block; color: var(--txt3); font-size: 12px; font-weight: 500; margin-top: 2px; letter-spacing: 0; }
|
|
236
248
|
@keyframes hb-pulse { 0%, 100% { opacity: 1 } 50% { opacity: 0.5 } }
|
|
@@ -260,7 +272,7 @@
|
|
|
260
272
|
}
|
|
261
273
|
.gauge .ring::after {
|
|
262
274
|
content: ''; position: absolute; inset: 15px; border-radius: 50%;
|
|
263
|
-
background: linear-gradient(160deg,
|
|
275
|
+
background: linear-gradient(160deg, #10151f, #0c1017);
|
|
264
276
|
box-shadow: inset 0 0 0 1px rgba(255,255,255,0.035);
|
|
265
277
|
}
|
|
266
278
|
.gauge .center { position: absolute; inset: 0; z-index: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; }
|
|
@@ -282,14 +294,14 @@
|
|
|
282
294
|
.vital .vnote { font-size: 12px; color: var(--txt3); margin-top: 3px; }
|
|
283
295
|
|
|
284
296
|
/* Tone-colored progress bars (shared with index health cards). */
|
|
285
|
-
.bar.ok > i { background:
|
|
286
|
-
.bar.warn > i { background:
|
|
287
|
-
.bar.bad > i { background:
|
|
297
|
+
.bar.ok > i { background: var(--ok); }
|
|
298
|
+
.bar.warn > i { background: var(--warn); }
|
|
299
|
+
.bar.bad > i { background: var(--bad); }
|
|
288
300
|
|
|
289
301
|
/* Load trend chart - sparkline with capacity guide + axis labels. */
|
|
290
302
|
.chart { position: relative; }
|
|
291
303
|
.chart .spark { height: 124px; align-items: flex-end; }
|
|
292
|
-
.chart .spark > i { background: linear-gradient(180deg, var(--accent), rgba(
|
|
304
|
+
.chart .spark > i { background: linear-gradient(180deg, var(--accent), rgba(90,139,224,0.22)); transition: height .6s ease; }
|
|
293
305
|
.chart .spark > i.hot { background: linear-gradient(180deg, var(--warn), rgba(251,191,36,0.22)); }
|
|
294
306
|
.chart .spark > i.peak { background: linear-gradient(180deg, var(--bad), rgba(248,113,113,0.25)); }
|
|
295
307
|
.chart .xaxis { display: flex; justify-content: space-between; margin-top: 9px; color: var(--txt3); font-size: 11px; }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stacksjs/ts-cloud",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.6.
|
|
4
|
+
"version": "0.6.1",
|
|
5
5
|
"description": "A lightweight, performant infrastructure-as-code library and CLI for deploying both server-based (EC2) and serverless applications.",
|
|
6
6
|
"author": "Chris Breuer <chris@stacksjs.com>",
|
|
7
7
|
"license": "MIT",
|
|
@@ -89,8 +89,8 @@
|
|
|
89
89
|
"test": "bun test"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@ts-cloud/aws-types": "0.6.
|
|
93
|
-
"@ts-cloud/core": "0.6.
|
|
92
|
+
"@ts-cloud/aws-types": "0.6.1",
|
|
93
|
+
"@ts-cloud/core": "0.6.1",
|
|
94
94
|
"@stacksjs/ts-xml": "^0.1.0"
|
|
95
95
|
},
|
|
96
96
|
"devDependencies": {
|