gh-manager-cli 1.19.2 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -14,21 +14,23 @@ import {
14
14
  logger,
15
15
  makeClient,
16
16
  purgeApolloCacheFiles,
17
+ renameRepositoryById,
17
18
  searchRepositoriesUnified,
18
19
  syncForkWithUpstream,
19
20
  unarchiveRepositoryById,
20
21
  updateCacheAfterArchive,
21
22
  updateCacheAfterDelete,
23
+ updateCacheAfterRename,
22
24
  updateCacheAfterVisibilityChange,
23
25
  updateCacheWithRepository
24
- } from "./chunk-FPJS7YJW.js";
26
+ } from "./chunk-RI2B33OX.js";
25
27
 
26
28
  // package.json
27
29
  var require_package = __commonJS({
28
30
  "package.json"(exports, module) {
29
31
  module.exports = {
30
32
  name: "gh-manager-cli",
31
- version: "1.19.2",
33
+ version: "1.21.0",
32
34
  private: false,
33
35
  description: "Interactive CLI to manage your GitHub repos (personal) with Ink",
34
36
  license: "MIT",
@@ -74,6 +76,7 @@ var require_package = __commonJS({
74
76
  "@octokit/graphql": "^9.0.1",
75
77
  "apollo3-cache-persist": "^0.14.1",
76
78
  chalk: "^5.6.0",
79
+ clipboardy: "^4.0.0",
77
80
  dotenv: "^17.2.1",
78
81
  "env-paths": "^3.0.0",
79
82
  graphql: "^16.11.0",
@@ -153,13 +156,13 @@ var require_package = __commonJS({
153
156
 
154
157
  // src/index.tsx
155
158
  var import_package = __toESM(require_package(), 1);
156
- import { render, Box as Box17, Text as Text18 } from "ink";
159
+ import { render, Box as Box19, Text as Text20 } from "ink";
157
160
  import "dotenv/config";
158
161
 
159
162
  // src/ui/App.tsx
160
- import { useEffect as useEffect8, useMemo as useMemo2, useState as useState12 } from "react";
161
- import { Box as Box16, Text as Text17, useApp as useApp2, useStdout as useStdout2, useInput as useInput12 } from "ink";
162
- import TextInput5 from "ink-text-input";
163
+ import { useEffect as useEffect9, useMemo as useMemo2, useState as useState14 } from "react";
164
+ import { Box as Box18, Text as Text19, useApp as useApp2, useStdout as useStdout2, useInput as useInput14 } from "ink";
165
+ import TextInput6 from "ink-text-input";
163
166
 
164
167
  // src/config.ts
165
168
  import fs from "fs";
@@ -404,10 +407,10 @@ async function openGitHubAuthorizationPage() {
404
407
  }
405
408
 
406
409
  // src/ui/RepoList.tsx
407
- import React10, { useEffect as useEffect7, useMemo, useState as useState10, useRef, useCallback } from "react";
408
- import { Box as Box13, Text as Text14, useApp, useInput as useInput10, useStdout } from "ink";
409
- import TextInput4 from "ink-text-input";
410
- import chalk11 from "chalk";
410
+ import React12, { useEffect as useEffect8, useMemo, useState as useState12, useRef, useCallback } from "react";
411
+ import { Box as Box15, Text as Text16, useApp, useInput as useInput12, useStdout } from "ink";
412
+ import TextInput5 from "ink-text-input";
413
+ import chalk12 from "chalk";
411
414
 
412
415
  // src/apolloMeta.ts
413
416
  import fs2 from "fs";
@@ -485,7 +488,7 @@ function OrgSwitcher({ token, currentContext, onSelect, onClose }) {
485
488
  try {
486
489
  setLoading(true);
487
490
  setError(null);
488
- const client = await import("./github-7RR5WPCN.js").then((m) => m.makeClient(token));
491
+ const client = await import("./github-ERXQNAVD.js").then((m) => m.makeClient(token));
489
492
  const orgs = await fetchViewerOrganizations(client);
490
493
  setOrganizations(orgs);
491
494
  const entOrgs = /* @__PURE__ */ new Set();
@@ -636,6 +639,51 @@ function formatDate(dateStr) {
636
639
  if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;
637
640
  return `${Math.floor(diffDays / 365)} years ago`;
638
641
  }
642
+ async function copyToClipboard(text) {
643
+ try {
644
+ const clipboardy = await import("clipboardy");
645
+ await clipboardy.write(text);
646
+ return;
647
+ } catch (error) {
648
+ const { spawn } = await import("child_process");
649
+ const { promisify } = await import("util");
650
+ const spawnCommand = (command, args = []) => {
651
+ return new Promise((resolve, reject) => {
652
+ const child = spawn(command, args, { stdio: ["pipe", "pipe", "pipe"] });
653
+ child.stdin.write(text);
654
+ child.stdin.end();
655
+ child.on("close", (code) => {
656
+ if (code === 0) {
657
+ resolve();
658
+ } else {
659
+ reject(new Error(`Command failed with code ${code}`));
660
+ }
661
+ });
662
+ child.on("error", reject);
663
+ });
664
+ };
665
+ try {
666
+ const platform = process.platform;
667
+ if (platform === "darwin") {
668
+ await spawnCommand("pbcopy");
669
+ } else if (platform === "win32") {
670
+ await spawnCommand("clip");
671
+ } else {
672
+ try {
673
+ await spawnCommand("xclip", ["-selection", "clipboard"]);
674
+ } catch {
675
+ try {
676
+ await spawnCommand("xsel", ["--clipboard", "--input"]);
677
+ } catch {
678
+ await spawnCommand("wl-copy");
679
+ }
680
+ }
681
+ }
682
+ } catch (osError) {
683
+ throw new Error(`Failed to copy to clipboard. Please install a clipboard utility for your system.`);
684
+ }
685
+ }
686
+ }
639
687
 
640
688
  // src/ui/components/modals/InfoModal.tsx
641
689
  import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
@@ -1099,10 +1147,228 @@ var ChangeVisibilityModal = ({
1099
1147
  );
1100
1148
  };
1101
1149
 
1102
- // src/ui/components/repo/RepoRow.tsx
1103
- import { Box as Box10, Text as Text11 } from "ink";
1150
+ // src/ui/components/modals/RenameModal.tsx
1151
+ import { useState as useState10, useEffect as useEffect7 } from "react";
1152
+ import { Box as Box10, Text as Text11, useInput as useInput10 } from "ink";
1153
+ import TextInput3 from "ink-text-input";
1154
+ import { Fragment as Fragment5, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1155
+ function RenameModal({ repo, onRename, onCancel }) {
1156
+ const [newName, setNewName] = useState10("");
1157
+ const [renaming, setRenaming] = useState10(false);
1158
+ const [renameError, setRenameError] = useState10(null);
1159
+ useEffect7(() => {
1160
+ if (repo) {
1161
+ setNewName(repo.name);
1162
+ setRenameError(null);
1163
+ }
1164
+ }, [repo]);
1165
+ useInput10((input, key) => {
1166
+ if (renaming) return;
1167
+ if (key.escape) {
1168
+ onCancel();
1169
+ return;
1170
+ }
1171
+ if (key.return) {
1172
+ if (newName.trim() && newName !== repo?.name) {
1173
+ handleRenameConfirm();
1174
+ }
1175
+ return;
1176
+ }
1177
+ });
1178
+ const handleRenameConfirm = async () => {
1179
+ if (!repo || renaming || !newName.trim() || newName === repo.name) return;
1180
+ try {
1181
+ setRenaming(true);
1182
+ setRenameError(null);
1183
+ await onRename(repo, newName.trim());
1184
+ } catch (e) {
1185
+ setRenameError(e.message || "Failed to rename repository");
1186
+ setRenaming(false);
1187
+ }
1188
+ };
1189
+ const handleNameChange = (value) => {
1190
+ const filtered = value.replace(/[^a-zA-Z0-9\-_.]/g, "");
1191
+ setNewName(filtered);
1192
+ };
1193
+ if (!repo) return null;
1194
+ const owner = repo.nameWithOwner.split("/")[0];
1195
+ const isDisabled = !newName.trim() || newName === repo.name;
1196
+ return /* @__PURE__ */ jsxs10(
1197
+ Box10,
1198
+ {
1199
+ flexDirection: "column",
1200
+ borderStyle: "round",
1201
+ borderColor: "cyan",
1202
+ paddingX: 3,
1203
+ paddingY: 2,
1204
+ width: 80,
1205
+ children: [
1206
+ /* @__PURE__ */ jsx11(Text11, { bold: true, color: "cyan", children: "Rename Repository" }),
1207
+ /* @__PURE__ */ jsx11(Box10, { height: 1, children: /* @__PURE__ */ jsx11(Text11, { children: " " }) }),
1208
+ /* @__PURE__ */ jsxs10(Text11, { color: "gray", children: [
1209
+ "Current: ",
1210
+ repo.nameWithOwner
1211
+ ] }),
1212
+ /* @__PURE__ */ jsx11(Box10, { height: 1, children: /* @__PURE__ */ jsx11(Text11, { children: " " }) }),
1213
+ /* @__PURE__ */ jsx11(Text11, { children: "New name:" }),
1214
+ /* @__PURE__ */ jsxs10(Box10, { flexDirection: "row", alignItems: "center", children: [
1215
+ /* @__PURE__ */ jsxs10(Text11, { children: [
1216
+ owner,
1217
+ "/"
1218
+ ] }),
1219
+ /* @__PURE__ */ jsx11(
1220
+ TextInput3,
1221
+ {
1222
+ value: newName,
1223
+ onChange: handleNameChange,
1224
+ placeholder: repo.name,
1225
+ focus: !renaming
1226
+ }
1227
+ )
1228
+ ] }),
1229
+ renaming ? /* @__PURE__ */ jsx11(Box10, { marginTop: 2, justifyContent: "center", children: /* @__PURE__ */ jsxs10(Box10, { flexDirection: "row", children: [
1230
+ /* @__PURE__ */ jsx11(Box10, { marginRight: 1, children: /* @__PURE__ */ jsx11(SlowSpinner, {}) }),
1231
+ /* @__PURE__ */ jsx11(Text11, { color: "cyan", children: "Renaming repository..." })
1232
+ ] }) }) : /* @__PURE__ */ jsxs10(Fragment5, { children: [
1233
+ /* @__PURE__ */ jsx11(Box10, { marginTop: 2, children: /* @__PURE__ */ jsx11(Text11, { color: "gray", children: isDisabled ? "Enter a different name to rename" : `Press Enter to rename to "${newName}"` }) }),
1234
+ /* @__PURE__ */ jsx11(Box10, { marginTop: 1, children: /* @__PURE__ */ jsx11(Text11, { color: "gray", children: "Press Esc to cancel" }) })
1235
+ ] }),
1236
+ renameError && /* @__PURE__ */ jsx11(Box10, { marginTop: 1, children: /* @__PURE__ */ jsx11(Text11, { color: "red", children: renameError }) })
1237
+ ]
1238
+ }
1239
+ );
1240
+ }
1241
+
1242
+ // src/ui/components/modals/CopyUrlModal.tsx
1243
+ import { useState as useState11 } from "react";
1244
+ import { Box as Box11, Text as Text12, useInput as useInput11 } from "ink";
1104
1245
  import chalk10 from "chalk";
1105
- import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
1246
+ import { Fragment as Fragment6, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1247
+ function CopyUrlModal({ repo, terminalWidth, onClose, onCopy }) {
1248
+ const [copyError, setCopyError] = useState11(null);
1249
+ const [selectedType, setSelectedType] = useState11("SSH");
1250
+ const urlTypes = ["SSH", "HTTPS"];
1251
+ useInput11((input, key) => {
1252
+ if (!repo) return;
1253
+ const ch = input?.toLowerCase();
1254
+ if (key.escape || ch === "c" || ch === "q") {
1255
+ onClose();
1256
+ return;
1257
+ }
1258
+ if (key.leftArrow || key.rightArrow) {
1259
+ const currentIndex = urlTypes.indexOf(selectedType);
1260
+ let newIndex;
1261
+ if (key.leftArrow) {
1262
+ newIndex = currentIndex === 0 ? urlTypes.length - 1 : currentIndex - 1;
1263
+ } else {
1264
+ newIndex = currentIndex === urlTypes.length - 1 ? 0 : currentIndex + 1;
1265
+ }
1266
+ setSelectedType(urlTypes[newIndex]);
1267
+ return;
1268
+ }
1269
+ if (key.upArrow) {
1270
+ setSelectedType("SSH");
1271
+ return;
1272
+ }
1273
+ if (key.downArrow) {
1274
+ setSelectedType("HTTPS");
1275
+ return;
1276
+ }
1277
+ if (key.return || ch === "y") {
1278
+ const sshUrl2 = `git@github.com:${repo.nameWithOwner}.git`;
1279
+ const httpsUrl2 = `https://github.com/${repo.nameWithOwner}.git`;
1280
+ const urlToCopy = selectedType === "SSH" ? sshUrl2 : httpsUrl2;
1281
+ handleCopy(urlToCopy, selectedType);
1282
+ return;
1283
+ }
1284
+ if (ch === "s") {
1285
+ const sshUrl2 = `git@github.com:${repo.nameWithOwner}.git`;
1286
+ handleCopy(sshUrl2, "SSH");
1287
+ return;
1288
+ }
1289
+ if (ch === "h") {
1290
+ const httpsUrl2 = `https://github.com/${repo.nameWithOwner}.git`;
1291
+ handleCopy(httpsUrl2, "HTTPS");
1292
+ return;
1293
+ }
1294
+ });
1295
+ if (!repo) {
1296
+ return /* @__PURE__ */ jsx12(Text12, { color: "red", children: "No repository selected." });
1297
+ }
1298
+ const sshUrl = `git@github.com:${repo.nameWithOwner}.git`;
1299
+ const httpsUrl = `https://github.com/${repo.nameWithOwner}.git`;
1300
+ const handleCopy = async (url, type) => {
1301
+ try {
1302
+ setCopyError(null);
1303
+ await onCopy(url, type);
1304
+ onClose();
1305
+ } catch (error) {
1306
+ const message = error instanceof Error ? error.message : String(error) || "Unknown error";
1307
+ setCopyError(`Failed to copy ${type} URL: ${message}`);
1308
+ }
1309
+ };
1310
+ return /* @__PURE__ */ jsxs11(
1311
+ Box11,
1312
+ {
1313
+ flexDirection: "column",
1314
+ borderStyle: "round",
1315
+ borderColor: "blue",
1316
+ paddingX: 3,
1317
+ paddingY: 2,
1318
+ width: Math.min(terminalWidth - 8, 80),
1319
+ children: [
1320
+ /* @__PURE__ */ jsx12(Text12, { bold: true, color: "blue", children: "Copy Repository URL" }),
1321
+ /* @__PURE__ */ jsx12(Box11, { height: 1, children: /* @__PURE__ */ jsx12(Text12, { children: " " }) }),
1322
+ /* @__PURE__ */ jsx12(Text12, { children: chalk10.bold(repo.nameWithOwner) }),
1323
+ /* @__PURE__ */ jsx12(Box11, { height: 1, children: /* @__PURE__ */ jsx12(Text12, { children: " " }) }),
1324
+ /* @__PURE__ */ jsx12(Text12, { color: "gray", children: "SSH URL:" }),
1325
+ /* @__PURE__ */ jsx12(
1326
+ Box11,
1327
+ {
1328
+ paddingX: 2,
1329
+ paddingY: 1,
1330
+ borderStyle: "single",
1331
+ borderColor: selectedType === "SSH" ? "blue" : "gray",
1332
+ children: /* @__PURE__ */ jsxs11(Text12, { color: selectedType === "SSH" ? "blue" : void 0, children: [
1333
+ selectedType === "SSH" ? "\u25B6 " : " ",
1334
+ sshUrl
1335
+ ] })
1336
+ }
1337
+ ),
1338
+ /* @__PURE__ */ jsx12(Box11, { height: 1, children: /* @__PURE__ */ jsx12(Text12, { children: " " }) }),
1339
+ /* @__PURE__ */ jsx12(Text12, { color: "gray", children: "HTTPS URL:" }),
1340
+ /* @__PURE__ */ jsx12(
1341
+ Box11,
1342
+ {
1343
+ paddingX: 2,
1344
+ paddingY: 1,
1345
+ borderStyle: "single",
1346
+ borderColor: selectedType === "HTTPS" ? "blue" : "gray",
1347
+ children: /* @__PURE__ */ jsxs11(Text12, { color: selectedType === "HTTPS" ? "blue" : void 0, children: [
1348
+ selectedType === "HTTPS" ? "\u25B6 " : " ",
1349
+ httpsUrl
1350
+ ] })
1351
+ }
1352
+ ),
1353
+ /* @__PURE__ */ jsx12(Box11, { height: 1, children: /* @__PURE__ */ jsx12(Text12, { children: " " }) }),
1354
+ /* @__PURE__ */ jsxs11(Text12, { color: "gray", children: [
1355
+ "\u2191\u2193 Select \u2022 Enter/Y to copy ",
1356
+ selectedType,
1357
+ " \u2022 S copy SSH \u2022 H copy HTTPS \u2022 Esc/Q/C to close"
1358
+ ] }),
1359
+ copyError && /* @__PURE__ */ jsxs11(Fragment6, { children: [
1360
+ /* @__PURE__ */ jsx12(Box11, { height: 1, children: /* @__PURE__ */ jsx12(Text12, { children: " " }) }),
1361
+ /* @__PURE__ */ jsx12(Text12, { color: "red", children: copyError })
1362
+ ] })
1363
+ ]
1364
+ }
1365
+ );
1366
+ }
1367
+
1368
+ // src/ui/components/repo/RepoRow.tsx
1369
+ import { Box as Box12, Text as Text13 } from "ink";
1370
+ import chalk11 from "chalk";
1371
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1106
1372
  function RepoRow({
1107
1373
  repo,
1108
1374
  selected,
@@ -1118,50 +1384,50 @@ function RepoRow({
1118
1384
  const commitsBehind = hasCommitData ? repo.parent.defaultBranchRef.target.history.totalCount - repo.defaultBranchRef.target.history.totalCount : 0;
1119
1385
  const showCommitsBehind = forkTracking && hasCommitData;
1120
1386
  let line1 = "";
1121
- const numColor = selected ? chalk10.cyan : chalk10.gray;
1122
- const nameColor = selected ? chalk10.cyan.bold : chalk10.white;
1387
+ const numColor = selected ? chalk11.cyan : chalk11.gray;
1388
+ const nameColor = selected ? chalk11.cyan.bold : chalk11.white;
1123
1389
  line1 += numColor(`${String(index).padStart(3, " ")}.`);
1124
1390
  line1 += nameColor(` ${repo.nameWithOwner}`);
1125
1391
  if (repo.visibility === "INTERNAL") {
1126
- line1 += chalk10.magenta(" Internal");
1392
+ line1 += chalk11.magenta(" Internal");
1127
1393
  } else if (repo.visibility === "PRIVATE" || repo.isPrivate && !repo.visibility) {
1128
- line1 += chalk10.yellow(" Private");
1394
+ line1 += chalk11.yellow(" Private");
1129
1395
  }
1130
- if (repo.isArchived) line1 += " " + chalk10.bgGray.whiteBright(" Archived ") + " ";
1396
+ if (repo.isArchived) line1 += " " + chalk11.bgGray.whiteBright(" Archived ") + " ";
1131
1397
  if (repo.isFork && repo.parent) {
1132
- line1 += chalk10.blue(` Fork of ${repo.parent.nameWithOwner}`);
1398
+ line1 += chalk11.blue(` Fork of ${repo.parent.nameWithOwner}`);
1133
1399
  if (showCommitsBehind) {
1134
1400
  if (commitsBehind > 0) {
1135
- line1 += chalk10.yellow(` (${commitsBehind} behind)`);
1401
+ line1 += chalk11.yellow(` (${commitsBehind} behind)`);
1136
1402
  } else {
1137
- line1 += chalk10.green(` (0 behind)`);
1403
+ line1 += chalk11.green(` (0 behind)`);
1138
1404
  }
1139
1405
  }
1140
1406
  }
1141
1407
  let line2 = " ";
1142
- const metaColor = selected ? chalk10.white : chalk10.gray;
1143
- if (langName) line2 += chalk10.hex(langColor)("\u25CF ") + metaColor(`${langName} `);
1408
+ const metaColor = selected ? chalk11.white : chalk11.gray;
1409
+ if (langName) line2 += chalk11.hex(langColor)("\u25CF ") + metaColor(`${langName} `);
1144
1410
  line2 += metaColor(`\u2605 ${repo.stargazerCount} \u2442 ${repo.forkCount} Updated ${formatDate(repo.updatedAt)}`);
1145
1411
  const line3 = repo.description ? ` ${truncate(repo.description, Math.max(30, maxWidth - 10))}` : null;
1146
1412
  let fullText = line1 + "\n" + line2;
1147
1413
  if (line3) fullText += "\n" + metaColor(line3);
1148
1414
  const spacingAbove = Math.floor(spacingLines / 2);
1149
1415
  const spacingBelow = spacingLines - spacingAbove;
1150
- return /* @__PURE__ */ jsxs10(Box10, { flexDirection: "column", backgroundColor: selected ? "gray" : void 0, children: [
1151
- spacingAbove > 0 && /* @__PURE__ */ jsx11(Box10, { height: spacingAbove, children: /* @__PURE__ */ jsx11(Text11, { children: " " }) }),
1152
- /* @__PURE__ */ jsx11(Text11, { children: dim ? chalk10.dim(fullText) : fullText }),
1153
- spacingBelow > 0 && /* @__PURE__ */ jsx11(Box10, { height: spacingBelow, children: /* @__PURE__ */ jsx11(Text11, { children: " " }) })
1416
+ return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", backgroundColor: selected ? "gray" : void 0, children: [
1417
+ spacingAbove > 0 && /* @__PURE__ */ jsx13(Box12, { height: spacingAbove, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
1418
+ /* @__PURE__ */ jsx13(Text13, { children: dim ? chalk11.dim(fullText) : fullText }),
1419
+ spacingBelow > 0 && /* @__PURE__ */ jsx13(Box12, { height: spacingBelow, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) })
1154
1420
  ] });
1155
1421
  }
1156
1422
 
1157
1423
  // src/ui/components/repo/FilterInput.tsx
1158
- import { Box as Box11, Text as Text12 } from "ink";
1159
- import TextInput3 from "ink-text-input";
1160
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
1424
+ import { Box as Box13, Text as Text14 } from "ink";
1425
+ import TextInput4 from "ink-text-input";
1426
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1161
1427
 
1162
1428
  // src/ui/components/repo/RepoListHeader.tsx
1163
- import { Box as Box12, Text as Text13 } from "ink";
1164
- import { Fragment as Fragment5, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
1429
+ import { Box as Box14, Text as Text15 } from "ink";
1430
+ import { Fragment as Fragment7, jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
1165
1431
  function RepoListHeader({
1166
1432
  ownerContext,
1167
1433
  sortKey,
@@ -1175,35 +1441,35 @@ function RepoListHeader({
1175
1441
  }) {
1176
1442
  const contextLabel = ownerContext === "personal" ? "Personal Account" : ownerContext?.type === "organization" ? `Organization: ${ownerContext.name ?? ownerContext.login}` : "";
1177
1443
  const visibilityLabel = visibilityFilter === "public" ? "Public" : visibilityFilter === "private" ? isEnterprise ? "Private/Internal" : "Private" : visibilityFilter === "internal" ? "Internal" : "";
1178
- return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", gap: 2, marginBottom: 1, children: [
1179
- contextLabel && /* @__PURE__ */ jsx13(Text13, { children: contextLabel }),
1180
- /* @__PURE__ */ jsxs12(Text13, { color: "gray", dimColor: true, children: [
1444
+ return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "row", gap: 2, marginBottom: 1, children: [
1445
+ contextLabel && /* @__PURE__ */ jsx15(Text15, { children: contextLabel }),
1446
+ /* @__PURE__ */ jsxs14(Text15, { color: "gray", dimColor: true, children: [
1181
1447
  "Sort: ",
1182
1448
  sortKey,
1183
1449
  " ",
1184
1450
  sortDir === "asc" ? "\u2191" : "\u2193"
1185
1451
  ] }),
1186
- /* @__PURE__ */ jsxs12(Text13, { color: "gray", dimColor: true, children: [
1452
+ /* @__PURE__ */ jsxs14(Text15, { color: "gray", dimColor: true, children: [
1187
1453
  "Fork Status - Commits Behind: ",
1188
1454
  forkTracking ? "ON" : "OFF"
1189
1455
  ] }),
1190
- !!visibilityLabel && /* @__PURE__ */ jsxs12(Text13, { color: "yellow", children: [
1456
+ !!visibilityLabel && /* @__PURE__ */ jsxs14(Text15, { color: "yellow", children: [
1191
1457
  "Visibility: ",
1192
1458
  visibilityLabel
1193
1459
  ] }),
1194
- filter && !searchActive && /* @__PURE__ */ jsxs12(Text13, { color: "cyan", children: [
1460
+ filter && !searchActive && /* @__PURE__ */ jsxs14(Text15, { color: "cyan", children: [
1195
1461
  'Filter: "',
1196
1462
  filter,
1197
1463
  '"'
1198
1464
  ] }),
1199
- searchActive && /* @__PURE__ */ jsxs12(Fragment5, { children: [
1200
- /* @__PURE__ */ jsxs12(Text13, { color: "cyan", children: [
1465
+ searchActive && /* @__PURE__ */ jsxs14(Fragment7, { children: [
1466
+ /* @__PURE__ */ jsxs14(Text15, { color: "cyan", children: [
1201
1467
  'Search: "',
1202
1468
  filter.trim(),
1203
1469
  '"'
1204
1470
  ] }),
1205
- searchLoading && /* @__PURE__ */ jsx13(Box12, { marginLeft: 1, children: /* @__PURE__ */ jsxs12(Text13, { color: "cyan", children: [
1206
- /* @__PURE__ */ jsx13(SlowSpinner, {}),
1471
+ searchLoading && /* @__PURE__ */ jsx15(Box14, { marginLeft: 1, children: /* @__PURE__ */ jsxs14(Text15, { color: "cyan", children: [
1472
+ /* @__PURE__ */ jsx15(SlowSpinner, {}),
1207
1473
  " Searching\u2026"
1208
1474
  ] }) })
1209
1475
  ] })
@@ -1211,7 +1477,7 @@ function RepoListHeader({
1211
1477
  }
1212
1478
 
1213
1479
  // src/ui/RepoList.tsx
1214
- import { Fragment as Fragment6, jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
1480
+ import { Fragment as Fragment8, jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
1215
1481
  var getPageSize = () => {
1216
1482
  const envValue = process.env.REPOS_PER_FETCH;
1217
1483
  if (envValue) {
@@ -1227,17 +1493,17 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1227
1493
  const { exit } = useApp();
1228
1494
  const { stdout } = useStdout();
1229
1495
  const client = useMemo(() => makeClient(token), [token]);
1230
- const [debugMessages, setDebugMessages] = useState10([]);
1496
+ const [debugMessages, setDebugMessages] = useState12([]);
1231
1497
  const addDebugMessage = useCallback((msg) => {
1232
1498
  if (process.env.GH_MANAGER_DEBUG === "1") {
1233
1499
  setDebugMessages((prev) => [...prev.slice(-9), msg]);
1234
1500
  }
1235
1501
  }, []);
1236
1502
  const handleOrgContextChangeRef = useRef(onOrgContextChange);
1237
- useEffect7(() => {
1503
+ useEffect8(() => {
1238
1504
  handleOrgContextChangeRef.current = onOrgContextChange;
1239
1505
  }, [onOrgContextChange]);
1240
- React10.useEffect(() => {
1506
+ React12.useEffect(() => {
1241
1507
  addDebugMessage(`[RepoList] Component mounted`);
1242
1508
  logger.info("RepoList component mounted", {
1243
1509
  token: token ? "present" : "missing",
@@ -1249,62 +1515,76 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1249
1515
  }, []);
1250
1516
  const terminalWidth = stdout?.columns ?? 80;
1251
1517
  const availableHeight = maxVisibleRows ?? 20;
1252
- const [items, setItems] = useState10([]);
1253
- const [cursor, setCursor] = useState10(0);
1254
- const [endCursor, setEndCursor] = useState10(null);
1255
- const [hasNextPage, setHasNextPage] = useState10(false);
1256
- const [totalCount, setTotalCount] = useState10(0);
1257
- const [loading, setLoading] = useState10(true);
1258
- const [sortingLoading, setSortingLoading] = useState10(false);
1259
- const [refreshing, setRefreshing] = useState10(false);
1260
- const [loadingMore, setLoadingMore] = useState10(false);
1261
- const [error, setError] = useState10(null);
1262
- const [rateLimit, setRateLimit] = useState10(void 0);
1263
- const [prevRateLimit, setPrevRateLimit] = useState10(void 0);
1264
- const [density, setDensity] = useState10(2);
1265
- const [prefsLoaded, setPrefsLoaded] = useState10(false);
1266
- const [ownerContext, setOwnerContext] = useState10("personal");
1267
- const [ownerAffiliations, setOwnerAffiliations] = useState10(["OWNER"]);
1268
- const [orgSwitcherOpen, setOrgSwitcherOpen] = useState10(false);
1269
- const [searchItems, setSearchItems] = useState10([]);
1270
- const [searchEndCursor, setSearchEndCursor] = useState10(null);
1271
- const [searchHasNextPage, setSearchHasNextPage] = useState10(false);
1272
- const [searchTotalCount, setSearchTotalCount] = useState10(0);
1273
- const [searchLoading, setSearchLoading] = useState10(false);
1274
- const [deleteMode, setDeleteMode] = useState10(false);
1275
- const [deleteTarget, setDeleteTarget] = useState10(null);
1276
- const [deleteCode, setDeleteCode] = useState10("");
1277
- const [typedCode, setTypedCode] = useState10("");
1278
- const [deleting, setDeleting] = useState10(false);
1279
- const [deleteError, setDeleteError] = useState10(null);
1280
- const [deleteConfirmStage, setDeleteConfirmStage] = useState10(false);
1281
- const [confirmFocus, setConfirmFocus] = useState10("delete");
1282
- const [archiveMode, setArchiveMode] = useState10(false);
1283
- const [archiveTarget, setArchiveTarget] = useState10(null);
1284
- const [archiving, setArchiving] = useState10(false);
1285
- const [archiveError, setArchiveError] = useState10(null);
1286
- const [archiveFocus, setArchiveFocus] = useState10("confirm");
1287
- const [syncMode, setSyncMode] = useState10(false);
1288
- const [syncTarget, setSyncTarget] = useState10(null);
1289
- const [syncing, setSyncing] = useState10(false);
1290
- const [syncError, setSyncError] = useState10(null);
1291
- const [syncFocus, setSyncFocus] = useState10("confirm");
1292
- const [syncTrigger, setSyncTrigger] = useState10(false);
1293
- const [infoMode, setInfoMode] = useState10(false);
1294
- const [infoRepo, setInfoRepo] = useState10(null);
1295
- const [logoutMode, setLogoutMode] = useState10(false);
1296
- const [logoutFocus, setLogoutFocus] = useState10("confirm");
1297
- const [logoutError, setLogoutError] = useState10(null);
1298
- const [visibilityMode, setVisibilityMode] = useState10(false);
1299
- const [isEnterpriseOrg, setIsEnterpriseOrg] = useState10(false);
1300
- const [hasInternalRepos, setHasInternalRepos] = useState10(false);
1301
- const [changeVisibilityMode, setChangeVisibilityMode] = useState10(false);
1302
- const [changeVisibilityTarget, setChangeVisibilityTarget] = useState10(null);
1303
- const [changingVisibility, setChangingVisibility] = useState10(false);
1304
- const [changeVisibilityError, setChangeVisibilityError] = useState10(null);
1305
- const [sortMode, setSortMode] = useState10(false);
1518
+ const [items, setItems] = useState12([]);
1519
+ const [cursor, setCursor] = useState12(0);
1520
+ const [endCursor, setEndCursor] = useState12(null);
1521
+ const [hasNextPage, setHasNextPage] = useState12(false);
1522
+ const [totalCount, setTotalCount] = useState12(0);
1523
+ const [loading, setLoading] = useState12(true);
1524
+ const [sortingLoading, setSortingLoading] = useState12(false);
1525
+ const [refreshing, setRefreshing] = useState12(false);
1526
+ const [loadingMore, setLoadingMore] = useState12(false);
1527
+ const [error, setError] = useState12(null);
1528
+ const [rateLimit, setRateLimit] = useState12(void 0);
1529
+ const [prevRateLimit, setPrevRateLimit] = useState12(void 0);
1530
+ const [density, setDensity] = useState12(2);
1531
+ const [prefsLoaded, setPrefsLoaded] = useState12(false);
1532
+ const [ownerContext, setOwnerContext] = useState12("personal");
1533
+ const [ownerAffiliations, setOwnerAffiliations] = useState12(["OWNER"]);
1534
+ const [orgSwitcherOpen, setOrgSwitcherOpen] = useState12(false);
1535
+ const [searchItems, setSearchItems] = useState12([]);
1536
+ const [searchEndCursor, setSearchEndCursor] = useState12(null);
1537
+ const [searchHasNextPage, setSearchHasNextPage] = useState12(false);
1538
+ const [searchTotalCount, setSearchTotalCount] = useState12(0);
1539
+ const [searchLoading, setSearchLoading] = useState12(false);
1540
+ const [deleteMode, setDeleteMode] = useState12(false);
1541
+ const [deleteTarget, setDeleteTarget] = useState12(null);
1542
+ const [deleteCode, setDeleteCode] = useState12("");
1543
+ const [typedCode, setTypedCode] = useState12("");
1544
+ const [deleting, setDeleting] = useState12(false);
1545
+ const [deleteError, setDeleteError] = useState12(null);
1546
+ const [deleteConfirmStage, setDeleteConfirmStage] = useState12(false);
1547
+ const [confirmFocus, setConfirmFocus] = useState12("delete");
1548
+ const [archiveMode, setArchiveMode] = useState12(false);
1549
+ const [archiveTarget, setArchiveTarget] = useState12(null);
1550
+ const [archiving, setArchiving] = useState12(false);
1551
+ const [archiveError, setArchiveError] = useState12(null);
1552
+ const [archiveFocus, setArchiveFocus] = useState12("confirm");
1553
+ const [renameMode, setRenameMode] = useState12(false);
1554
+ const [renameTarget, setRenameTarget] = useState12(null);
1555
+ const [syncMode, setSyncMode] = useState12(false);
1556
+ const [syncTarget, setSyncTarget] = useState12(null);
1557
+ const [syncing, setSyncing] = useState12(false);
1558
+ const [syncError, setSyncError] = useState12(null);
1559
+ const [syncFocus, setSyncFocus] = useState12("confirm");
1560
+ const [syncTrigger, setSyncTrigger] = useState12(false);
1561
+ const [infoMode, setInfoMode] = useState12(false);
1562
+ const [infoRepo, setInfoRepo] = useState12(null);
1563
+ const [logoutMode, setLogoutMode] = useState12(false);
1564
+ const [logoutFocus, setLogoutFocus] = useState12("confirm");
1565
+ const [logoutError, setLogoutError] = useState12(null);
1566
+ const [visibilityMode, setVisibilityMode] = useState12(false);
1567
+ const [isEnterpriseOrg, setIsEnterpriseOrg] = useState12(false);
1568
+ const [hasInternalRepos, setHasInternalRepos] = useState12(false);
1569
+ const [changeVisibilityMode, setChangeVisibilityMode] = useState12(false);
1570
+ const [changeVisibilityTarget, setChangeVisibilityTarget] = useState12(null);
1571
+ const [changingVisibility, setChangingVisibility] = useState12(false);
1572
+ const [changeVisibilityError, setChangeVisibilityError] = useState12(null);
1573
+ const [sortMode, setSortMode] = useState12(false);
1574
+ const [copyUrlMode, setCopyUrlMode] = useState12(false);
1575
+ const [copyUrlTarget, setCopyUrlTarget] = useState12(null);
1576
+ const [copyToast, setCopyToast] = useState12(null);
1577
+ const copyToastTimerRef = useRef(null);
1578
+ useEffect8(() => {
1579
+ return () => {
1580
+ if (copyToastTimerRef.current) {
1581
+ clearTimeout(copyToastTimerRef.current);
1582
+ copyToastTimerRef.current = null;
1583
+ }
1584
+ };
1585
+ }, []);
1306
1586
  const appliedInitialOrg = useRef(false);
1307
- useEffect7(() => {
1587
+ useEffect8(() => {
1308
1588
  (async () => {
1309
1589
  if (appliedInitialOrg.current) return;
1310
1590
  if (!initialOrgSlug2) return;
@@ -1339,6 +1619,10 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1339
1619
  setArchiveError(null);
1340
1620
  setArchiveFocus("confirm");
1341
1621
  }
1622
+ function closeRenameModal() {
1623
+ setRenameMode(false);
1624
+ setRenameTarget(null);
1625
+ }
1342
1626
  function closeChangeVisibilityModal() {
1343
1627
  setChangeVisibilityMode(false);
1344
1628
  setChangeVisibilityTarget(null);
@@ -1353,6 +1637,42 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1353
1637
  setSyncFocus("confirm");
1354
1638
  setSyncTrigger(false);
1355
1639
  }
1640
+ function openCopyUrlModal(repo) {
1641
+ setCopyUrlMode(true);
1642
+ setCopyUrlTarget(repo);
1643
+ setCopyToast(null);
1644
+ }
1645
+ function closeCopyUrlModal() {
1646
+ setCopyUrlMode(false);
1647
+ setCopyUrlTarget(null);
1648
+ setCopyToast(null);
1649
+ }
1650
+ async function handleCopyUrl(url, type) {
1651
+ try {
1652
+ if (copyToastTimerRef.current) {
1653
+ clearTimeout(copyToastTimerRef.current);
1654
+ copyToastTimerRef.current = null;
1655
+ }
1656
+ await copyToClipboard(url);
1657
+ setCopyToast(`Copied ${type} URL to clipboard`);
1658
+ copyToastTimerRef.current = setTimeout(() => {
1659
+ setCopyToast(null);
1660
+ copyToastTimerRef.current = null;
1661
+ }, 3e3);
1662
+ } catch (error2) {
1663
+ if (copyToastTimerRef.current) {
1664
+ clearTimeout(copyToastTimerRef.current);
1665
+ copyToastTimerRef.current = null;
1666
+ }
1667
+ const message = error2 instanceof Error ? error2.message : String(error2) || "Unknown error";
1668
+ setCopyToast(`Failed to copy ${type} URL: ${message}`);
1669
+ copyToastTimerRef.current = setTimeout(() => {
1670
+ setCopyToast(null);
1671
+ copyToastTimerRef.current = null;
1672
+ }, 5e3);
1673
+ throw error2;
1674
+ }
1675
+ }
1356
1676
  async function executeSync() {
1357
1677
  if (!syncTarget || syncing) return;
1358
1678
  try {
@@ -1413,6 +1733,22 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1413
1733
  setArchiveError("Failed to update archive state. Check permissions.");
1414
1734
  }
1415
1735
  }
1736
+ async function executeRename(repo, newName) {
1737
+ if (!repo || !newName.trim()) return;
1738
+ try {
1739
+ const id = repo.id;
1740
+ const owner = repo.nameWithOwner.split("/")[0];
1741
+ const newNameWithOwner = `${owner}/${newName}`;
1742
+ await renameRepositoryById(client, id, newName);
1743
+ await updateCacheAfterRename(token, id, newName, newNameWithOwner);
1744
+ const updateRepo = (r) => r.id === id ? { ...r, name: newName, nameWithOwner: newNameWithOwner } : r;
1745
+ setItems((prev) => prev.map(updateRepo));
1746
+ setSearchItems((prev) => prev.map(updateRepo));
1747
+ closeRenameModal();
1748
+ } catch (error2) {
1749
+ throw error2;
1750
+ }
1751
+ }
1416
1752
  async function handleVisibilityChange(newVisibility) {
1417
1753
  if (!changeVisibilityTarget || changingVisibility) return;
1418
1754
  try {
@@ -1506,12 +1842,12 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1506
1842
  setDeleteError("Failed to delete repository. Ensure delete_repo scope and admin permissions.");
1507
1843
  }
1508
1844
  }
1509
- const [filter, setFilter] = useState10("");
1510
- const [filterMode, setFilterMode] = useState10(false);
1511
- const [sortKey, setSortKey] = useState10("updated");
1512
- const [sortDir, setSortDir] = useState10("desc");
1513
- const [forkTracking, setForkTracking] = useState10(true);
1514
- const [visibilityFilter, setVisibilityFilter] = useState10("all");
1845
+ const [filter, setFilter] = useState12("");
1846
+ const [filterMode, setFilterMode] = useState12(false);
1847
+ const [sortKey, setSortKey] = useState12("updated");
1848
+ const [sortDir, setSortDir] = useState12("desc");
1849
+ const [forkTracking, setForkTracking] = useState12(true);
1850
+ const [visibilityFilter, setVisibilityFilter] = useState12("all");
1515
1851
  const previousVisibilityFilter = useRef("all");
1516
1852
  const sortFieldMap = {
1517
1853
  "updated": "UPDATED_AT",
@@ -1664,7 +2000,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1664
2000
  setSearchLoading(false);
1665
2001
  }
1666
2002
  };
1667
- useEffect7(() => {
2003
+ useEffect8(() => {
1668
2004
  const ui = getUIPrefs();
1669
2005
  if (ui.density !== void 0) setDensity(ui.density);
1670
2006
  if (ui.sortKey && ["updated", "pushed", "name", "stars"].includes(ui.sortKey)) {
@@ -1695,7 +2031,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1695
2031
  }
1696
2032
  setPrefsLoaded(true);
1697
2033
  }, [onOrgContextChange]);
1698
- useEffect7(() => {
2034
+ useEffect8(() => {
1699
2035
  if (!prefsLoaded) return;
1700
2036
  let policy = "cache-first";
1701
2037
  const orgLogin = ownerContext !== "personal" ? ownerContext.login : void 0;
@@ -1715,7 +2051,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1715
2051
  setCursor(0);
1716
2052
  fetchPage(null, true, false, void 0, policy);
1717
2053
  }, [client, prefsLoaded, ownerContext, ownerAffiliations]);
1718
- useEffect7(() => {
2054
+ useEffect8(() => {
1719
2055
  if (!searchActive) {
1720
2056
  if (items.length > 0) {
1721
2057
  let policy = "cache-first";
@@ -1754,7 +2090,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1754
2090
  }
1755
2091
  }
1756
2092
  }, [sortKey, sortDir]);
1757
- useEffect7(() => {
2093
+ useEffect8(() => {
1758
2094
  if (visibilityFilter !== "all" || previousVisibilityFilter.current && previousVisibilityFilter.current !== visibilityFilter) {
1759
2095
  if (!searchActive) {
1760
2096
  if (items.length > 0) {
@@ -1771,7 +2107,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1771
2107
  }
1772
2108
  previousVisibilityFilter.current = visibilityFilter;
1773
2109
  }, [visibilityFilter]);
1774
- useEffect7(() => {
2110
+ useEffect8(() => {
1775
2111
  if (viewerLogin && searchActive && !searchLoading && searchItems.length === 0) {
1776
2112
  let policy = "cache-first";
1777
2113
  try {
@@ -1792,7 +2128,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1792
2128
  fetchSearchPage(null, true, policy);
1793
2129
  }
1794
2130
  }, [viewerLogin]);
1795
- useInput10((input, key) => {
2131
+ useInput12((input, key) => {
1796
2132
  if (error) {
1797
2133
  if (input && input.toUpperCase() === "Q") {
1798
2134
  try {
@@ -1804,7 +2140,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1804
2140
  exit();
1805
2141
  return;
1806
2142
  }
1807
- if (input && input.toUpperCase() === "R") {
2143
+ if (input && input.toUpperCase() === "R" && !key.ctrl) {
1808
2144
  setCursor(0);
1809
2145
  setRefreshing(true);
1810
2146
  setSortingLoading(true);
@@ -1854,6 +2190,9 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1854
2190
  }
1855
2191
  return;
1856
2192
  }
2193
+ if (renameMode) {
2194
+ return;
2195
+ }
1857
2196
  if (archiveMode) {
1858
2197
  if (key.escape || input && input.toUpperCase() === "C") {
1859
2198
  closeArchiveModal();
@@ -1946,6 +2285,9 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
1946
2285
  if (sortMode) {
1947
2286
  return;
1948
2287
  }
2288
+ if (copyUrlMode) {
2289
+ return;
2290
+ }
1949
2291
  if (filterMode) {
1950
2292
  if (key.escape) {
1951
2293
  setFilterMode(false);
@@ -2017,7 +2359,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2017
2359
  setCursor(visibleItems.length - 1);
2018
2360
  return;
2019
2361
  }
2020
- if (input && input.toUpperCase() === "R") {
2362
+ if (input && input.toUpperCase() === "R" && !key.ctrl) {
2021
2363
  setCursor(0);
2022
2364
  setRefreshing(true);
2023
2365
  setSortingLoading(true);
@@ -2045,6 +2387,14 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2045
2387
  }
2046
2388
  return;
2047
2389
  }
2390
+ if (key.ctrl && (input === "r" || input === "R")) {
2391
+ const repo = visibleItems[cursor];
2392
+ if (repo) {
2393
+ setRenameTarget(repo);
2394
+ setRenameMode(true);
2395
+ }
2396
+ return;
2397
+ }
2048
2398
  if (key.ctrl && (input === "v" || input === "V")) {
2049
2399
  const repo = visibleItems[cursor];
2050
2400
  if (repo) {
@@ -2102,6 +2452,13 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2102
2452
  setInfoMode(true);
2103
2453
  return;
2104
2454
  }
2455
+ if (input && input.toUpperCase() === "C") {
2456
+ const repo = visibleItems[cursor];
2457
+ if (repo) {
2458
+ openCopyUrlModal(repo);
2459
+ }
2460
+ return;
2461
+ }
2105
2462
  if (input && input.toUpperCase() === "W") {
2106
2463
  setOrgSwitcherOpen(true);
2107
2464
  return;
@@ -2196,12 +2553,12 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2196
2553
  return result;
2197
2554
  }, [searchItems, visibilityFilter]);
2198
2555
  const visibleItems = searchActive ? filteredSearchItems : filteredAndSorted;
2199
- useEffect7(() => {
2556
+ useEffect8(() => {
2200
2557
  if (searchActive) {
2201
2558
  addDebugMessage(`[State] searchActive=${searchActive}, searchItems=${searchItems.length}, visibleItems=${visibleItems.length}, filter="${filter}"`);
2202
2559
  }
2203
2560
  }, [searchActive, searchItems.length, visibleItems.length, filter]);
2204
- useEffect7(() => {
2561
+ useEffect8(() => {
2205
2562
  setCursor((c) => Math.min(c, Math.max(0, (searchActive ? searchItems.length : items.length) - 1)));
2206
2563
  }, [searchActive, searchItems.length, items.length]);
2207
2564
  const headerHeight = 2;
@@ -2222,7 +2579,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2222
2579
  const end = Math.min(total, start + visibleRepos + buffer);
2223
2580
  return { start, end };
2224
2581
  }, [visibleItems.length, cursor, listHeight, spacingLines]);
2225
- useEffect7(() => {
2582
+ useEffect8(() => {
2226
2583
  const prefetchThreshold = Math.floor(visibleItems.length * 0.8);
2227
2584
  const nearEnd = visibleItems.length > 0 && cursor >= prefetchThreshold;
2228
2585
  if (searchActive) {
@@ -2243,95 +2600,95 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2243
2600
  exec(cmd);
2244
2601
  }
2245
2602
  const lowRate = rateLimit && rateLimit.remaining <= Math.ceil(rateLimit.limit * 0.1);
2246
- const modalOpen = deleteMode || archiveMode || syncMode || logoutMode || infoMode || visibilityMode;
2247
- const headerBar = useMemo(() => /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: [
2248
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", gap: 1, children: [
2249
- /* @__PURE__ */ jsxs13(Text14, { color: "cyan", bold: !modalOpen, dimColor: modalOpen, children: [
2603
+ const modalOpen = deleteMode || archiveMode || syncMode || logoutMode || infoMode || visibilityMode || renameMode || sortMode || changeVisibilityMode || copyUrlMode;
2604
+ const headerBar = useMemo(() => /* @__PURE__ */ jsxs15(Box15, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: [
2605
+ /* @__PURE__ */ jsxs15(Box15, { flexDirection: "row", gap: 1, children: [
2606
+ /* @__PURE__ */ jsxs15(Text16, { color: "cyan", bold: !modalOpen, dimColor: modalOpen, children: [
2250
2607
  " ",
2251
2608
  ownerContext === "personal" ? "Personal" : ownerContext.name || ownerContext.login,
2252
2609
  ownerContext !== "personal" && isEnterpriseOrg && " (ENT)"
2253
2610
  ] }),
2254
- /* @__PURE__ */ jsx14(Text14, { bold: true, color: modalOpen ? "gray" : void 0, dimColor: modalOpen ? true : void 0, children: "Repositories" }),
2255
- /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2611
+ /* @__PURE__ */ jsx16(Text16, { bold: true, color: modalOpen ? "gray" : void 0, dimColor: modalOpen ? true : void 0, children: "Repositories" }),
2612
+ /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2256
2613
  "(",
2257
2614
  visibleItems.length,
2258
2615
  "/",
2259
2616
  searchActive ? searchTotalCount : totalCount,
2260
2617
  ")"
2261
2618
  ] }),
2262
- (loading || searchLoading) && /* @__PURE__ */ jsx14(Box13, { width: 2, flexShrink: 0, flexGrow: 0, marginLeft: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "yellow", children: /* @__PURE__ */ jsx14(SlowSpinner, {}) }) })
2619
+ (loading || searchLoading) && /* @__PURE__ */ jsx16(Box15, { width: 2, flexShrink: 0, flexGrow: 0, marginLeft: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "yellow", children: /* @__PURE__ */ jsx16(SlowSpinner, {}) }) })
2263
2620
  ] }),
2264
- rateLimit && /* @__PURE__ */ jsxs13(Text14, { color: lowRate ? "yellow" : "gray", children: [
2621
+ rateLimit && /* @__PURE__ */ jsxs15(Text16, { color: lowRate ? "yellow" : "gray", children: [
2265
2622
  "API: ",
2266
2623
  rateLimit.remaining,
2267
2624
  "/",
2268
2625
  rateLimit.limit,
2269
- prevRateLimit !== void 0 && prevRateLimit !== rateLimit.remaining && /* @__PURE__ */ jsx14(Text14, { color: rateLimit.remaining < prevRateLimit ? "red" : "green", children: ` (${rateLimit.remaining - prevRateLimit > 0 ? "+" : ""}${rateLimit.remaining - prevRateLimit})` }),
2626
+ prevRateLimit !== void 0 && prevRateLimit !== rateLimit.remaining && /* @__PURE__ */ jsx16(Text16, { color: rateLimit.remaining < prevRateLimit ? "red" : "green", children: ` (${rateLimit.remaining - prevRateLimit > 0 ? "+" : ""}${rateLimit.remaining - prevRateLimit})` }),
2270
2627
  " "
2271
2628
  ] })
2272
2629
  ] }), [visibleItems.length, searchActive, searchTotalCount, totalCount, loading, searchLoading, rateLimit, lowRate, modalOpen, prevRateLimit, ownerContext, isEnterpriseOrg]);
2273
2630
  if (error) {
2274
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: availableHeight, children: [
2275
- /* @__PURE__ */ jsx14(Box13, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", gap: 1, children: [
2276
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: " Repositories" }),
2277
- /* @__PURE__ */ jsx14(Text14, { color: "red", children: "(Error)" })
2631
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", height: availableHeight, children: [
2632
+ /* @__PURE__ */ jsx16(Box15, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "row", gap: 1, children: [
2633
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: " Repositories" }),
2634
+ /* @__PURE__ */ jsx16(Text16, { color: "red", children: "(Error)" })
2278
2635
  ] }) }),
2279
- /* @__PURE__ */ jsx14(Box13, { borderStyle: "single", borderColor: "red", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx14(Box13, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", alignItems: "center", children: [
2280
- /* @__PURE__ */ jsx14(Text14, { color: "red", children: error }),
2281
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, children: "Press R to retry \u2022 Ctrl+L to logout \u2022 Q to quit" }) })
2636
+ /* @__PURE__ */ jsx16(Box15, { borderStyle: "single", borderColor: "red", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx16(Box15, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", alignItems: "center", children: [
2637
+ /* @__PURE__ */ jsx16(Text16, { color: "red", children: error }),
2638
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: true, children: "Press R to retry \u2022 Ctrl+L to logout \u2022 Q to quit" }) })
2282
2639
  ] }) }) }),
2283
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", children: "Press R to retry \u2022 Ctrl+L to logout \u2022 Q to quit" }) })
2640
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "Press R to retry \u2022 Ctrl+L to logout \u2022 Q to quit" }) })
2284
2641
  ] });
2285
2642
  }
2286
2643
  if (loading && items.length === 0 || sortingLoading) {
2287
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: availableHeight, children: [
2288
- /* @__PURE__ */ jsx14(Box13, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", gap: 1, children: [
2289
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: " Repositories" }),
2290
- /* @__PURE__ */ jsx14(Text14, { color: "gray", children: "(Loading...)" })
2644
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", height: availableHeight, children: [
2645
+ /* @__PURE__ */ jsx16(Box15, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "row", gap: 1, children: [
2646
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: " Repositories" }),
2647
+ /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "(Loading...)" })
2291
2648
  ] }) }),
2292
- /* @__PURE__ */ jsx14(Box13, { borderStyle: "single", borderColor: "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx14(Box13, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx14(Box13, { flexDirection: "column", alignItems: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", alignItems: "center", children: [
2293
- /* @__PURE__ */ jsxs13(Box13, { height: 1, flexDirection: "row", children: [
2294
- /* @__PURE__ */ jsx14(Box13, { width: 2, flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx14(Text14, { color: "cyan", children: /* @__PURE__ */ jsx14(SlowSpinner, {}) }) }),
2295
- /* @__PURE__ */ jsx14(Text14, { color: "cyan", children: refreshing ? "Refreshing..." : sortingLoading ? "Applying sort..." : "Loading repositories..." })
2649
+ /* @__PURE__ */ jsx16(Box15, { borderStyle: "single", borderColor: "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx16(Box15, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx16(Box15, { flexDirection: "column", alignItems: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", alignItems: "center", children: [
2650
+ /* @__PURE__ */ jsxs15(Box15, { height: 1, flexDirection: "row", children: [
2651
+ /* @__PURE__ */ jsx16(Box15, { width: 2, flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx16(Text16, { color: "cyan", children: /* @__PURE__ */ jsx16(SlowSpinner, {}) }) }),
2652
+ /* @__PURE__ */ jsx16(Text16, { color: "cyan", children: refreshing ? "Refreshing..." : sortingLoading ? "Applying sort..." : "Loading repositories..." })
2296
2653
  ] }),
2297
- /* @__PURE__ */ jsx14(Box13, { height: 1, marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", children: refreshing ? "Fetching latest repository data" : sortingLoading ? `Sorting by ${sortKey} (${sortDir === "asc" ? "ascending" : "descending"})` : "Fetching your GitHub repositories" }) })
2654
+ /* @__PURE__ */ jsx16(Box15, { height: 1, marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", children: refreshing ? "Fetching latest repository data" : sortingLoading ? `Sorting by ${sortKey} (${sortDir === "asc" ? "ascending" : "descending"})` : "Fetching your GitHub repositories" }) })
2298
2655
  ] }) }) }) }),
2299
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", children: "Please wait..." }) })
2656
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "Please wait..." }) })
2300
2657
  ] });
2301
2658
  }
2302
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: availableHeight, children: [
2659
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", height: availableHeight, children: [
2303
2660
  headerBar,
2304
- /* @__PURE__ */ jsx14(Box13, { borderStyle: "single", borderColor: modalOpen ? "gray" : "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: deleteMode && deleteTarget ? (
2661
+ /* @__PURE__ */ jsx16(Box15, { borderStyle: "single", borderColor: modalOpen ? "gray" : "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: deleteMode && deleteTarget ? (
2305
2662
  // Centered modal; hide list content while modal is open
2306
- /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2307
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: "Delete Confirmation" }),
2308
- /* @__PURE__ */ jsx14(Text14, { color: "red", children: "\u26A0\uFE0F Delete repository?" }),
2309
- /* @__PURE__ */ jsx14(Box13, { height: 2, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2663
+ /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2664
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: "Delete Confirmation" }),
2665
+ /* @__PURE__ */ jsx16(Text16, { color: "red", children: "\u26A0\uFE0F Delete repository?" }),
2666
+ /* @__PURE__ */ jsx16(Box15, { height: 2, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2310
2667
  (() => {
2311
2668
  const langName = deleteTarget.primaryLanguage?.name || "";
2312
2669
  const langColor = deleteTarget.primaryLanguage?.color || "#666666";
2313
2670
  let line1 = "";
2314
- line1 += chalk11.white(deleteTarget.nameWithOwner);
2315
- if (deleteTarget.isPrivate) line1 += chalk11.yellow(" Private");
2316
- if (deleteTarget.isArchived) line1 += chalk11.gray.dim(" Archived");
2317
- if (deleteTarget.isFork && deleteTarget.parent) line1 += chalk11.blue(` Fork of ${deleteTarget.parent.nameWithOwner}`);
2671
+ line1 += chalk12.white(deleteTarget.nameWithOwner);
2672
+ if (deleteTarget.isPrivate) line1 += chalk12.yellow(" Private");
2673
+ if (deleteTarget.isArchived) line1 += chalk12.gray.dim(" Archived");
2674
+ if (deleteTarget.isFork && deleteTarget.parent) line1 += chalk12.blue(` Fork of ${deleteTarget.parent.nameWithOwner}`);
2318
2675
  let line2 = "";
2319
- if (langName) line2 += chalk11.hex(langColor)("\u25CF ") + chalk11.gray(`${langName} `);
2320
- line2 += chalk11.gray(`\u2605 ${deleteTarget.stargazerCount} \u2442 ${deleteTarget.forkCount} Updated ${formatDate(deleteTarget.updatedAt)}`);
2321
- return /* @__PURE__ */ jsxs13(Fragment6, { children: [
2322
- /* @__PURE__ */ jsx14(Text14, { children: line1 }),
2323
- /* @__PURE__ */ jsx14(Text14, { children: line2 })
2676
+ if (langName) line2 += chalk12.hex(langColor)("\u25CF ") + chalk12.gray(`${langName} `);
2677
+ line2 += chalk12.gray(`\u2605 ${deleteTarget.stargazerCount} \u2442 ${deleteTarget.forkCount} Updated ${formatDate(deleteTarget.updatedAt)}`);
2678
+ return /* @__PURE__ */ jsxs15(Fragment8, { children: [
2679
+ /* @__PURE__ */ jsx16(Text16, { children: line1 }),
2680
+ /* @__PURE__ */ jsx16(Text16, { children: line2 })
2324
2681
  ] });
2325
2682
  })(),
2326
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsxs13(Text14, { children: [
2683
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsxs15(Text16, { children: [
2327
2684
  "Type ",
2328
- /* @__PURE__ */ jsx14(Text14, { color: "yellow", bold: true, children: deleteCode }),
2685
+ /* @__PURE__ */ jsx16(Text16, { color: "yellow", bold: true, children: deleteCode }),
2329
2686
  " to confirm."
2330
2687
  ] }) }),
2331
- !deleteConfirmStage && /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, children: [
2332
- /* @__PURE__ */ jsx14(Text14, { children: "Confirm code: " }),
2333
- /* @__PURE__ */ jsx14(
2334
- TextInput4,
2688
+ !deleteConfirmStage && /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, children: [
2689
+ /* @__PURE__ */ jsx16(Text16, { children: "Confirm code: " }),
2690
+ /* @__PURE__ */ jsx16(
2691
+ TextInput5,
2335
2692
  {
2336
2693
  value: typedCode,
2337
2694
  onChange: (v) => {
@@ -2357,11 +2714,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2357
2714
  }
2358
2715
  )
2359
2716
  ] }),
2360
- deleteConfirmStage && /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, flexDirection: "column", children: [
2361
- /* @__PURE__ */ jsx14(Text14, { color: "red", children: "This action will permanently delete the repository. This cannot be undone." }),
2362
- /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2363
- /* @__PURE__ */ jsx14(
2364
- Box13,
2717
+ deleteConfirmStage && /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, flexDirection: "column", children: [
2718
+ /* @__PURE__ */ jsx16(Text16, { color: "red", children: "This action will permanently delete the repository. This cannot be undone." }),
2719
+ /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2720
+ /* @__PURE__ */ jsx16(
2721
+ Box15,
2365
2722
  {
2366
2723
  borderStyle: "round",
2367
2724
  borderColor: "red",
@@ -2370,11 +2727,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2370
2727
  alignItems: "center",
2371
2728
  justifyContent: "center",
2372
2729
  flexDirection: "column",
2373
- children: /* @__PURE__ */ jsx14(Text14, { children: confirmFocus === "delete" ? chalk11.bgRed.white.bold(" Delete ") : chalk11.red.bold("Delete") })
2730
+ children: /* @__PURE__ */ jsx16(Text16, { children: confirmFocus === "delete" ? chalk12.bgRed.white.bold(" Delete ") : chalk12.red.bold("Delete") })
2374
2731
  }
2375
2732
  ),
2376
- /* @__PURE__ */ jsx14(
2377
- Box13,
2733
+ /* @__PURE__ */ jsx16(
2734
+ Box15,
2378
2735
  {
2379
2736
  borderStyle: "round",
2380
2737
  borderColor: confirmFocus === "cancel" ? "white" : "gray",
@@ -2383,17 +2740,17 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2383
2740
  alignItems: "center",
2384
2741
  justifyContent: "center",
2385
2742
  flexDirection: "column",
2386
- children: /* @__PURE__ */ jsx14(Text14, { children: confirmFocus === "cancel" ? chalk11.bgGray.white.bold(" Cancel ") : chalk11.gray.bold("Cancel") })
2743
+ children: /* @__PURE__ */ jsx16(Text16, { children: confirmFocus === "cancel" ? chalk12.bgGray.white.bold(" Cancel ") : chalk12.gray.bold("Cancel") })
2387
2744
  }
2388
2745
  )
2389
2746
  ] }),
2390
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2747
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2391
2748
  "Press Enter to ",
2392
2749
  confirmFocus === "delete" ? "Delete" : "Cancel",
2393
2750
  " | Y to Delete | C to Cancel"
2394
2751
  ] }) }),
2395
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(
2396
- TextInput4,
2752
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(
2753
+ TextInput5,
2397
2754
  {
2398
2755
  value: "",
2399
2756
  onChange: () => {
@@ -2406,18 +2763,18 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2406
2763
  }
2407
2764
  ) })
2408
2765
  ] }),
2409
- deleteError && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "magenta", children: deleteError }) }),
2410
- deleting && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "yellow", children: "Deleting..." }) })
2766
+ deleteError && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "magenta", children: deleteError }) }),
2767
+ deleting && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "yellow", children: "Deleting..." }) })
2411
2768
  ] }) })
2412
- ) : archiveMode && archiveTarget ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "round", borderColor: archiveTarget.isArchived ? "green" : "yellow", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2413
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: archiveTarget.isArchived ? "Unarchive Confirmation" : "Archive Confirmation" }),
2414
- /* @__PURE__ */ jsx14(Text14, { color: archiveTarget.isArchived ? "green" : "yellow", children: archiveTarget.isArchived ? "\u21BA Unarchive repository?" : "\u26A0\uFE0F Archive repository?" }),
2415
- /* @__PURE__ */ jsx14(Box13, { height: 1, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2416
- /* @__PURE__ */ jsx14(Text14, { children: archiveTarget.nameWithOwner }),
2417
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { children: archiveTarget.isArchived ? "This will make the repository active again." : "This will make the repository read-only." }) }),
2418
- /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2419
- /* @__PURE__ */ jsx14(
2420
- Box13,
2769
+ ) : archiveMode && archiveTarget ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "round", borderColor: archiveTarget.isArchived ? "green" : "yellow", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2770
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: archiveTarget.isArchived ? "Unarchive Confirmation" : "Archive Confirmation" }),
2771
+ /* @__PURE__ */ jsx16(Text16, { color: archiveTarget.isArchived ? "green" : "yellow", children: archiveTarget.isArchived ? "\u21BA Unarchive repository?" : "\u26A0\uFE0F Archive repository?" }),
2772
+ /* @__PURE__ */ jsx16(Box15, { height: 1, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2773
+ /* @__PURE__ */ jsx16(Text16, { children: archiveTarget.nameWithOwner }),
2774
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { children: archiveTarget.isArchived ? "This will make the repository active again." : "This will make the repository read-only." }) }),
2775
+ /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2776
+ /* @__PURE__ */ jsx16(
2777
+ Box15,
2421
2778
  {
2422
2779
  borderStyle: "round",
2423
2780
  borderColor: archiveTarget.isArchived ? "green" : "yellow",
@@ -2426,11 +2783,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2426
2783
  alignItems: "center",
2427
2784
  justifyContent: "center",
2428
2785
  flexDirection: "column",
2429
- children: /* @__PURE__ */ jsx14(Text14, { children: archiveFocus === "confirm" ? chalk11.bgGreen.white.bold(` ${archiveTarget.isArchived ? "Unarchive" : "Archive"} `) : chalk11.bold[archiveTarget.isArchived ? "green" : "yellow"](archiveTarget.isArchived ? "Unarchive" : "Archive") })
2786
+ children: /* @__PURE__ */ jsx16(Text16, { children: archiveFocus === "confirm" ? chalk12.bgGreen.white.bold(` ${archiveTarget.isArchived ? "Unarchive" : "Archive"} `) : chalk12.bold[archiveTarget.isArchived ? "green" : "yellow"](archiveTarget.isArchived ? "Unarchive" : "Archive") })
2430
2787
  }
2431
2788
  ),
2432
- /* @__PURE__ */ jsx14(
2433
- Box13,
2789
+ /* @__PURE__ */ jsx16(
2790
+ Box15,
2434
2791
  {
2435
2792
  borderStyle: "round",
2436
2793
  borderColor: archiveFocus === "cancel" ? "white" : "gray",
@@ -2439,19 +2796,19 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2439
2796
  alignItems: "center",
2440
2797
  justifyContent: "center",
2441
2798
  flexDirection: "column",
2442
- children: /* @__PURE__ */ jsx14(Text14, { children: archiveFocus === "cancel" ? chalk11.bgGray.white.bold(" Cancel ") : chalk11.gray.bold("Cancel") })
2799
+ children: /* @__PURE__ */ jsx16(Text16, { children: archiveFocus === "cancel" ? chalk12.bgGray.white.bold(" Cancel ") : chalk12.gray.bold("Cancel") })
2443
2800
  }
2444
2801
  )
2445
2802
  ] }),
2446
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2803
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2447
2804
  "Press Enter to ",
2448
2805
  archiveFocus === "confirm" ? archiveTarget.isArchived ? "Unarchive" : "Archive" : "Cancel",
2449
2806
  " | Y to ",
2450
2807
  archiveTarget.isArchived ? "Unarchive" : "Archive",
2451
2808
  " | C to Cancel"
2452
2809
  ] }) }),
2453
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(
2454
- TextInput4,
2810
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(
2811
+ TextInput5,
2455
2812
  {
2456
2813
  value: "",
2457
2814
  onChange: () => {
@@ -2465,21 +2822,28 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2465
2822
  }
2466
2823
  }
2467
2824
  ) }),
2468
- archiveError && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "magenta", children: archiveError }) }),
2469
- archiving && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "yellow", children: archiveTarget.isArchived ? "Unarchiving..." : "Archiving..." }) })
2470
- ] }) }) : syncMode && syncTarget ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2471
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: "Sync Fork Confirmation" }),
2472
- /* @__PURE__ */ jsx14(Text14, { color: "blue", children: "\u27F2 Sync fork with upstream?" }),
2473
- /* @__PURE__ */ jsx14(Box13, { height: 1, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2474
- /* @__PURE__ */ jsx14(Text14, { children: syncTarget.nameWithOwner }),
2475
- syncTarget.parent && /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2825
+ archiveError && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "magenta", children: archiveError }) }),
2826
+ archiving && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "yellow", children: archiveTarget.isArchived ? "Unarchiving..." : "Archiving..." }) })
2827
+ ] }) }) : renameMode && renameTarget ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
2828
+ RenameModal,
2829
+ {
2830
+ repo: renameTarget,
2831
+ onRename: executeRename,
2832
+ onCancel: closeRenameModal
2833
+ }
2834
+ ) }) : syncMode && syncTarget ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2835
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: "Sync Fork Confirmation" }),
2836
+ /* @__PURE__ */ jsx16(Text16, { color: "blue", children: "\u27F2 Sync fork with upstream?" }),
2837
+ /* @__PURE__ */ jsx16(Box15, { height: 1, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2838
+ /* @__PURE__ */ jsx16(Text16, { children: syncTarget.nameWithOwner }),
2839
+ syncTarget.parent && /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2476
2840
  "Upstream: ",
2477
2841
  syncTarget.parent.nameWithOwner
2478
2842
  ] }),
2479
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { children: "This will merge upstream changes into your fork." }) }),
2480
- /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2481
- /* @__PURE__ */ jsx14(
2482
- Box13,
2843
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { children: "This will merge upstream changes into your fork." }) }),
2844
+ /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2845
+ /* @__PURE__ */ jsx16(
2846
+ Box15,
2483
2847
  {
2484
2848
  borderStyle: "round",
2485
2849
  borderColor: "blue",
@@ -2488,11 +2852,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2488
2852
  alignItems: "center",
2489
2853
  justifyContent: "center",
2490
2854
  flexDirection: "column",
2491
- children: /* @__PURE__ */ jsx14(Text14, { children: syncFocus === "confirm" ? chalk11.bgBlue.white.bold(" Sync ") : chalk11.blue.bold("Sync") })
2855
+ children: /* @__PURE__ */ jsx16(Text16, { children: syncFocus === "confirm" ? chalk12.bgBlue.white.bold(" Sync ") : chalk12.blue.bold("Sync") })
2492
2856
  }
2493
2857
  ),
2494
- /* @__PURE__ */ jsx14(
2495
- Box13,
2858
+ /* @__PURE__ */ jsx16(
2859
+ Box15,
2496
2860
  {
2497
2861
  borderStyle: "round",
2498
2862
  borderColor: syncFocus === "cancel" ? "white" : "gray",
@@ -2501,17 +2865,17 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2501
2865
  alignItems: "center",
2502
2866
  justifyContent: "center",
2503
2867
  flexDirection: "column",
2504
- children: /* @__PURE__ */ jsx14(Text14, { children: syncFocus === "cancel" ? chalk11.bgGray.white.bold(" Cancel ") : chalk11.gray.bold("Cancel") })
2868
+ children: /* @__PURE__ */ jsx16(Text16, { children: syncFocus === "cancel" ? chalk12.bgGray.white.bold(" Cancel ") : chalk12.gray.bold("Cancel") })
2505
2869
  }
2506
2870
  )
2507
2871
  ] }),
2508
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2872
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2509
2873
  "Press Enter to ",
2510
2874
  syncFocus === "confirm" ? "Sync" : "Cancel",
2511
2875
  " | Y to Sync | C to Cancel"
2512
2876
  ] }) }),
2513
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(
2514
- TextInput4,
2877
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(
2878
+ TextInput5,
2515
2879
  {
2516
2880
  value: "",
2517
2881
  onChange: () => {
@@ -2525,14 +2889,14 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2525
2889
  }
2526
2890
  }
2527
2891
  ) }),
2528
- syncError && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "magenta", children: syncError }) }),
2529
- syncing && /* @__PURE__ */ jsx14(Box13, { marginTop: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "yellow", children: "Syncing..." }) })
2530
- ] }) }) : logoutMode ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2531
- /* @__PURE__ */ jsx14(Text14, { bold: true, children: "Logout Confirmation" }),
2532
- /* @__PURE__ */ jsx14(Text14, { color: "cyan", children: "Are you sure you want to log out?" }),
2533
- /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2534
- /* @__PURE__ */ jsx14(
2535
- Box13,
2892
+ syncError && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "magenta", children: syncError }) }),
2893
+ syncing && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "yellow", children: "Syncing..." }) })
2894
+ ] }) }) : logoutMode ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
2895
+ /* @__PURE__ */ jsx16(Text16, { bold: true, children: "Logout Confirmation" }),
2896
+ /* @__PURE__ */ jsx16(Text16, { color: "cyan", children: "Are you sure you want to log out?" }),
2897
+ /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
2898
+ /* @__PURE__ */ jsx16(
2899
+ Box15,
2536
2900
  {
2537
2901
  borderStyle: "round",
2538
2902
  borderColor: "cyan",
@@ -2541,11 +2905,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2541
2905
  alignItems: "center",
2542
2906
  justifyContent: "center",
2543
2907
  flexDirection: "column",
2544
- children: /* @__PURE__ */ jsx14(Text14, { children: logoutFocus === "confirm" ? chalk11.bgCyan.white.bold(" Logout ") : chalk11.cyan.bold("Logout") })
2908
+ children: /* @__PURE__ */ jsx16(Text16, { children: logoutFocus === "confirm" ? chalk12.bgCyan.white.bold(" Logout ") : chalk12.cyan.bold("Logout") })
2545
2909
  }
2546
2910
  ),
2547
- /* @__PURE__ */ jsx14(
2548
- Box13,
2911
+ /* @__PURE__ */ jsx16(
2912
+ Box15,
2549
2913
  {
2550
2914
  borderStyle: "round",
2551
2915
  borderColor: logoutFocus === "cancel" ? "white" : "gray",
@@ -2554,16 +2918,16 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2554
2918
  alignItems: "center",
2555
2919
  justifyContent: "center",
2556
2920
  flexDirection: "column",
2557
- children: /* @__PURE__ */ jsx14(Text14, { children: logoutFocus === "cancel" ? chalk11.bgGray.white.bold(" Cancel ") : chalk11.gray.bold("Cancel") })
2921
+ children: /* @__PURE__ */ jsx16(Text16, { children: logoutFocus === "cancel" ? chalk12.bgGray.white.bold(" Cancel ") : chalk12.gray.bold("Cancel") })
2558
2922
  }
2559
2923
  )
2560
2924
  ] }),
2561
- /* @__PURE__ */ jsx14(Box13, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2925
+ /* @__PURE__ */ jsx16(Box15, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2562
2926
  "Press Enter to ",
2563
2927
  logoutFocus === "confirm" ? "Logout" : "Cancel",
2564
2928
  " | Y to Logout | C to Cancel"
2565
2929
  ] }) })
2566
- ] }) }) : orgSwitcherOpen ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx14(
2930
+ ] }) }) : orgSwitcherOpen ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
2567
2931
  OrgSwitcher,
2568
2932
  {
2569
2933
  token,
@@ -2571,45 +2935,45 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2571
2935
  onSelect: handleOrgContextChange,
2572
2936
  onClose: () => setOrgSwitcherOpen(false)
2573
2937
  }
2574
- ) }) : infoMode ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: (() => {
2938
+ ) }) : infoMode ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: (() => {
2575
2939
  const repo = infoRepo || visibleItems[cursor];
2576
- if (!repo) return /* @__PURE__ */ jsx14(Text14, { color: "red", children: "No repository selected." });
2940
+ if (!repo) return /* @__PURE__ */ jsx16(Text16, { color: "red", children: "No repository selected." });
2577
2941
  const langName = repo.primaryLanguage?.name || "N/A";
2578
2942
  const langColor = repo.primaryLanguage?.color || "#666666";
2579
- return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 90), children: [
2580
- /* @__PURE__ */ jsxs13(Text14, { bold: true, children: [
2943
+ return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 90), children: [
2944
+ /* @__PURE__ */ jsxs15(Text16, { bold: true, children: [
2581
2945
  "Repository Info ",
2582
- infoRepo ? chalk11.dim("(cached)") : ""
2946
+ infoRepo ? chalk12.dim("(cached)") : ""
2583
2947
  ] }),
2584
- /* @__PURE__ */ jsx14(Box13, { height: 1, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2585
- /* @__PURE__ */ jsx14(Text14, { children: chalk11.bold(repo.nameWithOwner) }),
2586
- repo.description && /* @__PURE__ */ jsx14(Text14, { color: "gray", children: repo.description }),
2587
- /* @__PURE__ */ jsx14(Box13, { height: 1, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2588
- /* @__PURE__ */ jsxs13(Text14, { children: [
2589
- repo.visibility === "PRIVATE" ? chalk11.yellow("Private") : repo.visibility === "INTERNAL" ? chalk11.magenta("Internal") : chalk11.green("Public"),
2590
- repo.isArchived ? chalk11.gray(" Archived") : "",
2591
- repo.isFork ? chalk11.blue(" Fork") : ""
2948
+ /* @__PURE__ */ jsx16(Box15, { height: 1, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2949
+ /* @__PURE__ */ jsx16(Text16, { children: chalk12.bold(repo.nameWithOwner) }),
2950
+ repo.description && /* @__PURE__ */ jsx16(Text16, { color: "gray", children: repo.description }),
2951
+ /* @__PURE__ */ jsx16(Box15, { height: 1, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2952
+ /* @__PURE__ */ jsxs15(Text16, { children: [
2953
+ repo.visibility === "PRIVATE" ? chalk12.yellow("Private") : repo.visibility === "INTERNAL" ? chalk12.magenta("Internal") : chalk12.green("Public"),
2954
+ repo.isArchived ? chalk12.gray(" Archived") : "",
2955
+ repo.isFork ? chalk12.blue(" Fork") : ""
2592
2956
  ] }),
2593
- /* @__PURE__ */ jsx14(Text14, { children: chalk11.gray(`\u2605 ${repo.stargazerCount} \u2442 ${repo.forkCount}`) }),
2594
- /* @__PURE__ */ jsxs13(Text14, { children: [
2595
- chalk11.hex(langColor)(`\u25CF `),
2596
- chalk11.gray(`${langName}`)
2957
+ /* @__PURE__ */ jsx16(Text16, { children: chalk12.gray(`\u2605 ${repo.stargazerCount} \u2442 ${repo.forkCount}`) }),
2958
+ /* @__PURE__ */ jsxs15(Text16, { children: [
2959
+ chalk12.hex(langColor)(`\u25CF `),
2960
+ chalk12.gray(`${langName}`)
2597
2961
  ] }),
2598
- /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2962
+ /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2599
2963
  "Updated: ",
2600
2964
  formatDate(repo.updatedAt),
2601
2965
  " \u2022 Pushed: ",
2602
2966
  formatDate(repo.pushedAt)
2603
2967
  ] }),
2604
- /* @__PURE__ */ jsxs13(Text14, { color: "gray", children: [
2968
+ /* @__PURE__ */ jsxs15(Text16, { color: "gray", children: [
2605
2969
  "Size: ",
2606
2970
  repo.diskUsage,
2607
2971
  " KB"
2608
2972
  ] }),
2609
- /* @__PURE__ */ jsx14(Box13, { height: 1, children: /* @__PURE__ */ jsx14(Text14, { children: " " }) }),
2610
- /* @__PURE__ */ jsx14(Text14, { color: "gray", children: "Press Esc or I to close" })
2973
+ /* @__PURE__ */ jsx16(Box15, { height: 1, children: /* @__PURE__ */ jsx16(Text16, { children: " " }) }),
2974
+ /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "Press Esc or I to close" })
2611
2975
  ] });
2612
- })() }) : visibilityMode ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx14(
2976
+ })() }) : visibilityMode ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
2613
2977
  VisibilityModal,
2614
2978
  {
2615
2979
  currentFilter: visibilityFilter,
@@ -2622,7 +2986,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2622
2986
  },
2623
2987
  onCancel: () => setVisibilityMode(false)
2624
2988
  }
2625
- ) }) : sortMode ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx14(
2989
+ ) }) : sortMode ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
2626
2990
  SortModal,
2627
2991
  {
2628
2992
  currentSort: sortKey,
@@ -2634,7 +2998,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2634
2998
  },
2635
2999
  onCancel: () => setSortMode(false)
2636
3000
  }
2637
- ) }) : changeVisibilityMode && changeVisibilityTarget ? /* @__PURE__ */ jsx14(Box13, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx14(
3001
+ ) }) : changeVisibilityMode && changeVisibilityTarget ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
2638
3002
  ChangeVisibilityModal,
2639
3003
  {
2640
3004
  isOpen: changeVisibilityMode,
@@ -2647,8 +3011,16 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2647
3011
  changing: changingVisibility,
2648
3012
  error: changeVisibilityError
2649
3013
  }
2650
- ) }) : /* @__PURE__ */ jsxs13(Fragment6, { children: [
2651
- /* @__PURE__ */ jsx14(
3014
+ ) }) : copyUrlMode ? /* @__PURE__ */ jsx16(Box15, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx16(
3015
+ CopyUrlModal,
3016
+ {
3017
+ repo: copyUrlTarget,
3018
+ terminalWidth,
3019
+ onClose: closeCopyUrlModal,
3020
+ onCopy: handleCopyUrl
3021
+ }
3022
+ ) }) : /* @__PURE__ */ jsxs15(Fragment8, { children: [
3023
+ /* @__PURE__ */ jsx16(
2652
3024
  RepoListHeader,
2653
3025
  {
2654
3026
  ownerContext,
@@ -2662,10 +3034,10 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2662
3034
  isEnterprise: isEnterpriseOrg
2663
3035
  }
2664
3036
  ),
2665
- filterMode && /* @__PURE__ */ jsxs13(Box13, { marginBottom: 1, children: [
2666
- /* @__PURE__ */ jsx14(Text14, { children: "Search: " }),
2667
- /* @__PURE__ */ jsx14(
2668
- TextInput4,
3037
+ filterMode && /* @__PURE__ */ jsxs15(Box15, { marginBottom: 1, children: [
3038
+ /* @__PURE__ */ jsx16(Text16, { children: "Search: " }),
3039
+ /* @__PURE__ */ jsx16(
3040
+ TextInput5,
2669
3041
  {
2670
3042
  value: filter,
2671
3043
  onChange: (val) => {
@@ -2704,10 +3076,10 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2704
3076
  }
2705
3077
  )
2706
3078
  ] }),
2707
- /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: listHeight, children: [
2708
- filterMode && filter.trim().length > 0 && filter.trim().length < 3 ? /* @__PURE__ */ jsx14(Box13, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, children: "Type at least 3 characters to search" }) }) : visibleItems.slice(windowed.start, windowed.end).map((repo, i) => {
3079
+ /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", height: listHeight, children: [
3080
+ filterMode && filter.trim().length > 0 && filter.trim().length < 3 ? /* @__PURE__ */ jsx16(Box15, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: true, children: "Type at least 3 characters to search" }) }) : visibleItems.slice(windowed.start, windowed.end).map((repo, i) => {
2709
3081
  const idx = windowed.start + i;
2710
- return /* @__PURE__ */ jsx14(
3082
+ return /* @__PURE__ */ jsx16(
2711
3083
  RepoRow,
2712
3084
  {
2713
3085
  repo,
@@ -2720,32 +3092,33 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
2720
3092
  repo.nameWithOwner
2721
3093
  );
2722
3094
  }),
2723
- loadingMore && hasNextPage && /* @__PURE__ */ jsx14(Box13, { justifyContent: "center", alignItems: "center", marginTop: 1, children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", children: [
2724
- /* @__PURE__ */ jsx14(Box13, { width: 2, flexShrink: 0, flexGrow: 0, marginRight: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "cyan", children: /* @__PURE__ */ jsx14(SlowSpinner, {}) }) }),
2725
- /* @__PURE__ */ jsx14(Text14, { color: "cyan", children: "Loading more repositories..." })
3095
+ loadingMore && hasNextPage && /* @__PURE__ */ jsx16(Box15, { justifyContent: "center", alignItems: "center", marginTop: 1, children: /* @__PURE__ */ jsxs15(Box15, { flexDirection: "row", children: [
3096
+ /* @__PURE__ */ jsx16(Box15, { width: 2, flexShrink: 0, flexGrow: 0, marginRight: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "cyan", children: /* @__PURE__ */ jsx16(SlowSpinner, {}) }) }),
3097
+ /* @__PURE__ */ jsx16(Text16, { color: "cyan", children: "Loading more repositories..." })
2726
3098
  ] }) }),
2727
- !loading && !searchLoading && visibleItems.length === 0 && /* @__PURE__ */ jsx14(Box13, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, children: searchActive ? "No repositories match your search" : filter ? "No repositories match your filter" : "No repositories found" }) })
3099
+ !loading && !searchLoading && visibleItems.length === 0 && /* @__PURE__ */ jsx16(Box15, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: true, children: searchActive ? "No repositories match your search" : filter ? "No repositories match your filter" : "No repositories found" }) })
2728
3100
  ] })
2729
3101
  ] }) }),
2730
- /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
2731
- /* @__PURE__ */ jsx14(Box13, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: modalOpen ? true : void 0, children: "\u2191\u2193 Navigate \u2022 \u23CE/O Open \u2022 R Refresh \u2022 W Org Switch \u2022 Ctrl+L Logout \u2022 Q Quit" }) }),
2732
- /* @__PURE__ */ jsx14(Box13, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: modalOpen ? true : void 0, children: "Ctrl+G Top \u2022 G Bottom \u2022 / Search \u2022 S Sort \u2022 D Direction \u2022 T Density \u2022 F Fork Status \u2022 V Visibility" }) }),
2733
- /* @__PURE__ */ jsx14(Box13, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: modalOpen ? true : void 0, children: "I Info \u2022 K Cache Info \u2022 Ctrl+A Un/Archive \u2022 Ctrl+V Change Visibility \u2022 Del/Backspace Delete \u2022 Ctrl+S Sync Fork" }) })
3102
+ /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
3103
+ /* @__PURE__ */ jsx16(Box15, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: modalOpen ? true : void 0, children: "\u2191\u2193 Navigate \u2022 \u23CE/O Open \u2022 R Refresh \u2022 W Org Switch \u2022 Ctrl+L Logout \u2022 Q Quit" }) }),
3104
+ /* @__PURE__ */ jsx16(Box15, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: modalOpen ? true : void 0, children: "Ctrl+G Top \u2022 G Bottom \u2022 / Search \u2022 S Sort \u2022 D Direction \u2022 T Density \u2022 F Fork Status \u2022 V Visibility" }) }),
3105
+ /* @__PURE__ */ jsx16(Box15, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: modalOpen ? true : void 0, children: "I Info \u2022 C Copy URL \u2022 K Cache Info \u2022 Ctrl+R Rename \u2022 Ctrl+A Un/Archive \u2022 Ctrl+V Change Visibility \u2022 Del/Backspace Delete \u2022 Ctrl+S Sync Fork" }) })
2734
3106
  ] }),
2735
- process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, borderStyle: "single", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [
2736
- /* @__PURE__ */ jsx14(Text14, { bold: true, color: "yellow", children: "Debug Messages:" }),
2737
- debugMessages.length === 0 ? /* @__PURE__ */ jsx14(Text14, { color: "gray", children: "No debug messages yet..." }) : debugMessages.map((msg, i) => /* @__PURE__ */ jsx14(Text14, { color: "gray", children: msg }, i))
2738
- ] })
3107
+ process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsxs15(Box15, { marginTop: 1, borderStyle: "single", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [
3108
+ /* @__PURE__ */ jsx16(Text16, { bold: true, color: "yellow", children: "Debug Messages:" }),
3109
+ debugMessages.length === 0 ? /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "No debug messages yet..." }) : debugMessages.map((msg, i) => /* @__PURE__ */ jsx16(Text16, { color: "gray", children: msg }, i))
3110
+ ] }),
3111
+ copyToast && /* @__PURE__ */ jsx16(Box15, { marginTop: 1, justifyContent: "center", children: /* @__PURE__ */ jsx16(Box15, { borderStyle: "round", borderColor: copyToast.includes("Failed") ? "red" : "green", paddingX: 2, paddingY: 0, children: /* @__PURE__ */ jsx16(Text16, { color: copyToast.includes("Failed") ? "red" : "green", children: copyToast }) }) })
2739
3112
  ] });
2740
3113
  }
2741
3114
 
2742
3115
  // src/ui/components/auth/AuthMethodSelector.tsx
2743
- import { useState as useState11 } from "react";
2744
- import { Box as Box14, Text as Text15, useInput as useInput11 } from "ink";
2745
- import chalk12 from "chalk";
2746
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
3116
+ import { useState as useState13 } from "react";
3117
+ import { Box as Box16, Text as Text17, useInput as useInput13 } from "ink";
3118
+ import chalk13 from "chalk";
3119
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
2747
3120
  function AuthMethodSelector({ onSelect, onQuit }) {
2748
- const [selectedIndex, setSelectedIndex] = useState11(0);
3121
+ const [selectedIndex, setSelectedIndex] = useState13(0);
2749
3122
  const methods = [
2750
3123
  {
2751
3124
  key: "oauth",
@@ -2758,7 +3131,7 @@ function AuthMethodSelector({ onSelect, onQuit }) {
2758
3131
  description: "Manually enter a GitHub Personal Access Token"
2759
3132
  }
2760
3133
  ];
2761
- useInput11((input, key) => {
3134
+ useInput13((input, key) => {
2762
3135
  if (key.escape || input?.toLowerCase() === "q") {
2763
3136
  if (onQuit) {
2764
3137
  onQuit();
@@ -2777,34 +3150,34 @@ function AuthMethodSelector({ onSelect, onQuit }) {
2777
3150
  onSelect("pat");
2778
3151
  }
2779
3152
  });
2780
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [
2781
- /* @__PURE__ */ jsx15(Text15, { bold: true, marginBottom: 1, children: "Choose Authentication Method" }),
2782
- /* @__PURE__ */ jsx15(Box14, { flexDirection: "column", marginY: 1, children: methods.map((method, index) => {
3153
+ return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", borderStyle: "single", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [
3154
+ /* @__PURE__ */ jsx17(Text17, { bold: true, marginBottom: 1, children: "Choose Authentication Method" }),
3155
+ /* @__PURE__ */ jsx17(Box16, { flexDirection: "column", marginY: 1, children: methods.map((method, index) => {
2783
3156
  const isSelected = index === selectedIndex;
2784
- const prefix = isSelected ? chalk12.cyan("\u203A") : " ";
3157
+ const prefix = isSelected ? chalk13.cyan("\u203A") : " ";
2785
3158
  const numberPrefix = `${index + 1}.`;
2786
- return /* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", marginBottom: 1, children: [
2787
- /* @__PURE__ */ jsx15(Text15, { children: /* @__PURE__ */ jsxs14(Text15, { color: isSelected ? "cyan" : void 0, bold: isSelected, children: [
3159
+ return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", marginBottom: 1, children: [
3160
+ /* @__PURE__ */ jsx17(Text17, { children: /* @__PURE__ */ jsxs16(Text17, { color: isSelected ? "cyan" : void 0, bold: isSelected, children: [
2788
3161
  prefix,
2789
3162
  " ",
2790
3163
  numberPrefix,
2791
3164
  " ",
2792
3165
  method.label
2793
3166
  ] }) }),
2794
- /* @__PURE__ */ jsxs14(Text15, { color: "gray", dimColor: true, children: [
3167
+ /* @__PURE__ */ jsxs16(Text17, { color: "gray", dimColor: true, children: [
2795
3168
  " ",
2796
3169
  method.description
2797
3170
  ] })
2798
3171
  ] }, method.key);
2799
3172
  }) }),
2800
- /* @__PURE__ */ jsx15(Text15, { color: "gray", dimColor: true, marginTop: 1, children: "Use arrow keys to navigate, Enter to select, or press 1/2 \u2022 Q/Esc to quit" })
3173
+ /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: true, marginTop: 1, children: "Use arrow keys to navigate, Enter to select, or press 1/2 \u2022 Q/Esc to quit" })
2801
3174
  ] });
2802
3175
  }
2803
3176
 
2804
3177
  // src/ui/components/auth/OAuthProgress.tsx
2805
- import { Box as Box15, Text as Text16 } from "ink";
3178
+ import { Box as Box17, Text as Text18 } from "ink";
2806
3179
  import Spinner from "ink-spinner";
2807
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
3180
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
2808
3181
  function OAuthProgress({ status, error, deviceCode }) {
2809
3182
  const statusMessages = {
2810
3183
  initializing: {
@@ -2841,69 +3214,69 @@ function OAuthProgress({ status, error, deviceCode }) {
2841
3214
  }
2842
3215
  };
2843
3216
  const { message, showSpinner } = statusMessages[status];
2844
- return /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", borderStyle: "single", borderColor: status === "error" ? "red" : "cyan", paddingX: 2, paddingY: 1, children: [
2845
- /* @__PURE__ */ jsx16(Text16, { bold: true, marginBottom: 1, children: "GitHub OAuth Authentication" }),
2846
- /* @__PURE__ */ jsx16(Box15, { marginY: 1, children: showSpinner ? /* @__PURE__ */ jsxs15(Box15, { children: [
2847
- /* @__PURE__ */ jsx16(Text16, { color: "green", children: /* @__PURE__ */ jsx16(Spinner, { type: "dots" }) }),
2848
- /* @__PURE__ */ jsxs15(Text16, { children: [
3217
+ return /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", borderStyle: "single", borderColor: status === "error" ? "red" : "cyan", paddingX: 2, paddingY: 1, children: [
3218
+ /* @__PURE__ */ jsx18(Text18, { bold: true, marginBottom: 1, children: "GitHub OAuth Authentication" }),
3219
+ /* @__PURE__ */ jsx18(Box17, { marginY: 1, children: showSpinner ? /* @__PURE__ */ jsxs17(Box17, { children: [
3220
+ /* @__PURE__ */ jsx18(Text18, { color: "green", children: /* @__PURE__ */ jsx18(Spinner, { type: "dots" }) }),
3221
+ /* @__PURE__ */ jsxs17(Text18, { children: [
2849
3222
  " ",
2850
3223
  message
2851
3224
  ] })
2852
- ] }) : /* @__PURE__ */ jsxs15(Text16, { color: status === "error" ? "red" : "green", children: [
3225
+ ] }) : /* @__PURE__ */ jsxs17(Text18, { color: status === "error" ? "red" : "green", children: [
2853
3226
  status === "error" ? "\u2717" : "\u2713",
2854
3227
  " ",
2855
3228
  message
2856
3229
  ] }) }),
2857
- (status === "waiting_for_authorization" || status === "polling_for_token") && deviceCode && /* @__PURE__ */ jsxs15(Box15, { marginY: 1, flexDirection: "column", children: [
2858
- /* @__PURE__ */ jsx16(Text16, { bold: true, color: "cyan", marginBottom: 1, children: "\u{1F4CB} Please complete these steps:" }),
2859
- /* @__PURE__ */ jsxs15(Box15, { marginBottom: 1, children: [
2860
- /* @__PURE__ */ jsx16(Text16, { children: "1. Visit: " }),
2861
- /* @__PURE__ */ jsx16(Text16, { bold: true, color: "blue", children: deviceCode.verification_uri })
3230
+ (status === "waiting_for_authorization" || status === "polling_for_token") && deviceCode && /* @__PURE__ */ jsxs17(Box17, { marginY: 1, flexDirection: "column", children: [
3231
+ /* @__PURE__ */ jsx18(Text18, { bold: true, color: "cyan", marginBottom: 1, children: "\u{1F4CB} Please complete these steps:" }),
3232
+ /* @__PURE__ */ jsxs17(Box17, { marginBottom: 1, children: [
3233
+ /* @__PURE__ */ jsx18(Text18, { children: "1. Visit: " }),
3234
+ /* @__PURE__ */ jsx18(Text18, { bold: true, color: "blue", children: deviceCode.verification_uri })
2862
3235
  ] }),
2863
- /* @__PURE__ */ jsxs15(Box15, { marginBottom: 1, flexDirection: "column", children: [
2864
- /* @__PURE__ */ jsx16(Text16, { children: "2. Enter this code:" }),
2865
- /* @__PURE__ */ jsx16(Box15, { borderStyle: "single", borderColor: "yellow", paddingX: 2, paddingY: 1, marginTop: 1, children: /* @__PURE__ */ jsx16(Text16, { bold: true, color: "yellow", children: deviceCode.user_code }) })
3236
+ /* @__PURE__ */ jsxs17(Box17, { marginBottom: 1, flexDirection: "column", children: [
3237
+ /* @__PURE__ */ jsx18(Text18, { children: "2. Enter this code:" }),
3238
+ /* @__PURE__ */ jsx18(Box17, { borderStyle: "single", borderColor: "yellow", paddingX: 2, paddingY: 1, marginTop: 1, children: /* @__PURE__ */ jsx18(Text18, { bold: true, color: "yellow", children: deviceCode.user_code }) })
2866
3239
  ] }),
2867
- status === "waiting_for_authorization" && /* @__PURE__ */ jsx16(Text16, { color: "gray", marginTop: 1, children: "Your browser should open automatically." }),
2868
- status === "polling_for_token" && /* @__PURE__ */ jsxs15(Box15, { flexDirection: "column", marginTop: 1, children: [
2869
- /* @__PURE__ */ jsx16(Text16, { color: "gray", children: "Waiting for you to complete authorization in your browser..." }),
2870
- /* @__PURE__ */ jsx16(Text16, { color: "gray", dimColor: true, marginTop: 1, children: "This will timeout in 15 minutes. Press Esc to cancel." })
3240
+ status === "waiting_for_authorization" && /* @__PURE__ */ jsx18(Text18, { color: "gray", marginTop: 1, children: "Your browser should open automatically." }),
3241
+ status === "polling_for_token" && /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", marginTop: 1, children: [
3242
+ /* @__PURE__ */ jsx18(Text18, { color: "gray", children: "Waiting for you to complete authorization in your browser..." }),
3243
+ /* @__PURE__ */ jsx18(Text18, { color: "gray", dimColor: true, marginTop: 1, children: "This will timeout in 15 minutes. Press Esc to cancel." })
2871
3244
  ] })
2872
3245
  ] }),
2873
- status === "error" && error && /* @__PURE__ */ jsxs15(Box15, { marginY: 1, flexDirection: "column", children: [
2874
- /* @__PURE__ */ jsx16(Text16, { color: "red", children: error }),
2875
- /* @__PURE__ */ jsx16(Text16, { color: "gray", marginTop: 1, children: "Press Esc to go back and try again." })
3246
+ status === "error" && error && /* @__PURE__ */ jsxs17(Box17, { marginY: 1, flexDirection: "column", children: [
3247
+ /* @__PURE__ */ jsx18(Text18, { color: "red", children: error }),
3248
+ /* @__PURE__ */ jsx18(Text18, { color: "gray", marginTop: 1, children: "Press Esc to go back and try again." })
2876
3249
  ] }),
2877
- status === "success" && /* @__PURE__ */ jsx16(Text16, { color: "gray", marginTop: 1, children: "Returning to application..." })
3250
+ status === "success" && /* @__PURE__ */ jsx18(Text18, { color: "gray", marginTop: 1, children: "Returning to application..." })
2878
3251
  ] });
2879
3252
  }
2880
3253
 
2881
3254
  // src/ui/App.tsx
2882
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
3255
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
2883
3256
  var packageJson = require_package();
2884
3257
  function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlineTokenEphemeral }) {
2885
3258
  const { exit } = useApp2();
2886
3259
  const { stdout } = useStdout2();
2887
- const [mode, setMode] = useState12("checking");
2888
- const [token, setToken] = useState12(null);
2889
- const [input, setInput] = useState12("");
2890
- const [error, setError] = useState12(null);
2891
- const [viewer, setViewer] = useState12(null);
2892
- const [rateLimitReset, setRateLimitReset] = useState12(null);
2893
- const [wasRateLimited, setWasRateLimited] = useState12(false);
2894
- const [orgContext, setOrgContext] = useState12("personal");
2895
- const [authMethod, setAuthMethod] = useState12("pat");
2896
- const [oauthStatus, setOAuthStatus] = useState12("initializing");
2897
- const [tokenSource, setTokenSource] = useState12("pat");
2898
- const [sessionTokenOrigin, setSessionTokenOrigin] = useState12("stored");
2899
- const [deviceCodeResponse, setDeviceCodeResponse] = useState12(null);
2900
- const [oauthDeviceCode, setOauthDeviceCode] = useState12(null);
2901
- const [dims, setDims] = useState12(() => {
3260
+ const [mode, setMode] = useState14("checking");
3261
+ const [token, setToken] = useState14(null);
3262
+ const [input, setInput] = useState14("");
3263
+ const [error, setError] = useState14(null);
3264
+ const [viewer, setViewer] = useState14(null);
3265
+ const [rateLimitReset, setRateLimitReset] = useState14(null);
3266
+ const [wasRateLimited, setWasRateLimited] = useState14(false);
3267
+ const [orgContext, setOrgContext] = useState14("personal");
3268
+ const [authMethod, setAuthMethod] = useState14("pat");
3269
+ const [oauthStatus, setOAuthStatus] = useState14("initializing");
3270
+ const [tokenSource, setTokenSource] = useState14("pat");
3271
+ const [sessionTokenOrigin, setSessionTokenOrigin] = useState14("stored");
3272
+ const [deviceCodeResponse, setDeviceCodeResponse] = useState14(null);
3273
+ const [oauthDeviceCode, setOauthDeviceCode] = useState14(null);
3274
+ const [dims, setDims] = useState14(() => {
2902
3275
  const cols = stdout?.columns ?? 100;
2903
3276
  const rows = stdout?.rows ?? 30;
2904
3277
  return { cols, rows };
2905
3278
  });
2906
- useEffect8(() => {
3279
+ useEffect9(() => {
2907
3280
  if (!stdout) return;
2908
3281
  const onResize = () => {
2909
3282
  const cols = stdout.columns ?? 100;
@@ -2915,7 +3288,7 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
2915
3288
  stdout.off?.("resize", onResize);
2916
3289
  };
2917
3290
  }, [stdout]);
2918
- useEffect8(() => {
3291
+ useEffect9(() => {
2919
3292
  const env = getTokenFromEnv();
2920
3293
  const stored = getStoredToken();
2921
3294
  const source = getTokenSource();
@@ -2939,7 +3312,7 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
2939
3312
  setMode("auth_method_selection");
2940
3313
  }
2941
3314
  }, [inlineToken2]);
2942
- useEffect8(() => {
3315
+ useEffect9(() => {
2943
3316
  if (mode !== "oauth_flow") return;
2944
3317
  (async () => {
2945
3318
  try {
@@ -2991,7 +3364,7 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
2991
3364
  setMode("oauth_flow");
2992
3365
  }
2993
3366
  };
2994
- useEffect8(() => {
3367
+ useEffect9(() => {
2995
3368
  (async () => {
2996
3369
  if (mode !== "validating" || !token) return;
2997
3370
  const timeoutId = setTimeout(() => {
@@ -3103,7 +3476,7 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
3103
3476
  setTokenSource("pat");
3104
3477
  setMode("auth_method_selection");
3105
3478
  };
3106
- useInput12((input2, key) => {
3479
+ useInput14((input2, key) => {
3107
3480
  if ((mode === "prompt" || mode === "auth_method_selection") && key.escape) {
3108
3481
  exit();
3109
3482
  }
@@ -3135,19 +3508,19 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
3135
3508
  }
3136
3509
  });
3137
3510
  const verticalPadding = Math.floor(dims.rows * 0.15);
3138
- const header = useMemo2(() => /* @__PURE__ */ jsxs16(Box16, { flexDirection: "row", justifyContent: "space-between", marginBottom: 1, children: [
3139
- /* @__PURE__ */ jsxs16(Box16, { flexDirection: "row", gap: 1, children: [
3140
- /* @__PURE__ */ jsxs16(Text17, { bold: true, color: "cyan", children: [
3511
+ const header = useMemo2(() => /* @__PURE__ */ jsxs18(Box18, { flexDirection: "row", justifyContent: "space-between", marginBottom: 1, children: [
3512
+ /* @__PURE__ */ jsxs18(Box18, { flexDirection: "row", gap: 1, children: [
3513
+ /* @__PURE__ */ jsxs18(Text19, { bold: true, color: "cyan", children: [
3141
3514
  " ",
3142
3515
  "GitHub Repository Manager"
3143
3516
  ] }),
3144
- /* @__PURE__ */ jsxs16(Text17, { color: "gray", dimColor: true, children: [
3517
+ /* @__PURE__ */ jsxs18(Text19, { color: "gray", dimColor: true, children: [
3145
3518
  "v",
3146
3519
  packageJson.version
3147
3520
  ] }),
3148
- process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsx17(Text17, { backgroundColor: "blue", color: "white", children: " debug mode " })
3521
+ process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsx19(Text19, { backgroundColor: "blue", color: "white", children: " debug mode " })
3149
3522
  ] }),
3150
- viewer && /* @__PURE__ */ jsx17(Text17, { color: "gray", children: orgContext !== "personal" && orgContext.login ? `${orgContext.login}/@${viewer} ` : `@${viewer} ` })
3523
+ viewer && /* @__PURE__ */ jsx19(Text19, { color: "gray", children: orgContext !== "personal" && orgContext.login ? `${orgContext.login}/@${viewer} ` : `@${viewer} ` })
3151
3524
  ] }), [viewer, orgContext]);
3152
3525
  if (mode === "rate_limited") {
3153
3526
  const formatResetTime = (resetTime) => {
@@ -3170,71 +3543,71 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
3170
3543
  return "Unknown";
3171
3544
  }
3172
3545
  };
3173
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3546
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3174
3547
  header,
3175
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs16(Box16, { borderStyle: "single", borderColor: "yellow", paddingX: 3, paddingY: 2, flexDirection: "column", width: Math.min(dims.cols - 8, 80), children: [
3176
- /* @__PURE__ */ jsx17(Text17, { bold: true, color: "yellow", marginBottom: 1, children: "\u26A0\uFE0F Rate Limit Exceeded" }),
3177
- /* @__PURE__ */ jsx17(Text17, { color: "gray", marginBottom: 1, children: "You've hit GitHub's API rate limit for your token." }),
3178
- /* @__PURE__ */ jsx17(Text17, { color: "gray", marginBottom: 1, children: "This happens when you make too many requests in a short time." }),
3179
- rateLimitReset && /* @__PURE__ */ jsxs16(Box16, { marginTop: 1, marginBottom: 1, children: [
3180
- /* @__PURE__ */ jsxs16(Text17, { children: [
3181
- /* @__PURE__ */ jsx17(Text17, { color: "cyan", children: "Reset in:" }),
3548
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs18(Box18, { borderStyle: "single", borderColor: "yellow", paddingX: 3, paddingY: 2, flexDirection: "column", width: Math.min(dims.cols - 8, 80), children: [
3549
+ /* @__PURE__ */ jsx19(Text19, { bold: true, color: "yellow", marginBottom: 1, children: "\u26A0\uFE0F Rate Limit Exceeded" }),
3550
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", marginBottom: 1, children: "You've hit GitHub's API rate limit for your token." }),
3551
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", marginBottom: 1, children: "This happens when you make too many requests in a short time." }),
3552
+ rateLimitReset && /* @__PURE__ */ jsxs18(Box18, { marginTop: 1, marginBottom: 1, children: [
3553
+ /* @__PURE__ */ jsxs18(Text19, { children: [
3554
+ /* @__PURE__ */ jsx19(Text19, { color: "cyan", children: "Reset in:" }),
3182
3555
  " ",
3183
- /* @__PURE__ */ jsx17(Text17, { bold: true, children: formatResetTime(rateLimitReset) })
3556
+ /* @__PURE__ */ jsx19(Text19, { bold: true, children: formatResetTime(rateLimitReset) })
3184
3557
  ] }),
3185
- /* @__PURE__ */ jsxs16(Text17, { color: "gray", dimColor: true, children: [
3558
+ /* @__PURE__ */ jsxs18(Text19, { color: "gray", dimColor: true, children: [
3186
3559
  "(",
3187
3560
  new Date(rateLimitReset).toLocaleTimeString(),
3188
3561
  ")"
3189
3562
  ] })
3190
3563
  ] }),
3191
- /* @__PURE__ */ jsxs16(Box16, { marginTop: 2, flexDirection: "column", gap: 1, children: [
3192
- /* @__PURE__ */ jsx17(Text17, { bold: true, children: "What would you like to do?" }),
3193
- /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", paddingLeft: 2, children: [
3194
- /* @__PURE__ */ jsxs16(Text17, { children: [
3195
- /* @__PURE__ */ jsx17(Text17, { color: "cyan", bold: true, children: "R" }),
3564
+ /* @__PURE__ */ jsxs18(Box18, { marginTop: 2, flexDirection: "column", gap: 1, children: [
3565
+ /* @__PURE__ */ jsx19(Text19, { bold: true, children: "What would you like to do?" }),
3566
+ /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", paddingLeft: 2, children: [
3567
+ /* @__PURE__ */ jsxs18(Text19, { children: [
3568
+ /* @__PURE__ */ jsx19(Text19, { color: "cyan", bold: true, children: "R" }),
3196
3569
  " - Retry now ",
3197
3570
  rateLimitReset && formatResetTime(rateLimitReset) !== "Now (should be reset)" ? "(likely to fail until reset)" : "(should work now)"
3198
3571
  ] }),
3199
- /* @__PURE__ */ jsxs16(Text17, { children: [
3200
- /* @__PURE__ */ jsx17(Text17, { color: "cyan", bold: true, children: "L" }),
3572
+ /* @__PURE__ */ jsxs18(Text19, { children: [
3573
+ /* @__PURE__ */ jsx19(Text19, { color: "cyan", bold: true, children: "L" }),
3201
3574
  " - Logout and choose authentication method"
3202
3575
  ] }),
3203
- /* @__PURE__ */ jsxs16(Text17, { children: [
3204
- /* @__PURE__ */ jsx17(Text17, { color: "gray", bold: true, children: "Q/Esc" }),
3576
+ /* @__PURE__ */ jsxs18(Text19, { children: [
3577
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", bold: true, children: "Q/Esc" }),
3205
3578
  " - Quit application"
3206
3579
  ] })
3207
3580
  ] })
3208
3581
  ] }),
3209
- /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: true, marginTop: 2, children: "Tip: Using multiple tokens or waiting between requests can help avoid rate limits." })
3582
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", dimColor: true, marginTop: 2, children: "Tip: Using multiple tokens or waiting between requests can help avoid rate limits." })
3210
3583
  ] }) })
3211
3584
  ] });
3212
3585
  }
3213
3586
  if (mode === "auth_method_selection") {
3214
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3587
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3215
3588
  header,
3216
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", alignItems: "center", children: [
3217
- /* @__PURE__ */ jsx17(AuthMethodSelector, { onSelect: handleAuthMethodSelect }),
3218
- error && /* @__PURE__ */ jsx17(Text17, { color: "red", marginTop: 1, children: error })
3589
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", alignItems: "center", children: [
3590
+ /* @__PURE__ */ jsx19(AuthMethodSelector, { onSelect: handleAuthMethodSelect }),
3591
+ error && /* @__PURE__ */ jsx19(Text19, { color: "red", marginTop: 1, children: error })
3219
3592
  ] }) })
3220
3593
  ] });
3221
3594
  }
3222
3595
  if (mode === "oauth_flow") {
3223
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3596
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3224
3597
  header,
3225
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx17(OAuthProgress, { status: oauthStatus, error: error || void 0, deviceCode: oauthDeviceCode || void 0 }) })
3598
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx19(OAuthProgress, { status: oauthStatus, error: error || void 0, deviceCode: oauthDeviceCode || void 0 }) })
3226
3599
  ] });
3227
3600
  }
3228
3601
  if (mode === "prompt") {
3229
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3602
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3230
3603
  header,
3231
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs16(Box16, { borderStyle: "single", borderColor: "cyan", paddingX: 2, paddingY: 1, flexDirection: "column", children: [
3232
- /* @__PURE__ */ jsx17(Text17, { bold: true, marginBottom: 1, children: "Authentication Required" }),
3233
- /* @__PURE__ */ jsx17(Text17, { color: "gray", marginBottom: 1, children: "Enter your GitHub Personal Access Token" }),
3234
- /* @__PURE__ */ jsxs16(Box16, { children: [
3235
- /* @__PURE__ */ jsx17(Text17, { children: "Token: " }),
3236
- /* @__PURE__ */ jsx17(
3237
- TextInput5,
3604
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs18(Box18, { borderStyle: "single", borderColor: "cyan", paddingX: 2, paddingY: 1, flexDirection: "column", children: [
3605
+ /* @__PURE__ */ jsx19(Text19, { bold: true, marginBottom: 1, children: "Authentication Required" }),
3606
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", marginBottom: 1, children: "Enter your GitHub Personal Access Token" }),
3607
+ /* @__PURE__ */ jsxs18(Box18, { children: [
3608
+ /* @__PURE__ */ jsx19(Text19, { children: "Token: " }),
3609
+ /* @__PURE__ */ jsx19(
3610
+ TextInput6,
3238
3611
  {
3239
3612
  value: input,
3240
3613
  onChange: setInput,
@@ -3243,30 +3616,30 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
3243
3616
  }
3244
3617
  )
3245
3618
  ] }),
3246
- error && /* @__PURE__ */ jsx17(Text17, { color: "red", marginTop: 1, children: error }),
3247
- /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: true, marginTop: 1, children: "The token will be stored securely in your local config" }),
3248
- /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to go back" })
3619
+ error && /* @__PURE__ */ jsx19(Text19, { color: "red", marginTop: 1, children: error }),
3620
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", dimColor: true, marginTop: 1, children: "The token will be stored securely in your local config" }),
3621
+ /* @__PURE__ */ jsx19(Text19, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to go back" })
3249
3622
  ] }) })
3250
3623
  ] });
3251
3624
  }
3252
3625
  if (mode === "validating" || mode === "checking") {
3253
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3626
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3254
3627
  header,
3255
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", alignItems: "center", children: [
3256
- /* @__PURE__ */ jsx17(Text17, { color: "yellow", children: "Validating token..." }),
3257
- mode === "validating" && /* @__PURE__ */ jsx17(Text17, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to cancel" })
3628
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", alignItems: "center", children: [
3629
+ /* @__PURE__ */ jsx19(Text19, { color: "yellow", children: "Validating token..." }),
3630
+ mode === "validating" && /* @__PURE__ */ jsx19(Text19, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to cancel" })
3258
3631
  ] }) })
3259
3632
  ] });
3260
3633
  }
3261
3634
  if (mode === "error") {
3262
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3635
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3263
3636
  header,
3264
- /* @__PURE__ */ jsx17(Box16, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx17(Text17, { color: "red", children: error ?? "Unexpected error" }) })
3637
+ /* @__PURE__ */ jsx19(Box18, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx19(Text19, { color: "red", children: error ?? "Unexpected error" }) })
3265
3638
  ] });
3266
3639
  }
3267
- return /* @__PURE__ */ jsxs16(Box16, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3640
+ return /* @__PURE__ */ jsxs18(Box18, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
3268
3641
  header,
3269
- /* @__PURE__ */ jsx17(
3642
+ /* @__PURE__ */ jsx19(
3270
3643
  RepoList,
3271
3644
  {
3272
3645
  token,
@@ -3281,7 +3654,7 @@ function App({ initialOrgSlug: initialOrgSlug2, inlineToken: inlineToken2, inlin
3281
3654
  }
3282
3655
 
3283
3656
  // src/index.tsx
3284
- import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
3657
+ import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
3285
3658
  var argv = process.argv.slice(2);
3286
3659
  var getFlagValue = (name) => {
3287
3660
  const idx = argv.findIndex((a) => a === `--${name}` || a.startsWith(`--${name}=`));
@@ -3376,8 +3749,8 @@ var inlineToken = (() => {
3376
3749
  })();
3377
3750
  logger.debug("Rendering UI");
3378
3751
  var { unmount } = render(
3379
- /* @__PURE__ */ jsxs17(Box17, { flexDirection: "column", children: [
3380
- /* @__PURE__ */ jsx18(App, { initialOrgSlug, inlineToken, inlineTokenEphemeral: Boolean(inlineToken) }),
3381
- /* @__PURE__ */ jsx18(Text18, { color: "gray" })
3752
+ /* @__PURE__ */ jsxs19(Box19, { flexDirection: "column", children: [
3753
+ /* @__PURE__ */ jsx20(App, { initialOrgSlug, inlineToken, inlineTokenEphemeral: Boolean(inlineToken) }),
3754
+ /* @__PURE__ */ jsx20(Text20, { color: "gray" })
3382
3755
  ] })
3383
3756
  );