@runwisp/ui 1.2.0 → 1.3.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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@runwisp/ui",
3
3
  "description": "Svelte 5 UI component library for RunWisp dashboards and admin interfaces.",
4
- "version": "1.2.0",
4
+ "version": "1.3.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -49,8 +49,8 @@
49
49
  "devDependencies": {
50
50
  "@chromatic-com/storybook": "^5.2.1",
51
51
  "@eslint/js": "^10.0.1",
52
- "@runwisp/eslint-config": "1.2.0",
53
- "@runwisp/typescript-config": "1.2.0",
52
+ "@runwisp/eslint-config": "1.3.0",
53
+ "@runwisp/typescript-config": "1.3.0",
54
54
  "@storybook/addon-a11y": "^10.5.5",
55
55
  "@storybook/addon-docs": "^10.5.5",
56
56
  "@storybook/addon-svelte-csf": "^5.1.2",
@@ -93,7 +93,7 @@
93
93
  "@fontsource-variable/geist-mono": "^5.3.0",
94
94
  "@fontsource/tasa-orbiter": "^5.3.0",
95
95
  "@lucide/svelte": "^1.28.0",
96
- "@runwisp/common": "1.2.0",
96
+ "@runwisp/common": "1.3.0",
97
97
  "@tanstack/svelte-virtual": "^3.13.35",
98
98
  "ansi-to-html": "^0.7.2",
99
99
  "cron-parser": "^5.7.0",
@@ -278,7 +278,8 @@
278
278
  displayed === "crashed" ||
279
279
  displayed === "log_overflow" ||
280
280
  displayed === "missed" ||
281
- displayed === "start_failed"
281
+ displayed === "start_failed" ||
282
+ displayed === "unhealthy"
282
283
  )
283
284
  return "var(--color-danger-surface)";
284
285
  if (displayed === "timeout" || displayed === "daemon_stopped" || displayed === "queue_full")
@@ -179,6 +179,7 @@ describe("STATUS_BUCKETS", () => {
179
179
  "timeout",
180
180
  "log_overflow",
181
181
  "start_failed",
182
+ "unhealthy",
182
183
  "missed",
183
184
  ];
184
185
 
@@ -29,6 +29,7 @@ const RUN_VERDICTS: Record<RunStatus, RunVerdict> = {
29
29
  daemon_stopped: { verb: "cut short after", timed: true },
30
30
  log_overflow: { verb: "killed after", timed: true },
31
31
  start_failed: { verb: "gave up after", timed: true },
32
+ unhealthy: { verb: "killed as unhealthy after", timed: true },
32
33
  ended: { verb: "ended after", timed: true },
33
34
  running: { verb: "running for", timed: true },
34
35
  pending: { verb: "queued", timed: false },
@@ -13,6 +13,7 @@ import {
13
13
  FileExclamationPoint,
14
14
  CalendarX,
15
15
  OctagonX,
16
+ HeartCrack,
16
17
  } from "@lucide/svelte";
17
18
  import type { Component } from "svelte";
18
19
  import { displayStatus, type RunStatus, type Run } from "@runwisp/common";
@@ -153,6 +154,16 @@ export const RUN_STATUS_CONFIG: Record<RunStatus, RunStatusConfig> = {
153
154
  description:
154
155
  "The run (or service instance) kept failing; after restart_attempts consecutive failures, RunWisp gave up restarting it automatically.",
155
156
  },
157
+ unhealthy: {
158
+ icon: HeartCrack,
159
+ color: "text-danger-surface",
160
+ bg: "bg-danger-soft",
161
+ border: "border-danger-soft",
162
+ dot: "bg-danger-surface",
163
+ badge: "bg-danger-soft text-danger-soft-text",
164
+ description:
165
+ "The service instance kept failing its health_check, so RunWisp stopped it. Its restart policy decides what happens next.",
166
+ },
156
167
  pending: {
157
168
  icon: Clock,
158
169
  color: "text-on-surface-muted",
package/src/lib/theme.css CHANGED
@@ -259,7 +259,17 @@ h3 {
259
259
  font-weight: 800;
260
260
  line-height: 1.1;
261
261
  letter-spacing: -0.02em;
262
- text-wrap: balance;
262
+ }
263
+
264
+ /* Layered, unlike the rule above: text-wrap sets the same property as
265
+ white-space, so unlayered it would beat the `truncate` utility and wrap a
266
+ heading that asked to be cut to one line. */
267
+ @layer base {
268
+ h1,
269
+ h2,
270
+ h3 {
271
+ text-wrap: balance;
272
+ }
263
273
  }
264
274
 
265
275
  /* Utility classes for the design system */