@parallelworks/tandem-web 0.142.0 → 0.143.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/_virtual/_virtual_i18n/en/common.js +105 -6
- package/_virtual/_virtual_i18n/es/common.js +105 -6
- package/_virtual/_virtual_i18n/ja/common.js +105 -6
- package/_virtual/_virtual_i18n/ko/common.js +105 -6
- package/_virtual/_virtual_i18n/zh/common.js +105 -6
- package/components/AccessGrants.js +6 -6
- package/components/ActivityTimeline.js +2 -0
- package/components/CodeHostSettings.js +25 -25
- package/components/CustomFields.js +349 -0
- package/components/DocProperties.js +8 -2
- package/components/GitHub.js +22 -22
- package/components/IssueBoard.js +48 -43
- package/components/IssueEvent.js +2 -0
- package/components/IssueFilters.js +210 -122
- package/components/IssueImport.js +1 -1
- package/components/IssueRow.js +96 -79
- package/components/IssueTemplates.js +216 -156
- package/components/IssueTypes.js +318 -0
- package/components/NewIssueDialog.js +254 -216
- package/components/SettingsNav.js +40 -35
- package/components/TeamForm.js +49 -35
- package/components/TeamRepositories.js +51 -51
- package/components/TeamWorkflow.js +8 -8
- package/components/Updates.js +8 -8
- package/lib/boardMove.js +69 -47
- package/lib/customFields.js +113 -0
- package/lib/issueDisplay.js +27 -12
- package/lib/issueList.js +166 -62
- package/lib/issueTypes.js +50 -0
- package/lib/teamTree.js +24 -0
- package/lib/views.js +13 -11
- package/package.json +1 -1
- package/pages/issues.js +331 -291
- package/routeTree.gen.js +151 -145
- package/routes/_workspace/agents/index2.js +9 -9
- package/routes/_workspace/issues/_identifier2.js +433 -370
- package/routes/_workspace/projects/_projectId3.js +213 -201
- package/routes/_workspace/settings/audit-log3.js +2 -0
- package/routes/_workspace/settings/fields.js +6 -0
- package/routes/_workspace/settings/fields2.js +30 -0
- package/routes/_workspace/settings/fields3.js +5 -0
- package/routes/_workspace/settings/groups2.js +74 -74
- package/routes/_workspace/settings/labels2.js +33 -33
- package/routes/_workspace/settings/members2.js +35 -35
- package/routes/_workspace/settings/roles2.js +24 -24
- package/routes/_workspace/settings/runners2.js +18 -18
- package/routes/_workspace/settings/sessions2.js +9 -9
- package/routes/_workspace/settings/slack2.js +8 -8
- package/routes/_workspace/settings/sso2.js +50 -50
- package/routes/_workspace/settings/tokens2.js +15 -15
- package/routes/_workspace/settings/webhooks2.js +42 -42
- package/routes/_workspace/teams/_key/settings2.js +138 -76
- package/routes/_workspace2.js +320 -318
package/routes/_workspace2.js
CHANGED
|
@@ -5,55 +5,56 @@ import { Link as r, useLocation as i, useNavigate as a } from "../lib/router.js"
|
|
|
5
5
|
import { inboxQuery as o, issuesQuery as s, meQuery as c, notificationsQuery as l, teamsQuery as ee, workspaceQuery as te } from "../api/queries.js";
|
|
6
6
|
import { AddIcon as u, AgentIcon as ne, AreaIcon as re, ChevronDownIcon as ie, CycleIcon as ae, InboxIcon as oe, LibraryIcon as se, ListViewIcon as ce, NotificationIcon as le, ProjectIcon as ue, SearchIcon as d, TriageIcon as de, UserIcon as fe, UsersIcon as f } from "../components/icons.js";
|
|
7
7
|
import { isViewAt as p } from "../lib/refs.js";
|
|
8
|
-
import { teamPageOf as
|
|
9
|
-
import { AppLauncher as
|
|
10
|
-
import { useFavorites as
|
|
11
|
-
import { copyItem as
|
|
12
|
-
import { docKey as
|
|
13
|
-
import { usePeople as
|
|
14
|
-
import { NewIssueContext as
|
|
15
|
-
import { PaletteSelectionContext as
|
|
16
|
-
import { isBuiltIn as
|
|
17
|
-
import { SettingsNav as
|
|
18
|
-
import { useSavedViews as y, useViewMenu as
|
|
19
|
-
import { EntityIcon as
|
|
20
|
-
import { CommandPalette as
|
|
21
|
-
import { DocsTree as
|
|
22
|
-
import { FavoritesNav as
|
|
23
|
-
import { HostPanelProvider as
|
|
24
|
-
import { HostActions as
|
|
25
|
-
import { HostPanel as
|
|
26
|
-
import { PersonHoverCard as
|
|
27
|
-
import { HoverCards as
|
|
28
|
-
import { Logo as
|
|
29
|
-
import { CreateTeamDialog as
|
|
30
|
-
import { NewIssueDialog as
|
|
31
|
-
import { ShareDialogHost as
|
|
32
|
-
import { hostSignOut as
|
|
33
|
-
import { useInstall as
|
|
34
|
-
import { LiveProvider as
|
|
35
|
-
import { usePushSync as
|
|
36
|
-
import { useShortcuts as
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
40
|
-
import {
|
|
8
|
+
import { teamPageOf as m, teamPath as h } from "../lib/teamPaths.js";
|
|
9
|
+
import { AppLauncher as pe } from "../components/AppLauncher.js";
|
|
10
|
+
import { useFavorites as me } from "../lib/favorites.js";
|
|
11
|
+
import { copyItem as he, useLinkItems as ge } from "../lib/menus.js";
|
|
12
|
+
import { docKey as g } from "../lib/docs.js";
|
|
13
|
+
import { usePeople as _ } from "../lib/people.js";
|
|
14
|
+
import { NewIssueContext as _e } from "../lib/newIssue.js";
|
|
15
|
+
import { PaletteSelectionContext as ve } from "../lib/palette.js";
|
|
16
|
+
import { isBuiltIn as ye, useCan as be } from "../lib/roles.js";
|
|
17
|
+
import { SettingsNav as xe, navItem as Se, navOn as v } from "../components/SettingsNav.js";
|
|
18
|
+
import { useSavedViews as y, useViewMenu as Ce, viewSearch as we } from "../lib/views.js";
|
|
19
|
+
import { EntityIcon as Te } from "../components/EntityIcon.js";
|
|
20
|
+
import { CommandPalette as Ee } from "../components/CommandPalette.js";
|
|
21
|
+
import { DocsTree as De } from "../components/DocsTree.js";
|
|
22
|
+
import { FavoritesNav as Oe } from "../components/FavoritesNav.js";
|
|
23
|
+
import { HostPanelProvider as ke, useHostPanel as b } from "../lib/hostPanel.js";
|
|
24
|
+
import { HostActions as x } from "../components/HostActions.js";
|
|
25
|
+
import { HostPanel as S } from "../components/HostPanel.js";
|
|
26
|
+
import { PersonHoverCard as Ae } from "../components/PersonHoverCard.js";
|
|
27
|
+
import { HoverCards as je } from "../components/HoverCards.js";
|
|
28
|
+
import { Logo as Me } from "../components/Logo.js";
|
|
29
|
+
import { CreateTeamDialog as Ne } from "../components/TeamForm.js";
|
|
30
|
+
import { NewIssueDialog as Pe } from "../components/NewIssueDialog.js";
|
|
31
|
+
import { ShareDialogHost as Fe } from "../components/ShareDialog.js";
|
|
32
|
+
import { hostSignOut as Ie } from "../lib/hostSignOut.js";
|
|
33
|
+
import { useInstall as Le } from "../lib/install.js";
|
|
34
|
+
import { LiveProvider as Re, useLive as ze } from "../lib/live.js";
|
|
35
|
+
import { usePushSync as Be } from "../lib/notifications.js";
|
|
36
|
+
import { useShortcuts as Ve } from "../lib/shortcuts.js";
|
|
37
|
+
import { teamTree as He } from "../lib/teamTree.js";
|
|
38
|
+
import { ActionMenu as Ue, Avatar as We, AvatarGroup as C, Combobox as Ge, CountBadge as w, IconButton as T, Kbd as Ke, Tooltip as E, menuDivider as D, useOpenMenu as qe } from "@parallelworks/ui";
|
|
39
|
+
import { Outlet as Je, useParams as Ye } from "@tanstack/react-router";
|
|
40
|
+
import { Fragment as Xe, Suspense as Ze, useCallback as Qe, useEffect as O, useMemo as $e, useState as k } from "react";
|
|
41
|
+
import { useLocale as et, useTranslations as A } from "use-intl";
|
|
41
42
|
import { Fragment as j, jsx as M, jsxs as N } from "react/jsx-runtime";
|
|
42
|
-
import { useQuery as P, useQueryClient as
|
|
43
|
-
import { MoreButton as
|
|
44
|
-
import { AppFrame as
|
|
45
|
-
import { createPortal as
|
|
43
|
+
import { useQuery as P, useQueryClient as tt, useSuspenseQuery as F } from "@tanstack/react-query";
|
|
44
|
+
import { MoreButton as nt } from "@parallelworks/ui/list";
|
|
45
|
+
import { AppFrame as rt, AppFrameToggle as I, useAppFrame as it } from "@parallelworks/ui/app-frame";
|
|
46
|
+
import { createPortal as L } from "react-dom";
|
|
46
47
|
// src/routes/$workspace.tsx?tsr-split=component
|
|
47
|
-
function
|
|
48
|
+
function at(e, t) {
|
|
48
49
|
let [n, r] = e.slice(`/${t}/docs/`.length).split("/");
|
|
49
|
-
return e.startsWith(`/${t}/docs/`) && n && r === void 0 ?
|
|
50
|
+
return e.startsWith(`/${t}/docs/`) && n && r === void 0 ? g(n) : void 0;
|
|
50
51
|
}
|
|
51
|
-
var
|
|
52
|
-
function
|
|
53
|
-
let { workspace: f } = n.useParams(), { data: p } = F(c), { data:
|
|
52
|
+
var R = { className: v }, z = "inline-flex h-8 min-w-8 items-center justify-center rounded-md border border-[color-mix(in_oklab,currentColor_20%,transparent)] bg-[color-mix(in_oklab,currentColor_6%,transparent)] text-sm font-medium hover:bg-[color-mix(in_oklab,currentColor_12%,transparent)]", ot = "absolute top-1.5 right-3 size-2 rounded-full bg-primary", B = (...e) => e.filter(Boolean).join(" ");
|
|
53
|
+
function V() {
|
|
54
|
+
let { workspace: f } = n.useParams(), { data: p } = F(c), { data: g } = F(te(f)), { data: _ } = F(ee(f)), v = t(), [y, Ce] = k(null), [we, b] = k(!1), S = be(f, "manage_teams"), { canInstall: Ae, install: ze } = Le(), C = a(), it = tt(), L = qe(), V = me(f), U = A("workspace"), W = A("common"), yt = et(), G = A("favorites"), bt = A("roles"), K = ge(), xt = (e) => [
|
|
54
55
|
{
|
|
55
|
-
label:
|
|
56
|
-
onClick: () =>
|
|
56
|
+
label: W("open"),
|
|
57
|
+
onClick: () => C({
|
|
57
58
|
to: "/$workspace/teams/$key/issues",
|
|
58
59
|
params: {
|
|
59
60
|
workspace: f,
|
|
@@ -62,13 +63,13 @@ function H() {
|
|
|
62
63
|
})
|
|
63
64
|
},
|
|
64
65
|
{
|
|
65
|
-
label:
|
|
66
|
+
label: U("newIssueInTeam"),
|
|
66
67
|
shortcut: "C",
|
|
67
68
|
onClick: () => Q({ team: e.key })
|
|
68
69
|
},
|
|
69
70
|
...e.cyclesEnabled ? [{
|
|
70
|
-
label:
|
|
71
|
-
onClick: () =>
|
|
71
|
+
label: U("cycles"),
|
|
72
|
+
onClick: () => C({
|
|
72
73
|
to: "/$workspace/teams/$key/cycles",
|
|
73
74
|
params: {
|
|
74
75
|
workspace: f,
|
|
@@ -77,8 +78,8 @@ function H() {
|
|
|
77
78
|
})
|
|
78
79
|
}] : [],
|
|
79
80
|
{
|
|
80
|
-
label:
|
|
81
|
-
onClick: () =>
|
|
81
|
+
label: U("teamSettings"),
|
|
82
|
+
onClick: () => C({
|
|
82
83
|
to: "/$workspace/teams/$key/settings",
|
|
83
84
|
params: {
|
|
84
85
|
workspace: f,
|
|
@@ -87,110 +88,110 @@ function H() {
|
|
|
87
88
|
})
|
|
88
89
|
},
|
|
89
90
|
{
|
|
90
|
-
label:
|
|
91
|
-
onClick: () =>
|
|
91
|
+
label: V.find("team", e.id) ? G("remove") : G("add"),
|
|
92
|
+
onClick: () => V.toggle("team", e.id)
|
|
92
93
|
},
|
|
93
94
|
D,
|
|
94
|
-
...
|
|
95
|
-
|
|
96
|
-
],
|
|
97
|
-
label:
|
|
98
|
-
onClick: () =>
|
|
99
|
-
}),
|
|
100
|
-
let e =
|
|
95
|
+
...K(h(f, e.key, "issues")),
|
|
96
|
+
he(W("copyKey"), e.key)
|
|
97
|
+
], q = (e) => ({
|
|
98
|
+
label: V.find("page", e) ? G("remove") : G("add"),
|
|
99
|
+
onClick: () => V.toggle("page", e)
|
|
100
|
+
}), J = i(), [St, Ct] = k(() => mt().expanded), [wt, Tt] = k(() => mt().width), Et = $e(() => {
|
|
101
|
+
let e = m(J.pathname, f), t = e?.page === "issues" ? e.team : void 0, n = J.pathname === `/${f}/issues` || t !== void 0, r = J.search, i = n && !r.saved;
|
|
101
102
|
return {
|
|
102
103
|
mine: i && !t && (r.assignee === p?.user.username || r.creator === p?.user.username),
|
|
103
104
|
team: i && !r.assignee ? t : void 0,
|
|
104
105
|
saved: n ? r.saved : void 0
|
|
105
106
|
};
|
|
106
107
|
}, [
|
|
107
|
-
|
|
108
|
-
|
|
108
|
+
J.pathname,
|
|
109
|
+
J.search,
|
|
109
110
|
f,
|
|
110
111
|
p?.user.username
|
|
111
|
-
]),
|
|
112
|
-
let n =
|
|
112
|
+
]), Y = (e, t) => {
|
|
113
|
+
let n = m(J.pathname, f);
|
|
113
114
|
return n?.page === e && n.team === t;
|
|
114
|
-
}, [
|
|
115
|
+
}, [Dt, Ot] = k(() => pt(f)), kt = (e) => Ot((t) => {
|
|
115
116
|
let n = new Set(t);
|
|
116
|
-
return n.delete(e) || n.add(e),
|
|
117
|
-
}),
|
|
117
|
+
return n.delete(e) || n.add(e), gt(f, n), n;
|
|
118
|
+
}), X = J.pathname.startsWith(`/${f}/settings`), { data: At = [] } = P(o(f)), jt = _.some((e) => e.triageEnabled && !e.archivedAt), { data: Mt } = P({
|
|
118
119
|
...s(f, { triage: "only" }),
|
|
119
|
-
enabled:
|
|
120
|
-
}),
|
|
121
|
-
|
|
122
|
-
let { key:
|
|
123
|
-
...
|
|
120
|
+
enabled: jt
|
|
121
|
+
}), Nt = (e) => Mt?.issues.filter((t) => t.teamId === e).length ?? 0, { data: Pt } = P(l(f)), Ft = Pt?.unread ?? 0;
|
|
122
|
+
Be();
|
|
123
|
+
let { key: Z } = Ye({ strict: !1 }), Q = Qe((e) => Ce({
|
|
124
|
+
...Z && { team: Z },
|
|
124
125
|
...e
|
|
125
|
-
}), [
|
|
126
|
-
|
|
127
|
-
let [
|
|
126
|
+
}), [Z]);
|
|
127
|
+
Ve({ c: () => Q() }, y === null);
|
|
128
|
+
let [It, $] = k(!1), [Lt, Rt] = k([]);
|
|
128
129
|
if (O(() => {
|
|
129
130
|
let e = (e) => {
|
|
130
|
-
!e.metaKey && !e.ctrlKey || e.altKey || e.shiftKey || e.key.toLowerCase() !== "k" || e.defaultPrevented || (e.preventDefault(), $((e) => !e)), !e.metaKey && !e.ctrlKey || e.altKey || e.shiftKey || e.key.toLowerCase() !== "f" || e.defaultPrevented ||
|
|
131
|
+
!e.metaKey && !e.ctrlKey || e.altKey || e.shiftKey || e.key.toLowerCase() !== "k" || e.defaultPrevented || (e.preventDefault(), $((e) => !e)), !e.metaKey && !e.ctrlKey || e.altKey || e.shiftKey || e.key.toLowerCase() !== "f" || e.defaultPrevented || _t() || (e.preventDefault(), $(!0));
|
|
131
132
|
};
|
|
132
133
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
133
134
|
}, []), !p) return null;
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
},
|
|
137
|
-
let t = /* @__PURE__ */ M(
|
|
135
|
+
let zt = p.mode === "platform", Bt = Ae && !zt, Vt = p.signOutUrl, Ht = !v && (!zt || Vt !== void 0), Ut = async () => {
|
|
136
|
+
Vt === void 0 ? (await e.POST("/api/v1/auth/logout"), it.clear(), C({ to: "/login" })) : await Ie(Vt);
|
|
137
|
+
}, Wt = X ? void 0 : ({ expanded: e }) => {
|
|
138
|
+
let t = /* @__PURE__ */ M(Ge, {
|
|
138
139
|
items: [...p.workspaces.map((e) => ({
|
|
139
140
|
value: e.slug,
|
|
140
141
|
label: e.name,
|
|
141
|
-
hint:
|
|
142
|
+
hint: ye(e.role) ? bt(`${e.role}.name`) : bt("custom")
|
|
142
143
|
})), ...p.canCreateWorkspace ? [{
|
|
143
144
|
value: "__new",
|
|
144
|
-
label:
|
|
145
|
+
label: U("createWorkspace")
|
|
145
146
|
}] : []],
|
|
146
147
|
value: f,
|
|
147
|
-
onValueChange: (e) =>
|
|
148
|
+
onValueChange: (e) => C(e === "__new" ? { to: "/new" } : {
|
|
148
149
|
to: "/$workspace/issues",
|
|
149
150
|
params: { workspace: e ?? f }
|
|
150
151
|
}),
|
|
151
|
-
placeholder:
|
|
152
|
-
"aria-label":
|
|
152
|
+
placeholder: U("switchWorkspacePlaceholder"),
|
|
153
|
+
"aria-label": U("switchWorkspace"),
|
|
153
154
|
trigger: /* @__PURE__ */ N("button", {
|
|
154
155
|
type: "button",
|
|
155
|
-
"aria-label": e ? void 0 :
|
|
156
|
-
onContextMenu: (e) =>
|
|
156
|
+
"aria-label": e ? void 0 : g.name,
|
|
157
|
+
onContextMenu: (e) => L(e, [
|
|
157
158
|
{
|
|
158
|
-
label:
|
|
159
|
-
onClick: () =>
|
|
159
|
+
label: U("workspaceSettings"),
|
|
160
|
+
onClick: () => C({
|
|
160
161
|
to: "/$workspace/settings",
|
|
161
162
|
params: { workspace: f }
|
|
162
163
|
})
|
|
163
164
|
},
|
|
164
165
|
{
|
|
165
|
-
label:
|
|
166
|
+
label: U("switchWorkspace"),
|
|
166
167
|
items: [...p.workspaces.map((e) => ({
|
|
167
168
|
label: e.name,
|
|
168
169
|
checked: e.slug === f,
|
|
169
|
-
onClick: () =>
|
|
170
|
+
onClick: () => C({
|
|
170
171
|
to: "/$workspace/issues",
|
|
171
172
|
params: { workspace: e.slug }
|
|
172
173
|
})
|
|
173
174
|
})), ...p.canCreateWorkspace ? [D, {
|
|
174
|
-
label:
|
|
175
|
-
onClick: () =>
|
|
175
|
+
label: U("createWorkspace"),
|
|
176
|
+
onClick: () => C({ to: "/new" })
|
|
176
177
|
}] : []]
|
|
177
178
|
},
|
|
178
179
|
D,
|
|
179
|
-
|
|
180
|
-
...
|
|
181
|
-
label:
|
|
182
|
-
onClick:
|
|
180
|
+
he(U("copyWorkspaceSlug"), f),
|
|
181
|
+
...Ht ? [D, {
|
|
182
|
+
label: U("signOut"),
|
|
183
|
+
onClick: Ut
|
|
183
184
|
}] : []
|
|
184
185
|
]),
|
|
185
|
-
className:
|
|
186
|
-
children: [
|
|
187
|
-
icon:
|
|
188
|
-
color:
|
|
189
|
-
name:
|
|
186
|
+
className: B("flex h-9 items-center gap-2 rounded-md text-left hover:bg-muted", e ? "w-full px-2" : "w-9 justify-center"),
|
|
187
|
+
children: [g.icon ? /* @__PURE__ */ M(Te, {
|
|
188
|
+
icon: g.icon,
|
|
189
|
+
color: g.color,
|
|
190
|
+
name: g.name,
|
|
190
191
|
className: "size-6 text-base"
|
|
191
|
-
}) : /* @__PURE__ */ M(
|
|
192
|
+
}) : /* @__PURE__ */ M(Me, { withName: !1 }), e && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("span", {
|
|
192
193
|
className: "min-w-0 flex-1 truncate text-sm font-semibold",
|
|
193
|
-
children:
|
|
194
|
+
children: g.name
|
|
194
195
|
}), /* @__PURE__ */ M(ie, { className: "size-3.5 text-muted-foreground" })] })]
|
|
195
196
|
})
|
|
196
197
|
});
|
|
@@ -201,8 +202,8 @@ function H() {
|
|
|
201
202
|
className: "min-w-0 flex-1",
|
|
202
203
|
children: t
|
|
203
204
|
}),
|
|
204
|
-
!v && /* @__PURE__ */ M(
|
|
205
|
-
!v && /* @__PURE__ */ M(
|
|
205
|
+
!v && /* @__PURE__ */ M(x, { className: "hidden md:flex" }),
|
|
206
|
+
!v && /* @__PURE__ */ M(pe, {
|
|
206
207
|
apps: p.apps ?? [],
|
|
207
208
|
className: "hidden md:block"
|
|
208
209
|
})
|
|
@@ -212,28 +213,28 @@ function H() {
|
|
|
212
213
|
children: [/* @__PURE__ */ N("button", {
|
|
213
214
|
type: "button",
|
|
214
215
|
onClick: () => Q(),
|
|
215
|
-
className:
|
|
216
|
+
className: B(z, "min-w-0 flex-1 gap-2 px-2"),
|
|
216
217
|
children: [
|
|
217
218
|
/* @__PURE__ */ M(u, { className: "size-3.5" }),
|
|
218
219
|
/* @__PURE__ */ M("span", {
|
|
219
220
|
className: "flex-1 text-left",
|
|
220
|
-
children:
|
|
221
|
+
children: U("newIssue")
|
|
221
222
|
}),
|
|
222
|
-
/* @__PURE__ */ M(
|
|
223
|
+
/* @__PURE__ */ M(Ke, {
|
|
223
224
|
keys: "C",
|
|
224
225
|
size: "xs",
|
|
225
226
|
variant: "plain"
|
|
226
227
|
})
|
|
227
228
|
]
|
|
228
229
|
}), /* @__PURE__ */ M(E, {
|
|
229
|
-
content:
|
|
230
|
+
content: U("openPalette"),
|
|
230
231
|
shortcut: "Mod+K",
|
|
231
232
|
children: /* @__PURE__ */ M("button", {
|
|
232
233
|
type: "button",
|
|
233
234
|
onClick: () => $(!0),
|
|
234
|
-
"aria-label":
|
|
235
|
+
"aria-label": U("openPalette"),
|
|
235
236
|
"aria-keyshortcuts": "Meta+K Control+K",
|
|
236
|
-
className:
|
|
237
|
+
className: z,
|
|
237
238
|
children: /* @__PURE__ */ M(d, { className: "size-3.5" })
|
|
238
239
|
})
|
|
239
240
|
})]
|
|
@@ -241,143 +242,143 @@ function H() {
|
|
|
241
242
|
className: "flex flex-col items-center gap-1.5",
|
|
242
243
|
children: [
|
|
243
244
|
t,
|
|
244
|
-
!v && /* @__PURE__ */ M(
|
|
245
|
-
!v && /* @__PURE__ */ M(
|
|
245
|
+
!v && /* @__PURE__ */ M(pe, { apps: p.apps ?? [] }),
|
|
246
|
+
!v && /* @__PURE__ */ M(x, { className: "flex-col" }),
|
|
246
247
|
/* @__PURE__ */ M(E, {
|
|
247
|
-
content:
|
|
248
|
+
content: U("newIssue"),
|
|
248
249
|
shortcut: "C",
|
|
249
250
|
side: "right",
|
|
250
251
|
children: /* @__PURE__ */ M("button", {
|
|
251
252
|
type: "button",
|
|
252
253
|
onClick: () => Q(),
|
|
253
|
-
"aria-label":
|
|
254
|
-
className:
|
|
254
|
+
"aria-label": U("newIssue"),
|
|
255
|
+
className: z,
|
|
255
256
|
children: /* @__PURE__ */ M(u, { className: "size-3.5" })
|
|
256
257
|
})
|
|
257
258
|
}),
|
|
258
259
|
/* @__PURE__ */ M(E, {
|
|
259
|
-
content:
|
|
260
|
+
content: U("openPalette"),
|
|
260
261
|
shortcut: "Mod+K",
|
|
261
262
|
side: "right",
|
|
262
263
|
children: /* @__PURE__ */ M("button", {
|
|
263
264
|
type: "button",
|
|
264
265
|
onClick: () => $(!0),
|
|
265
|
-
"aria-label":
|
|
266
|
+
"aria-label": U("openPalette"),
|
|
266
267
|
"aria-keyshortcuts": "Meta+K Control+K",
|
|
267
|
-
className:
|
|
268
|
+
className: z,
|
|
268
269
|
children: /* @__PURE__ */ M(d, { className: "size-3.5" })
|
|
269
270
|
})
|
|
270
271
|
})
|
|
271
272
|
]
|
|
272
273
|
});
|
|
273
|
-
},
|
|
274
|
-
if (
|
|
275
|
-
let n = !e, i =
|
|
274
|
+
}, Gt = ({ expanded: e, mobileOpen: t }) => {
|
|
275
|
+
if (X) return /* @__PURE__ */ M(xe, { workspace: f });
|
|
276
|
+
let n = !e, i = B(Se, n && "relative justify-center px-0"), a = (e) => n ? /* @__PURE__ */ M("span", {
|
|
276
277
|
className: "sr-only",
|
|
277
278
|
children: e
|
|
278
279
|
}) : e;
|
|
279
280
|
return /* @__PURE__ */ N(j, { children: [
|
|
280
|
-
t && /* @__PURE__ */ M(
|
|
281
|
+
t && /* @__PURE__ */ M(st, {}),
|
|
281
282
|
/* @__PURE__ */ N("nav", {
|
|
282
283
|
className: "space-y-0.5",
|
|
283
|
-
"aria-label":
|
|
284
|
+
"aria-label": U("workspaceNav"),
|
|
284
285
|
children: [
|
|
285
|
-
/* @__PURE__ */ M(
|
|
286
|
+
/* @__PURE__ */ M(H, {
|
|
286
287
|
rail: n,
|
|
287
|
-
label:
|
|
288
|
+
label: U("notifications"),
|
|
288
289
|
children: /* @__PURE__ */ N(r, {
|
|
289
290
|
to: "/$workspace/notifications",
|
|
290
291
|
params: { workspace: f },
|
|
291
|
-
onContextMenu: (e) =>
|
|
292
|
+
onContextMenu: (e) => L(e, K(`/${f}/notifications`)),
|
|
292
293
|
className: i,
|
|
293
|
-
activeProps:
|
|
294
|
-
children: [/* @__PURE__ */ M(le, { className: "size-4" }), n ? /* @__PURE__ */ N(j, { children: [a(
|
|
294
|
+
activeProps: R,
|
|
295
|
+
children: [/* @__PURE__ */ M(le, { className: "size-4" }), n ? /* @__PURE__ */ N(j, { children: [a(U("notifications")), Ft > 0 && /* @__PURE__ */ M("span", { className: ot })] }) : /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("span", {
|
|
295
296
|
className: "flex-1",
|
|
296
|
-
children:
|
|
297
|
-
}), /* @__PURE__ */ M(
|
|
298
|
-
count:
|
|
299
|
-
locale:
|
|
300
|
-
label:
|
|
297
|
+
children: U("notifications")
|
|
298
|
+
}), /* @__PURE__ */ M(w, {
|
|
299
|
+
count: Ft,
|
|
300
|
+
locale: yt,
|
|
301
|
+
label: U("unreadCount")
|
|
301
302
|
})] })]
|
|
302
303
|
})
|
|
303
304
|
}),
|
|
304
|
-
/* @__PURE__ */ M(
|
|
305
|
+
/* @__PURE__ */ M(H, {
|
|
305
306
|
rail: n,
|
|
306
|
-
label:
|
|
307
|
+
label: U("myIssues"),
|
|
307
308
|
children: /* @__PURE__ */ N(r, {
|
|
308
309
|
to: "/$workspace/issues",
|
|
309
310
|
params: { workspace: f },
|
|
310
311
|
search: { assignee: p.user.username },
|
|
311
|
-
onContextMenu: (e) =>
|
|
312
|
-
|
|
312
|
+
onContextMenu: (e) => L(e, [
|
|
313
|
+
q("my-issues"),
|
|
313
314
|
D,
|
|
314
|
-
...
|
|
315
|
+
...K(`/${f}/issues?assignee=${p.user.username}`)
|
|
315
316
|
]),
|
|
316
|
-
className:
|
|
317
|
+
className: B(i, Et.mine && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
317
318
|
children: [
|
|
318
319
|
/* @__PURE__ */ M(fe, { className: "size-4" }),
|
|
319
320
|
" ",
|
|
320
|
-
a(
|
|
321
|
+
a(U("myIssues"))
|
|
321
322
|
]
|
|
322
323
|
})
|
|
323
324
|
}),
|
|
324
|
-
/* @__PURE__ */ M(
|
|
325
|
+
/* @__PURE__ */ M(H, {
|
|
325
326
|
rail: n,
|
|
326
|
-
label:
|
|
327
|
+
label: U("projects"),
|
|
327
328
|
children: /* @__PURE__ */ N(r, {
|
|
328
329
|
to: "/$workspace/projects",
|
|
329
330
|
params: { workspace: f },
|
|
330
|
-
onContextMenu: (e) =>
|
|
331
|
-
|
|
331
|
+
onContextMenu: (e) => L(e, [
|
|
332
|
+
q("projects"),
|
|
332
333
|
D,
|
|
333
|
-
...
|
|
334
|
+
...K(`/${f}/projects`)
|
|
334
335
|
]),
|
|
335
336
|
className: i,
|
|
336
|
-
activeProps:
|
|
337
|
+
activeProps: R,
|
|
337
338
|
children: [
|
|
338
339
|
/* @__PURE__ */ M(ue, { className: "size-4" }),
|
|
339
340
|
" ",
|
|
340
|
-
a(
|
|
341
|
+
a(U("projects"))
|
|
341
342
|
]
|
|
342
343
|
})
|
|
343
344
|
}),
|
|
344
|
-
/* @__PURE__ */ M(
|
|
345
|
+
/* @__PURE__ */ M(H, {
|
|
345
346
|
rail: n,
|
|
346
|
-
label:
|
|
347
|
+
label: U("knowledge"),
|
|
347
348
|
children: /* @__PURE__ */ N(r, {
|
|
348
349
|
to: "/$workspace/knowledge",
|
|
349
350
|
params: { workspace: f },
|
|
350
|
-
onContextMenu: (e) =>
|
|
351
|
-
|
|
351
|
+
onContextMenu: (e) => L(e, [
|
|
352
|
+
q("knowledge"),
|
|
352
353
|
D,
|
|
353
|
-
...
|
|
354
|
+
...K(`/${f}/knowledge`)
|
|
354
355
|
]),
|
|
355
356
|
className: i,
|
|
356
|
-
activeProps:
|
|
357
|
+
activeProps: R,
|
|
357
358
|
children: [
|
|
358
359
|
/* @__PURE__ */ M(se, { className: "size-4" }),
|
|
359
360
|
" ",
|
|
360
|
-
a(
|
|
361
|
+
a(U("knowledge"))
|
|
361
362
|
]
|
|
362
363
|
})
|
|
363
364
|
}),
|
|
364
|
-
/* @__PURE__ */ M(
|
|
365
|
+
/* @__PURE__ */ M(H, {
|
|
365
366
|
rail: n,
|
|
366
|
-
label:
|
|
367
|
+
label: U("agents"),
|
|
367
368
|
children: /* @__PURE__ */ N(r, {
|
|
368
369
|
to: "/$workspace/agents",
|
|
369
370
|
params: { workspace: f },
|
|
370
|
-
onContextMenu: (e) =>
|
|
371
|
-
|
|
371
|
+
onContextMenu: (e) => L(e, [
|
|
372
|
+
q("agents"),
|
|
372
373
|
D,
|
|
373
|
-
...
|
|
374
|
+
...K(`/${f}/agents`)
|
|
374
375
|
]),
|
|
375
376
|
className: i,
|
|
376
|
-
activeProps:
|
|
377
|
+
activeProps: R,
|
|
377
378
|
children: [
|
|
378
379
|
/* @__PURE__ */ M(ne, { className: "size-4" }),
|
|
379
380
|
" ",
|
|
380
|
-
a(
|
|
381
|
+
a(U("agents"))
|
|
381
382
|
]
|
|
382
383
|
})
|
|
383
384
|
})
|
|
@@ -385,8 +386,8 @@ function H() {
|
|
|
385
386
|
}),
|
|
386
387
|
n ? /* @__PURE__ */ M("nav", {
|
|
387
388
|
className: "mt-4 space-y-0.5 border-t border-border pt-4",
|
|
388
|
-
"aria-label":
|
|
389
|
-
children:
|
|
389
|
+
"aria-label": U("teams"),
|
|
390
|
+
children: _.filter((e) => !e.archivedAt).map((e) => /* @__PURE__ */ M(H, {
|
|
390
391
|
rail: !0,
|
|
391
392
|
label: e.name,
|
|
392
393
|
children: /* @__PURE__ */ N(r, {
|
|
@@ -395,56 +396,57 @@ function H() {
|
|
|
395
396
|
workspace: f,
|
|
396
397
|
key: e.key
|
|
397
398
|
},
|
|
398
|
-
onContextMenu: (t) =>
|
|
399
|
-
className:
|
|
399
|
+
onContextMenu: (t) => L(t, xt(e)),
|
|
400
|
+
className: B(i, m(J.pathname, f)?.team === e.key && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
400
401
|
children: [
|
|
401
|
-
/* @__PURE__ */ M(
|
|
402
|
+
/* @__PURE__ */ M(Te, {
|
|
402
403
|
icon: e.icon,
|
|
403
404
|
color: e.color,
|
|
404
405
|
name: e.name
|
|
405
406
|
}),
|
|
406
407
|
a(e.name),
|
|
407
|
-
|
|
408
|
+
Nt(e.id) > 0 && /* @__PURE__ */ M("span", { className: ot })
|
|
408
409
|
]
|
|
409
410
|
})
|
|
410
411
|
}, e.id))
|
|
411
412
|
}) : /* @__PURE__ */ N(j, { children: [
|
|
412
|
-
/* @__PURE__ */ M(
|
|
413
|
+
/* @__PURE__ */ M(ft, {
|
|
413
414
|
workspace: f,
|
|
414
|
-
current:
|
|
415
|
+
current: Et.saved
|
|
415
416
|
}),
|
|
416
|
-
/* @__PURE__ */ M(
|
|
417
|
+
/* @__PURE__ */ M(Oe, {
|
|
417
418
|
workspace: f,
|
|
418
419
|
myUsername: p.user.username,
|
|
419
|
-
currentHref:
|
|
420
|
+
currentHref: J.pathname + J.searchStr
|
|
420
421
|
}),
|
|
421
422
|
/* @__PURE__ */ N("div", {
|
|
422
423
|
className: "group mt-6 flex h-6 items-center pr-1 pl-2",
|
|
423
424
|
children: [/* @__PURE__ */ M("p", {
|
|
424
425
|
className: "flex-1 text-xs font-medium text-muted-foreground",
|
|
425
|
-
children:
|
|
426
|
-
}),
|
|
426
|
+
children: U("teams")
|
|
427
|
+
}), S && /* @__PURE__ */ M(T, {
|
|
427
428
|
variant: "ghost",
|
|
428
429
|
size: "xs",
|
|
429
430
|
icon: /* @__PURE__ */ M(u, {}),
|
|
430
|
-
label:
|
|
431
|
-
onClick: () =>
|
|
431
|
+
label: U("createTeam"),
|
|
432
|
+
onClick: () => b(!0),
|
|
432
433
|
className: "opacity-0 group-hover:opacity-100 focus-visible:opacity-100"
|
|
433
434
|
})]
|
|
434
435
|
}),
|
|
435
436
|
/* @__PURE__ */ N("nav", {
|
|
436
437
|
className: "mt-1 space-y-0.5",
|
|
437
|
-
"aria-label":
|
|
438
|
-
children: [
|
|
439
|
-
className:
|
|
438
|
+
"aria-label": U("teams"),
|
|
439
|
+
children: [He(_.filter((e) => !e.archivedAt)).map(({ team: e, depth: t }) => /* @__PURE__ */ N(Xe, { children: [/* @__PURE__ */ N("div", {
|
|
440
|
+
className: B(Se, "group gap-0 pr-1 pl-0"),
|
|
441
|
+
style: t ? { marginLeft: `${t * .75}rem` } : void 0,
|
|
440
442
|
children: [/* @__PURE__ */ N("button", {
|
|
441
443
|
type: "button",
|
|
442
|
-
onClick: () =>
|
|
443
|
-
onContextMenu: (t) =>
|
|
444
|
-
"aria-expanded": !
|
|
444
|
+
onClick: () => kt(e.key),
|
|
445
|
+
onContextMenu: (t) => L(t, xt(e)),
|
|
446
|
+
"aria-expanded": !Dt.has(e.key),
|
|
445
447
|
className: "flex h-full min-w-0 flex-1 items-center gap-2.5 pl-2 text-left",
|
|
446
448
|
children: [
|
|
447
|
-
/* @__PURE__ */ M(
|
|
449
|
+
/* @__PURE__ */ M(Te, {
|
|
448
450
|
icon: e.icon,
|
|
449
451
|
color: e.color,
|
|
450
452
|
name: e.name
|
|
@@ -453,31 +455,31 @@ function H() {
|
|
|
453
455
|
className: "truncate",
|
|
454
456
|
children: e.name
|
|
455
457
|
}),
|
|
456
|
-
/* @__PURE__ */ M(ie, { className:
|
|
458
|
+
/* @__PURE__ */ M(ie, { className: B("size-3 shrink-0 text-muted-foreground transition-transform", Dt.has(e.key) && "-rotate-90") })
|
|
457
459
|
]
|
|
458
|
-
}), /* @__PURE__ */ M(
|
|
459
|
-
items: () =>
|
|
460
|
-
label:
|
|
460
|
+
}), /* @__PURE__ */ M(nt, {
|
|
461
|
+
items: () => xt(e),
|
|
462
|
+
label: W("moreActionsFor", { name: e.name })
|
|
461
463
|
})]
|
|
462
|
-
}), !
|
|
464
|
+
}), !Dt.has(e.key) && /* @__PURE__ */ N(j, { children: [
|
|
463
465
|
e.triageEnabled && /* @__PURE__ */ N(r, {
|
|
464
466
|
to: "/$workspace/teams/$key/triage",
|
|
465
467
|
params: {
|
|
466
468
|
workspace: f,
|
|
467
469
|
key: e.key
|
|
468
470
|
},
|
|
469
|
-
onContextMenu: (t) =>
|
|
470
|
-
className:
|
|
471
|
+
onContextMenu: (t) => L(t, K(h(f, e.key, "triage"))),
|
|
472
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8", Y("triage", e.key) && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
471
473
|
children: [
|
|
472
474
|
/* @__PURE__ */ M(de, { className: "size-4" }),
|
|
473
475
|
/* @__PURE__ */ M("span", {
|
|
474
476
|
className: "flex-1",
|
|
475
|
-
children:
|
|
477
|
+
children: U("triage")
|
|
476
478
|
}),
|
|
477
|
-
/* @__PURE__ */ M(
|
|
478
|
-
count:
|
|
479
|
-
locale:
|
|
480
|
-
label:
|
|
479
|
+
/* @__PURE__ */ M(w, {
|
|
480
|
+
count: Nt(e.id),
|
|
481
|
+
locale: yt,
|
|
482
|
+
label: U("triageCount")
|
|
481
483
|
})
|
|
482
484
|
]
|
|
483
485
|
}),
|
|
@@ -487,12 +489,12 @@ function H() {
|
|
|
487
489
|
workspace: f,
|
|
488
490
|
key: e.key
|
|
489
491
|
},
|
|
490
|
-
onContextMenu: (t) =>
|
|
491
|
-
className:
|
|
492
|
+
onContextMenu: (t) => L(t, K(h(f, e.key, "issues"))),
|
|
493
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8", Et.team === e.key && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
492
494
|
children: [
|
|
493
495
|
/* @__PURE__ */ M(ce, { className: "size-4" }),
|
|
494
496
|
" ",
|
|
495
|
-
|
|
497
|
+
U("issues")
|
|
496
498
|
]
|
|
497
499
|
}),
|
|
498
500
|
/* @__PURE__ */ N(r, {
|
|
@@ -501,12 +503,12 @@ function H() {
|
|
|
501
503
|
workspace: f,
|
|
502
504
|
key: e.key
|
|
503
505
|
},
|
|
504
|
-
onContextMenu: (t) =>
|
|
505
|
-
className:
|
|
506
|
+
onContextMenu: (t) => L(t, K(h(f, e.key, "projects"))),
|
|
507
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8", Y("projects", e.key) && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
506
508
|
children: [
|
|
507
509
|
/* @__PURE__ */ M(ue, { className: "size-4" }),
|
|
508
510
|
" ",
|
|
509
|
-
|
|
511
|
+
U("projects")
|
|
510
512
|
]
|
|
511
513
|
}),
|
|
512
514
|
/* @__PURE__ */ N(r, {
|
|
@@ -515,12 +517,12 @@ function H() {
|
|
|
515
517
|
workspace: f,
|
|
516
518
|
key: e.key
|
|
517
519
|
},
|
|
518
|
-
onContextMenu: (t) =>
|
|
519
|
-
className:
|
|
520
|
+
onContextMenu: (t) => L(t, K(h(f, e.key, "areas"))),
|
|
521
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8", Y("areas", e.key) && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
520
522
|
children: [
|
|
521
523
|
/* @__PURE__ */ M(re, { className: "size-4" }),
|
|
522
524
|
" ",
|
|
523
|
-
|
|
525
|
+
U("areas")
|
|
524
526
|
]
|
|
525
527
|
}),
|
|
526
528
|
/* @__PURE__ */ N(r, {
|
|
@@ -529,26 +531,26 @@ function H() {
|
|
|
529
531
|
workspace: f,
|
|
530
532
|
key: e.key
|
|
531
533
|
},
|
|
532
|
-
onContextMenu: (t) =>
|
|
533
|
-
className:
|
|
534
|
+
onContextMenu: (t) => L(t, K(h(f, e.key, "decisions"))),
|
|
535
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8", Y("decisions", e.key) && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
534
536
|
children: [
|
|
535
537
|
/* @__PURE__ */ M(oe, { className: "size-4" }),
|
|
536
538
|
/* @__PURE__ */ M("span", {
|
|
537
539
|
className: "flex-1",
|
|
538
|
-
children:
|
|
540
|
+
children: U("decisions")
|
|
539
541
|
}),
|
|
540
|
-
/* @__PURE__ */ M(
|
|
541
|
-
count:
|
|
542
|
-
locale:
|
|
543
|
-
label:
|
|
542
|
+
/* @__PURE__ */ M(w, {
|
|
543
|
+
count: At.filter((t) => t.identifier.startsWith(`${e.key}-`)).length,
|
|
544
|
+
locale: yt,
|
|
545
|
+
label: U("waitingCount"),
|
|
544
546
|
className: "bg-agent! text-agent-foreground!"
|
|
545
547
|
})
|
|
546
548
|
]
|
|
547
549
|
}),
|
|
548
|
-
/* @__PURE__ */ M(
|
|
550
|
+
/* @__PURE__ */ M(De, {
|
|
549
551
|
workspace: f,
|
|
550
552
|
team: e,
|
|
551
|
-
current:
|
|
553
|
+
current: at(J.pathname, f)
|
|
552
554
|
}),
|
|
553
555
|
e.cyclesEnabled && /* @__PURE__ */ N(r, {
|
|
554
556
|
to: "/$workspace/teams/$key/cycles",
|
|
@@ -556,68 +558,68 @@ function H() {
|
|
|
556
558
|
workspace: f,
|
|
557
559
|
key: e.key
|
|
558
560
|
},
|
|
559
|
-
className:
|
|
560
|
-
activeProps:
|
|
561
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "pl-8"),
|
|
562
|
+
activeProps: R,
|
|
561
563
|
activeOptions: { includeSearch: !1 },
|
|
562
564
|
children: [
|
|
563
565
|
/* @__PURE__ */ M(ae, { className: "size-4" }),
|
|
564
566
|
" ",
|
|
565
|
-
|
|
567
|
+
U("cycles")
|
|
566
568
|
]
|
|
567
569
|
})
|
|
568
|
-
] })] }, e.id)),
|
|
570
|
+
] })] }, e.id)), _.length === 0 && (S ? /* @__PURE__ */ N("button", {
|
|
569
571
|
type: "button",
|
|
570
|
-
onClick: () =>
|
|
571
|
-
className:
|
|
572
|
+
onClick: () => b(!0),
|
|
573
|
+
className: B("flex h-8 items-center gap-2.5 rounded-md px-2 text-sm text-muted-foreground hover:bg-muted hover:text-foreground", "w-full"),
|
|
572
574
|
children: [
|
|
573
575
|
/* @__PURE__ */ M(u, { className: "size-4" }),
|
|
574
576
|
" ",
|
|
575
|
-
|
|
577
|
+
U("createFirstTeam")
|
|
576
578
|
]
|
|
577
579
|
}) : /* @__PURE__ */ M("p", {
|
|
578
580
|
className: "px-2 text-sm text-muted-foreground",
|
|
579
|
-
children:
|
|
581
|
+
children: U("noTeams")
|
|
580
582
|
}))]
|
|
581
583
|
})
|
|
582
584
|
] })
|
|
583
585
|
] });
|
|
584
|
-
},
|
|
586
|
+
}, Kt = X ? void 0 : ({ expanded: e, isMobile: t }) => {
|
|
585
587
|
let n = [
|
|
586
588
|
{
|
|
587
|
-
label:
|
|
588
|
-
onClick: () =>
|
|
589
|
+
label: U("myAccount"),
|
|
590
|
+
onClick: () => C({
|
|
589
591
|
to: "/$workspace/settings/account",
|
|
590
592
|
params: { workspace: f }
|
|
591
593
|
})
|
|
592
594
|
},
|
|
593
595
|
{
|
|
594
|
-
label:
|
|
595
|
-
onClick: () =>
|
|
596
|
+
label: U("settings"),
|
|
597
|
+
onClick: () => C({
|
|
596
598
|
to: "/$workspace/settings",
|
|
597
599
|
params: { workspace: f }
|
|
598
600
|
})
|
|
599
601
|
},
|
|
600
|
-
...
|
|
601
|
-
label:
|
|
602
|
-
onClick:
|
|
602
|
+
...Bt ? [{
|
|
603
|
+
label: U("installApp"),
|
|
604
|
+
onClick: ze
|
|
603
605
|
}] : [],
|
|
604
|
-
...
|
|
605
|
-
label:
|
|
606
|
-
onClick:
|
|
606
|
+
...Ht ? [D, {
|
|
607
|
+
label: U("signOut"),
|
|
608
|
+
onClick: Ut
|
|
607
609
|
}] : []
|
|
608
|
-
], r = /* @__PURE__ */ M(
|
|
610
|
+
], r = /* @__PURE__ */ M(We, {
|
|
609
611
|
name: p.user.name,
|
|
610
612
|
src: p.user.avatarUrl,
|
|
611
613
|
size: "sm",
|
|
612
614
|
decorative: !0
|
|
613
615
|
});
|
|
614
|
-
return e ? /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M(
|
|
616
|
+
return e ? /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M(dt, {
|
|
615
617
|
myUsername: p.user.username,
|
|
616
618
|
workspace: f
|
|
617
619
|
}), /* @__PURE__ */ N("div", {
|
|
618
620
|
className: "flex items-center gap-1",
|
|
619
|
-
children: [/* @__PURE__ */ M(
|
|
620
|
-
label:
|
|
621
|
+
children: [/* @__PURE__ */ M(Ue, {
|
|
622
|
+
label: U("accountMenu", { name: p.user.name }),
|
|
621
623
|
side: "top",
|
|
622
624
|
align: "start",
|
|
623
625
|
matchTriggerWidth: !0,
|
|
@@ -633,8 +635,8 @@ function H() {
|
|
|
633
635
|
}), !t && /* @__PURE__ */ M(I, {})]
|
|
634
636
|
})] }) : /* @__PURE__ */ N("div", {
|
|
635
637
|
className: "flex flex-col items-center gap-2",
|
|
636
|
-
children: [/* @__PURE__ */ M(I, {}), /* @__PURE__ */ M(
|
|
637
|
-
label:
|
|
638
|
+
children: [/* @__PURE__ */ M(I, {}), /* @__PURE__ */ M(Ue, {
|
|
639
|
+
label: U("accountMenu", { name: p.user.name }),
|
|
638
640
|
side: "right",
|
|
639
641
|
align: "end",
|
|
640
642
|
items: n,
|
|
@@ -643,80 +645,80 @@ function H() {
|
|
|
643
645
|
children: r
|
|
644
646
|
})]
|
|
645
647
|
});
|
|
646
|
-
},
|
|
648
|
+
}, qt = /* @__PURE__ */ M(ct, {
|
|
647
649
|
workspace: f,
|
|
648
|
-
name:
|
|
650
|
+
name: g.name,
|
|
649
651
|
apps: p.apps ?? [],
|
|
650
|
-
unread:
|
|
652
|
+
unread: Ft,
|
|
651
653
|
onSearch: () => $(!0),
|
|
652
654
|
onNewIssue: () => Q()
|
|
653
655
|
});
|
|
654
|
-
return /* @__PURE__ */ M(
|
|
656
|
+
return /* @__PURE__ */ M(Re, {
|
|
655
657
|
workspace: f,
|
|
656
|
-
children: /* @__PURE__ */ M(
|
|
658
|
+
children: /* @__PURE__ */ M(ke, {
|
|
657
659
|
actions: p.actions ?? [],
|
|
658
|
-
children: /* @__PURE__ */ M(
|
|
660
|
+
children: /* @__PURE__ */ M(_e.Provider, {
|
|
659
661
|
value: Q,
|
|
660
|
-
children: /* @__PURE__ */ N(
|
|
661
|
-
value:
|
|
662
|
+
children: /* @__PURE__ */ N(ve.Provider, {
|
|
663
|
+
value: Rt,
|
|
662
664
|
children: [
|
|
663
|
-
v ? /* @__PURE__ */ M(
|
|
665
|
+
v ? /* @__PURE__ */ M(lt, {
|
|
664
666
|
sidebar: v.sidebar,
|
|
665
|
-
brand:
|
|
666
|
-
navigation:
|
|
667
|
-
header:
|
|
668
|
-
presence: /* @__PURE__ */ M(
|
|
667
|
+
brand: Wt,
|
|
668
|
+
navigation: Gt,
|
|
669
|
+
header: qt,
|
|
670
|
+
presence: /* @__PURE__ */ M(dt, {
|
|
669
671
|
myUsername: p.user.username,
|
|
670
672
|
workspace: f
|
|
671
673
|
}),
|
|
672
|
-
children: /* @__PURE__ */ M(
|
|
673
|
-
}) : /* @__PURE__ */ M(
|
|
674
|
-
expanded:
|
|
674
|
+
children: /* @__PURE__ */ M(ut, { children: /* @__PURE__ */ M(Je, {}) })
|
|
675
|
+
}) : /* @__PURE__ */ M(rt, {
|
|
676
|
+
expanded: St || X,
|
|
675
677
|
onExpandedChange: (e) => {
|
|
676
|
-
|
|
678
|
+
Ct(e), ht({
|
|
677
679
|
expanded: e,
|
|
678
|
-
width:
|
|
680
|
+
width: wt
|
|
679
681
|
});
|
|
680
682
|
},
|
|
681
|
-
width:
|
|
683
|
+
width: wt,
|
|
682
684
|
onWidthChange: (e) => {
|
|
683
|
-
|
|
684
|
-
expanded:
|
|
685
|
+
Tt(e), ht({
|
|
686
|
+
expanded: St,
|
|
685
687
|
width: e
|
|
686
688
|
});
|
|
687
689
|
},
|
|
688
|
-
navigationKey:
|
|
689
|
-
navigationResetKey:
|
|
690
|
+
navigationKey: J.pathname + J.searchStr,
|
|
691
|
+
navigationResetKey: X ? "settings" : "workspace",
|
|
690
692
|
mainClassName: "flex flex-col overflow-hidden",
|
|
691
693
|
labels: {
|
|
692
|
-
navigation:
|
|
693
|
-
skipToContent:
|
|
694
|
-
openNavigation:
|
|
695
|
-
closeNavigation:
|
|
696
|
-
expandSidebar:
|
|
697
|
-
collapseSidebar:
|
|
698
|
-
resizeSidebar:
|
|
694
|
+
navigation: U("navigation"),
|
|
695
|
+
skipToContent: U("skipToContent"),
|
|
696
|
+
openNavigation: U("openNav"),
|
|
697
|
+
closeNavigation: U("closeNav"),
|
|
698
|
+
expandSidebar: U("expandSidebar"),
|
|
699
|
+
collapseSidebar: U("collapseSidebar"),
|
|
700
|
+
resizeSidebar: U("resizeSidebar")
|
|
699
701
|
},
|
|
700
|
-
header:
|
|
701
|
-
brand:
|
|
702
|
-
navigation:
|
|
703
|
-
footer:
|
|
704
|
-
children: /* @__PURE__ */ M(
|
|
702
|
+
header: qt,
|
|
703
|
+
brand: Wt,
|
|
704
|
+
navigation: Gt,
|
|
705
|
+
footer: Kt,
|
|
706
|
+
children: /* @__PURE__ */ M(ut, { children: /* @__PURE__ */ M(Je, {}) })
|
|
705
707
|
}),
|
|
706
|
-
/* @__PURE__ */ M(
|
|
707
|
-
!
|
|
708
|
-
/* @__PURE__ */ M(
|
|
708
|
+
/* @__PURE__ */ M(je, { workspace: f }),
|
|
709
|
+
!zt && /* @__PURE__ */ M(vt, {}),
|
|
710
|
+
/* @__PURE__ */ M(Ee, {
|
|
709
711
|
workspace: f,
|
|
710
|
-
open:
|
|
712
|
+
open: It,
|
|
711
713
|
onClose: () => $(!1),
|
|
712
|
-
selection:
|
|
714
|
+
selection: Lt
|
|
713
715
|
}),
|
|
714
|
-
/* @__PURE__ */ M(
|
|
715
|
-
|
|
716
|
+
/* @__PURE__ */ M(Fe, { workspace: f }),
|
|
717
|
+
we && /* @__PURE__ */ M(Ne, {
|
|
716
718
|
workspace: f,
|
|
717
|
-
onClose: () =>
|
|
719
|
+
onClose: () => b(!1)
|
|
718
720
|
}),
|
|
719
|
-
y && /* @__PURE__ */ M(
|
|
721
|
+
y && /* @__PURE__ */ M(Ze, { children: /* @__PURE__ */ M(Pe, {
|
|
720
722
|
workspace: f,
|
|
721
723
|
...y.team && { defaultTeam: y.team },
|
|
722
724
|
...y.title && { defaultTitle: y.title },
|
|
@@ -725,7 +727,7 @@ function H() {
|
|
|
725
727
|
...y.origin && { origin: y.origin },
|
|
726
728
|
...y.fields && { defaults: y.fields },
|
|
727
729
|
...y.onCreated && { onCreated: y.onCreated },
|
|
728
|
-
onClose: () =>
|
|
730
|
+
onClose: () => Ce(null)
|
|
729
731
|
}) })
|
|
730
732
|
]
|
|
731
733
|
})
|
|
@@ -733,7 +735,7 @@ function H() {
|
|
|
733
735
|
})
|
|
734
736
|
});
|
|
735
737
|
}
|
|
736
|
-
function
|
|
738
|
+
function H({ rail: e, label: t, children: n }) {
|
|
737
739
|
return /* @__PURE__ */ M(E, {
|
|
738
740
|
content: t,
|
|
739
741
|
side: "right",
|
|
@@ -741,13 +743,13 @@ function U({ rail: e, label: t, children: n }) {
|
|
|
741
743
|
children: n
|
|
742
744
|
});
|
|
743
745
|
}
|
|
744
|
-
function
|
|
746
|
+
function st() {
|
|
745
747
|
return O(() => {
|
|
746
748
|
document.querySelector(".pw-frame-drawer [aria-current=\"page\"]")?.scrollIntoView({ block: "nearest" });
|
|
747
749
|
}, []), null;
|
|
748
750
|
}
|
|
749
|
-
function
|
|
750
|
-
let { isMobile: s } =
|
|
751
|
+
function ct({ workspace: e, name: n, apps: r, unread: i, onSearch: a, onNewIssue: o }) {
|
|
752
|
+
let { isMobile: s } = it(), c = t(), l = A("workspace");
|
|
751
753
|
return s ? /* @__PURE__ */ N("div", {
|
|
752
754
|
className: "flex h-12 items-center gap-1 border-b border-border px-1",
|
|
753
755
|
children: [
|
|
@@ -756,8 +758,8 @@ function ot({ workspace: e, name: n, apps: r, unread: i, onSearch: a, onNewIssue
|
|
|
756
758
|
className: "min-w-0 flex-1 truncate text-sm font-semibold",
|
|
757
759
|
children: n
|
|
758
760
|
}),
|
|
759
|
-
!c && /* @__PURE__ */ M(
|
|
760
|
-
!c && /* @__PURE__ */ M(
|
|
761
|
+
!c && /* @__PURE__ */ M(x, {}),
|
|
762
|
+
!c && /* @__PURE__ */ M(pe, { apps: r }),
|
|
761
763
|
/* @__PURE__ */ M(T, {
|
|
762
764
|
variant: "ghost",
|
|
763
765
|
size: "lg",
|
|
@@ -783,9 +785,9 @@ function ot({ workspace: e, name: n, apps: r, unread: i, onSearch: a, onNewIssue
|
|
|
783
785
|
]
|
|
784
786
|
}) : null;
|
|
785
787
|
}
|
|
786
|
-
function
|
|
787
|
-
let o =
|
|
788
|
-
return /* @__PURE__ */ N(j, { children: [e &&
|
|
788
|
+
function lt({ sidebar: e, brand: t, navigation: n, header: r, presence: i, children: a }) {
|
|
789
|
+
let o = it();
|
|
790
|
+
return /* @__PURE__ */ N(j, { children: [e && L(/* @__PURE__ */ N("div", {
|
|
789
791
|
className: "tandem-hosted-sidebar flex flex-col gap-3",
|
|
790
792
|
children: [
|
|
791
793
|
t?.(o),
|
|
@@ -797,29 +799,29 @@ function st({ sidebar: e, brand: t, navigation: n, header: r, presence: i, child
|
|
|
797
799
|
children: [r, a]
|
|
798
800
|
})] });
|
|
799
801
|
}
|
|
800
|
-
function
|
|
801
|
-
let { state: t } =
|
|
802
|
+
function ut({ children: e }) {
|
|
803
|
+
let { state: t } = b(), n = t?.open && t.maximized;
|
|
802
804
|
return /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("div", {
|
|
803
|
-
className:
|
|
805
|
+
className: B("min-h-0 min-w-0 flex-1 overflow-y-auto bg-card", n && "hidden"),
|
|
804
806
|
children: e
|
|
805
|
-
}), /* @__PURE__ */ M(
|
|
807
|
+
}), /* @__PURE__ */ M(S, {})] });
|
|
806
808
|
}
|
|
807
|
-
function
|
|
808
|
-
let { people: n, page: r } =
|
|
809
|
+
function dt({ myUsername: e, workspace: t }) {
|
|
810
|
+
let { people: n, page: r } = ze(), { person: i } = _(t), a = A("workspace"), o = new Set(n.map((e) => e.username).filter((t) => t !== e));
|
|
809
811
|
if (o.size === 0) return null;
|
|
810
812
|
let s = [...new Set(n.filter((t) => t.username !== e && t.page === r).map((e) => e.username))];
|
|
811
813
|
return /* @__PURE__ */ N("div", {
|
|
812
814
|
className: "flex items-center gap-2 px-2 pb-2 text-xs text-muted-foreground",
|
|
813
|
-
children: [s.length > 0 && /* @__PURE__ */ M(
|
|
815
|
+
children: [s.length > 0 && /* @__PURE__ */ M(C, {
|
|
814
816
|
size: "xs",
|
|
815
817
|
max: 5,
|
|
816
818
|
showOverflow: !1,
|
|
817
819
|
ringColor: "var(--theme-sidebar-bg, var(--theme-muted-panel-bg))",
|
|
818
820
|
label: a("onThisPage", { count: s.length }),
|
|
819
|
-
children: s.map((e) => /* @__PURE__ */ M(
|
|
821
|
+
children: s.map((e) => /* @__PURE__ */ M(Ae, {
|
|
820
822
|
workspace: t,
|
|
821
823
|
handle: e,
|
|
822
|
-
children: /* @__PURE__ */ M(
|
|
824
|
+
children: /* @__PURE__ */ M(We, {
|
|
823
825
|
name: i(e).name,
|
|
824
826
|
src: i(e).avatarUrl
|
|
825
827
|
})
|
|
@@ -833,8 +835,8 @@ function lt({ myUsername: e, workspace: t }) {
|
|
|
833
835
|
}) : a("online", { count: o.size }) })]
|
|
834
836
|
});
|
|
835
837
|
}
|
|
836
|
-
function
|
|
837
|
-
let n = A("savedViews"), i = A("common"), a =
|
|
838
|
+
function ft({ workspace: e, current: t }) {
|
|
839
|
+
let n = A("savedViews"), i = A("common"), a = qe(), { views: o } = y(e), { menu: s, dialogs: c } = Ce(e);
|
|
838
840
|
return o.length === 0 ? c : /* @__PURE__ */ N(j, { children: [
|
|
839
841
|
/* @__PURE__ */ M("p", {
|
|
840
842
|
className: "mt-6 flex h-6 items-center px-2 text-xs font-medium text-muted-foreground",
|
|
@@ -844,7 +846,7 @@ function ut({ workspace: e, current: t }) {
|
|
|
844
846
|
className: "mt-1 space-y-0.5",
|
|
845
847
|
"aria-label": n("title"),
|
|
846
848
|
children: o.map((o) => /* @__PURE__ */ N("div", {
|
|
847
|
-
className:
|
|
849
|
+
className: B(Se, "group gap-0 pr-1 pl-0", p(o, t) && "bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] hover:bg-[var(--theme-sidebar-active-bg,var(--theme-hover))] !text-[var(--theme-sidebar-active-text,var(--theme-app))] font-medium"),
|
|
848
850
|
children: [/* @__PURE__ */ M(E, {
|
|
849
851
|
content: o.shared ? n("sharedBy", { owner: o.owner }) : n("onlyYou"),
|
|
850
852
|
side: "right",
|
|
@@ -852,7 +854,7 @@ function ut({ workspace: e, current: t }) {
|
|
|
852
854
|
children: /* @__PURE__ */ N(r, {
|
|
853
855
|
to: "/$workspace/issues",
|
|
854
856
|
params: { workspace: e },
|
|
855
|
-
search:
|
|
857
|
+
search: we(o),
|
|
856
858
|
onContextMenu: (e) => a(e, s(o)),
|
|
857
859
|
className: "flex h-full min-w-0 flex-1 items-center gap-2.5 pl-2",
|
|
858
860
|
children: [o.shared ? /* @__PURE__ */ M(f, { className: "size-4" }) : /* @__PURE__ */ M(ce, { className: "size-4" }), /* @__PURE__ */ M("span", {
|
|
@@ -860,7 +862,7 @@ function ut({ workspace: e, current: t }) {
|
|
|
860
862
|
children: o.name
|
|
861
863
|
})]
|
|
862
864
|
})
|
|
863
|
-
}), /* @__PURE__ */ M(
|
|
865
|
+
}), /* @__PURE__ */ M(nt, {
|
|
864
866
|
items: () => s(o),
|
|
865
867
|
label: i("moreActionsFor", { name: o.name })
|
|
866
868
|
})]
|
|
@@ -869,19 +871,19 @@ function ut({ workspace: e, current: t }) {
|
|
|
869
871
|
c
|
|
870
872
|
] });
|
|
871
873
|
}
|
|
872
|
-
var
|
|
873
|
-
function
|
|
874
|
+
var U = (e) => `tandem:collapsed-teams:${e}`;
|
|
875
|
+
function pt(e) {
|
|
874
876
|
try {
|
|
875
|
-
let t = JSON.parse(localStorage.getItem(
|
|
877
|
+
let t = JSON.parse(localStorage.getItem(U(e)) ?? "[]");
|
|
876
878
|
return new Set(Array.isArray(t) ? t.filter((e) => typeof e == "string") : []);
|
|
877
879
|
} catch {
|
|
878
880
|
return /* @__PURE__ */ new Set();
|
|
879
881
|
}
|
|
880
882
|
}
|
|
881
|
-
var
|
|
882
|
-
function
|
|
883
|
+
var W = "tandem:sidebar";
|
|
884
|
+
function mt() {
|
|
883
885
|
try {
|
|
884
|
-
let e = JSON.parse(localStorage.getItem(
|
|
886
|
+
let e = JSON.parse(localStorage.getItem(W) ?? "{}");
|
|
885
887
|
return {
|
|
886
888
|
expanded: e?.expanded !== !1,
|
|
887
889
|
width: typeof e?.width == "number" ? e.width : 240
|
|
@@ -893,20 +895,20 @@ function ft() {
|
|
|
893
895
|
};
|
|
894
896
|
}
|
|
895
897
|
}
|
|
896
|
-
function
|
|
898
|
+
function ht(e) {
|
|
897
899
|
try {
|
|
898
|
-
localStorage.setItem(
|
|
900
|
+
localStorage.setItem(W, JSON.stringify(e));
|
|
899
901
|
} catch {}
|
|
900
902
|
}
|
|
901
|
-
function
|
|
903
|
+
function gt(e, t) {
|
|
902
904
|
try {
|
|
903
|
-
localStorage.setItem(
|
|
905
|
+
localStorage.setItem(U(e), JSON.stringify([...t]));
|
|
904
906
|
} catch {}
|
|
905
907
|
}
|
|
906
|
-
function
|
|
908
|
+
function _t() {
|
|
907
909
|
return Array.from(document.querySelectorAll("[aria-keyshortcuts]")).some((e) => /\b(Meta|Control)\+F\b/.test(e.getAttribute("aria-keyshortcuts") ?? "") && e.getClientRects().length > 0);
|
|
908
910
|
}
|
|
909
|
-
function
|
|
911
|
+
function vt() {
|
|
910
912
|
return O(() => {
|
|
911
913
|
let t = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
912
914
|
try {
|
|
@@ -916,4 +918,4 @@ function gt() {
|
|
|
916
918
|
e.PATCH("/api/v1/me", { body: { timeZone: t } }).catch(() => {});
|
|
917
919
|
}, []), null;
|
|
918
920
|
}
|
|
919
|
-
export {
|
|
921
|
+
export { V as component };
|