@knpkv/herdr-work 0.7.2 → 0.9.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/README.md +1 -1
- package/dist/model.d.ts +26 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +19 -0
- package/dist/model.js.map +1 -1
- package/dist/request-decision.d.ts +70 -0
- package/dist/request-decision.d.ts.map +1 -0
- package/dist/request-decision.js +29 -0
- package/dist/request-decision.js.map +1 -0
- package/dist/service.d.ts +30 -1
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +2 -0
- package/dist/service.js.map +1 -1
- package/dist/store.d.ts +37 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +71 -14
- package/dist/store.js.map +1 -1
- package/dist/view.d.ts +10 -1
- package/dist/view.d.ts.map +1 -1
- package/dist/view.js +205 -27
- package/dist/view.js.map +1 -1
- package/dist/work-triage.d.ts +15 -9
- package/dist/work-triage.d.ts.map +1 -1
- package/dist/work-triage.js +39 -11
- package/dist/work-triage.js.map +1 -1
- package/package.json +3 -3
- package/src/styles.css +35 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-triage.d.ts","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"work-triage.d.ts","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAIvF,mFAAmF;AACnF,eAAO,MAAM,sBAAsB,WAAS,CAAA;AAE5C,oCAAoC;AACpC,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;AAEjG,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,eAAe,CAO3D,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,iFAAiF;IACjF,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,kFAAkF;IAClF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC,WAAW,CAAC,CAAA;CAClD;AAED,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GACzB;IACA,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,QAAQ,CAAC,aAAa,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;KAAE,GAAG,IAAI,CAAA;CAC1F,GACC;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,GACrF;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAE9B,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;CACpC;AA2DD;;;;GAIG;AACH,eAAO,MAAM,UAAU,aAAc,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,KAAG,UAuCxF,CAAA;AAID;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,MAAM,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YAAa,iBAAiB,UAAS,eAAe,KAAe,MAenG,CAAA;AAED,0CAA0C;AAC1C,eAAO,MAAM,oBAAoB;;;;;;;CAQoB,CAAA"}
|
package/dist/work-triage.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
const DAY_MS = 86_400_000;
|
|
2
|
-
/** How long a finished goal stays in the "
|
|
2
|
+
/** How long a finished goal stays in the "Finished in the last 24 hours" group. */
|
|
3
3
|
export const workTriageDoneWindowMs = DAY_MS;
|
|
4
|
-
export const workTriageGroups = [
|
|
5
|
-
|
|
4
|
+
export const workTriageGroups = [
|
|
5
|
+
"needs-you",
|
|
6
|
+
"blocked",
|
|
7
|
+
"moving",
|
|
8
|
+
"planned",
|
|
9
|
+
"done",
|
|
10
|
+
"earlier"
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* Which displayed states have finished. Keyed by every WorkDisplayState, so a new state must be
|
|
14
|
+
* placed here to compile.
|
|
15
|
+
*/
|
|
6
16
|
const terminalState = {
|
|
7
17
|
planned: false,
|
|
8
18
|
working: false,
|
|
@@ -12,23 +22,25 @@ const terminalState = {
|
|
|
12
22
|
completed: true,
|
|
13
23
|
abandoned: true
|
|
14
24
|
};
|
|
15
|
-
const terminal = (goal) => terminalState[goal.state];
|
|
16
25
|
const openRequestsOf = (goal) => (goal.requests ?? []).filter((request) => request.state === "open").toSorted((a, b) => a.requestedAt - b.requestedAt);
|
|
17
26
|
/**
|
|
18
27
|
* One group per goal, first match wins. An open request outranks every state, so a blocked goal
|
|
19
28
|
* with an open request is in "needs you" and not in the blocked count. A request without an
|
|
20
29
|
* approval target still counts: a person must act, even when the hub link is missing.
|
|
21
30
|
*/
|
|
22
|
-
const groupOf = (
|
|
31
|
+
const groupOf = (finishedAt, displayState, openRequests, asOf) => {
|
|
23
32
|
if (openRequests.length > 0)
|
|
24
33
|
return "needs-you";
|
|
25
|
-
if (
|
|
34
|
+
if (displayState === "blocked")
|
|
26
35
|
return "blocked";
|
|
27
|
-
if (
|
|
28
|
-
return asOf -
|
|
36
|
+
if (terminalState[displayState])
|
|
37
|
+
return asOf - finishedAt <= workTriageDoneWindowMs ? "done" : "earlier";
|
|
38
|
+
// Not started yet: listed after the work that is moving, never counted as moving.
|
|
39
|
+
if (displayState === "planned")
|
|
40
|
+
return "planned";
|
|
29
41
|
return "moving";
|
|
30
42
|
};
|
|
31
|
-
const groupOrder = { "needs-you": 0, blocked: 1, moving: 2,
|
|
43
|
+
const groupOrder = { "needs-you": 0, blocked: 1, moving: 2, planned: 3, done: 4, earlier: 5 };
|
|
32
44
|
/**
|
|
33
45
|
* Within "needs you", the oldest open request first; elsewhere, the most recently updated goal
|
|
34
46
|
* first. Ties keep the snapshot's own order, so the order is stable across polls.
|
|
@@ -55,10 +67,24 @@ const compareRows = (left, right) => {
|
|
|
55
67
|
* so a zero here is a real zero.
|
|
56
68
|
*/
|
|
57
69
|
export const workTriage = (snapshot) => {
|
|
70
|
+
const overlay = new Map((snapshot.observed ?? []).map((entry) => [entry.goalId, entry]));
|
|
58
71
|
const rows = snapshot.goals
|
|
59
72
|
.map((goal, index) => {
|
|
60
73
|
const openRequests = openRequestsOf(goal);
|
|
61
|
-
|
|
74
|
+
const observed = overlay.get(goal.id) ?? null;
|
|
75
|
+
const displayState = observed?.displayState ?? goal.state;
|
|
76
|
+
// A goal its owner already recorded as finished finished then; one finished only by its observed
|
|
77
|
+
// pull request finished when that pull request closed.
|
|
78
|
+
const finishedAt = terminalState[goal.state]
|
|
79
|
+
? goal.updatedAt
|
|
80
|
+
: (observed?.pullRequest?.fact.closedAt ?? goal.updatedAt);
|
|
81
|
+
return {
|
|
82
|
+
displayState,
|
|
83
|
+
goal,
|
|
84
|
+
group: groupOf(finishedAt, displayState, openRequests, snapshot.asOf),
|
|
85
|
+
index,
|
|
86
|
+
openRequests
|
|
87
|
+
};
|
|
62
88
|
})
|
|
63
89
|
.toSorted(compareRows);
|
|
64
90
|
const needsYou = rows.filter((row) => row.group === "needs-you");
|
|
@@ -108,7 +134,9 @@ export const workTriageGroupTitle = {
|
|
|
108
134
|
"needs-you": "Needs you",
|
|
109
135
|
blocked: "Blocked",
|
|
110
136
|
moving: "Moving",
|
|
111
|
-
|
|
137
|
+
planned: "Not started",
|
|
138
|
+
// Completed, deployed and abandoned alike; each row's state word says which.
|
|
139
|
+
done: "Finished in the last 24 hours",
|
|
112
140
|
earlier: "Finished earlier"
|
|
113
141
|
};
|
|
114
142
|
//# sourceMappingURL=work-triage.js.map
|
package/dist/work-triage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work-triage.js","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"work-triage.js","sourceRoot":"","sources":["../src/work-triage.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,GAAG,UAAU,CAAA;AAEzB,mFAAmF;AACnF,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAA;AAK5C,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,WAAW;IACX,SAAS;IACT,QAAQ;IACR,SAAS;IACT,MAAM;IACN,SAAS;CACV,CAAA;AA8BD;;;GAGG;AACH,MAAM,aAAa,GAAG;IACpB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,KAAK;IACd,MAAM,EAAE,KAAK;IACb,QAAQ,EAAE,IAAI;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;CACsC,CAAA;AAEvD,MAAM,cAAc,GAAG,CAAC,IAAc,EAA8B,EAAE,CACpE,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAA;AAEvH;;;;GAIG;AACH,MAAM,OAAO,GAAG,CACd,UAAkB,EAClB,YAA8B,EAC9B,YAAwC,EACxC,IAAY,EACK,EAAE;IACnB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,WAAW,CAAA;IAC/C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAChD,IAAI,aAAa,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,GAAG,UAAU,IAAI,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;IACxG,kFAAkF;IAClF,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,SAAS,CAAA;IAChD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAE1F,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,IAAmB,EAAE,KAAoB,EAAU,EAAE;IACxE,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAChE,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,OAAO,CAAA;IACjC,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAA;QACtG,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAA;QAC3D,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,QAAQ,CAAA;IACrC,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;AACjC,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAA2D,EAAc,EAAE;IACpG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAA;IACxF,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK;SACxB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAiB,EAAE;QAClC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAA;QAC7C,MAAM,YAAY,GAAG,QAAQ,EAAE,YAAY,IAAI,IAAI,CAAC,KAAK,CAAA;QACzD,iGAAiG;QACjG,uDAAuD;QACvD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;YAC1C,CAAC,CAAC,IAAI,CAAC,SAAS;YAChB,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5D,OAAO;YACL,YAAY;YACZ,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC;YACrE,KAAK;YACL,YAAY;SACb,CAAA;IACH,CAAC,CAAC;SACD,QAAQ,CAAC,WAAW,CAAC,CAAA;IACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,WAAW,CAAC,CAAA;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,MAAM,CAAA;IACpE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACzB,MAAM,OAAO,GAAG,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;QACtC,OAAO;YACL,IAAI;YACJ,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,OAAO;gBACP,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,aAAa,EAAE,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE;aACnG;SACF,CAAA;IACH,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAA;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAA;IAC5F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAA;AAClH,CAAC,CAAA;AAED,MAAM,MAAM,GAAG,CAAC,KAAa,EAAE,GAAW,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAQ3G;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAA0B,EAAE,KAAK,GAAoB,SAAS,EAAU,EAAE;IAC3G,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,KAAK,SAAS;QAC9C,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB,CAAC;QACnD,CAAC,CAAC,CAAC,aAAa,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAA;IACzD,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,WAAW;YACd,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC;gBAAE,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC,OAAO,UAAU,CAAA;YAC3E,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC;gBAC1B,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM;gBAC9C,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,OAAO,CAAC,OAAO,UAAU,CAAA;QAC9E,KAAK,OAAO;YACV,OAAO,OAAO,CAAA;QAChB,KAAK,OAAO;YACV,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAA;IAC5D,CAAC;AACH,CAAC,CAAA;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,WAAW,EAAE,WAAW;IACxB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,aAAa;IACtB,6EAA6E;IAC7E,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,kBAAkB;CACwB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@knpkv/herdr-work",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Durable fleet work checkpoints and departure-board projections",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "knpkv",
|
|
@@ -52,8 +52,8 @@
|
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"effect": "4.0.0",
|
|
55
|
-
"@knpkv/herdr-fleet": "^0.
|
|
56
|
-
"@knpkv/rly": "^0.
|
|
55
|
+
"@knpkv/herdr-fleet": "^0.7.0",
|
|
56
|
+
"@knpkv/rly": "^0.13.0"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"@effect/platform-node": "4.0.0",
|
package/src/styles.css
CHANGED
|
@@ -163,6 +163,8 @@
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
.work-row-caption {
|
|
166
|
+
/* The clock ticks every second; even digits keep the line from re-wrapping each tick. */
|
|
167
|
+
font-variant-numeric: tabular-nums;
|
|
166
168
|
grid-area: caption;
|
|
167
169
|
}
|
|
168
170
|
|
|
@@ -210,6 +212,14 @@
|
|
|
210
212
|
padding-block: var(--rly-space-8);
|
|
211
213
|
}
|
|
212
214
|
|
|
215
|
+
/* A narrow page stacks each fact's name above its value, so values are not squeezed into a sliver. */
|
|
216
|
+
@container work-page (width < 30rem) {
|
|
217
|
+
.work-facts > div {
|
|
218
|
+
gap: var(--rly-space-2);
|
|
219
|
+
grid-template-columns: minmax(0, 1fr);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
213
223
|
.work-facts > div:last-child {
|
|
214
224
|
border-block-end: 0;
|
|
215
225
|
}
|
|
@@ -220,6 +230,11 @@
|
|
|
220
230
|
var(--rly-type-meta-font);
|
|
221
231
|
}
|
|
222
232
|
|
|
233
|
+
/* A note under a fact's value, on its own line. */
|
|
234
|
+
.work-fact-note {
|
|
235
|
+
margin: var(--rly-space-0);
|
|
236
|
+
}
|
|
237
|
+
|
|
223
238
|
.work-facts dd {
|
|
224
239
|
margin: var(--rly-space-0);
|
|
225
240
|
min-inline-size: var(--rly-space-0);
|
|
@@ -237,6 +252,15 @@
|
|
|
237
252
|
color: var(--rly-color-blocked-ink);
|
|
238
253
|
}
|
|
239
254
|
|
|
255
|
+
.work-note[data-tone="held"] > b:first-child {
|
|
256
|
+
color: var(--rly-color-held-ink);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* An unreadable source: a dashed edge, like the hatched mark its timeline event carries. */
|
|
260
|
+
.work-note[data-tone="unknown"] {
|
|
261
|
+
border-style: dashed;
|
|
262
|
+
}
|
|
263
|
+
|
|
240
264
|
.work-detail-section {
|
|
241
265
|
display: grid;
|
|
242
266
|
gap: var(--rly-space-8);
|
|
@@ -264,6 +288,17 @@
|
|
|
264
288
|
justify-content: space-between;
|
|
265
289
|
}
|
|
266
290
|
|
|
291
|
+
/* Read out when a request's outcome replaces its bar; the state word already shows it. */
|
|
292
|
+
.work-request-announcement {
|
|
293
|
+
block-size: 1px;
|
|
294
|
+
clip-path: inset(50%);
|
|
295
|
+
inline-size: 1px;
|
|
296
|
+
margin: var(--rly-space-0);
|
|
297
|
+
overflow: hidden;
|
|
298
|
+
position: absolute;
|
|
299
|
+
white-space: nowrap;
|
|
300
|
+
}
|
|
301
|
+
|
|
267
302
|
.work-activity {
|
|
268
303
|
display: grid;
|
|
269
304
|
list-style: none;
|