@skillcdn/console 0.3.1 → 0.4.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.
Files changed (179) hide show
  1. package/README.md +4 -4
  2. package/dist/api.d.ts +4 -4
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +4 -4
  5. package/dist/api.js.map +1 -1
  6. package/dist/cli/cli.d.ts +4 -0
  7. package/dist/cli/cli.d.ts.map +1 -1
  8. package/dist/cli/cli.js +201 -25
  9. package/dist/cli/cli.js.map +1 -1
  10. package/dist/cli/format.d.ts.map +1 -1
  11. package/dist/cli/format.js +15 -11
  12. package/dist/cli/format.js.map +1 -1
  13. package/dist/cli/help.d.ts.map +1 -1
  14. package/dist/cli/help.js +59 -26
  15. package/dist/cli/help.js.map +1 -1
  16. package/dist/cli/main.js +1 -0
  17. package/dist/cli/main.js.map +1 -1
  18. package/dist/cli/pack.d.ts +7 -2
  19. package/dist/cli/pack.d.ts.map +1 -1
  20. package/dist/cli/pack.js +16 -2
  21. package/dist/cli/pack.js.map +1 -1
  22. package/dist/client.d.ts +20 -10
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +17 -3
  25. package/dist/client.js.map +1 -1
  26. package/dist/compat.d.ts +28 -6
  27. package/dist/compat.d.ts.map +1 -1
  28. package/dist/compat.js +55 -14
  29. package/dist/compat.js.map +1 -1
  30. package/dist/components/board.d.ts +12 -1
  31. package/dist/components/board.d.ts.map +1 -1
  32. package/dist/components/board.js +57 -7
  33. package/dist/components/board.js.map +1 -1
  34. package/dist/components/calendar.d.ts +17 -7
  35. package/dist/components/calendar.d.ts.map +1 -1
  36. package/dist/components/calendar.js +89 -38
  37. package/dist/components/calendar.js.map +1 -1
  38. package/dist/components/decision-form.d.ts +12 -4
  39. package/dist/components/decision-form.d.ts.map +1 -1
  40. package/dist/components/decision-form.js +24 -6
  41. package/dist/components/decision-form.js.map +1 -1
  42. package/dist/components/decision-list.d.ts +4 -0
  43. package/dist/components/decision-list.d.ts.map +1 -1
  44. package/dist/components/decision-list.js +9 -6
  45. package/dist/components/decision-list.js.map +1 -1
  46. package/dist/components/documents.d.ts.map +1 -1
  47. package/dist/components/documents.js +3 -3
  48. package/dist/components/documents.js.map +1 -1
  49. package/dist/components/event-feed.d.ts.map +1 -1
  50. package/dist/components/event-feed.js +63 -8
  51. package/dist/components/event-feed.js.map +1 -1
  52. package/dist/components/my-decisions.d.ts +20 -0
  53. package/dist/components/my-decisions.d.ts.map +1 -0
  54. package/dist/components/my-decisions.js +36 -0
  55. package/dist/components/my-decisions.js.map +1 -0
  56. package/dist/components/people.d.ts.map +1 -1
  57. package/dist/components/people.js +1 -1
  58. package/dist/components/people.js.map +1 -1
  59. package/dist/components/picker.d.ts +39 -0
  60. package/dist/components/picker.d.ts.map +1 -0
  61. package/dist/components/picker.js +155 -0
  62. package/dist/components/picker.js.map +1 -0
  63. package/dist/components/projects.d.ts.map +1 -1
  64. package/dist/components/projects.js +3 -3
  65. package/dist/components/projects.js.map +1 -1
  66. package/dist/components/roadmap.js +1 -1
  67. package/dist/components/roadmap.js.map +1 -1
  68. package/dist/components/runs.d.ts.map +1 -1
  69. package/dist/components/runs.js +1 -1
  70. package/dist/components/runs.js.map +1 -1
  71. package/dist/components/shell.d.ts.map +1 -1
  72. package/dist/components/shell.js +36 -1
  73. package/dist/components/shell.js.map +1 -1
  74. package/dist/components/task-form.d.ts +18 -4
  75. package/dist/components/task-form.d.ts.map +1 -1
  76. package/dist/components/task-form.js +56 -13
  77. package/dist/components/task-form.js.map +1 -1
  78. package/dist/components/task-list.js +2 -2
  79. package/dist/components/task-list.js.map +1 -1
  80. package/dist/components/task-view.d.ts +7 -1
  81. package/dist/components/task-view.d.ts.map +1 -1
  82. package/dist/components/task-view.js +7 -6
  83. package/dist/components/task-view.js.map +1 -1
  84. package/dist/components/ui.d.ts +17 -0
  85. package/dist/components/ui.d.ts.map +1 -1
  86. package/dist/components/ui.js +26 -11
  87. package/dist/components/ui.js.map +1 -1
  88. package/dist/components/work.d.ts.map +1 -1
  89. package/dist/components/work.js +5 -3
  90. package/dist/components/work.js.map +1 -1
  91. package/dist/console.css +1794 -433
  92. package/dist/console.d.ts.map +1 -1
  93. package/dist/console.js +93 -10
  94. package/dist/console.js.map +1 -1
  95. package/dist/data.d.ts +21 -1
  96. package/dist/data.d.ts.map +1 -1
  97. package/dist/data.js +24 -1
  98. package/dist/data.js.map +1 -1
  99. package/dist/i18n/en.d.ts +45 -3
  100. package/dist/i18n/en.d.ts.map +1 -1
  101. package/dist/i18n/en.js +52 -10
  102. package/dist/i18n/en.js.map +1 -1
  103. package/dist/i18n/ko.d.ts.map +1 -1
  104. package/dist/i18n/ko.js +54 -12
  105. package/dist/i18n/ko.js.map +1 -1
  106. package/dist/index.d.ts +5 -3
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +5 -3
  109. package/dist/index.js.map +1 -1
  110. package/dist/limits.d.ts +2 -0
  111. package/dist/limits.d.ts.map +1 -1
  112. package/dist/limits.js +2 -0
  113. package/dist/limits.js.map +1 -1
  114. package/dist/router.d.ts +9 -1
  115. package/dist/router.d.ts.map +1 -1
  116. package/dist/router.js +12 -0
  117. package/dist/router.js.map +1 -1
  118. package/dist/routes.d.ts +3 -1
  119. package/dist/routes.d.ts.map +1 -1
  120. package/dist/routes.js +3 -1
  121. package/dist/routes.js.map +1 -1
  122. package/dist/rules.js +1 -1
  123. package/dist/rules.js.map +1 -1
  124. package/dist/schemas.d.ts +252 -12
  125. package/dist/schemas.d.ts.map +1 -1
  126. package/dist/schemas.js +27 -10
  127. package/dist/schemas.js.map +1 -1
  128. package/dist/vocabulary.d.ts +2 -0
  129. package/dist/vocabulary.d.ts.map +1 -1
  130. package/dist/vocabulary.js +2 -0
  131. package/dist/vocabulary.js.map +1 -1
  132. package/docs/specs/cli.md +14 -13
  133. package/docs/specs/rest.md +24 -19
  134. package/package.json +2 -2
  135. package/skills/building-a-console/SKILL.md +4 -4
  136. package/skills/building-a-console/references/the-default-console.md +4 -4
  137. package/skills/building-a-console/references/the-look-from-a-website.md +5 -5
  138. package/skills/deploying-a-console/SKILL.md +2 -2
  139. package/skills/deploying-a-console/references/resources.md +1 -1
  140. package/skills/working-the-board/SKILL.md +8 -6
  141. package/skills/working-the-board/references/terms.md +3 -3
  142. package/src/api.ts +7 -0
  143. package/src/cli/cli.ts +254 -25
  144. package/src/cli/format.ts +22 -11
  145. package/src/cli/help.ts +63 -26
  146. package/src/cli/main.ts +1 -0
  147. package/src/cli/pack.ts +17 -1
  148. package/src/client.ts +44 -11
  149. package/src/compat.ts +63 -14
  150. package/src/components/board.tsx +124 -25
  151. package/src/components/calendar.tsx +258 -117
  152. package/src/components/decision-form.tsx +71 -23
  153. package/src/components/decision-list.tsx +30 -3
  154. package/src/components/documents.tsx +27 -11
  155. package/src/components/event-feed.tsx +116 -33
  156. package/src/components/my-decisions.tsx +138 -0
  157. package/src/components/people.tsx +3 -1
  158. package/src/components/picker.tsx +297 -0
  159. package/src/components/projects.tsx +7 -5
  160. package/src/components/roadmap.tsx +1 -1
  161. package/src/components/runs.tsx +5 -1
  162. package/src/components/shell.tsx +36 -1
  163. package/src/components/task-form.tsx +149 -63
  164. package/src/components/task-list.tsx +3 -3
  165. package/src/components/task-view.tsx +71 -56
  166. package/src/components/ui.tsx +89 -11
  167. package/src/components/work.tsx +6 -4
  168. package/src/console.tsx +157 -29
  169. package/src/data.ts +61 -1
  170. package/src/i18n/en.ts +54 -10
  171. package/src/i18n/ko.ts +56 -12
  172. package/src/index.ts +19 -1
  173. package/src/limits.ts +2 -0
  174. package/src/router.ts +18 -1
  175. package/src/routes.ts +3 -1
  176. package/src/rules.ts +1 -1
  177. package/src/schemas.ts +29 -9
  178. package/src/styles/console.css +1794 -433
  179. package/src/vocabulary.ts +3 -0
@@ -4,7 +4,9 @@ import { createPortal } from "react-dom";
4
4
  import { TASK_STATES, } from "../api.js";
5
5
  import { useWords } from "../i18n/index.js";
6
6
  import { isPlainClick } from "./shell.js";
7
- import { Avatar, Badge, Button, CategoryBadge, cx, DueBadge, PriorityBadge, personName, } from "./ui.js";
7
+ import { Badge, Button, CategoryBadge, cx, DueBadge, PriorityBadge, personName, Workers, } from "./ui.js";
8
+ /** The columns a board folds unless told otherwise: the work that is over. */
9
+ export const FOLDED_STATES = ["done", "dropped"];
8
10
  /** How far a mouse travels on a card before the press is a drag and not a click. */
9
11
  const DRAG_SLACK = 4;
10
12
  /**
@@ -30,7 +32,7 @@ export function TaskCard(props) {
30
32
  event.preventDefault();
31
33
  props.onOpen(task);
32
34
  }
33
- }, children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("div", { className: "sc-card-meta", children: [task.category !== null && _jsx(CategoryBadge, { category: task.category }), _jsx(PriorityBadge, { priority: task.priority }), task.dueOn !== null && (_jsx(DueBadge, { dueOn: task.dueOn, state: task.state, today: props.today })), task.openDecisions > 0 && (_jsx(Badge, { tone: "warning", title: words.board.decisionsTitle, children: words.board.decisions(task.openDecisions) })), _jsx("span", { className: "sc-card-spacer" }), task.assignee !== null && _jsx(Avatar, { person: task.assignee, size: "sm" })] })] }));
35
+ }, children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("div", { className: "sc-card-meta", children: [task.category !== null && _jsx(CategoryBadge, { category: task.category }), _jsx(PriorityBadge, { priority: task.priority }), task.dueOn !== null && (_jsx(DueBadge, { dueOn: task.dueOn, state: task.state, today: props.today })), task.openDecisions > 0 && (_jsx(Badge, { tone: "warning", kind: "count", title: words.board.decisionsTitle, children: words.board.decisions(task.openDecisions) })), _jsx("span", { className: "sc-card-spacer" }), _jsx(Workers, { workers: task.workers, size: "sm" })] })] }));
34
36
  }
35
37
  const MENU_GAP = 4;
36
38
  const MENU_MARGIN = 8;
@@ -152,6 +154,19 @@ export function Board(props) {
152
154
  const { onMove } = props;
153
155
  const board = useRef(null);
154
156
  const [drag, setDrag] = useState(null);
157
+ // The foldable columns a person has opened on this board; the others of them stay folded.
158
+ const [opened, setOpened] = useState(() => new Set());
159
+ const foldable = props.folded ?? FOLDED_STATES;
160
+ const toggle = (state) => setOpened((before) => {
161
+ const after = new Set(before);
162
+ if (after.has(state)) {
163
+ after.delete(state);
164
+ }
165
+ else {
166
+ after.add(state);
167
+ }
168
+ return after;
169
+ });
155
170
  // What the pointer's release reads, so that the move is made outside a state update.
156
171
  const current = useRef(null);
157
172
  current.current = drag;
@@ -283,7 +298,10 @@ export function Board(props) {
283
298
  const dragging = drag?.moving === true ? drag : null;
284
299
  return (_jsxs("div", { ref: board, className: cx("sc-board", onMove !== undefined && "sc-board-movable", dragging !== null && "sc-board-dragging"), children: [TASK_STATES.map((state) => {
285
300
  const tasks = props.tasks.filter((task) => task.state === state).sort(byDue);
286
- return (_jsxs("section", { className: cx("sc-column", `sc-column-${state}`, dragging?.over === state && "sc-column-over"), "aria-label": words.vocabulary.state[state], "data-column": state, children: [_jsxs("header", { className: "sc-column-header", children: [_jsx("h2", { className: "sc-column-title", children: words.vocabulary.state[state] }), _jsx("span", { className: "sc-column-count", children: tasks.length })] }), _jsxs("div", { className: "sc-column-body", children: [tasks.map((task) => (_jsx(TaskCard, { task: task, href: props.taskHref(task), onOpen: props.onOpen, today: props.today, onPress: onMove === undefined ? undefined : press, dragging: dragging?.task.id === task.id, editHref: props.editHref?.(task), onEdit: props.onEdit, onArchive: props.onArchive }, task.id))), tasks.length === 0 && state === "idea" && props.empty] })] }, state));
301
+ const name = words.vocabulary.state[state];
302
+ const canFold = foldable.includes(state);
303
+ const folded = canFold && !opened.has(state);
304
+ return (_jsxs("section", { className: cx("sc-column", `sc-column-${state}`, folded && "sc-column-folded", dragging?.over === state && "sc-column-over"), "aria-label": name, "data-column": state, children: [_jsxs("header", { className: "sc-column-header", children: [_jsx("h2", { className: "sc-column-title", children: name }), _jsx("span", { className: "sc-column-count", children: tasks.length }), canFold && (_jsx("button", { type: "button", className: "sc-column-toggle", "aria-expanded": !folded, "aria-label": folded ? words.board.unfold(name) : words.board.fold(name), title: folded ? words.board.unfold(name) : words.board.fold(name), onClick: () => toggle(state), children: _jsx("svg", { viewBox: "0 0 16 16", "aria-hidden": "true", children: _jsx("path", { d: folded ? "M6 4l4 4-4 4" : "M10 4l-4 4 4 4", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }), !folded && (_jsxs("div", { className: "sc-column-body", children: [tasks.map((task) => (_jsx(TaskCard, { task: task, href: props.taskHref(task), onOpen: props.onOpen, today: props.today, onPress: onMove === undefined ? undefined : press, dragging: dragging?.task.id === task.id, editHref: props.editHref?.(task), onEdit: props.onEdit, onArchive: props.onArchive }, task.id))), tasks.length === 0 && state === "idea" && props.empty] }))] }, state));
287
305
  }), dragging !== null && (_jsx("div", { className: "sc-drag-ghost", "aria-hidden": "true", style: {
288
306
  width: dragging.width,
289
307
  transform: `translate(${dragging.x - dragging.grip.x}px, ${dragging.y - dragging.grip.y}px)`,
@@ -291,19 +309,49 @@ export function Board(props) {
291
309
  // The menu too, inert under the pointer, so that the card in hand keeps the shape of the one in its place.
292
310
  editHref: props.editHref?.(dragging.task), onArchive: props.onArchive }) }))] }));
293
311
  }
294
- /** What the filter keeps of the board: a category or none, a goal or none, a person, one's own. */
312
+ /** What a task is found by: its title, its number, its owner and its workers, its category. */
313
+ function wordsOf(task) {
314
+ return [
315
+ task.title,
316
+ `#${task.number}`,
317
+ personName(task.owner),
318
+ task.owner.login,
319
+ ...task.workers.flatMap((worker) => [personName(worker), worker.login]),
320
+ task.category?.name ?? "",
321
+ ]
322
+ .join("\n")
323
+ .toLowerCase();
324
+ }
325
+ /**
326
+ * What the filter keeps of the board: a category or none, a goal or none, a person, one's own,
327
+ * and the tasks that contain every word typed, whatever the case.
328
+ */
295
329
  export function filterTasks(tasks, filter, me) {
330
+ const wanted = filter.words === undefined
331
+ ? []
332
+ : filter.words
333
+ .toLowerCase()
334
+ .split(/\s+/)
335
+ .filter((word) => word.length > 0);
296
336
  return tasks.filter((task) => {
337
+ if (wanted.length > 0) {
338
+ const found = wordsOf(task);
339
+ if (!wanted.every((word) => found.includes(word))) {
340
+ return false;
341
+ }
342
+ }
297
343
  if (filter.category !== undefined && (task.category?.key ?? "") !== filter.category) {
298
344
  return false;
299
345
  }
300
346
  if (filter.goal !== undefined && (task.goalId ?? "") !== filter.goal) {
301
347
  return false;
302
348
  }
303
- if (filter.person !== undefined && task.assignee?.id !== filter.person) {
349
+ if (filter.person !== undefined &&
350
+ !task.workers.some((worker) => worker.id === filter.person)) {
304
351
  return false;
305
352
  }
306
- if (filter.mine === true && (me === undefined || task.assignee?.id !== me.id)) {
353
+ if (filter.mine === true &&
354
+ (me === undefined || !task.workers.some((worker) => worker.id === me.id))) {
307
355
  return false;
308
356
  }
309
357
  return true;
@@ -322,7 +370,9 @@ export function BoardFilters(props) {
322
370
  }
323
371
  props.onChange(next);
324
372
  };
325
- return (_jsxs("form", { className: "sc-filters", "aria-label": words.aria, onSubmit: (event) => event.preventDefault(), children: [_jsxs("label", { className: "sc-field sc-field-inline", children: [_jsx("span", { className: "sc-visually-hidden", children: words.anyCategory }), _jsxs("select", { className: "sc-input", value: filter.category ?? "*", onChange: (event) => event.target.value === "*"
373
+ return (_jsxs("form", { className: "sc-filters", "aria-label": words.aria, onSubmit: (event) => event.preventDefault(), children: [_jsxs("label", { className: "sc-field sc-field-inline sc-filters-words", children: [_jsx("span", { className: "sc-visually-hidden", children: words.words }), _jsx("input", { className: "sc-input", type: "search", placeholder: words.words, value: filter.words ?? "", onChange: (event) => event.target.value.trim() === ""
374
+ ? change({}, "words")
375
+ : change({ words: event.target.value }) })] }), _jsxs("label", { className: "sc-field sc-field-inline", children: [_jsx("span", { className: "sc-visually-hidden", children: words.anyCategory }), _jsxs("select", { className: "sc-input", value: filter.category ?? "*", onChange: (event) => event.target.value === "*"
326
376
  ? change({}, "category")
327
377
  : change({ category: event.target.value }), children: [_jsx("option", { value: "*", children: words.anyCategory }), _jsx("option", { value: "", children: words.noCategory }), props.categories.map((category) => (_jsx("option", { value: category.key, children: category.name }, category.key)))] })] }), goals.length > 0 && (_jsxs("label", { className: "sc-field sc-field-inline", children: [_jsx("span", { className: "sc-visually-hidden", children: words.anyGoal }), _jsxs("select", { className: "sc-input", value: filter.goal ?? "*", onChange: (event) => event.target.value === "*" ? change({}, "goal") : change({ goal: event.target.value }), children: [_jsx("option", { value: "*", children: words.anyGoal }), _jsx("option", { value: "", children: words.noGoal }), goals.map((goal) => (_jsx("option", { value: goal.id, children: goal.title }, goal.id)))] })] })), _jsxs("label", { className: "sc-field sc-field-inline", children: [_jsx("span", { className: "sc-visually-hidden", children: words.everyone }), _jsxs("select", { className: "sc-input", value: filter.mine === true ? "mine" : (filter.person ?? "*"), onChange: (event) => {
328
378
  const value = event.target.value;
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/components/board.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/components/board.tsx"],"names":[],"mappings":"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"}
@@ -36,6 +36,8 @@ export interface WeekSegment {
36
36
  * go first, so that the lanes stay few.
37
37
  */
38
38
  export declare function weekSegments(week: readonly GridDay[], tasks: readonly RestTask[]): WeekSegment[];
39
+ /** The tasks of one day: those on it alone and those lying across it, the open ones first. */
40
+ export declare function tasksOn(day: string, tasks: readonly RestTask[]): RestTask[];
39
41
  /** Where the card of the item under the pointer goes: the side with more room, kept within the window. */
40
42
  export interface TipPlace {
41
43
  readonly side: "above" | "below";
@@ -67,6 +69,8 @@ export interface TaskTipProps {
67
69
  * out of the accessible tree: the item's text is the title, and the facts are on the task's page.
68
70
  */
69
71
  export declare function TaskTip(props: TaskTipProps): import("react").JSX.Element;
72
+ /** How many of a day's own tasks a cell shows before the way to the rest. */
73
+ export declare const DAY_SHOWN = 3;
70
74
  export declare function Calendar(props: CalendarProps): import("react").JSX.Element;
71
75
  export interface WeekProps {
72
76
  readonly tasks: readonly RestTask[];
@@ -86,23 +90,29 @@ export interface WeekProps {
86
90
  export declare function Week(props: WeekProps): import("react").JSX.Element;
87
91
  /** One person's share of the open work, as the table of who has what says it. */
88
92
  export interface WorkloadRow {
89
- /** The person, or nobody for the tasks assigned to no one. */
93
+ /** The person, or nobody for the tasks with no worker. */
90
94
  readonly person: RestPerson | undefined;
91
95
  readonly open: number;
92
96
  readonly inProgress: number;
93
- /** Open, and due within the next seven days from today. */
94
- readonly dueSoon: number;
97
+ /** Open, and due from today through the last day of this week, as the workspace begins its weeks (ADR-0039). */
98
+ readonly dueThisWeek: number;
95
99
  /** Open, and past its day. */
96
100
  readonly overdue: number;
97
101
  }
98
- /** Who has what, from the open tasks: by login, with the unassigned last. */
99
- export declare function workloadOf(tasks: readonly RestTask[], today: string): WorkloadRow[];
102
+ /**
103
+ * Who has what, from the open tasks: a task counted for each of its workers, by name, and the
104
+ * tasks with none last; this week is the days from today through the week's last day, the week
105
+ * beginning on `firstDay` (1 for Monday, 7 for Sunday).
106
+ */
107
+ export declare function workloadOf(tasks: readonly RestTask[], today: string, firstDay?: number): WorkloadRow[];
100
108
  export interface WorkloadProps {
101
109
  readonly tasks: readonly RestTask[];
102
110
  readonly today?: string | undefined;
103
- /** Where the board is, narrowed to one person's tasks, or to the unassigned. */
111
+ /** The day the week begins on, as the workspace says (ADR-0035); the language's when left out. */
112
+ readonly weekStart?: WeekStart | undefined;
113
+ /** Where the board is, narrowed to one person's tasks, or to those with no worker. */
104
114
  readonly personHref?: ((person: RestPerson | undefined) => string) | undefined;
105
115
  }
106
- /** Who has what: a row per person, and what of theirs is late or due soon. */
116
+ /** Who has what: a row per person, and what of theirs is late or due this week. */
107
117
  export declare function Workload(props: WorkloadProps): import("react").JSX.Element | null;
108
118
  //# sourceMappingURL=calendar.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/components/calendar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/components/calendar.tsx"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ import { useState } from "react";
3
3
  import { OPEN_TASK_STATES, } from "../api.js";
4
4
  import { addDays, addMonths, daysBetween, deviceLanguage, firstDayOfWeek, formatDay, formatDays, formatMonth, formatWeekday, monthGrid, monthOf, today as todayOf, weekdays, weekOf, } from "../dates.js";
5
5
  import { useLanguage, useWords } from "../i18n/index.js";
6
- import { Avatar, CategoryBadge, cx, PersonChip, personName, StateBadge, Time } from "./ui.js";
6
+ import { TaskList } from "./task-list.js";
7
+ import { CategoryBadge, cx, PersonChip, personName, StateBadge, Time, Workers } from "./ui.js";
7
8
  // The calendar of a project (ADR-0019): the month as a grid, or one week on its own. A task
8
9
  // planned from a start to a due day lies across its days as a bar, in a lane of its own within
9
10
  // each week so that the bars of one week never cross; a task with one day alone, a due day or
@@ -79,6 +80,14 @@ function onDays(tasks) {
79
80
  }
80
81
  return on;
81
82
  }
83
+ /** The tasks of one day: those on it alone and those lying across it, the open ones first. */
84
+ export function tasksOn(day, tasks) {
85
+ return tasks
86
+ .filter((task) => spans(task)
87
+ ? (task.startsOn ?? day) <= day && day <= (task.dueOn ?? day)
88
+ : (task.dueOn ?? task.startsOn) === day)
89
+ .sort((a, b) => Number(isOpen(b)) - Number(isOpen(a)) || a.number - b.number);
90
+ }
82
91
  /** How a task reads: struck through once it is over, and marked once its due day is past. */
83
92
  const tone = (task, now) => cx(!isOpen(task) && "sc-calendar-over", isOpen(task) && task.dueOn !== null && task.dueOn < now && "sc-calendar-late");
84
93
  /** What the card may grow to, in pixels: 20rem at the usual root size, as the style says. */
@@ -120,7 +129,7 @@ export function TaskTip(props) {
120
129
  const { task, place } = props;
121
130
  const goal = props.goals?.find((candidate) => candidate.id === task.goalId);
122
131
  const day = (value) => formatDay(value, tag);
123
- return (_jsxs("div", { className: cx("sc-task-tip", place.side === "above" ? "sc-task-tip-above" : "sc-task-tip-below"), style: { left: place.shift }, "aria-hidden": "true", children: [_jsxs("p", { className: "sc-task-tip-title", children: ["#", task.number, " ", task.title] }), _jsxs("dl", { className: "sc-task-tip-facts", children: [_jsxs("div", { children: [_jsx("dt", { children: words.task.state }), _jsx("dd", { children: _jsx(StateBadge, { state: task.state }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.form.priority }), _jsx("dd", { children: words.vocabulary.priority[task.priority] })] }), task.category !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.category }), _jsx("dd", { children: _jsx(CategoryBadge, { category: task.category }) })] })), goal !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: words.task.goal }), _jsx("dd", { children: goal.title })] })), _jsxs("div", { children: [_jsx("dt", { children: words.task.owner }), _jsx("dd", { children: _jsx(PersonChip, { person: task.owner }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.assignee }), _jsx("dd", { children: task.assignee === null ? (_jsx("span", { className: "sc-muted", children: words.common.nobody })) : (_jsx(PersonChip, { person: task.assignee })) })] }), (task.startsOn !== null || task.dueOn !== null) && (_jsxs("div", { children: [_jsx("dt", { children: words.task.plan }), _jsx("dd", { children: words.task.planned(task.startsOn === null ? undefined : day(task.startsOn), task.dueOn === null ? undefined : day(task.dueOn)) })] })), task.startedAt !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.started }), _jsx("dd", { children: _jsx(Time, { iso: task.startedAt }) })] })), task.doneAt !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.done }), _jsx("dd", { children: _jsx(Time, { iso: task.doneAt }) })] })), _jsxs("div", { children: [_jsx("dt", { children: words.task.written }), _jsx("dd", { children: _jsx(Time, { iso: task.createdAt }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.changed }), _jsx("dd", { children: _jsx(Time, { iso: task.updatedAt }) })] })] })] }));
132
+ return (_jsxs("div", { className: cx("sc-task-tip", place.side === "above" ? "sc-task-tip-above" : "sc-task-tip-below"), style: { left: place.shift }, "aria-hidden": "true", children: [_jsxs("p", { className: "sc-task-tip-title", children: ["#", task.number, " ", task.title] }), _jsxs("dl", { className: "sc-task-tip-facts", children: [_jsxs("div", { children: [_jsx("dt", { children: words.task.state }), _jsx("dd", { children: _jsx(StateBadge, { state: task.state }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.form.priority }), _jsx("dd", { children: words.vocabulary.priority[task.priority] })] }), task.category !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.category }), _jsx("dd", { children: _jsx(CategoryBadge, { category: task.category }) })] })), goal !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: words.task.goal }), _jsx("dd", { children: goal.title })] })), _jsxs("div", { children: [_jsx("dt", { children: words.task.owner }), _jsx("dd", { children: _jsx(PersonChip, { person: task.owner }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.workers }), _jsx("dd", { children: task.workers.length === 0 ? (_jsx("span", { className: "sc-muted", children: words.common.nobody })) : (_jsx("ul", { className: "sc-worker-list", children: task.workers.map((worker) => (_jsx("li", { children: _jsx(PersonChip, { person: worker }) }, worker.id))) })) })] }), (task.startsOn !== null || task.dueOn !== null) && (_jsxs("div", { children: [_jsx("dt", { children: words.task.plan }), _jsx("dd", { children: words.task.planned(task.startsOn === null ? undefined : day(task.startsOn), task.dueOn === null ? undefined : day(task.dueOn)) })] })), task.startedAt !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.started }), _jsx("dd", { children: _jsx(Time, { iso: task.startedAt }) })] })), task.doneAt !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.done }), _jsx("dd", { children: _jsx(Time, { iso: task.doneAt }) })] })), _jsxs("div", { children: [_jsx("dt", { children: words.task.written }), _jsx("dd", { children: _jsx(Time, { iso: task.createdAt }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.changed }), _jsx("dd", { children: _jsx(Time, { iso: task.updatedAt }) })] })] })] }));
124
133
  }
125
134
  /** The goals that aim at each day, by day: those with a target day, still planned or worked towards. */
126
135
  function goalsOnDays(goals) {
@@ -139,9 +148,27 @@ function goalsOnDays(goals) {
139
148
  }
140
149
  return on;
141
150
  }
151
+ /** How many days a bar has in the week, for its title to run along: a custom property the stylesheet reads. */
152
+ const spanStyle = (span) => ({ "--sc-span": span });
153
+ /** How many of a day's own tasks a cell shows before the way to the rest. */
154
+ export const DAY_SHOWN = 3;
142
155
  /** One week as a row of cells: the bars across the days in their lanes, then the tasks on each day. */
143
156
  function WeekRow(props) {
144
157
  const { week, segments, now } = props;
158
+ const words = useWords().calendar;
159
+ const { tag } = useLanguage();
160
+ // The days a person opened in this week, each showing all of its tasks.
161
+ const [opened, setOpened] = useState(() => new Set());
162
+ const toggle = (day) => setOpened((before) => {
163
+ const after = new Set(before);
164
+ if (after.has(day)) {
165
+ after.delete(day);
166
+ }
167
+ else {
168
+ after.add(day);
169
+ }
170
+ return after;
171
+ });
145
172
  const pointing = (task, day) => ({
146
173
  onMouseEnter: (event) => props.onPoint(task, day, event.currentTarget),
147
174
  onMouseLeave: props.onLeave,
@@ -149,37 +176,58 @@ function WeekRow(props) {
149
176
  onBlur: props.onLeave,
150
177
  });
151
178
  const tipIn = (task, day) => props.pointed !== null && props.pointed.task.id === task.id && props.pointed.day === day ? (_jsx(TaskTip, { task: task, goals: props.goals, place: props.pointed.place })) : null;
152
- const who = (task) => props.people === true && task.assignee !== null ? (_jsx(Avatar, { person: task.assignee, size: "xs" })) : null;
179
+ const who = (task) => props.people === true ? _jsx(Workers, { workers: task.workers, size: "xs", shown: 2 }) : null;
153
180
  const lanes = segments.reduce((most, segment) => Math.max(most, segment.lane + 1), 0);
154
- return (_jsx("tr", { children: week.map((cell, column) => (_jsxs("td", { className: cx("sc-calendar-cell", !cell.inMonth && "sc-calendar-cell-outside", cell.day === now && "sc-calendar-cell-today"), children: [_jsx("span", { className: "sc-calendar-day", children: Number(cell.day.slice(8)) }), props.goalHref !== undefined &&
155
- (props.goalsOn?.get(cell.day) ?? []).map((goal) => (_jsxs("a", { className: cx("sc-calendar-goal", `sc-category-${goal.category?.color ?? "gray"}`, goal.state === "done" && "sc-calendar-over"), href: props.goalHref?.(goal), children: [_jsx("span", { className: "sc-calendar-flag", "aria-hidden": "true" }), _jsx("span", { className: "sc-calendar-task-title", children: goal.title })] }, goal.id))), Array.from({ length: lanes }, (_, lane) => {
156
- const segment = segments.find((candidate) => candidate.lane === lane && candidate.from <= column && column <= candidate.to);
157
- if (segment === undefined) {
158
- // The lane is someone else's on this day: the bars below keep their height.
159
- // biome-ignore lint/suspicious/noArrayIndexKey: an empty lane is nothing but its position, and the lanes of a week never reorder
160
- return _jsx("span", { className: "sc-calendar-lane", "aria-hidden": "true" }, lane);
161
- }
162
- const { task } = segment;
163
- return (_jsxs("a", { className: cx("sc-calendar-bar", `sc-category-${task.category?.color ?? "gray"}`, segment.from === column && segment.begins && "sc-calendar-bar-begins", segment.to === column && segment.ends && "sc-calendar-bar-ends", tone(task, now)), href: props.taskHref(task), ...pointing(task, cell.day), children: [segment.from === column && (_jsxs(_Fragment, { children: [props.markOf?.(task), who(task), _jsx("span", { className: "sc-calendar-task-title", children: task.title })] })), tipIn(task, cell.day)] }, task.id));
164
- }), (props.on.get(cell.day) ?? []).map((task) => {
165
- const mark = props.markOf?.(task);
166
- return (_jsxs("a", { className: cx("sc-calendar-task", tone(task, now)), href: props.taskHref(task), ...pointing(task, cell.day), children: [mark === undefined || mark === null ? (_jsx("span", { className: cx("sc-calendar-dot", `sc-category-${task.category?.color ?? "gray"}`) })) : (mark), who(task), _jsx("span", { className: "sc-calendar-task-title", children: task.title }), tipIn(task, cell.day)] }, task.id));
167
- })] }, cell.day))) }));
181
+ return (_jsx("tr", { children: week.map((cell, column) => {
182
+ const number = Number(cell.day.slice(8));
183
+ // Everything on the day: its own tasks and the bars crossing it, for a phone's count.
184
+ const total = (props.on.get(cell.day)?.length ?? 0) +
185
+ segments.filter((segment) => segment.from <= column && column <= segment.to).length;
186
+ return (_jsxs("td", { className: cx("sc-calendar-cell", !cell.inMonth && "sc-calendar-cell-outside", cell.day === now && "sc-calendar-cell-today", props.picked === cell.day && "sc-calendar-cell-picked"), children: [props.onPick === undefined ? (_jsx("span", { className: "sc-calendar-day", children: number })) : (_jsx("button", { type: "button", className: "sc-calendar-day", "aria-pressed": props.picked === cell.day, "aria-label": words.onDay(formatDay(cell.day, tag)), onClick: () => props.onPick?.(cell.day), children: number })), props.goalHref !== undefined &&
187
+ (props.goalsOn?.get(cell.day) ?? []).map((goal) => (_jsxs("a", { className: cx("sc-calendar-goal", `sc-category-${goal.category?.color ?? "gray"}`, goal.state === "done" && "sc-calendar-over"), href: props.goalHref?.(goal), children: [_jsx("span", { className: "sc-calendar-flag", "aria-hidden": "true" }), _jsx("span", { className: "sc-calendar-task-title", children: goal.title })] }, goal.id))), Array.from({ length: lanes }, (_, lane) => {
188
+ const segment = segments.find((candidate) => candidate.lane === lane && candidate.from <= column && column <= candidate.to);
189
+ if (segment === undefined) {
190
+ // The lane is someone else's on this day: the bars below keep their height.
191
+ // biome-ignore lint/suspicious/noArrayIndexKey: an empty lane is nothing but its position, and the lanes of a week never reorder
192
+ return _jsx("span", { className: "sc-calendar-lane", "aria-hidden": "true" }, lane);
193
+ }
194
+ const { task } = segment;
195
+ // The first piece carries the title; with more days in the week, the title runs along
196
+ // the bar as far as they reach, over the pieces after it, instead of stopping at the
197
+ // first day's edge.
198
+ const span = segment.to - segment.from + 1;
199
+ const spanning = segment.from === column && span > 1;
200
+ // Every piece of the task under the pointer lights together, in every week it crosses.
201
+ const pointed = props.pointed !== null && props.pointed.task.id === task.id;
202
+ return (_jsxs("a", { className: cx("sc-calendar-bar", `sc-category-${task.category?.color ?? "gray"}`, segment.from === column && segment.begins && "sc-calendar-bar-begins", segment.to === column && segment.ends && "sc-calendar-bar-ends", spanning && "sc-calendar-bar-spanning", pointed && "sc-calendar-bar-pointed", tone(task, now)), style: spanning ? spanStyle(span) : undefined, href: props.taskHref(task), ...pointing(task, cell.day), children: [segment.from === column && (_jsxs(_Fragment, { children: [props.markOf?.(task), who(task), _jsx("span", { className: cx("sc-calendar-task-title", spanning && "sc-calendar-task-title-spanning"), children: task.title })] })), tipIn(task, cell.day)] }, task.id));
203
+ }), (() => {
204
+ const all = props.on.get(cell.day) ?? [];
205
+ const open = opened.has(cell.day);
206
+ const shown = open || all.length <= DAY_SHOWN + 1 ? all : all.slice(0, DAY_SHOWN);
207
+ return (_jsxs(_Fragment, { children: [shown.map((task) => {
208
+ const mark = props.markOf?.(task);
209
+ return (_jsxs("a", { className: cx("sc-calendar-task", tone(task, now)), href: props.taskHref(task), ...pointing(task, cell.day), children: [mark === undefined || mark === null ? (_jsx("span", { className: cx("sc-calendar-dot", `sc-category-${task.category?.color ?? "gray"}`) })) : (mark), who(task), _jsx("span", { className: "sc-calendar-task-title", children: task.title }), tipIn(task, cell.day)] }, task.id));
210
+ }), all.length > DAY_SHOWN + 1 && (_jsx("button", { type: "button", className: "sc-calendar-more", "aria-expanded": open, onClick: () => toggle(cell.day), children: open ? words.fewer : words.more(all.length - DAY_SHOWN) }))] }));
211
+ })(), total > DAY_SHOWN && (_jsx("span", { className: "sc-calendar-count", "aria-hidden": "true", children: total }))] }, cell.day));
212
+ }) }));
168
213
  }
169
214
  export function Calendar(props) {
170
215
  const words = useWords().calendar;
171
216
  const { tag } = useLanguage();
172
217
  const [pointed, point, leave] = usePointed();
218
+ // The day whose tasks are listed under the month, once its number is pressed.
219
+ const [picked, setPicked] = useState(null);
173
220
  const now = props.today ?? todayOf();
174
221
  const firstDay = firstDayOfWeek(deviceLanguage(tag), props.weekStart);
175
222
  const weeks = monthGrid(props.month, firstDay);
223
+ const onPicked = picked === null ? [] : tasksOn(picked, props.tasks);
176
224
  const on = onDays(props.tasks);
177
225
  const goalsOn = props.goalHref === undefined ? undefined : goalsOnDays(props.goals ?? []);
178
226
  const inMonth = (day) => monthOf(day) === props.month;
179
227
  const monthWeeks = weeks.map((week) => ({ week, segments: weekSegments(week, props.tasks) }));
180
228
  const nothing = [...on.keys()].every((day) => !inMonth(day)) &&
181
229
  monthWeeks.every(({ week, segments }) => segments.every((segment) => !week.slice(segment.from, segment.to + 1).some((cell) => cell.inMonth)));
182
- return (_jsxs("div", { className: "sc-calendar", children: [_jsxs("div", { className: "sc-calendar-head", children: [_jsx("h2", { className: "sc-calendar-month", children: formatMonth(props.month, tag) }), _jsxs("nav", { className: "sc-calendar-nav", "aria-label": words.grid, children: [_jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(addMonths(props.month, -1)), "aria-label": words.previous, children: "<" }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(monthOf(now)), children: words.thisMonth }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(addMonths(props.month, 1)), "aria-label": words.next, children: ">" })] })] }), _jsxs("table", { className: "sc-calendar-grid", "aria-label": words.grid, children: [_jsx("thead", { children: _jsx("tr", { children: weekdays(firstDay).map((weekday) => (_jsx("th", { scope: "col", children: formatWeekday(weekday, tag) }, weekday))) }) }), _jsx("tbody", { children: monthWeeks.map(({ week, segments }) => (_jsx(WeekRow, { week: week, segments: segments, on: on, now: now, taskHref: props.taskHref, pointed: pointed, goals: props.goals, goalsOn: goalsOn, goalHref: props.goalHref, onPoint: point, onLeave: leave, people: true }, week[0]?.day))) })] }), (props.categories ?? []).length > 0 && (_jsx("dl", { className: "sc-calendar-legend", "aria-label": words.legend.title, children: (props.categories ?? []).map((category) => (_jsxs("div", { children: [_jsx("dt", { children: _jsx("span", { className: cx("sc-calendar-dot", `sc-category-${category.color}`) }) }), _jsx("dd", { children: category.name })] }, category.key))) })), nothing && _jsx("p", { className: "sc-muted", children: words.nothingDue })] }));
230
+ return (_jsxs("div", { className: "sc-calendar", children: [_jsxs("div", { className: "sc-calendar-head", children: [_jsx("h2", { className: "sc-calendar-month", children: formatMonth(props.month, tag) }), _jsxs("nav", { className: "sc-calendar-nav", "aria-label": words.grid, children: [_jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(addMonths(props.month, -1)), "aria-label": words.previous, children: "<" }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(monthOf(now)), children: words.thisMonth }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.monthHref(addMonths(props.month, 1)), "aria-label": words.next, children: ">" })] })] }), _jsxs("table", { className: "sc-calendar-grid", "aria-label": words.grid, children: [_jsx("thead", { children: _jsx("tr", { children: weekdays(firstDay).map((weekday) => (_jsx("th", { scope: "col", children: formatWeekday(weekday, tag) }, weekday))) }) }), _jsx("tbody", { children: monthWeeks.map(({ week, segments }) => (_jsx(WeekRow, { week: week, segments: segments, on: on, now: now, taskHref: props.taskHref, pointed: pointed, goals: props.goals, goalsOn: goalsOn, goalHref: props.goalHref, onPoint: point, onLeave: leave, people: true, picked: picked, onPick: (day) => setPicked((before) => (before === day ? null : day)) }, week[0]?.day))) })] }), picked !== null && (_jsxs("section", { className: "sc-calendar-day-list", "aria-label": words.onDay(formatDay(picked, tag)), children: [_jsxs("div", { className: "sc-calendar-day-list-head", children: [_jsxs("h3", { className: "sc-calendar-day-list-title", children: [formatDay(picked, tag), " ", _jsx("span", { className: "sc-column-count", children: onPicked.length })] }), _jsx("button", { type: "button", className: "sc-button sc-button-ghost sc-button-sm", onClick: () => setPicked(null), children: words.close })] }), _jsx(TaskList, { tasks: onPicked, taskHref: props.taskHref, today: now, showState: true, empty: _jsx("p", { className: "sc-muted", children: words.nothingOnDay }) })] })), (props.categories ?? []).length > 0 && (_jsx("dl", { className: "sc-calendar-legend", "aria-label": words.legend.title, children: (props.categories ?? []).map((category) => (_jsxs("div", { children: [_jsx("dt", { children: _jsx("span", { className: cx("sc-calendar-dot", `sc-category-${category.color}`) }) }), _jsx("dd", { children: category.name })] }, category.key))) })), nothing && _jsx("p", { className: "sc-muted", children: words.nothingDue })] }));
183
231
  }
184
232
  /** One week on its own: the days as columns, the tasks on them, and the weeks around a step away. */
185
233
  export function Week(props) {
@@ -197,30 +245,32 @@ export function Week(props) {
197
245
  const nothing = segments.length === 0 && days.every((day) => !on.has(day));
198
246
  return (_jsxs("div", { className: "sc-calendar sc-week", children: [_jsxs("div", { className: "sc-calendar-head", children: [_jsx("h2", { className: "sc-calendar-month", children: formatDays(first, last, tag) }), _jsxs("nav", { className: "sc-calendar-nav", "aria-label": words.title, children: [_jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.weekHref(addDays(first, -7)), "aria-label": words.previous, children: "<" }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.weekHref(now), children: words.thisWeek }), _jsx("a", { className: "sc-button sc-button-ghost sc-button-sm", href: props.weekHref(addDays(first, 7)), "aria-label": words.next, children: ">" })] })] }), _jsxs("table", { className: "sc-calendar-grid", "aria-label": words.title, children: [_jsx("thead", { children: _jsx("tr", { children: weekdays(firstDay).map((weekday) => (_jsx("th", { scope: "col", children: formatWeekday(weekday, tag) }, weekday))) }) }), _jsx("tbody", { children: _jsx(WeekRow, { week: week, segments: segments, on: on, now: now, taskHref: props.taskHref, markOf: props.markOf, pointed: pointed, onPoint: point, onLeave: leave }) })] }), nothing && _jsx("p", { className: "sc-muted", children: words.nothing })] }));
199
247
  }
200
- /** Who has what, from the open tasks: by login, with the unassigned last. */
201
- export function workloadOf(tasks, today) {
248
+ /**
249
+ * Who has what, from the open tasks: a task counted for each of its workers, by name, and the
250
+ * tasks with none last; this week is the days from today through the week's last day, the week
251
+ * beginning on `firstDay` (1 for Monday, 7 for Sunday).
252
+ */
253
+ export function workloadOf(tasks, today, firstDay = 1) {
254
+ const weekEnd = weekOf(today, firstDay).at(-1) ?? today;
202
255
  const rows = new Map();
203
256
  for (const task of tasks.filter(isOpen)) {
204
- const key = task.assignee?.id ?? "";
205
- const row = rows.get(key);
206
- if (row === undefined) {
207
- rows.set(key, { person: task.assignee ?? undefined, tasks: [task] });
208
- }
209
- else {
210
- row.tasks.push(task);
257
+ const workers = task.workers.length === 0 ? [undefined] : task.workers;
258
+ for (const worker of workers) {
259
+ const key = worker?.id ?? "";
260
+ const row = rows.get(key);
261
+ if (row === undefined) {
262
+ rows.set(key, { person: worker, tasks: [task] });
263
+ }
264
+ else {
265
+ row.tasks.push(task);
266
+ }
211
267
  }
212
268
  }
213
269
  const count = (list) => ({
214
270
  open: list.length,
215
271
  inProgress: list.filter((task) => task.state === "in_progress" || task.state === "in_review")
216
272
  .length,
217
- dueSoon: list.filter((task) => {
218
- if (task.dueOn === null) {
219
- return false;
220
- }
221
- const days = daysBetween(today, task.dueOn);
222
- return days >= 0 && days <= 7;
223
- }).length,
273
+ dueThisWeek: list.filter((task) => task.dueOn !== null && task.dueOn >= today && task.dueOn <= weekEnd).length,
224
274
  overdue: list.filter((task) => task.dueOn !== null && task.dueOn < today).length,
225
275
  });
226
276
  return [...rows.values()]
@@ -235,17 +285,18 @@ export function workloadOf(tasks, today) {
235
285
  return personName(a.person).localeCompare(personName(b.person));
236
286
  });
237
287
  }
238
- /** Who has what: a row per person, and what of theirs is late or due soon. */
288
+ /** Who has what: a row per person, and what of theirs is late or due this week. */
239
289
  export function Workload(props) {
240
290
  const words = useWords().calendar.workload;
241
- const rows = workloadOf(props.tasks, props.today ?? todayOf());
291
+ const { tag } = useLanguage();
292
+ const rows = workloadOf(props.tasks, props.today ?? todayOf(), firstDayOfWeek(deviceLanguage(tag), props.weekStart));
242
293
  if (rows.length === 0) {
243
294
  return null;
244
295
  }
245
- return (_jsxs("table", { className: "sc-workload", "aria-label": words.title, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: words.person }), _jsx("th", { scope: "col", children: words.open }), _jsx("th", { scope: "col", children: words.inProgress }), _jsx("th", { scope: "col", children: words.dueSoon }), _jsx("th", { scope: "col", children: words.overdue })] }) }), _jsx("tbody", { children: rows.map((row) => {
296
+ return (_jsxs("table", { className: "sc-workload", "aria-label": words.title, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: words.person }), _jsx("th", { scope: "col", children: words.open }), _jsx("th", { scope: "col", children: words.inProgress }), _jsx("th", { scope: "col", children: words.dueThisWeek }), _jsx("th", { scope: "col", children: words.overdue })] }) }), _jsx("tbody", { children: rows.map((row) => {
246
297
  const href = props.personHref?.(row.person);
247
298
  const who = row.person === undefined ? (_jsx("span", { className: "sc-muted", children: words.unassigned })) : (_jsx(PersonChip, { person: row.person }));
248
- return (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: href === undefined ? who : _jsx("a", { href: href, children: who }) }), _jsx("td", { children: row.open }), _jsx("td", { children: row.inProgress }), _jsx("td", { className: cx(row.dueSoon > 0 && "sc-workload-soon"), children: row.dueSoon }), _jsx("td", { className: cx(row.overdue > 0 && "sc-workload-late"), children: row.overdue })] }, row.person?.id ?? ""));
299
+ return (_jsxs("tr", { children: [_jsx("th", { scope: "row", children: href === undefined ? who : _jsx("a", { href: href, children: who }) }), _jsx("td", { children: row.open }), _jsx("td", { children: row.inProgress }), _jsx("td", { className: cx(row.dueThisWeek > 0 && "sc-workload-soon"), children: row.dueThisWeek }), _jsx("td", { className: cx(row.overdue > 0 && "sc-workload-late"), children: row.overdue })] }, row.person?.id ?? ""));
249
300
  }) })] }));
250
301
  }
251
302
  //# sourceMappingURL=calendar.js.map