@volter/twin-github 0.1.2 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +88 -36
  2. package/client/github-mirror.css +277 -319
  3. package/client/github-mirror.d.ts +418 -0
  4. package/client/github-mirror.js +485 -0
  5. package/client/github-mirror.tsx +153 -357
  6. package/client/pulls-rest.ts +159 -0
  7. package/client/pulls-workspace.tsx +841 -0
  8. package/dist/client/github-mirror.bundle.js +239 -0
  9. package/dist/client/github-mirror.css +916 -0
  10. package/dist/client/github-mirror.d.ts +418 -0
  11. package/dist/client/github-mirror.js +485 -0
  12. package/dist/client/github-mirror.tsx +1315 -0
  13. package/dist/client/pulls-rest.d.ts +42 -0
  14. package/dist/client/pulls-rest.js +140 -0
  15. package/dist/client/pulls-rest.ts +159 -0
  16. package/dist/client/pulls-workspace.bundle.js +22 -0
  17. package/dist/client/pulls-workspace.d.ts +114 -0
  18. package/dist/client/pulls-workspace.js +418 -0
  19. package/dist/client/pulls-workspace.tsx +841 -0
  20. package/dist/src/cli.d.ts +2 -0
  21. package/dist/src/cli.js +40 -0
  22. package/dist/src/generated/graphql-sdl.gen.json +1 -0
  23. package/dist/src/generated/graphql.gen.json +1 -0
  24. package/dist/src/generated/surface.gen.json +1 -0
  25. package/dist/src/generated/ui.gen.json +1 -0
  26. package/dist/src/github-budget.d.ts +69 -0
  27. package/dist/src/github-budget.js +172 -0
  28. package/dist/src/github-capabilities.d.ts +5 -0
  29. package/dist/src/github-capabilities.js +4468 -0
  30. package/dist/src/github-conformance.d.ts +43 -0
  31. package/dist/src/github-conformance.js +76 -0
  32. package/dist/src/github-connector.d.ts +307 -0
  33. package/dist/src/github-connector.js +1398 -0
  34. package/dist/src/github-events.d.ts +41 -0
  35. package/dist/src/github-events.js +232 -0
  36. package/dist/src/github-git-http.d.ts +49 -0
  37. package/dist/src/github-git-http.js +185 -0
  38. package/dist/src/github-git-plane.d.ts +114 -0
  39. package/dist/src/github-git-plane.js +407 -0
  40. package/dist/src/github-mirror-state.d.ts +2 -0
  41. package/dist/src/github-mirror-state.js +335 -0
  42. package/dist/src/github-mirror-ui.d.ts +20 -0
  43. package/dist/src/github-mirror-ui.js +101 -0
  44. package/dist/src/github-server.d.ts +14 -0
  45. package/dist/src/github-server.js +240 -0
  46. package/dist/src/github-shared.d.ts +12 -0
  47. package/dist/src/github-shared.js +21 -0
  48. package/dist/src/github-twin.d.ts +1411 -0
  49. package/dist/src/github-twin.js +4084 -0
  50. package/dist/src/github-ui-conformance.d.ts +4 -0
  51. package/dist/src/github-ui-conformance.js +105 -0
  52. package/dist/src/github-ui-structure.d.ts +18 -0
  53. package/dist/src/github-ui-structure.js +251 -0
  54. package/dist/src/graphql-wire.d.ts +22 -0
  55. package/dist/src/graphql-wire.js +89 -0
  56. package/dist/src/index.d.ts +17 -0
  57. package/dist/src/index.js +104 -0
  58. package/dist/src/manifest.d.ts +8 -0
  59. package/dist/src/manifest.js +597 -0
  60. package/dist/src/npm-registry.d.ts +7 -0
  61. package/dist/src/npm-registry.js +47 -0
  62. package/dist/src/screens/app-installation.d.ts +3 -0
  63. package/dist/src/screens/app-installation.js +166 -0
  64. package/dist/src/screens/app-manifest.d.ts +3 -0
  65. package/dist/src/screens/app-manifest.js +81 -0
  66. package/dist/src/screens/oauth.d.ts +15 -0
  67. package/dist/src/screens/oauth.js +257 -0
  68. package/dist/src/screens/session.d.ts +8 -0
  69. package/dist/src/screens/session.js +170 -0
  70. package/dist/src/semantics/actions.d.ts +2 -0
  71. package/dist/src/semantics/actions.js +413 -0
  72. package/dist/src/semantics/activity.d.ts +4 -0
  73. package/dist/src/semantics/activity.js +161 -0
  74. package/dist/src/semantics/apps.d.ts +2 -0
  75. package/dist/src/semantics/apps.js +144 -0
  76. package/dist/src/semantics/branches.d.ts +2 -0
  77. package/dist/src/semantics/branches.js +136 -0
  78. package/dist/src/semantics/checks.d.ts +2 -0
  79. package/dist/src/semantics/checks.js +176 -0
  80. package/dist/src/semantics/code-scanning-upload.d.ts +2 -0
  81. package/dist/src/semantics/code-scanning-upload.js +97 -0
  82. package/dist/src/semantics/codespaces.d.ts +2 -0
  83. package/dist/src/semantics/codespaces.js +58 -0
  84. package/dist/src/semantics/commits.d.ts +2 -0
  85. package/dist/src/semantics/commits.js +109 -0
  86. package/dist/src/semantics/contents.d.ts +2 -0
  87. package/dist/src/semantics/contents.js +131 -0
  88. package/dist/src/semantics/deployments.d.ts +2 -0
  89. package/dist/src/semantics/deployments.js +127 -0
  90. package/dist/src/semantics/gists.d.ts +2 -0
  91. package/dist/src/semantics/gists.js +86 -0
  92. package/dist/src/semantics/git.d.ts +2 -0
  93. package/dist/src/semantics/git.js +235 -0
  94. package/dist/src/semantics/graphql.d.ts +7 -0
  95. package/dist/src/semantics/graphql.js +512 -0
  96. package/dist/src/semantics/index.d.ts +5 -0
  97. package/dist/src/semantics/index.js +62 -0
  98. package/dist/src/semantics/issues.d.ts +2 -0
  99. package/dist/src/semantics/issues.js +456 -0
  100. package/dist/src/semantics/keys.d.ts +2 -0
  101. package/dist/src/semantics/keys.js +66 -0
  102. package/dist/src/semantics/labels.d.ts +2 -0
  103. package/dist/src/semantics/labels.js +100 -0
  104. package/dist/src/semantics/meta.d.ts +12 -0
  105. package/dist/src/semantics/meta.js +144 -0
  106. package/dist/src/semantics/notifications.d.ts +4 -0
  107. package/dist/src/semantics/notifications.js +62 -0
  108. package/dist/src/semantics/orgs.d.ts +2 -0
  109. package/dist/src/semantics/orgs.js +420 -0
  110. package/dist/src/semantics/packages.d.ts +2 -0
  111. package/dist/src/semantics/packages.js +55 -0
  112. package/dist/src/semantics/pages.d.ts +2 -0
  113. package/dist/src/semantics/pages.js +176 -0
  114. package/dist/src/semantics/projects.d.ts +2 -0
  115. package/dist/src/semantics/projects.js +239 -0
  116. package/dist/src/semantics/pulls.d.ts +2 -0
  117. package/dist/src/semantics/pulls.js +462 -0
  118. package/dist/src/semantics/push-reactions.d.ts +101 -0
  119. package/dist/src/semantics/push-reactions.js +513 -0
  120. package/dist/src/semantics/releases.d.ts +19 -0
  121. package/dist/src/semantics/releases.js +231 -0
  122. package/dist/src/semantics/repo-invitations.d.ts +2 -0
  123. package/dist/src/semantics/repo-invitations.js +98 -0
  124. package/dist/src/semantics/repos.d.ts +17 -0
  125. package/dist/src/semantics/repos.js +390 -0
  126. package/dist/src/semantics/rulesets.d.ts +2 -0
  127. package/dist/src/semantics/rulesets.js +111 -0
  128. package/dist/src/semantics/search.d.ts +2 -0
  129. package/dist/src/semantics/search.js +84 -0
  130. package/dist/src/semantics/security.d.ts +2 -0
  131. package/dist/src/semantics/security.js +177 -0
  132. package/dist/src/semantics/shared.d.ts +61 -0
  133. package/dist/src/semantics/shared.js +151 -0
  134. package/dist/src/semantics/users.d.ts +2 -0
  135. package/dist/src/semantics/users.js +255 -0
  136. package/dist/src/semantics/webhooks.d.ts +2 -0
  137. package/dist/src/semantics/webhooks.js +107 -0
  138. package/dist/test-fixtures/github-a11y-reference.pr-list.SOURCE.md +56 -0
  139. package/dist/test-fixtures/github-a11y-reference.pr-list.json +1447 -0
  140. package/dist/test-fixtures/github-comment-schema.SOURCE.md +11 -0
  141. package/dist/test-fixtures/github-comment-schema.json +702 -0
  142. package/dist/test-fixtures/github-known-deviations.json +94 -0
  143. package/dist/test-fixtures/github-openapi-operations.SOURCE.md +76 -0
  144. package/dist/test-fixtures/github-openapi-operations.json +362 -0
  145. package/dist/test-fixtures/github-pull-schema.SOURCE.md +37 -0
  146. package/dist/test-fixtures/github-pull-schema.json +3601 -0
  147. package/dist/test-fixtures/github-review-schema.SOURCE.md +12 -0
  148. package/dist/test-fixtures/github-review-schema.json +236 -0
  149. package/package.json +20 -11
  150. package/src/cli.ts +7 -6
  151. package/src/generated/graphql-sdl.gen.json +1 -0
  152. package/src/generated/graphql.gen.json +1 -0
  153. package/src/generated/surface.gen.json +1 -0
  154. package/src/generated/ui.gen.json +1 -0
  155. package/src/github-a11y-snapshot.uitest.ts +5 -5
  156. package/src/github-budget.ts +4 -4
  157. package/src/github-capabilities.ts +1993 -556
  158. package/src/github-conformance.ts +12 -7
  159. package/src/github-connector.ts +108 -96
  160. package/src/github-events.ts +225 -95
  161. package/src/github-git-http.ts +48 -84
  162. package/src/github-git-plane.ts +247 -385
  163. package/src/github-journey.uitest.ts +28 -44
  164. package/src/github-mirror-state.ts +23 -61
  165. package/src/github-mirror-ui.ts +16 -10
  166. package/src/github-server.ts +158 -60
  167. package/src/github-shared.ts +1 -1
  168. package/src/github-twin.ts +1525 -4494
  169. package/src/github-ui-conformance.ts +7 -8
  170. package/src/github-ui-structure.ts +19 -18
  171. package/src/graphql-wire.ts +115 -0
  172. package/src/index.ts +50 -7
  173. package/src/manifest.ts +605 -0
  174. package/src/npm-registry.ts +43 -0
  175. package/src/screens/app-installation.tsx +217 -0
  176. package/src/screens/app-manifest.tsx +97 -0
  177. package/src/screens/oauth.tsx +258 -0
  178. package/src/screens/session.tsx +193 -0
  179. package/src/semantics/actions.ts +395 -0
  180. package/src/semantics/activity.ts +171 -0
  181. package/src/semantics/apps.ts +133 -0
  182. package/src/semantics/branches.ts +133 -0
  183. package/src/semantics/checks.ts +163 -0
  184. package/src/semantics/code-scanning-upload.ts +92 -0
  185. package/src/semantics/codespaces.ts +58 -0
  186. package/src/semantics/commits.ts +109 -0
  187. package/src/semantics/contents.ts +112 -0
  188. package/src/semantics/deployments.ts +116 -0
  189. package/src/semantics/gists.ts +85 -0
  190. package/src/semantics/git.ts +226 -0
  191. package/src/semantics/graphql.ts +505 -0
  192. package/src/semantics/index.ts +68 -0
  193. package/src/semantics/issues.ts +434 -0
  194. package/src/semantics/keys.ts +66 -0
  195. package/src/semantics/labels.ts +91 -0
  196. package/src/semantics/meta.ts +139 -0
  197. package/src/semantics/notifications.ts +58 -0
  198. package/src/semantics/orgs.ts +383 -0
  199. package/src/semantics/packages.ts +59 -0
  200. package/src/semantics/pages.ts +154 -0
  201. package/src/semantics/projects.ts +246 -0
  202. package/src/semantics/pulls.ts +421 -0
  203. package/src/semantics/push-reactions.ts +471 -0
  204. package/src/semantics/releases.ts +213 -0
  205. package/src/semantics/repo-invitations.ts +112 -0
  206. package/src/semantics/repos.ts +373 -0
  207. package/src/semantics/rulesets.ts +107 -0
  208. package/src/semantics/search.ts +83 -0
  209. package/src/semantics/security.ts +153 -0
  210. package/src/semantics/shared.ts +181 -0
  211. package/src/semantics/users.ts +252 -0
  212. package/src/semantics/webhooks.ts +101 -0
  213. package/test-fixtures/github-known-deviations.json +7 -8
  214. package/test-fixtures/github-openapi-operations.json +46 -227
  215. package/src/github-graphql.ts +0 -398
@@ -0,0 +1,42 @@
1
+ import type { ChangedFile, Comment, Commit, PullRequest, Review } from './github-mirror.js';
2
+ /** One commit status or check run on the open pull request's head, as its merge box and Checks tab list them. */
3
+ export type Check = {
4
+ name: string;
5
+ state: string;
6
+ description?: string;
7
+ targetUrl?: string;
8
+ };
9
+ /** A repository as its header counts it: open issues (pull requests excluded) and open pull requests. */
10
+ export type RepoFacts = {
11
+ openIssues: number;
12
+ labels: Array<{
13
+ name: string;
14
+ color?: string;
15
+ description?: string;
16
+ }>;
17
+ milestones: number;
18
+ hasDiscussions?: boolean;
19
+ };
20
+ /** A state change on the pull request's timeline (closed, reopened), as GitHub's timeline lists it. */
21
+ export type StateEvent = {
22
+ event: string;
23
+ at?: string;
24
+ actor?: string;
25
+ };
26
+ export type PullsData = {
27
+ pullRequests: PullRequest[];
28
+ reviews: Review[];
29
+ commits: Commit[];
30
+ comments: Comment[];
31
+ reviewComments: Comment[];
32
+ files: ChangedFile[];
33
+ viewer?: string;
34
+ checks: Check[];
35
+ repoFacts: Record<string, RepoFacts>;
36
+ stateEvents: StateEvent[];
37
+ };
38
+ /** The workspace's data: every pull request with its reviews and CI, and the open one's thread in full. */
39
+ export declare function loadPulls(base: string, open?: {
40
+ repo: string;
41
+ number: number;
42
+ }): Promise<PullsData>;
@@ -0,0 +1,140 @@
1
+ const get = async (base, path) => {
2
+ const r = await fetch(`${base}${path}`, { headers: { accept: 'application/vnd.github+json' } });
3
+ if (!r.ok)
4
+ return undefined;
5
+ return r.json();
6
+ };
7
+ const list = async (base, path) => {
8
+ const body = await get(base, path);
9
+ return Array.isArray(body) ? body : [];
10
+ };
11
+ /** A head commit's CI, as GitHub's merge box rolls it up: statuses and check runs together. */
12
+ async function ciOf(base, repo, sha) {
13
+ if (!sha)
14
+ return undefined;
15
+ const [combined, checks] = await Promise.all([get(base, `/repos/${repo}/commits/${sha}/status`), get(base, `/repos/${repo}/commits/${sha}/check-runs`)]);
16
+ const states = [
17
+ ...(combined?.statuses ?? []).map((s) => String(s.state)),
18
+ ...(checks?.check_runs ?? []).map((c) => (c.status === 'completed' ? String(c.conclusion ?? 'neutral') : 'pending')),
19
+ ];
20
+ if (!states.length)
21
+ return undefined;
22
+ if (states.some((s) => s === 'failure' || s === 'error' || s === 'timed_out' || s === 'cancelled'))
23
+ return 'failure';
24
+ if (states.some((s) => s === 'pending'))
25
+ return 'pending';
26
+ return 'success';
27
+ }
28
+ function pullOf(repo, p, ciStatus) {
29
+ const merged = Boolean(p.merged_at);
30
+ return {
31
+ repo,
32
+ number: Number(p.number),
33
+ title: p.title ?? undefined,
34
+ body: p.body ?? undefined,
35
+ state: merged ? 'merged' : String(p.state ?? 'open'),
36
+ merged,
37
+ mergedAt: p.merged_at ?? undefined,
38
+ mergeCommit: p.merge_commit_sha ?? undefined,
39
+ url: p.html_url ?? undefined,
40
+ baseBranch: p.base?.ref,
41
+ headBranch: p.head?.ref,
42
+ headSha: p.head?.sha,
43
+ author: p.user?.login,
44
+ authorAvatarUrl: p.user?.avatar_url,
45
+ createdAt: p.created_at ?? undefined,
46
+ updatedAt: p.updated_at ?? undefined,
47
+ additions: p.additions,
48
+ deletions: p.deletions,
49
+ changedFiles: p.changed_files,
50
+ commitsCount: p.commits,
51
+ commentsCount: p.comments,
52
+ reviewCommentsCount: p.review_comments,
53
+ labels: (p.labels ?? []).map((l) => ({ name: String(l.name), ...(l.color ? { color: String(l.color) } : {}), ...(l.description ? { description: String(l.description) } : {}) })),
54
+ assignees: (p.assignees ?? []).map((a) => String(a.login)),
55
+ requestedReviewers: (p.requested_reviewers ?? []).map((r) => String(r.login)),
56
+ milestone: p.milestone?.title ?? undefined,
57
+ ciStatus,
58
+ closedAt: p.closed_at ?? undefined,
59
+ mergedBy: p.merged_by?.login ?? undefined,
60
+ mergeable: p.mergeable ?? undefined,
61
+ draft: Boolean(p.draft),
62
+ };
63
+ }
64
+ const commentOf = (repo, number) => (c) => ({
65
+ repo, number, id: c.id, authorAssociation: c.author_association ?? undefined, author: c.user?.login, authorAvatarUrl: c.user?.avatar_url, body: c.body ?? '', createdAt: c.created_at, url: c.html_url, ...(c.path ? { path: String(c.path) } : {}),
66
+ });
67
+ /** Every repository the signed-in person can see: their own and their organizations'. */
68
+ async function reposOf(base) {
69
+ const own = await list(base, '/user/repos?per_page=100');
70
+ const orgs = await list(base, '/user/orgs');
71
+ const theirs = (await Promise.all(orgs.map((o) => list(base, `/orgs/${encodeURIComponent(String(o.login))}/repos?per_page=100`)))).flat();
72
+ return [...new Set([...own, ...theirs].map((r) => String(r.full_name)))].sort();
73
+ }
74
+ /** The checks a head commit carries, statuses and check runs together (the newest status per context). */
75
+ async function checksOf(base, repo, sha) {
76
+ if (!sha)
77
+ return [];
78
+ const [combined, runs] = await Promise.all([get(base, `/repos/${repo}/commits/${sha}/status`), get(base, `/repos/${repo}/commits/${sha}/check-runs`)]);
79
+ return [
80
+ ...(combined?.statuses ?? []).map((s) => ({ name: String(s.context ?? 'default'), state: String(s.state), description: s.description ?? undefined, targetUrl: s.target_url ?? undefined })),
81
+ ...(runs?.check_runs ?? []).map((c) => ({ name: String(c.name), state: c.status === 'completed' ? String(c.conclusion ?? 'neutral') : 'pending', description: c.output?.title ?? undefined, targetUrl: c.details_url ?? c.html_url ?? undefined })),
82
+ ];
83
+ }
84
+ /** What a repository's header and list filters show: its open issues, its labels (with their colours) and milestones. */
85
+ async function factsOf(base, repo) {
86
+ const [issues, labels, milestones, meta] = await Promise.all([
87
+ list(base, `/repos/${repo}/issues?state=open&per_page=100`),
88
+ list(base, `/repos/${repo}/labels?per_page=100`),
89
+ list(base, `/repos/${repo}/milestones?per_page=100`),
90
+ get(base, `/repos/${repo}`),
91
+ ]);
92
+ return {
93
+ openIssues: issues.filter((i) => !i.pull_request).length,
94
+ labels: labels.map((l) => ({ name: String(l.name), ...(l.color ? { color: String(l.color) } : {}), ...(l.description ? { description: String(l.description) } : {}) })),
95
+ milestones: milestones.length,
96
+ hasDiscussions: Boolean(meta?.has_discussions),
97
+ };
98
+ }
99
+ /** The workspace's data: every pull request with its reviews and CI, and the open one's thread in full. */
100
+ export async function loadPulls(base, open) {
101
+ const repos = await reposOf(base);
102
+ const viewer = (await get(base, '/user'))?.login;
103
+ const repoFacts = Object.fromEntries(await Promise.all(repos.map(async (r) => [r, await factsOf(base, r)])));
104
+ const pullRequests = [];
105
+ const reviews = [];
106
+ for (const repo of repos) {
107
+ for (const summary of await list(base, `/repos/${repo}/pulls?state=all&per_page=100`)) {
108
+ const number = Number(summary.number);
109
+ const [detail, reviewed] = await Promise.all([get(base, `/repos/${repo}/pulls/${number}`), list(base, `/repos/${repo}/pulls/${number}/reviews`)]);
110
+ const p = detail ?? summary;
111
+ // GitHub's pull request carries no review count; the list the workspace just read is it
112
+ pullRequests.push({ ...pullOf(repo, p, await ciOf(base, repo, p.head?.sha)), reviewCount: reviewed.length });
113
+ for (const r of reviewed)
114
+ reviews.push({ repo, number, id: r.id, reviewer: r.user?.login, reviewerAvatarUrl: r.user?.avatar_url, state: r.state, body: r.body ?? '', submittedAt: r.submitted_at });
115
+ }
116
+ }
117
+ if (!open)
118
+ return { pullRequests, reviews, commits: [], comments: [], reviewComments: [], files: [], viewer, checks: [], repoFacts, stateEvents: [] };
119
+ const { repo, number } = open;
120
+ const [commits, files, comments, reviewComments, timeline] = await Promise.all([
121
+ list(base, `/repos/${repo}/pulls/${number}/commits?per_page=100`),
122
+ list(base, `/repos/${repo}/pulls/${number}/files?per_page=100`),
123
+ list(base, `/repos/${repo}/issues/${number}/comments?per_page=100`),
124
+ list(base, `/repos/${repo}/pulls/${number}/comments?per_page=100`),
125
+ list(base, `/repos/${repo}/issues/${number}/timeline?per_page=100`),
126
+ ]);
127
+ const checks = await checksOf(base, repo, pullRequests.find((p) => p.repo === repo && p.number === number)?.headSha);
128
+ return {
129
+ pullRequests,
130
+ reviews,
131
+ viewer,
132
+ checks,
133
+ repoFacts,
134
+ stateEvents: timeline.filter((e) => e.event === "closed" || e.event === "reopened").map((e) => ({ event: String(e.event), at: e.created_at ?? undefined, actor: e.actor?.login ?? undefined })),
135
+ commits: commits.map((c) => ({ repo, number, sha: String(c.sha), message: c.commit?.message, author: c.commit?.author?.name, authorLogin: c.author?.login, authorAvatarUrl: c.author?.avatar_url, date: c.commit?.author?.date, url: c.html_url })),
136
+ files: files.map((f) => ({ repo, number, filename: String(f.filename), status: f.status, additions: f.additions, deletions: f.deletions, changes: f.changes, patch: f.patch })),
137
+ comments: comments.map(commentOf(repo, number)),
138
+ reviewComments: reviewComments.map(commentOf(repo, number)),
139
+ };
140
+ }
@@ -0,0 +1,159 @@
1
+ // The pull-request workspace's reads, through GitHub's own REST API on this origin (docs/contributing/
2
+ // architecture.md, "Screens": a workspace reads and writes only through the pack's operations). The same
3
+ // calls a GitHub client makes: the signed-in person's repositories and their organizations' repositories,
4
+ // each repository's pull requests, and for each pull request its detail, reviews and CI rollup; the one
5
+ // being read also brings its commits, files and both kinds of comments. What comes back is shaped into the
6
+ // props the workspace's components take.
7
+ import type { ChangedFile, Comment, Commit, PullRequest, Review } from './github-mirror.tsx';
8
+
9
+ type Json = any;
10
+ /** One commit status or check run on the open pull request's head, as its merge box and Checks tab list them. */
11
+ export type Check = { name: string; state: string; description?: string; targetUrl?: string };
12
+ /** A repository as its header counts it: open issues (pull requests excluded) and open pull requests. */
13
+ export type RepoFacts = { openIssues: number; labels: Array<{ name: string; color?: string; description?: string }>; milestones: number; hasDiscussions?: boolean };
14
+ /** A state change on the pull request's timeline (closed, reopened), as GitHub's timeline lists it. */
15
+ export type StateEvent = { event: string; at?: string; actor?: string };
16
+ export type PullsData = {
17
+ pullRequests: PullRequest[]; reviews: Review[]; commits: Commit[]; comments: Comment[]; reviewComments: Comment[]; files: ChangedFile[];
18
+ viewer?: string; checks: Check[]; repoFacts: Record<string, RepoFacts>; stateEvents: StateEvent[];
19
+ };
20
+
21
+ const get = async (base: string, path: string): Promise<Json> => {
22
+ const r = await fetch(`${base}${path}`, { headers: { accept: 'application/vnd.github+json' } });
23
+ if (!r.ok) return undefined;
24
+ return r.json();
25
+ };
26
+ const list = async (base: string, path: string): Promise<Json[]> => {
27
+ const body = await get(base, path);
28
+ return Array.isArray(body) ? body : [];
29
+ };
30
+
31
+ /** A head commit's CI, as GitHub's merge box rolls it up: statuses and check runs together. */
32
+ async function ciOf(base: string, repo: string, sha: string | undefined): Promise<string | undefined> {
33
+ if (!sha) return undefined;
34
+ const [combined, checks] = await Promise.all([get(base, `/repos/${repo}/commits/${sha}/status`), get(base, `/repos/${repo}/commits/${sha}/check-runs`)]);
35
+ const states: string[] = [
36
+ ...((combined?.statuses ?? []) as Json[]).map((s) => String(s.state)),
37
+ ...((checks?.check_runs ?? []) as Json[]).map((c) => (c.status === 'completed' ? String(c.conclusion ?? 'neutral') : 'pending')),
38
+ ];
39
+ if (!states.length) return undefined;
40
+ if (states.some((s) => s === 'failure' || s === 'error' || s === 'timed_out' || s === 'cancelled')) return 'failure';
41
+ if (states.some((s) => s === 'pending')) return 'pending';
42
+ return 'success';
43
+ }
44
+
45
+ function pullOf(repo: string, p: Json, ciStatus: string | undefined): PullRequest {
46
+ const merged = Boolean(p.merged_at);
47
+ return {
48
+ repo,
49
+ number: Number(p.number),
50
+ title: p.title ?? undefined,
51
+ body: p.body ?? undefined,
52
+ state: merged ? 'merged' : String(p.state ?? 'open'),
53
+ merged,
54
+ mergedAt: p.merged_at ?? undefined,
55
+ mergeCommit: p.merge_commit_sha ?? undefined,
56
+ url: p.html_url ?? undefined,
57
+ baseBranch: p.base?.ref,
58
+ headBranch: p.head?.ref,
59
+ headSha: p.head?.sha,
60
+ author: p.user?.login,
61
+ authorAvatarUrl: p.user?.avatar_url,
62
+ createdAt: p.created_at ?? undefined,
63
+ updatedAt: p.updated_at ?? undefined,
64
+ additions: p.additions,
65
+ deletions: p.deletions,
66
+ changedFiles: p.changed_files,
67
+ commitsCount: p.commits,
68
+ commentsCount: p.comments,
69
+ reviewCommentsCount: p.review_comments,
70
+ labels: ((p.labels ?? []) as Json[]).map((l) => ({ name: String(l.name), ...(l.color ? { color: String(l.color) } : {}), ...(l.description ? { description: String(l.description) } : {}) })),
71
+ assignees: ((p.assignees ?? []) as Json[]).map((a) => String(a.login)),
72
+ requestedReviewers: ((p.requested_reviewers ?? []) as Json[]).map((r) => String(r.login)),
73
+ milestone: p.milestone?.title ?? undefined,
74
+ ciStatus,
75
+ closedAt: p.closed_at ?? undefined,
76
+ mergedBy: p.merged_by?.login ?? undefined,
77
+ mergeable: p.mergeable ?? undefined,
78
+ draft: Boolean(p.draft),
79
+ };
80
+ }
81
+
82
+ const commentOf = (repo: string, number: number) => (c: Json): Comment => ({
83
+ repo, number, id: c.id, authorAssociation: c.author_association ?? undefined, author: c.user?.login, authorAvatarUrl: c.user?.avatar_url, body: c.body ?? '', createdAt: c.created_at, url: c.html_url, ...(c.path ? { path: String(c.path) } : {}),
84
+ });
85
+
86
+ /** Every repository the signed-in person can see: their own and their organizations'. */
87
+ async function reposOf(base: string): Promise<string[]> {
88
+ const own = await list(base, '/user/repos?per_page=100');
89
+ const orgs = await list(base, '/user/orgs');
90
+ const theirs = (await Promise.all(orgs.map((o) => list(base, `/orgs/${encodeURIComponent(String(o.login))}/repos?per_page=100`)))).flat();
91
+ return [...new Set([...own, ...theirs].map((r) => String(r.full_name)))].sort();
92
+ }
93
+
94
+ /** The checks a head commit carries, statuses and check runs together (the newest status per context). */
95
+ async function checksOf(base: string, repo: string, sha: string | undefined): Promise<Check[]> {
96
+ if (!sha) return [];
97
+ const [combined, runs] = await Promise.all([get(base, `/repos/${repo}/commits/${sha}/status`), get(base, `/repos/${repo}/commits/${sha}/check-runs`)]);
98
+ return [
99
+ ...((combined?.statuses ?? []) as Json[]).map((s) => ({ name: String(s.context ?? 'default'), state: String(s.state), description: s.description ?? undefined, targetUrl: s.target_url ?? undefined })),
100
+ ...((runs?.check_runs ?? []) as Json[]).map((c) => ({ name: String(c.name), state: c.status === 'completed' ? String(c.conclusion ?? 'neutral') : 'pending', description: c.output?.title ?? undefined, targetUrl: c.details_url ?? c.html_url ?? undefined })),
101
+ ];
102
+ }
103
+
104
+ /** What a repository's header and list filters show: its open issues, its labels (with their colours) and milestones. */
105
+ async function factsOf(base: string, repo: string): Promise<RepoFacts> {
106
+ const [issues, labels, milestones, meta] = await Promise.all([
107
+ list(base, `/repos/${repo}/issues?state=open&per_page=100`),
108
+ list(base, `/repos/${repo}/labels?per_page=100`),
109
+ list(base, `/repos/${repo}/milestones?per_page=100`),
110
+ get(base, `/repos/${repo}`),
111
+ ]);
112
+ return {
113
+ openIssues: issues.filter((i) => !i.pull_request).length,
114
+ labels: labels.map((l) => ({ name: String(l.name), ...(l.color ? { color: String(l.color) } : {}), ...(l.description ? { description: String(l.description) } : {}) })),
115
+ milestones: milestones.length,
116
+ hasDiscussions: Boolean(meta?.has_discussions),
117
+ };
118
+ }
119
+
120
+ /** The workspace's data: every pull request with its reviews and CI, and the open one's thread in full. */
121
+ export async function loadPulls(base: string, open?: { repo: string; number: number }): Promise<PullsData> {
122
+ const repos = await reposOf(base);
123
+ const viewer = (await get(base, '/user'))?.login as string | undefined;
124
+ const repoFacts: Record<string, RepoFacts> = Object.fromEntries(await Promise.all(repos.map(async (r) => [r, await factsOf(base, r)] as const)));
125
+ const pullRequests: PullRequest[] = [];
126
+ const reviews: Review[] = [];
127
+ for (const repo of repos) {
128
+ for (const summary of await list(base, `/repos/${repo}/pulls?state=all&per_page=100`)) {
129
+ const number = Number(summary.number);
130
+ const [detail, reviewed] = await Promise.all([get(base, `/repos/${repo}/pulls/${number}`), list(base, `/repos/${repo}/pulls/${number}/reviews`)]);
131
+ const p = detail ?? summary;
132
+ // GitHub's pull request carries no review count; the list the workspace just read is it
133
+ pullRequests.push({ ...pullOf(repo, p, await ciOf(base, repo, p.head?.sha)), reviewCount: reviewed.length });
134
+ for (const r of reviewed) reviews.push({ repo, number, id: r.id, reviewer: r.user?.login, reviewerAvatarUrl: r.user?.avatar_url, state: r.state, body: r.body ?? '', submittedAt: r.submitted_at });
135
+ }
136
+ }
137
+ if (!open) return { pullRequests, reviews, commits: [], comments: [], reviewComments: [], files: [], viewer, checks: [], repoFacts, stateEvents: [] };
138
+ const { repo, number } = open;
139
+ const [commits, files, comments, reviewComments, timeline] = await Promise.all([
140
+ list(base, `/repos/${repo}/pulls/${number}/commits?per_page=100`),
141
+ list(base, `/repos/${repo}/pulls/${number}/files?per_page=100`),
142
+ list(base, `/repos/${repo}/issues/${number}/comments?per_page=100`),
143
+ list(base, `/repos/${repo}/pulls/${number}/comments?per_page=100`),
144
+ list(base, `/repos/${repo}/issues/${number}/timeline?per_page=100`),
145
+ ]);
146
+ const checks = await checksOf(base, repo, pullRequests.find((p) => p.repo === repo && p.number === number)?.headSha);
147
+ return {
148
+ pullRequests,
149
+ reviews,
150
+ viewer,
151
+ checks,
152
+ repoFacts,
153
+ stateEvents: timeline.filter((e) => e.event === "closed" || e.event === "reopened").map((e) => ({ event: String(e.event), at: e.created_at ?? undefined, actor: e.actor?.login ?? undefined })),
154
+ commits: commits.map((c) => ({ repo, number, sha: String(c.sha), message: c.commit?.message, author: c.commit?.author?.name, authorLogin: c.author?.login, authorAvatarUrl: c.author?.avatar_url, date: c.commit?.author?.date, url: c.html_url })),
155
+ files: files.map((f) => ({ repo, number, filename: String(f.filename), status: f.status, additions: f.additions, deletions: f.deletions, changes: f.changes, patch: f.patch })),
156
+ comments: comments.map(commentOf(repo, number)),
157
+ reviewComments: reviewComments.map(commentOf(repo, number)),
158
+ };
159
+ }
@@ -0,0 +1,22 @@
1
+ var GU=Object.create;var{getPrototypeOf:UU,defineProperty:xG,getOwnPropertyNames:XU}=Object;var YU=Object.prototype.hasOwnProperty;function ZU(X){return this[X]}var HU,WU,KG=(X,Z,H)=>{var M=X!=null&&typeof X==="object";if(M){var B=Z?HU??=new WeakMap:WU??=new WeakMap,$=B.get(X);if($)return $}H=X!=null?GU(UU(X)):{};let R=Z||!X||!X.__esModule?xG(H,"default",{value:X,enumerable:!0}):H;for(let z of XU(X))if(!YU.call(R,z))xG(R,z,{get:ZU.bind(X,z),enumerable:!0});if(M)B.set(X,R);return R};var pG=(X,Z)=>()=>(Z||X((Z={exports:{}}).exports,Z),Z.exports);var TG=pG((QU,FG)=>{(function(){function X(U,Y){Object.defineProperty(M.prototype,U,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",Y[0],Y[1])}})}function Z(U){if(U===null||typeof U!=="object")return null;return U=SG&&U[SG]||U["@@iterator"],typeof U==="function"?U:null}function H(U,Y){U=(U=U.constructor)&&(U.displayName||U.name)||"ReactClass";var Q=U+"."+Y;kG[Q]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",Y,U),kG[Q]=!0)}function M(U,Y,Q){this.props=U,this.context=Y,this.refs=NG,this.updater=Q||gG}function B(){}function $(U,Y,Q){this.props=U,this.context=Y,this.refs=NG,this.updater=Q||gG}function R(){}function z(U){return""+U}function v(U){try{z(U);var Y=!1}catch(q){Y=!0}if(Y){Y=console;var Q=Y.error,L=typeof Symbol==="function"&&Symbol.toStringTag&&U[Symbol.toStringTag]||U.constructor.name||"Object";return Q.call(Y,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",L),z(U)}}function C(U){if(U==null)return null;if(typeof U==="function")return U.$$typeof===iG?null:U.displayName||U.name||null;if(typeof U==="string")return U;switch(U){case ZG:return"Fragment";case N:return"Profiler";case W:return"StrictMode";case HG:return"Suspense";case h:return"SuspenseList";case LG:return"Activity"}if(typeof U==="object")switch(typeof U.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),U.$$typeof){case zG:return"Portal";case u:return U.displayName||"Context";case g:return(U._context.displayName||"Context")+".Consumer";case p:var Y=U.render;return U=U.displayName,U||(U=Y.displayName||Y.name||"",U=U!==""?"ForwardRef("+U+")":"ForwardRef"),U;case l:return Y=U.displayName||null,Y!==null?Y:C(U.type)||"Memo";case s:Y=U._payload,U=U._init;try{return C(U(Y))}catch(Q){}}return null}function _(U){if(U===ZG)return"<>";if(typeof U==="object"&&U!==null&&U.$$typeof===s)return"<...>";try{var Y=C(U);return Y?"<"+Y+">":"<...>"}catch(Q){return"<...>"}}function S(){var U=O.A;return U===null?null:U.getOwner()}function K(){return Error("react-stack-top-frame")}function J(U){if(RG.call(U,"key")){var Y=Object.getOwnPropertyDescriptor(U,"key").get;if(Y&&Y.isReactWarning)return!1}return U.key!==void 0}function F(U,Y){function Q(){uG||(uG=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",Y))}Q.isReactWarning=!0,Object.defineProperty(U,"key",{get:Q,configurable:!0})}function b(){var U=C(this.type);return yG[U]||(yG[U]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),U=this.props.ref,U!==void 0?U:null}function c(U,Y,Q,L,q,T){var A=Q.ref;return U={$$typeof:BG,type:U,key:Y,props:Q,_owner:L},(A!==void 0?A:null)!==null?Object.defineProperty(U,"ref",{enumerable:!1,get:b}):Object.defineProperty(U,"ref",{enumerable:!1,value:null}),U._store={},Object.defineProperty(U._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(U,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(U,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:q}),Object.defineProperty(U,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:T}),Object.freeze&&(Object.freeze(U.props),Object.freeze(U)),U}function m(U,Y){return Y=c(U.type,Y,U.props,U._owner,U._debugStack,U._debugTask),U._store&&(Y._store.validated=U._store.validated),Y}function d(U){j(U)?U._store&&(U._store.validated=1):typeof U==="object"&&U!==null&&U.$$typeof===s&&(U._payload.status==="fulfilled"?j(U._payload.value)&&U._payload.value._store&&(U._payload.value._store.validated=1):U._store&&(U._store.validated=1))}function j(U){return typeof U==="object"&&U!==null&&U.$$typeof===BG}function n(U){var Y={"=":"=0",":":"=2"};return"$"+U.replace(/[=:]/g,function(Q){return Y[Q]})}function i(U,Y){return typeof U==="object"&&U!==null&&U.key!=null?(v(U.key),n(""+U.key)):Y.toString(36)}function QG(U){switch(U.status){case"fulfilled":return U.value;case"rejected":throw U.reason;default:switch(typeof U.status==="string"?U.then(R,R):(U.status="pending",U.then(function(Y){U.status==="pending"&&(U.status="fulfilled",U.value=Y)},function(Y){U.status==="pending"&&(U.status="rejected",U.reason=Y)})),U.status){case"fulfilled":return U.value;case"rejected":throw U.reason}}throw U}function I(U,Y,Q,L,q){var T=typeof U;if(T==="undefined"||T==="boolean")U=null;var A=!1;if(U===null)A=!0;else switch(T){case"bigint":case"string":case"number":A=!0;break;case"object":switch(U.$$typeof){case BG:case zG:A=!0;break;case s:return A=U._init,I(A(U._payload),Y,Q,L,q)}}if(A){A=U,q=q(A);var k=L===""?"."+i(A,0):L;return bG(q)?(Q="",k!=null&&(Q=k.replace(dG,"$&/")+"/"),I(q,Y,Q,"",function(a){return a})):q!=null&&(j(q)&&(q.key!=null&&(A&&A.key===q.key||v(q.key)),Q=m(q,Q+(q.key==null||A&&A.key===q.key?"":(""+q.key).replace(dG,"$&/")+"/")+k),L!==""&&A!=null&&j(A)&&A.key==null&&A._store&&!A._store.validated&&(Q._store.validated=2),q=Q),Y.push(q)),1}if(A=0,k=L===""?".":L+":",bG(U))for(var w=0;w<U.length;w++)L=U[w],T=k+i(L,w),A+=I(L,Y,Q,T,q);else if(w=Z(U),typeof w==="function")for(w===U.entries&&(DG||console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."),DG=!0),U=w.call(U),w=0;!(L=U.next()).done;)L=L.value,T=k+i(L,w++),A+=I(L,Y,Q,T,q);else if(T==="object"){if(typeof U.then==="function")return I(QG(U),Y,Q,L,q);throw Y=String(U),Error("Objects are not valid as a React child (found: "+(Y==="[object Object]"?"object with keys {"+Object.keys(U).join(", ")+"}":Y)+"). If you meant to render a collection of children, use an array instead.")}return A}function y(U,Y,Q){if(U==null)return U;var L=[],q=0;return I(U,L,"","",function(T){return Y.call(Q,T,q++)}),L}function _G(U){if(U._status===-1){var Y=U._ioInfo;Y!=null&&(Y.start=Y.end=performance.now()),Y=U._result;var Q=Y();if(Q.then(function(q){if(U._status===0||U._status===-1){U._status=1,U._result=q;var T=U._ioInfo;T!=null&&(T.end=performance.now()),Q.status===void 0&&(Q.status="fulfilled",Q.value=q)}},function(q){if(U._status===0||U._status===-1){U._status=2,U._result=q;var T=U._ioInfo;T!=null&&(T.end=performance.now()),Q.status===void 0&&(Q.status="rejected",Q.reason=q)}}),Y=U._ioInfo,Y!=null){Y.value=Q;var L=Q.displayName;typeof L==="string"&&(Y.name=L)}U._status===-1&&(U._status=0,U._result=Q)}if(U._status===1)return Y=U._result,Y===void 0&&console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
2
+
3
+ Your code should look like:
4
+ const MyComponent = lazy(() => import('./MyComponent'))
5
+
6
+ Did you accidentally put curly braces around the import?`,Y),"default"in Y||console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s
7
+
8
+ Your code should look like:
9
+ const MyComponent = lazy(() => import('./MyComponent'))`,Y),Y.default;throw U._result}function f(){var U=O.H;return U===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:
10
+ 1. You might have mismatching versions of React and the renderer (such as React DOM)
11
+ 2. You might be breaking the Rules of Hooks
12
+ 3. You might have more than one copy of React in the same app
13
+ See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),U}function $G(){O.asyncTransitions--}function t(U){if(JG===null)try{var Y=("require"+Math.random()).slice(0,7);JG=(FG&&FG[Y]).call(FG,"timers").setImmediate}catch(Q){JG=function(L){jG===!1&&(jG=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var q=new MessageChannel;q.port1.onmessage=L,q.port2.postMessage(void 0)}}return JG(U)}function e(U){return 1<U.length&&typeof AggregateError==="function"?AggregateError(U):U[0]}function GG(U,Y){Y!==qG-1&&console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. "),qG=Y}function XG(U,Y,Q){var L=O.actQueue;if(L!==null)if(L.length!==0)try{YG(L),t(function(){return XG(U,Y,Q)});return}catch(q){O.thrownErrors.push(q)}else O.actQueue=null;0<O.thrownErrors.length?(L=e(O.thrownErrors),O.thrownErrors.length=0,Q(L)):Y(U)}function YG(U){if(!OG){OG=!0;var Y=0;try{for(;Y<U.length;Y++){var Q=U[Y];do{O.didUsePromise=!1;var L=Q(!1);if(L!==null){if(O.didUsePromise){U[Y]=Q,U.splice(0,Y);return}Q=L}else break}while(1)}U.length=0}catch(q){U.splice(0,Y+1),O.thrownErrors.push(q)}finally{OG=!1}}}typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());var BG=Symbol.for("react.transitional.element"),zG=Symbol.for("react.portal"),ZG=Symbol.for("react.fragment"),W=Symbol.for("react.strict_mode"),N=Symbol.for("react.profiler"),g=Symbol.for("react.consumer"),u=Symbol.for("react.context"),p=Symbol.for("react.forward_ref"),HG=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),l=Symbol.for("react.memo"),s=Symbol.for("react.lazy"),LG=Symbol.for("react.activity"),SG=Symbol.iterator,kG={},gG={isMounted:function(){return!1},enqueueForceUpdate:function(U){H(U,"forceUpdate")},enqueueReplaceState:function(U){H(U,"replaceState")},enqueueSetState:function(U){H(U,"setState")}},fG=Object.assign,NG={};Object.freeze(NG),M.prototype.isReactComponent={},M.prototype.setState=function(U,Y){if(typeof U!=="object"&&typeof U!=="function"&&U!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,U,Y,"setState")},M.prototype.forceUpdate=function(U){this.updater.enqueueForceUpdate(this,U,"forceUpdate")};var E={isMounted:["isMounted","Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."],replaceState:["replaceState","Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."]};for(MG in E)E.hasOwnProperty(MG)&&X(MG,E[MG]);B.prototype=M.prototype,E=$.prototype=new B,E.constructor=$,fG(E,M.prototype),E.isPureReactComponent=!0;var bG=Array.isArray,iG=Symbol.for("react.client.reference"),O={H:null,A:null,T:null,S:null,actQueue:null,asyncTransitions:0,isBatchingLegacy:!1,didScheduleLegacyUpdate:!1,didUsePromise:!1,thrownErrors:[],getCurrentStack:null,recentlyCreatedOwnerStacks:0},RG=Object.prototype.hasOwnProperty,hG=console.createTask?console.createTask:function(){return null};E={react_stack_bottom_frame:function(U){return U()}};var uG,mG,yG={},aG=E.react_stack_bottom_frame.bind(E,K)(),rG=hG(_(K)),DG=!1,dG=/\/+/g,EG=typeof reportError==="function"?reportError:function(U){if(typeof window==="object"&&typeof window.ErrorEvent==="function"){var Y=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof U==="object"&&U!==null&&typeof U.message==="string"?String(U.message):String(U),error:U});if(!window.dispatchEvent(Y))return}else if(typeof process==="object"&&typeof process.emit==="function"){process.emit("uncaughtException",U);return}console.error(U)},jG=!1,JG=null,qG=0,PG=!1,OG=!1,VG=typeof queueMicrotask==="function"?function(U){queueMicrotask(function(){return queueMicrotask(U)})}:t;E=Object.freeze({__proto__:null,c:function(U){return f().useMemoCache(U)}});var MG={map:y,forEach:function(U,Y,Q){y(U,function(){Y.apply(this,arguments)},Q)},count:function(U){var Y=0;return y(U,function(){Y++}),Y},toArray:function(U){return y(U,function(Y){return Y})||[]},only:function(U){if(!j(U))throw Error("React.Children.only expected to receive a single React element child.");return U}};QU.Activity=LG,QU.Children=MG,QU.Component=M,QU.Fragment=ZG,QU.Profiler=N,QU.PureComponent=$,QU.StrictMode=W,QU.Suspense=HG,QU.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=O,QU.__COMPILER_RUNTIME=E,QU.act=function(U){var Y=O.actQueue,Q=qG;qG++;var L=O.actQueue=Y!==null?Y:[],q=!1;try{var T=U()}catch(w){O.thrownErrors.push(w)}if(0<O.thrownErrors.length)throw GG(Y,Q),U=e(O.thrownErrors),O.thrownErrors.length=0,U;if(T!==null&&typeof T==="object"&&typeof T.then==="function"){var A=T;return VG(function(){q||PG||(PG=!0,console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(w,a){q=!0,A.then(function(WG){if(GG(Y,Q),Q===0){try{YG(L),t(function(){return XG(WG,w,a)})}catch(eG){O.thrownErrors.push(eG)}if(0<O.thrownErrors.length){var tG=e(O.thrownErrors);O.thrownErrors.length=0,a(tG)}}else w(WG)},function(WG){GG(Y,Q),0<O.thrownErrors.length?(WG=e(O.thrownErrors),O.thrownErrors.length=0,a(WG)):a(WG)})}}}var k=T;if(GG(Y,Q),Q===0&&(YG(L),L.length!==0&&VG(function(){q||PG||(PG=!0,console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"))}),O.actQueue=null),0<O.thrownErrors.length)throw U=e(O.thrownErrors),O.thrownErrors.length=0,U;return{then:function(w,a){q=!0,Q===0?(O.actQueue=L,t(function(){return XG(k,w,a)})):w(k)}}},QU.cache=function(U){return function(){return U.apply(null,arguments)}},QU.cacheSignal=function(){return null},QU.captureOwnerStack=function(){var U=O.getCurrentStack;return U===null?null:U()},QU.cloneElement=function(U,Y,Q){if(U===null||U===void 0)throw Error("The argument must be a React element, but you passed "+U+".");var L=fG({},U.props),q=U.key,T=U._owner;if(Y!=null){var A;G:{if(RG.call(Y,"ref")&&(A=Object.getOwnPropertyDescriptor(Y,"ref").get)&&A.isReactWarning){A=!1;break G}A=Y.ref!==void 0}A&&(T=S()),J(Y)&&(v(Y.key),q=""+Y.key);for(k in Y)!RG.call(Y,k)||k==="key"||k==="__self"||k==="__source"||k==="ref"&&Y.ref===void 0||(L[k]=Y[k])}var k=arguments.length-2;if(k===1)L.children=Q;else if(1<k){A=Array(k);for(var w=0;w<k;w++)A[w]=arguments[w+2];L.children=A}L=c(U.type,q,L,T,U._debugStack,U._debugTask);for(q=2;q<arguments.length;q++)d(arguments[q]);return L},QU.createContext=function(U){return U={$$typeof:u,_currentValue:U,_currentValue2:U,_threadCount:0,Provider:null,Consumer:null},U.Provider=U,U.Consumer={$$typeof:g,_context:U},U._currentRenderer=null,U._currentRenderer2=null,U},QU.createElement=function(U,Y,Q){for(var L=2;L<arguments.length;L++)d(arguments[L]);L={};var q=null;if(Y!=null)for(w in mG||!("__self"in Y)||"key"in Y||(mG=!0,console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")),J(Y)&&(v(Y.key),q=""+Y.key),Y)RG.call(Y,w)&&w!=="key"&&w!=="__self"&&w!=="__source"&&(L[w]=Y[w]);var T=arguments.length-2;if(T===1)L.children=Q;else if(1<T){for(var A=Array(T),k=0;k<T;k++)A[k]=arguments[k+2];Object.freeze&&Object.freeze(A),L.children=A}if(U&&U.defaultProps)for(w in T=U.defaultProps,T)L[w]===void 0&&(L[w]=T[w]);q&&F(L,typeof U==="function"?U.displayName||U.name||"Unknown":U);var w=1e4>O.recentlyCreatedOwnerStacks++;return c(U,q,L,S(),w?Error("react-stack-top-frame"):aG,w?hG(_(U)):rG)},QU.createRef=function(){var U={current:null};return Object.seal(U),U},QU.forwardRef=function(U){U!=null&&U.$$typeof===l?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof U!=="function"?console.error("forwardRef requires a render function but was given %s.",U===null?"null":typeof U):U.length!==0&&U.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",U.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),U!=null&&U.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var Y={$$typeof:p,render:U},Q;return Object.defineProperty(Y,"displayName",{enumerable:!1,configurable:!0,get:function(){return Q},set:function(L){Q=L,U.name||U.displayName||(Object.defineProperty(U,"name",{value:L}),U.displayName=L)}}),Y},QU.isValidElement=j,QU.lazy=function(U){U={_status:-1,_result:U};var Y={$$typeof:s,_payload:U,_init:_G},Q={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return U._ioInfo=Q,Y._debugInfo=[{awaited:Q}],Y},QU.memo=function(U,Y){U==null&&console.error("memo: The first argument must be a component. Instead received: %s",U===null?"null":typeof U),Y={$$typeof:l,type:U,compare:Y===void 0?null:Y};var Q;return Object.defineProperty(Y,"displayName",{enumerable:!1,configurable:!0,get:function(){return Q},set:function(L){Q=L,U.name||U.displayName||(Object.defineProperty(U,"name",{value:L}),U.displayName=L)}}),Y},QU.startTransition=function(U){var Y=O.T,Q={};Q._updatedFibers=new Set,O.T=Q;try{var L=U(),q=O.S;q!==null&&q(Q,L),typeof L==="object"&&L!==null&&typeof L.then==="function"&&(O.asyncTransitions++,L.then($G,$G),L.then(R,EG))}catch(T){EG(T)}finally{Y===null&&Q._updatedFibers&&(U=Q._updatedFibers.size,Q._updatedFibers.clear(),10<U&&console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")),Y!==null&&Q.types!==null&&(Y.types!==null&&Y.types!==Q.types&&console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."),Y.types=Q.types),O.T=Y}},QU.unstable_useCacheRefresh=function(){return f().useCacheRefresh()},QU.use=function(U){return f().use(U)},QU.useActionState=function(U,Y,Q){return f().useActionState(U,Y,Q)},QU.useCallback=function(U,Y){return f().useCallback(U,Y)},QU.useContext=function(U){var Y=f();return U.$$typeof===g&&console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?"),Y.useContext(U)},QU.useDebugValue=function(U,Y){return f().useDebugValue(U,Y)},QU.useDeferredValue=function(U,Y){return f().useDeferredValue(U,Y)},QU.useEffect=function(U,Y){return U==null&&console.warn("React Hook useEffect requires an effect callback. Did you forget to pass a callback to the hook?"),f().useEffect(U,Y)},QU.useEffectEvent=function(U){return f().useEffectEvent(U)},QU.useId=function(){return f().useId()},QU.useImperativeHandle=function(U,Y,Q){return f().useImperativeHandle(U,Y,Q)},QU.useInsertionEffect=function(U,Y){return U==null&&console.warn("React Hook useInsertionEffect requires an effect callback. Did you forget to pass a callback to the hook?"),f().useInsertionEffect(U,Y)},QU.useLayoutEffect=function(U,Y){return U==null&&console.warn("React Hook useLayoutEffect requires an effect callback. Did you forget to pass a callback to the hook?"),f().useLayoutEffect(U,Y)},QU.useMemo=function(U,Y){return f().useMemo(U,Y)},QU.useOptimistic=function(U,Y){return f().useOptimistic(U,Y)},QU.useReducer=function(U,Y,Q){return f().useReducer(U,Y,Q)},QU.useRef=function(U){return f().useRef(U)},QU.useState=function(U){return f().useState(U)},QU.useSyncExternalStore=function(U,Y,Q){return f().useSyncExternalStore(U,Y,Q)},QU.useTransition=function(){return f().useTransition()},QU.version="19.2.7",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var wG=pG(($U)=>{var UG=KG(TG());(function(){function X(W){if(W==null)return null;if(typeof W==="function")return W.$$typeof===f?null:W.displayName||W.name||null;if(typeof W==="string")return W;switch(W){case b:return"Fragment";case m:return"Profiler";case c:return"StrictMode";case i:return"Suspense";case QG:return"SuspenseList";case _G:return"Activity"}if(typeof W==="object")switch(typeof W.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),W.$$typeof){case F:return"Portal";case j:return W.displayName||"Context";case d:return(W._context.displayName||"Context")+".Consumer";case n:var N=W.render;return W=W.displayName,W||(W=N.displayName||N.name||"",W=W!==""?"ForwardRef("+W+")":"ForwardRef"),W;case I:return N=W.displayName||null,N!==null?N:X(W.type)||"Memo";case y:N=W._payload,W=W._init;try{return X(W(N))}catch(g){}}return null}function Z(W){return""+W}function H(W){try{Z(W);var N=!1}catch(p){N=!0}if(N){N=console;var g=N.error,u=typeof Symbol==="function"&&Symbol.toStringTag&&W[Symbol.toStringTag]||W.constructor.name||"Object";return g.call(N,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",u),Z(W)}}function M(W){if(W===b)return"<>";if(typeof W==="object"&&W!==null&&W.$$typeof===y)return"<...>";try{var N=X(W);return N?"<"+N+">":"<...>"}catch(g){return"<...>"}}function B(){var W=$G.A;return W===null?null:W.getOwner()}function $(){return Error("react-stack-top-frame")}function R(W){if(t.call(W,"key")){var N=Object.getOwnPropertyDescriptor(W,"key").get;if(N&&N.isReactWarning)return!1}return W.key!==void 0}function z(W,N){function g(){XG||(XG=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",N))}g.isReactWarning=!0,Object.defineProperty(W,"key",{get:g,configurable:!0})}function v(){var W=X(this.type);return YG[W]||(YG[W]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),W=this.props.ref,W!==void 0?W:null}function C(W,N,g,u,p,HG){var h=g.ref;return W={$$typeof:J,type:W,key:N,props:g,_owner:u},(h!==void 0?h:null)!==null?Object.defineProperty(W,"ref",{enumerable:!1,get:v}):Object.defineProperty(W,"ref",{enumerable:!1,value:null}),W._store={},Object.defineProperty(W._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(W,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(W,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:p}),Object.defineProperty(W,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:HG}),Object.freeze&&(Object.freeze(W.props),Object.freeze(W)),W}function _(W,N,g,u,p,HG){var h=N.children;if(h!==void 0)if(u)if(e(h)){for(u=0;u<h.length;u++)S(h[u]);Object.freeze&&Object.freeze(h)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else S(h);if(t.call(N,"key")){h=X(W);var l=Object.keys(N).filter(function(LG){return LG!=="key"});u=0<l.length?"{key: someKey, "+l.join(": ..., ")+": ...}":"{key: someKey}",ZG[h+u]||(l=0<l.length?"{"+l.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
14
+ let props = %s;
15
+ <%s {...props} />
16
+ React keys must be passed directly to JSX without using spread:
17
+ let props = %s;
18
+ <%s key={someKey} {...props} />`,u,h,l,h),ZG[h+u]=!0)}if(h=null,g!==void 0&&(H(g),h=""+g),R(N)&&(H(N.key),h=""+N.key),"key"in N){g={};for(var s in N)s!=="key"&&(g[s]=N[s])}else g=N;return h&&z(g,typeof W==="function"?W.displayName||W.name||"Unknown":W),C(W,h,g,B(),p,HG)}function S(W){K(W)?W._store&&(W._store.validated=1):typeof W==="object"&&W!==null&&W.$$typeof===y&&(W._payload.status==="fulfilled"?K(W._payload.value)&&W._payload.value._store&&(W._payload.value._store.validated=1):W._store&&(W._store.validated=1))}function K(W){return typeof W==="object"&&W!==null&&W.$$typeof===J}var J=Symbol.for("react.transitional.element"),F=Symbol.for("react.portal"),b=Symbol.for("react.fragment"),c=Symbol.for("react.strict_mode"),m=Symbol.for("react.profiler"),d=Symbol.for("react.consumer"),j=Symbol.for("react.context"),n=Symbol.for("react.forward_ref"),i=Symbol.for("react.suspense"),QG=Symbol.for("react.suspense_list"),I=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),_G=Symbol.for("react.activity"),f=Symbol.for("react.client.reference"),$G=UG.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,t=Object.prototype.hasOwnProperty,e=Array.isArray,GG=console.createTask?console.createTask:function(){return null};UG={react_stack_bottom_frame:function(W){return W()}};var XG,YG={},BG=UG.react_stack_bottom_frame.bind(UG,$)(),zG=GG(M($)),ZG={};$U.Fragment=b,$U.jsxDEV=function(W,N,g,u){var p=1e4>$G.recentlyCreatedOwnerStacks++;return _(W,N,g,u,p?Error("react-stack-top-frame"):BG,p?GG(M(W)):zG)}})()});var V=KG(TG(),1),G=KG(wG(),1),BU={"mark-github":"M8 0c4.42 0 8 3.58 8 8a8.013 8.013 0 0 1-5.45 7.59c-.4.08-.55-.17-.55-.38 0-.27.01-1.13.01-2.2 0-.75-.25-1.23-.54-1.48 1.78-.2 3.65-.88 3.65-3.95 0-.88-.31-1.59-.82-2.15.08-.2.36-1.02-.08-2.12 0 0-.67-.22-2.2.82-.64-.18-1.32-.27-2-.27-.68 0-1.36.09-2 .27-1.53-1.03-2.2-.82-2.2-.82-.44 1.1-.16 1.92-.08 2.12-.51.56-.82 1.28-.82 2.15 0 3.06 1.86 3.75 3.64 3.95-.23.2-.44.55-.51 1.07-.46.21-1.61.55-2.33-.66-.15-.24-.6-.83-1.23-.82-.67.01-.27.38.01.53.34.19.73.9.82 1.13.16.45.68 1.31 2.69.94 0 .67.01 1.3.01 1.49 0 .21-.15.45-.55.38A7.995 7.995 0 0 1 0 8c0-4.42 3.58-8 8-8Z","git-pull-request":"M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z","git-merge":"M5.45 5.154A4.25 4.25 0 0 0 9.25 7.5h1.378a2.251 2.251 0 1 1 0 1.5H9.25A5.734 5.734 0 0 1 5 7.123v3.505a2.25 2.25 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.95-.218ZM4.25 13.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm8.5-4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM5 3.25a.75.75 0 1 0 0 .005V3.25Z","git-pull-request-closed":"M3.25 1A2.25 2.25 0 0 1 4 5.372v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.251 2.251 0 0 1 3.25 1Zm9.5 5.5a.75.75 0 0 1 .75.75v3.378a2.251 2.251 0 1 1-1.5 0V7.25a.75.75 0 0 1 .75-.75Zm-2.03-5.273a.75.75 0 0 1 1.06 0l.97.97.97-.97a.748.748 0 0 1 1.265.332.75.75 0 0 1-.205.729l-.97.97.97.97a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-.97-.97-.97.97a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l.97-.97-.97-.97a.75.75 0 0 1 0-1.06ZM2.5 3.25a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0ZM3.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm9.5 0a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z","git-pull-request-draft":"M3.25 1A2.25 2.25 0 0 1 4 5.372v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.251 2.251 0 0 1 3.25 1Zm9.5 14a2.25 2.25 0 1 1 0-4.5 2.25 2.25 0 0 1 0 4.5ZM2.5 3.25a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0ZM3.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm9.5 0a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM14 7.5a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Zm0-4.25a1.25 1.25 0 1 1-2.5 0 1.25 1.25 0 0 1 2.5 0Z",check:"M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z",x:"M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z","dot-fill":"M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z",comment:"M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z","comment-discussion":"M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z",code:"m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z","issue-opened":"M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z",play:"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z",table:"M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z",shield:"M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.755 1.755 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68Z",graph:"M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z",gear:"M8 0a8.2 8.2 0 0 1 .701.031C9.444.095 9.99.645 10.16 1.29l.288 1.107c.018.066.079.158.212.224.231.114.454.243.668.386.123.082.233.09.299.071l1.103-.303c.644-.176 1.392.021 1.82.63.27.385.506.792.704 1.218.315.675.111 1.422-.364 1.891l-.814.806c-.049.048-.098.147-.088.294.016.257.016.515 0 .772-.01.147.038.246.088.294l.814.806c.475.469.679 1.216.364 1.891a7.977 7.977 0 0 1-.704 1.217c-.428.61-1.176.807-1.82.63l-1.102-.302c-.067-.019-.177-.011-.3.071a5.909 5.909 0 0 1-.668.386c-.133.066-.194.158-.211.224l-.29 1.106c-.168.646-.715 1.196-1.458 1.26a8.006 8.006 0 0 1-1.402 0c-.743-.064-1.289-.614-1.458-1.26l-.289-1.106c-.018-.066-.079-.158-.212-.224a5.738 5.738 0 0 1-.668-.386c-.123-.082-.233-.09-.299-.071l-1.103.303c-.644.176-1.392-.021-1.82-.63a8.12 8.12 0 0 1-.704-1.218c-.315-.675-.111-1.422.363-1.891l.815-.806c.05-.048.098-.147.088-.294a6.214 6.214 0 0 1 0-.772c.01-.147-.038-.246-.088-.294l-.815-.806C.635 6.045.431 5.298.746 4.623a7.92 7.92 0 0 1 .704-1.217c.428-.61 1.176-.807 1.82-.63l1.102.302c.067.019.177.011.3-.071.214-.143.437-.272.668-.386.133-.066.194-.158.211-.224l.29-1.106C6.009.645 6.556.095 7.299.03 7.53.01 7.764 0 8 0Zm-.571 1.525c-.036.003-.108.036-.137.146l-.289 1.105c-.147.561-.549.967-.998 1.189-.173.086-.34.183-.5.29-.417.278-.97.423-1.529.27l-1.103-.303c-.109-.03-.175.016-.195.045-.22.312-.412.644-.573.99-.014.031-.021.11.059.19l.815.806c.411.406.562.957.53 1.456a4.709 4.709 0 0 0 0 .582c.032.499-.119 1.05-.53 1.456l-.815.806c-.081.08-.073.159-.059.19.162.346.353.677.573.989.02.03.085.076.195.046l1.102-.303c.56-.153 1.113-.008 1.53.27.161.107.328.204.501.29.447.222.85.629.997 1.189l.289 1.105c.029.109.101.143.137.146a6.6 6.6 0 0 0 1.142 0c.036-.003.108-.036.137-.146l.289-1.105c.147-.561.549-.967.998-1.189.173-.086.34-.183.5-.29.417-.278.97-.423 1.529-.27l1.103.303c.109.029.175-.016.195-.045.22-.313.411-.644.573-.99.014-.031.021-.11-.059-.19l-.815-.806c-.411-.406-.562-.957-.53-1.456a4.709 4.709 0 0 0 0-.582c-.032-.499.119-1.05.53-1.456l.815-.806c.081-.08.073-.159.059-.19a6.464 6.464 0 0 0-.573-.989c-.02-.03-.085-.076-.195-.046l-1.102.303c-.56.153-1.113.008-1.53-.27a4.44 4.44 0 0 0-.501-.29c-.447-.222-.85-.629-.997-1.189l-.289-1.105c-.029-.11-.101-.143-.137-.146a6.6 6.6 0 0 0-1.142 0ZM11 8a3 3 0 1 1-6 0 3 3 0 0 1 6 0ZM9.5 8a1.5 1.5 0 1 0-3.001.001A1.5 1.5 0 0 0 9.5 8Z","git-commit":"M11.93 8.5a4.002 4.002 0 0 1-7.86 0H.75a.75.75 0 0 1 0-1.5h3.32a4.002 4.002 0 0 1 7.86 0h3.32a.75.75 0 0 1 0 1.5Zm-1.43-.75a2.5 2.5 0 1 0-5 0 2.5 2.5 0 0 0 5 0Z","file-diff":"M1 1.75C1 .784 1.784 0 2.75 0h7.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25V4.664a.25.25 0 0 0-.073-.177l-2.914-2.914a.25.25 0 0 0-.177-.073ZM8 3.25a.75.75 0 0 1 .75.75v1.5h1.5a.75.75 0 0 1 0 1.5h-1.5v1.5a.75.75 0 0 1-1.5 0V7h-1.5a.75.75 0 0 1 0-1.5h1.5V4A.75.75 0 0 1 8 3.25Zm-3 8a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Z",checklist:"M2.5 1.75v11.5c0 .138.112.25.25.25h3.17a.75.75 0 0 1 0 1.5H2.75A1.75 1.75 0 0 1 1 13.25V1.75C1 .784 1.784 0 2.75 0h8.5C12.216 0 13 .784 13 1.75v7.736a.75.75 0 0 1-1.5 0V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13.274 9.537v-.001l-4.557 4.45a.75.75 0 0 1-1.055-.008l-1.943-1.95a.75.75 0 0 1 1.062-1.058l1.419 1.425 4.026-3.932a.75.75 0 1 1 1.048 1.074ZM4.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM4 7.75A.75.75 0 0 1 4.75 7h2a.75.75 0 0 1 0 1.5h-2A.75.75 0 0 1 4 7.75Z",eye:"M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z",search:"M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z","three-bars":"M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z",inbox:"M2.8 2.06A1.75 1.75 0 0 1 4.41 1h7.18c.7 0 1.333.417 1.61 1.06l2.74 6.395c.04.093.06.194.06.295v4.5A1.75 1.75 0 0 1 14.25 15H1.75A1.75 1.75 0 0 1 0 13.25v-4.5c0-.101.02-.202.06-.295Zm1.61.44a.25.25 0 0 0-.23.152L1.887 8H4.75a.75.75 0 0 1 .6.3L6.625 10h2.75l1.275-1.7a.75.75 0 0 1 .6-.3h2.863L11.82 2.652a.25.25 0 0 0-.23-.152Zm10.09 7h-2.875l-1.275 1.7a.75.75 0 0 1-.6.3h-3.5a.75.75 0 0 1-.6-.3L4.375 9.5H1.5v3.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Z",plus:"M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z","triangle-down":"m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z","chevron-down":"M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z",tag:"M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z",milestone:"M7.75 0a.75.75 0 0 1 .75.75V3h3.634c.414 0 .814.147 1.13.414l2.07 1.75a1.75 1.75 0 0 1 0 2.672l-2.07 1.75a1.75 1.75 0 0 1-1.13.414H8.5v5.25a.75.75 0 0 1-1.5 0V10H2.75A1.75 1.75 0 0 1 1 8.25v-3.5C1 3.784 1.784 3 2.75 3H7V.75A.75.75 0 0 1 7.75 0Zm4.384 8.5a.25.25 0 0 0 .161-.06l2.07-1.75a.248.248 0 0 0 0-.38l-2.07-1.75a.25.25 0 0 0-.161-.06H2.75a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h9.384Z",copy:"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Zm5-5C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z","kebab-horizontal":"M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z",skip:"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"};function P({name:X,size:Z=16,className:H}){return G.jsxDEV("svg",{className:`octicon octicon-${X}${H?` ${H}`:""}`,viewBox:"0 0 16 16",width:Z,height:Z,"aria-hidden":"true",fill:"currentColor",children:G.jsxDEV("path",{d:BU[X]??""},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function MU(X){let Z=2166136261;for(let H=0;H<X.length;H++)Z=Math.imul(Z^X.charCodeAt(H),16777619);return Z>>>0}function D({login:X,size:Z=20,src:H}){if(H)return G.jsxDEV("img",{className:"gh-avatar",src:H,width:Z,height:Z,alt:`@${X??""}`},void 0,!1,void 0,this);let M=MU(X||"ghost"),B=M%360,$=[];for(let R=0;R<5;R++)for(let z=0;z<3;z++)if(M>>R*3+z&1){if($.push(G.jsxDEV("rect",{x:1+z,y:1+R,width:1,height:1},`${z}-${R}`,!1,void 0,this)),z<2)$.push(G.jsxDEV("rect",{x:5-z,y:1+R,width:1,height:1},`${4-z}-${R}m`,!1,void 0,this))}return G.jsxDEV("svg",{className:"gh-avatar",width:Z,height:Z,viewBox:"0 0 7 7",role:"img","aria-label":`@${X??"ghost"}`,shapeRendering:"crispEdges",children:[G.jsxDEV("rect",{width:"7",height:"7",fill:"#f0f0f0"},void 0,!1,void 0,this),G.jsxDEV("g",{fill:`hsl(${B} 55% 58%)`,children:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function zU(X,Z=Date.now()){if(!X)return"";let H=Date.parse(X);if(!Number.isFinite(H))return"";let M=Math.max(0,Math.round((Z-H)/1000));if(M<45)return"now";let B=Math.round(M/60);if(B<60)return B===1?"1 minute ago":`${B} minutes ago`;let $=Math.round(B/60);if($<24)return $===1?"1 hour ago":`${$} hours ago`;let R=Math.round($/24);if(R===1)return"yesterday";if(R<30)return`${R} days ago`;return`on ${new Date(H).toLocaleDateString("en-US",{month:"short",day:"numeric",...new Date(H).getFullYear()!==new Date(Z).getFullYear()?{year:"numeric"}:{}})}`}function o({iso:X}){return G.jsxDEV("time",{dateTime:X,title:X?new Date(X).toLocaleString("en-US",{dateStyle:"medium",timeStyle:"short"}):void 0,children:zU(X)},void 0,!1,void 0,this)}function lG({name:X,color:Z}){let H=(Z||"ededed").replace(/^#/,""),[M,B,$]=[0,2,4].map((z)=>parseInt(H.slice(z,z+2),16)||0),R=(M*299+B*587+$*114)/1000>150;return G.jsxDEV("span",{className:"gh-label",style:{background:`#${H}`,color:R?"#1f2328":"#ffffff"},children:X},void 0,!1,void 0,this)}function LU({text:X}){let Z=(M,B)=>M.split(/(`[^`]+`|\*\*[^*]+\*\*|https?:\/\/\S+)/g).map(($,R)=>{if(/^`[^`]+`$/.test($))return G.jsxDEV("code",{children:$.slice(1,-1)},`${B}-${R}`,!1,void 0,this);if(/^\*\*[^*]+\*\*$/.test($))return G.jsxDEV("strong",{children:$.slice(2,-2)},`${B}-${R}`,!1,void 0,this);if(/^https?:\/\//.test($))return G.jsxDEV("a",{href:$,target:"_blank",rel:"noreferrer",children:$},`${B}-${R}`,!1,void 0,this);return $}),H=(X??"").trim().split(/\n{2,}/).filter(Boolean);if(!H.length)return G.jsxDEV("p",{className:"gh-muted",children:G.jsxDEV("em",{children:"No description provided."},void 0,!1,void 0,this)},void 0,!1,void 0,this);return G.jsxDEV(G.Fragment,{children:H.map((M,B)=>G.jsxDEV("p",{children:M.split(`
19
+ `).flatMap(($,R)=>(R?[G.jsxDEV("br",{},`br-${B}-${R}`,!1,void 0,this)]:[]).concat(Z($,`${B}-${R}`)))},B,!1,void 0,this))},void 0,!1,void 0,this)}function x(X){if(X.merged)return"merged";if(X.state==="closed")return"closed";return X.draft?"draft":"open"}var oG={open:"git-pull-request",merged:"git-merge",closed:"git-pull-request-closed",draft:"git-pull-request-draft"},cG={open:"Open",merged:"Merged",closed:"Closed",draft:"Draft"};function RU({pr:X}){let Z=x(X);return G.jsxDEV("span",{className:`state-badge gh-state gh-state-${Z}`,children:[G.jsxDEV(P,{name:oG[Z]},void 0,!1,void 0,this),cG[Z]]},void 0,!0,void 0,this)}var vG={success:"check",failure:"x",error:"x",pending:"dot-fill"};function JU({status:X}){if(!X)return null;let Z=X==="success"?"All checks have passed":X==="pending"?"Some checks haven't completed yet":"Some checks were not successful";return G.jsxDEV("span",{className:`ci-status ${X}`,title:`checks: ${X}`,"aria-label":Z,children:G.jsxDEV(P,{name:vG[X]??"dot-fill"},void 0,!1,void 0,this)},void 0,!1,void 0,this)}function sG(X,Z){let H=new Map;for(let B of Z){if(B.repo!==X.repo||Number(B.number)!==Number(X.number)||!B.reviewer)continue;let $=String(B.state??"").toLowerCase();if($==="approved"||$==="changes_requested"||$==="dismissed")H.set(B.reviewer,$)}let M=[...H.values()];if(M.includes("changes_requested"))return"changes_requested";if(M.includes("approved"))return"approved";return(X.requestedReviewers??[]).length?"review_required":void 0}function OX({repo:X,viewer:Z,active:H,facts:M,openPulls:B,projects:$,onTab:R,onHome:z,onInbox:v,onSearch:C}){let _=X==="all"||!X,[S,K]=_?["",""]:X.split("/"),J=[{id:"code",label:"Code",icon:"code"},{id:"issues",label:"Issues",icon:"issue-opened",count:M?.openIssues??0},{id:"pulls",label:"Pull requests",icon:"git-pull-request",count:B},...M?.hasDiscussions?[{id:"discussions",label:"Discussions",icon:"comment-discussion"}]:[],{id:"actions",label:"Actions",icon:"play"},{id:"projects",label:"Projects",icon:"table",...$?{count:$}:{}},{id:"security",label:"Security",icon:"shield"},{id:"insights",label:"Insights",icon:"graph"},{id:"settings",label:"Settings",icon:"gear"}];return G.jsxDEV("header",{className:"gh-header",children:[G.jsxDEV("div",{className:"gh-globalbar",children:[G.jsxDEV("button",{className:"gh-iconbtn","aria-label":"Open global navigation menu",children:G.jsxDEV(P,{name:"three-bars"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("a",{className:"gh-logo",href:"/","aria-label":"Homepage",onClick:(F)=>{F.preventDefault(),z()},children:G.jsxDEV(P,{name:"mark-github",size:32},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("nav",{className:"gh-context","aria-label":"Page context",children:_?G.jsxDEV("strong",{children:"Pull requests"},void 0,!1,void 0,this):G.jsxDEV(G.Fragment,{children:[G.jsxDEV("a",{href:`/${S}`,onClick:(F)=>F.preventDefault(),children:S},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-context-sep",children:"/"},void 0,!1,void 0,this),G.jsxDEV("a",{href:`/${X}`,onClick:(F)=>{F.preventDefault(),R("code")},children:G.jsxDEV("strong",{children:K},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-spacer"},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-search",onClick:C,children:[G.jsxDEV(P,{name:"search"},void 0,!1,void 0,this),G.jsxDEV("span",{children:["Type ",G.jsxDEV("kbd",{children:"/"},void 0,!1,void 0,this)," to search"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-divider"},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn gh-iconbtn-wide","aria-label":"Create something new",children:[G.jsxDEV(P,{name:"plus"},void 0,!1,void 0,this),G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn","aria-label":"Your issues",onClick:()=>R("issues"),children:G.jsxDEV(P,{name:"issue-opened"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn","aria-label":"Your pull requests",onClick:z,children:G.jsxDEV(P,{name:"git-pull-request"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn","aria-label":"You have no unread notifications",onClick:v,children:G.jsxDEV(P,{name:"inbox"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-viewer",children:G.jsxDEV(D,{login:Z,size:32},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),_?null:G.jsxDEV("nav",{className:"gh-localbar","aria-label":"Repository",children:J.map((F)=>G.jsxDEV("a",{href:`/${X}${F.id==="code"?"":`/${F.id}`}`,className:`gh-tab${H===F.id?" selected":""}`,"aria-current":H===F.id?"page":void 0,onClick:(b)=>{b.preventDefault(),R(F.id)},children:[G.jsxDEV(P,{name:F.icon},void 0,!1,void 0,this),G.jsxDEV("span",{children:F.label},void 0,!1,void 0,this),F.count?G.jsxDEV("span",{className:"Counter",children:F.count},void 0,!1,void 0,this):null]},F.id,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function TX(){return G.jsxDEV("footer",{className:"gh-footer",children:[G.jsxDEV("span",{className:"gh-footer-brand",children:[G.jsxDEV(P,{name:"mark-github",size:24},void 0,!1,void 0,this)," © ",new Date().getFullYear()," GitHub, Inc."]},void 0,!0,void 0,this),G.jsxDEV("ul",{children:["Terms","Privacy","Security","Status","Community","Docs","Contact","Manage cookies","Do not share my personal information"].map((X)=>G.jsxDEV("li",{children:X},X,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function qU(X){let Z=x(X);if(Z==="merged")return G.jsxDEV(G.Fragment,{children:["#",X.number," by ",G.jsxDEV("a",{className:"gh-muted-link",children:X.author},void 0,!1,void 0,this)," was merged ",G.jsxDEV(o,{iso:X.mergedAt},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(Z==="closed")return G.jsxDEV(G.Fragment,{children:["#",X.number," by ",G.jsxDEV("a",{className:"gh-muted-link",children:X.author},void 0,!1,void 0,this)," was closed ",G.jsxDEV(o,{iso:X.closedAt??X.updatedAt},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return G.jsxDEV(G.Fragment,{children:["#",X.number," opened ",G.jsxDEV(o,{iso:X.createdAt},void 0,!1,void 0,this)," by ",G.jsxDEV("a",{className:"gh-muted-link",children:X.author},void 0,!1,void 0,this),Z==="draft"?" • Draft":""]},void 0,!0,void 0,this)}var PU={approved:"Approved",changes_requested:"Changes requested",review_required:"Review required"};function KU({prs:X,reviews:Z,labelColors:H={},showRepo:M,onSelect:B}){return G.jsxDEV("div",{className:"gh-rows",children:X.map(($)=>{let R=x($),z=R==="open"||R==="draft"?sG($,Z):void 0,v=$.commentsCount??0;return G.jsxDEV("div",{className:"pr-row","data-number":$.number,children:[G.jsxDEV("span",{className:`pr-state-icon ${R}`,"aria-label":`${cG[R]} pull request`,children:G.jsxDEV(P,{name:oG[R]},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"pr-row-main",children:[G.jsxDEV("div",{className:"pr-row-title-line",children:[M?G.jsxDEV("span",{className:"pr-row-repo",children:$.repo},void 0,!1,void 0,this):null,G.jsxDEV("a",{className:"pr-row-title",href:`/${$.repo}/pull/${$.number}`,onClick:(C)=>{C.preventDefault(),B?.(`${$.repo}#${$.number}`)},children:$.title},void 0,!1,void 0,this),G.jsxDEV(JU,{status:$.ciStatus},void 0,!1,void 0,this),($.labels??[]).map((C)=>G.jsxDEV(lG,{name:C.name,color:H[`${$.repo}:${C.name}`]??C.color},C.name,!1,void 0,this))]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"pr-row-meta",children:[qU($),z?G.jsxDEV(G.Fragment,{children:[" • ",G.jsxDEV("a",{className:`gh-muted-link decision-${z}`,children:PU[z]},void 0,!1,void 0,this)]},void 0,!0,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"pr-row-side",children:[G.jsxDEV("span",{className:"pr-row-assignees",children:($.assignees??[]).map((C)=>G.jsxDEV(D,{login:C,size:20},C,!1,void 0,this))},void 0,!1,void 0,this),G.jsxDEV("span",{className:"pr-row-comments",children:v?G.jsxDEV("a",{className:"gh-muted-link","aria-label":`${v} comments`,children:[G.jsxDEV(P,{name:"comment"},void 0,!1,void 0,this)," ",v]},void 0,!0,void 0,this):null},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},`${$.repo}#${$.number}`,!0,void 0,this)})},void 0,!1,void 0,this)}function wX({repo:X,prs:Z,reviews:H,facts:M,listState:B,onListState:$,onSelect:R}){let z=Z.filter((K)=>x(K)==="open"||x(K)==="draft"),v=Z.filter((K)=>x(K)==="merged"||x(K)==="closed"),C=B==="open"?z:v,_=Object.fromEntries((M?.labels??[]).map((K)=>[`${X}:${K.name}`,K.color??"ededed"]));for(let K of Z)for(let J of K.labels??[])if(J.color&&!_[`${K.repo}:${J.name}`])_[`${K.repo}:${J.name}`]=J.color;let S=X==="all"||!X;return G.jsxDEV("div",{className:"gh-container gh-list-page",children:[G.jsxDEV("div",{className:"gh-subnav",children:[G.jsxDEV("div",{className:"gh-filter",children:[G.jsxDEV("button",{className:"gh-btn gh-filter-btn",children:["Filters ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("label",{className:"gh-filter-input",children:[G.jsxDEV(P,{name:"search"},void 0,!1,void 0,this),G.jsxDEV("input",{"aria-label":"Search all pull requests",value:`is:pr is:${B} `,readOnly:!0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S?null:G.jsxDEV("div",{className:"gh-subnav-links",children:[G.jsxDEV("a",{className:"gh-subnav-item",children:[G.jsxDEV(P,{name:"tag"},void 0,!1,void 0,this)," Labels ",G.jsxDEV("span",{className:"Counter",children:M?.labels.length??0},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("a",{className:"gh-subnav-item",children:[G.jsxDEV(P,{name:"milestone"},void 0,!1,void 0,this)," Milestones ",G.jsxDEV("span",{className:"Counter",children:M?.milestones??0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),S?null:G.jsxDEV("button",{className:"gh-btn gh-btn-primary",children:"New pull request"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-box",children:[G.jsxDEV("div",{className:"gh-box-header",children:[G.jsxDEV("div",{className:"gh-states",role:"group","aria-label":"Pull request state",children:[G.jsxDEV("button",{className:`gh-states-link${B==="open"?" selected":""}`,"aria-pressed":B==="open",onClick:()=>$("open"),children:[G.jsxDEV(P,{name:"git-pull-request"},void 0,!1,void 0,this)," ",z.length," Open"]},void 0,!0,void 0,this),G.jsxDEV("button",{className:`gh-states-link${B==="closed"?" selected":""}`,"aria-pressed":B==="closed",onClick:()=>$("closed"),children:[G.jsxDEV(P,{name:"check"},void 0,!1,void 0,this)," ",v.length," Closed"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-box-filters",children:["Author","Label","Projects","Milestones","Reviews","Assignee","Sort"].map((K)=>G.jsxDEV("span",{className:"gh-select-menu",children:[K," ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},K,!0,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this),C.length?G.jsxDEV(KU,{prs:C,reviews:H,labelColors:_,showRepo:S,onSelect:R},void 0,!1,void 0,this):G.jsxDEV("div",{className:"gh-blankslate",children:[G.jsxDEV(P,{name:"git-pull-request",size:24},void 0,!1,void 0,this),G.jsxDEV("h3",{children:B==="open"?"There aren’t any open pull requests.":"There aren’t any closed pull requests."},void 0,!1,void 0,this),G.jsxDEV("p",{children:["You could search ",G.jsxDEV("a",{children:"all of GitHub"},void 0,!1,void 0,this)," or try an ",G.jsxDEV("a",{children:"advanced search"},void 0,!1,void 0,this),"."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("p",{className:"gh-protip",children:[G.jsxDEV("strong",{children:"ProTip!"},void 0,!1,void 0,this)," Filter pull requests by the default branch with ",G.jsxDEV("a",{children:"base:main"},void 0,!1,void 0,this),"."]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function CG(X){return X?X.slice(0,7):""}function nG({additions:X=0,deletions:Z=0}){let H=X+Z,M=H?Math.round(X/H*5):0,B=H?Math.min(5-M,Math.round(Z/H*5)||(Z?1:0)):0;return G.jsxDEV("span",{className:"gh-diffstat",children:[G.jsxDEV("span",{className:"gh-add",children:["+",X]},void 0,!0,void 0,this)," ",G.jsxDEV("span",{className:"gh-del",children:["−",Z]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-diffstat-blocks",children:Array.from({length:5},($,R)=>G.jsxDEV("span",{className:`gh-block ${R<M?"add":R<M+B?"del":"neutral"}`},R,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function FU({pr:X,commits:Z,checks:H,files:M,tab:B,onTab:$}){let R=x(X),z=X.commitsCount??Z,v=`${z} commit${z===1?"":"s"}`,[C]=X.repo.split("/"),_=(K)=>G.jsxDEV("span",{className:"gh-commit-ref",title:`${C}:${K}`,children:K},void 0,!1,void 0,this),S=[{id:"conversation",label:"Conversation",icon:"comment-discussion",count:(X.commentsCount??0)+(X.reviewCount??0)+(X.reviewCommentsCount??0)},{id:"commits",label:"Commits",icon:"git-commit",count:z},{id:"checks",label:"Checks",icon:"checklist",count:H},{id:"files",label:"Files changed",icon:"file-diff",count:X.changedFiles??M}];return G.jsxDEV("div",{className:"gh-pull-header",children:[G.jsxDEV("div",{className:"gh-pull-title-row",children:[G.jsxDEV("h1",{className:"gh-pull-title",children:[G.jsxDEV("bdi",{children:X.title},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-pull-number",children:["#",X.number]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-pull-title-actions",children:[G.jsxDEV("button",{className:"gh-btn gh-btn-sm",children:"Edit"},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-btn gh-btn-sm gh-btn-primary",children:[G.jsxDEV(P,{name:"code"},void 0,!1,void 0,this)," Code ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-pull-meta state-line",children:[G.jsxDEV(RU,{pr:X},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-pull-meta-text",children:[R==="merged"?G.jsxDEV(G.Fragment,{children:[G.jsxDEV("a",{className:"gh-author",children:X.mergedBy??X.author},void 0,!1,void 0,this)," merged ",v," into ",_(X.baseBranch)," from ",_(X.headBranch)," ",G.jsxDEV(o,{iso:X.mergedAt},void 0,!1,void 0,this)]},void 0,!0,void 0,this):G.jsxDEV(G.Fragment,{children:[G.jsxDEV("a",{className:"gh-author",children:X.author},void 0,!1,void 0,this)," wants to merge ",v," into ",_(X.baseBranch)," from ",_(X.headBranch)]},void 0,!0,void 0,this),G.jsxDEV("button",{className:"gh-copy","aria-label":"Copy head branch name to clipboard",onClick:()=>void navigator.clipboard?.writeText(X.headBranch??""),children:G.jsxDEV(P,{name:"copy"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("nav",{className:"gh-pull-tabs","aria-label":"Pull request tabs",children:[S.map((K)=>G.jsxDEV("a",{href:"#",className:`gh-pull-tab${B===K.id?" selected":""}`,"aria-current":B===K.id?"page":void 0,onClick:(J)=>{J.preventDefault(),$(K.id)},children:[G.jsxDEV(P,{name:K.icon},void 0,!1,void 0,this)," ",K.label," ",G.jsxDEV("span",{className:"Counter",children:K.count},void 0,!1,void 0,this)]},K.id,!0,void 0,this)),G.jsxDEV("span",{className:"gh-pull-tabs-fill"},void 0,!1,void 0,this),G.jsxDEV(nG,{additions:X.additions,deletions:X.deletions},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function IU(X,Z,H){let M=[];if(H&&H!=="NONE")M.push(H==="OWNER"?"Owner":H==="MEMBER"?"Member":H==="COLLABORATOR"?"Collaborator":H==="CONTRIBUTOR"?"Contributor":"");else if(X&&X===Z.repo.split("/")[0])M.push("Owner");if(X&&X===Z.author)M.push("Author");return M.filter(Boolean)}function IG({login:X,when:Z,body:H,pr:M,viewer:B,verb:$="commented",given:R}){return G.jsxDEV("div",{className:"timeline-item gh-comment-item",children:[G.jsxDEV("span",{className:"gh-timeline-avatar",children:G.jsxDEV(D,{login:X,size:40},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("article",{className:`comment gh-comment${X&&X===B?" gh-comment-self":""}`,children:[G.jsxDEV("header",{className:"gh-comment-header",children:[G.jsxDEV("span",{children:[G.jsxDEV("a",{className:"gh-author",children:X},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:[$," ",G.jsxDEV(o,{iso:Z},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-comment-badges",children:[IU(X,M,R).map((z)=>G.jsxDEV("span",{className:"gh-role",children:z},z,!1,void 0,this)),G.jsxDEV("button",{className:"gh-iconbtn gh-iconbtn-sm","aria-label":"Show options",children:G.jsxDEV(P,{name:"kebab-horizontal"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-comment-body gh-markdown",children:G.jsxDEV(LU,{text:H},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function AG({icon:X,tone:Z,children:H}){return G.jsxDEV("div",{className:"gh-event",children:[G.jsxDEV("span",{className:`gh-event-badge${Z?` ${Z}`:""}`,children:G.jsxDEV(P,{name:X},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-event-body",children:H},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function AU({pr:X,reviews:Z,commits:H,comments:M,reviewComments:B,checks:$=[],stateEvents:R,viewer:z,actions:v}){if(!X)return null;let C=x(X),_=[],S=(J)=>{let F=Date.parse(J??"");return Number.isFinite(F)?F:0};if(H.length){let J=H[0].authorLogin??H[0].author;_.push({at:S(H[0].date),key:"commits",node:G.jsxDEV("div",{className:"gh-commits-event",children:[G.jsxDEV(AG,{icon:"git-commit",children:[G.jsxDEV(D,{login:J,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:J},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:["added ",H.length," commit",H.length===1?"":"s"," ",G.jsxDEV(o,{iso:H[0].date},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),H.map((F)=>G.jsxDEV("div",{className:"gh-commit-line",children:[G.jsxDEV(D,{login:F.authorLogin??F.author,size:16},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-commit-message",children:(F.message??"").split(`
20
+ `)[0]},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-commit-status"},void 0,!1,void 0,this),G.jsxDEV("code",{className:"gh-sha",children:CG(F.sha)},void 0,!1,void 0,this)]},F.sha,!0,void 0,this))]},void 0,!0,void 0,this)})}if(M.forEach((J,F)=>_.push({at:S(J.createdAt),key:`c-${J.id??F}`,node:G.jsxDEV(IG,{login:J.author,when:J.createdAt,body:J.body,pr:X,viewer:z,given:J.authorAssociation},void 0,!1,void 0,this)})),Z.forEach((J,F)=>{let b=String(J.state??"").toLowerCase(),c=b==="approved"?"approved these changes":b==="changes_requested"?"requested changes":b==="dismissed"?"reviewed (dismissed)":"reviewed",m=b==="approved"?"approved":b==="changes_requested"?"changes":"";_.push({at:S(J.submittedAt),key:`r-${J.id??F}`,node:G.jsxDEV("div",{className:"review-card gh-review",children:[G.jsxDEV(AG,{icon:b==="approved"?"check":b==="changes_requested"?"file-diff":"eye",tone:m,children:[G.jsxDEV(D,{login:J.reviewer,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:J.reviewer},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:[c," ",G.jsxDEV(o,{iso:J.submittedAt},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),J.body?G.jsxDEV("div",{className:"gh-review-body",children:G.jsxDEV(IG,{login:J.reviewer,when:J.submittedAt,body:J.body,pr:X,viewer:z,verb:"left a comment"},void 0,!1,void 0,this)},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)})}),B.forEach((J,F)=>_.push({at:S(J.createdAt),key:`rc-${J.id??F}`,node:G.jsxDEV(IG,{login:J.author,when:J.createdAt,body:J.body,pr:X,viewer:z,verb:`commented on ${J.path??"a file"}`},void 0,!1,void 0,this)})),C==="merged")_.push({at:S(X.mergedAt),key:"merged",node:G.jsxDEV(AG,{icon:"git-merge",tone:"merged",children:[G.jsxDEV(D,{login:X.mergedBy??X.author,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:X.mergedBy??X.author},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:"merged commit"},void 0,!1,void 0,this)," ",G.jsxDEV("code",{className:"gh-sha",children:CG(X.mergeCommit)},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:"into"},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-commit-ref",children:X.baseBranch},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:G.jsxDEV(o,{iso:X.mergedAt},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)});return(R??(C==="closed"?[{event:"closed",at:X.closedAt??X.updatedAt}]:[])).filter((J)=>!(C==="merged"&&J.event==="closed")).forEach((J,F)=>{let b=J.actor??X.author;_.push({at:S(J.at),key:`state-${F}`,node:G.jsxDEV(AG,{icon:J.event==="closed"?"git-pull-request-closed":"git-pull-request",tone:J.event==="closed"?"closed":"reopened",children:[G.jsxDEV(D,{login:b,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:b},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:[J.event==="closed"?"closed":"reopened"," this ",G.jsxDEV(o,{iso:J.at},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)})}),_.sort((J,F)=>J.at-F.at),G.jsxDEV("section",{className:"conversation gh-conversation",children:[G.jsxDEV("div",{className:"gh-timeline",children:[G.jsxDEV(IG,{login:X.author,when:X.createdAt,body:X.body,pr:X,viewer:z},void 0,!1,void 0,this),_.map((J)=>G.jsxDEV(V.default.Fragment,{children:J.node},J.key,!1,void 0,this))]},void 0,!0,void 0,this),G.jsxDEV(_U,{pr:X,reviews:Z,checks:$,actions:v},void 0,!1,void 0,this),G.jsxDEV(NU,{pr:X,viewer:z,actions:v},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}function r({ok:X,tone:Z,icon:H,title:M,detail:B,children:$}){return G.jsxDEV("div",{className:"gh-merge-section",children:[G.jsxDEV("span",{className:`gh-merge-section-icon ${Z??(X?"ok":"warn")}`,children:G.jsxDEV(P,{name:H,size:16},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-merge-section-text",children:[G.jsxDEV("strong",{children:M},void 0,!1,void 0,this),B?G.jsxDEV("div",{className:"gh-muted",children:B},void 0,!1,void 0,this):null,$]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function _U({pr:X,reviews:Z,checks:H,actions:M}){let[B,$]=V.useState(!1),[R,z]=V.useState(""),[v,C]=V.useState(""),[_,S]=V.useState(!1),[K,J]=V.useState(""),F=x(X);if(F==="merged")return G.jsxDEV("div",{className:"gh-mergebox",children:[G.jsxDEV("span",{className:"gh-mergebox-icon merged",children:G.jsxDEV(P,{name:"git-merge",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-mergebox-panel",children:G.jsxDEV(r,{tone:"merged",icon:"git-merge",title:"Pull request successfully merged and closed",detail:`You’re all set — the ${X.headBranch} branch can be safely deleted.`},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);if(F==="closed")return G.jsxDEV("div",{className:"gh-mergebox",children:[G.jsxDEV("span",{className:"gh-mergebox-icon closed",children:G.jsxDEV(P,{name:"git-pull-request-closed",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-mergebox-panel",children:G.jsxDEV(r,{tone:"closed",icon:"git-pull-request-closed",title:"Closed with unmerged commits",detail:"This pull request is closed, but the branch has unmerged commits. You can reopen it to continue the review."},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);let b=sG(X,Z),c=new Set(Z.filter((I)=>String(I.state).toLowerCase()==="approved").map((I)=>I.reviewer)).size,m=H.filter((I)=>["failure","error","timed_out","cancelled","action_required"].includes(I.state)),d=H.filter((I)=>I.state==="pending"||I.state==="queued"||I.state==="in_progress"),j=H.length-m.length-d.length,n=X.mergeable===!1,i=(I,y)=>`${I} ${y}${I===1?"":"s"}`;async function QG(I){S(!0),J("");try{await I(),$(!1)}catch(y){J(y instanceof Error?y.message:String(y))}finally{S(!1)}}return G.jsxDEV("div",{className:"gh-mergebox",children:[G.jsxDEV("span",{className:`gh-mergebox-icon ${n||m.length?"neutral":"open"}`,children:G.jsxDEV(P,{name:"git-merge",size:24},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-mergebox-panel",children:[b===void 0?null:b==="approved"?G.jsxDEV(r,{ok:!0,icon:"check",title:"Changes approved",detail:`${i(c,"approving review")} by reviewers with write access.`},void 0,!1,void 0,this):b==="changes_requested"?G.jsxDEV(r,{tone:"bad",icon:"file-diff",title:"Changes requested",detail:"A reviewer has requested changes to this pull request."},void 0,!1,void 0,this):G.jsxDEV(r,{tone:"warn",icon:"dot-fill",title:"Review requested",detail:`Review has been requested on this pull request. ${(X.requestedReviewers??[]).join(", ")} ${(X.requestedReviewers??[]).length===1?"is":"are"} requested.`},void 0,!1,void 0,this),H.length?G.jsxDEV(r,{ok:!m.length&&!d.length,tone:m.length?"bad":d.length?"warn":"ok",icon:m.length?"x":d.length?"dot-fill":"check",title:m.length?"Some checks were not successful":d.length?"Some checks haven’t completed yet":"All checks have passed",detail:[m.length?`${m.length} failing`:"",d.length?`${d.length} pending`:"",j?i(j,"successful check"):""].filter(Boolean).join(", "),children:G.jsxDEV("ul",{className:"gh-checks-list",children:H.map((I)=>G.jsxDEV("li",{children:[G.jsxDEV("span",{className:`ci-status ${I.state==="success"?"success":I.state==="pending"?"pending":"failure"}`,children:G.jsxDEV(P,{name:vG[I.state]??(I.state==="success"?"check":"x")},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("strong",{children:I.name},void 0,!1,void 0,this),I.description?G.jsxDEV("span",{className:"gh-muted",children:[" — ",I.description]},void 0,!0,void 0,this):null,I.targetUrl?G.jsxDEV("a",{className:"gh-check-details",href:I.targetUrl,target:"_blank",rel:"noreferrer",children:"Details"},void 0,!1,void 0,this):null]},I.name,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this):null,n?G.jsxDEV(r,{tone:"bad",icon:"x",title:"This branch has conflicts that must be resolved",detail:"Resolve conflicts then push again."},void 0,!1,void 0,this):G.jsxDEV(r,{ok:!0,icon:"check",title:"No conflicts with base branch",detail:"Merging can be performed automatically."},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-merge-actions",children:[B?G.jsxDEV("div",{className:"gh-merge-confirm",children:[G.jsxDEV("input",{className:"gh-input","aria-label":"Commit title",value:R,onChange:(I)=>z(I.target.value)},void 0,!1,void 0,this),G.jsxDEV("textarea",{className:"gh-input","aria-label":"Commit message",value:v,onChange:(I)=>C(I.target.value),rows:3},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-merge-confirm-buttons",children:[G.jsxDEV("button",{className:"gh-btn gh-btn-primary",disabled:_,onClick:()=>void QG(()=>M.merge(R,v)),children:_?"Merging…":"Confirm merge"},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-btn",disabled:_,onClick:()=>$(!1),children:"Cancel"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this):G.jsxDEV("div",{className:"gh-merge-button-row",children:[G.jsxDEV("span",{className:"gh-btn-group",children:[G.jsxDEV("button",{className:"gh-btn gh-btn-primary",disabled:n||!M,onClick:()=>{let[I]=X.repo.split("/");z(`Merge pull request #${X.number} from ${I}/${X.headBranch}`),C(X.title??""),$(!0)},children:"Merge pull request"},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-btn gh-btn-primary gh-btn-caret","aria-label":"Select merge method",disabled:n||!M,children:G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-muted gh-merge-hint",children:"You can also merge this with the command line."},void 0,!1,void 0,this)]},void 0,!0,void 0,this),K?G.jsxDEV("div",{className:"gh-flash-error",role:"alert",children:K},void 0,!1,void 0,this):null]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function NU({pr:X,viewer:Z,actions:H}){let[M,B]=V.useState(""),[$,R]=V.useState(!1),[z,v]=V.useState(""),C=x(X);async function _(S,K=!0){R(!0),v("");try{if(await S(),K)B("")}catch(J){v(J instanceof Error?J.message:String(J))}finally{R(!1)}}return G.jsxDEV("div",{className:"timeline-item gh-comment-form-item",children:[G.jsxDEV("span",{className:"gh-timeline-avatar",children:G.jsxDEV(D,{login:Z,size:40},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-comment-form",children:[G.jsxDEV("h2",{className:"gh-comment-form-title",children:"Add a comment"},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-comment-form-box",children:[G.jsxDEV("div",{className:"gh-comment-form-tabs",children:[G.jsxDEV("span",{className:"selected",children:"Write"},void 0,!1,void 0,this),G.jsxDEV("span",{children:"Preview"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("textarea",{className:"gh-comment-textarea","aria-label":"Markdown value",placeholder:"Use Markdown to format your comment",value:M,onChange:(S)=>B(S.target.value)},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-comment-form-hint",children:[G.jsxDEV(P,{name:"file-diff"},void 0,!1,void 0,this)," Markdown is supported"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),z?G.jsxDEV("div",{className:"gh-flash-error",role:"alert",children:z},void 0,!1,void 0,this):null,G.jsxDEV("div",{className:"gh-comment-form-actions",children:[C==="open"||C==="draft"?G.jsxDEV("button",{className:"gh-btn",disabled:$||!H,onClick:()=>void _(()=>H.close(M.trim()||void 0)),children:[G.jsxDEV(P,{name:"git-pull-request-closed",className:"gh-closed-fg"},void 0,!1,void 0,this)," ",M.trim()?"Close with comment":"Close pull request"]},void 0,!0,void 0,this):C==="closed"?G.jsxDEV("button",{className:"gh-btn",disabled:$||!H,onClick:()=>void _(()=>H.reopen(),!1),children:"Reopen pull request"},void 0,!1,void 0,this):null,G.jsxDEV("button",{className:"gh-btn gh-btn-primary",disabled:$||!M.trim()||!H,onClick:()=>void _(()=>H.comment(M.trim())),children:"Comment"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function OU({pr:X,reviews:Z,comments:H=[],labelColors:M={}}){if(!X)return G.jsxDEV("aside",{className:"sidebar"},void 0,!1,void 0,this);let B=new Map;for(let z of Z)if(z.reviewer)B.set(z.reviewer,String(z.state??"").toLowerCase());let $=(X.requestedReviewers??[]).filter((z)=>!B.has(z)),R=[...new Set([X.author,...Z.map((z)=>z.reviewer),...H.map((z)=>z.author)].filter(Boolean))];return G.jsxDEV("aside",{className:"sidebar gh-sidebar",children:[G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Reviewers",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),B.size||$.length?G.jsxDEV("ul",{className:"gh-sidebar-list",children:[[...B].map(([z,v])=>G.jsxDEV("li",{children:[G.jsxDEV(D,{login:z,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:z},void 0,!1,void 0,this),G.jsxDEV("span",{className:`gh-review-state ${v}`,title:v,children:G.jsxDEV(P,{name:v==="approved"?"check":v==="changes_requested"?"file-diff":"comment"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},z,!0,void 0,this)),$.map((z)=>G.jsxDEV("li",{children:[G.jsxDEV(D,{login:z,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:z},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-review-state pending",title:"Awaiting requested review",children:G.jsxDEV(P,{name:"dot-fill"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},z,!0,void 0,this))]},void 0,!0,void 0,this):G.jsxDEV("p",{className:"gh-muted",children:"No reviews"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Assignees",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(X.assignees??[]).length?G.jsxDEV("ul",{className:"gh-sidebar-list",children:(X.assignees??[]).map((z)=>G.jsxDEV("li",{children:[G.jsxDEV(D,{login:z,size:20},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:z},void 0,!1,void 0,this)]},z,!0,void 0,this))},void 0,!1,void 0,this):G.jsxDEV("p",{className:"gh-muted",children:["No one—",G.jsxDEV("a",{children:"assign yourself"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Labels",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),(X.labels??[]).length?G.jsxDEV("div",{className:"gh-sidebar-labels",children:(X.labels??[]).map((z)=>G.jsxDEV(lG,{name:z.name,color:M[`${X.repo}:${z.name}`]??z.color},z.name,!1,void 0,this))},void 0,!1,void 0,this):G.jsxDEV("p",{className:"gh-muted",children:"None yet"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Projects",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("p",{className:"gh-muted",children:"None yet"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Milestone",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("p",{className:"gh-muted",children:X.milestone??"No milestone"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{children:["Development",G.jsxDEV(P,{name:"gear"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("p",{className:"gh-muted",children:"Successfully merging this pull request may close these issues."},void 0,!1,void 0,this),G.jsxDEV("p",{className:"gh-muted",children:"None yet"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("section",{className:"gh-sidebar-item",children:[G.jsxDEV("h3",{className:"gh-sidebar-plain",children:[R.length," participant",R.length===1?"":"s"]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-participants",children:R.map((z)=>G.jsxDEV(D,{login:z,size:26},z,!1,void 0,this))},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)}function TU({commits:X}){let Z=new Map;for(let H of X){let M=H.date?new Date(H.date).toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"}):"";Z.set(M,[...Z.get(M)??[],H])}if(!X.length)return G.jsxDEV("div",{className:"gh-blankslate",children:G.jsxDEV("h3",{children:"No commits"},void 0,!1,void 0,this)},void 0,!1,void 0,this);return G.jsxDEV("div",{className:"gh-commits-tab",children:[...Z].map(([H,M])=>G.jsxDEV("div",{className:"gh-commit-group",children:[G.jsxDEV("h3",{className:"gh-commit-group-title",children:[G.jsxDEV(P,{name:"git-commit"},void 0,!1,void 0,this)," Commits on ",H]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-box",children:M.map((B)=>G.jsxDEV("div",{className:"gh-commit-row",children:[G.jsxDEV("div",{children:[G.jsxDEV("div",{className:"gh-commit-row-title",children:(B.message??"").split(`
21
+ `)[0]},void 0,!1,void 0,this),G.jsxDEV("div",{className:"gh-commit-row-meta",children:[G.jsxDEV(D,{login:B.authorLogin??B.author,size:16},void 0,!1,void 0,this)," ",G.jsxDEV("a",{className:"gh-author",children:B.authorLogin??B.author},void 0,!1,void 0,this)," ",G.jsxDEV("span",{className:"gh-muted",children:["committed ",G.jsxDEV(o,{iso:B.date},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("div",{className:"gh-commit-row-side",children:[G.jsxDEV("code",{className:"gh-sha gh-sha-btn",children:CG(B.sha)},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn gh-iconbtn-sm","aria-label":"Copy full SHA",children:G.jsxDEV(P,{name:"copy"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn gh-iconbtn-sm","aria-label":"Browse the repository at this point",children:G.jsxDEV(P,{name:"code"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},B.sha,!0,void 0,this))},void 0,!1,void 0,this)]},H,!0,void 0,this))},void 0,!1,void 0,this)}function wU({checks:X}){if(!X.length)return G.jsxDEV("div",{className:"gh-blankslate",children:[G.jsxDEV(P,{name:"checklist",size:24},void 0,!1,void 0,this),G.jsxDEV("h3",{children:"No checks"},void 0,!1,void 0,this),G.jsxDEV("p",{children:"This commit has no checks yet."},void 0,!1,void 0,this)]},void 0,!0,void 0,this);return G.jsxDEV("div",{className:"gh-box gh-checks-tab",children:[G.jsxDEV("div",{className:"gh-box-header",children:G.jsxDEV("strong",{children:[X.length," check",X.length===1?"":"s"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),X.map((Z)=>G.jsxDEV("div",{className:"gh-check-row",children:[G.jsxDEV("span",{className:`ci-status ${Z.state==="success"?"success":Z.state==="pending"?"pending":"failure"}`,children:G.jsxDEV(P,{name:vG[Z.state]??"x"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("strong",{children:Z.name},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-muted",children:Z.description},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-spacer"},void 0,!1,void 0,this),Z.targetUrl?G.jsxDEV("a",{href:Z.targetUrl,target:"_blank",rel:"noreferrer",children:"Details"},void 0,!1,void 0,this):null]},Z.name,!0,void 0,this))]},void 0,!0,void 0,this)}function CU(X){let Z=[],H=0,M=0;for(let B of X.split(`
22
+ `)){let $=/^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/.exec(B);if($){H=Number($[1]),M=Number($[2]),Z.push({kind:"hunk",text:B});continue}if(B.startsWith("\\")){Z.push({kind:"note",text:B});continue}if(B.startsWith("+"))Z.push({kind:"add",text:B.slice(1),newNo:M++});else if(B.startsWith("-"))Z.push({kind:"del",text:B.slice(1),oldNo:H++});else Z.push({kind:"ctx",text:B.slice(1),oldNo:H++,newNo:M++})}return Z}function vU({files:X}){if(!X.length)return G.jsxDEV("div",{className:"gh-blankslate",children:G.jsxDEV("h3",{children:"No changes to show"},void 0,!1,void 0,this)},void 0,!1,void 0,this);return G.jsxDEV("section",{className:"files-diff gh-files","data-testid":"files-diff",children:[G.jsxDEV("div",{className:"gh-files-toolbar",children:[G.jsxDEV("span",{className:"gh-select-menu",children:["Changes from all commits ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-select-menu",children:["File filter ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-select-menu",children:["Conversations ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),G.jsxDEV("span",{className:"gh-spacer"},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-muted",children:["0 / ",X.length," files viewed"]},void 0,!0,void 0,this),G.jsxDEV("button",{className:"gh-btn gh-btn-sm gh-btn-primary",children:["Review changes ",G.jsxDEV(P,{name:"triangle-down"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),X.map((Z)=>G.jsxDEV("article",{className:"diff-file gh-file",children:[G.jsxDEV("header",{className:"gh-file-header",children:[G.jsxDEV(P,{name:"chevron-down"},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-file-count",children:(Z.additions??0)+(Z.deletions??0)},void 0,!1,void 0,this),G.jsxDEV(nG,{additions:Z.additions,deletions:Z.deletions},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-file-name",children:Z.filename},void 0,!1,void 0,this),G.jsxDEV("button",{className:"gh-iconbtn gh-iconbtn-sm","aria-label":"Copy file name to clipboard",children:G.jsxDEV(P,{name:"copy"},void 0,!1,void 0,this)},void 0,!1,void 0,this),G.jsxDEV("span",{className:"gh-spacer"},void 0,!1,void 0,this),G.jsxDEV("label",{className:"gh-viewed",children:[G.jsxDEV("input",{type:"checkbox",readOnly:!0},void 0,!1,void 0,this)," Viewed"]},void 0,!0,void 0,this)]},void 0,!0,void 0,this),Z.patch?G.jsxDEV("table",{className:"gh-diff-table","data-testid":"diff-hunk",children:G.jsxDEV("tbody",{children:CU(Z.patch).map((H,M)=>H.kind==="hunk"||H.kind==="note"?G.jsxDEV("tr",{className:`gh-diff-${H.kind}`,children:[G.jsxDEV("td",{className:"gh-diff-num",colSpan:2},void 0,!1,void 0,this),G.jsxDEV("td",{className:"gh-diff-code",children:H.text},void 0,!1,void 0,this)]},M,!0,void 0,this):G.jsxDEV("tr",{className:`gh-diff-${H.kind}`,children:[G.jsxDEV("td",{className:"gh-diff-num",children:H.oldNo??""},void 0,!1,void 0,this),G.jsxDEV("td",{className:"gh-diff-num",children:H.newNo??""},void 0,!1,void 0,this),G.jsxDEV("td",{className:"gh-diff-code",children:[G.jsxDEV("span",{className:"gh-diff-marker",children:H.kind==="add"?"+":H.kind==="del"?"-":" "},void 0,!1,void 0,this),H.text||" "]},void 0,!0,void 0,this)]},M,!0,void 0,this))},void 0,!1,void 0,this)},void 0,!1,void 0,this):G.jsxDEV("div",{className:"gh-file-nodiff gh-muted",children:Z.status==="removed"?"This file was deleted.":"Binary file not shown."},void 0,!1,void 0,this)]},Z.filename,!0,void 0,this))]},void 0,!0,void 0,this)}function CX({pr:X,reviews:Z,commits:H,comments:M,reviewComments:B,files:$,checks:R,stateEvents:z,viewer:v,labelColors:C,tab:_,onTab:S,actions:K}){if(!X)return G.jsxDEV("div",{className:"gh-container",children:G.jsxDEV("div",{className:"gh-blankslate",children:G.jsxDEV("h3",{children:"Loading pull request…"},void 0,!1,void 0,this)},void 0,!1,void 0,this)},void 0,!1,void 0,this);return G.jsxDEV("div",{className:"gh-container gh-pull-page",children:[G.jsxDEV(FU,{pr:X,commits:H.length,checks:R.length,files:$.length,tab:_,onTab:S},void 0,!1,void 0,this),_==="conversation"?G.jsxDEV("div",{className:"gh-pull-layout",children:[G.jsxDEV(AU,{pr:X,reviews:Z,commits:H,comments:M,reviewComments:B,checks:R,stateEvents:z,viewer:v,actions:K},void 0,!1,void 0,this),G.jsxDEV(OU,{pr:X,reviews:Z,comments:M,labelColors:C},void 0,!1,void 0,this)]},void 0,!0,void 0,this):_==="commits"?G.jsxDEV(TU,{commits:H},void 0,!1,void 0,this):_==="checks"?G.jsxDEV(wU,{checks:R},void 0,!1,void 0,this):G.jsxDEV(vU,{files:$},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}export{zU as timeAgo,sG as reviewDecision,x as pullState,RU as StateBadge,TX as SiteFooter,OX as RepoHeader,wX as PullsListPage,CX as PullPage,KU as PrList,P as Octicon,lG as Label,vU as FilesDiff,AU as Conversation,JU as CiStatus,D as Avatar,OU as Aside};