@activecollab/components 2.0.386 → 2.0.388
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/dist/cjs/components/Icons/collection/CommandLine.js +60 -0
- package/dist/cjs/components/Icons/collection/CommandLine.js.map +1 -0
- package/dist/cjs/components/Icons/collection/Hash.js +60 -0
- package/dist/cjs/components/Icons/collection/Hash.js.map +1 -0
- package/dist/cjs/components/Icons/collection/index.js +14 -0
- package/dist/cjs/components/Icons/collection/index.js.map +1 -1
- package/dist/cjs/presentation/shared/LinkingCommandsButton.js +163 -50
- package/dist/cjs/presentation/shared/LinkingCommandsButton.js.map +1 -1
- package/dist/cjs/presentation/shared/SourceCodeSection.js +25 -4
- package/dist/cjs/presentation/shared/SourceCodeSection.js.map +1 -1
- package/dist/esm/components/Icons/collection/CommandLine.d.ts +32 -0
- package/dist/esm/components/Icons/collection/CommandLine.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/CommandLine.js +53 -0
- package/dist/esm/components/Icons/collection/CommandLine.js.map +1 -0
- package/dist/esm/components/Icons/collection/Hash.d.ts +32 -0
- package/dist/esm/components/Icons/collection/Hash.d.ts.map +1 -0
- package/dist/esm/components/Icons/collection/Hash.js +53 -0
- package/dist/esm/components/Icons/collection/Hash.js.map +1 -0
- package/dist/esm/components/Icons/collection/index.d.ts +2 -0
- package/dist/esm/components/Icons/collection/index.d.ts.map +1 -1
- package/dist/esm/components/Icons/collection/index.js +2 -0
- package/dist/esm/components/Icons/collection/index.js.map +1 -1
- package/dist/esm/presentation/shared/LinkingCommandsButton.d.ts.map +1 -1
- package/dist/esm/presentation/shared/LinkingCommandsButton.js +150 -49
- package/dist/esm/presentation/shared/LinkingCommandsButton.js.map +1 -1
- package/dist/esm/presentation/shared/SourceCodeSection.d.ts +2 -0
- package/dist/esm/presentation/shared/SourceCodeSection.d.ts.map +1 -1
- package/dist/esm/presentation/shared/SourceCodeSection.js +25 -4
- package/dist/esm/presentation/shared/SourceCodeSection.js.map +1 -1
- package/dist/index.js +358 -258
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,20 +1,35 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
2
|
import styled from "styled-components";
|
|
3
|
+
import { ChooseV2 } from "../../components/ChooseV2";
|
|
3
4
|
import { Dialog } from "../../components/Dialog";
|
|
4
5
|
import { IconButton } from "../../components/IconButton";
|
|
5
|
-
import { CancelCrossIcon } from "../../components/Icons";
|
|
6
|
+
import { CancelCrossIcon, CommandLineIcon, CopyIcon, HashIcon } from "../../components/Icons";
|
|
7
|
+
import { SkeletonLoader } from "../../components/Loaders";
|
|
8
|
+
import { Tooltip } from "../../components/Tooltip";
|
|
6
9
|
import { Trigger } from "../../components/Trigger";
|
|
7
|
-
import {
|
|
10
|
+
import { Body2, Header3 } from "../../components/Typography";
|
|
8
11
|
|
|
9
12
|
/**
|
|
10
13
|
* "Linking and Commands" button — same small outlined shape and placement as
|
|
11
14
|
* the "Suggest Subtasks" button, but without an icon or the AI gradient (this
|
|
12
|
-
* is not an AI feature). Clicking it opens a reference dialog
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
+
* is not an AI feature). Clicking it opens a reference dialog: a short pitch
|
|
16
|
+
* with a one-liner each for Linking and Commands, a centered ChooseV2 to switch
|
|
17
|
+
* between the two conventions (Linking default), and the full instructions for
|
|
18
|
+
* whichever is selected below it.
|
|
15
19
|
*/
|
|
16
20
|
const SANS = '-apple-system, BlinkMacSystemFont, "Roboto", "Helvetica Neue", Arial, sans-serif';
|
|
17
21
|
const MONO = "ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
|
|
22
|
+
|
|
23
|
+
/** The example task these instructions are written against. */
|
|
24
|
+
const TASK_ID = 4231;
|
|
25
|
+
/**
|
|
26
|
+
* Suggested branch name for this task — in production it is resolved per repo
|
|
27
|
+
* via GET .../tasks/{task_id}/source/suggest-branch-name. Mocked here.
|
|
28
|
+
*/
|
|
29
|
+
const SUGGESTED_BRANCH = "ilija/4231-add-cacak-region-support";
|
|
30
|
+
|
|
31
|
+
/** POSIX-safe single-quote escaping for a value dropped into a shell command. */
|
|
32
|
+
const shellQuote = value => "'" + value.replace(/'/g, "'\\''") + "'";
|
|
18
33
|
const StyledButton = styled(Trigger).withConfig({
|
|
19
34
|
displayName: "LinkingCommandsButton__StyledButton",
|
|
20
35
|
componentId: "sc-11q4kcm-0"
|
|
@@ -26,21 +41,28 @@ const StyledTitleRow = styled.div.withConfig({
|
|
|
26
41
|
const StyledBody = styled.div.withConfig({
|
|
27
42
|
displayName: "LinkingCommandsButton__StyledBody",
|
|
28
43
|
componentId: "sc-11q4kcm-2"
|
|
29
|
-
})(["font-family:", ";.lc-
|
|
44
|
+
})(["font-family:", ";.lc-intro{margin-bottom:18px;}.lc-lead{display:flex;gap:10px;align-items:flex-start;margin-top:12px;}.lc-lead svg{flex-shrink:0;width:18px;height:18px;margin-top:2px;}.lc-term{font-weight:600;color:var(--color-theme-900);}.lc-choosectl{margin-bottom:18px;}.lc-choosectl > div{justify-content:center;}.lc-list{margin:8px 0 0;padding-left:18px;}.lc-list li{margin-bottom:6px;}.lc-invite{margin-top:14px;}.code{font-family:", ";background:var(--color-theme-200);border-radius:4px;padding:1px 5px;font-size:12px;color:var(--color-theme-900);}.lc-copy{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;padding:8px 10px;background:var(--color-theme-200);border:1px solid var(--border-primary);border-radius:6px;}.lc-copy code{font-family:", ";font-size:12px;color:var(--color-theme-900);overflow-x:auto;white-space:nowrap;}.lc-copy-btn{flex-shrink:0;display:inline-flex;align-items:center;border:none;background:transparent;cursor:pointer;padding:2px;color:var(--color-theme-600);transition:color 0.15s ease;}.lc-copy-btn:hover{color:var(--color-theme-900);}.lc-copy-btn svg{width:16px;height:16px;}.lc-copy-skel{height:37px;width:100%;margin-top:10px;border-radius:6px;}.lc-example{font-family:", ";font-size:12px;line-height:1.5;color:var(--color-theme-900);background:var(--color-theme-200);border:1px solid var(--border-primary);border-radius:6px;padding:10px 12px;margin-top:12px;white-space:pre-wrap;overflow-x:auto;}table{width:100%;border-collapse:collapse;margin-top:12px;}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border-primary);vertical-align:top;}th{font-size:12px;font-weight:500;color:var(--color-theme-600);}"], SANS, MONO, MONO, MONO);
|
|
45
|
+
const TAB_OPTIONS = [{
|
|
46
|
+
id: "linking",
|
|
47
|
+
name: "Linking"
|
|
48
|
+
}, {
|
|
49
|
+
id: "commands",
|
|
50
|
+
name: "Commands"
|
|
51
|
+
}];
|
|
30
52
|
const COMMANDS = [{
|
|
31
53
|
cmd: "Closes #34",
|
|
32
54
|
does: "Closes the task when the pull request merges"
|
|
33
55
|
}, {
|
|
34
56
|
cmd: "Fixes #34",
|
|
35
|
-
does: "Same as Closes
|
|
57
|
+
does: "Same as Closes: closes on merge"
|
|
36
58
|
}, {
|
|
37
59
|
cmd: "Refs #34",
|
|
38
60
|
does: "Links to the task without closing it"
|
|
39
61
|
}, {
|
|
40
|
-
cmd: "/spend
|
|
62
|
+
cmd: "/spend 1:30",
|
|
41
63
|
does: "Logs time against the task"
|
|
42
64
|
}, {
|
|
43
|
-
cmd: "/estimate
|
|
65
|
+
cmd: "/estimate 4:00",
|
|
44
66
|
does: "Sets the task's time estimate"
|
|
45
67
|
}, {
|
|
46
68
|
cmd: "/done",
|
|
@@ -61,13 +83,107 @@ const COMMANDS = [{
|
|
|
61
83
|
cmd: "/relate #35",
|
|
62
84
|
does: "Relates this task to another task"
|
|
63
85
|
}];
|
|
64
|
-
|
|
86
|
+
|
|
87
|
+
/** Illustrative commit message: closes the task, logs time, leaves a note. */
|
|
88
|
+
const EXAMPLE_COMMIT = "Fix ranks reset when a contract is archived\n\nCloses #" + TASK_ID + "\n/spend 1:30\n/comment Verified on staging, ranks hold after archive";
|
|
89
|
+
const LinkingTab = _ref => {
|
|
90
|
+
let loading = _ref.loading,
|
|
91
|
+
branch = _ref.branch;
|
|
65
92
|
const _useState = useState(false),
|
|
66
|
-
|
|
67
|
-
|
|
93
|
+
copied = _useState[0],
|
|
94
|
+
setCopied = _useState[1];
|
|
95
|
+
const command = branch ? "git checkout -b " + shellQuote(branch) : "";
|
|
96
|
+
const copy = () => {
|
|
97
|
+
var _navigator$clipboard;
|
|
98
|
+
if (!command) return;
|
|
99
|
+
// eslint-disable-next-line compat/compat
|
|
100
|
+
void ((_navigator$clipboard = navigator.clipboard) == null ? void 0 : _navigator$clipboard.writeText(command));
|
|
101
|
+
setCopied(true);
|
|
102
|
+
window.setTimeout(() => setCopied(false), 1500);
|
|
103
|
+
};
|
|
104
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
105
|
+
className: "lc-tabbody"
|
|
106
|
+
}, /*#__PURE__*/React.createElement(Body2, {
|
|
107
|
+
color: "secondary"
|
|
108
|
+
}, "Mention the task in your git activity and it links to this task on its own:"), /*#__PURE__*/React.createElement("ul", {
|
|
109
|
+
className: "lc-list"
|
|
110
|
+
}, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Body2, null, /*#__PURE__*/React.createElement("span", {
|
|
111
|
+
className: "lc-term"
|
|
112
|
+
}, "In a branch name:"), " the raw task ID", " ", /*#__PURE__*/React.createElement("span", {
|
|
113
|
+
className: "code"
|
|
114
|
+
}, TASK_ID))), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Body2, null, /*#__PURE__*/React.createElement("span", {
|
|
115
|
+
className: "lc-term"
|
|
116
|
+
}, "In a title, commit message, or description:"), " ", /*#__PURE__*/React.createElement("span", {
|
|
117
|
+
className: "code"
|
|
118
|
+
}, "#", TASK_ID), " or", " ", /*#__PURE__*/React.createElement("span", {
|
|
119
|
+
className: "code"
|
|
120
|
+
}, "AC-", TASK_ID))), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Body2, null, /*#__PURE__*/React.createElement("span", {
|
|
121
|
+
className: "lc-term"
|
|
122
|
+
}, "Anywhere:"), " the task URL", " ", /*#__PURE__*/React.createElement("span", {
|
|
123
|
+
className: "code"
|
|
124
|
+
}, "https://app.activecollab.com/1/projects/2110/tasks/", TASK_ID)))), /*#__PURE__*/React.createElement("div", {
|
|
125
|
+
className: "lc-invite"
|
|
126
|
+
}, /*#__PURE__*/React.createElement(Body2, {
|
|
127
|
+
color: "secondary"
|
|
128
|
+
}, "Give the branch a name with the task number in it and it links the moment you push. Create one from the suggested name:"), loading ? /*#__PURE__*/React.createElement(SkeletonLoader, {
|
|
129
|
+
className: "lc-copy-skel"
|
|
130
|
+
}) : /*#__PURE__*/React.createElement("div", {
|
|
131
|
+
className: "lc-copy"
|
|
132
|
+
}, /*#__PURE__*/React.createElement("code", null, command), /*#__PURE__*/React.createElement(Tooltip, {
|
|
133
|
+
title: copied ? "Copied!" : "Copy"
|
|
134
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
135
|
+
type: "button",
|
|
136
|
+
className: "lc-copy-btn",
|
|
137
|
+
onClick: copy,
|
|
138
|
+
"aria-label": "Copy command"
|
|
139
|
+
}, /*#__PURE__*/React.createElement(CopyIcon, null))))));
|
|
140
|
+
};
|
|
141
|
+
const CommandsTab = () => /*#__PURE__*/React.createElement("div", {
|
|
142
|
+
className: "lc-tabbody"
|
|
143
|
+
}, /*#__PURE__*/React.createElement(Body2, {
|
|
144
|
+
color: "secondary"
|
|
145
|
+
}, "The table below lists magic words and slash commands that you can use in a commit message or a pull request description to act on the linked task. Example:"), /*#__PURE__*/React.createElement("pre", {
|
|
146
|
+
className: "lc-example"
|
|
147
|
+
}, EXAMPLE_COMMIT), /*#__PURE__*/React.createElement("table", null, /*#__PURE__*/React.createElement("thead", null, /*#__PURE__*/React.createElement("tr", null, /*#__PURE__*/React.createElement("th", null, "Command"), /*#__PURE__*/React.createElement("th", null, "What it does"))), /*#__PURE__*/React.createElement("tbody", null, COMMANDS.map(c => /*#__PURE__*/React.createElement("tr", {
|
|
148
|
+
key: c.cmd
|
|
149
|
+
}, /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement("span", {
|
|
150
|
+
className: "code"
|
|
151
|
+
}, c.cmd)), /*#__PURE__*/React.createElement("td", null, /*#__PURE__*/React.createElement(Body2, {
|
|
152
|
+
color: "secondary"
|
|
153
|
+
}, c.does)))))));
|
|
154
|
+
export const LinkingCommandsButton = () => {
|
|
155
|
+
const _useState2 = useState(false),
|
|
156
|
+
open = _useState2[0],
|
|
157
|
+
setOpen = _useState2[1];
|
|
158
|
+
const _useState3 = useState("linking"),
|
|
159
|
+
tab = _useState3[0],
|
|
160
|
+
setTab = _useState3[1];
|
|
161
|
+
const _useState4 = useState(true),
|
|
162
|
+
branchLoading = _useState4[0],
|
|
163
|
+
setBranchLoading = _useState4[1];
|
|
164
|
+
const _useState5 = useState(null),
|
|
165
|
+
suggestedBranch = _useState5[0],
|
|
166
|
+
setSuggestedBranch = _useState5[1];
|
|
167
|
+
|
|
168
|
+
// Mock the suggest-branch-name API load: ~1s skeleton whenever the dialog
|
|
169
|
+
// opens, then reveal the copyable git command.
|
|
170
|
+
useEffect(() => {
|
|
171
|
+
if (!open) return undefined;
|
|
172
|
+
setBranchLoading(true);
|
|
173
|
+
setSuggestedBranch(null);
|
|
174
|
+
const timer = window.setTimeout(() => {
|
|
175
|
+
setSuggestedBranch(SUGGESTED_BRANCH);
|
|
176
|
+
setBranchLoading(false);
|
|
177
|
+
}, 1000);
|
|
178
|
+
return () => window.clearTimeout(timer);
|
|
179
|
+
}, [open]);
|
|
180
|
+
const openDialog = () => {
|
|
181
|
+
setTab("linking");
|
|
182
|
+
setOpen(true);
|
|
183
|
+
};
|
|
68
184
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(StyledButton, {
|
|
69
185
|
type: "button",
|
|
70
|
-
onClick:
|
|
186
|
+
onClick: openDialog
|
|
71
187
|
}, /*#__PURE__*/React.createElement("span", {
|
|
72
188
|
className: "lc-btn"
|
|
73
189
|
}, "Linking and Commands")), /*#__PURE__*/React.createElement(Dialog, {
|
|
@@ -81,43 +197,28 @@ export const LinkingCommandsButton = () => {
|
|
|
81
197
|
variant: "text gray",
|
|
82
198
|
onClick: () => setOpen(false)
|
|
83
199
|
}, /*#__PURE__*/React.createElement(CancelCrossIcon, null)))), /*#__PURE__*/React.createElement(Dialog.ContentDivider, null), /*#__PURE__*/React.createElement(Dialog.Content, null, /*#__PURE__*/React.createElement(StyledBody, null, /*#__PURE__*/React.createElement("div", {
|
|
84
|
-
className: "lc-
|
|
85
|
-
}, /*#__PURE__*/React.createElement(Body2, {
|
|
86
|
-
|
|
87
|
-
},
|
|
88
|
-
className: "lc-list"
|
|
89
|
-
}, /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Body2, null, "Raw ID ", /*#__PURE__*/React.createElement("span", {
|
|
90
|
-
className: "code"
|
|
91
|
-
}, "34"), ", hashed", " ", /*#__PURE__*/React.createElement("span", {
|
|
92
|
-
className: "code"
|
|
93
|
-
}, "#34"), ", or prefixed", " ", /*#__PURE__*/React.createElement("span", {
|
|
94
|
-
className: "code"
|
|
95
|
-
}, "AC-34"))), /*#__PURE__*/React.createElement("li", null, /*#__PURE__*/React.createElement(Body2, null, "The task URL", " ", /*#__PURE__*/React.createElement("span", {
|
|
96
|
-
className: "code"
|
|
97
|
-
}, "https://app.activecollab.com/1/projects/2110/tasks/34")))), /*#__PURE__*/React.createElement("div", {
|
|
98
|
-
className: "lc-note"
|
|
99
|
-
}, /*#__PURE__*/React.createElement(Caption1, {
|
|
100
|
-
color: "tertiary"
|
|
101
|
-
}, "Recommended: put the ID in the branch name (e.g.", " ", /*#__PURE__*/React.createElement("span", {
|
|
102
|
-
className: "code"
|
|
103
|
-
}, "feature/retainers-34"), ") so it links the moment you push, and add a closing word in the pull request when you want it to complete the task on merge."))), /*#__PURE__*/React.createElement("div", {
|
|
104
|
-
className: "lc-section"
|
|
105
|
-
}, /*#__PURE__*/React.createElement(Body1, {
|
|
106
|
-
weight: "bold",
|
|
107
|
-
className: "lc-h"
|
|
108
|
-
}, "Commands"), /*#__PURE__*/React.createElement(Body2, {
|
|
200
|
+
className: "lc-intro"
|
|
201
|
+
}, /*#__PURE__*/React.createElement(Body2, null, "Keep a task in sync with your code without leaving your editor."), /*#__PURE__*/React.createElement("div", {
|
|
202
|
+
className: "lc-lead"
|
|
203
|
+
}, /*#__PURE__*/React.createElement(HashIcon, null), /*#__PURE__*/React.createElement(Body2, {
|
|
109
204
|
color: "secondary"
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
},
|
|
113
|
-
className: "
|
|
114
|
-
},
|
|
205
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
206
|
+
className: "lc-term"
|
|
207
|
+
}, "Linking:"), " Mention a task in a branch, pull request, or commit and they will be connected automatically.")), /*#__PURE__*/React.createElement("div", {
|
|
208
|
+
className: "lc-lead"
|
|
209
|
+
}, /*#__PURE__*/React.createElement(CommandLineIcon, null), /*#__PURE__*/React.createElement(Body2, {
|
|
115
210
|
color: "secondary"
|
|
116
|
-
},
|
|
117
|
-
className: "lc-
|
|
118
|
-
}, /*#__PURE__*/React.createElement(
|
|
119
|
-
|
|
120
|
-
|
|
211
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
212
|
+
className: "lc-term"
|
|
213
|
+
}, "Commands:"), " Add short instructions in a commit or pull request description to act on the task: log time, close it, or leave a comment."))), /*#__PURE__*/React.createElement(ChooseV2, {
|
|
214
|
+
className: "lc-choosectl",
|
|
215
|
+
options: TAB_OPTIONS,
|
|
216
|
+
selected: [tab],
|
|
217
|
+
onChange: ids => setTab(ids[0])
|
|
218
|
+
}), tab === "linking" ? /*#__PURE__*/React.createElement(LinkingTab, {
|
|
219
|
+
loading: branchLoading,
|
|
220
|
+
branch: suggestedBranch
|
|
221
|
+
}) : /*#__PURE__*/React.createElement(CommandsTab, null)))));
|
|
121
222
|
};
|
|
122
223
|
LinkingCommandsButton.displayName = "LinkingCommandsButton";
|
|
123
224
|
//# sourceMappingURL=LinkingCommandsButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkingCommandsButton.js","names":["React","useState","styled","Dialog","IconButton","CancelCrossIcon","Trigger","Body1","Body2","Caption1","Header3","SANS","MONO","StyledButton","withConfig","displayName","componentId","StyledTitleRow","div","StyledBody","COMMANDS","cmd","does","LinkingCommandsButton","_useState","open","setOpen","createElement","Fragment","type","onClick","className","onClose","enableBackgroundClick","Title","disableDefaultHeading","variant","ContentDivider","Content","color","weight","map","c","key"],"sources":["../../../../src/presentation/shared/LinkingCommandsButton.tsx"],"sourcesContent":["import React, { ReactElement, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport { CancelCrossIcon } from \"../../components/Icons\";\nimport { Trigger } from \"../../components/Trigger\";\nimport { Body1, Body2, Caption1, Header3 } from \"../../components/Typography\";\n\n/**\n * \"Linking and Commands\" button — same small outlined shape and placement as\n * the \"Suggest Subtasks\" button, but without an icon or the AI gradient (this\n * is not an AI feature). Clicking it opens a reference dialog explaining how\n * to auto-link git activity to a task and the commands available in commit\n * messages / descriptions.\n */\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\nconst MONO = \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\";\n\nconst StyledButton = styled(Trigger)`\n .lc-btn {\n display: inline-flex;\n align-items: center;\n color: var(--color-theme-700);\n border: 1px solid var(--color-theme-500);\n background-color: transparent;\n padding: 3px 8px;\n font-weight: 500;\n font-size: 12px;\n letter-spacing: 0.5px;\n line-height: 16px;\n border-radius: 6px;\n transition: border-color 0.2s ease, color 0.2s ease;\n }\n &:hover .lc-btn {\n border-color: var(--color-theme-700);\n color: var(--color-theme-900);\n }\n`;\n\nconst StyledTitleRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n`;\n\nconst StyledBody = styled.div`\n font-family: ${SANS};\n\n .lc-section {\n margin-bottom: 22px;\n }\n .lc-section:last-child {\n margin-bottom: 0;\n }\n .lc-h {\n margin-bottom: 6px;\n }\n .lc-list {\n margin: 8px 0 0;\n padding-left: 18px;\n }\n .lc-list li {\n margin-bottom: 6px;\n }\n .code {\n font-family: ${MONO};\n background: var(--color-theme-200);\n border-radius: 4px;\n padding: 1px 5px;\n font-size: 12px;\n color: var(--color-theme-900);\n }\n table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 10px;\n }\n th,\n td {\n text-align: left;\n padding: 8px 10px;\n border-bottom: 1px solid var(--border-primary);\n vertical-align: top;\n }\n th {\n font-size: 12px;\n font-weight: 500;\n color: var(--color-theme-600);\n }\n .lc-note {\n margin-top: 10px;\n }\n`;\n\ninterface Command {\n cmd: string;\n does: string;\n}\n\nconst COMMANDS: Command[] = [\n { cmd: \"Closes #34\", does: \"Closes the task when the pull request merges\" },\n { cmd: \"Fixes #34\", does: \"Same as Closes — closes on merge\" },\n { cmd: \"Refs #34\", does: \"Links to the task without closing it\" },\n { cmd: \"/spend 1h30m\", does: \"Logs time against the task\" },\n { cmd: \"/estimate 4h\", does: \"Sets the task's time estimate\" },\n { cmd: \"/done\", does: \"Marks the task complete\" },\n { cmd: \"/reopen\", does: \"Reopens the task\" },\n { cmd: \"/assign @ilija\", does: \"Assigns the task to a user\" },\n { cmd: \"/label In Progress\", does: \"Adds a label to the task\" },\n { cmd: \"/comment Deployed to staging\", does: \"Posts a comment on the task\" },\n { cmd: \"/relate #35\", does: \"Relates this task to another task\" },\n];\n\nexport const LinkingCommandsButton = (): ReactElement => {\n const [open, setOpen] = useState(false);\n\n return (\n <>\n <StyledButton type=\"button\" onClick={() => setOpen(true)}>\n <span className=\"lc-btn\">Linking and Commands</span>\n </StyledButton>\n\n <Dialog open={open} onClose={() => setOpen(false)} enableBackgroundClick>\n <Dialog.Title disableDefaultHeading>\n <StyledTitleRow>\n <Header3>Linking and Commands</Header3>\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n onClick={() => setOpen(false)}\n >\n <CancelCrossIcon />\n </IconButton>\n </StyledTitleRow>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledBody>\n <div className=\"lc-section\">\n <Body2 color=\"secondary\">\n Mention the task anywhere in a branch name, pull request title,\n commit message, or description and it links to this task on its\n own. Any of these forms work:\n </Body2>\n <ul className=\"lc-list\">\n <li>\n <Body2>\n Raw ID <span className=\"code\">34</span>, hashed{\" \"}\n <span className=\"code\">#34</span>, or prefixed{\" \"}\n <span className=\"code\">AC-34</span>\n </Body2>\n </li>\n <li>\n <Body2>\n The task URL{\" \"}\n <span className=\"code\">\n https://app.activecollab.com/1/projects/2110/tasks/34\n </span>\n </Body2>\n </li>\n </ul>\n <div className=\"lc-note\">\n <Caption1 color=\"tertiary\">\n Recommended: put the ID in the branch name (e.g.{\" \"}\n <span className=\"code\">feature/retainers-34</span>) so it\n links the moment you push, and add a closing word in the pull\n request when you want it to complete the task on merge.\n </Caption1>\n </div>\n </div>\n\n <div className=\"lc-section\">\n <Body1 weight=\"bold\" className=\"lc-h\">\n Commands\n </Body1>\n <Body2 color=\"secondary\">\n Use these in a commit message or a pull request / merge request\n description to act on the linked task.\n </Body2>\n <table>\n <thead>\n <tr>\n <th>Command</th>\n <th>What it does</th>\n </tr>\n </thead>\n <tbody>\n {COMMANDS.map((c) => (\n <tr key={c.cmd}>\n <td>\n <span className=\"code\">{c.cmd}</span>\n </td>\n <td>\n <Body2 color=\"secondary\">{c.does}</Body2>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n <div className=\"lc-note\">\n <Caption1 color=\"tertiary\">\n Starter set — to be refined.\n </Caption1>\n </div>\n </div>\n </StyledBody>\n </Dialog.Content>\n </Dialog>\n </>\n );\n};\n\nLinkingCommandsButton.displayName = \"LinkingCommandsButton\";\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"LinkingCommandsButton.js","names":["React","useEffect","useState","styled","ChooseV2","Dialog","IconButton","CancelCrossIcon","CommandLineIcon","CopyIcon","HashIcon","SkeletonLoader","Tooltip","Trigger","Body2","Header3","SANS","MONO","TASK_ID","SUGGESTED_BRANCH","shellQuote","value","replace","StyledButton","withConfig","displayName","componentId","StyledTitleRow","div","StyledBody","TAB_OPTIONS","id","name","COMMANDS","cmd","does","EXAMPLE_COMMIT","LinkingTab","_ref","loading","branch","_useState","copied","setCopied","command","copy","_navigator$clipboard","navigator","clipboard","writeText","window","setTimeout","createElement","className","color","title","type","onClick","CommandsTab","map","c","key","LinkingCommandsButton","_useState2","open","setOpen","_useState3","tab","setTab","_useState4","branchLoading","setBranchLoading","_useState5","suggestedBranch","setSuggestedBranch","undefined","timer","clearTimeout","openDialog","Fragment","onClose","enableBackgroundClick","Title","disableDefaultHeading","variant","ContentDivider","Content","options","selected","onChange","ids"],"sources":["../../../../src/presentation/shared/LinkingCommandsButton.tsx"],"sourcesContent":["import React, { ReactElement, useEffect, useState } from \"react\";\n\nimport styled from \"styled-components\";\n\nimport { ChooseV2, ChooseV2Option } from \"../../components/ChooseV2\";\nimport { Dialog } from \"../../components/Dialog\";\nimport { IconButton } from \"../../components/IconButton\";\nimport {\n CancelCrossIcon,\n CommandLineIcon,\n CopyIcon,\n HashIcon,\n} from \"../../components/Icons\";\nimport { SkeletonLoader } from \"../../components/Loaders\";\nimport { Tooltip } from \"../../components/Tooltip\";\nimport { Trigger } from \"../../components/Trigger\";\nimport { Body2, Header3 } from \"../../components/Typography\";\n\n/**\n * \"Linking and Commands\" button — same small outlined shape and placement as\n * the \"Suggest Subtasks\" button, but without an icon or the AI gradient (this\n * is not an AI feature). Clicking it opens a reference dialog: a short pitch\n * with a one-liner each for Linking and Commands, a centered ChooseV2 to switch\n * between the two conventions (Linking default), and the full instructions for\n * whichever is selected below it.\n */\nconst SANS =\n '-apple-system, BlinkMacSystemFont, \"Roboto\", \"Helvetica Neue\", Arial, sans-serif';\nconst MONO = \"ui-monospace, SFMono-Regular, Menlo, Consolas, monospace\";\n\n/** The example task these instructions are written against. */\nconst TASK_ID = 4231;\n/**\n * Suggested branch name for this task — in production it is resolved per repo\n * via GET .../tasks/{task_id}/source/suggest-branch-name. Mocked here.\n */\nconst SUGGESTED_BRANCH = \"ilija/4231-add-cacak-region-support\";\n\n/** POSIX-safe single-quote escaping for a value dropped into a shell command. */\nconst shellQuote = (value: string): string =>\n `'${value.replace(/'/g, \"'\\\\''\")}'`;\n\nconst StyledButton = styled(Trigger)`\n .lc-btn {\n display: inline-flex;\n align-items: center;\n color: var(--color-theme-700);\n border: 1px solid var(--color-theme-500);\n background-color: transparent;\n padding: 3px 8px;\n font-weight: 500;\n font-size: 12px;\n letter-spacing: 0.5px;\n line-height: 16px;\n border-radius: 6px;\n transition: border-color 0.2s ease, color 0.2s ease;\n }\n &:hover .lc-btn {\n border-color: var(--color-theme-700);\n color: var(--color-theme-900);\n }\n`;\n\nconst StyledTitleRow = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n`;\n\nconst StyledBody = styled.div`\n font-family: ${SANS};\n\n .lc-intro {\n margin-bottom: 18px;\n }\n .lc-lead {\n display: flex;\n gap: 10px;\n align-items: flex-start;\n margin-top: 12px;\n }\n .lc-lead svg {\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n margin-top: 2px;\n }\n .lc-term {\n font-weight: 600;\n color: var(--color-theme-900);\n }\n\n /* ChooseV2 root is passed .lc-choosectl; its inner flex row is centered. */\n .lc-choosectl {\n margin-bottom: 18px;\n }\n .lc-choosectl > div {\n justify-content: center;\n }\n\n .lc-list {\n margin: 8px 0 0;\n padding-left: 18px;\n }\n .lc-list li {\n margin-bottom: 6px;\n }\n .lc-invite {\n margin-top: 14px;\n }\n .code {\n font-family: ${MONO};\n background: var(--color-theme-200);\n border-radius: 4px;\n padding: 1px 5px;\n font-size: 12px;\n color: var(--color-theme-900);\n }\n .lc-copy {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 10px;\n margin-top: 10px;\n padding: 8px 10px;\n background: var(--color-theme-200);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n }\n .lc-copy code {\n font-family: ${MONO};\n font-size: 12px;\n color: var(--color-theme-900);\n overflow-x: auto;\n white-space: nowrap;\n }\n .lc-copy-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n border: none;\n background: transparent;\n cursor: pointer;\n padding: 2px;\n color: var(--color-theme-600);\n transition: color 0.15s ease;\n }\n .lc-copy-btn:hover {\n color: var(--color-theme-900);\n }\n .lc-copy-btn svg {\n width: 16px;\n height: 16px;\n }\n .lc-copy-skel {\n height: 37px;\n width: 100%;\n margin-top: 10px;\n border-radius: 6px;\n }\n .lc-example {\n font-family: ${MONO};\n font-size: 12px;\n line-height: 1.5;\n color: var(--color-theme-900);\n background: var(--color-theme-200);\n border: 1px solid var(--border-primary);\n border-radius: 6px;\n padding: 10px 12px;\n margin-top: 12px;\n white-space: pre-wrap;\n overflow-x: auto;\n }\n table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 12px;\n }\n th,\n td {\n text-align: left;\n padding: 8px 10px;\n border-bottom: 1px solid var(--border-primary);\n vertical-align: top;\n }\n th {\n font-size: 12px;\n font-weight: 500;\n color: var(--color-theme-600);\n }\n`;\n\ntype LcTab = \"linking\" | \"commands\";\n\nconst TAB_OPTIONS: ChooseV2Option[] = [\n { id: \"linking\", name: \"Linking\" },\n { id: \"commands\", name: \"Commands\" },\n];\n\ninterface Command {\n cmd: string;\n does: string;\n}\n\nconst COMMANDS: Command[] = [\n { cmd: \"Closes #34\", does: \"Closes the task when the pull request merges\" },\n { cmd: \"Fixes #34\", does: \"Same as Closes: closes on merge\" },\n { cmd: \"Refs #34\", does: \"Links to the task without closing it\" },\n { cmd: \"/spend 1:30\", does: \"Logs time against the task\" },\n { cmd: \"/estimate 4:00\", does: \"Sets the task's time estimate\" },\n { cmd: \"/done\", does: \"Marks the task complete\" },\n { cmd: \"/reopen\", does: \"Reopens the task\" },\n { cmd: \"/assign @ilija\", does: \"Assigns the task to a user\" },\n { cmd: \"/label In Progress\", does: \"Adds a label to the task\" },\n { cmd: \"/comment Deployed to staging\", does: \"Posts a comment on the task\" },\n { cmd: \"/relate #35\", does: \"Relates this task to another task\" },\n];\n\n/** Illustrative commit message: closes the task, logs time, leaves a note. */\nconst EXAMPLE_COMMIT = `Fix ranks reset when a contract is archived\n\nCloses #${TASK_ID}\n/spend 1:30\n/comment Verified on staging, ranks hold after archive`;\n\ninterface LinkingTabProps {\n loading: boolean;\n branch: string | null;\n}\n\nconst LinkingTab = ({ loading, branch }: LinkingTabProps): ReactElement => {\n const [copied, setCopied] = useState(false);\n const command = branch ? `git checkout -b ${shellQuote(branch)}` : \"\";\n\n const copy = (): void => {\n if (!command) return;\n // eslint-disable-next-line compat/compat\n void navigator.clipboard?.writeText(command);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <div className=\"lc-tabbody\">\n <Body2 color=\"secondary\">\n Mention the task in your git activity and it links to this task on its\n own:\n </Body2>\n <ul className=\"lc-list\">\n <li>\n <Body2>\n <span className=\"lc-term\">In a branch name:</span> the raw task ID{\" \"}\n <span className=\"code\">{TASK_ID}</span>\n </Body2>\n </li>\n <li>\n <Body2>\n <span className=\"lc-term\">\n In a title, commit message, or description:\n </span>{\" \"}\n <span className=\"code\">#{TASK_ID}</span> or{\" \"}\n <span className=\"code\">AC-{TASK_ID}</span>\n </Body2>\n </li>\n <li>\n <Body2>\n <span className=\"lc-term\">Anywhere:</span> the task URL{\" \"}\n <span className=\"code\">\n https://app.activecollab.com/1/projects/2110/tasks/{TASK_ID}\n </span>\n </Body2>\n </li>\n </ul>\n\n <div className=\"lc-invite\">\n <Body2 color=\"secondary\">\n Give the branch a name with the task number in it and it links the\n moment you push. Create one from the suggested name:\n </Body2>\n {loading ? (\n <SkeletonLoader className=\"lc-copy-skel\" />\n ) : (\n <div className=\"lc-copy\">\n <code>{command}</code>\n <Tooltip title={copied ? \"Copied!\" : \"Copy\"}>\n <button\n type=\"button\"\n className=\"lc-copy-btn\"\n onClick={copy}\n aria-label=\"Copy command\"\n >\n <CopyIcon />\n </button>\n </Tooltip>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nconst CommandsTab = (): ReactElement => (\n <div className=\"lc-tabbody\">\n <Body2 color=\"secondary\">\n The table below lists magic words and slash commands that you can use in a\n commit message or a pull request description to act on the linked task.\n Example:\n </Body2>\n <pre className=\"lc-example\">{EXAMPLE_COMMIT}</pre>\n <table>\n <thead>\n <tr>\n <th>Command</th>\n <th>What it does</th>\n </tr>\n </thead>\n <tbody>\n {COMMANDS.map((c) => (\n <tr key={c.cmd}>\n <td>\n <span className=\"code\">{c.cmd}</span>\n </td>\n <td>\n <Body2 color=\"secondary\">{c.does}</Body2>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n);\n\nexport const LinkingCommandsButton = (): ReactElement => {\n const [open, setOpen] = useState(false);\n const [tab, setTab] = useState<LcTab>(\"linking\");\n const [branchLoading, setBranchLoading] = useState(true);\n const [suggestedBranch, setSuggestedBranch] = useState<string | null>(null);\n\n // Mock the suggest-branch-name API load: ~1s skeleton whenever the dialog\n // opens, then reveal the copyable git command.\n useEffect(() => {\n if (!open) return undefined;\n setBranchLoading(true);\n setSuggestedBranch(null);\n const timer = window.setTimeout(() => {\n setSuggestedBranch(SUGGESTED_BRANCH);\n setBranchLoading(false);\n }, 1000);\n return () => window.clearTimeout(timer);\n }, [open]);\n\n const openDialog = (): void => {\n setTab(\"linking\");\n setOpen(true);\n };\n\n return (\n <>\n <StyledButton type=\"button\" onClick={openDialog}>\n <span className=\"lc-btn\">Linking and Commands</span>\n </StyledButton>\n\n <Dialog open={open} onClose={() => setOpen(false)} enableBackgroundClick>\n <Dialog.Title disableDefaultHeading>\n <StyledTitleRow>\n <Header3>Linking and Commands</Header3>\n <IconButton\n type=\"button\"\n variant=\"text gray\"\n onClick={() => setOpen(false)}\n >\n <CancelCrossIcon />\n </IconButton>\n </StyledTitleRow>\n </Dialog.Title>\n <Dialog.ContentDivider />\n <Dialog.Content>\n <StyledBody>\n <div className=\"lc-intro\">\n <Body2>\n Keep a task in sync with your code without leaving your editor.\n </Body2>\n <div className=\"lc-lead\">\n <HashIcon />\n <Body2 color=\"secondary\">\n <span className=\"lc-term\">Linking:</span> Mention a task in a\n branch, pull request, or commit and they will be connected\n automatically.\n </Body2>\n </div>\n <div className=\"lc-lead\">\n <CommandLineIcon />\n <Body2 color=\"secondary\">\n <span className=\"lc-term\">Commands:</span> Add short\n instructions in a commit or pull request description to act on\n the task: log time, close it, or leave a comment.\n </Body2>\n </div>\n </div>\n\n <ChooseV2\n className=\"lc-choosectl\"\n options={TAB_OPTIONS}\n selected={[tab]}\n onChange={(ids) => setTab(ids[0] as LcTab)}\n />\n\n {tab === \"linking\" ? (\n <LinkingTab loading={branchLoading} branch={suggestedBranch} />\n ) : (\n <CommandsTab />\n )}\n </StyledBody>\n </Dialog.Content>\n </Dialog>\n </>\n );\n};\n\nLinkingCommandsButton.displayName = \"LinkingCommandsButton\";\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -38,6 +38,8 @@ interface CodeEntry {
|
|
|
38
38
|
/** PR head → base branches, shown under the name in the history dialog. */
|
|
39
39
|
sourceBranch?: string;
|
|
40
40
|
targetBranch?: string;
|
|
41
|
+
/** True when this PR carries a closing keyword that will complete the task on merge. */
|
|
42
|
+
closing?: boolean;
|
|
41
43
|
/** Head SHA of the source branch (full); first 8 chars are shown. */
|
|
42
44
|
headSha: string;
|
|
43
45
|
contributors: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SourceCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/SourceCodeSection.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,WAAW,EAAE,YAAY,EAAuB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SourceCodeSection.d.ts","sourceRoot":"","sources":["../../../../src/presentation/shared/SourceCodeSection.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import { ArrowRightIcon, CancelCrossIcon, CheckboxBlankTogglerIcon, CheckIcon, C
|
|
|
17
17
|
import { StepSequence } from "../../components/StepSequence";
|
|
18
18
|
import { Tooltip } from "../../components/Tooltip";
|
|
19
19
|
import { Body1, Caption1, Header3 } from "../../components/Typography";
|
|
20
|
+
import { colors } from "../../utils";
|
|
20
21
|
|
|
21
22
|
/**
|
|
22
23
|
* Source Code section of a task — the shared subsystem behind the
|
|
@@ -168,6 +169,7 @@ const CODE_ENTRIES = [{
|
|
|
168
169
|
status: "open",
|
|
169
170
|
sourceBranch: "fix/rank-archive-482",
|
|
170
171
|
targetBranch: "main",
|
|
172
|
+
closing: true,
|
|
171
173
|
contributors: [{
|
|
172
174
|
initials: "DA",
|
|
173
175
|
bg: AVATAR_COLORS.green
|
|
@@ -340,6 +342,7 @@ const CODE_ENTRIES = [{
|
|
|
340
342
|
status: "merged",
|
|
341
343
|
sourceBranch: "feature/contracts-ui-34",
|
|
342
344
|
targetBranch: "main",
|
|
345
|
+
closing: true,
|
|
343
346
|
contributors: [{
|
|
344
347
|
initials: "MK",
|
|
345
348
|
bg: AVATAR_COLORS.blue
|
|
@@ -935,7 +938,7 @@ const HistoryDialog = _ref4 => {
|
|
|
935
938
|
const StyledSourceCode = styled.div.withConfig({
|
|
936
939
|
displayName: "SourceCodeSection__StyledSourceCode",
|
|
937
940
|
componentId: "sc-rvqbh5-2"
|
|
938
|
-
})(["font-family:", ";margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--border-primary);.sc-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;}.sc-completed-row{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border-primary);}.sc-add{margin-top:8px;padding-top:12px;border-top:1px solid var(--border-primary);}.sc-add .c--add-to-list-btn svg{box-sizing:content-box;}.sc-item{padding:12px 0;}.sc-item + .sc-item{border-top:1px solid var(--border-primary);}.sc-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}.sc-main{flex:1 1 0%;min-width:0;}.sc-name{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;}.sc-lead{flex-shrink:0;display:inline-flex;color:var(--color-theme-600);}.sc-title{flex:0 1 auto;min-width:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.sc-title.strike{text-decoration:line-through;}.sc-title.strike-link{text-decoration:line-through;}.sc-title.strike-link:hover{text-decoration:none;}.sc-sigs{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--color-theme-600);}.sc-sig{display:inline-flex;align-items:center;gap:4px;}.sc-sha{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}.sc-muted{color:var(--color-theme-600);}.sc-refs{display:inline-flex;align-items:center;gap:6px;}.sc-refs .ref-link{color:var(--color-primary);font-weight:500;}"], SANS);
|
|
941
|
+
})(["font-family:", ";margin:0 0 16px;padding-bottom:16px;border-bottom:1px solid var(--border-primary);.sc-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:4px;}.sc-completed-row{display:flex;align-items:center;margin-top:8px;padding-top:8px;border-top:1px solid var(--border-primary);}.sc-add{margin-top:8px;padding-top:12px;border-top:1px solid var(--border-primary);}.sc-add .c--add-to-list-btn svg{box-sizing:content-box;}.sc-item{padding:12px 0;}.sc-item + .sc-item{border-top:1px solid var(--border-primary);}.sc-row{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;}.sc-main{flex:1 1 0%;min-width:0;}.sc-name{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;}.sc-lead{flex-shrink:0;display:inline-flex;color:var(--color-theme-600);}.sc-title{flex:0 1 auto;min-width:0;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.sc-title.strike{text-decoration:line-through;}.sc-title.strike-link{text-decoration:line-through;}.sc-title.strike-link:hover{text-decoration:none;}.sc-sigs{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:12px;color:var(--color-theme-600);}.sc-sig{display:inline-flex;align-items:center;gap:4px;}.sc-closing{display:inline-flex;align-items:center;flex-shrink:0;cursor:default;}.sc-sha{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;}.sc-muted{color:var(--color-theme-600);}.sc-refs{display:inline-flex;align-items:center;gap:6px;}.sc-refs .ref-link{color:var(--color-primary);font-weight:500;}"], SANS);
|
|
939
942
|
|
|
940
943
|
/* Element name — a link that opens the object in a new tab. Keeps the row's
|
|
941
944
|
typography (inherits color + weight), turns primary on hover, link cursor. */
|
|
@@ -962,6 +965,12 @@ const CHIP_GONE_STYLE = _extends({}, CHIP_BASE_STYLE, {
|
|
|
962
965
|
backgroundColor: "var(--color-theme-200)",
|
|
963
966
|
border: "1px solid var(--border-primary)"
|
|
964
967
|
});
|
|
968
|
+
|
|
969
|
+
/* Info tone — the default (blue) InfoBox recipe: blueSky tint + solid border. */
|
|
970
|
+
const CHIP_INFO_STYLE = _extends({}, CHIP_BASE_STYLE, {
|
|
971
|
+
backgroundColor: colors.blueSky.color + "1A",
|
|
972
|
+
border: "1px solid " + colors.blueSky.color
|
|
973
|
+
});
|
|
965
974
|
const StatusChip = _ref5 => {
|
|
966
975
|
let label = _ref5.label,
|
|
967
976
|
tone = _ref5.tone,
|
|
@@ -969,8 +978,8 @@ const StatusChip = _ref5 => {
|
|
|
969
978
|
return /*#__PURE__*/React.createElement(Chip, {
|
|
970
979
|
label: label,
|
|
971
980
|
startAdornment: glyph,
|
|
972
|
-
color: tone === "done" ? "var(--color-primary)" : undefined,
|
|
973
|
-
style: tone === "done" ? CHIP_DONE_STYLE : CHIP_GONE_STYLE,
|
|
981
|
+
color: tone === "done" ? "var(--color-primary)" : tone === "info" ? colors.blueSky.lighter : undefined,
|
|
982
|
+
style: tone === "done" ? CHIP_DONE_STYLE : tone === "info" ? CHIP_INFO_STYLE : CHIP_GONE_STYLE,
|
|
974
983
|
typographyProps: {
|
|
975
984
|
variant: "Caption 1",
|
|
976
985
|
weight: "bold",
|
|
@@ -1144,7 +1153,19 @@ const CodeRow = _ref0 => {
|
|
|
1144
1153
|
rel: "noopener noreferrer"
|
|
1145
1154
|
}, entry.title)), /*#__PURE__*/React.createElement(CodeStatusChip, {
|
|
1146
1155
|
entry: entry
|
|
1147
|
-
})
|
|
1156
|
+
}), entry.kind === "pr" && entry.status === "open" && entry.closing && /*#__PURE__*/React.createElement(Tooltip, {
|
|
1157
|
+
title: "Marks the task as completed when this pull request is merged."
|
|
1158
|
+
}, /*#__PURE__*/React.createElement("span", {
|
|
1159
|
+
className: "sc-closing"
|
|
1160
|
+
}, /*#__PURE__*/React.createElement(StatusChip, {
|
|
1161
|
+
label: "Closing",
|
|
1162
|
+
tone: "info",
|
|
1163
|
+
glyph: /*#__PURE__*/React.createElement(CheckIcon, {
|
|
1164
|
+
width: 12,
|
|
1165
|
+
height: 12,
|
|
1166
|
+
fill: colors.blueSky.lighter
|
|
1167
|
+
})
|
|
1168
|
+
})))), /*#__PURE__*/React.createElement("div", {
|
|
1148
1169
|
className: "sc-sigs"
|
|
1149
1170
|
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
1150
1171
|
title: "Repository: " + entry.repoFull
|