@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
package/pages/issues.js CHANGED
@@ -2,174 +2,187 @@ import { basePath as e } from "../lib/base.js";
2
2
  import { ErrorMessage as t } from "../components/status.js";
3
3
  import { usePageTitle as n } from "../lib/pageTitle.js";
4
4
  import { useNavigate as r } from "../lib/router.js";
5
- import { cyclesQuery as i, issuesQuery as a, labelsQuery as ee, meQuery as te, projectsQuery as ne, statusesQuery as re, teamsQuery as ie } from "../api/queries.js";
6
- import { BoardIcon as ae, ChartIcon as oe, CloseIcon as se, DownloadIcon as ce, ListViewIcon as le, SidePanelIcon as ue, UploadIcon as de, usePriorityNames as fe } from "../components/icons.js";
7
- import { isViewAt as pe, viewRef as me } from "../lib/refs.js";
8
- import { groupIssues as he, groupings as ge, issueFilterOf as _e, orders as ve, sortIssues as ye, views as o } from "../lib/issueList.js";
9
- import { issuesHref as be } from "../lib/teamPaths.js";
10
- import { usePeople as xe } from "../lib/people.js";
11
- import { useIssueMenu as Se } from "../lib/issueMenu.js";
12
- import { useNewIssue as Ce } from "../lib/newIssue.js";
13
- import { usePaletteSelection as we } from "../lib/palette.js";
14
- import { useCan as Te } from "../lib/roles.js";
15
- import { ViewDialog as Ee } from "../components/ViewDialog.js";
16
- import { filtersOf as De, sameFilters as Oe, useSavedViews as ke, viewSearch as Ae } from "../lib/views.js";
17
- import { projectRef as je } from "../lib/projects.js";
18
- import { useBoardMove as Me } from "../lib/boardMove.js";
19
- import { IssueBoard as Ne } from "../components/IssueBoard.js";
20
- import { useIssueFilters as Pe, withIssueFilters as Fe } from "../components/IssueFilters.js";
21
- import { IssueRow as Ie } from "../components/IssueRow.js";
22
- import { useLive as Le } from "../lib/live.js";
23
- import { useShortcuts as Re } from "../lib/shortcuts.js";
24
- import { FavoriteStar as ze } from "../components/FavoriteStar.js";
25
- import { DisplayMenu as Be } from "../components/DisplayMenu.js";
26
- import { IssueBreakdown as Ve, breakdownKeys as He } from "../components/IssueBreakdown.js";
27
- import { IssueImport as Ue, pickCsv as We } from "../components/IssueImport.js";
28
- import { IssueInsights as Ge } from "../components/IssueInsights.js";
29
- import { IssueSection as Ke } from "../components/IssueSection.js";
30
- import { insightsKey as qe, listTabs as Je, panelKey as Ye, storeDisplay as s, storedDisplay as Xe, withParam as c } from "../lib/issueDisplay.js";
31
- import { ActionMenu as Ze, Button as l, Field as Qe, IconButton as u, SearchInput as $e, Select as et, Tabs as tt, useOpenMenu as nt } from "@parallelworks/ui";
32
- import { useParams as rt, useSearch as it } from "@tanstack/react-router";
33
- import { useEffect as d, useMemo as f, useRef as p, useState as m } from "react";
34
- import { useTranslations as h } from "use-intl";
35
- import { Fragment as at, jsx as g, jsxs as _ } from "react/jsx-runtime";
36
- import { keepPreviousData as ot, useQuery as v, useSuspenseQuery as st } from "@tanstack/react-query";
37
- import { ListFilterBar as ct, ListFilterMenu as lt, ListSkeleton as ut } from "@parallelworks/ui/list";
5
+ import { cyclesQuery as i, issuesQuery as ee, labelsQuery as te, meQuery as ne, projectsQuery as re, statusesQuery as ie, teamsQuery as ae } from "../api/queries.js";
6
+ import { customFieldsQuery as oe, fieldRef as se, fieldsForTeams as ce, groupableKinds as le, sortableKinds as ue } from "../lib/customFields.js";
7
+ import { issueTypesQuery as de } from "../lib/issueTypes.js";
8
+ import { BoardIcon as fe, ChartIcon as pe, CloseIcon as me, DownloadIcon as he, ListViewIcon as ge, SidePanelIcon as _e, UploadIcon as ve, usePriorityNames as ye } from "../components/icons.js";
9
+ import { isViewAt as be, viewRef as xe } from "../lib/refs.js";
10
+ import { groupIssues as Se, groupings as Ce, isGrouping as we, isOrder as Te, issueFilterOf as Ee, orders as De, sortIssues as Oe, views as ke } from "../lib/issueList.js";
11
+ import { issuesHref as Ae } from "../lib/teamPaths.js";
12
+ import { usePeople as je } from "../lib/people.js";
13
+ import { useIssueMenu as Me } from "../lib/issueMenu.js";
14
+ import { useNewIssue as Ne } from "../lib/newIssue.js";
15
+ import { usePaletteSelection as Pe } from "../lib/palette.js";
16
+ import { useCan as Fe } from "../lib/roles.js";
17
+ import { ViewDialog as Ie } from "../components/ViewDialog.js";
18
+ import { filtersOf as Le, sameFilters as Re, useSavedViews as ze, viewSearch as Be } from "../lib/views.js";
19
+ import { projectRef as Ve } from "../lib/projects.js";
20
+ import { useBoardMove as He } from "../lib/boardMove.js";
21
+ import { IssueBoard as Ue } from "../components/IssueBoard.js";
22
+ import { useIssueFilters as We, withIssueFilters as Ge } from "../components/IssueFilters.js";
23
+ import { IssueRow as Ke } from "../components/IssueRow.js";
24
+ import { useLive as qe } from "../lib/live.js";
25
+ import { useShortcuts as Je } from "../lib/shortcuts.js";
26
+ import { FavoriteStar as Ye } from "../components/FavoriteStar.js";
27
+ import { DisplayMenu as Xe } from "../components/DisplayMenu.js";
28
+ import { IssueBreakdown as Ze, breakdownKeys as Qe } from "../components/IssueBreakdown.js";
29
+ import { IssueImport as $e, pickCsv as et } from "../components/IssueImport.js";
30
+ import { IssueInsights as tt } from "../components/IssueInsights.js";
31
+ import { IssueSection as nt } from "../components/IssueSection.js";
32
+ import { insightsKey as rt, listTabs as it, panelKey as at, shownFields as ot, storeDisplay as a, storeShownFields as st, storedDisplay as ct, withParam as o } from "../lib/issueDisplay.js";
33
+ import { ActionMenu as lt, Button as s, Field as ut, IconButton as c, SearchInput as dt, Select as ft, Tabs as pt, useOpenMenu as mt } from "@parallelworks/ui";
34
+ import { useParams as ht, useSearch as gt } from "@tanstack/react-router";
35
+ import { useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
36
+ import { useTranslations as p } from "use-intl";
37
+ import { Fragment as _t, jsx as m, jsxs as h } from "react/jsx-runtime";
38
+ import { keepPreviousData as vt, useQuery as g, useSuspenseQuery as yt } from "@tanstack/react-query";
39
+ import { ListFilterBar as bt, ListFilterMenu as xt, ListSkeleton as St } from "@parallelworks/ui/list";
38
40
  // src/pages/issues.tsx
39
- function y(e) {
41
+ function Ct(e) {
40
42
  let { assignee: t, creator: n, ...r } = e;
41
43
  return n ? {
42
44
  ...r,
43
45
  creator: n
44
46
  } : r;
45
47
  }
46
- function b({ person: e } = {}) {
47
- let b = h("issues"), x = h("planning"), { workspace: S, key: C } = rt({ strict: !1 }), w = it({ strict: !1 }), T = C ? {
48
- ...w,
49
- team: C
50
- } : e ? w.creator ? {
51
- ...y(w),
48
+ function _({ person: e } = {}) {
49
+ let _ = p("issues"), Et = p("planning"), { workspace: v, key: y } = ht({ strict: !1 }), b = gt({ strict: !1 }), x = y ? {
50
+ ...b,
51
+ team: y
52
+ } : e ? b.creator ? {
53
+ ...Ct(b),
52
54
  creator: e
53
55
  } : {
54
- ...w,
56
+ ...b,
55
57
  assignee: e
56
- } : w, pt = r(), mt = (t) => e ? be(S, { ...y(t) }).replace(`/${S}/issues`, `/${S}/people/${encodeURIComponent(e)}`) : be(S, { ...t }), E = (t, n) => {
58
+ } : b, Dt = r(), Ot = (t) => e ? Ae(v, { ...Ct(t) }).replace(`/${v}/issues`, `/${v}/people/${encodeURIComponent(e)}`) : Ae(v, { ...t }), S = (t, n) => {
57
59
  let { team: r, ...i } = t;
58
- return pt(e ? {
60
+ return Dt(e ? {
59
61
  to: "/$workspace/people/$username",
60
62
  params: {
61
- workspace: S,
63
+ workspace: v,
62
64
  username: e
63
65
  },
64
- search: y(i),
66
+ search: Ct(i),
65
67
  ...n && { replace: n }
66
68
  } : r ? {
67
69
  to: "/$workspace/teams/$key/issues",
68
70
  params: {
69
- workspace: S,
71
+ workspace: v,
70
72
  key: r
71
73
  },
72
74
  search: i,
73
75
  ...n && { replace: n }
74
76
  } : {
75
77
  to: "/$workspace/issues",
76
- params: { workspace: S },
78
+ params: { workspace: v },
77
79
  search: i,
78
80
  ...n && { replace: n }
79
81
  });
80
- }, ht = p((e) => E(e, !0));
81
- ht.current = (e) => E(e, !0);
82
- let gt = p((e) => E(c(T, "q", e), !0));
83
- gt.current = (e) => E(c(T, "q", e), !0);
84
- let { data: D } = st(te), { data: O } = st(ie(S)), _t = Ce(), k = T.view ?? "active", [A, vt] = m(T.q ?? ""), j = p(null);
85
- d(() => {
82
+ }, kt = d((e) => S(e, !0));
83
+ kt.current = (e) => S(e, !0);
84
+ let At = d((e) => S(o(x, "q", e), !0));
85
+ At.current = (e) => S(o(x, "q", e), !0);
86
+ let { data: C } = yt(ne), { data: w } = yt(ae(v)), jt = Ne(), T = x.view ?? "active", [E, Mt] = f(x.q ?? ""), D = d(null);
87
+ l(() => {
86
88
  let e = setTimeout(() => {
87
- (T.q ?? "") !== A && gt.current(A);
89
+ (x.q ?? "") !== E && At.current(E);
88
90
  }, 250);
89
91
  return () => clearTimeout(e);
90
- }, [A, T.q]);
91
- let { data: yt } = v({
92
- ...re(S, T.team ?? ""),
93
- enabled: !!T.status && !!T.team
94
- }), bt = _e(T, yt), { data: M, error: xt, isFetching: St } = v({
95
- ...a(S, bt),
96
- placeholderData: ot,
97
- enabled: !T.status || !T.team || !!yt
98
- }), N = M?.issues ?? [], Ct = fe(), { nameOf: wt, avatarOf: Tt } = xe(S), Et = T.saved ? {} : Xe(), P = ve.includes(T.order) ? T.order : Et.order ?? "updated", F = ge.includes(T.group) ? T.group : Et.group ?? "status", I = T.layout === "board" || !T.layout && Et.layout === "board", [Dt, Ot] = m(() => {
92
+ }, [E, x.q]);
93
+ let { data: Nt } = g({
94
+ ...ie(v, x.team ?? ""),
95
+ enabled: !!x.status && !!x.team
96
+ }), Pt = Ee(x, Nt), { data: O, error: Ft, isFetching: It } = g({
97
+ ...ee(v, Pt),
98
+ placeholderData: vt,
99
+ enabled: !x.status || !x.team || !!Nt
100
+ }), k = O?.issues ?? [], Lt = ye(), { nameOf: Rt, avatarOf: zt } = je(v), A = x.saved ? {} : ct(), { data: Bt } = g(oe(v)), j = w.find((e) => e.key === x.team), M = u(() => ce(Bt, j ? [j.id] : w.map((e) => e.id)), [
101
+ Bt,
102
+ j,
103
+ w
104
+ ]), N = p("customFields"), Vt = p("issueTypes"), { data: Ht } = g(de(v)), Ut = u(() => (Ht ?? []).filter((e) => !e.archivedAt && (!j || e.teamIds.length === 0 || e.teamIds.includes(j.id))), [Ht, j]), P = Te(x.order, M) ? x.order : Te(A.order, M) ? A.order : "updated", F = we(x.group, M) ? x.group : we(A.group, M) ? A.group : "status", Wt = M.find((e) => e.id === se(F)), [Gt, Kt] = f(() => ot(v)), qt = M.filter((e) => Gt.includes(e.id)), I = x.layout === "board" || !x.layout && A.layout === "board", [Jt, Yt] = f(() => {
99
105
  try {
100
- return localStorage.getItem(Ye) !== "hidden";
106
+ return localStorage.getItem(at) !== "hidden";
101
107
  } catch {
102
108
  return !0;
103
109
  }
104
- }), kt = () => Ot((e) => {
110
+ }), Xt = () => Yt((e) => {
105
111
  try {
106
- localStorage.setItem(Ye, e ? "hidden" : "shown");
112
+ localStorage.setItem(at, e ? "hidden" : "shown");
107
113
  } catch {}
108
114
  return !e;
109
- }), [At, jt] = m(() => {
115
+ }), [Zt, Qt] = f(() => {
110
116
  try {
111
- return localStorage.getItem(qe) === "shown";
117
+ return localStorage.getItem(rt) === "shown";
112
118
  } catch {
113
119
  return !1;
114
120
  }
115
- }), Mt = () => jt((e) => {
121
+ }), $t = () => Qt((e) => {
116
122
  try {
117
- localStorage.setItem(qe, e ? "hidden" : "shown");
123
+ localStorage.setItem(rt, e ? "hidden" : "shown");
118
124
  } catch {}
119
125
  return !e;
120
- }), [Nt, Pt] = m("assignees"), [L, Ft] = m(null), R = L ? N.filter((e) => He(e, L.tab).includes(L.key)) : N, z = f(() => he(ye(R, P), F, {
121
- status: (e) => b(`groups.${e}`),
122
- priority: (e) => Ct[e] ?? "",
123
- person: wt,
124
- avatar: Tt,
126
+ }), [en, tn] = f("assignees"), [L, nn] = f(null), R = L ? k.filter((e) => Qe(e, L.tab).includes(L.key)) : k, z = u(() => Se(Oe(R, P, M), F, {
127
+ status: (e) => _(`groups.${e}`),
128
+ priority: (e) => Lt[e] ?? "",
129
+ person: Rt,
130
+ avatar: zt,
125
131
  none: {
126
- assignee: b("noAssignee"),
127
- project: b("noProject"),
128
- label: b("noLabel"),
129
- all: b("all")
130
- }
131
- }, I), [
132
+ assignee: _("noAssignee"),
133
+ project: _("noProject"),
134
+ label: _("noLabel"),
135
+ all: _("all")
136
+ },
137
+ noField: (e) => N("noField", { name: e }),
138
+ yes: N("yes"),
139
+ noType: Vt("noType")
140
+ }, I, M, Ut), [
132
141
  R,
133
142
  P,
134
143
  F,
135
- b,
136
- Ct,
137
- wt,
138
- Tt,
139
- I
140
- ]), B = f(() => z.flatMap((e) => e.issues), [z]), [It, Lt] = m(0), V = B[Math.min(It, B.length - 1)], [H, U] = m(/* @__PURE__ */ new Set()), W = p(null), Rt = Se(S), zt = Me(S, O), { people: Bt } = Le(), Vt = f(() => {
144
+ _,
145
+ N,
146
+ Vt,
147
+ Lt,
148
+ Rt,
149
+ zt,
150
+ I,
151
+ M,
152
+ Ut
153
+ ]), B = u(() => z.flatMap((e) => e.issues), [z]), [rn, an] = f(0), V = B[Math.min(rn, B.length - 1)], [H, U] = f(/* @__PURE__ */ new Set()), W = d(null), on = Me(v), sn = He(v, w), { people: cn } = qe(), ln = u(() => {
141
154
  let e = /* @__PURE__ */ new Map();
142
- for (let t of Bt) {
143
- if (!t.identifier || t.username === D?.user.username) continue;
155
+ for (let t of cn) {
156
+ if (!t.identifier || t.username === C?.user.username) continue;
144
157
  let n = e.get(t.identifier) ?? /* @__PURE__ */ new Set();
145
158
  n.add(t.username), e.set(t.identifier, n);
146
159
  }
147
160
  return e;
148
- }, [Bt, D?.user.username]), Ht = nt(), Ut = f(() => B.filter((e) => H.has(e.id)), [B, H]);
149
- we(Ut);
150
- let Wt = (e) => U((t) => {
161
+ }, [cn, C?.user.username]), un = mt(), dn = u(() => B.filter((e) => H.has(e.id)), [B, H]);
162
+ Pe(dn);
163
+ let fn = (e) => U((t) => {
151
164
  let n = new Set(t);
152
165
  return n.has(e) ? n.delete(e) : n.add(e), n;
153
- }), Gt = (e) => {
154
- (W.current === null || H.size === 0) && (W.current = Math.max(It, 0));
166
+ }), pn = (e) => {
167
+ (W.current === null || H.size === 0) && (W.current = Math.max(rn, 0));
155
168
  let t = W.current, [n, r] = t < e ? [t, e] : [e, t];
156
169
  U(new Set(B.slice(n, r + 1).map((e) => e.id)));
157
- }, Kt = (e, t) => {
170
+ }, mn = (e, t) => {
158
171
  let n = B[e];
159
172
  if (n) {
160
- if (t) return Gt(e);
161
- Wt(n.id), W.current = e;
173
+ if (t) return pn(e);
174
+ fn(n.id), W.current = e;
162
175
  }
163
- }, qt = (e, t) => {
164
- (e.metaKey || e.ctrlKey || e.shiftKey) && (e.preventDefault(), Kt(t, e.shiftKey));
176
+ }, hn = (e, t) => {
177
+ (e.metaKey || e.ctrlKey || e.shiftKey) && (e.preventDefault(), mn(t, e.shiftKey));
165
178
  }, G = (e, t) => {
166
- let n = Math.min(Math.max(It + e, 0), B.length - 1);
167
- t && Gt(n), Lt(n);
168
- }, Jt = (e, t) => {
179
+ let n = Math.min(Math.max(rn + e, 0), B.length - 1);
180
+ t && pn(n), an(n);
181
+ }, gn = (e, t) => {
169
182
  let n = H.has(t.id) ? B.filter((e) => H.has(e.id)) : [t];
170
- H.has(t.id) || U(/* @__PURE__ */ new Set()), Ht(e, Rt(n));
183
+ H.has(t.id) || U(/* @__PURE__ */ new Set()), un(e, on(n));
171
184
  };
172
- Re({
185
+ Je({
173
186
  ...!I && {
174
187
  j: () => G(1, !1),
175
188
  k: () => G(-1, !1),
@@ -177,200 +190,226 @@ function b({ person: e } = {}) {
177
190
  K: () => G(-1, !0),
178
191
  ArrowDown: (e) => G(1, e.shiftKey),
179
192
  ArrowUp: (e) => G(-1, e.shiftKey),
180
- x: () => V && Kt(B.indexOf(V), !1),
181
- Enter: () => V && pt({
193
+ x: () => V && mn(B.indexOf(V), !1),
194
+ Enter: () => V && Dt({
182
195
  to: "/$workspace/issues/$identifier",
183
196
  params: {
184
- workspace: S,
197
+ workspace: v,
185
198
  identifier: V.identifier
186
199
  }
187
200
  })
188
201
  },
189
202
  Escape: () => U(/* @__PURE__ */ new Set()),
190
- "/": () => j.current?.focus()
191
- }), d(() => {
203
+ "/": () => D.current?.focus()
204
+ }), l(() => {
192
205
  let e = (e) => {
193
- (e.metaKey || e.ctrlKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === "f" && (e.preventDefault(), j.current?.focus(), j.current?.select());
206
+ (e.metaKey || e.ctrlKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === "f" && (e.preventDefault(), D.current?.focus(), D.current?.select());
194
207
  };
195
208
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
196
- }, []), d(() => {
209
+ }, []), l(() => {
197
210
  document.getElementById(`row-${V?.id}`)?.scrollIntoView({ block: "nearest" });
198
211
  }, [V]);
199
- let K = O.find((e) => e.key === T.team), q = Pe(S, T, (e) => E(Fe(T, e), !0), !!C && !T.assignee && !T.creator && !T.saved), Yt = be(S, { ...c(T, "q", void 0) }), { views: Xt, create: Zt, update: Qt } = ke(S), J = Xt.find((e) => pe(e, T.saved)), { data: $t } = v(ee(S)), { data: en } = v(ne(S)), { data: tn } = v({
200
- ...i(S, K?.key ?? ""),
212
+ let K = w.find((e) => e.key === x.team), q = We(v, x, (e) => S(Ge(x, e), !0), !!y && !x.assignee && !x.creator && !x.saved), _n = Ae(v, { ...o(x, "q", void 0) }), { views: vn, create: yn, update: bn } = ze(v), J = vn.find((e) => be(e, x.saved)), { data: xn } = g(te(v)), { data: Sn } = g(re(v)), { data: Cn } = g({
213
+ ...i(v, K?.key ?? ""),
201
214
  enabled: !!K
202
215
  });
203
- d(() => {
204
- let e = /^[0-9a-f]{8}-[0-9a-f]{4}-/i, t = { ...T }, n = $t?.find((e) => e.id === T.label);
205
- T.label && e.test(T.label) && n && (t.label = n.name);
206
- let r = en?.find((e) => e.id === T.project);
207
- T.project && e.test(T.project) && r && (t.project = je(r));
208
- let i = tn?.find((e) => e.id === T.cycle);
209
- T.cycle && e.test(T.cycle) && i && (t.cycle = String(i.number)), T.saved && e.test(T.saved) && J && (t.saved = me(J)), JSON.stringify(t) !== JSON.stringify(T) && ht.current(t);
216
+ l(() => {
217
+ let e = /^[0-9a-f]{8}-[0-9a-f]{4}-/i, t = { ...x }, n = xn?.find((e) => e.id === x.label);
218
+ x.label && e.test(x.label) && n && (t.label = n.name);
219
+ let r = Sn?.find((e) => e.id === x.project);
220
+ x.project && e.test(x.project) && r && (t.project = Ve(r));
221
+ let i = Cn?.find((e) => e.id === x.cycle);
222
+ x.cycle && e.test(x.cycle) && i && (t.cycle = String(i.number)), x.saved && e.test(x.saved) && J && (t.saved = xe(J)), JSON.stringify(t) !== JSON.stringify(x) && kt.current(t);
210
223
  }, [
211
- T,
212
- $t,
213
- en,
214
- tn,
224
+ x,
225
+ xn,
226
+ Sn,
227
+ Cn,
215
228
  J
216
229
  ]);
217
- let Y = De({
218
- ...T,
230
+ let Y = Le({
231
+ ...x,
219
232
  ...P !== "updated" && { order: P },
220
233
  ...F !== "status" && { group: F },
221
234
  ...I && { layout: "board" }
222
- }), nn = J ? !Oe(J.filters, Y) : Object.keys(Y).length > 0, rn = Te(S, "create_issues", T.team ? { team: T.team } : void 0), an = Te(S, "save_views"), [on, sn] = m(!1), [cn, ln] = m(null), X = h("savedViews"), Z = D?.user.username, un = !J && !K && (!T.assigneeKind && T.assignee === Z && !T.creator || T.creator === Z && !T.assignee), Q = e ?? (un ? Z : void 0), $ = J?.name ?? K?.name ?? (e && e !== Z ? b("personIssues", { name: wt("user", e) }) : !T.assigneeKind && T.assignee === Z || T.creator === Z ? b("mine") : b("all")), dn = h("workspace");
223
- n(...K && !J ? [dn("issues"), K.name] : [$]);
224
- let fn = nn && /* @__PURE__ */ _(at, { children: [J?.canEdit && /* @__PURE__ */ g(l, {
235
+ }), wn = J ? !Re(J.filters, Y) : Object.keys(Y).length > 0, Tn = Fe(v, "create_issues", x.team ? { team: x.team } : void 0), En = Fe(v, "save_views"), [Dn, On] = f(!1), [kn, An] = f(null), X = p("savedViews"), Z = C?.user.username, jn = !J && !K && (!x.assigneeKind && x.assignee === Z && !x.creator || x.creator === Z && !x.assignee), Q = e ?? (jn ? Z : void 0), $ = J?.name ?? K?.name ?? (e && e !== Z ? _("personIssues", { name: Rt("user", e) }) : !x.assigneeKind && x.assignee === Z || x.creator === Z ? _("mine") : _("all")), Mn = p("workspace");
236
+ n(...K && !J ? [Mn("issues"), K.name] : [$]);
237
+ let Nn = wn && /* @__PURE__ */ h(_t, { children: [J?.canEdit && /* @__PURE__ */ m(s, {
225
238
  type: "button",
226
239
  size: "sm",
227
- loading: Qt.isPending,
228
- onClick: () => Qt.mutate({
240
+ loading: bn.isPending,
241
+ onClick: () => bn.mutate({
229
242
  id: J.id,
230
243
  filters: Y
231
244
  }),
232
245
  children: X("update")
233
- }), /* @__PURE__ */ g(l, {
246
+ }), /* @__PURE__ */ m(s, {
234
247
  type: "button",
235
248
  size: "sm",
236
- onClick: () => sn(!0),
249
+ onClick: () => On(!0),
237
250
  children: X(J ? "saveAsNew" : "save")
238
251
  })] });
239
- return /* @__PURE__ */ _("div", {
252
+ return /* @__PURE__ */ h("div", {
240
253
  className: "flex h-full flex-col",
241
254
  children: [
242
- /* @__PURE__ */ _("header", {
255
+ /* @__PURE__ */ h("header", {
243
256
  className: "flex min-h-12 shrink-0 flex-wrap items-center gap-x-3 gap-y-2 border-b border-border px-4 py-2 md:px-5",
244
257
  children: [
245
- /* @__PURE__ */ g("h1", {
258
+ /* @__PURE__ */ m("h1", {
246
259
  className: "text-sm font-semibold whitespace-nowrap",
247
260
  children: $
248
261
  }),
249
- /* @__PURE__ */ g(ze, {
250
- workspace: S,
262
+ /* @__PURE__ */ m(Ye, {
263
+ workspace: v,
251
264
  kind: "view",
252
- target: Yt,
253
- label: k === "active" ? $ : b("favoriteLabel", {
265
+ target: _n,
266
+ label: T === "active" ? $ : _("favoriteLabel", {
254
267
  title: $,
255
- view: b(`views.${k}`)
268
+ view: _(`views.${T}`)
256
269
  })
257
270
  }),
258
- Q && /* @__PURE__ */ g(tt, {
271
+ Q && /* @__PURE__ */ m(pt, {
259
272
  variant: "segmented",
260
273
  size: "sm",
261
- label: b("mineScope"),
274
+ label: _("mineScope"),
262
275
  items: ["assigned", "created"].map((e) => ({
263
276
  value: e,
264
- label: b(`mineScopes.${e}`),
265
- href: mt({
266
- ...T.view && { view: T.view },
277
+ label: _(`mineScopes.${e}`),
278
+ href: Ot({
279
+ ...x.view && { view: x.view },
267
280
  ...e === "assigned" ? { assignee: Q } : { creator: Q }
268
281
  })
269
282
  })),
270
- value: T.creator ? "created" : "assigned"
283
+ value: x.creator ? "created" : "assigned"
271
284
  }),
272
- /* @__PURE__ */ g(tt, {
285
+ /* @__PURE__ */ m(pt, {
273
286
  variant: "segmented",
274
287
  size: "sm",
275
- label: b("view"),
276
- items: Object.keys(o).map((e) => ({
288
+ label: _("view"),
289
+ items: Object.keys(ke).map((e) => ({
277
290
  value: e,
278
- label: b(`views.${e}`),
279
- href: mt(c(T, "view", e === "active" ? void 0 : e))
291
+ label: _(`views.${e}`),
292
+ href: Ot(o(x, "view", e === "active" ? void 0 : e))
280
293
  })),
281
- value: k
294
+ value: T
282
295
  }),
283
- /* @__PURE__ */ _("div", {
296
+ /* @__PURE__ */ h("div", {
284
297
  className: "flex w-full min-w-0 flex-wrap items-center gap-2 md:ml-auto md:w-auto md:flex-nowrap",
285
298
  children: [
286
- q.count === 0 && fn,
287
- /* @__PURE__ */ g($e, {
288
- ref: j,
289
- value: A,
290
- onValueChange: vt,
291
- onKeyDown: (e) => e.key === "Escape" && !A && e.currentTarget.blur(),
292
- placeholder: b("search"),
293
- label: b("search"),
299
+ q.count === 0 && Nn,
300
+ /* @__PURE__ */ m(dt, {
301
+ ref: D,
302
+ value: E,
303
+ onValueChange: Mt,
304
+ onKeyDown: (e) => e.key === "Escape" && !E && e.currentTarget.blur(),
305
+ placeholder: _("search"),
306
+ label: _("search"),
294
307
  "aria-keyshortcuts": "/ Meta+F Control+F",
295
308
  size: "sm",
296
309
  className: "min-w-0 flex-1 max-md:order-first max-md:basis-full md:w-56 md:flex-initial"
297
310
  }),
298
- /* @__PURE__ */ g(lt, { filters: q }),
299
- /* @__PURE__ */ _(Be, {
311
+ /* @__PURE__ */ m(xt, { filters: q }),
312
+ /* @__PURE__ */ h(Xe, {
300
313
  layouts: [{
301
314
  value: "list",
302
- label: b("layouts.list"),
303
- icon: /* @__PURE__ */ g(le, {})
315
+ label: _("layouts.list"),
316
+ icon: /* @__PURE__ */ m(ge, {})
304
317
  }, {
305
318
  value: "board",
306
- label: b("layouts.board"),
307
- icon: /* @__PURE__ */ g(ae, {})
319
+ label: _("layouts.board"),
320
+ icon: /* @__PURE__ */ m(fe, {})
308
321
  }],
309
322
  layout: I ? "board" : "list",
310
323
  onLayoutChange: (e) => {
311
- s({ layout: e }), E(c(T, "layout", e === "board" ? "board" : void 0));
324
+ a({ layout: e }), S(o(x, "layout", e === "board" ? "board" : void 0));
312
325
  },
313
326
  changed: P !== "updated" || F !== "status" || I,
314
- children: [/* @__PURE__ */ g(Qe, {
315
- label: b("orderBy"),
316
- children: /* @__PURE__ */ g(et, {
317
- value: P,
318
- items: ve.map((e) => ({
319
- value: e,
320
- label: b(`order.${e}`)
321
- })),
322
- onValueChange: (e) => {
323
- s({ order: e }), E(c(T, "order", e === "updated" ? void 0 : e));
324
- },
325
- "aria-label": b("orderBy"),
326
- size: "sm"
327
+ children: [
328
+ /* @__PURE__ */ m(ut, {
329
+ label: _("orderBy"),
330
+ children: /* @__PURE__ */ m(ft, {
331
+ value: P,
332
+ items: [...De.map((e) => ({
333
+ value: e,
334
+ label: _(`order.${e}`)
335
+ })), ...M.filter((e) => ue.includes(e.kind)).map((e) => ({
336
+ value: `field:${e.id}`,
337
+ label: e.name
338
+ }))],
339
+ onValueChange: (e) => {
340
+ a({ order: e }), S(o(x, "order", e === "updated" ? void 0 : e));
341
+ },
342
+ "aria-label": _("orderBy"),
343
+ size: "sm"
344
+ })
345
+ }),
346
+ /* @__PURE__ */ m(ut, {
347
+ label: _("groupBy"),
348
+ children: /* @__PURE__ */ m(ft, {
349
+ value: F,
350
+ items: [...Ce.map((e) => ({
351
+ value: e,
352
+ label: _(`grouping.${e}`)
353
+ })), ...M.filter((e) => le.includes(e.kind)).map((e) => ({
354
+ value: `field:${e.id}`,
355
+ label: e.name
356
+ }))],
357
+ onValueChange: (e) => {
358
+ a({ group: e }), S(o(x, "group", e === "status" ? void 0 : e));
359
+ },
360
+ "aria-label": _("groupBy"),
361
+ size: "sm"
362
+ })
363
+ }),
364
+ M.length > 0 && /* @__PURE__ */ m(ut, {
365
+ label: N("onRows"),
366
+ children: /* @__PURE__ */ m(ft, {
367
+ multiple: !0,
368
+ value: Gt.filter((e) => M.some((t) => t.id === e)),
369
+ items: M.map((e) => ({
370
+ value: e.id,
371
+ label: e.name
372
+ })),
373
+ onValueChange: (e) => {
374
+ st(v, e), Kt(e);
375
+ },
376
+ placeholder: N("noneOnRows"),
377
+ "aria-label": N("onRows"),
378
+ size: "sm"
379
+ })
327
380
  })
328
- }), /* @__PURE__ */ g(Qe, {
329
- label: b("groupBy"),
330
- children: /* @__PURE__ */ g(et, {
331
- value: F,
332
- items: ge.map((e) => ({
333
- value: e,
334
- label: b(`grouping.${e}`)
335
- })),
336
- onValueChange: (e) => {
337
- s({ group: e }), E(c(T, "group", e === "status" ? void 0 : e));
338
- },
339
- "aria-label": b("groupBy"),
340
- size: "sm"
341
- })
342
- })]
381
+ ]
343
382
  }),
344
- /* @__PURE__ */ g(u, {
383
+ /* @__PURE__ */ m(c, {
345
384
  variant: "secondary",
346
385
  size: "sm",
347
- icon: /* @__PURE__ */ g(ue, { className: "size-3.5" }),
348
- label: b(Dt ? "hidePanel" : "showPanel"),
349
- "aria-pressed": Dt,
350
- onClick: kt,
386
+ icon: /* @__PURE__ */ m(_e, { className: "size-3.5" }),
387
+ label: _(Jt ? "hidePanel" : "showPanel"),
388
+ "aria-pressed": Jt,
389
+ onClick: Xt,
351
390
  className: "max-xl:hidden"
352
391
  }),
353
- /* @__PURE__ */ g(u, {
392
+ /* @__PURE__ */ m(c, {
354
393
  variant: "secondary",
355
394
  size: "sm",
356
- icon: /* @__PURE__ */ g(oe, { className: "size-3.5" }),
357
- label: b(At ? "hideInsights" : "showInsights"),
358
- "aria-pressed": At,
359
- onClick: Mt
395
+ icon: /* @__PURE__ */ m(pe, { className: "size-3.5" }),
396
+ label: _(Zt ? "hideInsights" : "showInsights"),
397
+ "aria-pressed": Zt,
398
+ onClick: $t
360
399
  }),
361
- /* @__PURE__ */ g(u, {
400
+ /* @__PURE__ */ m(c, {
362
401
  variant: "secondary",
363
402
  size: "sm",
364
- icon: /* @__PURE__ */ g(ce, { className: "size-3.5" }),
365
- label: b("exportCsv"),
366
- onClick: () => ft(S, bt)
403
+ icon: /* @__PURE__ */ m(he, { className: "size-3.5" }),
404
+ label: _("exportCsv"),
405
+ onClick: () => Tt(v, Pt)
367
406
  }),
368
- T.team && rn && /* @__PURE__ */ g(u, {
407
+ x.team && Tn && /* @__PURE__ */ m(c, {
369
408
  variant: "secondary",
370
409
  size: "sm",
371
- icon: /* @__PURE__ */ g(de, { className: "size-3.5" }),
372
- label: b("importCsv"),
373
- onClick: () => We((e, t) => ln({
410
+ icon: /* @__PURE__ */ m(ve, { className: "size-3.5" }),
411
+ label: _("importCsv"),
412
+ onClick: () => et((e, t) => An({
374
413
  name: e,
375
414
  text: t
376
415
  }))
@@ -379,129 +418,130 @@ function b({ person: e } = {}) {
379
418
  })
380
419
  ]
381
420
  }),
382
- /* @__PURE__ */ g(ct, {
421
+ /* @__PURE__ */ m(bt, {
383
422
  filters: q,
384
- trailing: fn,
423
+ trailing: Nn,
385
424
  className: "shrink-0 border-b border-border px-4 py-2 md:px-5"
386
425
  }),
387
- At && /* @__PURE__ */ g(Ge, {
388
- workspace: S,
426
+ Zt && /* @__PURE__ */ m(tt, {
427
+ workspace: v,
389
428
  issues: R
390
429
  }),
391
- cn && T.team && /* @__PURE__ */ g(Ue, {
392
- workspace: S,
393
- team: T.team,
394
- file: cn,
395
- onClose: () => ln(null)
430
+ kn && x.team && /* @__PURE__ */ m($e, {
431
+ workspace: v,
432
+ team: x.team,
433
+ file: kn,
434
+ onClose: () => An(null)
396
435
  }),
397
- on && /* @__PURE__ */ g(Ee, {
436
+ Dn && /* @__PURE__ */ m(Ie, {
398
437
  title: X("saveTitle"),
399
438
  submitLabel: X("save"),
400
- share: { allowed: an },
401
- onClose: () => sn(!1),
439
+ share: { allowed: En },
440
+ onClose: () => On(!1),
402
441
  onSubmit: async ({ name: e, shared: t }) => {
403
- let n = await Zt.mutateAsync({
442
+ let n = await yn.mutateAsync({
404
443
  name: e,
405
444
  shared: t,
406
445
  filters: Y
407
446
  });
408
- E(Ae(n), !0);
447
+ S(Be(n), !0);
409
448
  }
410
449
  }),
411
- /* @__PURE__ */ _("div", {
450
+ /* @__PURE__ */ h("div", {
412
451
  className: "relative flex min-h-0 flex-1",
413
452
  children: [
414
- H.size > 0 && /* @__PURE__ */ _("div", {
453
+ H.size > 0 && /* @__PURE__ */ h("div", {
415
454
  role: "toolbar",
416
- "aria-label": b("selected", { count: H.size }),
455
+ "aria-label": _("selected", { count: H.size }),
417
456
  className: "absolute bottom-4 left-1/2 z-10 flex max-w-[calc(100%-2rem)] -translate-x-1/2 items-center gap-1 rounded-xl border border-border bg-popover py-1 pr-1 pl-3 text-sm shadow-md",
418
457
  children: [
419
- /* @__PURE__ */ g("span", {
458
+ /* @__PURE__ */ m("span", {
420
459
  className: "whitespace-nowrap tabular-nums",
421
- children: b("selected", { count: H.size })
460
+ children: _("selected", { count: H.size })
422
461
  }),
423
- H.size < B.length && /* @__PURE__ */ g(l, {
462
+ H.size < B.length && /* @__PURE__ */ m(s, {
424
463
  size: "sm",
425
464
  variant: "ghost",
426
465
  className: "shrink-0",
427
466
  onClick: () => U(new Set(B.map((e) => e.id))),
428
- children: b("selectAll", { count: B.length })
467
+ children: _("selectAll", { count: B.length })
429
468
  }),
430
- /* @__PURE__ */ g(Ze, {
431
- label: b("actions"),
432
- items: Rt(Ut),
469
+ /* @__PURE__ */ m(lt, {
470
+ label: _("actions"),
471
+ items: on(dn),
433
472
  side: "top",
434
- trigger: /* @__PURE__ */ g(l, {
473
+ trigger: /* @__PURE__ */ m(s, {
435
474
  size: "sm",
436
475
  variant: "outline",
437
476
  className: "shrink-0",
438
- children: b("actions")
477
+ children: _("actions")
439
478
  })
440
479
  }),
441
- /* @__PURE__ */ g(u, {
480
+ /* @__PURE__ */ m(c, {
442
481
  size: "sm",
443
482
  variant: "ghost",
444
- icon: /* @__PURE__ */ g(se, {}),
445
- label: b("clear"),
483
+ icon: /* @__PURE__ */ m(me, {}),
484
+ label: _("clear"),
446
485
  onClick: () => U(/* @__PURE__ */ new Set())
447
486
  })
448
487
  ]
449
488
  }),
450
- /* @__PURE__ */ _("div", {
451
- className: `min-h-0 min-w-0 flex-1 ${I ? "overflow-hidden" : "overflow-y-auto"} ${H.size > 0 ? "pb-16" : ""} transition-opacity ${St && !M ? "opacity-50" : ""}`,
489
+ /* @__PURE__ */ h("div", {
490
+ className: `min-h-0 min-w-0 flex-1 ${I ? "overflow-hidden" : "overflow-y-auto"} ${H.size > 0 ? "pb-16" : ""} transition-opacity ${It && !O ? "opacity-50" : ""}`,
452
491
  children: [
453
- L && /* @__PURE__ */ _("div", {
492
+ L && /* @__PURE__ */ h("div", {
454
493
  className: "flex h-8 items-center gap-2 border-b border-border px-5 text-xs text-muted-foreground",
455
494
  role: "status",
456
- children: [x("issueBreakdown.showing", { count: R.length }), /* @__PURE__ */ g("button", {
495
+ children: [Et("issueBreakdown.showing", { count: R.length }), /* @__PURE__ */ m("button", {
457
496
  type: "button",
458
- onClick: () => Ft(null),
497
+ onClick: () => nn(null),
459
498
  className: "text-primary hover:underline",
460
- children: x("issueBreakdown.showAll")
499
+ children: Et("issueBreakdown.showAll")
461
500
  })]
462
501
  }),
463
- I && M && /* @__PURE__ */ g(Ne, {
464
- workspace: S,
465
- columns: F === "status" && o[k].categories.length > 0 ? z.filter((e) => e.issues.length > 0 || e.key === "completed" || o[k].categories.includes(e.key)) : z,
466
- onMove: F === "none" ? void 0 : (e, t, n) => zt(e, F, t, n, z.find((e) => e.key === n)?.issues[0]),
467
- onContextMenu: Jt
502
+ I && O && /* @__PURE__ */ m(Ue, {
503
+ workspace: v,
504
+ columns: F === "status" && ke[T].categories.length > 0 ? z.filter((e) => e.issues.length > 0 || e.key === "completed" || ke[T].categories.includes(e.key)) : z,
505
+ onMove: F === "none" ? void 0 : (e, t, n) => sn(e, F, t, n, z.find((e) => e.key === n)?.issues[0], Wt),
506
+ onContextMenu: gn
468
507
  }),
469
- !I && z.map((e) => /* @__PURE__ */ g(Ke, {
508
+ !I && z.map((e) => /* @__PURE__ */ m(nt, {
470
509
  label: e.label,
471
510
  icon: e.icon,
472
511
  count: e.issues.length,
473
- children: e.issues.map((e) => /* @__PURE__ */ g(Ie, {
512
+ children: e.issues.map((e) => /* @__PURE__ */ m(Ke, {
474
513
  issue: e,
475
- team: O.find((t) => t.id === e.teamId),
476
- workspace: S,
514
+ team: w.find((t) => t.id === e.teamId),
515
+ workspace: v,
477
516
  selected: e.id === V?.id,
478
517
  picked: H.has(e.id),
479
- onPick: (t) => Kt(B.indexOf(e), t),
480
- viewers: [...Vt.get(e.identifier) ?? []],
481
- onHover: () => Lt(B.indexOf(e)),
482
- onClick: (t) => qt(t, B.indexOf(e)),
483
- onContextMenu: (t) => Jt(t, e)
518
+ onPick: (t) => mn(B.indexOf(e), t),
519
+ viewers: [...ln.get(e.identifier) ?? []],
520
+ onHover: () => an(B.indexOf(e)),
521
+ onClick: (t) => hn(t, B.indexOf(e)),
522
+ onContextMenu: (t) => gn(t, e),
523
+ fields: qt
484
524
  }, e.id))
485
525
  }, e.key)),
486
- !M && (xt ? /* @__PURE__ */ g(t, { error: xt }) : /* @__PURE__ */ g(ut, { rows: 8 })),
487
- M && N.length === 0 && /* @__PURE__ */ g(dt, {
488
- workspace: S,
489
- filtered: !!T.q || k !== "active" || q.count > +!!C,
490
- onCreate: () => _t(T.team ? { team: T.team } : void 0)
526
+ !O && (Ft ? /* @__PURE__ */ m(t, { error: Ft }) : /* @__PURE__ */ m(St, { rows: 8 })),
527
+ O && k.length === 0 && /* @__PURE__ */ m(wt, {
528
+ workspace: v,
529
+ filtered: !!x.q || T !== "active" || q.count > +!!y,
530
+ onCreate: () => jt(x.team ? { team: x.team } : void 0)
491
531
  })
492
532
  ]
493
533
  }),
494
- Dt && M && /* @__PURE__ */ g("aside", {
495
- "aria-label": x("issueBreakdown.label"),
534
+ Jt && O && /* @__PURE__ */ m("aside", {
535
+ "aria-label": Et("issueBreakdown.label"),
496
536
  className: "hidden w-80 shrink-0 overflow-y-auto border-l border-border px-4 py-4 xl:block",
497
- children: /* @__PURE__ */ g(Ve, {
498
- workspace: S,
499
- issues: N,
500
- tabs: Je,
501
- tab: Nt,
502
- onTabChange: Pt,
537
+ children: /* @__PURE__ */ m(Ze, {
538
+ workspace: v,
539
+ issues: k,
540
+ tabs: it,
541
+ tab: en,
542
+ onTabChange: tn,
503
543
  focus: L,
504
- onFocus: Ft
544
+ onFocus: nn
505
545
  })
506
546
  })
507
547
  ]
@@ -509,20 +549,20 @@ function b({ person: e } = {}) {
509
549
  ]
510
550
  });
511
551
  }
512
- function dt({ workspace: e, filtered: t, onCreate: n }) {
513
- let r = h("issues.empty"), { data: i = [] } = v(ie(e)), a = Te(e, "manage_teams");
514
- return i.some((e) => !e.archivedAt) ? /* @__PURE__ */ _("div", {
552
+ function wt({ workspace: e, filtered: t, onCreate: n }) {
553
+ let r = p("issues.empty"), { data: i = [] } = g(ae(e)), ee = Fe(e, "manage_teams");
554
+ return i.some((e) => !e.archivedAt) ? /* @__PURE__ */ h("div", {
515
555
  className: "mx-auto max-w-sm px-4 py-24 text-center",
516
556
  children: [
517
- /* @__PURE__ */ g("p", {
557
+ /* @__PURE__ */ m("p", {
518
558
  className: "text-sm font-medium",
519
559
  children: r(t ? "noMatch" : "nothingInProgress")
520
560
  }),
521
- /* @__PURE__ */ g("p", {
561
+ /* @__PURE__ */ m("p", {
522
562
  className: "mt-1 text-sm text-muted-foreground",
523
563
  children: r(t ? "tryAnother" : "pressC")
524
564
  }),
525
- !t && /* @__PURE__ */ g(l, {
565
+ !t && /* @__PURE__ */ m(s, {
526
566
  type: "button",
527
567
  variant: "primary",
528
568
  onClick: n,
@@ -530,18 +570,18 @@ function dt({ workspace: e, filtered: t, onCreate: n }) {
530
570
  children: r("create")
531
571
  })
532
572
  ]
533
- }) : /* @__PURE__ */ _("div", {
573
+ }) : /* @__PURE__ */ h("div", {
534
574
  className: "mx-auto max-w-sm px-4 py-24 text-center",
535
575
  children: [
536
- /* @__PURE__ */ g("p", {
576
+ /* @__PURE__ */ m("p", {
537
577
  className: "text-sm font-medium",
538
578
  children: r("noTeamsTitle")
539
579
  }),
540
- /* @__PURE__ */ g("p", {
580
+ /* @__PURE__ */ m("p", {
541
581
  className: "mt-1 text-sm text-muted-foreground",
542
- children: r(a ? "noTeamsDescription" : "noTeamsAskAdmin")
582
+ children: r(ee ? "noTeamsDescription" : "noTeamsAskAdmin")
543
583
  }),
544
- a && /* @__PURE__ */ g(l, {
584
+ ee && /* @__PURE__ */ m(s, {
545
585
  type: "button",
546
586
  variant: "primary",
547
587
  onClick: n,
@@ -551,7 +591,7 @@ function dt({ workspace: e, filtered: t, onCreate: n }) {
551
591
  ]
552
592
  });
553
593
  }
554
- function ft(t, n) {
594
+ function Tt(t, n) {
555
595
  let r = new URLSearchParams({
556
596
  triage: "exclude",
557
597
  archived: "exclude"
@@ -560,4 +600,4 @@ function ft(t, n) {
560
600
  let i = document.createElement("a");
561
601
  i.href = `${e}/api/v1/workspaces/${encodeURIComponent(t)}/exports/issues.csv?${r}`, i.download = "", i.click();
562
602
  }
563
- export { b as IssueList };
603
+ export { _ as IssueList };