signalk-maintenance-tracker 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/CHANGELOG.md CHANGED
@@ -1,3 +1,43 @@
1
+ # v1.3.0
2
+
3
+ Notes and descriptions now render the way you typed them: pasted URLs become
4
+ links, and line breaks stay where you put them. And the `unknown` task status
5
+ is now `info`.
6
+
7
+ ## Highlights
8
+
9
+ - **Bare URLs in notes and descriptions become links.** Pasting a manual's URL
10
+ into a note used to leave dead text, since markdown only links explicit
11
+ `[text](url)`. Bare `http(s)://` and `www.` runs are now anchored, with the
12
+ hostname as the link text (a pasted tracking URL is unreadable inline) and the
13
+ full URL on hover. Linking runs over the already-sanitized HTML and skips text
14
+ inside existing links, `code` and `pre`, so it can't reintroduce a
15
+ `javascript:` URL.
16
+ - **Line breaks survive.** A note typed over several lines came out as one
17
+ run-on line, because a lone newline means whitespace to markdown but a line
18
+ break to whoever typed it into a textarea. Single newlines are now kept as
19
+ breaks and runs of blank lines are no longer collapsed, while fenced code
20
+ blocks and list spacing are left exactly as markdown intends them.
21
+ - **The `unknown` task status is now `info`.** A task with no intervals is a
22
+ plain informational record, not one whose state we failed to work out — but
23
+ the badge read "unknown", which sounds like something is missing. The rename
24
+ goes all the way through: badge, CSS tokens, API filter value, and the status
25
+ the notification manager declines to publish for. Precedence is unchanged:
26
+ `overdue` > `due_soon` > `ok` > `info`.
27
+
28
+ ## Breaking changes
29
+
30
+ - `GET /tasks?status=unknown` no longer matches anything. Unrecognized filter
31
+ values are dropped rather than rejected, so an old caller gets an unfiltered
32
+ list instead of an error — pass `status=info` instead. Task status values in
33
+ API responses and on published SignalK paths change from `unknown` to `info`
34
+ as well.
35
+
36
+ ## Smaller changes and fixes
37
+
38
+ - The task detail page no longer shows a "Description" heading (or a "No
39
+ description." placeholder) for a task that only has consumables.
40
+
1
41
  # v1.2.0
2
42
 
3
43
  A task detail page that puts the numbers you actually compare side by side,
package/README.md CHANGED
@@ -11,7 +11,7 @@ else that comes due by engine hours, by calendar time, or both.
11
11
  (days/weeks/months/years). Add a one-time calendar due date for a one-off
12
12
  job, or leave every interval blank to keep a plain informational record.
13
13
  - **Status tracking** — each task is `overdue`, `due soon`, `ok`, or
14
- `unknown`; the task list sorts most-urgent first. Any task can override the
14
+ `info`; the task list sorts most-urgent first. Any task can override the
15
15
  plugin-wide "due soon" lead windows with its own runtime-hours and
16
16
  calendar-days thresholds.
17
17
  - **Maintenance log** — per-task history plus a master log across all tasks,
@@ -163,7 +163,7 @@ function parseTaskListQuery(req) {
163
163
  return {
164
164
  search: str(req.query.search),
165
165
  tags: csv(req.query.tags),
166
- status: csv(req.query.status)?.filter((s) => ['overdue', 'due_soon', 'ok', 'unknown'].includes(s)),
166
+ status: csv(req.query.status)?.filter((s) => ['overdue', 'due_soon', 'ok', 'info'].includes(s)),
167
167
  sort: pickEnum(req.query.sort, [
168
168
  'name',
169
169
  'remaining_runtime',
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/api/router.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ function addMonths(d, n) {
35
35
  }
36
36
  function mostUrgent(statuses) {
37
37
  if (statuses.length === 0)
38
- return 'unknown';
38
+ return 'info';
39
39
  return statuses.reduce((a, b) => (types_1.STATUS_RANK[a] <= types_1.STATUS_RANK[b] ? a : b));
40
40
  }
41
41
  /**
@@ -65,8 +65,8 @@ function computeTask(task, currentRuntime, now, cfg) {
65
65
  remaining_time_ms: null,
66
66
  time_fraction: null,
67
67
  time_status: null,
68
- status: 'unknown',
69
- status_rank: types_1.STATUS_RANK.unknown,
68
+ status: 'info',
69
+ status_rank: types_1.STATUS_RANK.info,
70
70
  urgency: -Infinity,
71
71
  };
72
72
  // Elapsed-since-last-service figures stand on their own: they need only a
@@ -95,7 +95,7 @@ function computeTask(task, currentRuntime, now, cfg) {
95
95
  : 'ok';
96
96
  }
97
97
  else {
98
- out.runtime_status = 'unknown';
98
+ out.runtime_status = 'info';
99
99
  }
100
100
  }
101
101
  // Recurring time-interval dimension: configured when magnitude + unit are set.
@@ -110,7 +110,7 @@ function computeTask(task, currentRuntime, now, cfg) {
110
110
  out.scheduled_status = dateStatus(out.scheduled_remaining_ms, timeLead);
111
111
  }
112
112
  else {
113
- out.scheduled_status = 'unknown';
113
+ out.scheduled_status = 'info';
114
114
  }
115
115
  }
116
116
  // One-time due-date dimension: the stored deadline. Fraction runs from task
@@ -125,8 +125,8 @@ function computeTask(task, currentRuntime, now, cfg) {
125
125
  }
126
126
  // Merged "time" dimension = the more urgent of the two: whichever has the
127
127
  // lower remaining drives remaining_time_ms + time_fraction; time_status is
128
- // the most-urgent of the sub-statuses (so a configured-but-unknown recurring
129
- // dimension still surfaces as unknown).
128
+ // the most-urgent of the sub-statuses (so a configured-but-uncomputable
129
+ // recurring dimension still surfaces as info).
130
130
  const timeSubs = [
131
131
  { remaining: out.scheduled_remaining_ms, fraction: out.scheduled_fraction },
132
132
  { remaining: out.due_date_remaining_ms, fraction: out.due_date_fraction },
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/domain/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/domain/status.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ class NotificationManager {
27
27
  case 'overdue':
28
28
  return this.opts.alarmStateOverdue;
29
29
  default:
30
- return undefined; // unknown
30
+ return undefined; // info
31
31
  }
32
32
  }
33
33
  publishAll(tasks) {
@@ -36,10 +36,10 @@ class NotificationManager {
36
36
  for (const task of tasks) {
37
37
  const state = this.stateForStatus(task.status);
38
38
  if (!state) {
39
- // unknown: publish nothing, but clear a previously-raised notification
39
+ // info: publish nothing, but clear a previously-raised notification
40
40
  const last = this.lastState.get(task.slug);
41
41
  if (last && last !== 'none') {
42
- this.send(task.slug, 'none', `${task.name}: status unknown`);
42
+ this.send(task.slug, 'none', `${task.name}: status info`);
43
43
  }
44
44
  continue;
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/signalk/notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/signalk/notifications.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -6,6 +6,6 @@ exports.STATUS_RANK = {
6
6
  overdue: 0,
7
7
  due_soon: 1,
8
8
  ok: 2,
9
- unknown: 3,
9
+ info: 3,
10
10
  };
11
11
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAe,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAI9D,QAAA,WAAW,GAA2B;IACjD,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;CACX,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAEa,QAAA,UAAU,GAAe,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAI9D,QAAA,WAAW,GAA2B;IACjD,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,EAAE,EAAE,CAAC;IACL,IAAI,EAAE,CAAC;CACR,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalk-maintenance-tracker",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "Track recurring boat maintenance tasks with runtime and calendar based intervals.",
5
5
  "main": "dist/index.js",
6
6
  "license": "MIT",
@@ -1,15 +1,19 @@
1
1
  /**
2
- * The single place raw HTML is set (§7.8): markdown → snarkdown → sanitize →
3
- * dangerouslySetInnerHTML. Nothing else may set raw HTML.
2
+ * The single place raw HTML is set (§7.8): mark blank lines → snarkdown →
3
+ * sanitize → autolink → soft breaks → dangerouslySetInnerHTML. Nothing else may
4
+ * set raw HTML.
4
5
  */
5
6
  import snarkdown from '../../vendor/snarkdown.js';
7
+ import { autolinkHtml } from '../lib/autolink.js';
6
8
  import { html } from '../lib/html.js';
7
9
  import { sanitizeHtml } from '../lib/sanitize.js';
10
+ import { keepBlankLines, softBreakHtml } from '../lib/softbreak.js';
8
11
 
9
12
  /** @param {{ markdown: string|null|undefined }} props */
10
13
  export function MarkdownView(props) {
11
14
  if (!props.markdown) return null;
12
- const clean = sanitizeHtml(snarkdown(props.markdown));
15
+ const rendered = snarkdown(keepBlankLines(props.markdown));
16
+ const clean = softBreakHtml(autolinkHtml(sanitizeHtml(rendered)));
13
17
  return html`<div
14
18
  class="markdown"
15
19
  dangerouslySetInnerHTML=${{ __html: clean }}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Bare-URL autolinking for markdown output (§7.8). snarkdown only links
3
+ * explicit [text](url), so a note that just pastes a URL renders as dead text.
4
+ * This turns http(s):// and www. runs in the text into anchors.
5
+ *
6
+ * Runs *after* sanitizeHtml() on already-clean HTML: every href here is built
7
+ * from a match that must start with http://, https:// or www., so this pass
8
+ * cannot reintroduce a javascript: URL. Text inside existing links and inside
9
+ * code is left alone. Only <MarkdownView/> consumes this.
10
+ */
11
+
12
+ /** Bare URL run: everything up to whitespace or a tag; trimmed below. */
13
+ const URL_RE = /(?:https?:\/\/|www\.)[^\s<]+/gi;
14
+
15
+ /**
16
+ * Elements whose text must not be linkified.
17
+ * @type {Record<string, boolean>}
18
+ */
19
+ const SKIP_TAGS = {
20
+ A: true,
21
+ CODE: true,
22
+ PRE: true,
23
+ };
24
+
25
+ /** Sentence punctuation that follows a URL far more often than it ends one. */
26
+ const TRAILING = '.,;:!?\'"';
27
+
28
+ /**
29
+ * @param {string} clean sanitized HTML from sanitizeHtml()
30
+ * @returns {string} the same HTML with bare URLs wrapped in anchors
31
+ */
32
+ export function autolinkHtml(clean) {
33
+ const doc = new DOMParser().parseFromString(clean, 'text/html');
34
+ autolinkNode(doc.body);
35
+ return doc.body.innerHTML;
36
+ }
37
+
38
+ /** @param {Node} parent */
39
+ function autolinkNode(parent) {
40
+ // Snapshot: linkifying replaces text nodes with fragments as we walk.
41
+ const children = Array.prototype.slice.call(parent.childNodes);
42
+ for (let i = 0; i < children.length; i++) {
43
+ const node = children[i];
44
+ if (node.nodeType === 3) {
45
+ linkifyText(/** @type {Text} */ (node));
46
+ } else if (
47
+ node.nodeType === 1 &&
48
+ !SKIP_TAGS[/** @type {Element} */ (node).tagName]
49
+ ) {
50
+ autolinkNode(node);
51
+ }
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Replace one text node with its text plus <a> elements for any URLs in it.
57
+ * @param {Text} node
58
+ */
59
+ function linkifyText(node) {
60
+ const text = node.nodeValue || '';
61
+ const doc = node.ownerDocument;
62
+ if (!doc) return;
63
+ let frag = null;
64
+ let last = 0;
65
+ let match;
66
+ URL_RE.lastIndex = 0;
67
+ while ((match = URL_RE.exec(text)) !== null) {
68
+ const url = trimTrailing(match[0]);
69
+ // Resume after what we kept, so trimmed punctuation stays plain text.
70
+ URL_RE.lastIndex = match.index + url.length;
71
+ if (!url) continue;
72
+ if (!frag) frag = doc.createDocumentFragment();
73
+ if (match.index > last) {
74
+ frag.appendChild(doc.createTextNode(text.slice(last, match.index)));
75
+ }
76
+ const href = url.indexOf('www.') === 0 ? 'https://' + url : url;
77
+ const a = doc.createElement('a');
78
+ a.setAttribute('href', href);
79
+ // The host is the readable part; the full URL stays on hover.
80
+ a.setAttribute('title', href);
81
+ a.textContent = hostnameOf(href) || url;
82
+ frag.appendChild(a);
83
+ last = match.index + url.length;
84
+ }
85
+ if (!frag) return;
86
+ if (last < text.length) {
87
+ frag.appendChild(doc.createTextNode(text.slice(last)));
88
+ }
89
+ node.parentNode && node.parentNode.replaceChild(frag, node);
90
+ }
91
+
92
+ /**
93
+ * The host is what identifies a link to a reader; a pasted path is usually
94
+ * noise ("example.com" beats a 90-character tracking URL). Returns '' if the
95
+ * URL will not parse, and the caller falls back to showing it whole.
96
+ *
97
+ * @param {string} href
98
+ * @returns {string}
99
+ */
100
+ function hostnameOf(href) {
101
+ try {
102
+ return new URL(href).hostname;
103
+ } catch (_e) {
104
+ return '';
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Drop punctuation a sentence left on the end of a URL: "see https://x.com."
110
+ * A closing paren only counts as the URL's when the URL opened one, so both
111
+ * "(see https://x.com)" and "https://x.com/a_(b)" come out right.
112
+ *
113
+ * @param {string} url
114
+ * @returns {string}
115
+ */
116
+ function trimTrailing(url) {
117
+ let end = url.length;
118
+ while (end > 0) {
119
+ const ch = url.charAt(end - 1);
120
+ if (TRAILING.indexOf(ch) !== -1) {
121
+ end--;
122
+ } else if (ch === ')' && closesMoreThanOpens(url.slice(0, end))) {
123
+ end--;
124
+ } else {
125
+ break;
126
+ }
127
+ }
128
+ return url.slice(0, end);
129
+ }
130
+
131
+ /** @param {string} s */
132
+ function closesMoreThanOpens(s) {
133
+ const opens = s.match(/\(/g);
134
+ const closes = s.match(/\)/g);
135
+ return (closes ? closes.length : 0) > (opens ? opens.length : 0);
136
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Authored line breaks for markdown output (§7.8). People type notes into a
3
+ * textarea and mean every newline they press, but markdown does not: snarkdown
4
+ * drops a lone newline to whitespace, and collapses any run of blank lines into
5
+ * a single <br>. So "Maxwell HRC10\n\n\n<url>" came out as one run-on line, and
6
+ * spacing the author added could not be got back.
7
+ *
8
+ * Two steps, on either side of snarkdown:
9
+ *
10
+ * - keepBlankLines() runs first, splitting each run of newlines with a marker
11
+ * character so snarkdown sees single newlines it leaves alone instead of the
12
+ * blank-line run it would collapse.
13
+ * - softBreakHtml() runs last, turning the newlines left in the text into <br>
14
+ * and dropping the markers.
15
+ *
16
+ * The usual one-step trick — rewriting "\n" to " \n" before snarkdown — does
17
+ * not work here: it merges list items and leaves trailing spaces inside code
18
+ * fences. Only <MarkdownView/> consumes this.
19
+ */
20
+
21
+ /**
22
+ * Stands in for a blank line between two newlines. A control character, so it
23
+ * is inert to snarkdown's grammar and cannot occur in a note by accident.
24
+ */
25
+ const MARKER = '\u0001';
26
+
27
+ /**
28
+ * Unmarked newlines at either edge of a text node. Marked ones are blank lines
29
+ * the author typed and survive; these are snarkdown's own output formatting.
30
+ */
31
+ const LEAD_RE = /^\n+/;
32
+ const TAIL_RE = /\n+$/;
33
+
34
+ /** Fenced code, kept whole: blank lines in there are code, not layout. */
35
+ const FENCE_RE = /(```[\s\S]*?```)/g;
36
+
37
+ /**
38
+ * Split runs of blank lines so snarkdown cannot collapse them. Runs before
39
+ * snarkdown; softBreakHtml() clears up after it.
40
+ *
41
+ * @param {string} markdown as the author typed it
42
+ * @returns {string} markdown with blank-line runs marked
43
+ */
44
+ export function keepBlankLines(markdown) {
45
+ // Odd indices are the fences themselves — left exactly as written.
46
+ const chunks = String(markdown).replace(/\r\n?/g, '\n').split(FENCE_RE);
47
+ for (let i = 0; i < chunks.length; i += 2) {
48
+ chunks[i] = chunks[i]
49
+ .split(MARKER)
50
+ .join('')
51
+ .replace(/\n{2,}/g, markRun);
52
+ }
53
+ return chunks.join('');
54
+ }
55
+
56
+ /** @param {string} run two or more newlines */
57
+ function markRun(run) {
58
+ let out = '\n';
59
+ for (let i = 1; i < run.length; i++) out += MARKER + '\n';
60
+ return out;
61
+ }
62
+
63
+ /**
64
+ * Newlines are content here, not layout.
65
+ * @type {Record<string, boolean>}
66
+ */
67
+ const SKIP_TAGS = {
68
+ CODE: true,
69
+ PRE: true,
70
+ };
71
+
72
+ /**
73
+ * Elements that already break the line. A newline next to one of these came
74
+ * from snarkdown's own output formatting, not from the author.
75
+ * @type {Record<string, boolean>}
76
+ */
77
+ const BLOCK_TAGS = {
78
+ BLOCKQUOTE: true,
79
+ DIV: true,
80
+ H1: true,
81
+ H2: true,
82
+ H3: true,
83
+ H4: true,
84
+ H5: true,
85
+ H6: true,
86
+ HR: true,
87
+ LI: true,
88
+ OL: true,
89
+ P: true,
90
+ PRE: true,
91
+ TABLE: true,
92
+ UL: true,
93
+ };
94
+
95
+ /**
96
+ * @param {string} clean sanitized HTML from sanitizeHtml()
97
+ * @returns {string} the same HTML with authored newlines as <br>
98
+ */
99
+ export function softBreakHtml(clean) {
100
+ const doc = new DOMParser().parseFromString(clean, 'text/html');
101
+ breakNode(doc.body);
102
+ return doc.body.innerHTML;
103
+ }
104
+
105
+ /** @param {Node} parent */
106
+ function breakNode(parent) {
107
+ // Snapshot: breaking replaces text nodes with fragments as we walk.
108
+ const children = Array.prototype.slice.call(parent.childNodes);
109
+ for (let i = 0; i < children.length; i++) {
110
+ const node = children[i];
111
+ if (node.nodeType === 3) {
112
+ breakText(/** @type {Text} */ (node));
113
+ } else if (
114
+ node.nodeType === 1 &&
115
+ !SKIP_TAGS[/** @type {Element} */ (node).tagName]
116
+ ) {
117
+ breakNode(node);
118
+ }
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Replace one text node with its lines separated by <br>.
124
+ * @param {Text} node
125
+ */
126
+ function breakText(node) {
127
+ const doc = node.ownerDocument;
128
+ let text = node.nodeValue || '';
129
+ if (!doc || (text.indexOf('\n') === -1 && text.indexOf(MARKER) === -1)) {
130
+ return;
131
+ }
132
+ // A newline against a block is snarkdown's formatting, not a typed line.
133
+ if (isBlockEdge(node.previousSibling)) text = text.replace(LEAD_RE, '');
134
+ if (isBlockEdge(node.nextSibling)) text = text.replace(TAIL_RE, '');
135
+ if (text.indexOf('\n') === -1) {
136
+ node.nodeValue = text.split(MARKER).join('');
137
+ return;
138
+ }
139
+ const lines = text.split('\n');
140
+ const frag = doc.createDocumentFragment();
141
+ for (let i = 0; i < lines.length; i++) {
142
+ if (i > 0) frag.appendChild(doc.createElement('br'));
143
+ // A marked line is a blank one: the <br> pair around it is the whole line.
144
+ const line = lines[i].split(MARKER).join('');
145
+ if (line) frag.appendChild(doc.createTextNode(line));
146
+ }
147
+ node.parentNode && node.parentNode.replaceChild(frag, node);
148
+ }
149
+
150
+ /**
151
+ * True at the start/end of the enclosing block, or against a sibling that
152
+ * breaks the line on its own — a <br> there would be a stray blank line.
153
+ *
154
+ * @param {Node|null} sibling
155
+ * @returns {boolean}
156
+ */
157
+ function isBlockEdge(sibling) {
158
+ if (!sibling) return true;
159
+ return (
160
+ sibling.nodeType === 1 &&
161
+ BLOCK_TAGS[/** @type {Element} */ (sibling).tagName] === true
162
+ );
163
+ }
@@ -214,15 +214,17 @@ export function TaskDetailPage(props) {
214
214
  // Nothing to say without a description or parts: drop the card.
215
215
  task.description || consumables.length
216
216
  ? html`<div class="card">
217
- <h3>Description</h3>
218
217
  ${
219
218
  task.description
220
- ? html`<${MarkdownView} markdown=${task.description} />`
221
- : html`<p class="muted" style="margin:0">No description.</p>`
219
+ ? html`<h3>Description</h3>
220
+ <${MarkdownView} markdown=${task.description} />`
221
+ : null
222
222
  }
223
223
  ${
224
224
  consumables.length
225
- ? html`<div style="margin-top:16px">
225
+ ? html`<div
226
+ style=${task.description ? 'margin-top:16px' : ''}
227
+ >
226
228
  <h3>Consumables</h3>
227
229
  <ul class="consumables-list">
228
230
  ${consumables.map(
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  /** @typedef {'days'|'weeks'|'months'|'years'} TimeUnit */
8
- /** @typedef {'overdue'|'due_soon'|'ok'|'unknown'} Status */
8
+ /** @typedef {'overdue'|'due_soon'|'ok'|'info'} Status */
9
9
 
10
10
  /**
11
11
  * @typedef {Object} TaskConsumableDTO
@@ -624,9 +624,9 @@ pre {
624
624
  background: var(--ok-bg);
625
625
  color: var(--ok);
626
626
  }
627
- .badge.unknown {
628
- background: var(--unknown-bg);
629
- color: var(--unknown);
627
+ .badge.info {
628
+ background: var(--info-bg);
629
+ color: var(--info);
630
630
  }
631
631
 
632
632
  /* stock status badge (parts linked via signalk-stowage-mgmt) */
@@ -22,8 +22,8 @@
22
22
  --ok: #2b8a3e;
23
23
  --ok-hover: #237434;
24
24
  --ok-bg: #d3f9d8;
25
- --unknown: #5c6570;
26
- --unknown-bg: #e9ecef;
25
+ --info: #5c6570;
26
+ --info-bg: #e9ecef;
27
27
  --shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
28
28
  --overlay: rgba(20, 24, 28, 0.5);
29
29
  }
@@ -48,8 +48,8 @@
48
48
  --ok: #69db7c;
49
49
  --ok-hover: #8ce99a;
50
50
  --ok-bg: #1e3325;
51
- --unknown: #9aa4ae;
52
- --unknown-bg: #272d33;
51
+ --info: #9aa4ae;
52
+ --info-bg: #272d33;
53
53
  --shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
54
54
  --overlay: rgba(0, 0, 0, 0.65);
55
55
  }