gh-manager-cli 1.10.6 → 1.11.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/CHANGELOG.md +7 -0
- package/README.md +76 -39
- package/dist/{chunk-XCFI3TG5.js → chunk-75Y3BQBE.js} +16 -10
- package/dist/{github-6IFMCQKW.js → github-6OEBCAUZ.js} +1 -1
- package/dist/index.js +789 -361
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -16,14 +16,14 @@ import {
|
|
|
16
16
|
updateCacheAfterArchive,
|
|
17
17
|
updateCacheAfterDelete,
|
|
18
18
|
updateCacheWithRepository
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-75Y3BQBE.js";
|
|
20
20
|
|
|
21
21
|
// package.json
|
|
22
22
|
var require_package = __commonJS({
|
|
23
23
|
"package.json"(exports, module) {
|
|
24
24
|
module.exports = {
|
|
25
25
|
name: "gh-manager-cli",
|
|
26
|
-
version: "1.
|
|
26
|
+
version: "1.11.0",
|
|
27
27
|
private: false,
|
|
28
28
|
description: "Interactive CLI to manage your GitHub repos (personal) with Ink",
|
|
29
29
|
license: "MIT",
|
|
@@ -144,13 +144,13 @@ var require_package = __commonJS({
|
|
|
144
144
|
});
|
|
145
145
|
|
|
146
146
|
// src/index.tsx
|
|
147
|
-
import { render, Box as
|
|
147
|
+
import { render, Box as Box14, Text as Text15 } from "ink";
|
|
148
148
|
import "dotenv/config";
|
|
149
149
|
|
|
150
150
|
// src/ui/App.tsx
|
|
151
|
-
import { useEffect as
|
|
152
|
-
import { Box as
|
|
153
|
-
import
|
|
151
|
+
import { useEffect as useEffect7, useMemo as useMemo2, useState as useState10 } from "react";
|
|
152
|
+
import { Box as Box13, Text as Text14, useApp as useApp2, useStdout as useStdout2, useInput as useInput10 } from "ink";
|
|
153
|
+
import TextInput4 from "ink-text-input";
|
|
154
154
|
|
|
155
155
|
// src/config.ts
|
|
156
156
|
import fs from "fs";
|
|
@@ -206,10 +206,10 @@ function storeUIPrefs(patch) {
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
// src/ui/RepoList.tsx
|
|
209
|
-
import
|
|
210
|
-
import { Box as
|
|
211
|
-
import
|
|
212
|
-
import
|
|
209
|
+
import React9, { useEffect as useEffect6, useMemo, useState as useState9, useRef } from "react";
|
|
210
|
+
import { Box as Box12, Text as Text13, useApp, useInput as useInput9, useStdout } from "ink";
|
|
211
|
+
import TextInput3 from "ink-text-input";
|
|
212
|
+
import chalk10 from "chalk";
|
|
213
213
|
|
|
214
214
|
// src/apolloMeta.ts
|
|
215
215
|
import fs2 from "fs";
|
|
@@ -284,7 +284,7 @@ function OrgSwitcher({ token, currentContext, onSelect, onClose }) {
|
|
|
284
284
|
const loadOrgs = async () => {
|
|
285
285
|
try {
|
|
286
286
|
setLoading(true);
|
|
287
|
-
const client = await import("./github-
|
|
287
|
+
const client = await import("./github-6OEBCAUZ.js").then((m) => m.makeClient(token));
|
|
288
288
|
const orgs = await fetchViewerOrganizations(client);
|
|
289
289
|
setOrganizations(orgs);
|
|
290
290
|
if (!isPersonalContext) {
|
|
@@ -338,10 +338,47 @@ function OrgSwitcher({ token, currentContext, onSelect, onClose }) {
|
|
|
338
338
|
] });
|
|
339
339
|
}
|
|
340
340
|
|
|
341
|
-
// src/ui/components/
|
|
342
|
-
import {
|
|
341
|
+
// src/ui/components/modals/DeleteModal.tsx
|
|
342
|
+
import { useState as useState3, useEffect as useEffect3 } from "react";
|
|
343
|
+
import { Box as Box2, Text as Text3, useInput as useInput2 } from "ink";
|
|
344
|
+
import TextInput from "ink-text-input";
|
|
343
345
|
import chalk2 from "chalk";
|
|
344
346
|
|
|
347
|
+
// src/ui/components/common/SlowSpinner.tsx
|
|
348
|
+
import { useEffect as useEffect2, useState as useState2 } from "react";
|
|
349
|
+
import { Text as Text2 } from "ink";
|
|
350
|
+
import { jsx as jsx2 } from "react/jsx-runtime";
|
|
351
|
+
function SlowSpinner() {
|
|
352
|
+
const frames = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
|
|
353
|
+
const [frame, setFrame] = useState2(0);
|
|
354
|
+
useEffect2(() => {
|
|
355
|
+
const timer = setInterval(() => {
|
|
356
|
+
setFrame((f) => (f + 1) % frames.length);
|
|
357
|
+
}, 500);
|
|
358
|
+
return () => clearInterval(timer);
|
|
359
|
+
}, [frames.length]);
|
|
360
|
+
return /* @__PURE__ */ jsx2(Text2, { children: frames[frame] });
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// src/ui/components/modals/DeleteModal.tsx
|
|
364
|
+
import { Fragment, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
365
|
+
|
|
366
|
+
// src/ui/components/modals/ArchiveModal.tsx
|
|
367
|
+
import { useState as useState4 } from "react";
|
|
368
|
+
import { Box as Box3, Text as Text4, useInput as useInput3 } from "ink";
|
|
369
|
+
import chalk3 from "chalk";
|
|
370
|
+
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
371
|
+
|
|
372
|
+
// src/ui/components/modals/SyncModal.tsx
|
|
373
|
+
import { useState as useState5 } from "react";
|
|
374
|
+
import { Box as Box4, Text as Text5, useInput as useInput4 } from "ink";
|
|
375
|
+
import chalk4 from "chalk";
|
|
376
|
+
import { Fragment as Fragment3, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
377
|
+
|
|
378
|
+
// src/ui/components/modals/InfoModal.tsx
|
|
379
|
+
import { Box as Box5, Text as Text6, useInput as useInput5 } from "ink";
|
|
380
|
+
import chalk5 from "chalk";
|
|
381
|
+
|
|
345
382
|
// src/utils.ts
|
|
346
383
|
function truncate(str, max = 80) {
|
|
347
384
|
if (str.length <= max) return str;
|
|
@@ -360,8 +397,317 @@ function formatDate(dateStr) {
|
|
|
360
397
|
return `${Math.floor(diffDays / 365)} years ago`;
|
|
361
398
|
}
|
|
362
399
|
|
|
400
|
+
// src/ui/components/modals/InfoModal.tsx
|
|
401
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
402
|
+
|
|
403
|
+
// src/ui/components/modals/LogoutModal.tsx
|
|
404
|
+
import { useState as useState6 } from "react";
|
|
405
|
+
import { Box as Box6, Text as Text7, useInput as useInput6 } from "ink";
|
|
406
|
+
import chalk6 from "chalk";
|
|
407
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
408
|
+
|
|
409
|
+
// src/ui/components/modals/VisibilityModal.tsx
|
|
410
|
+
import { useState as useState7, useEffect as useEffect4 } from "react";
|
|
411
|
+
import { Box as Box7, Text as Text8, useInput as useInput7 } from "ink";
|
|
412
|
+
import chalk7 from "chalk";
|
|
413
|
+
import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
414
|
+
function VisibilityModal({
|
|
415
|
+
currentFilter,
|
|
416
|
+
hasInternalRepos,
|
|
417
|
+
onSelect,
|
|
418
|
+
onCancel
|
|
419
|
+
}) {
|
|
420
|
+
const options = hasInternalRepos ? ["all", "public", "private", "internal"] : ["all", "public", "private"];
|
|
421
|
+
const [selectedIndex, setSelectedIndex] = useState7(0);
|
|
422
|
+
const [focusedOption, setFocusedOption] = useState7("all");
|
|
423
|
+
useEffect4(() => {
|
|
424
|
+
const currentIndex = options.indexOf(currentFilter);
|
|
425
|
+
if (currentIndex !== -1) {
|
|
426
|
+
setSelectedIndex(currentIndex);
|
|
427
|
+
setFocusedOption(currentFilter);
|
|
428
|
+
}
|
|
429
|
+
}, [currentFilter]);
|
|
430
|
+
useInput7((input, key) => {
|
|
431
|
+
if (key.escape || input && input.toUpperCase() === "C") {
|
|
432
|
+
onCancel();
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
if (key.leftArrow || key.upArrow) {
|
|
436
|
+
if (focusedOption === "cancel") {
|
|
437
|
+
const lastIndex = options.length - 1;
|
|
438
|
+
setSelectedIndex(lastIndex);
|
|
439
|
+
setFocusedOption(options[lastIndex]);
|
|
440
|
+
} else {
|
|
441
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
442
|
+
if (currentIdx > 0) {
|
|
443
|
+
setSelectedIndex(currentIdx - 1);
|
|
444
|
+
setFocusedOption(options[currentIdx - 1]);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (key.rightArrow || key.downArrow) {
|
|
449
|
+
if (focusedOption !== "cancel") {
|
|
450
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
451
|
+
if (currentIdx < options.length - 1) {
|
|
452
|
+
setSelectedIndex(currentIdx + 1);
|
|
453
|
+
setFocusedOption(options[currentIdx + 1]);
|
|
454
|
+
} else {
|
|
455
|
+
setFocusedOption("cancel");
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
if (key.tab) {
|
|
460
|
+
if (focusedOption === "cancel") {
|
|
461
|
+
setSelectedIndex(0);
|
|
462
|
+
setFocusedOption(options[0]);
|
|
463
|
+
} else {
|
|
464
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
465
|
+
if (currentIdx < options.length - 1) {
|
|
466
|
+
setSelectedIndex(currentIdx + 1);
|
|
467
|
+
setFocusedOption(options[currentIdx + 1]);
|
|
468
|
+
} else {
|
|
469
|
+
setFocusedOption("cancel");
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
if (key.return) {
|
|
474
|
+
if (focusedOption === "cancel") {
|
|
475
|
+
onCancel();
|
|
476
|
+
} else {
|
|
477
|
+
onSelect(focusedOption);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (input) {
|
|
481
|
+
const upperInput = input.toUpperCase();
|
|
482
|
+
if (upperInput === "A") {
|
|
483
|
+
onSelect("all");
|
|
484
|
+
} else if (upperInput === "P") {
|
|
485
|
+
onSelect("public");
|
|
486
|
+
} else if (upperInput === "R") {
|
|
487
|
+
onSelect("private");
|
|
488
|
+
} else if (upperInput === "I" && hasInternalRepos) {
|
|
489
|
+
onSelect("internal");
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
});
|
|
493
|
+
const getButtonLabel = (filter) => {
|
|
494
|
+
switch (filter) {
|
|
495
|
+
case "all":
|
|
496
|
+
return "All Repositories";
|
|
497
|
+
case "public":
|
|
498
|
+
return "Public Only";
|
|
499
|
+
case "private":
|
|
500
|
+
return "Private Only";
|
|
501
|
+
case "internal":
|
|
502
|
+
return "Internal Only";
|
|
503
|
+
}
|
|
504
|
+
};
|
|
505
|
+
const getButtonColor = (filter) => {
|
|
506
|
+
if (filter === currentFilter) {
|
|
507
|
+
return "green";
|
|
508
|
+
}
|
|
509
|
+
return focusedOption === filter ? "cyan" : "gray";
|
|
510
|
+
};
|
|
511
|
+
return /* @__PURE__ */ jsxs7(Box7, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 3, paddingY: 2, width: 60, children: [
|
|
512
|
+
/* @__PURE__ */ jsx8(Text8, { bold: true, children: "Visibility Filter" }),
|
|
513
|
+
/* @__PURE__ */ jsx8(Box7, { height: 1, children: /* @__PURE__ */ jsx8(Text8, { children: " " }) }),
|
|
514
|
+
/* @__PURE__ */ jsx8(Text8, { color: "gray", children: "Select which repositories to display:" }),
|
|
515
|
+
/* @__PURE__ */ jsx8(Box7, { height: 1, children: /* @__PURE__ */ jsx8(Text8, { children: " " }) }),
|
|
516
|
+
/* @__PURE__ */ jsx8(Box7, { flexDirection: "column", gap: 1, children: options.map((option) => /* @__PURE__ */ jsx8(
|
|
517
|
+
Box7,
|
|
518
|
+
{
|
|
519
|
+
borderStyle: focusedOption === option ? "round" : "single",
|
|
520
|
+
borderColor: getButtonColor(option),
|
|
521
|
+
paddingX: 2,
|
|
522
|
+
paddingY: 1,
|
|
523
|
+
width: "100%",
|
|
524
|
+
children: /* @__PURE__ */ jsxs7(Box7, { flexDirection: "row", justifyContent: "space-between", children: [
|
|
525
|
+
/* @__PURE__ */ jsx8(Text8, { color: focusedOption === option ? "white" : void 0, children: focusedOption === option ? chalk7[getButtonColor(option)].bold(getButtonLabel(option)) : chalk7[getButtonColor(option)](getButtonLabel(option)) }),
|
|
526
|
+
option === currentFilter && /* @__PURE__ */ jsx8(Text8, { color: "green", children: " \u2713 Current" })
|
|
527
|
+
] })
|
|
528
|
+
},
|
|
529
|
+
option
|
|
530
|
+
)) }),
|
|
531
|
+
/* @__PURE__ */ jsx8(Box7, { height: 1, children: /* @__PURE__ */ jsx8(Text8, { children: " " }) }),
|
|
532
|
+
/* @__PURE__ */ jsx8(
|
|
533
|
+
Box7,
|
|
534
|
+
{
|
|
535
|
+
borderStyle: focusedOption === "cancel" ? "round" : "single",
|
|
536
|
+
borderColor: focusedOption === "cancel" ? "white" : "gray",
|
|
537
|
+
paddingX: 2,
|
|
538
|
+
paddingY: 1,
|
|
539
|
+
width: "100%",
|
|
540
|
+
justifyContent: "center",
|
|
541
|
+
children: /* @__PURE__ */ jsx8(Text8, { children: focusedOption === "cancel" ? chalk7.white.bold("Cancel") : chalk7.gray("Cancel") })
|
|
542
|
+
}
|
|
543
|
+
),
|
|
544
|
+
/* @__PURE__ */ jsx8(Box7, { height: 1, children: /* @__PURE__ */ jsx8(Text8, { children: " " }) }),
|
|
545
|
+
/* @__PURE__ */ jsx8(Box7, { flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs7(Text8, { color: "gray", children: [
|
|
546
|
+
"\u2191\u2193 Navigate \u2022 Enter Select \u2022 A All \u2022 P Public \u2022 R Private",
|
|
547
|
+
hasInternalRepos && " \u2022 I Internal",
|
|
548
|
+
" \u2022 C/Esc Cancel"
|
|
549
|
+
] }) })
|
|
550
|
+
] });
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// src/ui/components/modals/SortModal.tsx
|
|
554
|
+
import { useState as useState8, useEffect as useEffect5 } from "react";
|
|
555
|
+
import { Box as Box8, Text as Text9, useInput as useInput8 } from "ink";
|
|
556
|
+
import chalk8 from "chalk";
|
|
557
|
+
import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
558
|
+
function SortModal({
|
|
559
|
+
currentSort,
|
|
560
|
+
onSelect,
|
|
561
|
+
onCancel
|
|
562
|
+
}) {
|
|
563
|
+
const options = ["updated", "pushed", "name", "stars"];
|
|
564
|
+
const [selectedIndex, setSelectedIndex] = useState8(0);
|
|
565
|
+
const [focusedOption, setFocusedOption] = useState8("updated");
|
|
566
|
+
useEffect5(() => {
|
|
567
|
+
const currentIndex = options.indexOf(currentSort);
|
|
568
|
+
if (currentIndex !== -1) {
|
|
569
|
+
setSelectedIndex(currentIndex);
|
|
570
|
+
setFocusedOption(currentSort);
|
|
571
|
+
}
|
|
572
|
+
}, [currentSort]);
|
|
573
|
+
useInput8((input, key) => {
|
|
574
|
+
if (key.escape || input && input.toUpperCase() === "C") {
|
|
575
|
+
onCancel();
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
if (key.leftArrow || key.upArrow) {
|
|
579
|
+
if (focusedOption === "cancel") {
|
|
580
|
+
const lastIndex = options.length - 1;
|
|
581
|
+
setSelectedIndex(lastIndex);
|
|
582
|
+
setFocusedOption(options[lastIndex]);
|
|
583
|
+
} else {
|
|
584
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
585
|
+
if (currentIdx > 0) {
|
|
586
|
+
setSelectedIndex(currentIdx - 1);
|
|
587
|
+
setFocusedOption(options[currentIdx - 1]);
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
if (key.rightArrow || key.downArrow) {
|
|
592
|
+
if (focusedOption !== "cancel") {
|
|
593
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
594
|
+
if (currentIdx < options.length - 1) {
|
|
595
|
+
setSelectedIndex(currentIdx + 1);
|
|
596
|
+
setFocusedOption(options[currentIdx + 1]);
|
|
597
|
+
} else {
|
|
598
|
+
setFocusedOption("cancel");
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
if (key.tab) {
|
|
603
|
+
if (focusedOption === "cancel") {
|
|
604
|
+
setSelectedIndex(0);
|
|
605
|
+
setFocusedOption(options[0]);
|
|
606
|
+
} else {
|
|
607
|
+
const currentIdx = options.indexOf(focusedOption);
|
|
608
|
+
if (currentIdx < options.length - 1) {
|
|
609
|
+
setSelectedIndex(currentIdx + 1);
|
|
610
|
+
setFocusedOption(options[currentIdx + 1]);
|
|
611
|
+
} else {
|
|
612
|
+
setFocusedOption("cancel");
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
if (key.return) {
|
|
617
|
+
if (focusedOption === "cancel") {
|
|
618
|
+
onCancel();
|
|
619
|
+
} else {
|
|
620
|
+
onSelect(focusedOption);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
if (input) {
|
|
624
|
+
const upperInput = input.toUpperCase();
|
|
625
|
+
if (upperInput === "U") {
|
|
626
|
+
onSelect("updated");
|
|
627
|
+
} else if (upperInput === "P") {
|
|
628
|
+
onSelect("pushed");
|
|
629
|
+
} else if (upperInput === "N") {
|
|
630
|
+
onSelect("name");
|
|
631
|
+
} else if (upperInput === "S") {
|
|
632
|
+
onSelect("stars");
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
const getButtonLabel = (sort) => {
|
|
637
|
+
switch (sort) {
|
|
638
|
+
case "updated":
|
|
639
|
+
return "Last Updated";
|
|
640
|
+
case "pushed":
|
|
641
|
+
return "Last Pushed";
|
|
642
|
+
case "name":
|
|
643
|
+
return "Name";
|
|
644
|
+
case "stars":
|
|
645
|
+
return "Stars";
|
|
646
|
+
}
|
|
647
|
+
};
|
|
648
|
+
const getButtonDescription = (sort) => {
|
|
649
|
+
switch (sort) {
|
|
650
|
+
case "updated":
|
|
651
|
+
return "When the repository was last modified";
|
|
652
|
+
case "pushed":
|
|
653
|
+
return "When code was last pushed";
|
|
654
|
+
case "name":
|
|
655
|
+
return "Alphabetical by repository name";
|
|
656
|
+
case "stars":
|
|
657
|
+
return "Number of stars";
|
|
658
|
+
}
|
|
659
|
+
};
|
|
660
|
+
const getButtonColor = (sort) => {
|
|
661
|
+
if (sort === currentSort) {
|
|
662
|
+
return "green";
|
|
663
|
+
}
|
|
664
|
+
return focusedOption === sort ? "cyan" : "gray";
|
|
665
|
+
};
|
|
666
|
+
return /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 3, paddingY: 2, width: 60, children: [
|
|
667
|
+
/* @__PURE__ */ jsx9(Text9, { bold: true, children: "Sort By" }),
|
|
668
|
+
/* @__PURE__ */ jsx9(Box8, { height: 1, children: /* @__PURE__ */ jsx9(Text9, { children: " " }) }),
|
|
669
|
+
/* @__PURE__ */ jsx9(Text9, { color: "gray", children: "Select how to sort repositories:" }),
|
|
670
|
+
/* @__PURE__ */ jsx9(Box8, { height: 1, children: /* @__PURE__ */ jsx9(Text9, { children: " " }) }),
|
|
671
|
+
/* @__PURE__ */ jsx9(Box8, { flexDirection: "column", gap: 1, children: options.map((option) => /* @__PURE__ */ jsx9(
|
|
672
|
+
Box8,
|
|
673
|
+
{
|
|
674
|
+
borderStyle: focusedOption === option ? "round" : "single",
|
|
675
|
+
borderColor: getButtonColor(option),
|
|
676
|
+
paddingX: 2,
|
|
677
|
+
paddingY: 1,
|
|
678
|
+
width: "100%",
|
|
679
|
+
children: /* @__PURE__ */ jsxs8(Box8, { flexDirection: "column", children: [
|
|
680
|
+
/* @__PURE__ */ jsxs8(Box8, { flexDirection: "row", justifyContent: "space-between", children: [
|
|
681
|
+
/* @__PURE__ */ jsx9(Text9, { color: focusedOption === option ? "white" : void 0, children: focusedOption === option ? chalk8[getButtonColor(option)].bold(getButtonLabel(option)) : chalk8[getButtonColor(option)](getButtonLabel(option)) }),
|
|
682
|
+
option === currentSort && /* @__PURE__ */ jsx9(Text9, { color: "green", children: " \u2713 Current" })
|
|
683
|
+
] }),
|
|
684
|
+
/* @__PURE__ */ jsx9(Text9, { color: "gray", dimColor: true, children: getButtonDescription(option) })
|
|
685
|
+
] })
|
|
686
|
+
},
|
|
687
|
+
option
|
|
688
|
+
)) }),
|
|
689
|
+
/* @__PURE__ */ jsx9(Box8, { height: 1, children: /* @__PURE__ */ jsx9(Text9, { children: " " }) }),
|
|
690
|
+
/* @__PURE__ */ jsx9(
|
|
691
|
+
Box8,
|
|
692
|
+
{
|
|
693
|
+
borderStyle: focusedOption === "cancel" ? "round" : "single",
|
|
694
|
+
borderColor: focusedOption === "cancel" ? "white" : "gray",
|
|
695
|
+
paddingX: 2,
|
|
696
|
+
paddingY: 1,
|
|
697
|
+
width: "100%",
|
|
698
|
+
justifyContent: "center",
|
|
699
|
+
children: /* @__PURE__ */ jsx9(Text9, { children: focusedOption === "cancel" ? chalk8.white.bold("Cancel") : chalk8.gray("Cancel") })
|
|
700
|
+
}
|
|
701
|
+
),
|
|
702
|
+
/* @__PURE__ */ jsx9(Box8, { height: 1, children: /* @__PURE__ */ jsx9(Text9, { children: " " }) }),
|
|
703
|
+
/* @__PURE__ */ jsx9(Box8, { flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsx9(Text9, { color: "gray", children: "\u2191\u2193 Navigate \u2022 Enter Select \u2022 U Updated \u2022 P Pushed \u2022 N Name \u2022 S Stars \u2022 C/Esc Cancel" }) })
|
|
704
|
+
] });
|
|
705
|
+
}
|
|
706
|
+
|
|
363
707
|
// src/ui/components/repo/RepoRow.tsx
|
|
364
|
-
import {
|
|
708
|
+
import { Box as Box9, Text as Text10 } from "ink";
|
|
709
|
+
import chalk9 from "chalk";
|
|
710
|
+
import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
365
711
|
function RepoRow({
|
|
366
712
|
repo,
|
|
367
713
|
selected,
|
|
@@ -377,64 +723,93 @@ function RepoRow({
|
|
|
377
723
|
const commitsBehind = hasCommitData ? repo.parent.defaultBranchRef.target.history.totalCount - repo.defaultBranchRef.target.history.totalCount : 0;
|
|
378
724
|
const showCommitsBehind = forkTracking && hasCommitData;
|
|
379
725
|
let line1 = "";
|
|
380
|
-
const numColor = selected ?
|
|
381
|
-
const nameColor = selected ?
|
|
726
|
+
const numColor = selected ? chalk9.cyan : chalk9.gray;
|
|
727
|
+
const nameColor = selected ? chalk9.cyan.bold : chalk9.white;
|
|
382
728
|
line1 += numColor(`${String(index).padStart(3, " ")}.`);
|
|
383
729
|
line1 += nameColor(` ${repo.nameWithOwner}`);
|
|
384
|
-
if (repo.isPrivate) line1 +=
|
|
385
|
-
if (repo.isArchived) line1 += " " +
|
|
730
|
+
if (repo.isPrivate) line1 += chalk9.yellow(" Private");
|
|
731
|
+
if (repo.isArchived) line1 += " " + chalk9.bgGray.whiteBright(" Archived ") + " ";
|
|
386
732
|
if (repo.isFork && repo.parent) {
|
|
387
|
-
line1 +=
|
|
733
|
+
line1 += chalk9.blue(` Fork of ${repo.parent.nameWithOwner}`);
|
|
388
734
|
if (showCommitsBehind) {
|
|
389
735
|
if (commitsBehind > 0) {
|
|
390
|
-
line1 +=
|
|
736
|
+
line1 += chalk9.yellow(` (${commitsBehind} behind)`);
|
|
391
737
|
} else {
|
|
392
|
-
line1 +=
|
|
738
|
+
line1 += chalk9.green(` (0 behind)`);
|
|
393
739
|
}
|
|
394
740
|
}
|
|
395
741
|
}
|
|
396
742
|
let line2 = " ";
|
|
397
|
-
const metaColor = selected ?
|
|
398
|
-
if (langName) line2 +=
|
|
743
|
+
const metaColor = selected ? chalk9.white : chalk9.gray;
|
|
744
|
+
if (langName) line2 += chalk9.hex(langColor)("\u25CF ") + metaColor(`${langName} `);
|
|
399
745
|
line2 += metaColor(`\u2605 ${repo.stargazerCount} \u2442 ${repo.forkCount} Updated ${formatDate(repo.updatedAt)}`);
|
|
400
746
|
const line3 = repo.description ? ` ${truncate(repo.description, Math.max(30, maxWidth - 10))}` : null;
|
|
401
747
|
let fullText = line1 + "\n" + line2;
|
|
402
748
|
if (line3) fullText += "\n" + metaColor(line3);
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
749
|
+
const spacingAbove = Math.floor(spacingLines / 2);
|
|
750
|
+
const spacingBelow = spacingLines - spacingAbove;
|
|
751
|
+
return /* @__PURE__ */ jsxs9(Box9, { flexDirection: "column", backgroundColor: selected ? "gray" : void 0, children: [
|
|
752
|
+
spacingAbove > 0 && /* @__PURE__ */ jsx10(Box9, { height: spacingAbove, children: /* @__PURE__ */ jsx10(Text10, { children: " " }) }),
|
|
753
|
+
/* @__PURE__ */ jsx10(Text10, { children: dim ? chalk9.dim(fullText) : fullText }),
|
|
754
|
+
spacingBelow > 0 && /* @__PURE__ */ jsx10(Box9, { height: spacingBelow, children: /* @__PURE__ */ jsx10(Text10, { children: " " }) })
|
|
406
755
|
] });
|
|
407
756
|
}
|
|
408
757
|
|
|
409
758
|
// src/ui/components/repo/FilterInput.tsx
|
|
410
|
-
import { Box as
|
|
411
|
-
import
|
|
412
|
-
import { jsx as
|
|
759
|
+
import { Box as Box10, Text as Text11 } from "ink";
|
|
760
|
+
import TextInput2 from "ink-text-input";
|
|
761
|
+
import { jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
413
762
|
|
|
414
763
|
// src/ui/components/repo/RepoListHeader.tsx
|
|
415
|
-
import { Box as
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
764
|
+
import { Box as Box11, Text as Text12 } from "ink";
|
|
765
|
+
import { Fragment as Fragment4, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
766
|
+
function RepoListHeader({
|
|
767
|
+
ownerContext,
|
|
768
|
+
sortKey,
|
|
769
|
+
sortDir,
|
|
770
|
+
forkTracking,
|
|
771
|
+
filter,
|
|
772
|
+
searchActive,
|
|
773
|
+
searchLoading,
|
|
774
|
+
visibilityFilter = "all"
|
|
775
|
+
}) {
|
|
776
|
+
return /* @__PURE__ */ jsxs11(Box11, { flexDirection: "row", gap: 2, marginBottom: 1, children: [
|
|
777
|
+
/* @__PURE__ */ jsx12(Text12, { color: "cyan", bold: true, children: ownerContext === "personal" ? "Personal Account" : `Organization: ${ownerContext.name || ownerContext.login}` }),
|
|
778
|
+
/* @__PURE__ */ jsxs11(Text12, { color: "gray", dimColor: true, children: [
|
|
779
|
+
"Sort: ",
|
|
780
|
+
sortKey,
|
|
781
|
+
" ",
|
|
782
|
+
sortDir === "asc" ? "\u2191" : "\u2193"
|
|
783
|
+
] }),
|
|
784
|
+
/* @__PURE__ */ jsxs11(Text12, { color: "gray", dimColor: true, children: [
|
|
785
|
+
"Fork Status - Commits Behind: ",
|
|
786
|
+
forkTracking ? "ON" : "OFF"
|
|
787
|
+
] }),
|
|
788
|
+
visibilityFilter !== "all" && /* @__PURE__ */ jsxs11(Text12, { color: "yellow", children: [
|
|
789
|
+
"Visibility: ",
|
|
790
|
+
visibilityFilter === "public" ? "Public" : visibilityFilter === "private" ? "Private" : "Internal"
|
|
791
|
+
] }),
|
|
792
|
+
filter && !searchActive && /* @__PURE__ */ jsxs11(Text12, { color: "cyan", children: [
|
|
793
|
+
'Filter: "',
|
|
794
|
+
filter,
|
|
795
|
+
'"'
|
|
796
|
+
] }),
|
|
797
|
+
searchActive && /* @__PURE__ */ jsxs11(Fragment4, { children: [
|
|
798
|
+
/* @__PURE__ */ jsxs11(Text12, { color: "cyan", children: [
|
|
799
|
+
'Search: "',
|
|
800
|
+
filter.trim(),
|
|
801
|
+
'"'
|
|
802
|
+
] }),
|
|
803
|
+
searchLoading && /* @__PURE__ */ jsx12(Box11, { marginLeft: 1, children: /* @__PURE__ */ jsxs11(Text12, { color: "cyan", children: [
|
|
804
|
+
/* @__PURE__ */ jsx12(SlowSpinner, {}),
|
|
805
|
+
" Searching\u2026"
|
|
806
|
+
] }) })
|
|
807
|
+
] })
|
|
808
|
+
] });
|
|
431
809
|
}
|
|
432
810
|
|
|
433
|
-
// src/ui/components/repo/RepoListHeader.tsx
|
|
434
|
-
import { Fragment, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
435
|
-
|
|
436
811
|
// src/ui/RepoList.tsx
|
|
437
|
-
import { Fragment as
|
|
812
|
+
import { Fragment as Fragment5, jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
438
813
|
var getPageSize = () => {
|
|
439
814
|
const envValue = process.env.REPOS_PER_FETCH;
|
|
440
815
|
if (envValue) {
|
|
@@ -450,63 +825,66 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
450
825
|
const { exit } = useApp();
|
|
451
826
|
const { stdout } = useStdout();
|
|
452
827
|
const client = useMemo(() => makeClient(token), [token]);
|
|
453
|
-
const [debugMessages, setDebugMessages] =
|
|
828
|
+
const [debugMessages, setDebugMessages] = useState9([]);
|
|
454
829
|
const addDebugMessage = (msg) => {
|
|
455
830
|
if (process.env.GH_MANAGER_DEBUG === "1") {
|
|
456
831
|
setDebugMessages((prev) => [...prev.slice(-9), msg]);
|
|
457
832
|
}
|
|
458
833
|
};
|
|
459
|
-
|
|
834
|
+
React9.useEffect(() => {
|
|
460
835
|
addDebugMessage(`[RepoList] Component mounted`);
|
|
461
836
|
}, []);
|
|
462
837
|
const terminalWidth = stdout?.columns ?? 80;
|
|
463
838
|
const availableHeight = maxVisibleRows ?? 20;
|
|
464
|
-
const [items, setItems] =
|
|
465
|
-
const [cursor, setCursor] =
|
|
466
|
-
const [endCursor, setEndCursor] =
|
|
467
|
-
const [hasNextPage, setHasNextPage] =
|
|
468
|
-
const [totalCount, setTotalCount] =
|
|
469
|
-
const [loading, setLoading] =
|
|
470
|
-
const [sortingLoading, setSortingLoading] =
|
|
471
|
-
const [refreshing, setRefreshing] =
|
|
472
|
-
const [loadingMore, setLoadingMore] =
|
|
473
|
-
const [error, setError] =
|
|
474
|
-
const [rateLimit, setRateLimit] =
|
|
475
|
-
const [prevRateLimit, setPrevRateLimit] =
|
|
476
|
-
const [density, setDensity] =
|
|
477
|
-
const [prefsLoaded, setPrefsLoaded] =
|
|
478
|
-
const [ownerContext, setOwnerContext] =
|
|
479
|
-
const [ownerAffiliations, setOwnerAffiliations] =
|
|
480
|
-
const [orgSwitcherOpen, setOrgSwitcherOpen] =
|
|
481
|
-
const [searchItems, setSearchItems] =
|
|
482
|
-
const [searchEndCursor, setSearchEndCursor] =
|
|
483
|
-
const [searchHasNextPage, setSearchHasNextPage] =
|
|
484
|
-
const [searchTotalCount, setSearchTotalCount] =
|
|
485
|
-
const [searchLoading, setSearchLoading] =
|
|
486
|
-
const [deleteMode, setDeleteMode] =
|
|
487
|
-
const [deleteTarget, setDeleteTarget] =
|
|
488
|
-
const [deleteCode, setDeleteCode] =
|
|
489
|
-
const [typedCode, setTypedCode] =
|
|
490
|
-
const [deleting, setDeleting] =
|
|
491
|
-
const [deleteError, setDeleteError] =
|
|
492
|
-
const [deleteConfirmStage, setDeleteConfirmStage] =
|
|
493
|
-
const [confirmFocus, setConfirmFocus] =
|
|
494
|
-
const [archiveMode, setArchiveMode] =
|
|
495
|
-
const [archiveTarget, setArchiveTarget] =
|
|
496
|
-
const [archiving, setArchiving] =
|
|
497
|
-
const [archiveError, setArchiveError] =
|
|
498
|
-
const [archiveFocus, setArchiveFocus] =
|
|
499
|
-
const [syncMode, setSyncMode] =
|
|
500
|
-
const [syncTarget, setSyncTarget] =
|
|
501
|
-
const [syncing, setSyncing] =
|
|
502
|
-
const [syncError, setSyncError] =
|
|
503
|
-
const [syncFocus, setSyncFocus] =
|
|
504
|
-
const [syncTrigger, setSyncTrigger] =
|
|
505
|
-
const [infoMode, setInfoMode] =
|
|
506
|
-
const [infoRepo, setInfoRepo] =
|
|
507
|
-
const [logoutMode, setLogoutMode] =
|
|
508
|
-
const [logoutFocus, setLogoutFocus] =
|
|
509
|
-
const [logoutError, setLogoutError] =
|
|
839
|
+
const [items, setItems] = useState9([]);
|
|
840
|
+
const [cursor, setCursor] = useState9(0);
|
|
841
|
+
const [endCursor, setEndCursor] = useState9(null);
|
|
842
|
+
const [hasNextPage, setHasNextPage] = useState9(false);
|
|
843
|
+
const [totalCount, setTotalCount] = useState9(0);
|
|
844
|
+
const [loading, setLoading] = useState9(true);
|
|
845
|
+
const [sortingLoading, setSortingLoading] = useState9(false);
|
|
846
|
+
const [refreshing, setRefreshing] = useState9(false);
|
|
847
|
+
const [loadingMore, setLoadingMore] = useState9(false);
|
|
848
|
+
const [error, setError] = useState9(null);
|
|
849
|
+
const [rateLimit, setRateLimit] = useState9(void 0);
|
|
850
|
+
const [prevRateLimit, setPrevRateLimit] = useState9(void 0);
|
|
851
|
+
const [density, setDensity] = useState9(2);
|
|
852
|
+
const [prefsLoaded, setPrefsLoaded] = useState9(false);
|
|
853
|
+
const [ownerContext, setOwnerContext] = useState9("personal");
|
|
854
|
+
const [ownerAffiliations, setOwnerAffiliations] = useState9(["OWNER"]);
|
|
855
|
+
const [orgSwitcherOpen, setOrgSwitcherOpen] = useState9(false);
|
|
856
|
+
const [searchItems, setSearchItems] = useState9([]);
|
|
857
|
+
const [searchEndCursor, setSearchEndCursor] = useState9(null);
|
|
858
|
+
const [searchHasNextPage, setSearchHasNextPage] = useState9(false);
|
|
859
|
+
const [searchTotalCount, setSearchTotalCount] = useState9(0);
|
|
860
|
+
const [searchLoading, setSearchLoading] = useState9(false);
|
|
861
|
+
const [deleteMode, setDeleteMode] = useState9(false);
|
|
862
|
+
const [deleteTarget, setDeleteTarget] = useState9(null);
|
|
863
|
+
const [deleteCode, setDeleteCode] = useState9("");
|
|
864
|
+
const [typedCode, setTypedCode] = useState9("");
|
|
865
|
+
const [deleting, setDeleting] = useState9(false);
|
|
866
|
+
const [deleteError, setDeleteError] = useState9(null);
|
|
867
|
+
const [deleteConfirmStage, setDeleteConfirmStage] = useState9(false);
|
|
868
|
+
const [confirmFocus, setConfirmFocus] = useState9("delete");
|
|
869
|
+
const [archiveMode, setArchiveMode] = useState9(false);
|
|
870
|
+
const [archiveTarget, setArchiveTarget] = useState9(null);
|
|
871
|
+
const [archiving, setArchiving] = useState9(false);
|
|
872
|
+
const [archiveError, setArchiveError] = useState9(null);
|
|
873
|
+
const [archiveFocus, setArchiveFocus] = useState9("confirm");
|
|
874
|
+
const [syncMode, setSyncMode] = useState9(false);
|
|
875
|
+
const [syncTarget, setSyncTarget] = useState9(null);
|
|
876
|
+
const [syncing, setSyncing] = useState9(false);
|
|
877
|
+
const [syncError, setSyncError] = useState9(null);
|
|
878
|
+
const [syncFocus, setSyncFocus] = useState9("confirm");
|
|
879
|
+
const [syncTrigger, setSyncTrigger] = useState9(false);
|
|
880
|
+
const [infoMode, setInfoMode] = useState9(false);
|
|
881
|
+
const [infoRepo, setInfoRepo] = useState9(null);
|
|
882
|
+
const [logoutMode, setLogoutMode] = useState9(false);
|
|
883
|
+
const [logoutFocus, setLogoutFocus] = useState9("confirm");
|
|
884
|
+
const [logoutError, setLogoutError] = useState9(null);
|
|
885
|
+
const [visibilityMode, setVisibilityMode] = useState9(false);
|
|
886
|
+
const [hasInternalRepos, setHasInternalRepos] = useState9(false);
|
|
887
|
+
const [sortMode, setSortMode] = useState9(false);
|
|
510
888
|
function closeArchiveModal() {
|
|
511
889
|
setArchiveMode(false);
|
|
512
890
|
setArchiveTarget(null);
|
|
@@ -629,11 +1007,13 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
629
1007
|
setDeleteError("Failed to delete repository. Ensure delete_repo scope and admin permissions.");
|
|
630
1008
|
}
|
|
631
1009
|
}
|
|
632
|
-
const [filter, setFilter] =
|
|
633
|
-
const [filterMode, setFilterMode] =
|
|
634
|
-
const [sortKey, setSortKey] =
|
|
635
|
-
const [sortDir, setSortDir] =
|
|
636
|
-
const [forkTracking, setForkTracking] =
|
|
1010
|
+
const [filter, setFilter] = useState9("");
|
|
1011
|
+
const [filterMode, setFilterMode] = useState9(false);
|
|
1012
|
+
const [sortKey, setSortKey] = useState9("updated");
|
|
1013
|
+
const [sortDir, setSortDir] = useState9("desc");
|
|
1014
|
+
const [forkTracking, setForkTracking] = useState9(true);
|
|
1015
|
+
const [visibilityFilter, setVisibilityFilter] = useState9("all");
|
|
1016
|
+
const previousVisibilityFilter = useRef("all");
|
|
637
1017
|
const sortFieldMap = {
|
|
638
1018
|
"updated": "UPDATED_AT",
|
|
639
1019
|
"pushed": "PUSHED_AT",
|
|
@@ -654,6 +1034,9 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
654
1034
|
direction: sortDir.toUpperCase()
|
|
655
1035
|
};
|
|
656
1036
|
const orgLogin2 = ownerContext !== "personal" ? ownerContext.login : void 0;
|
|
1037
|
+
let privacy;
|
|
1038
|
+
if (visibilityFilter === "public") privacy = "PUBLIC";
|
|
1039
|
+
else if (visibilityFilter === "private") privacy = "PRIVATE";
|
|
657
1040
|
const page = await fetchViewerReposPageUnified(
|
|
658
1041
|
token,
|
|
659
1042
|
PAGE_SIZE,
|
|
@@ -662,12 +1045,16 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
662
1045
|
overrideForkTracking ?? forkTracking,
|
|
663
1046
|
policy ?? (after ? "network-only" : "cache-first"),
|
|
664
1047
|
ownerAffiliations,
|
|
665
|
-
orgLogin2
|
|
1048
|
+
orgLogin2,
|
|
1049
|
+
privacy
|
|
666
1050
|
);
|
|
667
1051
|
setItems((prev) => reset || !after ? page.nodes : [...prev, ...page.nodes]);
|
|
668
1052
|
setEndCursor(page.endCursor);
|
|
669
1053
|
setHasNextPage(page.hasNextPage);
|
|
670
1054
|
setTotalCount(page.totalCount);
|
|
1055
|
+
if (page.nodes.some((repo) => repo.visibility === "INTERNAL")) {
|
|
1056
|
+
setHasInternalRepos(true);
|
|
1057
|
+
}
|
|
671
1058
|
if (!after) {
|
|
672
1059
|
try {
|
|
673
1060
|
const key = makeApolloKey({
|
|
@@ -753,7 +1140,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
753
1140
|
setSearchLoading(false);
|
|
754
1141
|
}
|
|
755
1142
|
};
|
|
756
|
-
|
|
1143
|
+
useEffect6(() => {
|
|
757
1144
|
const ui = getUIPrefs();
|
|
758
1145
|
if (ui.density !== void 0) setDensity(ui.density);
|
|
759
1146
|
if (ui.sortKey && ["updated", "pushed", "name", "stars"].includes(ui.sortKey)) {
|
|
@@ -764,6 +1151,9 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
764
1151
|
}
|
|
765
1152
|
if (ui.forkTracking !== void 0) setForkTracking(ui.forkTracking);
|
|
766
1153
|
else setForkTracking(true);
|
|
1154
|
+
if (ui.visibilityFilter && ["all", "public", "private", "internal"].includes(ui.visibilityFilter)) {
|
|
1155
|
+
setVisibilityFilter(ui.visibilityFilter);
|
|
1156
|
+
}
|
|
767
1157
|
if (ui.ownerContext) {
|
|
768
1158
|
setOwnerContext(ui.ownerContext);
|
|
769
1159
|
if (onOrgContextChange) {
|
|
@@ -775,7 +1165,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
775
1165
|
}
|
|
776
1166
|
setPrefsLoaded(true);
|
|
777
1167
|
}, [onOrgContextChange]);
|
|
778
|
-
|
|
1168
|
+
useEffect6(() => {
|
|
779
1169
|
if (!prefsLoaded) return;
|
|
780
1170
|
let policy = "cache-first";
|
|
781
1171
|
const orgLogin2 = ownerContext !== "personal" ? ownerContext.login : void 0;
|
|
@@ -795,7 +1185,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
795
1185
|
setCursor(0);
|
|
796
1186
|
fetchPage(null, true, false, void 0, policy);
|
|
797
1187
|
}, [client, prefsLoaded, ownerContext, ownerAffiliations]);
|
|
798
|
-
|
|
1188
|
+
useEffect6(() => {
|
|
799
1189
|
if (!searchActive) {
|
|
800
1190
|
if (items.length > 0) {
|
|
801
1191
|
let policy = "cache-first";
|
|
@@ -834,7 +1224,24 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
834
1224
|
}
|
|
835
1225
|
}
|
|
836
1226
|
}, [sortKey, sortDir]);
|
|
837
|
-
|
|
1227
|
+
useEffect6(() => {
|
|
1228
|
+
if (visibilityFilter !== "all" || previousVisibilityFilter.current && previousVisibilityFilter.current !== visibilityFilter) {
|
|
1229
|
+
if (!searchActive) {
|
|
1230
|
+
if (items.length > 0) {
|
|
1231
|
+
let policy = "network-only";
|
|
1232
|
+
const orgLogin2 = ownerContext !== "personal" ? ownerContext.login : void 0;
|
|
1233
|
+
fetchPage(null, true, true, void 0, policy);
|
|
1234
|
+
}
|
|
1235
|
+
} else {
|
|
1236
|
+
if (!searchLoading && filter.trim().length >= 3) {
|
|
1237
|
+
let policy = "network-only";
|
|
1238
|
+
fetchSearchPage(null, true, policy);
|
|
1239
|
+
}
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
previousVisibilityFilter.current = visibilityFilter;
|
|
1243
|
+
}, [visibilityFilter]);
|
|
1244
|
+
useEffect6(() => {
|
|
838
1245
|
if (viewerLogin && searchActive && !searchLoading && searchItems.length === 0) {
|
|
839
1246
|
let policy = "cache-first";
|
|
840
1247
|
try {
|
|
@@ -854,7 +1261,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
854
1261
|
fetchSearchPage(null, true, policy);
|
|
855
1262
|
}
|
|
856
1263
|
}, [viewerLogin]);
|
|
857
|
-
|
|
1264
|
+
useInput9((input, key) => {
|
|
858
1265
|
if (orgSwitcherOpen) {
|
|
859
1266
|
return;
|
|
860
1267
|
}
|
|
@@ -966,6 +1373,12 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
966
1373
|
}
|
|
967
1374
|
return;
|
|
968
1375
|
}
|
|
1376
|
+
if (visibilityMode) {
|
|
1377
|
+
return;
|
|
1378
|
+
}
|
|
1379
|
+
if (sortMode) {
|
|
1380
|
+
return;
|
|
1381
|
+
}
|
|
969
1382
|
if (filterMode) {
|
|
970
1383
|
if (key.escape) {
|
|
971
1384
|
setFilterMode(false);
|
|
@@ -1014,7 +1427,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1014
1427
|
const repo = visibleItems[cursor];
|
|
1015
1428
|
if (repo) openInBrowser(`https://github.com/${repo.nameWithOwner}`);
|
|
1016
1429
|
}
|
|
1017
|
-
if (key.delete
|
|
1430
|
+
if (key.delete || key.backspace) {
|
|
1018
1431
|
const repo = visibleItems[cursor];
|
|
1019
1432
|
if (repo) {
|
|
1020
1433
|
setDeleteTarget(repo);
|
|
@@ -1119,12 +1532,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1119
1532
|
return;
|
|
1120
1533
|
}
|
|
1121
1534
|
if (input && input.toUpperCase() === "S") {
|
|
1122
|
-
|
|
1123
|
-
const idx = order.indexOf(sortKey);
|
|
1124
|
-
const newSortKey = order[(idx + 1) % order.length];
|
|
1125
|
-
setSortKey(newSortKey);
|
|
1126
|
-
setCursor(0);
|
|
1127
|
-
storeUIPrefs({ sortKey: newSortKey });
|
|
1535
|
+
setSortMode(true);
|
|
1128
1536
|
return;
|
|
1129
1537
|
}
|
|
1130
1538
|
if (input && input.toUpperCase() === "D") {
|
|
@@ -1164,14 +1572,24 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1164
1572
|
});
|
|
1165
1573
|
return;
|
|
1166
1574
|
}
|
|
1575
|
+
if (input && input.toUpperCase() === "V") {
|
|
1576
|
+
setVisibilityMode(true);
|
|
1577
|
+
return;
|
|
1578
|
+
}
|
|
1167
1579
|
});
|
|
1168
1580
|
const filtered = useMemo(() => {
|
|
1581
|
+
let result = items;
|
|
1582
|
+
if (visibilityFilter === "internal") {
|
|
1583
|
+
result = result.filter((r) => r.visibility === "INTERNAL");
|
|
1584
|
+
}
|
|
1169
1585
|
const q = filter.trim().toLowerCase();
|
|
1170
|
-
if (
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1586
|
+
if (q) {
|
|
1587
|
+
result = result.filter(
|
|
1588
|
+
(r) => r.nameWithOwner.toLowerCase().includes(q) || (r.description ? r.description.toLowerCase().includes(q) : false)
|
|
1589
|
+
);
|
|
1590
|
+
}
|
|
1591
|
+
return result;
|
|
1592
|
+
}, [items, filter, visibilityFilter]);
|
|
1175
1593
|
const filteredAndSorted = useMemo(() => {
|
|
1176
1594
|
const arr = [...filtered];
|
|
1177
1595
|
const dir = sortDir === "asc" ? 1 : -1;
|
|
@@ -1194,12 +1612,12 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1194
1612
|
}, [filtered, sortKey, sortDir]);
|
|
1195
1613
|
const searchActive = filter.trim().length >= 3;
|
|
1196
1614
|
const visibleItems = searchActive ? searchItems : filteredAndSorted;
|
|
1197
|
-
|
|
1615
|
+
useEffect6(() => {
|
|
1198
1616
|
if (searchActive) {
|
|
1199
1617
|
addDebugMessage(`[State] searchActive=${searchActive}, searchItems=${searchItems.length}, visibleItems=${visibleItems.length}, filter="${filter}"`);
|
|
1200
1618
|
}
|
|
1201
1619
|
}, [searchActive, searchItems.length, visibleItems.length, filter]);
|
|
1202
|
-
|
|
1620
|
+
useEffect6(() => {
|
|
1203
1621
|
setCursor((c) => Math.min(c, Math.max(0, (searchActive ? searchItems.length : items.length) - 1)));
|
|
1204
1622
|
}, [searchActive, searchItems.length, items.length]);
|
|
1205
1623
|
const headerHeight = 2;
|
|
@@ -1220,7 +1638,7 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1220
1638
|
const end = Math.min(total, start + visibleRepos + buffer);
|
|
1221
1639
|
return { start, end };
|
|
1222
1640
|
}, [visibleItems.length, cursor, listHeight, spacingLines]);
|
|
1223
|
-
|
|
1641
|
+
useEffect6(() => {
|
|
1224
1642
|
const prefetchThreshold = Math.floor(visibleItems.length * 0.8);
|
|
1225
1643
|
const nearEnd = visibleItems.length > 0 && cursor >= prefetchThreshold;
|
|
1226
1644
|
if (searchActive) {
|
|
@@ -1241,89 +1659,89 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1241
1659
|
exec(cmd);
|
|
1242
1660
|
}
|
|
1243
1661
|
const lowRate = rateLimit && rateLimit.remaining <= Math.ceil(rateLimit.limit * 0.1);
|
|
1244
|
-
const modalOpen = deleteMode || archiveMode || syncMode || logoutMode || infoMode;
|
|
1245
|
-
const headerBar = useMemo(() => /* @__PURE__ */
|
|
1246
|
-
/* @__PURE__ */
|
|
1247
|
-
/* @__PURE__ */
|
|
1248
|
-
/* @__PURE__ */
|
|
1662
|
+
const modalOpen = deleteMode || archiveMode || syncMode || logoutMode || infoMode || visibilityMode;
|
|
1663
|
+
const headerBar = useMemo(() => /* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: [
|
|
1664
|
+
/* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", gap: 1, children: [
|
|
1665
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, color: modalOpen ? "gray" : void 0, dimColor: modalOpen ? true : void 0, children: " Repositories" }),
|
|
1666
|
+
/* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1249
1667
|
"(",
|
|
1250
1668
|
visibleItems.length,
|
|
1251
1669
|
"/",
|
|
1252
1670
|
searchActive ? searchTotalCount : totalCount,
|
|
1253
1671
|
")"
|
|
1254
1672
|
] }),
|
|
1255
|
-
(loading || searchLoading) && /* @__PURE__ */
|
|
1673
|
+
(loading || searchLoading) && /* @__PURE__ */ jsx13(Box12, { width: 2, flexShrink: 0, flexGrow: 0, marginLeft: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "yellow", children: /* @__PURE__ */ jsx13(SlowSpinner, {}) }) })
|
|
1256
1674
|
] }),
|
|
1257
|
-
rateLimit && /* @__PURE__ */
|
|
1675
|
+
rateLimit && /* @__PURE__ */ jsxs12(Text13, { color: lowRate ? "yellow" : "gray", children: [
|
|
1258
1676
|
"API: ",
|
|
1259
1677
|
rateLimit.remaining,
|
|
1260
1678
|
"/",
|
|
1261
1679
|
rateLimit.limit,
|
|
1262
|
-
prevRateLimit !== void 0 && prevRateLimit !== rateLimit.remaining && /* @__PURE__ */
|
|
1680
|
+
prevRateLimit !== void 0 && prevRateLimit !== rateLimit.remaining && /* @__PURE__ */ jsx13(Text13, { color: rateLimit.remaining < prevRateLimit ? "red" : "green", children: ` (${rateLimit.remaining - prevRateLimit > 0 ? "+" : ""}${rateLimit.remaining - prevRateLimit})` })
|
|
1263
1681
|
] })
|
|
1264
1682
|
] }), [visibleItems.length, searchActive, searchTotalCount, totalCount, loading, searchLoading, rateLimit, lowRate, modalOpen, prevRateLimit]);
|
|
1265
1683
|
if (error) {
|
|
1266
|
-
return /* @__PURE__ */
|
|
1267
|
-
/* @__PURE__ */
|
|
1268
|
-
/* @__PURE__ */
|
|
1269
|
-
/* @__PURE__ */
|
|
1684
|
+
return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", height: availableHeight, children: [
|
|
1685
|
+
/* @__PURE__ */ jsx13(Box12, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", gap: 1, children: [
|
|
1686
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: " Repositories" }),
|
|
1687
|
+
/* @__PURE__ */ jsx13(Text13, { color: "red", children: "(Error)" })
|
|
1270
1688
|
] }) }),
|
|
1271
|
-
/* @__PURE__ */
|
|
1272
|
-
/* @__PURE__ */
|
|
1273
|
-
/* @__PURE__ */
|
|
1689
|
+
/* @__PURE__ */ jsx13(Box12, { borderStyle: "single", borderColor: "red", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx13(Box12, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", alignItems: "center", children: [
|
|
1690
|
+
/* @__PURE__ */ jsx13(Text13, { color: "red", children: error }),
|
|
1691
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", dimColor: true, children: "Press 'r' to retry or 'q' to quit" }) })
|
|
1274
1692
|
] }) }) }),
|
|
1275
|
-
/* @__PURE__ */
|
|
1693
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", children: "Press 'r' to retry \u2022 'q' to quit" }) })
|
|
1276
1694
|
] });
|
|
1277
1695
|
}
|
|
1278
1696
|
if (loading && items.length === 0 || sortingLoading) {
|
|
1279
|
-
return /* @__PURE__ */
|
|
1280
|
-
/* @__PURE__ */
|
|
1281
|
-
/* @__PURE__ */
|
|
1282
|
-
/* @__PURE__ */
|
|
1697
|
+
return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", height: availableHeight, children: [
|
|
1698
|
+
/* @__PURE__ */ jsx13(Box12, { flexDirection: "row", justifyContent: "space-between", height: 1, marginBottom: 1, children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", gap: 1, children: [
|
|
1699
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: " Repositories" }),
|
|
1700
|
+
/* @__PURE__ */ jsx13(Text13, { color: "gray", children: "(Loading...)" })
|
|
1283
1701
|
] }) }),
|
|
1284
|
-
/* @__PURE__ */
|
|
1285
|
-
/* @__PURE__ */
|
|
1286
|
-
/* @__PURE__ */
|
|
1287
|
-
/* @__PURE__ */
|
|
1702
|
+
/* @__PURE__ */ jsx13(Box12, { borderStyle: "single", borderColor: "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: /* @__PURE__ */ jsx13(Box12, { height: contentHeight, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx13(Box12, { flexDirection: "column", alignItems: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", alignItems: "center", children: [
|
|
1703
|
+
/* @__PURE__ */ jsxs12(Box12, { height: 1, flexDirection: "row", children: [
|
|
1704
|
+
/* @__PURE__ */ jsx13(Box12, { width: 2, flexShrink: 0, flexGrow: 0, children: /* @__PURE__ */ jsx13(Text13, { color: "cyan", children: /* @__PURE__ */ jsx13(SlowSpinner, {}) }) }),
|
|
1705
|
+
/* @__PURE__ */ jsx13(Text13, { color: "cyan", children: refreshing ? "Refreshing..." : sortingLoading ? "Applying sort..." : "Loading repositories..." })
|
|
1288
1706
|
] }),
|
|
1289
|
-
/* @__PURE__ */
|
|
1707
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", children: refreshing ? "Fetching latest repository data" : sortingLoading ? `Sorting by ${sortKey} (${sortDir === "asc" ? "ascending" : "descending"})` : "Fetching your GitHub repositories" }) })
|
|
1290
1708
|
] }) }) }) }),
|
|
1291
|
-
/* @__PURE__ */
|
|
1709
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, paddingX: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", children: "Please wait..." }) })
|
|
1292
1710
|
] });
|
|
1293
1711
|
}
|
|
1294
|
-
return /* @__PURE__ */
|
|
1712
|
+
return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", height: availableHeight, children: [
|
|
1295
1713
|
headerBar,
|
|
1296
|
-
/* @__PURE__ */
|
|
1714
|
+
/* @__PURE__ */ jsx13(Box12, { borderStyle: "single", borderColor: modalOpen ? "gray" : "yellow", paddingX: 1, paddingY: 1, marginX: 1, height: contentHeight + containerPadding + 2, flexDirection: "column", children: deleteMode && deleteTarget ? (
|
|
1297
1715
|
// Centered modal; hide list content while modal is open
|
|
1298
|
-
/* @__PURE__ */
|
|
1299
|
-
/* @__PURE__ */
|
|
1300
|
-
/* @__PURE__ */
|
|
1301
|
-
/* @__PURE__ */
|
|
1716
|
+
/* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "round", borderColor: "red", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
|
|
1717
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: "Delete Confirmation" }),
|
|
1718
|
+
/* @__PURE__ */ jsx13(Text13, { color: "red", children: "\u26A0\uFE0F Delete repository?" }),
|
|
1719
|
+
/* @__PURE__ */ jsx13(Box12, { height: 2, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
1302
1720
|
(() => {
|
|
1303
1721
|
const langName = deleteTarget.primaryLanguage?.name || "";
|
|
1304
1722
|
const langColor = deleteTarget.primaryLanguage?.color || "#666666";
|
|
1305
1723
|
let line1 = "";
|
|
1306
|
-
line1 +=
|
|
1307
|
-
if (deleteTarget.isPrivate) line1 +=
|
|
1308
|
-
if (deleteTarget.isArchived) line1 +=
|
|
1309
|
-
if (deleteTarget.isFork && deleteTarget.parent) line1 +=
|
|
1724
|
+
line1 += chalk10.white(deleteTarget.nameWithOwner);
|
|
1725
|
+
if (deleteTarget.isPrivate) line1 += chalk10.yellow(" Private");
|
|
1726
|
+
if (deleteTarget.isArchived) line1 += chalk10.gray.dim(" Archived");
|
|
1727
|
+
if (deleteTarget.isFork && deleteTarget.parent) line1 += chalk10.blue(` Fork of ${deleteTarget.parent.nameWithOwner}`);
|
|
1310
1728
|
let line2 = "";
|
|
1311
|
-
if (langName) line2 +=
|
|
1312
|
-
line2 +=
|
|
1313
|
-
return /* @__PURE__ */
|
|
1314
|
-
/* @__PURE__ */
|
|
1315
|
-
/* @__PURE__ */
|
|
1729
|
+
if (langName) line2 += chalk10.hex(langColor)("\u25CF ") + chalk10.gray(`${langName} `);
|
|
1730
|
+
line2 += chalk10.gray(`\u2605 ${deleteTarget.stargazerCount} \u2442 ${deleteTarget.forkCount} Updated ${formatDate(deleteTarget.updatedAt)}`);
|
|
1731
|
+
return /* @__PURE__ */ jsxs12(Fragment5, { children: [
|
|
1732
|
+
/* @__PURE__ */ jsx13(Text13, { children: line1 }),
|
|
1733
|
+
/* @__PURE__ */ jsx13(Text13, { children: line2 })
|
|
1316
1734
|
] });
|
|
1317
1735
|
})(),
|
|
1318
|
-
/* @__PURE__ */
|
|
1736
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsxs12(Text13, { children: [
|
|
1319
1737
|
"Type ",
|
|
1320
|
-
/* @__PURE__ */
|
|
1738
|
+
/* @__PURE__ */ jsx13(Text13, { color: "yellow", bold: true, children: deleteCode }),
|
|
1321
1739
|
" to confirm."
|
|
1322
1740
|
] }) }),
|
|
1323
|
-
!deleteConfirmStage && /* @__PURE__ */
|
|
1324
|
-
/* @__PURE__ */
|
|
1325
|
-
/* @__PURE__ */
|
|
1326
|
-
|
|
1741
|
+
!deleteConfirmStage && /* @__PURE__ */ jsxs12(Box12, { marginTop: 1, children: [
|
|
1742
|
+
/* @__PURE__ */ jsx13(Text13, { children: "Confirm code: " }),
|
|
1743
|
+
/* @__PURE__ */ jsx13(
|
|
1744
|
+
TextInput3,
|
|
1327
1745
|
{
|
|
1328
1746
|
value: typedCode,
|
|
1329
1747
|
onChange: (v) => {
|
|
@@ -1349,11 +1767,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1349
1767
|
}
|
|
1350
1768
|
)
|
|
1351
1769
|
] }),
|
|
1352
|
-
deleteConfirmStage && /* @__PURE__ */
|
|
1353
|
-
/* @__PURE__ */
|
|
1354
|
-
/* @__PURE__ */
|
|
1355
|
-
/* @__PURE__ */
|
|
1356
|
-
|
|
1770
|
+
deleteConfirmStage && /* @__PURE__ */ jsxs12(Box12, { marginTop: 1, flexDirection: "column", children: [
|
|
1771
|
+
/* @__PURE__ */ jsx13(Text13, { color: "red", children: "This action will permanently delete the repository. This cannot be undone." }),
|
|
1772
|
+
/* @__PURE__ */ jsxs12(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
|
|
1773
|
+
/* @__PURE__ */ jsx13(
|
|
1774
|
+
Box12,
|
|
1357
1775
|
{
|
|
1358
1776
|
borderStyle: "round",
|
|
1359
1777
|
borderColor: "red",
|
|
@@ -1362,11 +1780,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1362
1780
|
alignItems: "center",
|
|
1363
1781
|
justifyContent: "center",
|
|
1364
1782
|
flexDirection: "column",
|
|
1365
|
-
children: /* @__PURE__ */
|
|
1783
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: confirmFocus === "delete" ? chalk10.bgRed.white.bold(" Delete ") : chalk10.red.bold("Delete") })
|
|
1366
1784
|
}
|
|
1367
1785
|
),
|
|
1368
|
-
/* @__PURE__ */
|
|
1369
|
-
|
|
1786
|
+
/* @__PURE__ */ jsx13(
|
|
1787
|
+
Box12,
|
|
1370
1788
|
{
|
|
1371
1789
|
borderStyle: "round",
|
|
1372
1790
|
borderColor: confirmFocus === "cancel" ? "white" : "gray",
|
|
@@ -1375,17 +1793,17 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1375
1793
|
alignItems: "center",
|
|
1376
1794
|
justifyContent: "center",
|
|
1377
1795
|
flexDirection: "column",
|
|
1378
|
-
children: /* @__PURE__ */
|
|
1796
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: confirmFocus === "cancel" ? chalk10.bgGray.white.bold(" Cancel ") : chalk10.gray.bold("Cancel") })
|
|
1379
1797
|
}
|
|
1380
1798
|
)
|
|
1381
1799
|
] }),
|
|
1382
|
-
/* @__PURE__ */
|
|
1800
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1383
1801
|
"Press Enter to ",
|
|
1384
1802
|
confirmFocus === "delete" ? "Delete" : "Cancel",
|
|
1385
1803
|
" | Y to Delete | C to Cancel"
|
|
1386
1804
|
] }) }),
|
|
1387
|
-
/* @__PURE__ */
|
|
1388
|
-
|
|
1805
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(
|
|
1806
|
+
TextInput3,
|
|
1389
1807
|
{
|
|
1390
1808
|
value: "",
|
|
1391
1809
|
onChange: () => {
|
|
@@ -1398,18 +1816,18 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1398
1816
|
}
|
|
1399
1817
|
) })
|
|
1400
1818
|
] }),
|
|
1401
|
-
deleteError && /* @__PURE__ */
|
|
1402
|
-
deleting && /* @__PURE__ */
|
|
1819
|
+
deleteError && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "magenta", children: deleteError }) }),
|
|
1820
|
+
deleting && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "yellow", children: "Deleting..." }) })
|
|
1403
1821
|
] }) })
|
|
1404
|
-
) : archiveMode && archiveTarget ? /* @__PURE__ */
|
|
1405
|
-
/* @__PURE__ */
|
|
1406
|
-
/* @__PURE__ */
|
|
1407
|
-
/* @__PURE__ */
|
|
1408
|
-
/* @__PURE__ */
|
|
1409
|
-
/* @__PURE__ */
|
|
1410
|
-
/* @__PURE__ */
|
|
1411
|
-
/* @__PURE__ */
|
|
1412
|
-
|
|
1822
|
+
) : archiveMode && archiveTarget ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "round", borderColor: archiveTarget.isArchived ? "green" : "yellow", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
|
|
1823
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: archiveTarget.isArchived ? "Unarchive Confirmation" : "Archive Confirmation" }),
|
|
1824
|
+
/* @__PURE__ */ jsx13(Text13, { color: archiveTarget.isArchived ? "green" : "yellow", children: archiveTarget.isArchived ? "\u21BA Unarchive repository?" : "\u26A0\uFE0F Archive repository?" }),
|
|
1825
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
1826
|
+
/* @__PURE__ */ jsx13(Text13, { children: archiveTarget.nameWithOwner }),
|
|
1827
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { children: archiveTarget.isArchived ? "This will make the repository active again." : "This will make the repository read-only." }) }),
|
|
1828
|
+
/* @__PURE__ */ jsxs12(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
|
|
1829
|
+
/* @__PURE__ */ jsx13(
|
|
1830
|
+
Box12,
|
|
1413
1831
|
{
|
|
1414
1832
|
borderStyle: "round",
|
|
1415
1833
|
borderColor: archiveTarget.isArchived ? "green" : "yellow",
|
|
@@ -1418,11 +1836,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1418
1836
|
alignItems: "center",
|
|
1419
1837
|
justifyContent: "center",
|
|
1420
1838
|
flexDirection: "column",
|
|
1421
|
-
children: /* @__PURE__ */
|
|
1839
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: archiveFocus === "confirm" ? chalk10.bgGreen.white.bold(` ${archiveTarget.isArchived ? "Unarchive" : "Archive"} `) : chalk10.bold[archiveTarget.isArchived ? "green" : "yellow"](archiveTarget.isArchived ? "Unarchive" : "Archive") })
|
|
1422
1840
|
}
|
|
1423
1841
|
),
|
|
1424
|
-
/* @__PURE__ */
|
|
1425
|
-
|
|
1842
|
+
/* @__PURE__ */ jsx13(
|
|
1843
|
+
Box12,
|
|
1426
1844
|
{
|
|
1427
1845
|
borderStyle: "round",
|
|
1428
1846
|
borderColor: archiveFocus === "cancel" ? "white" : "gray",
|
|
@@ -1431,19 +1849,19 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1431
1849
|
alignItems: "center",
|
|
1432
1850
|
justifyContent: "center",
|
|
1433
1851
|
flexDirection: "column",
|
|
1434
|
-
children: /* @__PURE__ */
|
|
1852
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: archiveFocus === "cancel" ? chalk10.bgGray.white.bold(" Cancel ") : chalk10.gray.bold("Cancel") })
|
|
1435
1853
|
}
|
|
1436
1854
|
)
|
|
1437
1855
|
] }),
|
|
1438
|
-
/* @__PURE__ */
|
|
1856
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1439
1857
|
"Press Enter to ",
|
|
1440
1858
|
archiveFocus === "confirm" ? archiveTarget.isArchived ? "Unarchive" : "Archive" : "Cancel",
|
|
1441
1859
|
" | Y to ",
|
|
1442
1860
|
archiveTarget.isArchived ? "Unarchive" : "Archive",
|
|
1443
1861
|
" | C to Cancel"
|
|
1444
1862
|
] }) }),
|
|
1445
|
-
/* @__PURE__ */
|
|
1446
|
-
|
|
1863
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(
|
|
1864
|
+
TextInput3,
|
|
1447
1865
|
{
|
|
1448
1866
|
value: "",
|
|
1449
1867
|
onChange: () => {
|
|
@@ -1457,21 +1875,21 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1457
1875
|
}
|
|
1458
1876
|
}
|
|
1459
1877
|
) }),
|
|
1460
|
-
archiveError && /* @__PURE__ */
|
|
1461
|
-
archiving && /* @__PURE__ */
|
|
1462
|
-
] }) }) : syncMode && syncTarget ? /* @__PURE__ */
|
|
1463
|
-
/* @__PURE__ */
|
|
1464
|
-
/* @__PURE__ */
|
|
1465
|
-
/* @__PURE__ */
|
|
1466
|
-
/* @__PURE__ */
|
|
1467
|
-
syncTarget.parent && /* @__PURE__ */
|
|
1878
|
+
archiveError && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "magenta", children: archiveError }) }),
|
|
1879
|
+
archiving && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "yellow", children: archiveTarget.isArchived ? "Unarchiving..." : "Archiving..." }) })
|
|
1880
|
+
] }) }) : syncMode && syncTarget ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "round", borderColor: "blue", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
|
|
1881
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: "Sync Fork Confirmation" }),
|
|
1882
|
+
/* @__PURE__ */ jsx13(Text13, { color: "blue", children: "\u27F2 Sync fork with upstream?" }),
|
|
1883
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
1884
|
+
/* @__PURE__ */ jsx13(Text13, { children: syncTarget.nameWithOwner }),
|
|
1885
|
+
syncTarget.parent && /* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1468
1886
|
"Upstream: ",
|
|
1469
1887
|
syncTarget.parent.nameWithOwner
|
|
1470
1888
|
] }),
|
|
1471
|
-
/* @__PURE__ */
|
|
1472
|
-
/* @__PURE__ */
|
|
1473
|
-
/* @__PURE__ */
|
|
1474
|
-
|
|
1889
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { children: "This will merge upstream changes into your fork." }) }),
|
|
1890
|
+
/* @__PURE__ */ jsxs12(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
|
|
1891
|
+
/* @__PURE__ */ jsx13(
|
|
1892
|
+
Box12,
|
|
1475
1893
|
{
|
|
1476
1894
|
borderStyle: "round",
|
|
1477
1895
|
borderColor: "blue",
|
|
@@ -1480,11 +1898,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1480
1898
|
alignItems: "center",
|
|
1481
1899
|
justifyContent: "center",
|
|
1482
1900
|
flexDirection: "column",
|
|
1483
|
-
children: /* @__PURE__ */
|
|
1901
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: syncFocus === "confirm" ? chalk10.bgBlue.white.bold(" Sync ") : chalk10.blue.bold("Sync") })
|
|
1484
1902
|
}
|
|
1485
1903
|
),
|
|
1486
|
-
/* @__PURE__ */
|
|
1487
|
-
|
|
1904
|
+
/* @__PURE__ */ jsx13(
|
|
1905
|
+
Box12,
|
|
1488
1906
|
{
|
|
1489
1907
|
borderStyle: "round",
|
|
1490
1908
|
borderColor: syncFocus === "cancel" ? "white" : "gray",
|
|
@@ -1493,17 +1911,17 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1493
1911
|
alignItems: "center",
|
|
1494
1912
|
justifyContent: "center",
|
|
1495
1913
|
flexDirection: "column",
|
|
1496
|
-
children: /* @__PURE__ */
|
|
1914
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: syncFocus === "cancel" ? chalk10.bgGray.white.bold(" Cancel ") : chalk10.gray.bold("Cancel") })
|
|
1497
1915
|
}
|
|
1498
1916
|
)
|
|
1499
1917
|
] }),
|
|
1500
|
-
/* @__PURE__ */
|
|
1918
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1501
1919
|
"Press Enter to ",
|
|
1502
1920
|
syncFocus === "confirm" ? "Sync" : "Cancel",
|
|
1503
1921
|
" | Y to Sync | C to Cancel"
|
|
1504
1922
|
] }) }),
|
|
1505
|
-
/* @__PURE__ */
|
|
1506
|
-
|
|
1923
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(
|
|
1924
|
+
TextInput3,
|
|
1507
1925
|
{
|
|
1508
1926
|
value: "",
|
|
1509
1927
|
onChange: () => {
|
|
@@ -1517,14 +1935,14 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1517
1935
|
}
|
|
1518
1936
|
}
|
|
1519
1937
|
) }),
|
|
1520
|
-
syncError && /* @__PURE__ */
|
|
1521
|
-
syncing && /* @__PURE__ */
|
|
1522
|
-
] }) }) : logoutMode ? /* @__PURE__ */
|
|
1523
|
-
/* @__PURE__ */
|
|
1524
|
-
/* @__PURE__ */
|
|
1525
|
-
/* @__PURE__ */
|
|
1526
|
-
/* @__PURE__ */
|
|
1527
|
-
|
|
1938
|
+
syncError && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "magenta", children: syncError }) }),
|
|
1939
|
+
syncing && /* @__PURE__ */ jsx13(Box12, { marginTop: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "yellow", children: "Syncing..." }) })
|
|
1940
|
+
] }) }) : logoutMode ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 80), children: [
|
|
1941
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, children: "Logout Confirmation" }),
|
|
1942
|
+
/* @__PURE__ */ jsx13(Text13, { color: "cyan", children: "Are you sure you want to log out?" }),
|
|
1943
|
+
/* @__PURE__ */ jsxs12(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", gap: 6, children: [
|
|
1944
|
+
/* @__PURE__ */ jsx13(
|
|
1945
|
+
Box12,
|
|
1528
1946
|
{
|
|
1529
1947
|
borderStyle: "round",
|
|
1530
1948
|
borderColor: "cyan",
|
|
@@ -1533,11 +1951,11 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1533
1951
|
alignItems: "center",
|
|
1534
1952
|
justifyContent: "center",
|
|
1535
1953
|
flexDirection: "column",
|
|
1536
|
-
children: /* @__PURE__ */
|
|
1954
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: logoutFocus === "confirm" ? chalk10.bgCyan.white.bold(" Logout ") : chalk10.cyan.bold("Logout") })
|
|
1537
1955
|
}
|
|
1538
1956
|
),
|
|
1539
|
-
/* @__PURE__ */
|
|
1540
|
-
|
|
1957
|
+
/* @__PURE__ */ jsx13(
|
|
1958
|
+
Box12,
|
|
1541
1959
|
{
|
|
1542
1960
|
borderStyle: "round",
|
|
1543
1961
|
borderColor: logoutFocus === "cancel" ? "white" : "gray",
|
|
@@ -1546,16 +1964,16 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1546
1964
|
alignItems: "center",
|
|
1547
1965
|
justifyContent: "center",
|
|
1548
1966
|
flexDirection: "column",
|
|
1549
|
-
children: /* @__PURE__ */
|
|
1967
|
+
children: /* @__PURE__ */ jsx13(Text13, { children: logoutFocus === "cancel" ? chalk10.bgGray.white.bold(" Cancel ") : chalk10.gray.bold("Cancel") })
|
|
1550
1968
|
}
|
|
1551
1969
|
)
|
|
1552
1970
|
] }),
|
|
1553
|
-
/* @__PURE__ */
|
|
1971
|
+
/* @__PURE__ */ jsx13(Box12, { marginTop: 1, flexDirection: "row", justifyContent: "center", children: /* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1554
1972
|
"Press Enter to ",
|
|
1555
1973
|
logoutFocus === "confirm" ? "Logout" : "Cancel",
|
|
1556
1974
|
" | Y to Logout | C to Cancel"
|
|
1557
1975
|
] }) })
|
|
1558
|
-
] }) }) : orgSwitcherOpen ? /* @__PURE__ */
|
|
1976
|
+
] }) }) : orgSwitcherOpen ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx13(
|
|
1559
1977
|
OrgSwitcher,
|
|
1560
1978
|
{
|
|
1561
1979
|
token,
|
|
@@ -1563,78 +1981,87 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1563
1981
|
onSelect: handleOrgContextChange,
|
|
1564
1982
|
onClose: () => setOrgSwitcherOpen(false)
|
|
1565
1983
|
}
|
|
1566
|
-
) }) : infoMode ? /* @__PURE__ */
|
|
1984
|
+
) }) : infoMode ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: (() => {
|
|
1567
1985
|
const repo = infoRepo || visibleItems[cursor];
|
|
1568
|
-
if (!repo) return /* @__PURE__ */
|
|
1986
|
+
if (!repo) return /* @__PURE__ */ jsx13(Text13, { color: "red", children: "No repository selected." });
|
|
1569
1987
|
const langName = repo.primaryLanguage?.name || "N/A";
|
|
1570
1988
|
const langColor = repo.primaryLanguage?.color || "#666666";
|
|
1571
|
-
return /* @__PURE__ */
|
|
1572
|
-
/* @__PURE__ */
|
|
1989
|
+
return /* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", borderStyle: "round", borderColor: "magenta", paddingX: 3, paddingY: 2, width: Math.min(terminalWidth - 8, 90), children: [
|
|
1990
|
+
/* @__PURE__ */ jsxs12(Text13, { bold: true, children: [
|
|
1573
1991
|
"Repository Info ",
|
|
1574
|
-
infoRepo ?
|
|
1992
|
+
infoRepo ? chalk10.dim("(cached)") : ""
|
|
1575
1993
|
] }),
|
|
1576
|
-
/* @__PURE__ */
|
|
1577
|
-
/* @__PURE__ */
|
|
1578
|
-
repo.description && /* @__PURE__ */
|
|
1579
|
-
/* @__PURE__ */
|
|
1580
|
-
/* @__PURE__ */
|
|
1581
|
-
repo.
|
|
1582
|
-
repo.isArchived ?
|
|
1583
|
-
repo.isFork ?
|
|
1994
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
1995
|
+
/* @__PURE__ */ jsx13(Text13, { children: chalk10.bold(repo.nameWithOwner) }),
|
|
1996
|
+
repo.description && /* @__PURE__ */ jsx13(Text13, { color: "gray", children: repo.description }),
|
|
1997
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
1998
|
+
/* @__PURE__ */ jsxs12(Text13, { children: [
|
|
1999
|
+
repo.visibility === "PRIVATE" ? chalk10.yellow("Private") : repo.visibility === "INTERNAL" ? chalk10.cyan("Internal") : chalk10.green("Public"),
|
|
2000
|
+
repo.isArchived ? chalk10.gray(" Archived") : "",
|
|
2001
|
+
repo.isFork ? chalk10.blue(" Fork") : ""
|
|
1584
2002
|
] }),
|
|
1585
|
-
/* @__PURE__ */
|
|
1586
|
-
/* @__PURE__ */
|
|
1587
|
-
|
|
1588
|
-
|
|
2003
|
+
/* @__PURE__ */ jsx13(Text13, { children: chalk10.gray(`\u2605 ${repo.stargazerCount} \u2442 ${repo.forkCount}`) }),
|
|
2004
|
+
/* @__PURE__ */ jsxs12(Text13, { children: [
|
|
2005
|
+
chalk10.hex(langColor)(`\u25CF `),
|
|
2006
|
+
chalk10.gray(`${langName}`)
|
|
1589
2007
|
] }),
|
|
1590
|
-
/* @__PURE__ */
|
|
2008
|
+
/* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1591
2009
|
"Updated: ",
|
|
1592
2010
|
formatDate(repo.updatedAt),
|
|
1593
2011
|
" \u2022 Pushed: ",
|
|
1594
2012
|
formatDate(repo.pushedAt)
|
|
1595
2013
|
] }),
|
|
1596
|
-
/* @__PURE__ */
|
|
2014
|
+
/* @__PURE__ */ jsxs12(Text13, { color: "gray", children: [
|
|
1597
2015
|
"Size: ",
|
|
1598
2016
|
repo.diskUsage,
|
|
1599
2017
|
" KB"
|
|
1600
2018
|
] }),
|
|
1601
|
-
/* @__PURE__ */
|
|
1602
|
-
/* @__PURE__ */
|
|
2019
|
+
/* @__PURE__ */ jsx13(Box12, { height: 1, children: /* @__PURE__ */ jsx13(Text13, { children: " " }) }),
|
|
2020
|
+
/* @__PURE__ */ jsx13(Text13, { color: "gray", children: "Press Esc or I to close" })
|
|
1603
2021
|
] });
|
|
1604
|
-
})() }) : /* @__PURE__ */
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
2022
|
+
})() }) : visibilityMode ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx13(
|
|
2023
|
+
VisibilityModal,
|
|
2024
|
+
{
|
|
2025
|
+
currentFilter: visibilityFilter,
|
|
2026
|
+
hasInternalRepos,
|
|
2027
|
+
onSelect: (filter2) => {
|
|
2028
|
+
setVisibilityFilter(filter2);
|
|
2029
|
+
setVisibilityMode(false);
|
|
2030
|
+
setCursor(0);
|
|
2031
|
+
storeUIPrefs({ visibilityFilter: filter2 });
|
|
2032
|
+
},
|
|
2033
|
+
onCancel: () => setVisibilityMode(false)
|
|
2034
|
+
}
|
|
2035
|
+
) }) : sortMode ? /* @__PURE__ */ jsx13(Box12, { height: contentHeight, alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx13(
|
|
2036
|
+
SortModal,
|
|
2037
|
+
{
|
|
2038
|
+
currentSort: sortKey,
|
|
2039
|
+
onSelect: (sort) => {
|
|
2040
|
+
setSortKey(sort);
|
|
2041
|
+
setSortMode(false);
|
|
2042
|
+
setCursor(0);
|
|
2043
|
+
storeUIPrefs({ sortKey: sort });
|
|
2044
|
+
},
|
|
2045
|
+
onCancel: () => setSortMode(false)
|
|
2046
|
+
}
|
|
2047
|
+
) }) : /* @__PURE__ */ jsxs12(Fragment5, { children: [
|
|
2048
|
+
/* @__PURE__ */ jsx13(
|
|
2049
|
+
RepoListHeader,
|
|
2050
|
+
{
|
|
2051
|
+
ownerContext,
|
|
1609
2052
|
sortKey,
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
] }),
|
|
1613
|
-
/* @__PURE__ */ jsxs5(Text6, { color: "gray", dimColor: true, children: [
|
|
1614
|
-
"Forks - Commits Behind: ",
|
|
1615
|
-
forkTracking ? "ON" : "OFF"
|
|
1616
|
-
] }),
|
|
1617
|
-
filter && !searchActive && /* @__PURE__ */ jsxs5(Text6, { color: "cyan", children: [
|
|
1618
|
-
'Filter: "',
|
|
2053
|
+
sortDir,
|
|
2054
|
+
forkTracking,
|
|
1619
2055
|
filter,
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
/* @__PURE__ */ jsx6(SlowSpinner, {}),
|
|
1630
|
-
" Searching\u2026"
|
|
1631
|
-
] }) })
|
|
1632
|
-
] })
|
|
1633
|
-
] }),
|
|
1634
|
-
filterMode && /* @__PURE__ */ jsxs5(Box5, { marginBottom: 1, children: [
|
|
1635
|
-
/* @__PURE__ */ jsx6(Text6, { children: "Filter: " }),
|
|
1636
|
-
/* @__PURE__ */ jsx6(
|
|
1637
|
-
TextInput2,
|
|
2056
|
+
searchActive,
|
|
2057
|
+
searchLoading,
|
|
2058
|
+
visibilityFilter
|
|
2059
|
+
}
|
|
2060
|
+
),
|
|
2061
|
+
filterMode && /* @__PURE__ */ jsxs12(Box12, { marginBottom: 1, children: [
|
|
2062
|
+
/* @__PURE__ */ jsx13(Text13, { children: "Filter: " }),
|
|
2063
|
+
/* @__PURE__ */ jsx13(
|
|
2064
|
+
TextInput3,
|
|
1638
2065
|
{
|
|
1639
2066
|
value: filter,
|
|
1640
2067
|
onChange: (val) => {
|
|
@@ -1673,10 +2100,10 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1673
2100
|
}
|
|
1674
2101
|
)
|
|
1675
2102
|
] }),
|
|
1676
|
-
/* @__PURE__ */
|
|
1677
|
-
filterMode && filter.trim().length > 0 && filter.trim().length < 3 ? /* @__PURE__ */
|
|
2103
|
+
/* @__PURE__ */ jsxs12(Box12, { flexDirection: "column", height: listHeight, children: [
|
|
2104
|
+
filterMode && filter.trim().length > 0 && filter.trim().length < 3 ? /* @__PURE__ */ jsx13(Box12, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", dimColor: true, children: "Type at least 3 characters to search" }) }) : visibleItems.slice(windowed.start, windowed.end).map((repo, i) => {
|
|
1678
2105
|
const idx = windowed.start + i;
|
|
1679
|
-
return /* @__PURE__ */
|
|
2106
|
+
return /* @__PURE__ */ jsx13(
|
|
1680
2107
|
RepoRow,
|
|
1681
2108
|
{
|
|
1682
2109
|
repo,
|
|
@@ -1689,43 +2116,44 @@ function RepoList({ token, maxVisibleRows, onLogout, viewerLogin, onOrgContextCh
|
|
|
1689
2116
|
repo.nameWithOwner
|
|
1690
2117
|
);
|
|
1691
2118
|
}),
|
|
1692
|
-
loadingMore && hasNextPage && /* @__PURE__ */
|
|
1693
|
-
/* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
2119
|
+
loadingMore && hasNextPage && /* @__PURE__ */ jsx13(Box12, { justifyContent: "center", alignItems: "center", marginTop: 1, children: /* @__PURE__ */ jsxs12(Box12, { flexDirection: "row", children: [
|
|
2120
|
+
/* @__PURE__ */ jsx13(Box12, { width: 2, flexShrink: 0, flexGrow: 0, marginRight: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "cyan", children: /* @__PURE__ */ jsx13(SlowSpinner, {}) }) }),
|
|
2121
|
+
/* @__PURE__ */ jsx13(Text13, { color: "cyan", children: "Loading more repositories..." })
|
|
1695
2122
|
] }) }),
|
|
1696
|
-
!loading && !searchLoading && visibleItems.length === 0 && /* @__PURE__ */
|
|
2123
|
+
!loading && !searchLoading && visibleItems.length === 0 && /* @__PURE__ */ jsx13(Box12, { justifyContent: "center", alignItems: "center", flexGrow: 1, children: /* @__PURE__ */ jsx13(Text13, { color: "gray", dimColor: true, children: searchActive ? "No repositories match your search" : filter ? "No repositories match your filter" : "No repositories found" }) })
|
|
1697
2124
|
] })
|
|
1698
2125
|
] }) }),
|
|
1699
|
-
/* @__PURE__ */
|
|
1700
|
-
/* @__PURE__ */
|
|
1701
|
-
/* @__PURE__ */
|
|
2126
|
+
/* @__PURE__ */ jsxs12(Box12, { marginTop: 1, paddingX: 1, flexDirection: "column", children: [
|
|
2127
|
+
/* @__PURE__ */ jsx13(Box12, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx13(Text13, { 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" }) }),
|
|
2128
|
+
/* @__PURE__ */ jsx13(Box12, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx13(Text13, { 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" }) }),
|
|
2129
|
+
/* @__PURE__ */ jsx13(Box12, { width: terminalWidth, justifyContent: "center", children: /* @__PURE__ */ jsx13(Text13, { color: "gray", dimColor: modalOpen ? true : void 0, children: "I Info \u2022 Ctrl+I Cache Info \u2022 Ctrl+A Un/Archive \u2022 Del/Backspace Delete \u2022 Ctrl+S Sync Fork" }) })
|
|
1702
2130
|
] }),
|
|
1703
|
-
process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */
|
|
1704
|
-
/* @__PURE__ */
|
|
1705
|
-
debugMessages.length === 0 ? /* @__PURE__ */
|
|
2131
|
+
process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsxs12(Box12, { marginTop: 1, borderStyle: "single", borderColor: "yellow", paddingX: 1, flexDirection: "column", children: [
|
|
2132
|
+
/* @__PURE__ */ jsx13(Text13, { bold: true, color: "yellow", children: "Debug Messages:" }),
|
|
2133
|
+
debugMessages.length === 0 ? /* @__PURE__ */ jsx13(Text13, { color: "gray", children: "No debug messages yet..." }) : debugMessages.map((msg, i) => /* @__PURE__ */ jsx13(Text13, { color: "gray", children: msg }, i))
|
|
1706
2134
|
] })
|
|
1707
2135
|
] });
|
|
1708
2136
|
}
|
|
1709
2137
|
|
|
1710
2138
|
// src/ui/App.tsx
|
|
1711
|
-
import { jsx as
|
|
2139
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
1712
2140
|
var packageJson = require_package();
|
|
1713
2141
|
function App() {
|
|
1714
2142
|
const { exit } = useApp2();
|
|
1715
2143
|
const { stdout } = useStdout2();
|
|
1716
|
-
const [mode, setMode] =
|
|
1717
|
-
const [token, setToken] =
|
|
1718
|
-
const [input, setInput] =
|
|
1719
|
-
const [error, setError] =
|
|
1720
|
-
const [viewer, setViewer] =
|
|
1721
|
-
const [rateLimitReset, setRateLimitReset] =
|
|
1722
|
-
const [orgContext, setOrgContext] =
|
|
1723
|
-
const [dims, setDims] =
|
|
2144
|
+
const [mode, setMode] = useState10("checking");
|
|
2145
|
+
const [token, setToken] = useState10(null);
|
|
2146
|
+
const [input, setInput] = useState10("");
|
|
2147
|
+
const [error, setError] = useState10(null);
|
|
2148
|
+
const [viewer, setViewer] = useState10(null);
|
|
2149
|
+
const [rateLimitReset, setRateLimitReset] = useState10(null);
|
|
2150
|
+
const [orgContext, setOrgContext] = useState10("personal");
|
|
2151
|
+
const [dims, setDims] = useState10(() => {
|
|
1724
2152
|
const cols = stdout?.columns ?? 100;
|
|
1725
2153
|
const rows = stdout?.rows ?? 30;
|
|
1726
2154
|
return { cols, rows };
|
|
1727
2155
|
});
|
|
1728
|
-
|
|
2156
|
+
useEffect7(() => {
|
|
1729
2157
|
if (!stdout) return;
|
|
1730
2158
|
const onResize = () => {
|
|
1731
2159
|
const cols = stdout.columns ?? 100;
|
|
@@ -1737,7 +2165,7 @@ function App() {
|
|
|
1737
2165
|
stdout.off?.("resize", onResize);
|
|
1738
2166
|
};
|
|
1739
2167
|
}, [stdout]);
|
|
1740
|
-
|
|
2168
|
+
useEffect7(() => {
|
|
1741
2169
|
const env = getTokenFromEnv();
|
|
1742
2170
|
const stored = getStoredToken();
|
|
1743
2171
|
if (env) {
|
|
@@ -1750,7 +2178,7 @@ function App() {
|
|
|
1750
2178
|
setMode("prompt");
|
|
1751
2179
|
}
|
|
1752
2180
|
}, []);
|
|
1753
|
-
|
|
2181
|
+
useEffect7(() => {
|
|
1754
2182
|
(async () => {
|
|
1755
2183
|
if (mode !== "validating" || !token) return;
|
|
1756
2184
|
const timeoutId = setTimeout(() => {
|
|
@@ -1837,7 +2265,7 @@ function App() {
|
|
|
1837
2265
|
setInput("");
|
|
1838
2266
|
setMode("prompt");
|
|
1839
2267
|
};
|
|
1840
|
-
|
|
2268
|
+
useInput10((input2, key) => {
|
|
1841
2269
|
if (mode === "prompt" && key.escape) {
|
|
1842
2270
|
exit();
|
|
1843
2271
|
}
|
|
@@ -1863,19 +2291,19 @@ function App() {
|
|
|
1863
2291
|
}
|
|
1864
2292
|
});
|
|
1865
2293
|
const verticalPadding = Math.floor(dims.rows * 0.15);
|
|
1866
|
-
const header = useMemo2(() => /* @__PURE__ */
|
|
1867
|
-
/* @__PURE__ */
|
|
1868
|
-
/* @__PURE__ */
|
|
2294
|
+
const header = useMemo2(() => /* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", justifyContent: "space-between", marginBottom: 1, children: [
|
|
2295
|
+
/* @__PURE__ */ jsxs13(Box13, { flexDirection: "row", gap: 1, children: [
|
|
2296
|
+
/* @__PURE__ */ jsxs13(Text14, { bold: true, color: "cyan", children: [
|
|
1869
2297
|
" ",
|
|
1870
2298
|
"GitHub Repository Manager"
|
|
1871
2299
|
] }),
|
|
1872
|
-
/* @__PURE__ */
|
|
2300
|
+
/* @__PURE__ */ jsxs13(Text14, { color: "gray", dimColor: true, children: [
|
|
1873
2301
|
"v",
|
|
1874
2302
|
packageJson.version
|
|
1875
2303
|
] }),
|
|
1876
|
-
process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */
|
|
2304
|
+
process.env.GH_MANAGER_DEBUG === "1" && /* @__PURE__ */ jsx14(Text14, { backgroundColor: "blue", color: "white", children: " debug mode " })
|
|
1877
2305
|
] }),
|
|
1878
|
-
viewer && /* @__PURE__ */
|
|
2306
|
+
viewer && /* @__PURE__ */ jsx14(Text14, { color: "gray", children: orgContext !== "personal" && orgContext.login ? `${orgContext.login}/@${viewer} ` : `@${viewer} ` })
|
|
1879
2307
|
] }), [viewer, orgContext]);
|
|
1880
2308
|
if (mode === "rate_limited") {
|
|
1881
2309
|
const formatResetTime = (resetTime) => {
|
|
@@ -1898,56 +2326,56 @@ function App() {
|
|
|
1898
2326
|
return "Unknown";
|
|
1899
2327
|
}
|
|
1900
2328
|
};
|
|
1901
|
-
return /* @__PURE__ */
|
|
2329
|
+
return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
|
|
1902
2330
|
header,
|
|
1903
|
-
/* @__PURE__ */
|
|
1904
|
-
/* @__PURE__ */
|
|
1905
|
-
/* @__PURE__ */
|
|
1906
|
-
/* @__PURE__ */
|
|
1907
|
-
rateLimitReset && /* @__PURE__ */
|
|
1908
|
-
/* @__PURE__ */
|
|
1909
|
-
/* @__PURE__ */
|
|
2331
|
+
/* @__PURE__ */ jsx14(Box13, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs13(Box13, { borderStyle: "single", borderColor: "yellow", paddingX: 3, paddingY: 2, flexDirection: "column", width: Math.min(dims.cols - 8, 80), children: [
|
|
2332
|
+
/* @__PURE__ */ jsx14(Text14, { bold: true, color: "yellow", marginBottom: 1, children: "\u26A0\uFE0F Rate Limit Exceeded" }),
|
|
2333
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", marginBottom: 1, children: "You've hit GitHub's API rate limit for your token." }),
|
|
2334
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", marginBottom: 1, children: "This happens when you make too many requests in a short time." }),
|
|
2335
|
+
rateLimitReset && /* @__PURE__ */ jsxs13(Box13, { marginTop: 1, marginBottom: 1, children: [
|
|
2336
|
+
/* @__PURE__ */ jsxs13(Text14, { children: [
|
|
2337
|
+
/* @__PURE__ */ jsx14(Text14, { color: "cyan", children: "Reset in:" }),
|
|
1910
2338
|
" ",
|
|
1911
|
-
/* @__PURE__ */
|
|
2339
|
+
/* @__PURE__ */ jsx14(Text14, { bold: true, children: formatResetTime(rateLimitReset) })
|
|
1912
2340
|
] }),
|
|
1913
|
-
/* @__PURE__ */
|
|
2341
|
+
/* @__PURE__ */ jsxs13(Text14, { color: "gray", dimColor: true, children: [
|
|
1914
2342
|
"(",
|
|
1915
2343
|
new Date(rateLimitReset).toLocaleTimeString(),
|
|
1916
2344
|
")"
|
|
1917
2345
|
] })
|
|
1918
2346
|
] }),
|
|
1919
|
-
/* @__PURE__ */
|
|
1920
|
-
/* @__PURE__ */
|
|
1921
|
-
/* @__PURE__ */
|
|
1922
|
-
/* @__PURE__ */
|
|
1923
|
-
/* @__PURE__ */
|
|
2347
|
+
/* @__PURE__ */ jsxs13(Box13, { marginTop: 2, flexDirection: "column", gap: 1, children: [
|
|
2348
|
+
/* @__PURE__ */ jsx14(Text14, { bold: true, children: "What would you like to do?" }),
|
|
2349
|
+
/* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", paddingLeft: 2, children: [
|
|
2350
|
+
/* @__PURE__ */ jsxs13(Text14, { children: [
|
|
2351
|
+
/* @__PURE__ */ jsx14(Text14, { color: "cyan", bold: true, children: "r" }),
|
|
1924
2352
|
" - Retry now ",
|
|
1925
2353
|
rateLimitReset && formatResetTime(rateLimitReset) !== "Now (should be reset)" ? "(likely to fail until reset)" : "(should work now)"
|
|
1926
2354
|
] }),
|
|
1927
|
-
/* @__PURE__ */
|
|
1928
|
-
/* @__PURE__ */
|
|
2355
|
+
/* @__PURE__ */ jsxs13(Text14, { children: [
|
|
2356
|
+
/* @__PURE__ */ jsx14(Text14, { color: "cyan", bold: true, children: "l" }),
|
|
1929
2357
|
" - Logout and use a different token"
|
|
1930
2358
|
] }),
|
|
1931
|
-
/* @__PURE__ */
|
|
1932
|
-
/* @__PURE__ */
|
|
2359
|
+
/* @__PURE__ */ jsxs13(Text14, { children: [
|
|
2360
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", bold: true, children: "q/Esc" }),
|
|
1933
2361
|
" - Quit application"
|
|
1934
2362
|
] })
|
|
1935
2363
|
] })
|
|
1936
2364
|
] }),
|
|
1937
|
-
/* @__PURE__ */
|
|
2365
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, marginTop: 2, children: "Tip: Using multiple tokens or waiting between requests can help avoid rate limits." })
|
|
1938
2366
|
] }) })
|
|
1939
2367
|
] });
|
|
1940
2368
|
}
|
|
1941
2369
|
if (mode === "prompt") {
|
|
1942
|
-
return /* @__PURE__ */
|
|
2370
|
+
return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
|
|
1943
2371
|
header,
|
|
1944
|
-
/* @__PURE__ */
|
|
1945
|
-
/* @__PURE__ */
|
|
1946
|
-
/* @__PURE__ */
|
|
1947
|
-
/* @__PURE__ */
|
|
1948
|
-
/* @__PURE__ */
|
|
1949
|
-
/* @__PURE__ */
|
|
1950
|
-
|
|
2372
|
+
/* @__PURE__ */ jsx14(Box13, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs13(Box13, { borderStyle: "single", borderColor: "cyan", paddingX: 2, paddingY: 1, flexDirection: "column", children: [
|
|
2373
|
+
/* @__PURE__ */ jsx14(Text14, { bold: true, marginBottom: 1, children: "Authentication Required" }),
|
|
2374
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", marginBottom: 1, children: "Enter your GitHub Personal Access Token" }),
|
|
2375
|
+
/* @__PURE__ */ jsxs13(Box13, { children: [
|
|
2376
|
+
/* @__PURE__ */ jsx14(Text14, { children: "Token: " }),
|
|
2377
|
+
/* @__PURE__ */ jsx14(
|
|
2378
|
+
TextInput4,
|
|
1951
2379
|
{
|
|
1952
2380
|
value: input,
|
|
1953
2381
|
onChange: setInput,
|
|
@@ -1956,30 +2384,30 @@ function App() {
|
|
|
1956
2384
|
}
|
|
1957
2385
|
)
|
|
1958
2386
|
] }),
|
|
1959
|
-
error && /* @__PURE__ */
|
|
1960
|
-
/* @__PURE__ */
|
|
1961
|
-
/* @__PURE__ */
|
|
2387
|
+
error && /* @__PURE__ */ jsx14(Text14, { color: "red", marginTop: 1, children: error }),
|
|
2388
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, marginTop: 1, children: "The token will be stored securely in your local config" }),
|
|
2389
|
+
/* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to quit" })
|
|
1962
2390
|
] }) })
|
|
1963
2391
|
] });
|
|
1964
2392
|
}
|
|
1965
2393
|
if (mode === "validating" || mode === "checking") {
|
|
1966
|
-
return /* @__PURE__ */
|
|
2394
|
+
return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
|
|
1967
2395
|
header,
|
|
1968
|
-
/* @__PURE__ */
|
|
1969
|
-
/* @__PURE__ */
|
|
1970
|
-
mode === "validating" && /* @__PURE__ */
|
|
2396
|
+
/* @__PURE__ */ jsx14(Box13, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", alignItems: "center", children: [
|
|
2397
|
+
/* @__PURE__ */ jsx14(Text14, { color: "yellow", children: "Validating token..." }),
|
|
2398
|
+
mode === "validating" && /* @__PURE__ */ jsx14(Text14, { color: "gray", dimColor: true, marginTop: 1, children: "Press Esc to cancel" })
|
|
1971
2399
|
] }) })
|
|
1972
2400
|
] });
|
|
1973
2401
|
}
|
|
1974
2402
|
if (mode === "error") {
|
|
1975
|
-
return /* @__PURE__ */
|
|
2403
|
+
return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
|
|
1976
2404
|
header,
|
|
1977
|
-
/* @__PURE__ */
|
|
2405
|
+
/* @__PURE__ */ jsx14(Box13, { flexGrow: 1, justifyContent: "center", alignItems: "center", children: /* @__PURE__ */ jsx14(Text14, { color: "red", children: error ?? "Unexpected error" }) })
|
|
1978
2406
|
] });
|
|
1979
2407
|
}
|
|
1980
|
-
return /* @__PURE__ */
|
|
2408
|
+
return /* @__PURE__ */ jsxs13(Box13, { flexDirection: "column", height: dims.rows, paddingX: 2, paddingTop: verticalPadding, paddingBottom: verticalPadding, children: [
|
|
1981
2409
|
header,
|
|
1982
|
-
/* @__PURE__ */
|
|
2410
|
+
/* @__PURE__ */ jsx14(
|
|
1983
2411
|
RepoList,
|
|
1984
2412
|
{
|
|
1985
2413
|
token,
|
|
@@ -1993,7 +2421,7 @@ function App() {
|
|
|
1993
2421
|
}
|
|
1994
2422
|
|
|
1995
2423
|
// src/index.tsx
|
|
1996
|
-
import { jsx as
|
|
2424
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
1997
2425
|
if (process.env.GH_MANAGER_DEBUG === "1") {
|
|
1998
2426
|
process.stderr.write("\u{1F41B} Debug mode enabled\n");
|
|
1999
2427
|
}
|
|
@@ -2006,8 +2434,8 @@ process.on("unhandledRejection", (reason) => {
|
|
|
2006
2434
|
process.exit(1);
|
|
2007
2435
|
});
|
|
2008
2436
|
render(
|
|
2009
|
-
/* @__PURE__ */
|
|
2010
|
-
/* @__PURE__ */
|
|
2011
|
-
/* @__PURE__ */
|
|
2437
|
+
/* @__PURE__ */ jsxs14(Box14, { flexDirection: "column", children: [
|
|
2438
|
+
/* @__PURE__ */ jsx15(App, {}),
|
|
2439
|
+
/* @__PURE__ */ jsx15(Text15, { color: "gray" })
|
|
2012
2440
|
] })
|
|
2013
2441
|
);
|