@skillcdn/console 0.1.9 → 0.1.10
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 +5 -5
- package/dist/api.d.ts +5 -5
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +4 -4
- package/dist/api.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +255 -10
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/format.d.ts +9 -1
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +80 -0
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +62 -7
- package/dist/cli/help.js.map +1 -1
- package/dist/client.d.ts +31 -4
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +19 -3
- package/dist/client.js.map +1 -1
- package/dist/components/board.d.ts +27 -1
- package/dist/components/board.d.ts.map +1 -1
- package/dist/components/board.js +75 -7
- package/dist/components/board.js.map +1 -1
- package/dist/components/calendar.d.ts +34 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +96 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/categories.d.ts +13 -0
- package/dist/components/categories.d.ts.map +1 -0
- package/dist/components/categories.js +52 -0
- package/dist/components/categories.js.map +1 -0
- package/dist/components/decision-list.d.ts +10 -0
- package/dist/components/decision-list.d.ts.map +1 -1
- package/dist/components/decision-list.js +14 -1
- package/dist/components/decision-list.js.map +1 -1
- package/dist/components/event-feed.d.ts.map +1 -1
- package/dist/components/event-feed.js +12 -0
- package/dist/components/event-feed.js.map +1 -1
- package/dist/components/goals.d.ts +35 -0
- package/dist/components/goals.d.ts.map +1 -0
- package/dist/components/goals.js +45 -0
- package/dist/components/goals.js.map +1 -0
- package/dist/components/task-form.d.ts +5 -1
- package/dist/components/task-form.d.ts.map +1 -1
- package/dist/components/task-form.js +13 -1
- package/dist/components/task-form.js.map +1 -1
- package/dist/components/task-list.d.ts +16 -0
- package/dist/components/task-list.d.ts.map +1 -0
- package/dist/components/task-list.js +14 -0
- package/dist/components/task-list.js.map +1 -0
- package/dist/components/task-view.d.ts +9 -1
- package/dist/components/task-view.d.ts.map +1 -1
- package/dist/components/task-view.js +10 -4
- package/dist/components/task-view.js.map +1 -1
- package/dist/components/ui.d.ts +30 -1
- package/dist/components/ui.d.ts.map +1 -1
- package/dist/components/ui.js +60 -0
- package/dist/components/ui.js.map +1 -1
- package/dist/components/work.d.ts +10 -0
- package/dist/components/work.d.ts.map +1 -0
- package/dist/components/work.js +29 -0
- package/dist/components/work.js.map +1 -0
- package/dist/console.css +511 -0
- package/dist/console.d.ts +8 -0
- package/dist/console.d.ts.map +1 -1
- package/dist/console.js +124 -8
- package/dist/console.js.map +1 -1
- package/dist/data.d.ts +14 -1
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +36 -2
- package/dist/data.js.map +1 -1
- package/dist/dates.d.ts +39 -0
- package/dist/dates.d.ts.map +1 -0
- package/dist/dates.js +120 -0
- package/dist/dates.js.map +1 -0
- package/dist/i18n/en.d.ts +162 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +174 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/ko.d.ts.map +1 -1
- package/dist/i18n/ko.js +169 -1
- package/dist/i18n/ko.js.map +1 -1
- package/dist/index.d.ts +10 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/limits.d.ts +5 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +5 -0
- package/dist/limits.js.map +1 -1
- package/dist/router.d.ts +50 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +74 -1
- package/dist/router.js.map +1 -1
- package/dist/routes.d.ts +7 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +9 -0
- package/dist/routes.js.map +1 -1
- package/dist/schemas.d.ts +366 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +112 -3
- package/dist/schemas.js.map +1 -1
- package/dist/vocabulary.d.ts +15 -1
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +26 -0
- package/dist/vocabulary.js.map +1 -1
- package/docs/specs/cli.md +11 -4
- package/docs/specs/rest.md +33 -8
- package/package.json +1 -1
- package/skills/working-the-board/SKILL.md +7 -6
- package/src/api.ts +30 -0
- package/src/cli/cli.ts +311 -10
- package/src/cli/format.ts +88 -0
- package/src/cli/help.ts +69 -7
- package/src/client.ts +70 -2
- package/src/components/board.tsx +205 -12
- package/src/components/calendar.tsx +255 -0
- package/src/components/categories.tsx +209 -0
- package/src/components/decision-list.tsx +62 -5
- package/src/components/event-feed.tsx +12 -0
- package/src/components/goals.tsx +264 -0
- package/src/components/task-form.tsx +78 -1
- package/src/components/task-list.tsx +61 -0
- package/src/components/task-view.tsx +74 -3
- package/src/components/ui.tsx +116 -1
- package/src/components/work.tsx +83 -0
- package/src/console.tsx +337 -4
- package/src/data.ts +63 -8
- package/src/dates.ts +143 -0
- package/src/i18n/en.ts +184 -1
- package/src/i18n/ko.ts +175 -1
- package/src/index.ts +58 -1
- package/src/limits.ts +5 -0
- package/src/router.ts +119 -6
- package/src/routes.ts +10 -0
- package/src/schemas.ts +141 -1
- package/src/styles/console.css +511 -0
- package/src/vocabulary.ts +33 -0
|
@@ -28,5 +28,15 @@ export interface DecisionListProps {
|
|
|
28
28
|
readonly busy?: boolean | undefined;
|
|
29
29
|
readonly empty?: React.ReactNode;
|
|
30
30
|
}
|
|
31
|
+
export interface DecisionLogProps {
|
|
32
|
+
/** The decisions answered, newest first. */
|
|
33
|
+
readonly decisions: readonly RestDecision[];
|
|
34
|
+
readonly tasks?: ReadonlyMap<string, RestTask> | undefined;
|
|
35
|
+
readonly taskHref?: ((task: RestTask) => string) | undefined;
|
|
36
|
+
/** Where each decision's own page is, with its context, its rationale and what followed. */
|
|
37
|
+
readonly decisionHref?: ((decision: RestDecision) => string) | undefined;
|
|
38
|
+
}
|
|
39
|
+
/** The record: one row per decision answered, what was asked, what was chosen, by whom, when. */
|
|
40
|
+
export declare function DecisionLog(props: DecisionLogProps): import("react").JSX.Element;
|
|
31
41
|
export declare function DecisionList(props: DecisionListProps): import("react").JSX.Element;
|
|
32
42
|
//# sourceMappingURL=decision-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-list.d.ts","sourceRoot":"","sources":["../../src/components/decision-list.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACd,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-list.d.ts","sourceRoot":"","sources":["../../src/components/decision-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -43,11 +43,24 @@ export function DecisionCard(props) {
|
|
|
43
43
|
}
|
|
44
44
|
}, children: [_jsx("div", { className: "sc-options-list", role: "radiogroup", "aria-label": words.decisions.options, children: decision.options.map((option) => (_jsxs("label", { className: cx("sc-option", chosen === option.id && "sc-option-chosen"), children: [_jsx("input", { type: "radio", name: `decision-${decision.id}`, value: option.id, checked: chosen === option.id, onChange: () => setChosen(option.id) }), _jsx("span", { children: option.label })] }, option.id))) }), _jsx("input", { className: "sc-input", placeholder: words.decisions.notePlaceholder, maxLength: MAX_NOTE_LENGTH, value: note, onChange: (event) => setNote(event.target.value) }), _jsx("div", { className: "sc-form-actions", children: _jsx(Button, { type: "submit", variant: "primary", size: "sm", disabled: chosen === undefined || props.busy === true, children: words.decisions.answer }) })] })), answered && (_jsx(Outcome, { decision: decision, docHref: props.docHref, onUpdate: props.onUpdate, busy: props.busy }))] }));
|
|
45
45
|
}
|
|
46
|
+
/** The record: one row per decision answered, what was asked, what was chosen, by whom, when. */
|
|
47
|
+
export function DecisionLog(props) {
|
|
48
|
+
const words = useWords();
|
|
49
|
+
return (_jsx("ol", { className: "sc-decision-log", "aria-label": words.decisions.record, children: props.decisions.map((decision) => {
|
|
50
|
+
const task = decision.taskId === null ? undefined : props.tasks?.get(decision.taskId);
|
|
51
|
+
const href = props.decisionHref?.(decision);
|
|
52
|
+
const chosen = decision.options.find((option) => option.id === decision.answer?.option)?.label ??
|
|
53
|
+
decision.answer?.option ??
|
|
54
|
+
"";
|
|
55
|
+
return (_jsxs("li", { className: "sc-decision-row", children: [_jsx("span", { className: "sc-decision-row-question", children: href === undefined ? decision.question : _jsx("a", { href: href, children: decision.question }) }), _jsx("span", { className: "sc-decision-row-answer", children: chosen }), _jsxs("span", { className: "sc-decision-row-meta", children: [decision.answer !== null && (_jsxs(_Fragment, { children: [_jsx(PersonChip, { person: decision.answer.by }), " ", _jsx(Time, { iso: decision.answer.at })] })), task !== undefined &&
|
|
56
|
+
(props.taskHref === undefined ? (_jsxs("span", { className: "sc-card-number", children: ["#", task.number] })) : (_jsxs("a", { className: "sc-card-number", href: props.taskHref(task), children: ["#", task.number] })))] })] }, decision.id));
|
|
57
|
+
}) }));
|
|
58
|
+
}
|
|
46
59
|
export function DecisionList(props) {
|
|
47
60
|
const words = useWords();
|
|
48
61
|
const waiting = props.decisions.filter((decision) => decision.answer === null);
|
|
49
62
|
const answered = props.decisions.filter((decision) => decision.answer !== null);
|
|
50
63
|
const card = (decision) => (_jsx(DecisionCard, { decision: decision, task: decision.taskId === null ? undefined : props.tasks.get(decision.taskId), taskHref: props.taskHref, docHref: props.docHref, href: props.decisionHref?.(decision), onAnswer: props.onAnswer, onUpdate: props.onUpdate, busy: props.busy }, decision.id));
|
|
51
|
-
return (_jsxs("div", { className: "sc-decisions", children: [_jsxs("section", { "aria-label": words.decisions.waiting, children: [_jsxs("h2", { className: "sc-section-title", children: [words.decisions.waiting, " ", _jsx("span", { className: "sc-column-count", children: waiting.length })] }), waiting.length === 0 ? (props.empty ?? null) : waiting.map(card)] }), answered.length > 0 && (_jsxs("section", { "aria-label": words.decisions.answered, children: [_jsxs("h2", { className: "sc-section-title", children: [words.decisions.
|
|
64
|
+
return (_jsxs("div", { className: "sc-decisions", children: [_jsxs("section", { "aria-label": words.decisions.waiting, children: [_jsxs("h2", { className: "sc-section-title", children: [words.decisions.waiting, " ", _jsx("span", { className: "sc-column-count", children: waiting.length })] }), waiting.length === 0 ? (props.empty ?? null) : waiting.map(card)] }), answered.length > 0 && (_jsxs("section", { "aria-label": words.decisions.answered, children: [_jsxs("h2", { className: "sc-section-title", children: [words.decisions.record, " ", _jsx("span", { className: "sc-column-count", children: answered.length })] }), _jsx("p", { className: "sc-lead", children: words.decisions.recordLead }), _jsx(DecisionLog, { decisions: answered, tasks: props.tasks, taskHref: props.taskHref, decisionHref: props.decisionHref })] }))] }));
|
|
52
65
|
}
|
|
53
66
|
//# sourceMappingURL=decision-list.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decision-list.js","sourceRoot":"","sources":["../../src/components/decision-list.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EACL,eAAe,EACf,eAAe,GAKhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"decision-list.js","sourceRoot":"","sources":["../../src/components/decision-list.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-feed.d.ts","sourceRoot":"","sources":["../../src/components/event-feed.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAM,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQlD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,GAAE,QAAa,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"event-feed.d.ts","sourceRoot":"","sources":["../../src/components/event-feed.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAM,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAQlD,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,GAAE,QAAa,GAAG,MAAM,CAqF5E;AAED,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAkC9C"}
|
|
@@ -25,6 +25,8 @@ export function describeEvent(event, words = en) {
|
|
|
25
25
|
: feed.role.other;
|
|
26
26
|
const login = data.login ?? feed.someone;
|
|
27
27
|
const question = data.question ?? feed.aQuestion;
|
|
28
|
+
const goal = data.title ?? feed.aGoal;
|
|
29
|
+
const category = data.name ?? data.key ?? feed.aCategory;
|
|
28
30
|
switch (event.kind) {
|
|
29
31
|
case "person.joined":
|
|
30
32
|
return feed.event.personJoined();
|
|
@@ -40,6 +42,16 @@ export function describeEvent(event, words = en) {
|
|
|
40
42
|
return feed.event.memberChanged(login, role(data.role), project);
|
|
41
43
|
case "project.member_removed":
|
|
42
44
|
return feed.event.memberRemoved(login, project);
|
|
45
|
+
case "category.created":
|
|
46
|
+
return feed.event.categoryCreated(category);
|
|
47
|
+
case "category.updated":
|
|
48
|
+
return feed.event.categoryUpdated(fields, category);
|
|
49
|
+
case "category.removed":
|
|
50
|
+
return feed.event.categoryRemoved(category);
|
|
51
|
+
case "goal.created":
|
|
52
|
+
return feed.event.goalCreated(goal);
|
|
53
|
+
case "goal.updated":
|
|
54
|
+
return feed.event.goalUpdated(fields, goal);
|
|
43
55
|
case "task.created":
|
|
44
56
|
return feed.event.taskCreated(task);
|
|
45
57
|
case "task.moved":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-feed.js","sourceRoot":"","sources":["../../src/components/event-feed.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"event-feed.js","sourceRoot":"","sources":["../../src/components/event-feed.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type GoalState, type RestGoal, type RestGoalInput, type RestTask } from "../api.js";
|
|
3
|
+
export interface GoalListProps {
|
|
4
|
+
readonly goals: readonly RestGoal[];
|
|
5
|
+
readonly goalHref: (goal: RestGoal) => string;
|
|
6
|
+
/** The day to count from; the browser's today when left out. */
|
|
7
|
+
readonly today?: string | undefined;
|
|
8
|
+
readonly empty?: ReactNode;
|
|
9
|
+
}
|
|
10
|
+
export declare function GoalList(props: GoalListProps): import("react").JSX.Element;
|
|
11
|
+
export interface GoalFormProps {
|
|
12
|
+
/** The goal to change; left out, the form sets a new one. */
|
|
13
|
+
readonly goal?: RestGoal | undefined;
|
|
14
|
+
readonly busy?: boolean | undefined;
|
|
15
|
+
readonly error?: string | undefined;
|
|
16
|
+
readonly onSubmit: (input: RestGoalInput) => void;
|
|
17
|
+
readonly onCancel?: (() => void) | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare function GoalForm(props: GoalFormProps): import("react").JSX.Element;
|
|
20
|
+
export interface GoalViewProps {
|
|
21
|
+
readonly goal: RestGoal;
|
|
22
|
+
/** The tasks of the board; those that work towards the goal are shown, by state. */
|
|
23
|
+
readonly tasks: readonly RestTask[];
|
|
24
|
+
readonly taskHref: (task: RestTask) => string;
|
|
25
|
+
/** Where a document of the project is read, by its path, for the links in what was written. */
|
|
26
|
+
readonly docHref?: ((path: string) => string) | undefined;
|
|
27
|
+
readonly today?: string | undefined;
|
|
28
|
+
/** Where the goal is changed; left out, it cannot be changed from here. */
|
|
29
|
+
readonly editHref?: string | undefined;
|
|
30
|
+
/** Called when an owner moves the goal to another state from here. */
|
|
31
|
+
readonly onMove?: ((goal: RestGoal, state: GoalState) => void) | undefined;
|
|
32
|
+
readonly busy?: boolean | undefined;
|
|
33
|
+
}
|
|
34
|
+
export declare function GoalView(props: GoalViewProps): import("react").JSX.Element;
|
|
35
|
+
//# sourceMappingURL=goals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.d.ts","sourceRoot":"","sources":["../../src/components/goals.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AACjE,OAAO,EAEL,KAAK,SAAS,EAGd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEd,MAAM,WAAW,CAAC;AAenB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC9C,gEAAgE;IAChE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAuB5C;AAED,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9C;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAmF5C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,oFAAoF;IACpF,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC9C,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IAC3E,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAgG5C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { GOAL_STATES, MAX_BODY_LENGTH, MAX_TITLE_LENGTH, TASK_STATES, } from "../api.js";
|
|
4
|
+
import { useWords } from "../i18n/index.js";
|
|
5
|
+
import { Markdown } from "./markdown.js";
|
|
6
|
+
import { TaskList } from "./task-list.js";
|
|
7
|
+
import { Button, Day, DueBadge, GoalStateBadge, PersonChip, ProgressBar, Time } from "./ui.js";
|
|
8
|
+
// The roadmap of a project (ADR-0019): its goals, each with the day it is meant to be reached
|
|
9
|
+
// by and how far its tasks are, read from the board as it stands. The list, one goal with its
|
|
10
|
+
// tasks, and the form an owner sets one with. Each takes its data as props and nothing from
|
|
11
|
+
// the network; what people wrote is shown as text, never as HTML.
|
|
12
|
+
/** A goal's day on the calendar's terms: reached or let go, it is a plain fact; else it may be late. */
|
|
13
|
+
const dueState = (goal) => goal.state === "done" ? "done" : goal.state === "dropped" ? "dropped" : "ready";
|
|
14
|
+
export function GoalList(props) {
|
|
15
|
+
const words = useWords().roadmap;
|
|
16
|
+
if (props.goals.length === 0) {
|
|
17
|
+
return _jsx(_Fragment, { children: props.empty ?? null });
|
|
18
|
+
}
|
|
19
|
+
return (_jsx("ul", { className: "sc-goals", "aria-label": words.title, children: props.goals.map((goal) => (_jsxs("li", { className: `sc-goal sc-goal-${goal.state}`, children: [_jsxs("div", { className: "sc-goal-head", children: [_jsx("a", { className: "sc-goal-title", href: props.goalHref(goal), children: goal.title }), _jsx(GoalStateBadge, { state: goal.state }), goal.dueOn !== null && (_jsx(DueBadge, { dueOn: goal.dueOn, state: dueState(goal), today: props.today }))] }), _jsx(ProgressBar, { counts: goal.taskCounts })] }, goal.id))) }));
|
|
20
|
+
}
|
|
21
|
+
export function GoalForm(props) {
|
|
22
|
+
const words = useWords();
|
|
23
|
+
const form = words.roadmap.form;
|
|
24
|
+
const { goal } = props;
|
|
25
|
+
const [title, setTitle] = useState(goal?.title ?? "");
|
|
26
|
+
const [body, setBody] = useState(goal?.body ?? "");
|
|
27
|
+
const [state, setState] = useState(goal?.state ?? "planned");
|
|
28
|
+
const [dueOn, setDueOn] = useState(goal?.dueOn ?? "");
|
|
29
|
+
const submit = (event) => {
|
|
30
|
+
event.preventDefault();
|
|
31
|
+
props.onSubmit({ title: title.trim(), body, state, dueOn: dueOn === "" ? null : dueOn });
|
|
32
|
+
};
|
|
33
|
+
return (_jsxs("form", { className: "sc-form", onSubmit: submit, children: [_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.title }), _jsx("input", { className: "sc-input", value: title, maxLength: MAX_TITLE_LENGTH, required: true, onChange: (event) => setTitle(event.target.value) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.body }), _jsx("textarea", { className: "sc-input sc-textarea", value: body, maxLength: MAX_BODY_LENGTH, rows: 4, placeholder: form.bodyPlaceholder, onChange: (event) => setBody(event.target.value) })] }), _jsxs("div", { className: "sc-field-row", children: [_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.state }), _jsx("select", { className: "sc-input", value: state, onChange: (event) => setState(event.target.value), children: GOAL_STATES.map((candidate) => (_jsx("option", { value: candidate, children: words.vocabulary.goalState[candidate] }, candidate))) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.dueOn }), _jsx("input", { className: "sc-input", type: "date", value: dueOn, onChange: (event) => setDueOn(event.target.value) })] })] }), props.error !== undefined && (_jsx("p", { className: "sc-form-error", role: "alert", children: props.error })), _jsxs("div", { className: "sc-form-actions", children: [_jsx(Button, { type: "submit", variant: "primary", disabled: props.busy === true || title.trim() === "", children: goal === undefined ? form.set : words.common.save }), props.onCancel !== undefined && (_jsx(Button, { variant: "ghost", onClick: props.onCancel, children: words.common.cancel }))] })] }));
|
|
34
|
+
}
|
|
35
|
+
export function GoalView(props) {
|
|
36
|
+
const words = useWords();
|
|
37
|
+
const roadmap = words.roadmap;
|
|
38
|
+
const { goal } = props;
|
|
39
|
+
const towards = props.tasks.filter((task) => task.goalId === goal.id);
|
|
40
|
+
return (_jsxs("div", { className: "sc-task sc-goal-view", children: [_jsxs("header", { className: "sc-task-header", children: [_jsx("h1", { className: "sc-task-title", children: goal.title }), _jsxs("div", { className: "sc-task-badges", children: [_jsx(GoalStateBadge, { state: goal.state }), goal.dueOn !== null && (_jsx(DueBadge, { dueOn: goal.dueOn, state: dueState(goal), today: props.today }))] })] }), _jsxs("div", { className: "sc-task-body", children: [_jsxs("div", { className: "sc-task-main", children: [_jsx(ProgressBar, { counts: goal.taskCounts }), goal.body.length > 0 ? (_jsx(Markdown, { source: goal.body, docHref: props.docHref })) : (_jsx("p", { className: "sc-muted", children: roadmap.nothingMore })), _jsxs("section", { className: "sc-task-section", "aria-label": roadmap.tasks, children: [_jsx("h2", { className: "sc-section-title", children: roadmap.tasks }), towards.length === 0 ? (_jsx("p", { className: "sc-muted", children: roadmap.noTasks })) : (TASK_STATES.map((state) => {
|
|
41
|
+
const inState = towards.filter((task) => task.state === state);
|
|
42
|
+
return inState.length === 0 ? null : (_jsxs("div", { className: "sc-goal-tasks", children: [_jsxs("h3", { className: "sc-goal-tasks-state", children: [words.vocabulary.state[state], " ", _jsx("span", { className: "sc-column-count", children: inState.length })] }), _jsx(TaskList, { tasks: inState, taskHref: props.taskHref, today: props.today })] }, state));
|
|
43
|
+
}))] })] }), _jsxs("aside", { className: "sc-task-aside", "aria-label": words.task.facts, children: [_jsxs("dl", { className: "sc-facts", children: [_jsxs("div", { children: [_jsx("dt", { children: roadmap.state }), _jsx("dd", { children: props.onMove === undefined ? (words.vocabulary.goalState[goal.state]) : (_jsx("select", { className: "sc-input", "aria-label": roadmap.state, value: goal.state, disabled: props.busy === true, onChange: (event) => props.onMove?.(goal, event.target.value), children: GOAL_STATES.map((state) => (_jsx("option", { value: state, children: words.vocabulary.goalState[state] }, state))) })) })] }), _jsxs("div", { children: [_jsx("dt", { children: roadmap.target }), _jsx("dd", { children: goal.dueOn === null ? (_jsx("span", { className: "sc-muted", children: roadmap.noTarget })) : (_jsx(Day, { day: goal.dueOn })) })] }), _jsxs("div", { children: [_jsx("dt", { children: roadmap.setBy }), _jsxs("dd", { children: [_jsx(PersonChip, { person: goal.createdBy }), " ", _jsx(Time, { iso: goal.createdAt })] })] })] }), props.editHref !== undefined && (_jsx("div", { className: "sc-task-actions", children: _jsx("a", { className: "sc-button sc-button-secondary", href: props.editHref, children: words.common.edit }) }))] })] })] }));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=goals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/components/goals.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import { type RestPerson, type RestTask, type RestTaskInput } from "../api.js";
|
|
1
|
+
import { type RestCategory, type RestGoal, type RestPerson, type RestTask, type RestTaskInput } from "../api.js";
|
|
2
2
|
export interface TaskFormProps {
|
|
3
3
|
readonly people: readonly RestPerson[];
|
|
4
4
|
/** The task to change; left out, the form writes a new one. */
|
|
5
5
|
readonly task?: RestTask | undefined;
|
|
6
6
|
/** The tasks a new one may be part of. */
|
|
7
7
|
readonly parents?: readonly RestTask[] | undefined;
|
|
8
|
+
/** The categories of the workspace, to sort the task into one. */
|
|
9
|
+
readonly categories?: readonly RestCategory[] | undefined;
|
|
10
|
+
/** The goals of the project, for the task to work towards one. */
|
|
11
|
+
readonly goals?: readonly RestGoal[] | undefined;
|
|
8
12
|
readonly busy?: boolean | undefined;
|
|
9
13
|
readonly error?: string | undefined;
|
|
10
14
|
readonly onSubmit: (input: RestTaskInput) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-form.d.ts","sourceRoot":"","sources":["../../src/components/task-form.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAGnB,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"task-form.d.ts","sourceRoot":"","sources":["../../src/components/task-form.tsx"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAGnB,MAAM,WAAW,CAAC;AAQnB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,0CAA0C;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,CAAC;IACnD,kEAAkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,CAAC;IAC1D,kEAAkE;IAClE,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,QAAQ,EAAE,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CAC9C;AAOD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAsQ5C"}
|
|
@@ -13,6 +13,10 @@ export function TaskForm(props) {
|
|
|
13
13
|
const [priority, setPriority] = useState(task?.priority ?? "normal");
|
|
14
14
|
const [assigneeId, setAssigneeId] = useState(task?.assignee?.id ?? "");
|
|
15
15
|
const [parentId, setParentId] = useState(task?.parentId ?? "");
|
|
16
|
+
const [category, setCategory] = useState(task?.category?.key ?? "");
|
|
17
|
+
const [goalId, setGoalId] = useState(task?.goalId ?? "");
|
|
18
|
+
const [startsOn, setStartsOn] = useState(task?.startsOn ?? "");
|
|
19
|
+
const [dueOn, setDueOn] = useState(task?.dueOn ?? "");
|
|
16
20
|
const [links, setLinks] = useState(task?.links.map((link) => ({ url: link.url, label: link.label ?? "" })) ?? []);
|
|
17
21
|
const submit = (event) => {
|
|
18
22
|
event.preventDefault();
|
|
@@ -23,6 +27,10 @@ export function TaskForm(props) {
|
|
|
23
27
|
priority,
|
|
24
28
|
assigneeId: assigneeId === "" ? null : assigneeId,
|
|
25
29
|
parentId: parentId === "" ? null : parentId,
|
|
30
|
+
category: category === "" ? null : category,
|
|
31
|
+
goalId: goalId === "" ? null : goalId,
|
|
32
|
+
startsOn: startsOn === "" ? null : startsOn,
|
|
33
|
+
dueOn: dueOn === "" ? null : dueOn,
|
|
26
34
|
links: links
|
|
27
35
|
.filter((link) => link.url.trim().length > 0)
|
|
28
36
|
.map((link) => ({
|
|
@@ -32,6 +40,10 @@ export function TaskForm(props) {
|
|
|
32
40
|
});
|
|
33
41
|
};
|
|
34
42
|
const parents = (props.parents ?? []).filter((candidate) => candidate.id !== task?.id);
|
|
35
|
-
|
|
43
|
+
const categories = props.categories ?? [];
|
|
44
|
+
// A goal let go is not offered, unless the task is on it already.
|
|
45
|
+
const goals = (props.goals ?? []).filter((goal) => goal.state !== "dropped" || goal.id === task?.goalId);
|
|
46
|
+
const datesInOrder = startsOn === "" || dueOn === "" || startsOn <= dueOn;
|
|
47
|
+
return (_jsxs("form", { className: "sc-form", onSubmit: submit, children: [_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.title }), _jsx("input", { className: "sc-input", value: title, maxLength: MAX_TITLE_LENGTH, required: true, onChange: (event) => setTitle(event.target.value) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.body }), _jsx("textarea", { className: "sc-input sc-textarea", value: body, maxLength: MAX_BODY_LENGTH, rows: 6, placeholder: form.bodyPlaceholder, onChange: (event) => setBody(event.target.value) })] }), _jsxs("div", { className: "sc-field-row", children: [_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.state }), _jsx("select", { className: "sc-input", value: state, onChange: (event) => setState(event.target.value), children: TASK_STATES.map((candidate) => (_jsx("option", { value: candidate, children: words.vocabulary.state[candidate] }, candidate))) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.priority }), _jsx("select", { className: "sc-input", value: priority, onChange: (event) => setPriority(event.target.value), children: TASK_PRIORITIES.map((candidate) => (_jsx("option", { value: candidate, children: words.vocabulary.priority[candidate] }, candidate))) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.assignee }), _jsxs("select", { className: "sc-input", value: assigneeId, onChange: (event) => setAssigneeId(event.target.value), children: [_jsx("option", { value: "", children: words.common.nobody }), props.people.map((person) => (_jsx("option", { value: person.id, children: person.login }, person.id)))] })] }), categories.length > 0 && (_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.category }), _jsxs("select", { className: "sc-input", value: category, onChange: (event) => setCategory(event.target.value), children: [_jsx("option", { value: "", children: form.noCategory }), categories.map((candidate) => (_jsx("option", { value: candidate.key, children: candidate.name }, candidate.key)))] })] }))] }), _jsxs("div", { className: "sc-field-row", children: [_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.startsOn }), _jsx("input", { className: "sc-input", type: "date", value: startsOn, onChange: (event) => setStartsOn(event.target.value) })] }), _jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.dueOn }), _jsx("input", { className: "sc-input", type: "date", value: dueOn, min: startsOn === "" ? undefined : startsOn, onChange: (event) => setDueOn(event.target.value) })] }), goals.length > 0 && (_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.goal }), _jsxs("select", { className: "sc-input", value: goalId, onChange: (event) => setGoalId(event.target.value), children: [_jsx("option", { value: "", children: form.noGoal }), goals.map((goal) => (_jsx("option", { value: goal.id, children: goal.title }, goal.id)))] })] })), parents.length > 0 && (_jsxs("label", { className: "sc-field", children: [_jsx("span", { className: "sc-field-label", children: form.partOf }), _jsxs("select", { className: "sc-input", value: parentId, onChange: (event) => setParentId(event.target.value), children: [_jsx("option", { value: "", children: words.common.nothing }), parents.map((candidate) => (_jsxs("option", { value: candidate.id, children: ["#", candidate.number, " ", candidate.title] }, candidate.id)))] })] }))] }), _jsxs("fieldset", { className: "sc-field sc-links", children: [_jsx("legend", { className: "sc-field-label", children: form.links }), links.map((link, index) => (_jsxs("div", { className: "sc-link-row", children: [_jsx("input", { className: "sc-input", type: "url", placeholder: "https://", pattern: "https://.*", maxLength: MAX_URL_LENGTH, value: link.url, onChange: (event) => setLinks(links.map((entry, at) => at === index ? { ...entry, url: event.target.value } : entry)) }), _jsx("input", { className: "sc-input", placeholder: form.label, maxLength: MAX_LINK_LABEL_LENGTH, value: link.label, onChange: (event) => setLinks(links.map((entry, at) => at === index ? { ...entry, label: event.target.value } : entry)) }), _jsx(Button, { variant: "ghost", size: "sm", onClick: () => setLinks(links.filter((_, at) => at !== index)), children: words.common.remove })] }, index))), links.length < MAX_LINKS && (_jsx(Button, { variant: "ghost", size: "sm", onClick: () => setLinks([...links, { url: "", label: "" }]), children: form.addLink }))] }), props.error !== undefined && (_jsx("p", { className: "sc-form-error", role: "alert", children: props.error })), _jsxs("div", { className: "sc-form-actions", children: [_jsx(Button, { type: "submit", variant: "primary", disabled: props.busy === true || title.trim() === "" || !datesInOrder, children: task === undefined ? form.write : words.common.save }), props.onCancel !== undefined && (_jsx(Button, { variant: "ghost", onClick: props.onCancel, children: words.common.cancel }))] })] }));
|
|
36
48
|
}
|
|
37
49
|
//# sourceMappingURL=task-form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-form.js","sourceRoot":"","sources":["../../src/components/task-form.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"task-form.js","sourceRoot":"","sources":["../../src/components/task-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { RestTask } from "../api.js";
|
|
3
|
+
export interface TaskListProps {
|
|
4
|
+
readonly tasks: readonly RestTask[];
|
|
5
|
+
readonly taskHref: (task: RestTask) => string;
|
|
6
|
+
/** Whether each row says the task's state: where the rows are not grouped by it. */
|
|
7
|
+
readonly showState?: boolean | undefined;
|
|
8
|
+
/** What the row says the task belongs to, where tasks of several projects are listed together. */
|
|
9
|
+
readonly projectOf?: ((task: RestTask) => string | undefined) | undefined;
|
|
10
|
+
/** The day to count due days from; the browser's today when left out. */
|
|
11
|
+
readonly today?: string | undefined;
|
|
12
|
+
readonly label?: string | undefined;
|
|
13
|
+
readonly empty?: ReactNode;
|
|
14
|
+
}
|
|
15
|
+
export declare function TaskList(props: TaskListProps): import("react").JSX.Element;
|
|
16
|
+
//# sourceMappingURL=task-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-list.d.ts","sourceRoot":"","sources":["../../src/components/task-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC;IAC9C,oFAAoF;IACpF,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACzC,kGAAkG;IAClG,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;IAC1E,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAsC5C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useWords } from "../i18n/index.js";
|
|
3
|
+
import { Avatar, Badge, CategoryBadge, DueBadge, StateBadge } from "./ui.js";
|
|
4
|
+
export function TaskList(props) {
|
|
5
|
+
const words = useWords();
|
|
6
|
+
if (props.tasks.length === 0) {
|
|
7
|
+
return _jsx(_Fragment, { children: props.empty ?? null });
|
|
8
|
+
}
|
|
9
|
+
return (_jsx("ul", { className: "sc-task-rows", "aria-label": props.label, children: props.tasks.map((task) => {
|
|
10
|
+
const project = props.projectOf?.(task);
|
|
11
|
+
return (_jsxs("li", { className: "sc-task-row", children: [_jsxs("a", { className: "sc-task-row-title", href: props.taskHref(task), children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), project !== undefined && _jsx("span", { className: "sc-task-row-project", children: project }), _jsxs("span", { className: "sc-task-row-meta", children: [task.category !== null && _jsx(CategoryBadge, { category: task.category }), props.showState === true && _jsx(StateBadge, { state: task.state }), task.openDecisions > 0 && (_jsx(Badge, { tone: "warning", title: words.board.decisionsTitle, children: words.board.decisions(task.openDecisions) })), task.openRuns > 0 && (_jsx(Badge, { tone: "accent", title: words.board.agentAtWorkTitle, children: words.board.agentAtWork })), task.dueOn !== null && (_jsx(DueBadge, { dueOn: task.dueOn, state: task.state, today: props.today })), task.assignee !== null && _jsx(Avatar, { person: task.assignee, size: "sm" })] })] }, task.id));
|
|
12
|
+
}) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=task-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-list.js","sourceRoot":"","sources":["../../src/components/task-list.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAmB7E,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,4BAAG,KAAK,CAAC,KAAK,IAAI,IAAI,GAAI,CAAC;IACpC,CAAC;IACD,OAAO,CACL,aAAI,SAAS,EAAC,cAAc,gBAAa,KAAK,CAAC,KAAK,YACjD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO,CACL,cAAkB,SAAS,EAAC,aAAa,aACvC,aAAG,SAAS,EAAC,mBAAmB,EAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,aACzD,gBAAM,SAAS,EAAC,gBAAgB,kBAAG,IAAI,CAAC,MAAM,IAAQ,OAAE,IAAI,CAAC,KAAK,IAChE,EACH,OAAO,KAAK,SAAS,IAAI,eAAM,SAAS,EAAC,qBAAqB,YAAE,OAAO,GAAQ,EAChF,gBAAM,SAAS,EAAC,kBAAkB,aAC/B,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAC,aAAa,IAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAI,EACpE,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,EAC7D,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CACzB,KAAC,KAAK,IAAC,IAAI,EAAC,SAAS,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,YACpD,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,GACpC,CACT,EACA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CACpB,KAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,gBAAgB,YACrD,KAAK,CAAC,KAAK,CAAC,WAAW,GAClB,CACT,EACA,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CACtB,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAI,CACvE,EACA,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAC,MAAM,IAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAC,IAAI,GAAG,IACjE,KAtBA,IAAI,CAAC,EAAE,CAuBX,CACN,CAAC;QACJ,CAAC,CAAC,GACC,CACN,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RestAnswerInput, RestArtifact, RestDecision, RestDecisionInput, RestDecisionPatch, RestEvent, RestPerson, RestRun, RestTask, RestTaskInput, TaskState } from "../api.js";
|
|
1
|
+
import type { RestAnswerInput, RestArtifact, RestCategory, RestDecision, RestDecisionInput, RestDecisionPatch, RestEvent, RestGoal, RestPerson, RestRun, RestTask, RestTaskInput, TaskState } from "../api.js";
|
|
2
2
|
import type { TaskFormKind } from "../router.js";
|
|
3
3
|
export interface TaskViewProps {
|
|
4
4
|
readonly task: RestTask;
|
|
@@ -10,13 +10,21 @@ export interface TaskViewProps {
|
|
|
10
10
|
readonly runs?: readonly RestRun[] | undefined;
|
|
11
11
|
/** Everything that happened to the task, oldest first, when the page has read it. */
|
|
12
12
|
readonly history?: readonly RestEvent[] | undefined;
|
|
13
|
+
/** The categories of the workspace, for the form. */
|
|
14
|
+
readonly categories?: readonly RestCategory[] | undefined;
|
|
15
|
+
/** The goals of the project, for the form and for naming the one the task works towards. */
|
|
16
|
+
readonly goals?: readonly RestGoal[] | undefined;
|
|
13
17
|
readonly taskHref: (task: RestTask) => string;
|
|
14
18
|
/** Where a decision is answered, for a run that waits for one. */
|
|
15
19
|
readonly decisionHref?: ((decisionId: string) => string) | undefined;
|
|
20
|
+
/** Where a goal of the roadmap is read. */
|
|
21
|
+
readonly goalHref?: ((goalId: string) => string) | undefined;
|
|
16
22
|
/** Where a file a run handed in is read. */
|
|
17
23
|
readonly fileHref?: ((artifact: RestArtifact) => string) | undefined;
|
|
18
24
|
/** Where a document of the project is read, by its path, for the links in what was written. */
|
|
19
25
|
readonly docHref?: ((path: string) => string) | undefined;
|
|
26
|
+
/** The day to count due days from; the browser's today when left out. */
|
|
27
|
+
readonly today?: string | undefined;
|
|
20
28
|
/** The form open on the page, if one: the task edited, or a decision raised about it. */
|
|
21
29
|
readonly form?: TaskFormKind | undefined;
|
|
22
30
|
/** Where each form is opened; left out, the forms cannot be opened from here. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-view.d.ts","sourceRoot":"","sources":["../../src/components/task-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,aAAa,EACb,SAAS,EACV,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"task-view.d.ts","sourceRoot":"","sources":["../../src/components/task-view.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { formatDay } from "../dates.js";
|
|
3
|
+
import { useLanguage, useWords } from "../i18n/index.js";
|
|
3
4
|
import { TASK_STATES } from "../vocabulary.js";
|
|
4
5
|
import { DecisionForm } from "./decision-form.js";
|
|
5
6
|
import { DecisionCard } from "./decision-list.js";
|
|
@@ -7,9 +8,10 @@ import { EventFeed } from "./event-feed.js";
|
|
|
7
8
|
import { Markdown } from "./markdown.js";
|
|
8
9
|
import { RunList } from "./runs.js";
|
|
9
10
|
import { TaskForm } from "./task-form.js";
|
|
10
|
-
import { PersonChip, PriorityBadge, StateBadge, Time } from "./ui.js";
|
|
11
|
+
import { CategoryBadge, DueBadge, PersonChip, PriorityBadge, StateBadge, Time } from "./ui.js";
|
|
11
12
|
export function TaskView(props) {
|
|
12
13
|
const words = useWords();
|
|
14
|
+
const { tag } = useLanguage();
|
|
13
15
|
const { task } = props;
|
|
14
16
|
const parent = task.parentId === null
|
|
15
17
|
? undefined
|
|
@@ -18,9 +20,13 @@ export function TaskView(props) {
|
|
|
18
20
|
const about = props.decisions.filter((decision) => decision.taskId === task.id);
|
|
19
21
|
const runs = (props.runs ?? []).filter((run) => run.taskId === task.id);
|
|
20
22
|
const tasksById = new Map(props.tasks.map((candidate) => [candidate.id, candidate]));
|
|
23
|
+
const goal = task.goalId === null
|
|
24
|
+
? undefined
|
|
25
|
+
: props.goals?.find((candidate) => candidate.id === task.goalId);
|
|
26
|
+
const day = (value) => formatDay(value, tag);
|
|
21
27
|
if (props.form === "edit") {
|
|
22
|
-
return (_jsxs("div", { className: "sc-task sc-task-editing", children: [_jsxs("h1", { className: "sc-task-title", children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsx(TaskForm, { people: props.people, task: task, parents: props.tasks, busy: props.busy, error: props.error, onSubmit: (input) => props.onChange(task, input), onCancel: props.onCancel })] }));
|
|
28
|
+
return (_jsxs("div", { className: "sc-task sc-task-editing", children: [_jsxs("h1", { className: "sc-task-title", children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsx(TaskForm, { people: props.people, task: task, parents: props.tasks, categories: props.categories, goals: props.goals, busy: props.busy, error: props.error, onSubmit: (input) => props.onChange(task, input), onCancel: props.onCancel })] }));
|
|
23
29
|
}
|
|
24
|
-
return (_jsxs("div", { className: "sc-task", children: [_jsxs("header", { className: "sc-task-header", children: [parent !== undefined && (_jsxs("p", { className: "sc-task-parent", children: [words.task.partOf, " ", _jsxs("a", { href: props.taskHref(parent), children: ["#", parent.number, " ", parent.title] })] })), _jsxs("h1", { className: "sc-task-title", children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("div", { className: "sc-task-badges", children: [_jsx(StateBadge, { state: task.state }), _jsx(PriorityBadge, { priority: task.priority })] })] }), _jsxs("div", { className: "sc-task-body", children: [_jsxs("div", { className: "sc-task-main", children: [props.error !== undefined && (_jsx("p", { className: "sc-form-error", role: "alert", children: props.error })), task.body.length > 0 ? (_jsx(Markdown, { source: task.body, docHref: props.docHref })) : (_jsx("p", { className: "sc-muted", children: words.task.nothingMore })), task.links.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.links, children: [_jsx("h2", { className: "sc-section-title", children: words.task.links }), _jsx("ul", { className: "sc-link-list", children: task.links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.url, target: "_blank", rel: "noopener noreferrer nofollow", children: link.label ?? link.url }) }, link.url))) })] })), props.form === "ask" && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.raiseDecision, children: [_jsx("h2", { className: "sc-section-title", children: words.task.raiseDecision }), _jsx(DecisionForm, { tasks: props.tasks, taskId: task.id, busy: props.busy, onSubmit: props.onRaiseDecision, onCancel: props.onCancel })] })), runs.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.runs, children: [_jsx("h2", { className: "sc-section-title", children: words.task.agentsAtWork }), _jsx(RunList, { runs: runs, decisionHref: props.decisionHref, fileHref: props.fileHref, docHref: props.docHref, onAbandon: props.onAbandonRun, busy: props.busy })] })), about.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.decisions, children: [_jsx("h2", { className: "sc-section-title", children: words.task.decisions }), about.map((decision) => (_jsx(DecisionCard, { decision: decision, task: decision.taskId === null ? undefined : tasksById.get(decision.taskId), docHref: props.docHref, onAnswer: props.onAnswer, onUpdate: props.onUpdateDecision, busy: props.busy }, decision.id)))] })), props.history !== undefined && props.history.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.history, children: [_jsx("h2", { className: "sc-section-title", children: words.task.history }), _jsx(EventFeed, { events: props.history })] })), subtasks.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.subtasks, children: [_jsx("h2", { className: "sc-section-title", children: words.task.partOfIt }), _jsx("ul", { className: "sc-subtasks", children: subtasks.map((subtask) => (_jsxs("li", { children: [_jsxs("a", { href: props.taskHref(subtask), children: [_jsxs("span", { className: "sc-card-number", children: ["#", subtask.number] }), " ", subtask.title] }), " ", _jsx(StateBadge, { state: subtask.state })] }, subtask.id))) })] }))] }), _jsxs("aside", { className: "sc-task-aside", "aria-label": words.task.facts, children: [_jsxs("dl", { className: "sc-facts", children: [_jsxs("div", { children: [_jsx("dt", { children: words.task.state }), _jsx("dd", { children: _jsx("select", { className: "sc-input", "aria-label": words.task.state, value: task.state, disabled: props.busy === true, onChange: (event) => props.onMove(task, event.target.value), children: TASK_STATES.map((state) => (_jsx("option", { value: state, children: words.vocabulary.state[state] }, state))) }) })] }), _jsxs("div", { children: [_jsx("dt", { children: words.task.form.priority }), _jsx("dd", { children: words.vocabulary.priority[task.priority] })] }), _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 })) })] }), _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 }) })] })] }), props.formHref !== undefined && (_jsxs("div", { className: "sc-task-actions", children: [_jsx("a", { className: "sc-button sc-button-secondary", href: props.formHref("edit"), children: words.common.edit }), _jsx("a", { className: "sc-button sc-button-secondary", href: props.formHref("ask"), children: words.task.raiseDecision })] }))] })] })] }));
|
|
30
|
+
return (_jsxs("div", { className: "sc-task", children: [_jsxs("header", { className: "sc-task-header", children: [parent !== undefined && (_jsxs("p", { className: "sc-task-parent", children: [words.task.partOf, " ", _jsxs("a", { href: props.taskHref(parent), children: ["#", parent.number, " ", parent.title] })] })), _jsxs("h1", { className: "sc-task-title", children: [_jsxs("span", { className: "sc-card-number", children: ["#", task.number] }), " ", task.title] }), _jsxs("div", { className: "sc-task-badges", children: [_jsx(StateBadge, { state: task.state }), 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 }))] })] }), _jsxs("div", { className: "sc-task-body", children: [_jsxs("div", { className: "sc-task-main", children: [props.error !== undefined && (_jsx("p", { className: "sc-form-error", role: "alert", children: props.error })), task.body.length > 0 ? (_jsx(Markdown, { source: task.body, docHref: props.docHref })) : (_jsx("p", { className: "sc-muted", children: words.task.nothingMore })), task.links.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.links, children: [_jsx("h2", { className: "sc-section-title", children: words.task.links }), _jsx("ul", { className: "sc-link-list", children: task.links.map((link) => (_jsx("li", { children: _jsx("a", { href: link.url, target: "_blank", rel: "noopener noreferrer nofollow", children: link.label ?? link.url }) }, link.url))) })] })), props.form === "ask" && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.raiseDecision, children: [_jsx("h2", { className: "sc-section-title", children: words.task.raiseDecision }), _jsx(DecisionForm, { tasks: props.tasks, taskId: task.id, busy: props.busy, onSubmit: props.onRaiseDecision, onCancel: props.onCancel })] })), runs.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.runs, children: [_jsx("h2", { className: "sc-section-title", children: words.task.agentsAtWork }), _jsx(RunList, { runs: runs, decisionHref: props.decisionHref, fileHref: props.fileHref, docHref: props.docHref, onAbandon: props.onAbandonRun, busy: props.busy })] })), about.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.decisions, children: [_jsx("h2", { className: "sc-section-title", children: words.task.decisions }), about.map((decision) => (_jsx(DecisionCard, { decision: decision, task: decision.taskId === null ? undefined : tasksById.get(decision.taskId), docHref: props.docHref, onAnswer: props.onAnswer, onUpdate: props.onUpdateDecision, busy: props.busy }, decision.id)))] })), props.history !== undefined && props.history.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.history, children: [_jsx("h2", { className: "sc-section-title", children: words.task.history }), _jsx(EventFeed, { events: props.history })] })), subtasks.length > 0 && (_jsxs("section", { className: "sc-task-section", "aria-label": words.task.subtasks, children: [_jsx("h2", { className: "sc-section-title", children: words.task.partOfIt }), _jsx("ul", { className: "sc-subtasks", children: subtasks.map((subtask) => (_jsxs("li", { children: [_jsxs("a", { href: props.taskHref(subtask), children: [_jsxs("span", { className: "sc-card-number", children: ["#", subtask.number] }), " ", subtask.title] }), " ", _jsx(StateBadge, { state: subtask.state })] }, subtask.id))) })] }))] }), _jsxs("aside", { className: "sc-task-aside", "aria-label": words.task.facts, children: [_jsxs("dl", { className: "sc-facts", children: [_jsxs("div", { children: [_jsx("dt", { children: words.task.state }), _jsx("dd", { children: _jsx("select", { className: "sc-input", "aria-label": words.task.state, value: task.state, disabled: props.busy === true, onChange: (event) => props.onMove(task, event.target.value), children: TASK_STATES.map((state) => (_jsx("option", { value: state, children: words.vocabulary.state[state] }, 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 }) })] })), task.goalId !== null && (_jsxs("div", { children: [_jsx("dt", { children: words.task.goal }), _jsx("dd", { children: props.goalHref === undefined ? ((goal?.title ?? task.goalId)) : (_jsx("a", { href: props.goalHref(task.goalId), children: goal?.title ?? task.goalId })) })] })), _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 }) })] })] }), props.formHref !== undefined && (_jsxs("div", { className: "sc-task-actions", children: [_jsx("a", { className: "sc-button sc-button-secondary", href: props.formHref("edit"), children: words.common.edit }), _jsx("a", { className: "sc-button sc-button-secondary", href: props.formHref("ask"), children: words.task.raiseDecision })] }))] })] })] }));
|
|
25
31
|
}
|
|
26
32
|
//# sourceMappingURL=task-view.js.map
|