@parallelworks/tandem-web 0.141.2 → 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.
Files changed (64) hide show
  1. package/_virtual/_virtual_i18n/en/common.js +162 -5
  2. package/_virtual/_virtual_i18n/es/common.js +162 -5
  3. package/_virtual/_virtual_i18n/ja/common.js +162 -5
  4. package/_virtual/_virtual_i18n/ko/common.js +162 -5
  5. package/_virtual/_virtual_i18n/zh/common.js +162 -5
  6. package/components/AccessGrants.js +6 -6
  7. package/components/ActivityTimeline.js +2 -0
  8. package/components/CodeHostSettings.js +25 -25
  9. package/components/CustomFields.js +349 -0
  10. package/components/DocProperties.js +320 -0
  11. package/components/DocTable.js +176 -0
  12. package/components/DocViewBlock.js +104 -0
  13. package/components/DocsTree.js +16 -6
  14. package/components/Editor.js +30 -28
  15. package/components/GitHub.js +22 -22
  16. package/components/IssueBoard.js +48 -43
  17. package/components/IssueEvent.js +2 -0
  18. package/components/IssueFilters.js +210 -122
  19. package/components/IssueImport.js +1 -1
  20. package/components/IssueRow.js +96 -79
  21. package/components/IssueTemplates.js +216 -156
  22. package/components/IssueTypes.js +318 -0
  23. package/components/NewIssueDialog.js +254 -216
  24. package/components/SettingsNav.js +40 -35
  25. package/components/SlashMenu.js +2 -0
  26. package/components/TeamForm.js +49 -35
  27. package/components/TeamRepositories.js +51 -51
  28. package/components/TeamWorkflow.js +8 -8
  29. package/components/Updates.js +8 -8
  30. package/lib/boardMove.js +69 -47
  31. package/lib/customFields.js +113 -0
  32. package/lib/docProperties.js +135 -0
  33. package/lib/issueDisplay.js +27 -12
  34. package/lib/issueList.js +166 -62
  35. package/lib/issueTypes.js +50 -0
  36. package/lib/teamTree.js +24 -0
  37. package/lib/views.js +13 -11
  38. package/package.json +1 -1
  39. package/pages/issues.js +331 -291
  40. package/routeTree.gen.js +174 -162
  41. package/routes/_workspace/agents/index2.js +9 -9
  42. package/routes/_workspace/docs/_doc2.js +147 -140
  43. package/routes/_workspace/docs/space._space.js +6 -0
  44. package/routes/_workspace/docs/space2._space.js +256 -0
  45. package/routes/_workspace/docs2.js +3 -3
  46. package/routes/_workspace/issues/_identifier2.js +433 -370
  47. package/routes/_workspace/projects/_projectId3.js +213 -201
  48. package/routes/_workspace/settings/audit-log3.js +2 -0
  49. package/routes/_workspace/settings/fields.js +6 -0
  50. package/routes/_workspace/settings/fields2.js +30 -0
  51. package/routes/_workspace/settings/fields3.js +5 -0
  52. package/routes/_workspace/settings/groups2.js +74 -74
  53. package/routes/_workspace/settings/labels2.js +33 -33
  54. package/routes/_workspace/settings/members2.js +35 -35
  55. package/routes/_workspace/settings/roles2.js +24 -24
  56. package/routes/_workspace/settings/runners2.js +18 -18
  57. package/routes/_workspace/settings/sessions2.js +9 -9
  58. package/routes/_workspace/settings/slack2.js +8 -8
  59. package/routes/_workspace/settings/sso2.js +50 -50
  60. package/routes/_workspace/settings/tokens2.js +15 -15
  61. package/routes/_workspace/settings/webhooks2.js +42 -42
  62. package/routes/_workspace/teams/_key/settings2.js +138 -76
  63. package/routes/_workspace2.js +321 -319
  64. package/styles.css +39 -0
@@ -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 pe, teamPath as m } from "../lib/teamPaths.js";
9
- import { AppLauncher as me } from "../components/AppLauncher.js";
10
- import { useFavorites as he } from "../lib/favorites.js";
11
- import { copyItem as ge, useLinkItems as _e } from "../lib/menus.js";
12
- import { docKey as h } from "../lib/docs.js";
13
- import { usePeople as g } from "../lib/people.js";
14
- import { NewIssueContext as ve } from "../lib/newIssue.js";
15
- import { PaletteSelectionContext as ye } from "../lib/palette.js";
16
- import { isBuiltIn as be, useCan as xe } from "../lib/roles.js";
17
- import { SettingsNav as Se, navItem as _, navOn as v } from "../components/SettingsNav.js";
18
- import { useSavedViews as y, useViewMenu as b, viewSearch as Ce } from "../lib/views.js";
19
- import { EntityIcon as x } from "../components/EntityIcon.js";
20
- import { CommandPalette as we } from "../components/CommandPalette.js";
21
- import { DocsTree as Te } from "../components/DocsTree.js";
22
- import { FavoritesNav as Ee } from "../components/FavoritesNav.js";
23
- import { HostPanelProvider as De, useHostPanel as S } from "../lib/hostPanel.js";
24
- import { HostActions as C } from "../components/HostActions.js";
25
- import { HostPanel as Oe } from "../components/HostPanel.js";
26
- import { PersonHoverCard as ke } from "../components/PersonHoverCard.js";
27
- import { HoverCards as Ae } from "../components/HoverCards.js";
28
- import { Logo as je } from "../components/Logo.js";
29
- import { CreateTeamDialog as Me } from "../components/TeamForm.js";
30
- import { NewIssueDialog as Ne } from "../components/NewIssueDialog.js";
31
- import { ShareDialogHost as Pe } from "../components/ShareDialog.js";
32
- import { hostSignOut as Fe } from "../lib/hostSignOut.js";
33
- import { useInstall as Ie } from "../lib/install.js";
34
- import { LiveProvider as Le, useLive as Re } from "../lib/live.js";
35
- import { usePushSync as ze } from "../lib/notifications.js";
36
- import { useShortcuts as Be } from "../lib/shortcuts.js";
37
- import { ActionMenu as Ve, Avatar as He, AvatarGroup as w, Combobox as Ue, CountBadge as We, IconButton as T, Kbd as Ge, Tooltip as E, menuDivider as D, useOpenMenu as Ke } from "@parallelworks/ui";
38
- import { Outlet as qe, useParams as Je } from "@tanstack/react-router";
39
- import { Fragment as Ye, Suspense as Xe, useCallback as Ze, useEffect as O, useMemo as Qe, useState as k } from "react";
40
- import { useLocale as $e, useTranslations as A } from "use-intl";
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 et, useSuspenseQuery as F } from "@tanstack/react-query";
43
- import { MoreButton as tt } from "@parallelworks/ui/list";
44
- import { AppFrame as nt, AppFrameToggle as I, useAppFrame as L } from "@parallelworks/ui/app-frame";
45
- import { createPortal as R } from "react-dom";
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 rt(e, t) {
48
- let n = e.slice(`/${t}/docs/`.length).split("/")[0];
49
- return e.startsWith(`/${t}/docs/`) && n ? h(n) : void 0;
48
+ function at(e, t) {
49
+ let [n, r] = e.slice(`/${t}/docs/`.length).split("/");
50
+ return e.startsWith(`/${t}/docs/`) && n && r === void 0 ? g(n) : void 0;
50
51
  }
51
- var z = { className: v }, B = "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)]", it = "absolute top-1.5 right-3 size-2 rounded-full bg-primary", V = (...e) => e.filter(Boolean).join(" ");
52
- function H() {
53
- let { workspace: f } = n.useParams(), { data: p } = F(c), { data: h } = F(te(f)), { data: g } = F(ee(f)), v = t(), [y, b] = k(null), [Ce, S] = k(!1), Oe = xe(f, "manage_teams"), { canInstall: ke, install: Re } = Ie(), w = a(), L = et(), R = Ke(), H = he(f), W = A("workspace"), G = A("common"), _t = $e(), K = A("favorites"), vt = A("roles"), q = _e(), yt = (e) => [
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: G("open"),
56
- onClick: () => w({
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: W("newIssueInTeam"),
66
+ label: U("newIssueInTeam"),
66
67
  shortcut: "C",
67
68
  onClick: () => Q({ team: e.key })
68
69
  },
69
70
  ...e.cyclesEnabled ? [{
70
- label: W("cycles"),
71
- onClick: () => w({
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: W("teamSettings"),
81
- onClick: () => w({
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: H.find("team", e.id) ? K("remove") : K("add"),
91
- onClick: () => H.toggle("team", e.id)
91
+ label: V.find("team", e.id) ? G("remove") : G("add"),
92
+ onClick: () => V.toggle("team", e.id)
92
93
  },
93
94
  D,
94
- ...q(m(f, e.key, "issues")),
95
- ge(G("copyKey"), e.key)
96
- ], J = (e) => ({
97
- label: H.find("page", e) ? K("remove") : K("add"),
98
- onClick: () => H.toggle("page", e)
99
- }), Y = i(), [bt, xt] = k(() => ft().expanded), [St, Ct] = k(() => ft().width), wt = Qe(() => {
100
- let e = pe(Y.pathname, f), t = e?.page === "issues" ? e.team : void 0, n = Y.pathname === `/${f}/issues` || t !== void 0, r = Y.search, i = n && !r.saved;
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
- Y.pathname,
108
- Y.search,
108
+ J.pathname,
109
+ J.search,
109
110
  f,
110
111
  p?.user.username
111
- ]), X = (e, t) => {
112
- let n = pe(Y.pathname, f);
112
+ ]), Y = (e, t) => {
113
+ let n = m(J.pathname, f);
113
114
  return n?.page === e && n.team === t;
114
- }, [Tt, Et] = k(() => dt(f)), Dt = (e) => Et((t) => {
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), mt(f, n), n;
117
- }), Z = Y.pathname.startsWith(`/${f}/settings`), { data: Ot = [] } = P(o(f)), kt = g.some((e) => e.triageEnabled && !e.archivedAt), { data: At } = P({
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: kt
120
- }), jt = (e) => At?.issues.filter((t) => t.teamId === e).length ?? 0, { data: Mt } = P(l(f)), Nt = Mt?.unread ?? 0;
121
- ze();
122
- let { key: Pt } = Je({ strict: !1 }), Q = Ze((e) => b({
123
- ...Pt && { team: Pt },
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
- }), [Pt]);
126
- Be({ c: () => Q() }, y === null);
127
- let [Ft, $] = k(!1), [It, Lt] = k([]);
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 || ht() || (e.preventDefault(), $(!0));
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 Rt = p.mode === "platform", zt = ke && !Rt, Bt = p.signOutUrl, Vt = !v && (!Rt || Bt !== void 0), Ht = async () => {
135
- Bt === void 0 ? (await e.POST("/api/v1/auth/logout"), L.clear(), w({ to: "/login" })) : await Fe(Bt);
136
- }, Ut = Z ? void 0 : ({ expanded: e }) => {
137
- let t = /* @__PURE__ */ M(Ue, {
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: be(e.role) ? vt(`${e.role}.name`) : vt("custom")
142
+ hint: ye(e.role) ? bt(`${e.role}.name`) : bt("custom")
142
143
  })), ...p.canCreateWorkspace ? [{
143
144
  value: "__new",
144
- label: W("createWorkspace")
145
+ label: U("createWorkspace")
145
146
  }] : []],
146
147
  value: f,
147
- onValueChange: (e) => w(e === "__new" ? { to: "/new" } : {
148
+ onValueChange: (e) => C(e === "__new" ? { to: "/new" } : {
148
149
  to: "/$workspace/issues",
149
150
  params: { workspace: e ?? f }
150
151
  }),
151
- placeholder: W("switchWorkspacePlaceholder"),
152
- "aria-label": W("switchWorkspace"),
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 : h.name,
156
- onContextMenu: (e) => R(e, [
156
+ "aria-label": e ? void 0 : g.name,
157
+ onContextMenu: (e) => L(e, [
157
158
  {
158
- label: W("workspaceSettings"),
159
- onClick: () => w({
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: W("switchWorkspace"),
166
+ label: U("switchWorkspace"),
166
167
  items: [...p.workspaces.map((e) => ({
167
168
  label: e.name,
168
169
  checked: e.slug === f,
169
- onClick: () => w({
170
+ onClick: () => C({
170
171
  to: "/$workspace/issues",
171
172
  params: { workspace: e.slug }
172
173
  })
173
174
  })), ...p.canCreateWorkspace ? [D, {
174
- label: W("createWorkspace"),
175
- onClick: () => w({ to: "/new" })
175
+ label: U("createWorkspace"),
176
+ onClick: () => C({ to: "/new" })
176
177
  }] : []]
177
178
  },
178
179
  D,
179
- ge(W("copyWorkspaceSlug"), f),
180
- ...Vt ? [D, {
181
- label: W("signOut"),
182
- onClick: Ht
180
+ he(U("copyWorkspaceSlug"), f),
181
+ ...Ht ? [D, {
182
+ label: U("signOut"),
183
+ onClick: Ut
183
184
  }] : []
184
185
  ]),
185
- className: V("flex h-9 items-center gap-2 rounded-md text-left hover:bg-muted", e ? "w-full px-2" : "w-9 justify-center"),
186
- children: [h.icon ? /* @__PURE__ */ M(x, {
187
- icon: h.icon,
188
- color: h.color,
189
- name: h.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(je, { withName: !1 }), e && /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("span", {
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: h.name
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(C, { className: "hidden md:flex" }),
205
- !v && /* @__PURE__ */ M(me, {
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: V(B, "min-w-0 flex-1 gap-2 px-2"),
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: W("newIssue")
221
+ children: U("newIssue")
221
222
  }),
222
- /* @__PURE__ */ M(Ge, {
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: W("openPalette"),
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": W("openPalette"),
235
+ "aria-label": U("openPalette"),
235
236
  "aria-keyshortcuts": "Meta+K Control+K",
236
- className: B,
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(me, { apps: p.apps ?? [] }),
245
- !v && /* @__PURE__ */ M(C, { className: "flex-col" }),
245
+ !v && /* @__PURE__ */ M(pe, { apps: p.apps ?? [] }),
246
+ !v && /* @__PURE__ */ M(x, { className: "flex-col" }),
246
247
  /* @__PURE__ */ M(E, {
247
- content: W("newIssue"),
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": W("newIssue"),
254
- className: B,
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: W("openPalette"),
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": W("openPalette"),
266
+ "aria-label": U("openPalette"),
266
267
  "aria-keyshortcuts": "Meta+K Control+K",
267
- className: B,
268
+ className: z,
268
269
  children: /* @__PURE__ */ M(d, { className: "size-3.5" })
269
270
  })
270
271
  })
271
272
  ]
272
273
  });
273
- }, Wt = ({ expanded: e, mobileOpen: t }) => {
274
- if (Z) return /* @__PURE__ */ M(Se, { workspace: f });
275
- let n = !e, i = V(_, n && "relative justify-center px-0"), a = (e) => n ? /* @__PURE__ */ M("span", {
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(at, {}),
281
+ t && /* @__PURE__ */ M(st, {}),
281
282
  /* @__PURE__ */ N("nav", {
282
283
  className: "space-y-0.5",
283
- "aria-label": W("workspaceNav"),
284
+ "aria-label": U("workspaceNav"),
284
285
  children: [
285
- /* @__PURE__ */ M(U, {
286
+ /* @__PURE__ */ M(H, {
286
287
  rail: n,
287
- label: W("notifications"),
288
+ label: U("notifications"),
288
289
  children: /* @__PURE__ */ N(r, {
289
290
  to: "/$workspace/notifications",
290
291
  params: { workspace: f },
291
- onContextMenu: (e) => R(e, q(`/${f}/notifications`)),
292
+ onContextMenu: (e) => L(e, K(`/${f}/notifications`)),
292
293
  className: i,
293
- activeProps: z,
294
- children: [/* @__PURE__ */ M(le, { className: "size-4" }), n ? /* @__PURE__ */ N(j, { children: [a(W("notifications")), Nt > 0 && /* @__PURE__ */ M("span", { className: it })] }) : /* @__PURE__ */ N(j, { children: [/* @__PURE__ */ M("span", {
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: W("notifications")
297
- }), /* @__PURE__ */ M(We, {
298
- count: Nt,
299
- locale: _t,
300
- label: W("unreadCount")
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(U, {
305
+ /* @__PURE__ */ M(H, {
305
306
  rail: n,
306
- label: W("myIssues"),
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) => R(e, [
312
- J("my-issues"),
312
+ onContextMenu: (e) => L(e, [
313
+ q("my-issues"),
313
314
  D,
314
- ...q(`/${f}/issues?assignee=${p.user.username}`)
315
+ ...K(`/${f}/issues?assignee=${p.user.username}`)
315
316
  ]),
316
- className: V(i, wt.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
+ 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(W("myIssues"))
321
+ a(U("myIssues"))
321
322
  ]
322
323
  })
323
324
  }),
324
- /* @__PURE__ */ M(U, {
325
+ /* @__PURE__ */ M(H, {
325
326
  rail: n,
326
- label: W("projects"),
327
+ label: U("projects"),
327
328
  children: /* @__PURE__ */ N(r, {
328
329
  to: "/$workspace/projects",
329
330
  params: { workspace: f },
330
- onContextMenu: (e) => R(e, [
331
- J("projects"),
331
+ onContextMenu: (e) => L(e, [
332
+ q("projects"),
332
333
  D,
333
- ...q(`/${f}/projects`)
334
+ ...K(`/${f}/projects`)
334
335
  ]),
335
336
  className: i,
336
- activeProps: z,
337
+ activeProps: R,
337
338
  children: [
338
339
  /* @__PURE__ */ M(ue, { className: "size-4" }),
339
340
  " ",
340
- a(W("projects"))
341
+ a(U("projects"))
341
342
  ]
342
343
  })
343
344
  }),
344
- /* @__PURE__ */ M(U, {
345
+ /* @__PURE__ */ M(H, {
345
346
  rail: n,
346
- label: W("knowledge"),
347
+ label: U("knowledge"),
347
348
  children: /* @__PURE__ */ N(r, {
348
349
  to: "/$workspace/knowledge",
349
350
  params: { workspace: f },
350
- onContextMenu: (e) => R(e, [
351
- J("knowledge"),
351
+ onContextMenu: (e) => L(e, [
352
+ q("knowledge"),
352
353
  D,
353
- ...q(`/${f}/knowledge`)
354
+ ...K(`/${f}/knowledge`)
354
355
  ]),
355
356
  className: i,
356
- activeProps: z,
357
+ activeProps: R,
357
358
  children: [
358
359
  /* @__PURE__ */ M(se, { className: "size-4" }),
359
360
  " ",
360
- a(W("knowledge"))
361
+ a(U("knowledge"))
361
362
  ]
362
363
  })
363
364
  }),
364
- /* @__PURE__ */ M(U, {
365
+ /* @__PURE__ */ M(H, {
365
366
  rail: n,
366
- label: W("agents"),
367
+ label: U("agents"),
367
368
  children: /* @__PURE__ */ N(r, {
368
369
  to: "/$workspace/agents",
369
370
  params: { workspace: f },
370
- onContextMenu: (e) => R(e, [
371
- J("agents"),
371
+ onContextMenu: (e) => L(e, [
372
+ q("agents"),
372
373
  D,
373
- ...q(`/${f}/agents`)
374
+ ...K(`/${f}/agents`)
374
375
  ]),
375
376
  className: i,
376
- activeProps: z,
377
+ activeProps: R,
377
378
  children: [
378
379
  /* @__PURE__ */ M(ne, { className: "size-4" }),
379
380
  " ",
380
- a(W("agents"))
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": W("teams"),
389
- children: g.filter((e) => !e.archivedAt).map((e) => /* @__PURE__ */ M(U, {
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) => R(t, yt(e)),
399
- className: V(i, pe(Y.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"),
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(x, {
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
- jt(e.id) > 0 && /* @__PURE__ */ M("span", { className: it })
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(ut, {
413
+ /* @__PURE__ */ M(ft, {
413
414
  workspace: f,
414
- current: wt.saved
415
+ current: Et.saved
415
416
  }),
416
- /* @__PURE__ */ M(Ee, {
417
+ /* @__PURE__ */ M(Oe, {
417
418
  workspace: f,
418
419
  myUsername: p.user.username,
419
- currentHref: Y.pathname + Y.searchStr
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: W("teams")
426
- }), Oe && /* @__PURE__ */ M(T, {
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: W("createTeam"),
431
- onClick: () => S(!0),
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": W("teams"),
438
- children: [g.filter((e) => !e.archivedAt).map((e) => /* @__PURE__ */ N(Ye, { children: [/* @__PURE__ */ N("div", {
439
- className: V(_, "group gap-0 pr-1 pl-0"),
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: () => Dt(e.key),
443
- onContextMenu: (t) => R(t, yt(e)),
444
- "aria-expanded": !Tt.has(e.key),
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(x, {
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: V("size-3 shrink-0 text-muted-foreground transition-transform", Tt.has(e.key) && "-rotate-90") })
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(tt, {
459
- items: () => yt(e),
460
- label: G("moreActionsFor", { name: e.name })
460
+ }), /* @__PURE__ */ M(nt, {
461
+ items: () => xt(e),
462
+ label: W("moreActionsFor", { name: e.name })
461
463
  })]
462
- }), !Tt.has(e.key) && /* @__PURE__ */ N(j, { children: [
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) => R(t, q(m(f, e.key, "triage"))),
470
- className: V("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", X("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
+ 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: W("triage")
477
+ children: U("triage")
476
478
  }),
477
- /* @__PURE__ */ M(We, {
478
- count: jt(e.id),
479
- locale: _t,
480
- label: W("triageCount")
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) => R(t, q(m(f, e.key, "issues"))),
491
- className: V("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", wt.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
+ 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
- W("issues")
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) => R(t, q(m(f, e.key, "projects"))),
505
- className: V("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", X("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
+ 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
- W("projects")
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) => R(t, q(m(f, e.key, "areas"))),
519
- className: V("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", X("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
+ 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
- W("areas")
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) => R(t, q(m(f, e.key, "decisions"))),
533
- className: V("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", X("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
+ 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: W("decisions")
540
+ children: U("decisions")
539
541
  }),
540
- /* @__PURE__ */ M(We, {
541
- count: Ot.filter((t) => t.identifier.startsWith(`${e.key}-`)).length,
542
- locale: _t,
543
- label: W("waitingCount"),
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(Te, {
550
+ /* @__PURE__ */ M(De, {
549
551
  workspace: f,
550
552
  team: e,
551
- current: rt(Y.pathname, f)
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: V("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"),
560
- activeProps: z,
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
- W("cycles")
567
+ U("cycles")
566
568
  ]
567
569
  })
568
- ] })] }, e.id)), g.length === 0 && (Oe ? /* @__PURE__ */ N("button", {
570
+ ] })] }, e.id)), _.length === 0 && (S ? /* @__PURE__ */ N("button", {
569
571
  type: "button",
570
- onClick: () => S(!0),
571
- className: V("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
+ 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
- W("createFirstTeam")
577
+ U("createFirstTeam")
576
578
  ]
577
579
  }) : /* @__PURE__ */ M("p", {
578
580
  className: "px-2 text-sm text-muted-foreground",
579
- children: W("noTeams")
581
+ children: U("noTeams")
580
582
  }))]
581
583
  })
582
584
  ] })
583
585
  ] });
584
- }, Gt = Z ? void 0 : ({ expanded: e, isMobile: t }) => {
586
+ }, Kt = X ? void 0 : ({ expanded: e, isMobile: t }) => {
585
587
  let n = [
586
588
  {
587
- label: W("myAccount"),
588
- onClick: () => w({
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: W("settings"),
595
- onClick: () => w({
596
+ label: U("settings"),
597
+ onClick: () => C({
596
598
  to: "/$workspace/settings",
597
599
  params: { workspace: f }
598
600
  })
599
601
  },
600
- ...zt ? [{
601
- label: W("installApp"),
602
- onClick: Re
602
+ ...Bt ? [{
603
+ label: U("installApp"),
604
+ onClick: ze
603
605
  }] : [],
604
- ...Vt ? [D, {
605
- label: W("signOut"),
606
- onClick: Ht
606
+ ...Ht ? [D, {
607
+ label: U("signOut"),
608
+ onClick: Ut
607
609
  }] : []
608
- ], r = /* @__PURE__ */ M(He, {
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(lt, {
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(Ve, {
620
- label: W("accountMenu", { name: p.user.name }),
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(Ve, {
637
- label: W("accountMenu", { name: p.user.name }),
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
- }, Kt = /* @__PURE__ */ M(ot, {
648
+ }, qt = /* @__PURE__ */ M(ct, {
647
649
  workspace: f,
648
- name: h.name,
650
+ name: g.name,
649
651
  apps: p.apps ?? [],
650
- unread: Nt,
652
+ unread: Ft,
651
653
  onSearch: () => $(!0),
652
654
  onNewIssue: () => Q()
653
655
  });
654
- return /* @__PURE__ */ M(Le, {
656
+ return /* @__PURE__ */ M(Re, {
655
657
  workspace: f,
656
- children: /* @__PURE__ */ M(De, {
658
+ children: /* @__PURE__ */ M(ke, {
657
659
  actions: p.actions ?? [],
658
- children: /* @__PURE__ */ M(ve.Provider, {
660
+ children: /* @__PURE__ */ M(_e.Provider, {
659
661
  value: Q,
660
- children: /* @__PURE__ */ N(ye.Provider, {
661
- value: Lt,
662
+ children: /* @__PURE__ */ N(ve.Provider, {
663
+ value: Rt,
662
664
  children: [
663
- v ? /* @__PURE__ */ M(st, {
665
+ v ? /* @__PURE__ */ M(lt, {
664
666
  sidebar: v.sidebar,
665
- brand: Ut,
666
- navigation: Wt,
667
- header: Kt,
668
- presence: /* @__PURE__ */ M(lt, {
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(ct, { children: /* @__PURE__ */ M(qe, {}) })
673
- }) : /* @__PURE__ */ M(nt, {
674
- expanded: bt || Z,
674
+ children: /* @__PURE__ */ M(ut, { children: /* @__PURE__ */ M(Je, {}) })
675
+ }) : /* @__PURE__ */ M(rt, {
676
+ expanded: St || X,
675
677
  onExpandedChange: (e) => {
676
- xt(e), pt({
678
+ Ct(e), ht({
677
679
  expanded: e,
678
- width: St
680
+ width: wt
679
681
  });
680
682
  },
681
- width: St,
683
+ width: wt,
682
684
  onWidthChange: (e) => {
683
- Ct(e), pt({
684
- expanded: bt,
685
+ Tt(e), ht({
686
+ expanded: St,
685
687
  width: e
686
688
  });
687
689
  },
688
- navigationKey: Y.pathname + Y.searchStr,
689
- navigationResetKey: Z ? "settings" : "workspace",
690
+ navigationKey: J.pathname + J.searchStr,
691
+ navigationResetKey: X ? "settings" : "workspace",
690
692
  mainClassName: "flex flex-col overflow-hidden",
691
693
  labels: {
692
- navigation: W("navigation"),
693
- skipToContent: W("skipToContent"),
694
- openNavigation: W("openNav"),
695
- closeNavigation: W("closeNav"),
696
- expandSidebar: W("expandSidebar"),
697
- collapseSidebar: W("collapseSidebar"),
698
- resizeSidebar: W("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: Kt,
701
- brand: Ut,
702
- navigation: Wt,
703
- footer: Gt,
704
- children: /* @__PURE__ */ M(ct, { children: /* @__PURE__ */ M(qe, {}) })
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(Ae, { workspace: f }),
707
- !Rt && /* @__PURE__ */ M(gt, {}),
708
- /* @__PURE__ */ M(we, {
708
+ /* @__PURE__ */ M(je, { workspace: f }),
709
+ !zt && /* @__PURE__ */ M(vt, {}),
710
+ /* @__PURE__ */ M(Ee, {
709
711
  workspace: f,
710
- open: Ft,
712
+ open: It,
711
713
  onClose: () => $(!1),
712
- selection: It
714
+ selection: Lt
713
715
  }),
714
- /* @__PURE__ */ M(Pe, { workspace: f }),
715
- Ce && /* @__PURE__ */ M(Me, {
716
+ /* @__PURE__ */ M(Fe, { workspace: f }),
717
+ we && /* @__PURE__ */ M(Ne, {
716
718
  workspace: f,
717
- onClose: () => S(!1)
719
+ onClose: () => b(!1)
718
720
  }),
719
- y && /* @__PURE__ */ M(Xe, { children: /* @__PURE__ */ M(Ne, {
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: () => b(null)
730
+ onClose: () => Ce(null)
729
731
  }) })
730
732
  ]
731
733
  })
@@ -733,7 +735,7 @@ function H() {
733
735
  })
734
736
  });
735
737
  }
736
- function U({ rail: e, label: t, children: n }) {
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 at() {
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 ot({ workspace: e, name: n, apps: r, unread: i, onSearch: a, onNewIssue: o }) {
750
- let { isMobile: s } = L(), c = t(), l = A("workspace");
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(C, {}),
760
- !c && /* @__PURE__ */ M(me, { apps: r }),
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 st({ sidebar: e, brand: t, navigation: n, header: r, presence: i, children: a }) {
787
- let o = L();
788
- return /* @__PURE__ */ N(j, { children: [e && R(/* @__PURE__ */ N("div", {
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 ct({ children: e }) {
801
- let { state: t } = S(), n = t?.open && t.maximized;
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: V("min-h-0 min-w-0 flex-1 overflow-y-auto bg-card", n && "hidden"),
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(Oe, {})] });
807
+ }), /* @__PURE__ */ M(S, {})] });
806
808
  }
807
- function lt({ myUsername: e, workspace: t }) {
808
- let { people: n, page: r } = Re(), { person: i } = g(t), a = A("workspace"), o = new Set(n.map((e) => e.username).filter((t) => t !== e));
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(w, {
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(ke, {
821
+ children: s.map((e) => /* @__PURE__ */ M(Ae, {
820
822
  workspace: t,
821
823
  handle: e,
822
- children: /* @__PURE__ */ M(He, {
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 ut({ workspace: e, current: t }) {
837
- let n = A("savedViews"), i = A("common"), a = Ke(), { views: o } = y(e), { menu: s, dialogs: c } = b(e);
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: V(_, "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"),
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: Ce(o),
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(tt, {
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 W = (e) => `tandem:collapsed-teams:${e}`;
873
- function dt(e) {
874
+ var U = (e) => `tandem:collapsed-teams:${e}`;
875
+ function pt(e) {
874
876
  try {
875
- let t = JSON.parse(localStorage.getItem(W(e)) ?? "[]");
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 G = "tandem:sidebar";
882
- function ft() {
883
+ var W = "tandem:sidebar";
884
+ function mt() {
883
885
  try {
884
- let e = JSON.parse(localStorage.getItem(G) ?? "{}");
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 pt(e) {
898
+ function ht(e) {
897
899
  try {
898
- localStorage.setItem(G, JSON.stringify(e));
900
+ localStorage.setItem(W, JSON.stringify(e));
899
901
  } catch {}
900
902
  }
901
- function mt(e, t) {
903
+ function gt(e, t) {
902
904
  try {
903
- localStorage.setItem(W(e), JSON.stringify([...t]));
905
+ localStorage.setItem(U(e), JSON.stringify([...t]));
904
906
  } catch {}
905
907
  }
906
- function ht() {
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 gt() {
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 { H as component };
921
+ export { V as component };