@parallelworks/tandem-web 0.138.2 → 0.139.1
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/components/AgentWork.js +35 -35
- package/components/AppRoot.js +8 -7
- package/components/AreaWork.js +1 -1
- package/components/BlockHandle.js +3 -3
- package/components/CommandPalette.js +27 -27
- package/components/DateChip.js +27 -27
- package/components/DocLinkPicker.js +17 -17
- package/components/Graph.js +6 -6
- package/components/HoverCards.js +30 -29
- package/components/IssueListBlock.js +83 -83
- package/components/LinkCard.js +20 -20
- package/components/MentionPicker.js +12 -12
- package/components/NewIssueDialog.js +116 -116
- package/components/NewProjectDialog.js +5 -4
- package/components/Planning.js +31 -43
- package/components/RouterLink.js +4 -4
- package/components/ShareDialog.js +12 -12
- package/components/SharedUI.js +19 -19
- package/components/SlashMenu.js +11 -11
- package/components/SubPages.js +10 -10
- package/components/UnlinkedMentions.js +10 -10
- package/components/WorkCounts.js +8 -8
- package/components/settings.js +31 -31
- package/hostedApp.js +41 -39
- package/hosting.d.ts +24 -11
- package/index.js +58 -27
- package/lib/base.js +1 -14
- package/lib/docs.js +6 -6
- package/lib/issueMenu.js +33 -33
- package/lib/knowledge.js +90 -101
- package/lib/knowledgeKinds.js +14 -0
- package/lib/pageTitle.js +22 -10
- package/lib/projectList.js +1 -1
- package/lib/projectStates.js +15 -0
- package/lib/router.js +20 -34
- package/package.json +2 -2
- package/pages/areas.js +223 -223
- package/pages/decisions.js +69 -69
- package/pages/issues.js +38 -38
- package/pages/projects.js +268 -267
- package/pages/triage.js +133 -133
- package/pages.js +21 -0
- package/routes/__root.js +6 -6
- package/routes/_workspace/agents/_slug2.js +21 -21
- package/routes/_workspace/agents/index2.js +16 -16
- package/routes/_workspace/areas/_area2.js +105 -105
- package/routes/_workspace/docs/_doc2.js +189 -189
- package/routes/_workspace/docs2.js +8 -8
- package/routes/_workspace/graph2.js +9 -9
- package/routes/_workspace/graph3.js +8 -8
- package/routes/_workspace/issues/_identifier2.js +249 -249
- package/routes/_workspace/issues/index.js +6 -6
- package/routes/_workspace/knowledge/_term2.js +119 -118
- package/routes/_workspace/knowledge/index.js +8 -8
- package/routes/_workspace/knowledge/index2.js +41 -40
- package/routes/_workspace/measures2.js +4 -4
- package/routes/_workspace/measures3.js +18 -18
- package/routes/_workspace/notifications2.js +112 -112
- package/routes/_workspace/people/_username.js +4 -4
- package/routes/_workspace/people/_username2.js +36 -36
- package/routes/_workspace/projects/_projectId3.js +369 -368
- package/routes/_workspace/projects/index.js +7 -7
- package/routes/_workspace/settings/account2.js +3 -3
- package/routes/_workspace/settings/audit-log2.js +4 -4
- package/routes/_workspace/settings/audit-log3.js +51 -51
- package/routes/_workspace/settings/labels2.js +14 -14
- package/routes/_workspace/settings/members2.js +9 -9
- package/routes/_workspace/settings/runners2.js +11 -11
- package/routes/_workspace/settings/teams2.js +15 -15
- package/routes/_workspace/settings/tokens2.js +5 -5
- package/routes/_workspace/settings/webhooks2.js +7 -7
- package/routes/_workspace/settings2.js +3 -3
- package/routes/_workspace/teams/_key/cycles/_number2.js +16 -16
- package/routes/_workspace/teams/_key/cycles/index2.js +40 -40
- package/routes/_workspace/teams/_key/issues.js +4 -4
- package/routes/_workspace/teams/_key/projects.js +4 -4
- package/routes/_workspace/teams/_key/settings2.js +133 -133
- package/routes/_workspace2.js +319 -319
- package/routes/docs/route2.js +19 -19
- package/routes/new2.js +8 -8
- package/routes/request2._token.js +4 -4
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { api as e, unwrap as t } from "../../../api/client.js";
|
|
2
2
|
import { branchName as n } from "../../../lib/branch.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
3
|
+
import { usePageTitle as r } from "../../../lib/pageTitle.js";
|
|
4
|
+
import { Link as i, useNavigate as a } from "../../../lib/router.js";
|
|
5
|
+
import { areasQuery as o, attachmentsQuery as s, commentsQuery as c, cyclesQuery as l, eventsQuery as u, issueDocsQuery as d, issueLinksQuery as f, issueQuery as p, labelsQuery as m, meQuery as h, projectsQuery as g, reactionsQuery as _, statusesQuery as v, teamsQuery as y } from "../../../api/queries.js";
|
|
6
|
+
import { AreaIcon as b, BranchIcon as x, CalendarIcon as S, CloseIcon as C, CycleIcon as w, EstimateIcon as T, FileTextIcon as E, InboxIcon as D, PriorityIcon as O, ProjectIcon as k, StatusIcon as ee, TriageIcon as A, usePriorityNames as j } from "../../../components/icons.js";
|
|
7
|
+
import { Route as M } from "./_identifier.js";
|
|
8
|
+
import { copyItem as N } from "../../../lib/menus.js";
|
|
9
|
+
import { docRef as P, useDocMenu as F } from "../../../lib/docs.js";
|
|
10
|
+
import { invalidateIssueViews as I, useUpdateIssue as te } from "../../../api/mutations.js";
|
|
11
|
+
import { useTime as ne } from "../../../lib/time.js";
|
|
12
|
+
import { DueDate as L, ProjectStatusIcon as re, SlaBadge as ie, scalePoints as ae, useEstimateLabel as oe } from "../../../components/Planning.js";
|
|
13
|
+
import { connectorActor as se, usePeople as ce } from "../../../lib/people.js";
|
|
14
|
+
import { PickManyBox as le, usePickMany as ue } from "../../../lib/pickMany.js";
|
|
15
|
+
import { assigneeKey as de, parseAssigneeKey as fe, useAssigneeOptions as pe } from "../../../lib/assignees.js";
|
|
16
|
+
import { issueURL as me, useIssueMenu as he } from "../../../lib/issueMenu.js";
|
|
17
|
+
import { rememberPage as ge } from "../../../lib/recent.js";
|
|
18
18
|
import { issueScope as _e, useCan as ve, useCanTriage as ye } from "../../../lib/roles.js";
|
|
19
19
|
import { useConfirm as be } from "../../../lib/confirm.js";
|
|
20
20
|
import { useLinkedIssues as xe } from "../../../lib/linkedIssues.js";
|
|
@@ -51,99 +51,99 @@ import { ArchiveIcon as yt } from "@parallelworks/ui/icons";
|
|
|
51
51
|
import { MoreButton as bt } from "@parallelworks/ui/list";
|
|
52
52
|
// src/routes/$workspace/issues/$identifier.tsx?tsr-split=component
|
|
53
53
|
function xt() {
|
|
54
|
-
let
|
|
54
|
+
let o = G("issue"), s = ne(), c = vt(), l = G("common"), { workspace: u, identifier: d } = M.useParams(), { data: m } = Q(p(u, d)), { data: g } = Q(y(u)), { data: _ } = Q(h), { data: v = [] } = X(f(u, d)), [b, S] = W();
|
|
55
55
|
ke({
|
|
56
|
-
identifier:
|
|
57
|
-
...
|
|
58
|
-
}),
|
|
59
|
-
let
|
|
56
|
+
identifier: m.identifier,
|
|
57
|
+
...b && { field: b }
|
|
58
|
+
}), r(`${m.identifier} ${m.title}`), Ae(u, m.identifier);
|
|
59
|
+
let C = a(), w = n(m.identifier, m.title);
|
|
60
60
|
gt(() => {
|
|
61
|
-
window.location.pathname.endsWith(`/issues/${
|
|
61
|
+
window.location.pathname.endsWith(`/issues/${w}`) || C({
|
|
62
62
|
to: "/$workspace/issues/$identifier",
|
|
63
63
|
params: {
|
|
64
|
-
workspace:
|
|
65
|
-
identifier:
|
|
64
|
+
workspace: u,
|
|
65
|
+
identifier: m.identifier
|
|
66
66
|
},
|
|
67
67
|
search: !0,
|
|
68
68
|
hash: !0,
|
|
69
69
|
replace: !0
|
|
70
70
|
});
|
|
71
71
|
}, [
|
|
72
|
+
w,
|
|
72
73
|
C,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
p.identifier
|
|
74
|
+
u,
|
|
75
|
+
m.identifier
|
|
76
76
|
]);
|
|
77
|
-
let
|
|
77
|
+
let T = ve(u, "delete_issues", _e(m)), E = Z(), { confirm: D, dialog: O } = be(), k = Y({
|
|
78
78
|
mutationFn: async () => t(await e.POST("/api/v1/workspaces/{workspace}/issues/{identifier}/restore", { params: { path: {
|
|
79
|
-
workspace:
|
|
80
|
-
identifier:
|
|
79
|
+
workspace: u,
|
|
80
|
+
identifier: m.identifier
|
|
81
81
|
} } })),
|
|
82
82
|
onSuccess: (e) => {
|
|
83
|
-
|
|
83
|
+
E.setQueryData(p(u, m.identifier).queryKey, e), I(E, u, m.identifier);
|
|
84
84
|
}
|
|
85
|
-
}),
|
|
85
|
+
}), ee = Y({
|
|
86
86
|
mutationFn: async () => t(await e.DELETE("/api/v1/workspaces/{workspace}/issues/{identifier}", { params: { path: {
|
|
87
|
-
workspace:
|
|
88
|
-
identifier:
|
|
87
|
+
workspace: u,
|
|
88
|
+
identifier: m.identifier
|
|
89
89
|
} } })),
|
|
90
90
|
onSuccess: () => {
|
|
91
|
-
ft.success(
|
|
92
|
-
let e =
|
|
93
|
-
|
|
91
|
+
ft.success(o("deleted", { identifier: m.identifier })), I(E, u);
|
|
92
|
+
let e = g.find((e) => e.id === m.teamId)?.key;
|
|
93
|
+
C(e ? {
|
|
94
94
|
to: "/$workspace/teams/$key/issues",
|
|
95
95
|
params: {
|
|
96
|
-
workspace:
|
|
96
|
+
workspace: u,
|
|
97
97
|
key: e
|
|
98
98
|
}
|
|
99
99
|
} : {
|
|
100
100
|
to: "/$workspace/issues",
|
|
101
|
-
params: { workspace:
|
|
101
|
+
params: { workspace: u }
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
|
-
}), A = mt((e) =>
|
|
104
|
+
}), A = mt((e) => C({
|
|
105
105
|
to: "/$workspace/issues/$identifier",
|
|
106
106
|
params: {
|
|
107
|
-
workspace:
|
|
107
|
+
workspace: u,
|
|
108
108
|
identifier: e
|
|
109
109
|
}
|
|
110
|
-
}), [
|
|
111
|
-
xe(
|
|
112
|
-
|
|
110
|
+
}), [C, u]);
|
|
111
|
+
xe(u, m.body, A), gt(() => {
|
|
112
|
+
ge(u, {
|
|
113
113
|
kind: "issue",
|
|
114
|
-
href: `/${
|
|
115
|
-
label: `${
|
|
114
|
+
href: `/${u}/issues/${m.identifier}`,
|
|
115
|
+
label: `${m.identifier} ${m.title}`
|
|
116
116
|
});
|
|
117
117
|
}, [
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
118
|
+
u,
|
|
119
|
+
m.identifier,
|
|
120
|
+
m.title
|
|
121
121
|
]);
|
|
122
|
-
let j = Oe({ issue:
|
|
122
|
+
let j = Oe({ issue: m.identifier }, _?.user.username), N = g.find((e) => e.id === m.teamId), P = te(u, d), [F, L] = W(null), re = H(), ie = he(u);
|
|
123
123
|
return je({
|
|
124
|
-
s: () =>
|
|
125
|
-
p: () =>
|
|
126
|
-
a: () =>
|
|
127
|
-
l: () =>
|
|
128
|
-
Escape: () =>
|
|
124
|
+
s: () => L("status"),
|
|
125
|
+
p: () => L("priority"),
|
|
126
|
+
a: () => L("assignees"),
|
|
127
|
+
l: () => L("labels"),
|
|
128
|
+
Escape: () => C({
|
|
129
129
|
to: "/$workspace/issues",
|
|
130
|
-
params: { workspace:
|
|
130
|
+
params: { workspace: u }
|
|
131
131
|
})
|
|
132
132
|
}, F === null), /* @__PURE__ */ J("div", {
|
|
133
133
|
className: "flex h-full flex-col",
|
|
134
134
|
children: [
|
|
135
135
|
/* @__PURE__ */ J("header", {
|
|
136
136
|
className: "flex h-12 shrink-0 items-center gap-2 border-b border-border px-4 text-sm md:px-5",
|
|
137
|
-
onContextMenu: (e) =>
|
|
137
|
+
onContextMenu: (e) => re(e, ie([m])),
|
|
138
138
|
children: [
|
|
139
|
-
/* @__PURE__ */ q(
|
|
140
|
-
to:
|
|
139
|
+
/* @__PURE__ */ q(i, {
|
|
140
|
+
to: N ? "/$workspace/teams/$key/issues" : "/$workspace/issues",
|
|
141
141
|
params: {
|
|
142
|
-
workspace:
|
|
143
|
-
key:
|
|
142
|
+
workspace: u,
|
|
143
|
+
key: N?.key ?? ""
|
|
144
144
|
},
|
|
145
145
|
className: "text-muted-foreground hover:text-foreground",
|
|
146
|
-
children:
|
|
146
|
+
children: N?.name ?? o("issues")
|
|
147
147
|
}),
|
|
148
148
|
/* @__PURE__ */ q("span", {
|
|
149
149
|
className: "text-muted-foreground",
|
|
@@ -152,51 +152,51 @@ function xt() {
|
|
|
152
152
|
}),
|
|
153
153
|
/* @__PURE__ */ q("span", {
|
|
154
154
|
className: "shrink-0 font-medium whitespace-nowrap",
|
|
155
|
-
children:
|
|
155
|
+
children: m.identifier
|
|
156
156
|
}),
|
|
157
157
|
/* @__PURE__ */ q(Pe, {
|
|
158
|
-
workspace:
|
|
158
|
+
workspace: u,
|
|
159
159
|
kind: "issue",
|
|
160
|
-
target:
|
|
160
|
+
target: m.id
|
|
161
161
|
}),
|
|
162
162
|
/* @__PURE__ */ q(Ze, {
|
|
163
|
-
workspace:
|
|
164
|
-
identifier:
|
|
163
|
+
workspace: u,
|
|
164
|
+
identifier: m.identifier
|
|
165
165
|
}),
|
|
166
166
|
/* @__PURE__ */ q(nt, {
|
|
167
|
-
text: n(
|
|
168
|
-
label:
|
|
169
|
-
icon: /* @__PURE__ */ q(
|
|
167
|
+
text: n(m.identifier, m.title),
|
|
168
|
+
label: o("copyBranchName"),
|
|
169
|
+
icon: /* @__PURE__ */ q(x, {}),
|
|
170
170
|
size: "sm",
|
|
171
171
|
variant: "ghost",
|
|
172
|
-
success:
|
|
173
|
-
failure:
|
|
172
|
+
success: o("copiedBranchName", { name: n(m.identifier, m.title) }),
|
|
173
|
+
failure: o("copyFailed"),
|
|
174
174
|
className: "max-sm:hidden"
|
|
175
175
|
}),
|
|
176
|
-
/* @__PURE__ */ q(He, { links:
|
|
176
|
+
/* @__PURE__ */ q(He, { links: v }),
|
|
177
177
|
/* @__PURE__ */ J("span", {
|
|
178
178
|
className: "ml-auto flex items-center gap-3",
|
|
179
179
|
children: [
|
|
180
180
|
P.isPending && /* @__PURE__ */ q("span", {
|
|
181
181
|
className: "text-xs text-muted-foreground",
|
|
182
|
-
children:
|
|
182
|
+
children: l("saving")
|
|
183
183
|
}),
|
|
184
184
|
/* @__PURE__ */ q(ze, {
|
|
185
|
-
workspace:
|
|
185
|
+
workspace: u,
|
|
186
186
|
others: j
|
|
187
187
|
}),
|
|
188
188
|
/* @__PURE__ */ q(bt, {
|
|
189
|
-
items: () => [...
|
|
190
|
-
label:
|
|
189
|
+
items: () => [...ie([m]), ...T ? [{
|
|
190
|
+
label: o("deleteIssue"),
|
|
191
191
|
destructive: !0,
|
|
192
|
-
onClick: () =>
|
|
193
|
-
title:
|
|
194
|
-
description:
|
|
195
|
-
confirmLabel:
|
|
196
|
-
onConfirm: () =>
|
|
192
|
+
onClick: () => D({
|
|
193
|
+
title: o("deleteTitle", { identifier: m.identifier }),
|
|
194
|
+
description: o("deleteDescription"),
|
|
195
|
+
confirmLabel: o("deleteIssue"),
|
|
196
|
+
onConfirm: () => ee.mutateAsync()
|
|
197
197
|
})
|
|
198
198
|
}] : []],
|
|
199
|
-
label:
|
|
199
|
+
label: l("moreActionsFor", { name: m.identifier }),
|
|
200
200
|
visible: !0
|
|
201
201
|
})
|
|
202
202
|
]
|
|
@@ -204,11 +204,11 @@ function xt() {
|
|
|
204
204
|
P.isError && /* @__PURE__ */ q(it, {
|
|
205
205
|
inline: !0,
|
|
206
206
|
className: "ml-auto text-xs",
|
|
207
|
-
children:
|
|
207
|
+
children: c(P.error)
|
|
208
208
|
})
|
|
209
209
|
]
|
|
210
210
|
}),
|
|
211
|
-
|
|
211
|
+
O,
|
|
212
212
|
/* @__PURE__ */ J("div", {
|
|
213
213
|
className: "flex min-h-0 flex-1 flex-col overflow-y-auto md:flex-row md:overflow-hidden",
|
|
214
214
|
children: [/* @__PURE__ */ q("div", {
|
|
@@ -217,90 +217,90 @@ function xt() {
|
|
|
217
217
|
className: "w-full px-4 pt-6 pb-24 md:px-8 md:pt-8",
|
|
218
218
|
children: [
|
|
219
219
|
/* @__PURE__ */ J(Lt.Provider, {
|
|
220
|
-
value:
|
|
220
|
+
value: S,
|
|
221
221
|
children: [
|
|
222
|
-
|
|
223
|
-
workspace:
|
|
224
|
-
issue:
|
|
222
|
+
m.triage && /* @__PURE__ */ q(St, {
|
|
223
|
+
workspace: u,
|
|
224
|
+
issue: m
|
|
225
225
|
}),
|
|
226
|
-
|
|
226
|
+
m.archivedAt && /* @__PURE__ */ q(et, {
|
|
227
227
|
tone: "muted",
|
|
228
228
|
icon: /* @__PURE__ */ q(yt, {}),
|
|
229
229
|
className: "mb-5",
|
|
230
230
|
children: /* @__PURE__ */ J("span", {
|
|
231
231
|
className: "flex flex-wrap items-center gap-x-3 gap-y-1",
|
|
232
|
-
children: [
|
|
232
|
+
children: [o("archivedNote", { when: s.day(m.archivedAt.slice(0, 10)) }), /* @__PURE__ */ q(z, {
|
|
233
233
|
type: "button",
|
|
234
234
|
size: "sm",
|
|
235
|
-
onClick: () =>
|
|
236
|
-
loading:
|
|
237
|
-
children:
|
|
235
|
+
onClick: () => k.mutate(),
|
|
236
|
+
loading: k.isPending,
|
|
237
|
+
children: o("restore")
|
|
238
238
|
})]
|
|
239
239
|
})
|
|
240
240
|
}),
|
|
241
241
|
/* @__PURE__ */ q(Ct, {
|
|
242
|
-
issue:
|
|
242
|
+
issue: m,
|
|
243
243
|
onSave: (e) => P.mutate({ title: e })
|
|
244
244
|
}),
|
|
245
245
|
/* @__PURE__ */ q(Re, {
|
|
246
|
-
workspace:
|
|
246
|
+
workspace: u,
|
|
247
247
|
others: j,
|
|
248
248
|
field: "title"
|
|
249
249
|
}),
|
|
250
250
|
/* @__PURE__ */ q(wt, {
|
|
251
|
-
workspace:
|
|
252
|
-
issue:
|
|
251
|
+
workspace: u,
|
|
252
|
+
issue: m
|
|
253
253
|
}),
|
|
254
254
|
/* @__PURE__ */ q(Re, {
|
|
255
|
-
workspace:
|
|
255
|
+
workspace: u,
|
|
256
256
|
others: j,
|
|
257
257
|
field: "body"
|
|
258
258
|
}),
|
|
259
259
|
/* @__PURE__ */ q(Je, {
|
|
260
|
-
workspace:
|
|
261
|
-
issue:
|
|
260
|
+
workspace: u,
|
|
261
|
+
issue: m
|
|
262
262
|
}),
|
|
263
263
|
/* @__PURE__ */ q(Ve, {
|
|
264
|
-
workspace:
|
|
265
|
-
identifier:
|
|
266
|
-
enabled: !!
|
|
264
|
+
workspace: u,
|
|
265
|
+
identifier: m.identifier,
|
|
266
|
+
enabled: !!N?.customerRequestsEnabled
|
|
267
267
|
}),
|
|
268
268
|
/* @__PURE__ */ q(Tt, {
|
|
269
|
-
workspace:
|
|
270
|
-
identifier:
|
|
269
|
+
workspace: u,
|
|
270
|
+
identifier: d
|
|
271
271
|
}),
|
|
272
272
|
/* @__PURE__ */ q(Ge, {
|
|
273
|
-
workspace:
|
|
274
|
-
identifier:
|
|
275
|
-
title:
|
|
273
|
+
workspace: u,
|
|
274
|
+
identifier: d,
|
|
275
|
+
title: m.title
|
|
276
276
|
}),
|
|
277
277
|
/* @__PURE__ */ q(Ne, {
|
|
278
|
-
workspace:
|
|
279
|
-
identifier:
|
|
278
|
+
workspace: u,
|
|
279
|
+
identifier: d
|
|
280
280
|
}),
|
|
281
281
|
/* @__PURE__ */ q(jt, {
|
|
282
|
-
workspace:
|
|
283
|
-
identifier:
|
|
282
|
+
workspace: u,
|
|
283
|
+
identifier: d,
|
|
284
284
|
others: j
|
|
285
285
|
})
|
|
286
286
|
]
|
|
287
287
|
}),
|
|
288
288
|
/* @__PURE__ */ q(At, {
|
|
289
|
-
workspace:
|
|
290
|
-
identifier:
|
|
289
|
+
workspace: u,
|
|
290
|
+
identifier: d
|
|
291
291
|
}),
|
|
292
292
|
/* @__PURE__ */ q(we, {
|
|
293
|
-
workspace:
|
|
294
|
-
identifier:
|
|
293
|
+
workspace: u,
|
|
294
|
+
identifier: d
|
|
295
295
|
})
|
|
296
296
|
]
|
|
297
297
|
})
|
|
298
298
|
}), /* @__PURE__ */ q(Et, {
|
|
299
|
-
workspace:
|
|
300
|
-
issue:
|
|
301
|
-
team:
|
|
299
|
+
workspace: u,
|
|
300
|
+
issue: m,
|
|
301
|
+
team: N,
|
|
302
302
|
open: F,
|
|
303
|
-
setOpen:
|
|
303
|
+
setOpen: L,
|
|
304
304
|
update: (e) => P.mutate(e)
|
|
305
305
|
})]
|
|
306
306
|
})
|
|
@@ -367,7 +367,7 @@ function Ct({ issue: e, onSave: t }) {
|
|
|
367
367
|
})] });
|
|
368
368
|
}
|
|
369
369
|
function wt({ workspace: e, issue: t }) {
|
|
370
|
-
let n = G("issue"), r = G("common"), i = ht(Lt), { data: a } = Q(
|
|
370
|
+
let n = G("issue"), r = G("common"), i = ht(Lt), { data: a } = Q(h), o = U(null), s = _t(() => ({
|
|
371
371
|
name: a?.user.name ?? n("someone"),
|
|
372
372
|
color: Fe(a?.user.username ?? "")
|
|
373
373
|
}), [
|
|
@@ -379,7 +379,7 @@ function wt({ workspace: e, issue: t }) {
|
|
|
379
379
|
target: { issue: t.identifier },
|
|
380
380
|
user: s,
|
|
381
381
|
getMarkdown: o
|
|
382
|
-
}), u = U(null), d = Ee(e, t.identifier), { data: f = [] } = X(
|
|
382
|
+
}), u = U(null), d = Ee(e, t.identifier), { data: f = [] } = X(_(e, t.identifier)), p = ve(e, "comment", _e(t));
|
|
383
383
|
return /* @__PURE__ */ J("div", {
|
|
384
384
|
className: "group mt-4 min-h-32",
|
|
385
385
|
children: [
|
|
@@ -423,8 +423,8 @@ function wt({ workspace: e, issue: t }) {
|
|
|
423
423
|
});
|
|
424
424
|
}
|
|
425
425
|
function Tt({ workspace: e, identifier: t }) {
|
|
426
|
-
let n = G("issue"), { data:
|
|
427
|
-
return
|
|
426
|
+
let n = G("issue"), { data: r } = Q(d(e, t)), a = H(), o = F(e);
|
|
427
|
+
return r.length === 0 ? null : /* @__PURE__ */ J("section", {
|
|
428
428
|
className: "mt-6",
|
|
429
429
|
"aria-label": n("docs"),
|
|
430
430
|
children: [/* @__PURE__ */ q("h2", {
|
|
@@ -432,15 +432,15 @@ function Tt({ workspace: e, identifier: t }) {
|
|
|
432
432
|
children: n("docs")
|
|
433
433
|
}), /* @__PURE__ */ q("ul", {
|
|
434
434
|
className: "mt-1 flex flex-wrap gap-1.5",
|
|
435
|
-
children:
|
|
435
|
+
children: r.map((t) => /* @__PURE__ */ q("li", { children: /* @__PURE__ */ J(i, {
|
|
436
436
|
to: "/$workspace/docs/$doc",
|
|
437
437
|
params: {
|
|
438
438
|
workspace: e,
|
|
439
|
-
doc:
|
|
439
|
+
doc: P(t)
|
|
440
440
|
},
|
|
441
441
|
onContextMenu: (e) => a(e, o(t)),
|
|
442
442
|
className: `${ut({ size: "sm" })} max-w-72`,
|
|
443
|
-
children: [/* @__PURE__ */ q(
|
|
443
|
+
children: [/* @__PURE__ */ q(E, { className: "size-3.5 text-muted-foreground" }), /* @__PURE__ */ q("span", {
|
|
444
444
|
className: "truncate",
|
|
445
445
|
children: t.title
|
|
446
446
|
})]
|
|
@@ -448,58 +448,58 @@ function Tt({ workspace: e, identifier: t }) {
|
|
|
448
448
|
})]
|
|
449
449
|
});
|
|
450
450
|
}
|
|
451
|
-
function Et({ workspace: n, issue: r, team:
|
|
452
|
-
let l = G("relations"), u =
|
|
453
|
-
...
|
|
451
|
+
function Et({ workspace: n, issue: r, team: i, open: o, setOpen: s, update: c }) {
|
|
452
|
+
let l = G("relations"), u = i?.key, d = G("issue.properties"), p = G("common"), h = j(), { data: g = [] } = X({
|
|
453
|
+
...v(n, u ?? ""),
|
|
454
454
|
enabled: !!u
|
|
455
|
-
}), { data:
|
|
455
|
+
}), { data: _ = [] } = X(m(n)), { data: y = [] } = X(f(n, r.identifier)), { nameOf: b, actorName: x, avatarOf: S } = ce(n), C = Z(), w = Y({
|
|
456
456
|
mutationFn: async (r) => t(await e.POST("/api/v1/workspaces/{workspace}/labels", {
|
|
457
457
|
params: { path: { workspace: n } },
|
|
458
458
|
body: {
|
|
459
459
|
name: r,
|
|
460
|
-
color: Dt[
|
|
460
|
+
color: Dt[_.length % Dt.length] ?? "#d73a4a"
|
|
461
461
|
}
|
|
462
462
|
})),
|
|
463
463
|
onSuccess: (e) => {
|
|
464
|
-
C.invalidateQueries({ queryKey:
|
|
464
|
+
C.invalidateQueries({ queryKey: m(n).queryKey }), c({ addLabels: [e.id] });
|
|
465
465
|
}
|
|
466
|
-
}), T = r.assignees.map(
|
|
466
|
+
}), T = r.assignees.map(de), E = pe(n, !0), D = (e) => (t) => s(t ? e : null), k = ue(o === "assignees", () => s(null)), A = ue(o === "labels", () => s(null)), M = "flex h-8 w-full items-center gap-2 rounded-md px-2 text-sm hover:bg-muted", N = H(), P = he(n), F = a(), I = (e, t) => {
|
|
467
467
|
e.stopPropagation(), N(e, t);
|
|
468
468
|
};
|
|
469
469
|
return /* @__PURE__ */ J("aside", {
|
|
470
470
|
className: "order-first grid shrink-0 grid-cols-2 gap-4 border-b border-border px-4 py-4 md:order-none md:block md:w-72 md:space-y-5 md:overflow-y-auto md:border-b-0 md:border-l md:py-6",
|
|
471
|
-
"aria-label":
|
|
471
|
+
"aria-label": d("title"),
|
|
472
472
|
onContextMenu: (e) => N(e, P([r])),
|
|
473
473
|
children: [
|
|
474
474
|
/* @__PURE__ */ q($, {
|
|
475
|
-
label:
|
|
475
|
+
label: p("status"),
|
|
476
476
|
shortcut: "S",
|
|
477
477
|
children: /* @__PURE__ */ q(B, {
|
|
478
|
-
"aria-label":
|
|
478
|
+
"aria-label": p("status"),
|
|
479
479
|
open: o === "status",
|
|
480
|
-
onOpenChange:
|
|
480
|
+
onOpenChange: D("status"),
|
|
481
481
|
items: g.map((e) => ({
|
|
482
482
|
value: e.id,
|
|
483
483
|
label: e.name,
|
|
484
|
-
icon: /* @__PURE__ */ q(
|
|
484
|
+
icon: /* @__PURE__ */ q(ee, { category: e.category })
|
|
485
485
|
})),
|
|
486
486
|
value: r.status.id,
|
|
487
487
|
onValueChange: (e) => e !== null && e !== r.status.id && c({ statusId: e }),
|
|
488
|
-
placeholder:
|
|
488
|
+
placeholder: d("changeStatus"),
|
|
489
489
|
trigger: /* @__PURE__ */ J("button", {
|
|
490
490
|
type: "button",
|
|
491
491
|
className: M,
|
|
492
|
-
children: [/* @__PURE__ */ q(
|
|
492
|
+
children: [/* @__PURE__ */ q(ee, { category: r.status.category }), r.status.name]
|
|
493
493
|
})
|
|
494
494
|
})
|
|
495
495
|
}),
|
|
496
496
|
/* @__PURE__ */ q($, {
|
|
497
|
-
label:
|
|
497
|
+
label: p("priority"),
|
|
498
498
|
shortcut: "P",
|
|
499
499
|
children: /* @__PURE__ */ q(B, {
|
|
500
|
-
"aria-label":
|
|
500
|
+
"aria-label": p("priority"),
|
|
501
501
|
open: o === "priority",
|
|
502
|
-
onOpenChange:
|
|
502
|
+
onOpenChange: D("priority"),
|
|
503
503
|
items: [
|
|
504
504
|
1,
|
|
505
505
|
2,
|
|
@@ -509,53 +509,53 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
509
509
|
].map((e) => ({
|
|
510
510
|
value: String(e),
|
|
511
511
|
label: h[e] ?? "",
|
|
512
|
-
icon: /* @__PURE__ */ q(
|
|
512
|
+
icon: /* @__PURE__ */ q(O, { priority: e })
|
|
513
513
|
})),
|
|
514
514
|
value: String(r.priority),
|
|
515
515
|
onValueChange: (e) => e !== null && c({ priority: Number(e) }),
|
|
516
|
-
placeholder:
|
|
516
|
+
placeholder: d("setPriority"),
|
|
517
517
|
trigger: /* @__PURE__ */ J("button", {
|
|
518
518
|
type: "button",
|
|
519
519
|
className: M,
|
|
520
|
-
children: [/* @__PURE__ */ q(
|
|
520
|
+
children: [/* @__PURE__ */ q(O, { priority: r.priority }), h[r.priority]]
|
|
521
521
|
})
|
|
522
522
|
})
|
|
523
523
|
}),
|
|
524
524
|
/* @__PURE__ */ q($, {
|
|
525
|
-
label:
|
|
525
|
+
label: d("assignees"),
|
|
526
526
|
shortcut: "A",
|
|
527
527
|
children: /* @__PURE__ */ q(B, {
|
|
528
|
-
"aria-label":
|
|
528
|
+
"aria-label": d("assignees"),
|
|
529
529
|
multiple: !0,
|
|
530
530
|
open: o === "assignees",
|
|
531
|
-
onOpenChange:
|
|
531
|
+
onOpenChange: D("assignees"),
|
|
532
532
|
items: E,
|
|
533
533
|
value: T,
|
|
534
534
|
onValueChange: (e) => {
|
|
535
535
|
let t = e.filter((e) => !T.includes(e)), n = T.filter((t) => !e.includes(t));
|
|
536
536
|
c({
|
|
537
|
-
...t.length > 0 && { addAssignees: t.map(
|
|
538
|
-
...n.length > 0 && { removeAssignees: n.map(
|
|
539
|
-
}),
|
|
537
|
+
...t.length > 0 && { addAssignees: t.map(fe) },
|
|
538
|
+
...n.length > 0 && { removeAssignees: n.map(fe) }
|
|
539
|
+
}), k();
|
|
540
540
|
},
|
|
541
|
-
placeholder:
|
|
541
|
+
placeholder: d("assignTo"),
|
|
542
542
|
trigger: /* @__PURE__ */ J("button", {
|
|
543
543
|
type: "button",
|
|
544
544
|
className: `${M} h-auto min-h-8 flex-wrap py-1`,
|
|
545
545
|
children: [r.assignees.length === 0 && /* @__PURE__ */ q("span", {
|
|
546
546
|
className: "text-muted-foreground",
|
|
547
|
-
children:
|
|
547
|
+
children: d("unassigned")
|
|
548
548
|
}), r.assignees.map((e) => {
|
|
549
549
|
let t = b(e.kind, e.handle);
|
|
550
550
|
return /* @__PURE__ */ q("span", {
|
|
551
551
|
onContextMenu: (r) => I(r, [{
|
|
552
|
-
label:
|
|
552
|
+
label: d("unassign", { name: t }),
|
|
553
553
|
onClick: () => c({ removeAssignees: [{
|
|
554
554
|
kind: e.kind,
|
|
555
555
|
handle: e.handle
|
|
556
556
|
}] })
|
|
557
557
|
}, {
|
|
558
|
-
label:
|
|
558
|
+
label: d("viewTheirIssues"),
|
|
559
559
|
onClick: () => F({
|
|
560
560
|
to: "/$workspace/issues",
|
|
561
561
|
params: { workspace: n },
|
|
@@ -585,19 +585,19 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
585
585
|
})
|
|
586
586
|
}),
|
|
587
587
|
/* @__PURE__ */ q($, {
|
|
588
|
-
label:
|
|
588
|
+
label: p("labels"),
|
|
589
589
|
shortcut: "L",
|
|
590
590
|
children: /* @__PURE__ */ q(B, {
|
|
591
|
-
"aria-label":
|
|
591
|
+
"aria-label": p("labels"),
|
|
592
592
|
multiple: !0,
|
|
593
593
|
open: o === "labels",
|
|
594
|
-
onOpenChange:
|
|
595
|
-
items:
|
|
594
|
+
onOpenChange: D("labels"),
|
|
595
|
+
items: _.map((e) => ({
|
|
596
596
|
value: e.id,
|
|
597
597
|
label: e.name,
|
|
598
598
|
icon: /* @__PURE__ */ J("span", {
|
|
599
599
|
className: "flex items-center gap-2",
|
|
600
|
-
children: [/* @__PURE__ */ q(
|
|
600
|
+
children: [/* @__PURE__ */ q(le, {}), /* @__PURE__ */ q("span", {
|
|
601
601
|
className: "size-2.5 rounded-full",
|
|
602
602
|
style: { background: e.color }
|
|
603
603
|
})]
|
|
@@ -605,7 +605,7 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
605
605
|
})),
|
|
606
606
|
value: r.labels.map((e) => e.id),
|
|
607
607
|
onValueChange: (e) => {
|
|
608
|
-
|
|
608
|
+
A();
|
|
609
609
|
let t = r.labels.map((e) => e.id), n = e.filter((e) => !t.includes(e)), i = t.filter((t) => !e.includes(t));
|
|
610
610
|
c({
|
|
611
611
|
...n.length > 0 && { addLabels: n },
|
|
@@ -613,19 +613,19 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
613
613
|
});
|
|
614
614
|
},
|
|
615
615
|
onCreate: (e) => w.mutate(e),
|
|
616
|
-
placeholder:
|
|
616
|
+
placeholder: d("addLabels"),
|
|
617
617
|
trigger: /* @__PURE__ */ J("button", {
|
|
618
618
|
type: "button",
|
|
619
619
|
className: `${M} h-auto min-h-8 flex-wrap py-1`,
|
|
620
620
|
children: [r.labels.length === 0 && /* @__PURE__ */ q("span", {
|
|
621
621
|
className: "text-muted-foreground",
|
|
622
|
-
children:
|
|
622
|
+
children: d("noLabels")
|
|
623
623
|
}), r.labels.map((e) => /* @__PURE__ */ J("span", {
|
|
624
624
|
onContextMenu: (t) => I(t, [{
|
|
625
|
-
label:
|
|
625
|
+
label: d("removeLabel", { name: e.name }),
|
|
626
626
|
onClick: () => c({ removeLabels: [e.id] })
|
|
627
627
|
}, {
|
|
628
|
-
label:
|
|
628
|
+
label: d("viewLabelIssues"),
|
|
629
629
|
onClick: () => F({
|
|
630
630
|
to: "/$workspace/issues",
|
|
631
631
|
params: { workspace: n },
|
|
@@ -656,12 +656,12 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
656
656
|
/* @__PURE__ */ q(kt, {
|
|
657
657
|
workspace: n,
|
|
658
658
|
issue: r,
|
|
659
|
-
team:
|
|
659
|
+
team: i,
|
|
660
660
|
update: c,
|
|
661
661
|
row: M
|
|
662
662
|
}),
|
|
663
663
|
/* @__PURE__ */ q($, {
|
|
664
|
-
label:
|
|
664
|
+
label: d("created"),
|
|
665
665
|
children: /* @__PURE__ */ J("p", {
|
|
666
666
|
className: "flex items-center gap-2 px-2 text-sm",
|
|
667
667
|
children: [/* @__PURE__ */ q(Se, {
|
|
@@ -682,14 +682,14 @@ function Et({ workspace: n, issue: r, team: a, open: o, setOpen: s, update: c })
|
|
|
682
682
|
})
|
|
683
683
|
}),
|
|
684
684
|
/* @__PURE__ */ q($, {
|
|
685
|
-
label:
|
|
685
|
+
label: d("timeInStatus"),
|
|
686
686
|
children: /* @__PURE__ */ q(Xe, {
|
|
687
687
|
workspace: n,
|
|
688
688
|
identifier: r.identifier
|
|
689
689
|
})
|
|
690
690
|
}),
|
|
691
691
|
y.length > 0 && /* @__PURE__ */ q($, {
|
|
692
|
-
label:
|
|
692
|
+
label: d("syncedWith"),
|
|
693
693
|
children: /* @__PURE__ */ q(Ue, { links: y })
|
|
694
694
|
})
|
|
695
695
|
]
|
|
@@ -705,16 +705,16 @@ var Dt = [
|
|
|
705
705
|
"#1a7f37"
|
|
706
706
|
];
|
|
707
707
|
function Ot({ workspace: e, origin: t, className: n }) {
|
|
708
|
-
let
|
|
708
|
+
let r = "size-3.5 shrink-0 text-muted-foreground", a = t.title.replace(/[*_`#>[\]]/g, "").replace(/\s+/g, " ").trim();
|
|
709
709
|
switch (t.kind) {
|
|
710
|
-
case "decision": return /* @__PURE__ */ J(
|
|
710
|
+
case "decision": return /* @__PURE__ */ J(i, {
|
|
711
711
|
to: "/$workspace/issues/$identifier",
|
|
712
712
|
params: {
|
|
713
713
|
workspace: e,
|
|
714
714
|
identifier: t.key
|
|
715
715
|
},
|
|
716
716
|
className: n,
|
|
717
|
-
children: [/* @__PURE__ */ q(
|
|
717
|
+
children: [/* @__PURE__ */ q(D, { className: r }), /* @__PURE__ */ q(lt, {
|
|
718
718
|
content: a,
|
|
719
719
|
overflowOnly: !0,
|
|
720
720
|
children: /* @__PURE__ */ q("span", {
|
|
@@ -723,26 +723,26 @@ function Ot({ workspace: e, origin: t, className: n }) {
|
|
|
723
723
|
})
|
|
724
724
|
})]
|
|
725
725
|
});
|
|
726
|
-
case "area": return /* @__PURE__ */ J(
|
|
726
|
+
case "area": return /* @__PURE__ */ J(i, {
|
|
727
727
|
to: "/$workspace/areas/$area",
|
|
728
728
|
params: {
|
|
729
729
|
workspace: e,
|
|
730
730
|
area: t.key
|
|
731
731
|
},
|
|
732
732
|
className: n,
|
|
733
|
-
children: [/* @__PURE__ */ q(
|
|
733
|
+
children: [/* @__PURE__ */ q(b, { className: r }), /* @__PURE__ */ q("span", {
|
|
734
734
|
className: "truncate",
|
|
735
735
|
children: a
|
|
736
736
|
})]
|
|
737
737
|
});
|
|
738
|
-
default: return /* @__PURE__ */ J(
|
|
738
|
+
default: return /* @__PURE__ */ J(i, {
|
|
739
739
|
to: "/$workspace/docs/$doc",
|
|
740
740
|
params: {
|
|
741
741
|
workspace: e,
|
|
742
742
|
doc: t.key
|
|
743
743
|
},
|
|
744
744
|
className: n,
|
|
745
|
-
children: [/* @__PURE__ */ q(
|
|
745
|
+
children: [/* @__PURE__ */ q(E, { className: r }), /* @__PURE__ */ q("span", {
|
|
746
746
|
className: "truncate",
|
|
747
747
|
children: a
|
|
748
748
|
})]
|
|
@@ -750,13 +750,13 @@ function Ot({ workspace: e, origin: t, className: n }) {
|
|
|
750
750
|
}
|
|
751
751
|
}
|
|
752
752
|
function kt({ workspace: e, issue: t, team: n, update: r, row: i }) {
|
|
753
|
-
let
|
|
754
|
-
...
|
|
753
|
+
let a = G("planning"), s = G("flow"), c = ne(), u = oe(), { data: d = [] } = X(g(e)), f = d.find((e) => e.id === t.project?.id), { data: p = [] } = X({
|
|
754
|
+
...l(e, n?.key ?? ""),
|
|
755
755
|
enabled: !!n?.cyclesEnabled
|
|
756
|
-
}), m = n?.estimateScale ?? "none",
|
|
756
|
+
}), m = n?.estimateScale ?? "none", h = t.status.category === "completed" || t.status.category === "canceled", _ = (e) => e.name ? a("cycleNamed", {
|
|
757
757
|
number: e.number,
|
|
758
758
|
name: e.name
|
|
759
|
-
}) :
|
|
759
|
+
}) : a("cycle", { number: e.number }), v = p.filter((e) => e.state !== "past" || e.id === t.cycle?.id), { data: y = [] } = X(o(e)), x = y.filter((e) => !e.teamId || e.teamId === t.teamId);
|
|
760
760
|
return /* @__PURE__ */ J(K, { children: [
|
|
761
761
|
n && n.flow.length > 0 && /* @__PURE__ */ q($, {
|
|
762
762
|
label: s("stage"),
|
|
@@ -774,7 +774,7 @@ function kt({ workspace: e, issue: t, team: n, update: r, row: i }) {
|
|
|
774
774
|
trigger: /* @__PURE__ */ J("button", {
|
|
775
775
|
type: "button",
|
|
776
776
|
className: i,
|
|
777
|
-
children: [/* @__PURE__ */ q(
|
|
777
|
+
children: [/* @__PURE__ */ q(w, { className: "size-3.5 shrink-0 text-muted-foreground" }), t.stage ? /* @__PURE__ */ q("span", {
|
|
778
778
|
className: "truncate",
|
|
779
779
|
children: s(`stages.${t.stage}`)
|
|
780
780
|
}) : /* @__PURE__ */ q("span", {
|
|
@@ -785,34 +785,34 @@ function kt({ workspace: e, issue: t, team: n, update: r, row: i }) {
|
|
|
785
785
|
})
|
|
786
786
|
}),
|
|
787
787
|
/* @__PURE__ */ q($, {
|
|
788
|
-
label:
|
|
788
|
+
label: a("area"),
|
|
789
789
|
children: /* @__PURE__ */ q(V, {
|
|
790
|
-
"aria-label":
|
|
790
|
+
"aria-label": a("area"),
|
|
791
791
|
value: t.area?.key ?? "",
|
|
792
792
|
onValueChange: (e) => r({ area: e ?? "" }),
|
|
793
793
|
items: [{
|
|
794
794
|
value: "",
|
|
795
|
-
label:
|
|
796
|
-
}, ...
|
|
795
|
+
label: a("noArea")
|
|
796
|
+
}, ...x.map((e) => ({
|
|
797
797
|
value: e.key,
|
|
798
798
|
label: e.title,
|
|
799
|
-
...e.status === "proposed" && { description:
|
|
799
|
+
...e.status === "proposed" && { description: a("proposedArea") }
|
|
800
800
|
}))],
|
|
801
801
|
trigger: /* @__PURE__ */ J("button", {
|
|
802
802
|
type: "button",
|
|
803
803
|
className: i,
|
|
804
|
-
children: [/* @__PURE__ */ q(
|
|
804
|
+
children: [/* @__PURE__ */ q(b, { className: "size-3.5 shrink-0 text-muted-foreground" }), t.area ? /* @__PURE__ */ q("span", {
|
|
805
805
|
className: "truncate",
|
|
806
806
|
children: t.area.title
|
|
807
807
|
}) : /* @__PURE__ */ q("span", {
|
|
808
808
|
className: "text-muted-foreground",
|
|
809
|
-
children:
|
|
809
|
+
children: a("noArea")
|
|
810
810
|
})]
|
|
811
811
|
})
|
|
812
812
|
})
|
|
813
813
|
}),
|
|
814
814
|
t.origin && /* @__PURE__ */ q($, {
|
|
815
|
-
label:
|
|
815
|
+
label: a("startedFrom"),
|
|
816
816
|
children: /* @__PURE__ */ q(Ot, {
|
|
817
817
|
workspace: e,
|
|
818
818
|
origin: t.origin,
|
|
@@ -820,45 +820,45 @@ function kt({ workspace: e, issue: t, team: n, update: r, row: i }) {
|
|
|
820
820
|
})
|
|
821
821
|
}),
|
|
822
822
|
/* @__PURE__ */ q($, {
|
|
823
|
-
label:
|
|
823
|
+
label: a("project"),
|
|
824
824
|
children: /* @__PURE__ */ q(V, {
|
|
825
|
-
"aria-label":
|
|
825
|
+
"aria-label": a("project"),
|
|
826
826
|
value: t.project?.id ?? "",
|
|
827
827
|
onValueChange: (e) => r({ projectId: e ?? "" }),
|
|
828
828
|
items: [{
|
|
829
829
|
value: "",
|
|
830
|
-
label:
|
|
830
|
+
label: a("noProject")
|
|
831
831
|
}, ...d.map((e) => ({
|
|
832
832
|
value: e.id,
|
|
833
833
|
label: e.name,
|
|
834
|
-
icon: /* @__PURE__ */ q(
|
|
834
|
+
icon: /* @__PURE__ */ q(re, { status: e.status })
|
|
835
835
|
}))],
|
|
836
836
|
trigger: /* @__PURE__ */ J("button", {
|
|
837
837
|
type: "button",
|
|
838
838
|
className: i,
|
|
839
|
-
children: [/* @__PURE__ */ q(
|
|
839
|
+
children: [/* @__PURE__ */ q(k, { className: "size-3.5 shrink-0 text-muted-foreground" }), t.project ? /* @__PURE__ */ q("span", {
|
|
840
840
|
className: "truncate",
|
|
841
841
|
children: t.project.name
|
|
842
842
|
}) : /* @__PURE__ */ q("span", {
|
|
843
843
|
className: "text-muted-foreground",
|
|
844
|
-
children:
|
|
844
|
+
children: a("noProject")
|
|
845
845
|
})]
|
|
846
846
|
})
|
|
847
847
|
})
|
|
848
848
|
}),
|
|
849
849
|
t.project && /* @__PURE__ */ q($, {
|
|
850
|
-
label:
|
|
850
|
+
label: a("milestone"),
|
|
851
851
|
children: /* @__PURE__ */ q(V, {
|
|
852
|
-
"aria-label":
|
|
852
|
+
"aria-label": a("milestone"),
|
|
853
853
|
value: t.milestone?.id ?? "",
|
|
854
854
|
onValueChange: (e) => r({ milestoneId: e ?? "" }),
|
|
855
855
|
items: [{
|
|
856
856
|
value: "",
|
|
857
|
-
label:
|
|
857
|
+
label: a("noMilestone")
|
|
858
858
|
}, ...(f?.milestones ?? []).map((e) => ({
|
|
859
859
|
value: e.id,
|
|
860
860
|
label: e.name,
|
|
861
|
-
...e.targetDate && { description:
|
|
861
|
+
...e.targetDate && { description: c.day(e.targetDate) }
|
|
862
862
|
}))],
|
|
863
863
|
trigger: /* @__PURE__ */ q("button", {
|
|
864
864
|
type: "button",
|
|
@@ -868,97 +868,97 @@ function kt({ workspace: e, issue: t, team: n, update: r, row: i }) {
|
|
|
868
868
|
children: t.milestone.name
|
|
869
869
|
}) : /* @__PURE__ */ q("span", {
|
|
870
870
|
className: "text-muted-foreground",
|
|
871
|
-
children:
|
|
871
|
+
children: a("noMilestone")
|
|
872
872
|
})
|
|
873
873
|
})
|
|
874
874
|
})
|
|
875
875
|
}),
|
|
876
876
|
n?.cyclesEnabled && /* @__PURE__ */ q($, {
|
|
877
|
-
label:
|
|
877
|
+
label: a("cycleLabel"),
|
|
878
878
|
children: /* @__PURE__ */ q(V, {
|
|
879
|
-
"aria-label":
|
|
879
|
+
"aria-label": a("cycleLabel"),
|
|
880
880
|
value: t.cycle?.id ?? "",
|
|
881
881
|
onValueChange: (e) => r({ cycleId: e ?? "" }),
|
|
882
882
|
items: [{
|
|
883
883
|
value: "",
|
|
884
|
-
label:
|
|
884
|
+
label: a("noCycle")
|
|
885
885
|
}, ...v.map((e) => ({
|
|
886
886
|
value: e.id,
|
|
887
887
|
label: _(e),
|
|
888
|
-
description:
|
|
889
|
-
state:
|
|
890
|
-
dates:
|
|
888
|
+
description: a("stateAndDates", {
|
|
889
|
+
state: a(`states.${e.state}`),
|
|
890
|
+
dates: c.dayRange(e.startsOn, e.endsOn)
|
|
891
891
|
})
|
|
892
892
|
}))],
|
|
893
893
|
trigger: /* @__PURE__ */ J("button", {
|
|
894
894
|
type: "button",
|
|
895
895
|
className: i,
|
|
896
|
-
children: [/* @__PURE__ */ q(
|
|
896
|
+
children: [/* @__PURE__ */ q(w, { className: "size-3.5 shrink-0 text-muted-foreground" }), t.cycle ? /* @__PURE__ */ q("span", {
|
|
897
897
|
className: "truncate",
|
|
898
898
|
children: _(t.cycle)
|
|
899
899
|
}) : /* @__PURE__ */ q("span", {
|
|
900
900
|
className: "text-muted-foreground",
|
|
901
|
-
children:
|
|
901
|
+
children: a("noCycle")
|
|
902
902
|
})]
|
|
903
903
|
})
|
|
904
904
|
})
|
|
905
905
|
}),
|
|
906
906
|
(m !== "none" || !!t.estimate) && /* @__PURE__ */ q($, {
|
|
907
|
-
label:
|
|
907
|
+
label: a("estimate"),
|
|
908
908
|
children: /* @__PURE__ */ q(V, {
|
|
909
|
-
"aria-label":
|
|
909
|
+
"aria-label": a("estimate"),
|
|
910
910
|
value: t.estimate ?? 0,
|
|
911
911
|
onValueChange: (e) => r({ estimate: e ?? 0 }),
|
|
912
912
|
items: [{
|
|
913
913
|
value: 0,
|
|
914
|
-
label:
|
|
915
|
-
}, ...
|
|
914
|
+
label: a("noEstimate")
|
|
915
|
+
}, ...ae(m).map((e) => ({
|
|
916
916
|
value: e,
|
|
917
917
|
label: u(e, m)
|
|
918
918
|
}))],
|
|
919
919
|
trigger: /* @__PURE__ */ J("button", {
|
|
920
920
|
type: "button",
|
|
921
921
|
className: i,
|
|
922
|
-
children: [/* @__PURE__ */ q(
|
|
922
|
+
children: [/* @__PURE__ */ q(T, { className: "size-3.5 shrink-0 text-muted-foreground" }), t.estimate ? u(t.estimate, m) : /* @__PURE__ */ q("span", {
|
|
923
923
|
className: "text-muted-foreground",
|
|
924
|
-
children:
|
|
924
|
+
children: a("noEstimate")
|
|
925
925
|
})]
|
|
926
926
|
})
|
|
927
927
|
})
|
|
928
928
|
}),
|
|
929
929
|
/* @__PURE__ */ q($, {
|
|
930
|
-
label:
|
|
930
|
+
label: a("dueDate"),
|
|
931
931
|
children: /* @__PURE__ */ J("div", {
|
|
932
932
|
className: "flex items-center",
|
|
933
933
|
children: [/* @__PURE__ */ q(rt, {
|
|
934
934
|
value: t.dueDate ?? "",
|
|
935
935
|
onValueChange: (e) => r({ dueDate: e }),
|
|
936
|
-
"aria-label":
|
|
936
|
+
"aria-label": a("dueDate"),
|
|
937
937
|
required: !0,
|
|
938
938
|
trigger: /* @__PURE__ */ q("button", {
|
|
939
939
|
type: "button",
|
|
940
940
|
className: i,
|
|
941
|
-
children: t.dueDate ? /* @__PURE__ */ q(
|
|
941
|
+
children: t.dueDate ? /* @__PURE__ */ q(L, {
|
|
942
942
|
date: t.dueDate,
|
|
943
|
-
closed:
|
|
944
|
-
}) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(
|
|
943
|
+
closed: h
|
|
944
|
+
}) : /* @__PURE__ */ J(K, { children: [/* @__PURE__ */ q(S, { className: "size-3.5 shrink-0 text-muted-foreground" }), /* @__PURE__ */ q("span", {
|
|
945
945
|
className: "text-muted-foreground",
|
|
946
|
-
children:
|
|
946
|
+
children: a("noDueDate")
|
|
947
947
|
})] })
|
|
948
948
|
})
|
|
949
949
|
}), t.dueDate && /* @__PURE__ */ q(at, {
|
|
950
950
|
variant: "ghost",
|
|
951
|
-
icon: /* @__PURE__ */ q(
|
|
952
|
-
label:
|
|
951
|
+
icon: /* @__PURE__ */ q(C, { className: "size-3.5" }),
|
|
952
|
+
label: a("clearDueDate"),
|
|
953
953
|
onClick: () => r({ dueDate: "" })
|
|
954
954
|
})]
|
|
955
955
|
})
|
|
956
956
|
}),
|
|
957
|
-
t.slaDueAt && !
|
|
958
|
-
label:
|
|
957
|
+
t.slaDueAt && !h && /* @__PURE__ */ q($, {
|
|
958
|
+
label: a("sla.label"),
|
|
959
959
|
children: /* @__PURE__ */ q("span", {
|
|
960
960
|
className: "flex h-7 items-center px-2",
|
|
961
|
-
children: /* @__PURE__ */ q(
|
|
961
|
+
children: /* @__PURE__ */ q(ie, {
|
|
962
962
|
issue: t,
|
|
963
963
|
team: n
|
|
964
964
|
})
|
|
@@ -977,7 +977,7 @@ function $({ label: e, shortcut: t, children: n }) {
|
|
|
977
977
|
}), n] });
|
|
978
978
|
}
|
|
979
979
|
function At({ workspace: e, identifier: t }) {
|
|
980
|
-
let n = G("issue.activity"), { data: r } = Q(
|
|
980
|
+
let n = G("issue.activity"), { data: r } = Q(u(e, t)), [i, a] = W(!1), o = _t(() => {
|
|
981
981
|
let e = [];
|
|
982
982
|
for (let t of r) {
|
|
983
983
|
if (t.type.startsWith("comment.") || t.type.startsWith("issue.reaction_")) continue;
|
|
@@ -1011,13 +1011,13 @@ function At({ workspace: e, identifier: t }) {
|
|
|
1011
1011
|
});
|
|
1012
1012
|
}
|
|
1013
1013
|
function jt({ workspace: e, identifier: t, others: n }) {
|
|
1014
|
-
let r = G("issue.comments"), { data: i } = Q(
|
|
1014
|
+
let r = G("issue.comments"), { data: i } = Q(c(e, t)), { data: a = [] } = X(f(e, t)), o = _t(() => {
|
|
1015
1015
|
let e = i.filter((e) => !e.parentId);
|
|
1016
1016
|
return e.sort((e, t) => Number(Mt(t)) - Number(Mt(e))), e.map((e) => ({
|
|
1017
1017
|
root: e,
|
|
1018
1018
|
replies: i.filter((t) => t.parentId === e.id)
|
|
1019
1019
|
}));
|
|
1020
|
-
}, [i]), [
|
|
1020
|
+
}, [i]), [s, l] = W(null), u = i.filter((e) => !e.deletedAt && !Mt(e)).length;
|
|
1021
1021
|
return /* @__PURE__ */ J("section", {
|
|
1022
1022
|
className: "mt-12 border-t border-border pt-6",
|
|
1023
1023
|
"aria-label": r("title"),
|
|
@@ -1036,18 +1036,18 @@ function jt({ workspace: e, identifier: t, others: n }) {
|
|
|
1036
1036
|
/* @__PURE__ */ q("div", {
|
|
1037
1037
|
className: "mt-4 space-y-3",
|
|
1038
1038
|
children: o.map(({ root: n, replies: i }) => {
|
|
1039
|
-
let o = Mt(n) ? n.sharedWith : void 0,
|
|
1039
|
+
let o = Mt(n) ? n.sharedWith : void 0, c = o ? se(o).source : void 0;
|
|
1040
1040
|
return /* @__PURE__ */ J(tt, {
|
|
1041
1041
|
size: "fill",
|
|
1042
1042
|
padding: "none",
|
|
1043
1043
|
highlight: !!o,
|
|
1044
1044
|
render: /* @__PURE__ */ q("article", {
|
|
1045
1045
|
id: `comment-${n.id}`,
|
|
1046
|
-
"aria-label":
|
|
1046
|
+
"aria-label": c && r("sharedThreadLabel", { source: c })
|
|
1047
1047
|
}),
|
|
1048
1048
|
children: [
|
|
1049
|
-
o &&
|
|
1050
|
-
source:
|
|
1049
|
+
o && c ? /* @__PURE__ */ q(We, {
|
|
1050
|
+
source: c,
|
|
1051
1051
|
link: a.find((e) => e.connector === o)
|
|
1052
1052
|
}) : /* @__PURE__ */ q(Pt, {
|
|
1053
1053
|
workspace: e,
|
|
@@ -1070,18 +1070,18 @@ function jt({ workspace: e, identifier: t, others: n }) {
|
|
|
1070
1070
|
}),
|
|
1071
1071
|
/* @__PURE__ */ q("div", {
|
|
1072
1072
|
className: "border-t border-border/70 px-3 py-2",
|
|
1073
|
-
children:
|
|
1073
|
+
children: s === n.id ? /* @__PURE__ */ q(It, {
|
|
1074
1074
|
workspace: e,
|
|
1075
1075
|
identifier: t,
|
|
1076
1076
|
parentId: n.id,
|
|
1077
|
-
publicOn:
|
|
1077
|
+
publicOn: c,
|
|
1078
1078
|
autofocus: !0,
|
|
1079
1079
|
onDone: () => l(null)
|
|
1080
1080
|
}) : /* @__PURE__ */ q("button", {
|
|
1081
1081
|
type: "button",
|
|
1082
1082
|
onClick: () => l(n.id),
|
|
1083
1083
|
className: "w-full text-left text-xs text-muted-foreground hover:text-foreground",
|
|
1084
|
-
children:
|
|
1084
|
+
children: c ? r("replyPublic", { source: c }) : r("replyPlaceholder")
|
|
1085
1085
|
})
|
|
1086
1086
|
})
|
|
1087
1087
|
]
|
|
@@ -1114,15 +1114,15 @@ function Nt({ comment: e }) {
|
|
|
1114
1114
|
let t = G("issue.comments");
|
|
1115
1115
|
return e.author.kind === "connector" ? /* @__PURE__ */ q("span", {
|
|
1116
1116
|
className: "rounded border border-border px-1.5 py-px text-[10px] text-muted-foreground",
|
|
1117
|
-
children: t("via", { source:
|
|
1117
|
+
children: t("via", { source: se(e.author.handle).source })
|
|
1118
1118
|
}) : null;
|
|
1119
1119
|
}
|
|
1120
1120
|
function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
1121
|
-
let o = G("issue.comments"), s = G("common"), { actorName: c, avatarOf: l } =
|
|
1121
|
+
let o = G("issue.comments"), s = G("common"), { actorName: c, avatarOf: l } = ce(n), { data: u } = Q(h), { data: d = [] } = X(_(n, r)), f = ve(n, "comment", { team: r.slice(0, r.lastIndexOf("-")) }), p = Z(), m = H(), [g, v] = W(!1), [y, b] = W(i.body), [x, S] = W(!1), C = U(null), w = Ee(n, r), T = i.author.kind === "user" && i.author.handle === u?.user.username, E = { path: {
|
|
1122
1122
|
workspace: n,
|
|
1123
1123
|
identifier: r,
|
|
1124
1124
|
commentId: i.id
|
|
1125
|
-
} }, D = () =>
|
|
1125
|
+
} }, D = () => I(p, n, r), O = Y({
|
|
1126
1126
|
mutationFn: async () => t(await e.PATCH("/api/v1/workspaces/{workspace}/issues/{identifier}/comments/{commentId}", {
|
|
1127
1127
|
params: E,
|
|
1128
1128
|
body: { body: y }
|
|
@@ -1138,13 +1138,13 @@ function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
|
1138
1138
|
className: "px-3 py-2.5 text-xs text-muted-foreground italic",
|
|
1139
1139
|
children: o("deleted")
|
|
1140
1140
|
});
|
|
1141
|
-
let
|
|
1141
|
+
let ee = `${me(n, r)}#comment-${i.id}`, A = [
|
|
1142
1142
|
{
|
|
1143
1143
|
label: o("reply"),
|
|
1144
1144
|
onClick: a
|
|
1145
1145
|
},
|
|
1146
|
-
|
|
1147
|
-
|
|
1146
|
+
N(s("copyLink"), ee),
|
|
1147
|
+
N(o("copyText"), i.body),
|
|
1148
1148
|
...T ? [
|
|
1149
1149
|
dt,
|
|
1150
1150
|
{
|
|
@@ -1162,7 +1162,7 @@ function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
|
1162
1162
|
];
|
|
1163
1163
|
return /* @__PURE__ */ J("div", {
|
|
1164
1164
|
className: "group px-3 py-2.5",
|
|
1165
|
-
onContextMenu: (e) => !
|
|
1165
|
+
onContextMenu: (e) => !g && m(e, A),
|
|
1166
1166
|
children: [/* @__PURE__ */ J("div", {
|
|
1167
1167
|
className: "flex items-center gap-2 text-xs",
|
|
1168
1168
|
children: [
|
|
@@ -1190,8 +1190,8 @@ function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
|
1190
1190
|
exact: "medium"
|
|
1191
1191
|
}), i.updatedAt !== i.createdAt && /* @__PURE__ */ J(K, { children: [" ", o("edited")] })]
|
|
1192
1192
|
}),
|
|
1193
|
-
!x && !
|
|
1194
|
-
items:
|
|
1193
|
+
!x && !g && /* @__PURE__ */ q(bt, {
|
|
1194
|
+
items: A,
|
|
1195
1195
|
className: "ml-auto"
|
|
1196
1196
|
}),
|
|
1197
1197
|
x && /* @__PURE__ */ J("span", {
|
|
@@ -1215,7 +1215,7 @@ function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
|
1215
1215
|
]
|
|
1216
1216
|
}), /* @__PURE__ */ q("div", {
|
|
1217
1217
|
className: "mt-1",
|
|
1218
|
-
children:
|
|
1218
|
+
children: g ? /* @__PURE__ */ J(K, { children: [
|
|
1219
1219
|
/* @__PURE__ */ q(R, {
|
|
1220
1220
|
value: y,
|
|
1221
1221
|
onChange: b,
|
|
@@ -1275,7 +1275,7 @@ function Pt({ workspace: n, identifier: r, comment: i, onReply: a }) {
|
|
|
1275
1275
|
});
|
|
1276
1276
|
}
|
|
1277
1277
|
function Ft({ workspace: e, identifier: t, comment: n }) {
|
|
1278
|
-
let { data: r = [] } = X(
|
|
1278
|
+
let { data: r = [] } = X(s(e, t)), { actorName: i } = ce(e), a = r.filter((e) => e.page && e.commentId === n.id);
|
|
1279
1279
|
return a.length === 0 ? null : /* @__PURE__ */ q("div", {
|
|
1280
1280
|
className: "mt-2 space-y-2",
|
|
1281
1281
|
children: a.map((e) => /* @__PURE__ */ q(Me, {
|
|
@@ -1298,7 +1298,7 @@ function It({ workspace: n, identifier: r, parentId: i, publicOn: a, autofocus:
|
|
|
1298
1298
|
}
|
|
1299
1299
|
})),
|
|
1300
1300
|
onSuccess: () => {
|
|
1301
|
-
m(""), g((e) => e + 1),
|
|
1301
|
+
m(""), g((e) => e + 1), I(f, n, r), s?.();
|
|
1302
1302
|
}
|
|
1303
1303
|
}), b = () => p.trim() && !y.isPending && v.pending === 0 && y.mutate();
|
|
1304
1304
|
return /* @__PURE__ */ J("div", { children: [/* @__PURE__ */ q(R, {
|