gitxelectron 1.2.2 → 1.2.4

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.
@@ -13749,6 +13749,147 @@ const LogicGame2048 = () => {
13749
13749
  ] })
13750
13750
  ] });
13751
13751
  };
13752
+ const getRotation = (value, spins) => {
13753
+ const s = spins * 360;
13754
+ switch (value) {
13755
+ case 1:
13756
+ return `rotateX(${s}deg) rotateY(${s}deg)`;
13757
+ case 2:
13758
+ return `rotateX(${s}deg) rotateY(${s + 180}deg)`;
13759
+ case 3:
13760
+ return `rotateX(${s}deg) rotateY(${s - 90}deg)`;
13761
+ case 4:
13762
+ return `rotateX(${s}deg) rotateY(${s + 90}deg)`;
13763
+ case 5:
13764
+ return `rotateX(${s - 90}deg) rotateY(${s}deg)`;
13765
+ case 6:
13766
+ return `rotateX(${s + 90}deg) rotateY(${s}deg)`;
13767
+ default:
13768
+ return `rotateX(0deg) rotateY(0deg)`;
13769
+ }
13770
+ };
13771
+ const DiceGame = () => {
13772
+ const [targetNumber, setTargetNumber] = reactExports.useState(7);
13773
+ const [isRolling, setIsRolling] = reactExports.useState(false);
13774
+ const [dice1, setDice1] = reactExports.useState(5);
13775
+ const [dice2, setDice2] = reactExports.useState(3);
13776
+ const [spins, setSpins] = reactExports.useState(0);
13777
+ const [gameResult, setGameResult] = reactExports.useState("idle");
13778
+ const handleRoll = (e) => {
13779
+ e.preventDefault();
13780
+ if (isRolling) return;
13781
+ setIsRolling(true);
13782
+ setGameResult("idle");
13783
+ setSpins((s) => s + 2);
13784
+ const d1 = Math.floor(Math.random() * 6) + 1;
13785
+ const d2 = Math.floor(Math.random() * 6) + 1;
13786
+ setTimeout(() => {
13787
+ setDice1(d1);
13788
+ setDice2(d2);
13789
+ setIsRolling(false);
13790
+ if (d1 + d2 === targetNumber) {
13791
+ setGameResult("win");
13792
+ } else {
13793
+ setGameResult("lose");
13794
+ }
13795
+ }, 1e3);
13796
+ };
13797
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex flex-col items-center justify-center h-full w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card flex flex-col items-center gap-6 p-8 relative overflow-visible mt-20", children: [
13798
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2 mb-2 z-20", children: [
13799
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-primary font-bold text-lg", children: "Guess the total (2-12):" }),
13800
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-4", children: [
13801
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
13802
+ "input",
13803
+ {
13804
+ type: "range",
13805
+ min: "2",
13806
+ max: "12",
13807
+ value: targetNumber,
13808
+ onChange: (e) => setTargetNumber(parseInt(e.target.value)),
13809
+ disabled: isRolling,
13810
+ className: "w-48 accent-brand cursor-pointer"
13811
+ }
13812
+ ),
13813
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-2xl font-black text-brand bg-brand/10 px-4 py-1 rounded-lg border border-brand/20", children: targetNumber })
13814
+ ] })
13815
+ ] }),
13816
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
13817
+ "input",
13818
+ {
13819
+ type: "checkbox",
13820
+ id: "rollToggle",
13821
+ className: "roll-toggle hidden",
13822
+ checked: isRolling,
13823
+ readOnly: true
13824
+ }
13825
+ ),
13826
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "h-16 flex items-center justify-center z-20", children: [
13827
+ gameResult === "idle" && !isRolling && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-secondary font-medium", children: "Ready to roll..." }),
13828
+ isRolling && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-accent font-bold animate-pulse text-2xl", children: "Rolling..." }),
13829
+ gameResult === "win" && !isRolling && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-success font-black text-3xl animate-bounce drop-shadow-md", children: [
13830
+ "🎉 YOU WIN! (",
13831
+ dice1 + dice2,
13832
+ ") 🎉"
13833
+ ] }),
13834
+ gameResult === "lose" && !isRolling && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-danger font-bold text-xl drop-shadow-sm", children: [
13835
+ "You rolled ",
13836
+ dice1 + dice2,
13837
+ ". Try again!"
13838
+ ] })
13839
+ ] }),
13840
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dice-area my-4", children: [
13841
+ { val: dice1, cls: "dice1", delay: 0 },
13842
+ { val: dice2, cls: "dice2", delay: 0.1 }
13843
+ ].map((dice, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
13844
+ "div",
13845
+ {
13846
+ className: `dice ${dice.cls}`,
13847
+ style: {
13848
+ transform: !isRolling ? getRotation(dice.val, spins) : void 0,
13849
+ transition: !isRolling ? `transform ${0.8 + dice.delay}s cubic-bezier(0.34, 1.56, 0.64, 1)` : "none"
13850
+ },
13851
+ children: [
13852
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face front", "data-value": "1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "dots", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}) }) }),
13853
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face back", "data-value": "2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dots", children: [
13854
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13855
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {})
13856
+ ] }) }),
13857
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face right", "data-value": "3", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dots", children: [
13858
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13859
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13860
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {})
13861
+ ] }) }),
13862
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face left", "data-value": "4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dots", children: [
13863
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13864
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13865
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13866
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {})
13867
+ ] }) }),
13868
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face top", "data-value": "5", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dots", children: [
13869
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13870
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13871
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13872
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13873
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {})
13874
+ ] }) }),
13875
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "face bottom", "data-value": "6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "dots", children: [
13876
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13877
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13878
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13879
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13880
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {}),
13881
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", {})
13882
+ ] }) })
13883
+ ]
13884
+ },
13885
+ idx
13886
+ )) }),
13887
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "controls mt-8 z-20", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "dice-btn", onClick: handleRoll, children: [
13888
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "dice-btn-text", children: "ROLL" }),
13889
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "dice-btn-text-stop", children: "ROLLING" })
13890
+ ] }) })
13891
+ ] }) });
13892
+ };
13752
13893
  const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
13753
13894
  const [isOnline, setIsOnline] = reactExports.useState(navigator.onLine);
13754
13895
  const [activeMode, setActiveMode] = reactExports.useState("none");
@@ -13770,10 +13911,13 @@ const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
13770
13911
  }, [currentMode, onGameActiveChange]);
13771
13912
  const cycleMode = () => {
13772
13913
  if (!isOnline) {
13773
- setActiveMode(activeMode === "2048" ? "retro" : "2048");
13914
+ if (activeMode === "2048") setActiveMode("retro");
13915
+ else if (activeMode === "retro") setActiveMode("dice");
13916
+ else setActiveMode("2048");
13774
13917
  } else {
13775
13918
  if (activeMode === "none") setActiveMode("2048");
13776
13919
  else if (activeMode === "2048") setActiveMode("retro");
13920
+ else if (activeMode === "retro") setActiveMode("dice");
13777
13921
  else setActiveMode("none");
13778
13922
  }
13779
13923
  };
@@ -13784,13 +13928,14 @@ const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
13784
13928
  children: [
13785
13929
  currentMode === "retro" && /* @__PURE__ */ jsxRuntimeExports.jsx(RetroSpaceGame, {}),
13786
13930
  currentMode === "2048" && /* @__PURE__ */ jsxRuntimeExports.jsx(LogicGame2048, {}),
13931
+ currentMode === "dice" && /* @__PURE__ */ jsxRuntimeExports.jsx(DiceGame, {}),
13787
13932
  currentMode === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx(LiveGitHubSpace, {}),
13788
13933
  /* @__PURE__ */ jsxRuntimeExports.jsx(
13789
13934
  "button",
13790
13935
  {
13791
13936
  onClick: cycleMode,
13792
13937
  className: `absolute top-4 right-4 z-50 px-3 py-1.5 rounded-full text-xs font-semibold backdrop-blur-md transition-all duration-300 border ${currentMode !== "none" ? "bg-brand/20 text-brand border-brand/50 hover:bg-brand/30" : "bg-white/5 text-white/50 border-white/10 hover:bg-white/10 hover:text-white"} ${!fullScreen ? "opacity-0 group-hover:opacity-100" : ""}`,
13793
- children: currentMode === "retro" ? "🎮 Playing Retro Game" : currentMode === "2048" ? "🧩 Playing 2048" : "🌐 Live GitHub Events (Play Game?)"
13938
+ children: currentMode === "retro" ? "🎮 Playing Retro Game" : currentMode === "2048" ? "🧩 Playing 2048" : currentMode === "dice" ? "🎲 Playing Dice Game" : "🌐 Live GitHub Events (Play Game?)"
13794
13939
  }
13795
13940
  ),
13796
13941
  !fullScreen && currentMode === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-2 left-0 right-0 text-center text-[10px] text-secondary/60 pointer-events-none font-medium opacity-0 group-hover:opacity-100 transition-opacity", children: "Click the toggle above to play a game" }),
@@ -23561,6 +23706,13 @@ const AmongUsBackground = () => {
23561
23706
  }
23562
23707
  );
23563
23708
  };
23709
+ const SpaceExplorerBackground = () => {
23710
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-stars-container", children: [
23711
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "stars" }),
23712
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "stars2" }),
23713
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "stars3" })
23714
+ ] });
23715
+ };
23564
23716
  const AuthHoverButton = ({ username }) => {
23565
23717
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "auth-btn-wrapper flex justify-center items-center", children: [
23566
23718
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "invisible whitespace-nowrap px-6 flex items-center font-semibold text-sm pointer-events-none", children: [
@@ -23887,6 +24039,97 @@ const CollaborationRepoView = ({
23887
24039
  }) }) })
23888
24040
  ] });
23889
24041
  };
24042
+ const AuthCodePrinter = ({ code }) => {
24043
+ const handleCopy = () => {
24044
+ navigator.clipboard.writeText(code);
24045
+ };
24046
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "auth-printer-container", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "auth-printer-wrapper", children: [
24047
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "cutout-wrapper", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "cutout" }) }),
24048
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "paper-wrapper", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "sec", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("button", { className: "paper", onClick: handleCopy, children: [
24049
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "txt copied", children: "Copied!" }),
24050
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "txt coupon", children: code }),
24051
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "txt hov", children: "Copy Code" })
24052
+ ] }) }) }),
24053
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shadow-wrapper", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "shadow" }) }),
24054
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "cutter-wrapper", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "cutter" }) })
24055
+ ] }) });
24056
+ };
24057
+ const CommitReceiptPrinter = ({ commit }) => {
24058
+ const [isPrinted, setIsPrinted] = reactExports.useState(false);
24059
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `commit-printer-wrapper ${isPrinted ? "is-printed" : ""}`, children: [
24060
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "printer" }),
24061
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "printer-display", children: [
24062
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "printer-message", children: " Click to print changes" }),
24063
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "letter-wrapper", children: [
24064
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "P" }),
24065
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "r" }),
24066
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "i" }),
24067
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "n" }),
24068
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "t" }),
24069
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "i" }),
24070
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "n" }),
24071
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "g" }),
24072
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "." }),
24073
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "." }),
24074
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "letter", children: "." })
24075
+ ] })
24076
+ ] }),
24077
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "print-button", onClick: () => setIsPrinted(true), children: "🖨" }),
24078
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-wrapper", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "receipt", children: [
24079
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "receipt-header", children: [
24080
+ "Commit Changes ",
24081
+ /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
24082
+ "Hash: ",
24083
+ commit.hash.substring(0, 7),
24084
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "logo", children: "🐙" })
24085
+ ] }),
24086
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "receipt-subheader", children: [
24087
+ "Author: ",
24088
+ commit.author_name,
24089
+ " ",
24090
+ /* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
24091
+ new Date(commit.date).toLocaleString()
24092
+ ] }),
24093
+ /* @__PURE__ */ jsxRuntimeExports.jsx("table", { className: "receipt-table", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("tbody", { children: [
24094
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { children: [
24095
+ /* @__PURE__ */ jsxRuntimeExports.jsx("th", { children: "File" }),
24096
+ /* @__PURE__ */ jsxRuntimeExports.jsx("th", { children: "Ins" }),
24097
+ /* @__PURE__ */ jsxRuntimeExports.jsx("th", { children: "Del" })
24098
+ ] }),
24099
+ commit.diff?.files?.map((f, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { children: [
24100
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "truncate max-w-[120px]", title: f.file, children: f.file.split("/").pop() }),
24101
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("td", { className: "text-green-600 font-bold", children: [
24102
+ "+",
24103
+ f.insertions
24104
+ ] }),
24105
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("td", { className: "text-red-600 font-bold", children: [
24106
+ "-",
24107
+ f.deletions
24108
+ ] })
24109
+ ] }, idx)),
24110
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "receipt-subtotal", children: [
24111
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { colSpan: 2, children: "Files Changed" }),
24112
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { children: commit.diff?.changed || 0 })
24113
+ ] }),
24114
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "receipt-tax", children: [
24115
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { colSpan: 2, children: "Insertions" }),
24116
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("td", { className: "text-green-600 font-bold", children: [
24117
+ "+",
24118
+ commit.diff?.insertions || 0
24119
+ ] })
24120
+ ] }),
24121
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "receipt-total", children: [
24122
+ /* @__PURE__ */ jsxRuntimeExports.jsx("td", { colSpan: 2, children: "Deletions" }),
24123
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("td", { className: "text-red-600 font-bold", children: [
24124
+ "-",
24125
+ commit.diff?.deletions || 0
24126
+ ] })
24127
+ ] })
24128
+ ] }) }),
24129
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-message text-center line-clamp-2", title: commit.message, children: commit.message })
24130
+ ] }) })
24131
+ ] });
24132
+ };
23890
24133
  const translations = {
23891
24134
  en: {
23892
24135
  settings: "Settings",
@@ -24465,6 +24708,8 @@ function App() {
24465
24708
  const [conflictFile, setConflictFile] = reactExports.useState(null);
24466
24709
  const [pendingDropDestination, setPendingDropDestination] = reactExports.useState("/");
24467
24710
  const [conflictQueue, setConflictQueue] = reactExports.useState([]);
24711
+ const [autoSyncErrorPayload, setAutoSyncErrorPayload] = reactExports.useState(null);
24712
+ const [failedFiles, setFailedFiles] = reactExports.useState([]);
24468
24713
  const [isLocked, setIsLocked] = reactExports.useState(true);
24469
24714
  const [storedPin, setStoredPin] = reactExports.useState(localStorage.getItem("gitelectron-pin"));
24470
24715
  const [pinInput, setPinInput] = reactExports.useState("");
@@ -24613,7 +24858,10 @@ function App() {
24613
24858
  const [autoSyncLogs, setAutoSyncLogs] = reactExports.useState([]);
24614
24859
  const [showAutoSyncLogs, setShowAutoSyncLogs] = reactExports.useState(false);
24615
24860
  const [isRefreshing, setIsRefreshing] = reactExports.useState(false);
24861
+ const [gitProgress, setGitProgress] = reactExports.useState(0);
24616
24862
  const refreshLockRef = reactExports.useRef(false);
24863
+ reactExports.useEffect(() => {
24864
+ }, [gitProgress]);
24617
24865
  const [showWelcomeWizard, setShowWelcomeWizard] = reactExports.useState(false);
24618
24866
  const [newPin, setNewPin] = reactExports.useState("");
24619
24867
  const [pinChangeSuccess, setPinChangeSuccess] = reactExports.useState(false);
@@ -24798,6 +25046,19 @@ function App() {
24798
25046
  }
24799
25047
  }
24800
25048
  });
25049
+ window.api.onGitProgress((data) => {
25050
+ if (data && typeof data.progress === "number") {
25051
+ setGitProgress(data.progress);
25052
+ }
25053
+ });
25054
+ window.api.onAutoSyncErrorApproval((payload) => {
25055
+ setAutoSyncErrorPayload(payload);
25056
+ });
25057
+ window.api.onAutoSyncResolved(() => {
25058
+ setAutoSyncErrorPayload(null);
25059
+ setFailedFiles([]);
25060
+ refreshRepoState();
25061
+ });
24801
25062
  }, []);
24802
25063
  const handleToggleAutoSync = () => {
24803
25064
  const next = !autoSyncEnabled;
@@ -24808,8 +25069,27 @@ function App() {
24808
25069
  };
24809
25070
  const handleThemeChange = (newTheme) => {
24810
25071
  setTheme(newTheme);
25072
+ document.documentElement.setAttribute("data-theme", newTheme);
24811
25073
  localStorage.setItem("gitelectron-theme", newTheme);
24812
25074
  };
25075
+ const handleAiApprove = async () => {
25076
+ if (!autoSyncErrorPayload) return;
25077
+ setAutoSyncErrorPayload(null);
25078
+ const success = await window.api.approveAiFix(autoSyncErrorPayload.resolvedCode || {});
25079
+ if (success) {
25080
+ setFailedFiles([]);
25081
+ refreshRepoState();
25082
+ } else {
25083
+ setFailedFiles(autoSyncErrorPayload.files || []);
25084
+ }
25085
+ };
25086
+ const handleAiReject = () => {
25087
+ if (autoSyncErrorPayload) {
25088
+ setFailedFiles(autoSyncErrorPayload.files || []);
25089
+ }
25090
+ setAutoSyncErrorPayload(null);
25091
+ window.api.rejectAiFix();
25092
+ };
24813
25093
  const saveMapping = (repoFullName, localPath) => {
24814
25094
  setCollabMappings((prev) => {
24815
25095
  const updated = { ...prev, [repoFullName]: localPath };
@@ -24972,7 +25252,7 @@ function App() {
24972
25252
  } else if (fetchUrl.startsWith("git@ssh.dev.azure.com:v3/")) {
24973
25253
  const parts = fetchUrl.replace("git@ssh.dev.azure.com:v3/", "").split("/");
24974
25254
  if (parts.length >= 3)
24975
- fetchUrl = `https://dev.azure.com/${parts[0]}/${parts[1]}/_git/${parts[2]}`;
25255
+ fetchUrl = `https://dev.azure.com/${parts[0]}/${parts[1]}_git/${parts[2]}`;
24976
25256
  }
24977
25257
  try {
24978
25258
  if (fetchUrl.startsWith("http")) {
@@ -25462,6 +25742,7 @@ function App() {
25462
25742
  onDrop: handleDrop,
25463
25743
  children: [
25464
25744
  theme === "among-us-live" && /* @__PURE__ */ jsxRuntimeExports.jsx(AmongUsBackground, {}),
25745
+ theme === "space-explorer-3d" && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceExplorerBackground, {}),
25465
25746
  showWelcomeWizard && /* @__PURE__ */ jsxRuntimeExports.jsx(WelcomeWizard, { onComplete: () => setShowWelcomeWizard(false) }),
25466
25747
  gitErrorData && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/70 backdrop-blur-md flex items-center justify-center z-[150] p-6 animate-fade-in", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/95 border border-danger/50 rounded-2xl shadow-2xl w-full max-w-lg overflow-hidden flex flex-col p-6", children: [
25467
25748
  /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold text-danger mb-4", children: "Git Error" }),
@@ -25475,6 +25756,54 @@ function App() {
25475
25756
  }
25476
25757
  )
25477
25758
  ] }) }),
25759
+ autoSyncErrorPayload && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed inset-0 bg-background/80 backdrop-blur-sm z-50 flex items-center justify-center p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas border border-border rounded-xl shadow-2xl w-full max-w-lg overflow-hidden animate-in fade-in zoom-in duration-200", children: [
25760
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-danger/10 border-b border-danger/20 p-4 flex items-center gap-3", children: [
25761
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-8 h-8 rounded-full bg-danger/20 flex items-center justify-center text-danger shrink-0", children: "⚠️" }),
25762
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25763
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "font-semibold text-danger", children: "Auto-Push Paused" }),
25764
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary", children: "The system encountered an error while pushing." })
25765
+ ] })
25766
+ ] }),
25767
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 space-y-4", children: [
25768
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25769
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-medium text-primary mb-1", children: "Reason for Failure" }),
25770
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-surface p-3 rounded border border-border text-sm text-secondary", children: autoSyncErrorPayload.reason })
25771
+ ] }),
25772
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25773
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-medium text-primary mb-1", children: "AI Proposed Fix" }),
25774
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-brand/10 border border-brand/20 p-3 rounded text-sm text-brand", children: autoSyncErrorPayload.proposedFix })
25775
+ ] }),
25776
+ autoSyncErrorPayload.files && autoSyncErrorPayload.files.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25777
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-medium text-primary mb-1", children: "Affected Files" }),
25778
+ /* @__PURE__ */ jsxRuntimeExports.jsx("ul", { className: "bg-surface border border-border rounded p-2 max-h-32 overflow-auto text-xs font-mono space-y-1", children: autoSyncErrorPayload.files.map((file) => /* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "text-danger flex items-center gap-2", children: [
25779
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "shrink-0", children: "❌" }),
25780
+ " ",
25781
+ file
25782
+ ] }, file)) })
25783
+ ] })
25784
+ ] }),
25785
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 bg-surface-hover border-t border-border flex justify-end gap-2", children: [
25786
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
25787
+ "button",
25788
+ {
25789
+ onClick: handleAiReject,
25790
+ className: "px-4 py-2 text-sm font-medium hover:bg-surface border border-transparent hover:border-border rounded transition-colors",
25791
+ children: "Cancel"
25792
+ }
25793
+ ),
25794
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
25795
+ "button",
25796
+ {
25797
+ onClick: handleAiApprove,
25798
+ className: "px-4 py-2 text-sm font-medium bg-brand text-white hover:brightness-110 rounded transition-all shadow-sm flex items-center gap-2",
25799
+ children: [
25800
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "✨" }),
25801
+ " Approve & Fix"
25802
+ ]
25803
+ }
25804
+ )
25805
+ ] })
25806
+ ] }) }),
25478
25807
  isLocked && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 z-[100] bg-canvas/95 backdrop-blur-2xl flex flex-col items-center justify-center transition-opacity duration-500 overflow-hidden", children: [
25479
25808
  enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceScene, { fullScreen: true, onGameActiveChange: setIsGameActive }),
25480
25809
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -25615,48 +25944,46 @@ function App() {
25615
25944
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: t("dailyMobileVerification") }),
25616
25945
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("dailyMobileDesc") })
25617
25946
  ] }),
25618
- /* @__PURE__ */ jsxRuntimeExports.jsx(
25619
- "button",
25620
- {
25621
- type: "button",
25622
- onClick: () => {
25623
- const next = !dailyAuthEnabled;
25624
- setDailyAuthEnabled(next);
25625
- localStorage.setItem("gitelectron-daily-auth", next ? "true" : "false");
25626
- },
25627
- className: `relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 focus:outline-none ${dailyAuthEnabled ? "bg-accent" : "bg-surface-hover"}`,
25628
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
25629
- "span",
25630
- {
25631
- className: `pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out ${dailyAuthEnabled ? "translate-x-4" : "translate-x-0"}`
25947
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch", children: [
25948
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
25949
+ "input",
25950
+ {
25951
+ className: "toggle",
25952
+ type: "checkbox",
25953
+ checked: dailyAuthEnabled,
25954
+ onChange: (e) => {
25955
+ const next = e.target.checked;
25956
+ setDailyAuthEnabled(next);
25957
+ localStorage.setItem("gitelectron-daily-auth", next ? "true" : "false");
25632
25958
  }
25633
- )
25634
- }
25635
- )
25959
+ }
25960
+ ),
25961
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
25962
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
25963
+ ] })
25636
25964
  ] }) }),
25637
25965
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-3 mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
25638
25966
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
25639
25967
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-semibold text-secondary", children: t("enableSpaceScene") }),
25640
25968
  /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary/60 mt-0.5", children: t("spaceSceneDesc") })
25641
25969
  ] }),
25642
- /* @__PURE__ */ jsxRuntimeExports.jsx(
25643
- "button",
25644
- {
25645
- type: "button",
25646
- onClick: () => {
25647
- const next = !enableLockscreenSpace;
25648
- setEnableLockscreenSpace(next);
25649
- localStorage.setItem("gitelectron-enable-space", next ? "true" : "false");
25650
- },
25651
- className: `relative inline-flex h-5 w-9 flex-shrink-0 cursor-pointer rounded-full border-2 border-transparent transition-colors duration-200 focus:outline-none ${enableLockscreenSpace ? "bg-accent" : "bg-surface-hover"}`,
25652
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
25653
- "span",
25654
- {
25655
- className: `pointer-events-none inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out ${enableLockscreenSpace ? "translate-x-4" : "translate-x-0"}`
25970
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch", children: [
25971
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
25972
+ "input",
25973
+ {
25974
+ className: "toggle",
25975
+ type: "checkbox",
25976
+ checked: enableLockscreenSpace,
25977
+ onChange: (e) => {
25978
+ const next = e.target.checked;
25979
+ setEnableLockscreenSpace(next);
25980
+ localStorage.setItem("gitelectron-enable-space", next ? "true" : "false");
25656
25981
  }
25657
- )
25658
- }
25659
- )
25982
+ }
25983
+ ),
25984
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
25985
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
25986
+ ] })
25660
25987
  ] }) }),
25661
25988
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-3 mt-1", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2", children: [
25662
25989
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
@@ -25969,30 +26296,7 @@ function App() {
25969
26296
  }
25970
26297
  )
25971
26298
  ] }),
25972
- expandedCommits[commit.hash] && commit.diff && commit.diff.files && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-3 bg-canvas/30 border border-border rounded p-2 text-[11px] font-mono max-h-64 overflow-y-auto custom-scrollbar", children: commit.diff.files.map((f, idx) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
25973
- "div",
25974
- {
25975
- className: "flex items-center justify-between py-1.5 border-b border-border/40 last:border-0 hover:bg-surface-hover/50 px-2 rounded transition-colors",
25976
- children: [
25977
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate text-secondary max-w-[75%]", title: f.file, children: f.file }),
25978
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
25979
- f.status === "A" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-bold bg-success/20 text-success border border-success/30 px-1.5 py-0.5 rounded", children: "Added" }),
25980
- f.status === "M" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-bold bg-warning/20 text-warning border border-warning/30 px-1.5 py-0.5 rounded", children: "Modified" }),
25981
- f.status === "D" && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-bold bg-danger/20 text-danger border border-danger/30 px-1.5 py-0.5 rounded", children: "Deleted" }),
25982
- f.status?.startsWith("R") && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-bold bg-accent/20 text-accent border border-accent/30 px-1.5 py-0.5 rounded", children: "Renamed" }),
25983
- !f.status && f.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-success w-8 text-right", children: [
25984
- "+",
25985
- f.insertions
25986
- ] }),
25987
- !f.status && f.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-danger w-8 text-right", children: [
25988
- "-",
25989
- f.deletions
25990
- ] })
25991
- ] })
25992
- ]
25993
- },
25994
- idx
25995
- )) })
26299
+ expandedCommits[commit.hash] && commit.diff && commit.diff.files && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4 flex justify-center pb-8 border-t border-border/40 pt-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(CommitReceiptPrinter, { commit }) })
25996
26300
  ]
25997
26301
  },
25998
26302
  commit.hash
@@ -26065,15 +26369,10 @@ function App() {
26065
26369
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-3 bg-canvas border border-accent/50 shadow-[0_0_15px_rgba(var(--color-accent),0.15)] rounded-lg p-3 mb-4 text-left relative overflow-hidden", children: [
26066
26370
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-accent/5 animate-pulse pointer-events-none" }),
26067
26371
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-6 h-6 rounded-full bg-accent/20 border border-accent/40 flex items-center justify-center flex-shrink-0 mt-0.5 relative z-10", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-bold text-accent", children: "2" }) }),
26068
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative z-10", children: [
26069
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: "Code Auto-Copied to Clipboard!" }),
26070
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-secondary mt-0.5", children: [
26071
- "Your code",
26072
- " ",
26073
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-accent font-bold text-[13px] bg-accent/10 px-2 py-0.5 rounded border border-accent/20 mx-1", children: deviceFlowData.user_code }),
26074
- " ",
26075
- "is in your clipboard. Just paste it in the browser!"
26076
- ] })
26372
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "relative z-10 w-full flex flex-col items-center", children: [
26373
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary self-start", children: "Code Auto-Copied to Clipboard!" }),
26374
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5 self-start", children: "Your authorization code is below. Just paste it in the browser!" }),
26375
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4 w-full", children: /* @__PURE__ */ jsxRuntimeExports.jsx(AuthCodePrinter, { code: deviceFlowData.user_code }) })
26077
26376
  ] })
26078
26377
  ] }),
26079
26378
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-start gap-3 bg-canvas border border-border rounded-lg p-3 mb-5 text-left", children: [
@@ -27117,12 +27416,12 @@ function App() {
27117
27416
  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
27118
27417
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-hidden flex flex-col lg:flex-row gap-6 pb-2", children: [
27119
27418
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 bg-surface/70 backdrop-blur-md rounded-xl border border-border flex flex-col transition-colors duration-300 overflow-hidden", children: [
27120
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center border-b border-border px-4 pt-3 gap-1", children: [
27419
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center border-b border-border px-4 pt-3 gap-y-2 gap-x-1", children: [
27121
27420
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27122
27421
  "button",
27123
27422
  {
27124
27423
  onClick: () => setChangesTab("changes"),
27125
- className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 ${changesTab === "changes" ? "text-primary border-accent bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27424
+ className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 whitespace-nowrap flex-shrink-0 ${changesTab === "changes" ? "text-primary border-accent bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27126
27425
  children: [
27127
27426
  "Changes",
27128
27427
  status.not_added.length + status.modified.length + status.created.length + status.conflicted.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-1.5 bg-accent/20 text-accent text-[10px] font-bold px-1.5 py-0.5 rounded-full", children: status.not_added.length + status.modified.length + status.created.length + status.conflicted.length })
@@ -27133,7 +27432,7 @@ function App() {
27133
27432
  "button",
27134
27433
  {
27135
27434
  onClick: () => setChangesTab("deleted"),
27136
- className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 ${changesTab === "deleted" ? "text-primary border-danger bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27435
+ className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 whitespace-nowrap flex-shrink-0 ${changesTab === "deleted" ? "text-primary border-danger bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27137
27436
  children: [
27138
27437
  "Deleted",
27139
27438
  status.deleted.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-1.5 bg-danger/20 text-danger text-[10px] font-bold px-1.5 py-0.5 rounded-full", children: status.deleted.length })
@@ -27148,7 +27447,7 @@ function App() {
27148
27447
  window.api.getCollaboratedRepos().then((repos) => setCollaboratedRepos(repos || [])).catch(() => {
27149
27448
  });
27150
27449
  },
27151
- className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 ${changesTab === "collaboration-repo" ? "text-primary border-brand bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27450
+ className: `text-xs font-semibold px-3 py-1.5 rounded-t-md transition-colors border-b-2 whitespace-nowrap flex-shrink-0 ${changesTab === "collaboration-repo" ? "text-primary border-brand bg-canvas/50" : "text-secondary border-transparent hover:text-primary"}`,
27152
27451
  children: [
27153
27452
  "Collaboration Repo",
27154
27453
  collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-1.5 bg-brand/20 text-brand text-[10px] font-bold px-1.5 py-0.5 rounded-full", children: collaboratedRepos.length })
@@ -27161,7 +27460,7 @@ function App() {
27161
27460
  {
27162
27461
  onClick: handleUploadFiles,
27163
27462
  disabled: !repoPath || isUploading,
27164
- className: "text-xs bg-brand/10 hover:bg-brand/20 text-brand border border-brand/30 px-2.5 py-1 rounded-md transition-all flex items-center gap-1.5 font-medium shadow-sm disabled:opacity-50",
27463
+ className: "text-xs bg-brand/10 hover:bg-brand/20 text-brand border border-brand/30 px-2.5 py-1 rounded-md transition-all flex items-center gap-1.5 font-medium shadow-sm disabled:opacity-50 whitespace-nowrap flex-shrink-0",
27165
27464
  title: "Upload files directly into this repository",
27166
27465
  children: [
27167
27466
  /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3.5 h-3.5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" }) }),
@@ -27173,7 +27472,7 @@ function App() {
27173
27472
  "button",
27174
27473
  {
27175
27474
  onClick: handleStageAll,
27176
- className: "text-xs bg-surface-hover text-primary px-2.5 py-1 rounded-md transition-colors border border-border hover:brightness-110",
27475
+ className: "text-xs bg-surface-hover text-primary px-2.5 py-1 rounded-md transition-colors border border-border hover:brightness-110 whitespace-nowrap flex-shrink-0",
27177
27476
  children: "Stage All"
27178
27477
  }
27179
27478
  )
@@ -27184,15 +27483,15 @@ function App() {
27184
27483
  status.conflicted.map((f) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
27185
27484
  "li",
27186
27485
  {
27187
- className: "flex justify-between items-center hover:bg-surface-hover px-2 py-1.5 rounded-md group transition-colors",
27486
+ className: `flex justify-between items-center px-2 py-1.5 rounded-md group transition-colors ${failedFiles.includes(f) ? "bg-danger/10 border border-danger/20" : "hover:bg-surface-hover"}`,
27188
27487
  children: [
27189
27488
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27190
27489
  "span",
27191
27490
  {
27192
27491
  onClick: () => viewDiff(f, false),
27193
- className: "text-xs text-warning font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate",
27492
+ className: `text-xs font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate ${failedFiles.includes(f) ? "text-danger" : "text-warning"}`,
27194
27493
  children: [
27195
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-shrink-0 text-[10px] font-bold bg-warning/20 text-warning border border-warning/30 px-1 rounded", children: "!" }),
27494
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-shrink-0 text-[10px] font-bold px-1 rounded border ${failedFiles.includes(f) ? "bg-danger/20 border-danger/30 text-danger" : "bg-warning/20 text-warning border-warning/30"}`, children: failedFiles.includes(f) ? "X" : "!" }),
27196
27495
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: f })
27197
27496
  ]
27198
27497
  }
@@ -27222,15 +27521,15 @@ function App() {
27222
27521
  status.not_added.map((f) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
27223
27522
  "li",
27224
27523
  {
27225
- className: "flex justify-between items-center hover:bg-surface-hover px-2 py-1.5 rounded-md group transition-colors",
27524
+ className: `flex justify-between items-center px-2 py-1.5 rounded-md group transition-colors ${failedFiles.includes(f) ? "bg-danger/10 border border-danger/20" : "hover:bg-surface-hover"}`,
27226
27525
  children: [
27227
27526
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27228
27527
  "span",
27229
27528
  {
27230
27529
  onClick: () => viewDiff(f, false),
27231
- className: "text-xs text-success font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate",
27530
+ className: `text-xs font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate ${failedFiles.includes(f) ? "text-danger" : "text-success"}`,
27232
27531
  children: [
27233
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-shrink-0 text-[10px] font-bold bg-success/20 text-success border border-success/30 px-1 rounded", children: "U" }),
27532
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-shrink-0 text-[10px] font-bold px-1 rounded border ${failedFiles.includes(f) ? "bg-danger/20 border-danger/30 text-danger" : "bg-success/20 text-success border-success/30"}`, children: failedFiles.includes(f) ? "X" : "U" }),
27234
27533
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: f })
27235
27534
  ]
27236
27535
  }
@@ -27260,15 +27559,15 @@ function App() {
27260
27559
  status.modified.filter((f) => !status.conflicted.includes(f)).map((f) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
27261
27560
  "li",
27262
27561
  {
27263
- className: "flex justify-between items-center hover:bg-surface-hover px-2 py-1.5 rounded-md group transition-colors",
27562
+ className: `flex justify-between items-center px-2 py-1.5 rounded-md group transition-colors ${failedFiles.includes(f) ? "bg-danger/10 border border-danger/20" : "hover:bg-surface-hover"}`,
27264
27563
  children: [
27265
27564
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27266
27565
  "span",
27267
27566
  {
27268
27567
  onClick: () => viewDiff(f, false),
27269
- className: "text-xs text-warning font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate",
27568
+ className: `text-xs font-mono cursor-pointer flex-1 flex items-center gap-1.5 truncate ${failedFiles.includes(f) ? "text-danger" : "text-warning"}`,
27270
27569
  children: [
27271
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "flex-shrink-0 text-[10px] font-bold bg-warning/20 text-warning border border-warning/30 px-1 rounded", children: "M" }),
27570
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `flex-shrink-0 text-[10px] font-bold px-1 rounded border ${failedFiles.includes(f) ? "bg-danger/20 border-danger/30 text-danger" : "bg-warning/20 text-warning border-warning/30"}`, children: failedFiles.includes(f) ? "X" : "M" }),
27272
27571
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: f })
27273
27572
  ]
27274
27573
  }