gitxelectron 1.3.9 → 1.4.2
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/bin/ai-setup.js +46 -0
- package/bin/cli.js +35 -13
- package/out/main/index.js +730 -303
- package/out/preload/index.js +1 -0
- package/out/renderer/assets/{index-Dtxyy2BB.js → index-7yJPiur0.js} +1713 -626
- package/out/renderer/assets/index-CI-_rJcn.css +2989 -0
- package/out/renderer/index.html +14 -11
- package/package.json +2 -1
- package/out/renderer/assets/index-Bhk4vMRr.css +0 -2989
|
@@ -12750,37 +12750,6 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12750
12750
|
const [localProgress, setLocalProgress] = reactExports.useState(
|
|
12751
12751
|
null
|
|
12752
12752
|
);
|
|
12753
|
-
reactExports.useEffect(() => {
|
|
12754
|
-
checkAuth();
|
|
12755
|
-
if (window.api.onMassivePushProgress) {
|
|
12756
|
-
window.api.onMassivePushProgress((data) => {
|
|
12757
|
-
setMassivePushData(data);
|
|
12758
|
-
});
|
|
12759
|
-
}
|
|
12760
|
-
}, []);
|
|
12761
|
-
const checkAuth = async () => {
|
|
12762
|
-
const status = await window.api.getAuthStatus();
|
|
12763
|
-
if (status.status !== "Verified") {
|
|
12764
|
-
startAuth();
|
|
12765
|
-
} else {
|
|
12766
|
-
setStep(2);
|
|
12767
|
-
fetchUserRepos();
|
|
12768
|
-
}
|
|
12769
|
-
};
|
|
12770
|
-
const startAuth = async () => {
|
|
12771
|
-
try {
|
|
12772
|
-
const data = await window.api.startDeviceFlow();
|
|
12773
|
-
setDeviceFlowData(data);
|
|
12774
|
-
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
12775
|
-
const newStatus = await window.api.getAuthStatus();
|
|
12776
|
-
if (newStatus.status === "Verified") {
|
|
12777
|
-
setStep(2);
|
|
12778
|
-
fetchUserRepos();
|
|
12779
|
-
}
|
|
12780
|
-
} catch (e) {
|
|
12781
|
-
setError(e.message);
|
|
12782
|
-
}
|
|
12783
|
-
};
|
|
12784
12753
|
const fetchUserRepos = async () => {
|
|
12785
12754
|
try {
|
|
12786
12755
|
const repos = await window.api.getUserRepositories();
|
|
@@ -12792,6 +12761,41 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12792
12761
|
console.error(e);
|
|
12793
12762
|
}
|
|
12794
12763
|
};
|
|
12764
|
+
reactExports.useEffect(() => {
|
|
12765
|
+
let isMounted = true;
|
|
12766
|
+
const verifyAndLoad = async () => {
|
|
12767
|
+
try {
|
|
12768
|
+
const status = await window.api.getAuthStatus();
|
|
12769
|
+
if (!isMounted) return;
|
|
12770
|
+
if (status.status !== "Verified") {
|
|
12771
|
+
const data = await window.api.startDeviceFlow();
|
|
12772
|
+
if (!isMounted) return;
|
|
12773
|
+
setDeviceFlowData(data);
|
|
12774
|
+
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
12775
|
+
const newStatus = await window.api.getAuthStatus();
|
|
12776
|
+
if (!isMounted) return;
|
|
12777
|
+
if (newStatus.status === "Verified") {
|
|
12778
|
+
setStep(2);
|
|
12779
|
+
fetchUserRepos();
|
|
12780
|
+
}
|
|
12781
|
+
} else {
|
|
12782
|
+
setStep(2);
|
|
12783
|
+
fetchUserRepos();
|
|
12784
|
+
}
|
|
12785
|
+
} catch (e) {
|
|
12786
|
+
if (isMounted) setError(e.message);
|
|
12787
|
+
}
|
|
12788
|
+
};
|
|
12789
|
+
verifyAndLoad();
|
|
12790
|
+
if (window.api.onMassivePushProgress) {
|
|
12791
|
+
window.api.onMassivePushProgress((data) => {
|
|
12792
|
+
setMassivePushData(data);
|
|
12793
|
+
});
|
|
12794
|
+
}
|
|
12795
|
+
return () => {
|
|
12796
|
+
isMounted = false;
|
|
12797
|
+
};
|
|
12798
|
+
}, []);
|
|
12795
12799
|
const handleProceed = async () => {
|
|
12796
12800
|
setIsLoading(true);
|
|
12797
12801
|
setError("");
|
|
@@ -12799,6 +12803,7 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12799
12803
|
localStorage.setItem("gitquickpush-last-repo", repoPath);
|
|
12800
12804
|
setLocalProgress({ percentage: 5, eta: "Initializing Git locally..." });
|
|
12801
12805
|
await window.api.initRepo(repoPath);
|
|
12806
|
+
await window.api.setRepoPath(repoPath);
|
|
12802
12807
|
if (action === "new") {
|
|
12803
12808
|
setLocalProgress({ percentage: 15, eta: "Creating GitHub Repository..." });
|
|
12804
12809
|
const autoInit = addReadme || !!gitignoreTemplate || !!licenseTemplate;
|
|
@@ -12812,9 +12817,10 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12812
12817
|
);
|
|
12813
12818
|
setLocalProgress({ percentage: 35, eta: "Linking Remote..." });
|
|
12814
12819
|
await window.api.addRemote("origin", newRepo.clone_url);
|
|
12820
|
+
const defaultBranch = newRepo.default_branch || "main";
|
|
12815
12821
|
if (autoInit) {
|
|
12816
12822
|
setLocalProgress({ percentage: 45, eta: "Syncing with Remote..." });
|
|
12817
|
-
await window.api.resetToRemote("origin",
|
|
12823
|
+
await window.api.resetToRemote("origin", defaultBranch);
|
|
12818
12824
|
}
|
|
12819
12825
|
setLocalProgress({ percentage: 55, eta: "Scanning files..." });
|
|
12820
12826
|
const status = await window.api.getStatus();
|
|
@@ -12832,7 +12838,7 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12832
12838
|
}
|
|
12833
12839
|
setLocalProgress({ percentage: 95, eta: "Pushing to GitHub..." });
|
|
12834
12840
|
const branches = await window.api.getBranches();
|
|
12835
|
-
const currentBranch = branches.current ||
|
|
12841
|
+
const currentBranch = branches.current || defaultBranch;
|
|
12836
12842
|
await window.api.pushToRemote("origin", currentBranch);
|
|
12837
12843
|
setLocalProgress({ percentage: 100, eta: "Complete!" });
|
|
12838
12844
|
} else if (action === "existing") {
|
|
@@ -12842,8 +12848,10 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12842
12848
|
setLocalProgress({ percentage: 80, eta: "Fetching remote data..." });
|
|
12843
12849
|
await window.api.fetchRemote();
|
|
12844
12850
|
}
|
|
12851
|
+
await window.api.setRepoPath(repoPath);
|
|
12845
12852
|
setLocalProgress({ percentage: 100, eta: "Complete!" });
|
|
12846
12853
|
} else if (action === "local") {
|
|
12854
|
+
await window.api.setRepoPath(repoPath);
|
|
12847
12855
|
localStorage.setItem(`gitquickpush-wizard-dismissed-${repoPath}`, "true");
|
|
12848
12856
|
}
|
|
12849
12857
|
onSuccess();
|
|
@@ -13819,8 +13827,16 @@ const LiveGitHubSpace = React.memo(() => {
|
|
|
13819
13827
|
pollEvents();
|
|
13820
13828
|
const intervalId = setInterval(pollEvents, 6e4);
|
|
13821
13829
|
let lastSpawnTime = 0;
|
|
13830
|
+
let lastDrawTime = 0;
|
|
13831
|
+
const FPS = 30;
|
|
13832
|
+
const frameInterval = 1e3 / FPS;
|
|
13822
13833
|
const update = (time2) => {
|
|
13823
13834
|
if (!isRunning) return;
|
|
13835
|
+
if (time2 - lastDrawTime < frameInterval) {
|
|
13836
|
+
animationFrameId = requestAnimationFrame(update);
|
|
13837
|
+
return;
|
|
13838
|
+
}
|
|
13839
|
+
lastDrawTime = time2;
|
|
13824
13840
|
if (time2 - lastSpawnTime > 800 && (eventQueue.length > 0 || fallbackQueue.length > 0)) {
|
|
13825
13841
|
let ev;
|
|
13826
13842
|
if (eventQueue.length > 0) {
|
|
@@ -13846,8 +13862,7 @@ const LiveGitHubSpace = React.memo(() => {
|
|
|
13846
13862
|
});
|
|
13847
13863
|
lastSpawnTime = time2;
|
|
13848
13864
|
}
|
|
13849
|
-
ctx.
|
|
13850
|
-
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
13865
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
13851
13866
|
ctx.fillStyle = "white";
|
|
13852
13867
|
stars.forEach((s) => {
|
|
13853
13868
|
s.x -= s.speed;
|
|
@@ -14254,7 +14269,7 @@ const DiceGame = () => {
|
|
|
14254
14269
|
) })
|
|
14255
14270
|
] }) });
|
|
14256
14271
|
};
|
|
14257
|
-
const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
|
|
14272
|
+
const SpaceScene = ({ fullScreen, liteMode, onGameActiveChange }) => {
|
|
14258
14273
|
const [isOnline, setIsOnline] = reactExports.useState(navigator.onLine);
|
|
14259
14274
|
const [activeMode, setActiveMode] = reactExports.useState("none");
|
|
14260
14275
|
reactExports.useEffect(() => {
|
|
@@ -14290,10 +14305,12 @@ const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
|
|
|
14290
14305
|
{
|
|
14291
14306
|
className: `${fullScreen ? "absolute inset-0 z-0" : "relative w-full h-48 rounded-xl mb-6 border border-border mt-2 shadow-inner"} bg-[#0d1117] overflow-hidden group`,
|
|
14292
14307
|
children: [
|
|
14293
|
-
|
|
14294
|
-
|
|
14295
|
-
|
|
14296
|
-
|
|
14308
|
+
liteMode ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-[radial-gradient(ellipse_at_center,_var(--tw-gradient-stops))] from-slate-900 via-[#0d1117] to-[#0d1117]", children: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-4 right-4 flex items-center justify-center text-white/15 pointer-events-none", title: "Lite Mode Active", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M13 10V3L4 14h7v7l9-11h-7z" }) }) }) }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
14309
|
+
currentMode === "retro" && /* @__PURE__ */ jsxRuntimeExports.jsx(RetroSpaceGame, {}),
|
|
14310
|
+
currentMode === "2048" && /* @__PURE__ */ jsxRuntimeExports.jsx(LogicGame2048, {}),
|
|
14311
|
+
currentMode === "dice" && /* @__PURE__ */ jsxRuntimeExports.jsx(DiceGame, {}),
|
|
14312
|
+
currentMode === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx(LiveGitHubSpace, {})
|
|
14313
|
+
] }),
|
|
14297
14314
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
14298
14315
|
"button",
|
|
14299
14316
|
{
|
|
@@ -23143,7 +23160,7 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23143
23160
|
reset();
|
|
23144
23161
|
}
|
|
23145
23162
|
}, [isOpen]);
|
|
23146
|
-
|
|
23163
|
+
function reset() {
|
|
23147
23164
|
setStep("START");
|
|
23148
23165
|
setFiles([]);
|
|
23149
23166
|
setAccounts([]);
|
|
@@ -23163,7 +23180,7 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23163
23180
|
setShowDiff(false);
|
|
23164
23181
|
setCommitMessage("");
|
|
23165
23182
|
setErrorMsg("");
|
|
23166
|
-
}
|
|
23183
|
+
}
|
|
23167
23184
|
const handleClose = async () => {
|
|
23168
23185
|
if (workspacePath) {
|
|
23169
23186
|
await window.api.cleanupUniversalWorkspace(workspacePath);
|
|
@@ -23898,22 +23915,27 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23898
23915
|
function WelcomeWizard({ onComplete }) {
|
|
23899
23916
|
const [step, setStep] = reactExports.useState(1);
|
|
23900
23917
|
const [deviceFlowData, setDeviceFlowData] = reactExports.useState(null);
|
|
23901
|
-
const [authStatus, setAuthStatus] = reactExports.useState(
|
|
23918
|
+
const [authStatus, setAuthStatus] = reactExports.useState(
|
|
23919
|
+
"pending"
|
|
23920
|
+
);
|
|
23902
23921
|
const [pinInput, setPinInput] = reactExports.useState("");
|
|
23903
23922
|
const [isFinishing, setIsFinishing] = reactExports.useState(false);
|
|
23904
23923
|
const [authError, setAuthError] = reactExports.useState("");
|
|
23905
23924
|
const [isCopied, setIsCopied] = reactExports.useState(false);
|
|
23906
|
-
const copyCodeToClipboard = reactExports.useCallback(
|
|
23907
|
-
|
|
23908
|
-
|
|
23909
|
-
|
|
23910
|
-
|
|
23911
|
-
|
|
23912
|
-
|
|
23913
|
-
|
|
23914
|
-
|
|
23915
|
-
|
|
23916
|
-
|
|
23925
|
+
const copyCodeToClipboard = reactExports.useCallback(
|
|
23926
|
+
async (codeToCopy) => {
|
|
23927
|
+
const code = codeToCopy || deviceFlowData?.user_code;
|
|
23928
|
+
if (!code) return;
|
|
23929
|
+
try {
|
|
23930
|
+
await navigator.clipboard.writeText(code);
|
|
23931
|
+
setIsCopied(true);
|
|
23932
|
+
setTimeout(() => setIsCopied(false), 2500);
|
|
23933
|
+
} catch (err) {
|
|
23934
|
+
console.warn("Failed to copy to clipboard", err);
|
|
23935
|
+
}
|
|
23936
|
+
},
|
|
23937
|
+
[deviceFlowData]
|
|
23938
|
+
);
|
|
23917
23939
|
const startAuth = async () => {
|
|
23918
23940
|
try {
|
|
23919
23941
|
setAuthStatus("waiting");
|
|
@@ -24812,7 +24834,7 @@ const CollaborationRepoView = ({
|
|
|
24812
24834
|
collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 text-xs text-secondary flex-wrap px-1", children: [
|
|
24813
24835
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-medium text-secondary/80", children: "Filter summary:" }),
|
|
24814
24836
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "inline-flex items-center gap-1 bg-surface border border-border px-2.5 py-1 rounded-lg font-mono text-[11px] text-primary", children: [
|
|
24815
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-2 h-2 rounded-full bg-
|
|
24837
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-2 h-2 rounded-full bg-emerald-400" }),
|
|
24816
24838
|
connectedCount,
|
|
24817
24839
|
" Connected"
|
|
24818
24840
|
] }),
|
|
@@ -24909,7 +24931,7 @@ const CollaborationRepoView = ({
|
|
|
24909
24931
|
children: repo.name
|
|
24910
24932
|
}
|
|
24911
24933
|
),
|
|
24912
|
-
repo.private ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] bg-amber-500/10 text-amber-400 border border-amber-500/25 px-2 py-0.2 rounded-full font-medium flex-shrink-0", children: "Private" }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] bg-emerald-500/10 text-
|
|
24934
|
+
repo.private ? /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] bg-amber-500/10 text-amber-400 border border-amber-500/25 px-2 py-0.2 rounded-full font-medium flex-shrink-0", children: "Private" }) : /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] bg-emerald-500/10 text-emerald-400 border border-emerald-500/25 px-2 py-0.2 rounded-full font-medium flex-shrink-0", children: "Public" }),
|
|
24913
24935
|
isCurrentActive && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[9px] bg-brand text-white px-2 py-0.5 rounded-full font-bold uppercase tracking-wider flex-shrink-0 shadow-xs", children: "Active" })
|
|
24914
24936
|
] }),
|
|
24915
24937
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-1 text-xs text-secondary min-w-0 flex-wrap", children: [
|
|
@@ -24953,7 +24975,7 @@ const CollaborationRepoView = ({
|
|
|
24953
24975
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 flex-1", children: savedPath ? isMissing ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
24954
24976
|
"div",
|
|
24955
24977
|
{
|
|
24956
|
-
className: "inline-flex items-center gap-1.5 text-xs text-danger font-mono bg-danger
|
|
24978
|
+
className: "inline-flex items-center gap-1.5 text-xs text-danger font-mono bg-danger/10 border border-danger/30 px-2.5 py-1 rounded-lg min-w-0 max-w-full truncate",
|
|
24957
24979
|
title: `Folder was deleted or moved: ${savedPath}`,
|
|
24958
24980
|
children: [
|
|
24959
24981
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-danger animate-pulse flex-shrink-0" }),
|
|
@@ -24963,10 +24985,10 @@ const CollaborationRepoView = ({
|
|
|
24963
24985
|
) : /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
24964
24986
|
"div",
|
|
24965
24987
|
{
|
|
24966
|
-
className: "inline-flex items-center gap-1.5 text-xs text-
|
|
24988
|
+
className: "inline-flex items-center gap-1.5 text-xs text-emerald-400 font-mono bg-emerald-500/10 border border-emerald-500/25 px-2.5 py-1 rounded-lg min-w-0 max-w-full truncate",
|
|
24967
24989
|
title: savedPath,
|
|
24968
24990
|
children: [
|
|
24969
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-
|
|
24991
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400 flex-shrink-0" }),
|
|
24970
24992
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "truncate", children: savedPath.split("\\").pop() || savedPath })
|
|
24971
24993
|
]
|
|
24972
24994
|
}
|
|
@@ -25045,7 +25067,7 @@ const CollaborationRepoView = ({
|
|
|
25045
25067
|
e.stopPropagation();
|
|
25046
25068
|
onRepoCardClick(repo);
|
|
25047
25069
|
},
|
|
25048
|
-
className: `px-3.5 py-1.5 text-xs font-semibold rounded-xl transition-all shadow-xs flex items-center gap-1.5 ${savedPath ? isMissing ? "bg-danger hover:bg-danger text-white
|
|
25070
|
+
className: `px-3.5 py-1.5 text-xs font-semibold rounded-xl transition-all shadow-xs flex items-center gap-1.5 ${savedPath ? isMissing ? "bg-danger hover:bg-danger/80 text-white border border-danger/40" : "bg-brand hover:bg-brand-hover text-white shadow-brand/20" : "bg-brand hover:bg-brand-hover text-white shadow-brand/20"}`,
|
|
25049
25071
|
children: [
|
|
25050
25072
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: savedPath ? isMissing ? "Re-Clone" : "Open Repo" : "Clone" }),
|
|
25051
25073
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isMissing ? "☁️" : savedPath ? "→" : "☁️" })
|
|
@@ -25083,7 +25105,7 @@ const CommitReceiptPrinter = ({
|
|
|
25083
25105
|
commit,
|
|
25084
25106
|
onClose
|
|
25085
25107
|
}) => {
|
|
25086
|
-
const [isPrinted, setIsPrinted] = reactExports.useState(
|
|
25108
|
+
const [isPrinted, setIsPrinted] = reactExports.useState(false);
|
|
25087
25109
|
const [searchQuery, setSearchQuery] = reactExports.useState("");
|
|
25088
25110
|
const [scrollTop, setScrollTop] = reactExports.useState(0);
|
|
25089
25111
|
const scrollRef = reactExports.useRef(null);
|
|
@@ -25118,13 +25140,13 @@ const CommitReceiptPrinter = ({
|
|
|
25118
25140
|
onClose && /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "printer-close-btn", onClick: onClose, title: "Close Printer", children: "✕" }),
|
|
25119
25141
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "printer-machine-head", children: [
|
|
25120
25142
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "printer" }),
|
|
25121
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "printer-display", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "printer-message", children: searchQuery ? `${filteredFiles.length} found` : `${allFiles.length} files` }) }),
|
|
25143
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "printer-display", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "printer-message", children: isPrinted ? searchQuery ? `${filteredFiles.length} found` : `${allFiles.length} files` : "Click 🖨 to print" }) }),
|
|
25122
25144
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25123
25145
|
"button",
|
|
25124
25146
|
{
|
|
25125
25147
|
className: "print-button",
|
|
25126
25148
|
onClick: () => setIsPrinted(!isPrinted),
|
|
25127
|
-
title: isPrinted ? "
|
|
25149
|
+
title: isPrinted ? "Roll Up Receipt" : "Print Receipt",
|
|
25128
25150
|
children: "🖨"
|
|
25129
25151
|
}
|
|
25130
25152
|
)
|
|
@@ -25149,6 +25171,16 @@ const CommitReceiptPrinter = ({
|
|
|
25149
25171
|
] }),
|
|
25150
25172
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: new Date(commit.date).toLocaleString() })
|
|
25151
25173
|
] }),
|
|
25174
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "receipt-subheader text-[11px] text-gray-500 opacity-90 border-b border-dashed border-gray-300 pb-1 mb-2", children: [
|
|
25175
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
25176
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-semibold", children: "Security:" }),
|
|
25177
|
+
" Verified Commit ✓"
|
|
25178
|
+
] }),
|
|
25179
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
25180
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-semibold", children: "Protocol:" }),
|
|
25181
|
+
" HTTPS (GitHub Models AI)"
|
|
25182
|
+
] })
|
|
25183
|
+
] }),
|
|
25152
25184
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-search-bar", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25153
25185
|
"input",
|
|
25154
25186
|
{
|
|
@@ -25171,7 +25203,7 @@ const CommitReceiptPrinter = ({
|
|
|
25171
25203
|
className: "receipt-table-scroll custom-scrollbar",
|
|
25172
25204
|
onScroll: handleScroll,
|
|
25173
25205
|
style: { height: `${CONTAINER_HEIGHT}px` },
|
|
25174
|
-
children: filteredFiles.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-empty-state", children: "No matching files found." }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25206
|
+
children: filteredFiles.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-empty-state", children: allFiles.length === 0 ? "No file modifications recorded in this commit." : "No matching files found." }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25175
25207
|
"div",
|
|
25176
25208
|
{
|
|
25177
25209
|
style: { height: `${totalVirtualHeight}px`, position: "relative", width: "100%" },
|
|
@@ -25849,6 +25881,20 @@ function App() {
|
|
|
25849
25881
|
const [isResizing, setIsResizing] = reactExports.useState(false);
|
|
25850
25882
|
const { t, lang, setLang } = useTranslation();
|
|
25851
25883
|
const [appVersion, setAppVersion] = reactExports.useState("");
|
|
25884
|
+
const [liteMode, setLiteMode] = reactExports.useState(() => {
|
|
25885
|
+
const cores = navigator.hardwareConcurrency || 4;
|
|
25886
|
+
const memory = navigator.deviceMemory || 4;
|
|
25887
|
+
return cores < 6 || memory < 8;
|
|
25888
|
+
});
|
|
25889
|
+
reactExports.useEffect(() => {
|
|
25890
|
+
const handleKeyDown = (e) => {
|
|
25891
|
+
if ((e.ctrlKey || e.metaKey) && (e.key === "Delete" || e.key === "Backspace")) {
|
|
25892
|
+
setLiteMode((prev) => !prev);
|
|
25893
|
+
}
|
|
25894
|
+
};
|
|
25895
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
25896
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
25897
|
+
}, []);
|
|
25852
25898
|
reactExports.useEffect(() => {
|
|
25853
25899
|
const initVersion = async () => {
|
|
25854
25900
|
try {
|
|
@@ -25961,6 +26007,11 @@ function App() {
|
|
|
25961
26007
|
const [pushFailureData, setPushFailureData] = reactExports.useState(null);
|
|
25962
26008
|
const [gitErrorData, setGitErrorData] = reactExports.useState(null);
|
|
25963
26009
|
const [showSettings, setShowSettings] = reactExports.useState(false);
|
|
26010
|
+
const [showPrivacyModal, setShowPrivacyModal] = reactExports.useState(false);
|
|
26011
|
+
const [showForcePushModal, setShowForcePushModal] = reactExports.useState(false);
|
|
26012
|
+
const [isExecutingForcePush, setIsExecutingForcePush] = reactExports.useState(false);
|
|
26013
|
+
const [isClearingCache, setIsClearingCache] = reactExports.useState(false);
|
|
26014
|
+
const [settingsTab, setSettingsTab] = reactExports.useState("appearance");
|
|
25964
26015
|
const [draftTheme, setDraftTheme] = reactExports.useState("github-dark");
|
|
25965
26016
|
const [draftLang, setDraftLang] = reactExports.useState("en");
|
|
25966
26017
|
const [draftDailyAuth, setDraftDailyAuth] = reactExports.useState(true);
|
|
@@ -26011,6 +26062,11 @@ function App() {
|
|
|
26011
26062
|
const refreshLockRef = reactExports.useRef(false);
|
|
26012
26063
|
reactExports.useEffect(() => {
|
|
26013
26064
|
}, [gitProgress]);
|
|
26065
|
+
reactExports.useEffect(() => {
|
|
26066
|
+
const activeTheme = showSettings ? draftTheme : theme;
|
|
26067
|
+
document.documentElement.setAttribute("data-theme", activeTheme);
|
|
26068
|
+
document.body.setAttribute("data-theme", activeTheme);
|
|
26069
|
+
}, [theme, draftTheme, showSettings]);
|
|
26014
26070
|
const [showWelcomeWizard, setShowWelcomeWizard] = reactExports.useState(false);
|
|
26015
26071
|
const [newPin, setNewPin] = reactExports.useState("");
|
|
26016
26072
|
const [pinChangeSuccess, setPinChangeSuccess] = reactExports.useState(false);
|
|
@@ -26134,8 +26190,10 @@ function App() {
|
|
|
26134
26190
|
});
|
|
26135
26191
|
}, 3e4);
|
|
26136
26192
|
} else {
|
|
26137
|
-
|
|
26138
|
-
|
|
26193
|
+
Promise.resolve().then(() => {
|
|
26194
|
+
setCollaboratedRepos([]);
|
|
26195
|
+
setInvitations([]);
|
|
26196
|
+
});
|
|
26139
26197
|
}
|
|
26140
26198
|
return () => {
|
|
26141
26199
|
if (invInterval) clearInterval(invInterval);
|
|
@@ -26161,6 +26219,11 @@ function App() {
|
|
|
26161
26219
|
window.api.getCliRepo().then((cliRepoPath) => {
|
|
26162
26220
|
if (cliRepoPath) {
|
|
26163
26221
|
loadRepo(cliRepoPath);
|
|
26222
|
+
} else {
|
|
26223
|
+
const last = localStorage.getItem("gitelectron-last-repo");
|
|
26224
|
+
if (last) {
|
|
26225
|
+
loadRepo(last);
|
|
26226
|
+
}
|
|
26164
26227
|
}
|
|
26165
26228
|
});
|
|
26166
26229
|
}, []);
|
|
@@ -26199,7 +26262,9 @@ function App() {
|
|
|
26199
26262
|
};
|
|
26200
26263
|
window.addEventListener("online", handleOnline);
|
|
26201
26264
|
if (navigator.onLine) {
|
|
26202
|
-
|
|
26265
|
+
Promise.resolve().then(() => {
|
|
26266
|
+
processOfflineQueue();
|
|
26267
|
+
});
|
|
26203
26268
|
}
|
|
26204
26269
|
return () => window.removeEventListener("online", handleOnline);
|
|
26205
26270
|
}, [repoPath]);
|
|
@@ -26257,7 +26322,9 @@ function App() {
|
|
|
26257
26322
|
};
|
|
26258
26323
|
const handleThemeChange = (newTheme) => {
|
|
26259
26324
|
setTheme(newTheme);
|
|
26325
|
+
setDraftTheme(newTheme);
|
|
26260
26326
|
document.documentElement.setAttribute("data-theme", newTheme);
|
|
26327
|
+
document.body.setAttribute("data-theme", newTheme);
|
|
26261
26328
|
localStorage.setItem("gitelectron-theme", newTheme);
|
|
26262
26329
|
};
|
|
26263
26330
|
const handleAiApprove = async () => {
|
|
@@ -26297,10 +26364,13 @@ function App() {
|
|
|
26297
26364
|
localStorage.setItem("gitelectron-last-repo", targetPath);
|
|
26298
26365
|
setRepoPath(targetPath);
|
|
26299
26366
|
const result = await window.api.setRepoPath(targetPath);
|
|
26367
|
+
const finalPath = result?.path || targetPath;
|
|
26300
26368
|
const isValidRepo = result ? result.isRepo : false;
|
|
26369
|
+
setRepoPath(finalPath);
|
|
26301
26370
|
setIsRepo(isValidRepo);
|
|
26302
26371
|
if (isValidRepo) {
|
|
26303
|
-
|
|
26372
|
+
localStorage.setItem("gitelectron-last-repo", finalPath);
|
|
26373
|
+
window.api.toggleAutoSync(finalPath, true);
|
|
26304
26374
|
await refreshRepoState();
|
|
26305
26375
|
}
|
|
26306
26376
|
setChangesTab("changes");
|
|
@@ -26486,7 +26556,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26486
26556
|
}
|
|
26487
26557
|
}
|
|
26488
26558
|
};
|
|
26489
|
-
|
|
26559
|
+
async function refreshRepoState() {
|
|
26490
26560
|
if (refreshLockRef.current) return;
|
|
26491
26561
|
refreshLockRef.current = true;
|
|
26492
26562
|
setIsRefreshing(true);
|
|
@@ -26500,7 +26570,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26500
26570
|
try {
|
|
26501
26571
|
const dh = await window.api.getDeletedHistory();
|
|
26502
26572
|
setDeletedHistory(dh);
|
|
26503
|
-
} catch
|
|
26573
|
+
} catch {
|
|
26504
26574
|
}
|
|
26505
26575
|
const auth = await window.api.getAuthStatus();
|
|
26506
26576
|
setAuthStatus(auth);
|
|
@@ -26524,7 +26594,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26524
26594
|
urlObj.password = "";
|
|
26525
26595
|
fetchUrl = urlObj.toString();
|
|
26526
26596
|
}
|
|
26527
|
-
} catch
|
|
26597
|
+
} catch {
|
|
26528
26598
|
}
|
|
26529
26599
|
if (fetchUrl.endsWith(".git")) {
|
|
26530
26600
|
fetchUrl = fetchUrl.replace(/\.git$/, "");
|
|
@@ -26556,7 +26626,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26556
26626
|
}
|
|
26557
26627
|
}
|
|
26558
26628
|
}
|
|
26559
|
-
} catch
|
|
26629
|
+
} catch {
|
|
26560
26630
|
setBranches({ current: "No commits yet", all: [] });
|
|
26561
26631
|
}
|
|
26562
26632
|
})();
|
|
@@ -26604,14 +26674,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26604
26674
|
if (!exists) {
|
|
26605
26675
|
console.warn("Repository path does not exist on disk:", repoPath);
|
|
26606
26676
|
}
|
|
26607
|
-
} catch
|
|
26677
|
+
} catch {
|
|
26608
26678
|
}
|
|
26609
26679
|
}
|
|
26610
26680
|
} finally {
|
|
26611
26681
|
setIsRefreshing(false);
|
|
26612
26682
|
refreshLockRef.current = false;
|
|
26613
26683
|
}
|
|
26614
|
-
}
|
|
26684
|
+
}
|
|
26615
26685
|
const handleCreateBranchSubmit = async (name, base) => {
|
|
26616
26686
|
try {
|
|
26617
26687
|
await window.api.createBranch(name, base);
|
|
@@ -26641,7 +26711,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26641
26711
|
setShowAuthModal(true);
|
|
26642
26712
|
try {
|
|
26643
26713
|
await navigator.clipboard.writeText(data.user_code);
|
|
26644
|
-
} catch
|
|
26714
|
+
} catch {
|
|
26645
26715
|
}
|
|
26646
26716
|
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
26647
26717
|
setShowAuthModal(false);
|
|
@@ -26725,7 +26795,11 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26725
26795
|
showToast("Resolving conflicts: accepting remote changes...", "info");
|
|
26726
26796
|
await window.api.executeRawGit(["checkout", "--theirs", "."]);
|
|
26727
26797
|
await window.api.executeRawGit(["add", "."]);
|
|
26728
|
-
await window.api.executeRawGit([
|
|
26798
|
+
await window.api.executeRawGit([
|
|
26799
|
+
"commit",
|
|
26800
|
+
"-m",
|
|
26801
|
+
"Resolved conflicts (accepted remote changes)"
|
|
26802
|
+
]);
|
|
26729
26803
|
setPushFailureData(null);
|
|
26730
26804
|
await refreshRepoState();
|
|
26731
26805
|
showToast("✅ Conflicts resolved (accepted remote changes)", "success");
|
|
@@ -26819,11 +26893,17 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26819
26893
|
}
|
|
26820
26894
|
const isConflictErr = currentError.includes("unmerged files") || currentError.includes("unresolved conflict") || currentError.includes("automatic merge failed") || currentError.includes("you have unmerged paths");
|
|
26821
26895
|
if (isConflictErr) {
|
|
26822
|
-
setHealerMessage(
|
|
26896
|
+
setHealerMessage(
|
|
26897
|
+
"Unmerged conflict detected. Automatically resolving conflicted files..."
|
|
26898
|
+
);
|
|
26823
26899
|
try {
|
|
26824
26900
|
await window.api.executeRawGit(["checkout", "--ours", "."]);
|
|
26825
26901
|
await window.api.executeRawGit(["add", "."]);
|
|
26826
|
-
await window.api.executeRawGit([
|
|
26902
|
+
await window.api.executeRawGit([
|
|
26903
|
+
"commit",
|
|
26904
|
+
"-m",
|
|
26905
|
+
"Auto-resolved conflicts: kept local changes"
|
|
26906
|
+
]);
|
|
26827
26907
|
} catch {
|
|
26828
26908
|
try {
|
|
26829
26909
|
await window.api.executeRawGit(["merge", "--abort"]);
|
|
@@ -26939,7 +27019,12 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26939
27019
|
repository: repoPath?.split("\\").pop() || "",
|
|
26940
27020
|
branch: branches.current,
|
|
26941
27021
|
files: status.staged.length,
|
|
26942
|
-
commitMessage
|
|
27022
|
+
commitMessage,
|
|
27023
|
+
timestamp: (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }),
|
|
27024
|
+
author: authStatus.username ? `@${authStatus.username}` : "Git Author",
|
|
27025
|
+
authMethod: authStatus.authMethod || "GitHub OAuth",
|
|
27026
|
+
aiProvider: authStatus.aiProvider || "GitHub Models",
|
|
27027
|
+
securityStatus: authStatus.securityStatus || "End-to-End Encrypted"
|
|
26943
27028
|
});
|
|
26944
27029
|
setCommitMessage("");
|
|
26945
27030
|
setShowConfirmPush(false);
|
|
@@ -26972,7 +27057,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26972
27057
|
setShowAuthModal(true);
|
|
26973
27058
|
try {
|
|
26974
27059
|
await navigator.clipboard.writeText(data.user_code);
|
|
26975
|
-
} catch
|
|
27060
|
+
} catch {
|
|
26976
27061
|
}
|
|
26977
27062
|
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
26978
27063
|
setShowAuthModal(false);
|
|
@@ -26995,7 +27080,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26995
27080
|
try {
|
|
26996
27081
|
name = await window.api.getGitConfig("user.name");
|
|
26997
27082
|
email = await window.api.getGitConfig("user.email");
|
|
26998
|
-
} catch
|
|
27083
|
+
} catch {
|
|
26999
27084
|
}
|
|
27000
27085
|
if ((!name || !email) && accounts.length > 0) {
|
|
27001
27086
|
const activeAcc = accounts.find((a) => a.id === activeAccountId) || accounts[0];
|
|
@@ -27020,16 +27105,39 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27020
27105
|
showToast("Settings saved successfully", "success");
|
|
27021
27106
|
};
|
|
27022
27107
|
const cancelSettings = () => {
|
|
27108
|
+
setDraftTheme(theme);
|
|
27023
27109
|
document.documentElement.setAttribute("data-theme", theme);
|
|
27110
|
+
document.body.setAttribute("data-theme", theme);
|
|
27024
27111
|
setShowSettings(false);
|
|
27025
27112
|
};
|
|
27113
|
+
const handleExecuteForcePush = async () => {
|
|
27114
|
+
setIsExecutingForcePush(true);
|
|
27115
|
+
try {
|
|
27116
|
+
const remotes = await window.api.getRemotes();
|
|
27117
|
+
if (!remotes || remotes.length === 0) {
|
|
27118
|
+
showToast("No remote configured to push to.", "error");
|
|
27119
|
+
return;
|
|
27120
|
+
}
|
|
27121
|
+
const remoteName = remotes[0].name;
|
|
27122
|
+
const branchName = status?.current || "main";
|
|
27123
|
+
showToast(`Executing Master Force Push to ${remoteName}/${branchName}...`, "info");
|
|
27124
|
+
await window.api.masterPush(remoteName, branchName);
|
|
27125
|
+
showToast("Master Force Push successful!", "success");
|
|
27126
|
+
await refreshRepoState();
|
|
27127
|
+
setShowForcePushModal(false);
|
|
27128
|
+
} catch (err) {
|
|
27129
|
+
showToast("Force Push failed: " + (err.message || "Unknown error"), "error");
|
|
27130
|
+
} finally {
|
|
27131
|
+
setIsExecutingForcePush(false);
|
|
27132
|
+
}
|
|
27133
|
+
};
|
|
27026
27134
|
const viewDiff = async (file, staged) => {
|
|
27027
27135
|
setDiffFile(file);
|
|
27028
27136
|
try {
|
|
27029
27137
|
const diffStr = await window.api.getFileDiff(file, staged);
|
|
27030
27138
|
setDiffContent(diffStr || "No changes to display.");
|
|
27031
27139
|
setShowDiff(true);
|
|
27032
|
-
} catch
|
|
27140
|
+
} catch {
|
|
27033
27141
|
showToast("Failed to get diff", "error");
|
|
27034
27142
|
}
|
|
27035
27143
|
};
|
|
@@ -27137,8 +27245,9 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27137
27245
|
onDragLeave: handleDragLeave,
|
|
27138
27246
|
onDrop: handleDrop,
|
|
27139
27247
|
children: [
|
|
27140
|
-
|
|
27141
|
-
(showSettings ? draftTheme : theme) === "
|
|
27248
|
+
liteMode && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-4 left-1/2 -translate-x-1/2 z-[200] bg-warning/20 border border-warning/50 text-warning px-4 py-1.5 rounded-full text-xs font-bold animate-pulse pointer-events-none tracking-widest shadow-lg shadow-warning/10", children: "⚡ LITE MODE ACTIVE" }),
|
|
27249
|
+
!liteMode && (showSettings ? draftTheme : theme) === "among-us-live" && /* @__PURE__ */ jsxRuntimeExports.jsx(AmongUsBackground, {}),
|
|
27250
|
+
!liteMode && (showSettings ? draftTheme : theme) === "space-explorer-3d" && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceExplorerBackground, {}),
|
|
27142
27251
|
showWelcomeWizard && /* @__PURE__ */ jsxRuntimeExports.jsx(WelcomeWizard, { onComplete: () => setShowWelcomeWizard(false) }),
|
|
27143
27252
|
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: [
|
|
27144
27253
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold text-danger mb-4", children: "Git Error" }),
|
|
@@ -27167,7 +27276,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27167
27276
|
] }),
|
|
27168
27277
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27169
27278
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-medium text-primary mb-1", children: "AI Proposed Fix" }),
|
|
27170
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-brand
|
|
27279
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-brand/10 border border-brand/20 p-3 rounded text-sm text-brand", children: autoSyncErrorPayload.proposedFix })
|
|
27171
27280
|
] }),
|
|
27172
27281
|
autoSyncErrorPayload.files && autoSyncErrorPayload.files.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27173
27282
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-medium text-primary mb-1", children: "Affected Files" }),
|
|
@@ -27201,7 +27310,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27201
27310
|
] })
|
|
27202
27311
|
] }) }),
|
|
27203
27312
|
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: [
|
|
27204
|
-
enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27313
|
+
!liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27314
|
+
SpaceScene,
|
|
27315
|
+
{
|
|
27316
|
+
fullScreen: true,
|
|
27317
|
+
liteMode,
|
|
27318
|
+
onGameActiveChange: setIsGameActive
|
|
27319
|
+
}
|
|
27320
|
+
),
|
|
27205
27321
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27206
27322
|
"div",
|
|
27207
27323
|
{
|
|
@@ -27283,214 +27399,412 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27283
27399
|
] }),
|
|
27284
27400
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute top-[-30%] left-[-20%] w-[60%] h-[60%] bg-accent/5 blur-[150px] rounded-full pointer-events-none transition-colors duration-300" }),
|
|
27285
27401
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute bottom-[-30%] right-[-20%] w-[60%] h-[60%] bg-brand/5 blur-[150px] rounded-full pointer-events-none transition-colors duration-300" }),
|
|
27286
|
-
showSettings && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/
|
|
27402
|
+
showSettings && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/80 backdrop-blur-md flex items-center justify-center z-50 transition-opacity p-4 md:p-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/98 backdrop-blur-2xl rounded-2xl shadow-2xl border border-border w-full max-w-5xl h-[720px] max-h-[92vh] flex flex-col overflow-hidden animate-float", children: [
|
|
27287
27403
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27288
27404
|
"div",
|
|
27289
27405
|
{
|
|
27290
|
-
className: "px-8 py-
|
|
27406
|
+
className: "px-8 py-5 border-b border-border shrink-0 flex items-center justify-between",
|
|
27291
27407
|
style: { backgroundColor: "var(--color-surface)" },
|
|
27292
27408
|
children: [
|
|
27409
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
27410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl bg-brand/10 border border-brand/20 flex items-center justify-center text-brand", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: [
|
|
27411
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27412
|
+
"path",
|
|
27413
|
+
{
|
|
27414
|
+
strokeLinecap: "round",
|
|
27415
|
+
strokeLinejoin: "round",
|
|
27416
|
+
strokeWidth: 2,
|
|
27417
|
+
d: "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"
|
|
27418
|
+
}
|
|
27419
|
+
),
|
|
27420
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27421
|
+
"path",
|
|
27422
|
+
{
|
|
27423
|
+
strokeLinecap: "round",
|
|
27424
|
+
strokeLinejoin: "round",
|
|
27425
|
+
strokeWidth: 2,
|
|
27426
|
+
d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
|
27427
|
+
}
|
|
27428
|
+
)
|
|
27429
|
+
] }) }),
|
|
27430
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27431
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-bold text-primary leading-tight", children: "Preferences & Settings" }),
|
|
27432
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Configure client environment, authentication tokens, and disk storage" })
|
|
27433
|
+
] })
|
|
27434
|
+
] }),
|
|
27435
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27436
|
+
"button",
|
|
27437
|
+
{
|
|
27438
|
+
type: "button",
|
|
27439
|
+
onClick: () => cancelSettings(),
|
|
27440
|
+
className: "w-8 h-8 rounded-lg text-secondary hover:text-primary hover:bg-surface-hover flex items-center justify-center transition-colors border border-transparent hover:border-border",
|
|
27441
|
+
title: "Close Preferences",
|
|
27442
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27443
|
+
"path",
|
|
27444
|
+
{
|
|
27445
|
+
strokeLinecap: "round",
|
|
27446
|
+
strokeLinejoin: "round",
|
|
27447
|
+
strokeWidth: 2,
|
|
27448
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
27449
|
+
}
|
|
27450
|
+
) })
|
|
27451
|
+
}
|
|
27452
|
+
)
|
|
27453
|
+
]
|
|
27454
|
+
}
|
|
27455
|
+
),
|
|
27456
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
|
|
27457
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-64 border-r border-border shrink-0 bg-canvas/20 p-4 flex flex-col justify-between", children: [
|
|
27458
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "space-y-2", children: [
|
|
27293
27459
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27294
|
-
"
|
|
27460
|
+
"button",
|
|
27295
27461
|
{
|
|
27296
|
-
|
|
27297
|
-
|
|
27298
|
-
|
|
27299
|
-
viewBox: "0 0 24 24",
|
|
27462
|
+
type: "button",
|
|
27463
|
+
onClick: () => setSettingsTab("appearance"),
|
|
27464
|
+
className: `w-full flex items-center gap-3.5 px-4 py-3 rounded-xl text-xs font-semibold transition-all ${settingsTab === "appearance" ? "bg-brand text-white shadow-md shadow-brand/20" : "text-secondary hover:text-primary hover:bg-surface-hover"}`,
|
|
27300
27465
|
children: [
|
|
27301
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27302
|
-
"
|
|
27466
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27467
|
+
"svg",
|
|
27303
27468
|
{
|
|
27304
|
-
|
|
27305
|
-
|
|
27306
|
-
|
|
27307
|
-
|
|
27469
|
+
className: "w-4 h-4 shrink-0",
|
|
27470
|
+
fill: "none",
|
|
27471
|
+
stroke: "currentColor",
|
|
27472
|
+
viewBox: "0 0 24 24",
|
|
27473
|
+
children: [
|
|
27474
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27475
|
+
"path",
|
|
27476
|
+
{
|
|
27477
|
+
strokeLinecap: "round",
|
|
27478
|
+
strokeLinejoin: "round",
|
|
27479
|
+
strokeWidth: 2,
|
|
27480
|
+
d: "M7 21a4 4 0 01-4-4 5 5 0 015-5c1.1 0 2.1.4 2.8 1.1L12 14l1.2-1.1c.7-.7 1.7-1.1 2.8-1.1a5 5 0 015 5 4 4 0 01-4 4H7z"
|
|
27481
|
+
}
|
|
27482
|
+
),
|
|
27483
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27484
|
+
"path",
|
|
27485
|
+
{
|
|
27486
|
+
strokeLinecap: "round",
|
|
27487
|
+
strokeLinejoin: "round",
|
|
27488
|
+
strokeWidth: 2,
|
|
27489
|
+
d: "M12 3v11"
|
|
27490
|
+
}
|
|
27491
|
+
)
|
|
27492
|
+
]
|
|
27308
27493
|
}
|
|
27309
27494
|
),
|
|
27310
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27311
|
-
"
|
|
27312
|
-
|
|
27313
|
-
|
|
27314
|
-
|
|
27315
|
-
|
|
27316
|
-
|
|
27317
|
-
|
|
27318
|
-
|
|
27495
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27496
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Appearance" }),
|
|
27497
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27498
|
+
"div",
|
|
27499
|
+
{
|
|
27500
|
+
className: `text-[10px] font-normal ${settingsTab === "appearance" ? "text-white/80" : "text-secondary/70"}`,
|
|
27501
|
+
children: "Theme, UI, Language"
|
|
27502
|
+
}
|
|
27503
|
+
)
|
|
27504
|
+
] })
|
|
27319
27505
|
]
|
|
27320
27506
|
}
|
|
27321
27507
|
),
|
|
27322
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27323
|
-
|
|
27324
|
-
|
|
27325
|
-
|
|
27326
|
-
|
|
27327
|
-
|
|
27328
|
-
|
|
27329
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
|
|
27330
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
|
|
27331
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🎨" }),
|
|
27332
|
-
" Preferences"
|
|
27333
|
-
] }),
|
|
27334
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
27335
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27336
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("language") }),
|
|
27337
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27338
|
-
CustomDropdown,
|
|
27339
|
-
{
|
|
27340
|
-
options: LANGUAGES.map((l) => ({ value: l.id, label: l.name })),
|
|
27341
|
-
value: draftLang,
|
|
27342
|
-
onChange: (val) => setDraftLang(val),
|
|
27343
|
-
buttonClassName: "w-full bg-surface border border-border rounded-lg p-2.5 text-primary focus:outline-none focus:border-accent transition-all cursor-pointer font-medium text-sm"
|
|
27344
|
-
}
|
|
27345
|
-
)
|
|
27346
|
-
] }),
|
|
27347
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27348
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("theme") }),
|
|
27349
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27350
|
-
CustomDropdown,
|
|
27351
|
-
{
|
|
27352
|
-
options: THEMES.map((t2) => ({ value: t2.id, label: t2.name })),
|
|
27353
|
-
value: draftTheme,
|
|
27354
|
-
onChange: (val) => {
|
|
27355
|
-
setDraftTheme(val);
|
|
27356
|
-
document.documentElement.setAttribute("data-theme", val);
|
|
27357
|
-
},
|
|
27358
|
-
buttonClassName: "w-full bg-surface border border-border rounded-lg p-2.5 text-primary focus:outline-none focus:border-accent transition-all cursor-pointer font-medium text-sm"
|
|
27359
|
-
}
|
|
27360
|
-
)
|
|
27361
|
-
] })
|
|
27362
|
-
] })
|
|
27363
|
-
] }),
|
|
27364
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
|
|
27365
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
|
|
27366
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "👤" }),
|
|
27367
|
-
" Git Profile"
|
|
27368
|
-
] }),
|
|
27369
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
27370
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27371
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("gitUsername") }),
|
|
27372
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27373
|
-
"input",
|
|
27374
|
-
{
|
|
27375
|
-
type: "text",
|
|
27376
|
-
value: gitConfig.name,
|
|
27377
|
-
readOnly: true,
|
|
27378
|
-
className: "w-full bg-surface border border-border rounded-lg p-2.5 text-secondary cursor-not-allowed focus:outline-none font-medium text-sm"
|
|
27379
|
-
}
|
|
27380
|
-
)
|
|
27381
|
-
] }),
|
|
27382
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27383
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("gitEmail") }),
|
|
27508
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27509
|
+
"button",
|
|
27510
|
+
{
|
|
27511
|
+
type: "button",
|
|
27512
|
+
onClick: () => setSettingsTab("accounts"),
|
|
27513
|
+
className: `w-full flex items-center gap-3.5 px-4 py-3 rounded-xl text-xs font-semibold transition-all ${settingsTab === "accounts" ? "bg-brand text-white shadow-md shadow-brand/20" : "text-secondary hover:text-primary hover:bg-surface-hover"}`,
|
|
27514
|
+
children: [
|
|
27384
27515
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27385
|
-
"
|
|
27516
|
+
"svg",
|
|
27386
27517
|
{
|
|
27387
|
-
|
|
27388
|
-
|
|
27389
|
-
|
|
27390
|
-
|
|
27518
|
+
className: "w-4 h-4 shrink-0",
|
|
27519
|
+
fill: "none",
|
|
27520
|
+
stroke: "currentColor",
|
|
27521
|
+
viewBox: "0 0 24 24",
|
|
27522
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27523
|
+
"path",
|
|
27524
|
+
{
|
|
27525
|
+
strokeLinecap: "round",
|
|
27526
|
+
strokeLinejoin: "round",
|
|
27527
|
+
strokeWidth: 2,
|
|
27528
|
+
d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
|
27529
|
+
}
|
|
27530
|
+
)
|
|
27391
27531
|
}
|
|
27392
27532
|
),
|
|
27393
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27394
|
-
|
|
27395
|
-
] })
|
|
27396
|
-
] })
|
|
27397
|
-
] }),
|
|
27398
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
27399
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
|
|
27400
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
|
|
27401
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🛡️" }),
|
|
27402
|
-
" Security & Features"
|
|
27403
|
-
] }),
|
|
27404
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-5", children: [
|
|
27405
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27406
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
|
|
27407
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("dailyMobileVerification") }),
|
|
27408
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("dailyMobileDesc") })
|
|
27409
|
-
] }),
|
|
27410
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27411
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27412
|
-
"input",
|
|
27413
|
-
{
|
|
27414
|
-
className: "toggle",
|
|
27415
|
-
type: "checkbox",
|
|
27416
|
-
checked: draftDailyAuth,
|
|
27417
|
-
onChange: (e) => {
|
|
27418
|
-
const next = e.target.checked;
|
|
27419
|
-
setDraftDailyAuth(next);
|
|
27420
|
-
}
|
|
27421
|
-
}
|
|
27422
|
-
),
|
|
27423
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27424
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27425
|
-
] })
|
|
27426
|
-
] }),
|
|
27427
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/50 pt-5 flex items-center justify-between", children: [
|
|
27428
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
|
|
27429
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("enableSpaceScene") }),
|
|
27430
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("spaceSceneDesc") })
|
|
27431
|
-
] }),
|
|
27432
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27533
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27534
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Accounts & Git" }),
|
|
27433
27535
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27434
|
-
"
|
|
27536
|
+
"div",
|
|
27435
27537
|
{
|
|
27436
|
-
className: "
|
|
27437
|
-
|
|
27438
|
-
checked: draftLockscreenSpace,
|
|
27439
|
-
onChange: (e) => {
|
|
27440
|
-
const next = e.target.checked;
|
|
27441
|
-
setDraftLockscreenSpace(next);
|
|
27442
|
-
}
|
|
27538
|
+
className: `text-[10px] font-normal ${settingsTab === "accounts" ? "text-white/80" : "text-secondary/70"}`,
|
|
27539
|
+
children: "GitHub profile & author"
|
|
27443
27540
|
}
|
|
27444
|
-
)
|
|
27445
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27446
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27541
|
+
)
|
|
27447
27542
|
] })
|
|
27448
|
-
]
|
|
27449
|
-
|
|
27450
|
-
|
|
27451
|
-
|
|
27452
|
-
|
|
27453
|
-
|
|
27454
|
-
|
|
27543
|
+
]
|
|
27544
|
+
}
|
|
27545
|
+
),
|
|
27546
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27547
|
+
"button",
|
|
27548
|
+
{
|
|
27549
|
+
type: "button",
|
|
27550
|
+
onClick: () => setSettingsTab("security"),
|
|
27551
|
+
className: `w-full flex items-center gap-3.5 px-4 py-3 rounded-xl text-xs font-semibold transition-all ${settingsTab === "security" ? "bg-brand text-white shadow-md shadow-brand/20" : "text-secondary hover:text-primary hover:bg-surface-hover"}`,
|
|
27552
|
+
children: [
|
|
27553
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27554
|
+
"svg",
|
|
27555
|
+
{
|
|
27556
|
+
className: "w-4 h-4 shrink-0",
|
|
27557
|
+
fill: "none",
|
|
27558
|
+
stroke: "currentColor",
|
|
27559
|
+
viewBox: "0 0 24 24",
|
|
27560
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27561
|
+
"path",
|
|
27562
|
+
{
|
|
27563
|
+
strokeLinecap: "round",
|
|
27564
|
+
strokeLinejoin: "round",
|
|
27565
|
+
strokeWidth: 2,
|
|
27566
|
+
d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
|
|
27567
|
+
}
|
|
27568
|
+
)
|
|
27569
|
+
}
|
|
27570
|
+
),
|
|
27571
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27572
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Security & Privacy" }),
|
|
27455
27573
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27456
|
-
"
|
|
27574
|
+
"div",
|
|
27457
27575
|
{
|
|
27458
|
-
|
|
27459
|
-
|
|
27460
|
-
value: newPin,
|
|
27461
|
-
onChange: (e) => setNewPin(e.target.value),
|
|
27462
|
-
placeholder: "***",
|
|
27463
|
-
className: "bg-surface border border-border rounded-lg px-3 py-2 text-sm text-primary w-24 outline-none focus:border-accent text-center tracking-widest font-black"
|
|
27576
|
+
className: `text-[10px] font-normal ${settingsTab === "security" ? "text-white/80" : "text-secondary/70"}`,
|
|
27577
|
+
children: "PIN, 2FA, zero telemetry"
|
|
27464
27578
|
}
|
|
27465
|
-
)
|
|
27579
|
+
)
|
|
27580
|
+
] })
|
|
27581
|
+
]
|
|
27582
|
+
}
|
|
27583
|
+
),
|
|
27584
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27585
|
+
"button",
|
|
27586
|
+
{
|
|
27587
|
+
type: "button",
|
|
27588
|
+
onClick: () => setSettingsTab("maintenance"),
|
|
27589
|
+
className: `w-full flex items-center gap-3.5 px-4 py-3 rounded-xl text-xs font-semibold transition-all ${settingsTab === "maintenance" ? "bg-brand text-white shadow-md shadow-brand/20" : "text-secondary hover:text-primary hover:bg-surface-hover"}`,
|
|
27590
|
+
children: [
|
|
27591
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27592
|
+
"svg",
|
|
27593
|
+
{
|
|
27594
|
+
className: "w-4 h-4 shrink-0",
|
|
27595
|
+
fill: "none",
|
|
27596
|
+
stroke: "currentColor",
|
|
27597
|
+
viewBox: "0 0 24 24",
|
|
27598
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27599
|
+
"path",
|
|
27600
|
+
{
|
|
27601
|
+
strokeLinecap: "round",
|
|
27602
|
+
strokeLinejoin: "round",
|
|
27603
|
+
strokeWidth: 2,
|
|
27604
|
+
d: "M4 7v10c0 2 1.5 3 3.5 3h9c2 0 3.5-1 3.5-3V7M4 7c0-2 1.5-3 3.5-3h9c2 0 3.5 1 3.5 3M4 7h16m-5 4h.01M9 11h.01M12 15h.01"
|
|
27605
|
+
}
|
|
27606
|
+
)
|
|
27607
|
+
}
|
|
27608
|
+
),
|
|
27609
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27610
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Maintenance" }),
|
|
27466
27611
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27467
|
-
"
|
|
27612
|
+
"div",
|
|
27468
27613
|
{
|
|
27469
|
-
|
|
27470
|
-
|
|
27471
|
-
if (newPin.length === 3) {
|
|
27472
|
-
localStorage.setItem("gitelectron-pin", newPin);
|
|
27473
|
-
setStoredPin(newPin);
|
|
27474
|
-
setPinChangeSuccess(true);
|
|
27475
|
-
setTimeout(() => setPinChangeSuccess(false), 2e3);
|
|
27476
|
-
setNewPin("");
|
|
27477
|
-
}
|
|
27478
|
-
},
|
|
27479
|
-
disabled: newPin.length !== 3,
|
|
27480
|
-
className: "px-4 py-2 bg-accent text-canvas text-xs font-black rounded-lg hover:bg-accent/90 transition-colors disabled:opacity-50 uppercase",
|
|
27481
|
-
children: pinChangeSuccess ? t("saved") : t("savePin")
|
|
27614
|
+
className: `text-[10px] font-normal ${settingsTab === "maintenance" ? "text-white/80" : "text-secondary/70"}`,
|
|
27615
|
+
children: "Disk cache & Git locks"
|
|
27482
27616
|
}
|
|
27483
27617
|
)
|
|
27484
27618
|
] })
|
|
27485
|
-
]
|
|
27619
|
+
]
|
|
27620
|
+
}
|
|
27621
|
+
),
|
|
27622
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27623
|
+
"button",
|
|
27624
|
+
{
|
|
27625
|
+
type: "button",
|
|
27626
|
+
onClick: () => setSettingsTab("developer"),
|
|
27627
|
+
className: `w-full flex items-center gap-3.5 px-4 py-3 rounded-xl text-xs font-semibold transition-all ${settingsTab === "developer" ? "bg-brand text-white shadow-md shadow-brand/20" : "text-secondary hover:text-primary hover:bg-surface-hover"}`,
|
|
27628
|
+
children: [
|
|
27629
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27630
|
+
"svg",
|
|
27631
|
+
{
|
|
27632
|
+
className: "w-4 h-4 shrink-0",
|
|
27633
|
+
fill: "none",
|
|
27634
|
+
stroke: "currentColor",
|
|
27635
|
+
viewBox: "0 0 24 24",
|
|
27636
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27637
|
+
"path",
|
|
27638
|
+
{
|
|
27639
|
+
strokeLinecap: "round",
|
|
27640
|
+
strokeLinejoin: "round",
|
|
27641
|
+
strokeWidth: 2,
|
|
27642
|
+
d: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"
|
|
27643
|
+
}
|
|
27644
|
+
)
|
|
27645
|
+
}
|
|
27646
|
+
),
|
|
27647
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27648
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Tools & Advanced" }),
|
|
27649
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27650
|
+
"div",
|
|
27651
|
+
{
|
|
27652
|
+
className: `text-[10px] font-normal ${settingsTab === "developer" ? "text-white/80" : "text-secondary/70"}`,
|
|
27653
|
+
children: "Overrides & Maintenance"
|
|
27654
|
+
}
|
|
27655
|
+
)
|
|
27656
|
+
] })
|
|
27657
|
+
]
|
|
27658
|
+
}
|
|
27659
|
+
)
|
|
27660
|
+
] }),
|
|
27661
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-3.5 bg-surface/60 border border-border/80 rounded-xl", children: [
|
|
27662
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
27663
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-2 h-2 rounded-full bg-success animate-pulse" }),
|
|
27664
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-bold text-primary", children: "GitQuickPush Client" })
|
|
27665
|
+
] }),
|
|
27666
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] text-secondary", children: "Local-First Engine • Production" })
|
|
27667
|
+
] })
|
|
27668
|
+
] }),
|
|
27669
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 p-8 md:p-10 overflow-y-auto custom-scrollbar bg-surface/30", children: [
|
|
27670
|
+
settingsTab === "appearance" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27671
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27672
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Appearance & Environment" }),
|
|
27673
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Personalize your workspace palette, typography localization, and GPU rendering features." })
|
|
27674
|
+
] }),
|
|
27675
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-4", children: [
|
|
27676
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27677
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27678
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("theme") }),
|
|
27679
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Select your primary color scheme and interface styling" })
|
|
27680
|
+
] }),
|
|
27681
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-mono text-primary/80 bg-canvas px-3 py-1 rounded-md border border-border/60", children: draftTheme })
|
|
27682
|
+
] }),
|
|
27683
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27684
|
+
CustomDropdown,
|
|
27685
|
+
{
|
|
27686
|
+
options: THEMES.map((themeItem) => ({
|
|
27687
|
+
value: themeItem.id,
|
|
27688
|
+
label: themeItem.name
|
|
27689
|
+
})),
|
|
27690
|
+
value: draftTheme,
|
|
27691
|
+
onChange: (val) => {
|
|
27692
|
+
setDraftTheme(val);
|
|
27693
|
+
document.documentElement.setAttribute("data-theme", val);
|
|
27694
|
+
},
|
|
27695
|
+
buttonClassName: "w-full bg-canvas/70 border border-border rounded-xl p-3 text-primary focus:outline-none focus:border-brand transition-all cursor-pointer font-medium text-sm"
|
|
27696
|
+
}
|
|
27697
|
+
)
|
|
27698
|
+
] }),
|
|
27699
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-4", children: [
|
|
27700
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27701
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27702
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("language") }),
|
|
27703
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Interface language and localized notification text" })
|
|
27704
|
+
] }),
|
|
27705
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-mono text-primary/80 bg-canvas px-3 py-1 rounded-md border border-border/60", children: draftLang.toUpperCase() })
|
|
27706
|
+
] }),
|
|
27707
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27708
|
+
CustomDropdown,
|
|
27709
|
+
{
|
|
27710
|
+
options: LANGUAGES.map((langItem) => ({
|
|
27711
|
+
value: langItem.id,
|
|
27712
|
+
label: langItem.name
|
|
27713
|
+
})),
|
|
27714
|
+
value: draftLang,
|
|
27715
|
+
onChange: (val) => setDraftLang(val),
|
|
27716
|
+
buttonClassName: "w-full bg-canvas/70 border border-border rounded-xl p-3 text-primary focus:outline-none focus:border-brand transition-all cursor-pointer font-medium text-sm"
|
|
27717
|
+
}
|
|
27718
|
+
)
|
|
27719
|
+
] }),
|
|
27720
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-6", children: [
|
|
27721
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-6", children: [
|
|
27722
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27723
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: "Lite Performance Mode" }),
|
|
27724
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed max-w-xl", children: "Disables background physics, heavy blur filters, and particle shaders to optimize battery life on low-power devices." })
|
|
27725
|
+
] }),
|
|
27726
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27727
|
+
"button",
|
|
27728
|
+
{
|
|
27729
|
+
type: "button",
|
|
27730
|
+
onClick: () => setLiteMode(!liteMode),
|
|
27731
|
+
className: `relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors ${liteMode ? "bg-brand" : "bg-canvas border border-border"}`,
|
|
27732
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27733
|
+
"span",
|
|
27734
|
+
{
|
|
27735
|
+
className: `inline-block h-4 w-4 transform rounded-full transition-transform ${liteMode ? "translate-x-6 bg-white" : "translate-x-1 bg-secondary"}`
|
|
27736
|
+
}
|
|
27737
|
+
)
|
|
27738
|
+
}
|
|
27739
|
+
)
|
|
27740
|
+
] }),
|
|
27741
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50" }),
|
|
27742
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-6", children: [
|
|
27743
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27744
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("enableSpaceScene") }),
|
|
27745
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed max-w-xl", children: t("spaceSceneDesc") })
|
|
27746
|
+
] }),
|
|
27747
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27748
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27749
|
+
"input",
|
|
27750
|
+
{
|
|
27751
|
+
className: "toggle",
|
|
27752
|
+
type: "checkbox",
|
|
27753
|
+
checked: draftLockscreenSpace,
|
|
27754
|
+
onChange: (e) => setDraftLockscreenSpace(e.target.checked)
|
|
27755
|
+
}
|
|
27756
|
+
),
|
|
27757
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27758
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27759
|
+
] })
|
|
27486
27760
|
] })
|
|
27761
|
+
] })
|
|
27762
|
+
] }),
|
|
27763
|
+
settingsTab === "accounts" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27764
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27765
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Accounts & Git Identity" }),
|
|
27766
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Configure your authenticated GitHub sessions and local author signatures attached to git commits." })
|
|
27487
27767
|
] }),
|
|
27488
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-
|
|
27489
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between
|
|
27490
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
27491
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
27492
|
-
" ",
|
|
27493
|
-
|
|
27768
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-5", children: [
|
|
27769
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27770
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27771
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: "Git Author Signature (Local Config)" }),
|
|
27772
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Embedded into every commit header on your local workstation" })
|
|
27773
|
+
] }),
|
|
27774
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] text-brand bg-brand/10 border border-brand/20 px-2.5 py-1 rounded-md font-medium", children: t("syncedFromGithub") })
|
|
27775
|
+
] }),
|
|
27776
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5", children: [
|
|
27777
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27778
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitUsername") }),
|
|
27779
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27780
|
+
"input",
|
|
27781
|
+
{
|
|
27782
|
+
type: "text",
|
|
27783
|
+
value: gitConfig.name,
|
|
27784
|
+
readOnly: true,
|
|
27785
|
+
className: "w-full bg-canvas/70 border border-border rounded-xl p-3 text-secondary cursor-not-allowed focus:outline-none font-medium text-sm"
|
|
27786
|
+
}
|
|
27787
|
+
)
|
|
27788
|
+
] }),
|
|
27789
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27790
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitEmail") }),
|
|
27791
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27792
|
+
"input",
|
|
27793
|
+
{
|
|
27794
|
+
type: "email",
|
|
27795
|
+
value: gitConfig.email,
|
|
27796
|
+
readOnly: true,
|
|
27797
|
+
className: "w-full bg-canvas/70 border border-border rounded-xl p-3 text-secondary cursor-not-allowed focus:outline-none font-medium text-sm"
|
|
27798
|
+
}
|
|
27799
|
+
)
|
|
27800
|
+
] })
|
|
27801
|
+
] })
|
|
27802
|
+
] }),
|
|
27803
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-5", children: [
|
|
27804
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27805
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27806
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("githubAccounts") }),
|
|
27807
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Linked profiles authorized for repository pushing and collaboration" })
|
|
27494
27808
|
] }),
|
|
27495
27809
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27496
27810
|
"button",
|
|
@@ -27500,41 +27814,64 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27500
27814
|
cancelSettings();
|
|
27501
27815
|
handleStartAuth();
|
|
27502
27816
|
},
|
|
27503
|
-
className: "px-
|
|
27817
|
+
className: "px-4 py-2 bg-brand hover:bg-brand-hover text-white text-xs font-bold rounded-xl transition-colors flex items-center gap-2 shadow-sm",
|
|
27504
27818
|
children: [
|
|
27505
|
-
|
|
27819
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27820
|
+
"svg",
|
|
27821
|
+
{
|
|
27822
|
+
className: "w-3.5 h-3.5",
|
|
27823
|
+
fill: "none",
|
|
27824
|
+
stroke: "currentColor",
|
|
27825
|
+
viewBox: "0 0 24 24",
|
|
27826
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27827
|
+
"path",
|
|
27828
|
+
{
|
|
27829
|
+
strokeLinecap: "round",
|
|
27830
|
+
strokeLinejoin: "round",
|
|
27831
|
+
strokeWidth: 2,
|
|
27832
|
+
d: "M12 4v16m8-8H4"
|
|
27833
|
+
}
|
|
27834
|
+
)
|
|
27835
|
+
}
|
|
27836
|
+
),
|
|
27506
27837
|
t("addAccount")
|
|
27507
27838
|
]
|
|
27508
27839
|
}
|
|
27509
27840
|
)
|
|
27510
27841
|
] }),
|
|
27511
|
-
accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.
|
|
27842
|
+
accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center p-10 border border-dashed border-border rounded-2xl bg-canvas/30 space-y-2", children: [
|
|
27843
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("noAccountsLinked") }),
|
|
27844
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary max-w-sm mx-auto", children: "Link your GitHub account via OAuth to enable one-click pushes and pull requests." })
|
|
27845
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: accounts.map((acc) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27512
27846
|
"div",
|
|
27513
27847
|
{
|
|
27514
|
-
className: "flex items-center justify-between p-
|
|
27848
|
+
className: "flex items-center justify-between p-4 border border-border rounded-xl bg-canvas/40 hover:border-brand/40 transition-colors",
|
|
27515
27849
|
children: [
|
|
27516
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
27850
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
27517
27851
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27518
27852
|
"img",
|
|
27519
27853
|
{
|
|
27520
27854
|
src: acc.avatar_url || `https://github.com/${acc.username}.png`,
|
|
27521
27855
|
alt: acc.username,
|
|
27522
|
-
className: "w-
|
|
27856
|
+
className: "w-10 h-10 rounded-full object-cover border border-border"
|
|
27523
27857
|
}
|
|
27524
27858
|
),
|
|
27525
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
27526
|
-
|
|
27527
|
-
|
|
27859
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27860
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm font-bold text-primary block", children: [
|
|
27861
|
+
"@",
|
|
27862
|
+
acc.username
|
|
27863
|
+
] }),
|
|
27864
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary", children: "GitHub Enterprise / Cloud" })
|
|
27528
27865
|
] })
|
|
27529
27866
|
] }),
|
|
27530
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
27531
|
-
activeAccountId === acc.id && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] uppercase font-
|
|
27867
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
27868
|
+
activeAccountId === acc.id && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] uppercase font-bold text-success bg-success/10 px-2.5 py-1 rounded-md border border-success/20", children: "Active Session" }),
|
|
27532
27869
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27533
27870
|
"button",
|
|
27534
27871
|
{
|
|
27535
27872
|
type: "button",
|
|
27536
27873
|
onClick: () => window.api.openExternal(`https://github.com/${acc.username}`),
|
|
27537
|
-
className: "px-
|
|
27874
|
+
className: "px-3 py-1.5 border border-border hover:border-brand hover:text-brand text-secondary text-xs font-semibold rounded-lg transition-all",
|
|
27538
27875
|
children: "Profile"
|
|
27539
27876
|
}
|
|
27540
27877
|
)
|
|
@@ -27543,7 +27880,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27543
27880
|
},
|
|
27544
27881
|
acc.id
|
|
27545
27882
|
)) }),
|
|
27546
|
-
authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-
|
|
27883
|
+
authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-5 mt-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27547
27884
|
"button",
|
|
27548
27885
|
{
|
|
27549
27886
|
type: "button",
|
|
@@ -27561,7 +27898,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27561
27898
|
showToast("Logout failed", "error");
|
|
27562
27899
|
}
|
|
27563
27900
|
},
|
|
27564
|
-
className: "w-full py-
|
|
27901
|
+
className: "w-full py-3 bg-danger/10 hover:bg-danger/20 text-danger text-xs font-bold rounded-xl border border-danger/30 hover:border-danger/50 transition-all flex items-center justify-center gap-2",
|
|
27565
27902
|
children: [
|
|
27566
27903
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27567
27904
|
"svg",
|
|
@@ -27586,74 +27923,324 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27586
27923
|
}
|
|
27587
27924
|
) })
|
|
27588
27925
|
] })
|
|
27589
|
-
] })
|
|
27590
|
-
] }),
|
|
27591
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-danger/10 p-5 rounded-xl border border-danger/30 mb-8 mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4", children: [
|
|
27592
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27593
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-black text-danger flex items-center gap-2 uppercase tracking-wider mb-1", children: [
|
|
27594
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⚠️" }),
|
|
27595
|
-
" Emergency Override (Master Push)"
|
|
27596
|
-
] }),
|
|
27597
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-medium text-danger/80 leading-relaxed max-w-2xl", children: "Bypass all protections, ignore unpushed changes or missing files, and FORCE push all current files. Warning: This completely overwrites remote history." })
|
|
27598
27926
|
] }),
|
|
27599
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27600
|
-
"
|
|
27601
|
-
|
|
27602
|
-
|
|
27603
|
-
|
|
27604
|
-
|
|
27605
|
-
|
|
27606
|
-
)
|
|
27607
|
-
|
|
27608
|
-
|
|
27609
|
-
|
|
27610
|
-
|
|
27611
|
-
|
|
27612
|
-
|
|
27927
|
+
settingsTab === "security" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27928
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27929
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Security & Access Controls" }),
|
|
27930
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Configure local cryptographic vaults, client PIN protection, and review institutional trust policies." })
|
|
27931
|
+
] }),
|
|
27932
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm flex items-center justify-between gap-6", children: [
|
|
27933
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
27934
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("dailyMobileVerification") }),
|
|
27935
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: t("dailyMobileDesc") })
|
|
27936
|
+
] }),
|
|
27937
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27938
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27939
|
+
"input",
|
|
27940
|
+
{
|
|
27941
|
+
className: "toggle",
|
|
27942
|
+
type: "checkbox",
|
|
27943
|
+
checked: draftDailyAuth,
|
|
27944
|
+
onChange: (e) => setDraftDailyAuth(e.target.checked)
|
|
27613
27945
|
}
|
|
27614
|
-
|
|
27615
|
-
|
|
27616
|
-
|
|
27617
|
-
|
|
27618
|
-
|
|
27619
|
-
|
|
27620
|
-
|
|
27621
|
-
|
|
27622
|
-
|
|
27623
|
-
|
|
27946
|
+
),
|
|
27947
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27948
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27949
|
+
] })
|
|
27950
|
+
] }),
|
|
27951
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm flex flex-col sm:flex-row sm:items-center justify-between gap-6", children: [
|
|
27952
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27953
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("changeLockscreenPin") }),
|
|
27954
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: t("changePinDesc") })
|
|
27955
|
+
] }),
|
|
27956
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 shrink-0", children: [
|
|
27957
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27958
|
+
"input",
|
|
27959
|
+
{
|
|
27960
|
+
type: "password",
|
|
27961
|
+
maxLength: 3,
|
|
27962
|
+
value: newPin,
|
|
27963
|
+
onChange: (e) => setNewPin(e.target.value),
|
|
27964
|
+
placeholder: "***",
|
|
27965
|
+
className: "bg-canvas/70 border border-border rounded-xl px-3.5 py-2.5 text-sm text-primary w-24 outline-none focus:border-brand text-center tracking-widest font-mono font-bold"
|
|
27966
|
+
}
|
|
27967
|
+
),
|
|
27968
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27969
|
+
"button",
|
|
27970
|
+
{
|
|
27971
|
+
type: "button",
|
|
27972
|
+
onClick: () => {
|
|
27973
|
+
if (newPin.length === 3) {
|
|
27974
|
+
localStorage.setItem("gitelectron-pin", newPin);
|
|
27975
|
+
setStoredPin(newPin);
|
|
27976
|
+
setPinChangeSuccess(true);
|
|
27977
|
+
setTimeout(() => setPinChangeSuccess(false), 2e3);
|
|
27978
|
+
setNewPin("");
|
|
27979
|
+
}
|
|
27980
|
+
},
|
|
27981
|
+
disabled: newPin.length !== 3,
|
|
27982
|
+
className: "px-5 py-2.5 bg-brand hover:bg-brand-hover text-white text-xs font-bold rounded-xl transition-colors disabled:opacity-40 uppercase",
|
|
27983
|
+
children: pinChangeSuccess ? t("saved") : t("savePin")
|
|
27984
|
+
}
|
|
27985
|
+
)
|
|
27986
|
+
] })
|
|
27987
|
+
] }),
|
|
27988
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm flex flex-col sm:flex-row sm:items-center justify-between gap-6", children: [
|
|
27989
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
27990
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1.5", children: [
|
|
27991
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27992
|
+
"svg",
|
|
27993
|
+
{
|
|
27994
|
+
className: "w-4 h-4 text-emerald-400",
|
|
27995
|
+
fill: "none",
|
|
27996
|
+
stroke: "currentColor",
|
|
27997
|
+
viewBox: "0 0 24 24",
|
|
27998
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27999
|
+
"path",
|
|
28000
|
+
{
|
|
28001
|
+
strokeLinecap: "round",
|
|
28002
|
+
strokeLinejoin: "round",
|
|
28003
|
+
strokeWidth: 2,
|
|
28004
|
+
d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
|
|
28005
|
+
}
|
|
28006
|
+
)
|
|
28007
|
+
}
|
|
28008
|
+
),
|
|
28009
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-primary", children: "Enterprise Privacy & Local Security Protocol" })
|
|
28010
|
+
] }),
|
|
28011
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Strict local-first architecture: zero telemetry tracking, no external code logging, and hardware-sealed credentials via native OS keystores (Windows DPAPI / macOS Keychain)." })
|
|
28012
|
+
] }),
|
|
28013
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28014
|
+
"button",
|
|
28015
|
+
{
|
|
28016
|
+
type: "button",
|
|
28017
|
+
onClick: () => setShowPrivacyModal(true),
|
|
28018
|
+
className: "shrink-0 px-5 py-2.5 bg-canvas hover:bg-surface-hover border border-border text-primary text-xs font-bold rounded-xl transition-all flex items-center gap-2",
|
|
28019
|
+
children: [
|
|
28020
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28021
|
+
"svg",
|
|
28022
|
+
{
|
|
28023
|
+
className: "w-4 h-4 text-brand",
|
|
28024
|
+
fill: "none",
|
|
28025
|
+
stroke: "currentColor",
|
|
28026
|
+
viewBox: "0 0 24 24",
|
|
28027
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28028
|
+
"path",
|
|
28029
|
+
{
|
|
28030
|
+
strokeLinecap: "round",
|
|
28031
|
+
strokeLinejoin: "round",
|
|
28032
|
+
strokeWidth: 2,
|
|
28033
|
+
d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
|
|
28034
|
+
}
|
|
28035
|
+
)
|
|
28036
|
+
}
|
|
28037
|
+
),
|
|
28038
|
+
"View Trust Policy"
|
|
28039
|
+
]
|
|
27624
28040
|
}
|
|
27625
|
-
|
|
27626
|
-
|
|
27627
|
-
|
|
27628
|
-
|
|
27629
|
-
|
|
27630
|
-
|
|
27631
|
-
|
|
27632
|
-
|
|
27633
|
-
|
|
28041
|
+
)
|
|
28042
|
+
] })
|
|
28043
|
+
] }),
|
|
28044
|
+
settingsTab === "maintenance" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
28045
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28046
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Storage & Maintenance" }),
|
|
28047
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Purge application disk caches, remove stale Git lock files, and repair workspace states." })
|
|
28048
|
+
] }),
|
|
28049
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm flex flex-col sm:flex-row sm:items-center justify-between gap-6", children: [
|
|
28050
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28051
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary mb-1", children: "Application Cache & Storage" }),
|
|
28052
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Purges web cache buffers, network images, and offline queue snapshots. Authenticated sessions and repository settings remain completely intact." })
|
|
28053
|
+
] }),
|
|
28054
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28055
|
+
"button",
|
|
28056
|
+
{
|
|
28057
|
+
type: "button",
|
|
28058
|
+
disabled: isClearingCache,
|
|
28059
|
+
onClick: async () => {
|
|
28060
|
+
setIsClearingCache(true);
|
|
28061
|
+
try {
|
|
28062
|
+
const res = await window.api.clearAppCache();
|
|
28063
|
+
if (res.success) {
|
|
28064
|
+
localStorage.removeItem("gitquickpush-offline-queue");
|
|
28065
|
+
showToast("Application cache cleared successfully!", "success");
|
|
28066
|
+
} else {
|
|
28067
|
+
showToast("Cache clear failed: " + res.error, "error");
|
|
28068
|
+
}
|
|
28069
|
+
} catch (err) {
|
|
28070
|
+
showToast("Cache clear failed: " + err.message, "error");
|
|
28071
|
+
} finally {
|
|
28072
|
+
setIsClearingCache(false);
|
|
28073
|
+
}
|
|
28074
|
+
},
|
|
28075
|
+
className: "shrink-0 px-5 py-2.5 bg-canvas hover:bg-surface-hover border border-border text-primary text-xs font-bold rounded-xl transition-all flex items-center gap-2.5 disabled:opacity-50",
|
|
28076
|
+
children: [
|
|
28077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28078
|
+
"svg",
|
|
28079
|
+
{
|
|
28080
|
+
className: `w-4 h-4 ${isClearingCache ? "animate-spin text-brand" : "text-secondary"}`,
|
|
28081
|
+
fill: "none",
|
|
28082
|
+
stroke: "currentColor",
|
|
28083
|
+
viewBox: "0 0 24 24",
|
|
28084
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28085
|
+
"path",
|
|
28086
|
+
{
|
|
28087
|
+
strokeLinecap: "round",
|
|
28088
|
+
strokeLinejoin: "round",
|
|
28089
|
+
strokeWidth: 2,
|
|
28090
|
+
d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"
|
|
28091
|
+
}
|
|
28092
|
+
)
|
|
28093
|
+
}
|
|
28094
|
+
),
|
|
28095
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isClearingCache ? "Purging Cache..." : "Clear Cache" })
|
|
28096
|
+
]
|
|
28097
|
+
}
|
|
28098
|
+
)
|
|
28099
|
+
] }),
|
|
28100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm flex flex-col sm:flex-row sm:items-center justify-between gap-6", children: [
|
|
28101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28102
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary mb-1", children: "Stale Git Index Lock Release" }),
|
|
28103
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-secondary leading-relaxed", children: [
|
|
28104
|
+
"If an interrupted commit or system reboot leaves behind a stuck",
|
|
28105
|
+
" ",
|
|
28106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "text-xs font-mono bg-canvas px-1.5 py-0.5 rounded text-primary", children: ".git/index.lock" }),
|
|
28107
|
+
", clicking this safely clears it to restore repository access."
|
|
28108
|
+
] })
|
|
28109
|
+
] }),
|
|
28110
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28111
|
+
"button",
|
|
28112
|
+
{
|
|
28113
|
+
type: "button",
|
|
28114
|
+
onClick: async () => {
|
|
28115
|
+
try {
|
|
28116
|
+
const success = await window.api.removeGitLock();
|
|
28117
|
+
if (success) {
|
|
28118
|
+
showToast("Git lock released successfully", "success");
|
|
28119
|
+
} else {
|
|
28120
|
+
showToast("No active lock file found", "info");
|
|
28121
|
+
}
|
|
28122
|
+
} catch (err) {
|
|
28123
|
+
showToast("Failed to release lock: " + err.message, "error");
|
|
28124
|
+
}
|
|
28125
|
+
},
|
|
28126
|
+
className: "shrink-0 px-5 py-2.5 bg-canvas hover:bg-surface-hover border border-border text-primary text-xs font-bold rounded-xl transition-all flex items-center gap-2.5",
|
|
28127
|
+
children: [
|
|
28128
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28129
|
+
"svg",
|
|
28130
|
+
{
|
|
28131
|
+
className: "w-4 h-4 text-warning",
|
|
28132
|
+
fill: "none",
|
|
28133
|
+
stroke: "currentColor",
|
|
28134
|
+
viewBox: "0 0 24 24",
|
|
28135
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28136
|
+
"path",
|
|
28137
|
+
{
|
|
28138
|
+
strokeLinecap: "round",
|
|
28139
|
+
strokeLinejoin: "round",
|
|
28140
|
+
strokeWidth: 2,
|
|
28141
|
+
d: "M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z"
|
|
28142
|
+
}
|
|
28143
|
+
)
|
|
28144
|
+
}
|
|
28145
|
+
),
|
|
28146
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Release Git Lock" })
|
|
28147
|
+
]
|
|
28148
|
+
}
|
|
28149
|
+
)
|
|
28150
|
+
] })
|
|
28151
|
+
] }),
|
|
28152
|
+
settingsTab === "developer" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
28153
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28154
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Tools & Advanced Overrides" }),
|
|
28155
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Developer utilities, diagnostics, and emergency push overrides." })
|
|
28156
|
+
] }),
|
|
28157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-danger/5 border border-danger/30 rounded-2xl p-6 shadow-sm flex flex-col sm:flex-row sm:items-center justify-between gap-6", children: [
|
|
28158
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28159
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1.5", children: [
|
|
28160
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28161
|
+
"svg",
|
|
28162
|
+
{
|
|
28163
|
+
className: "w-4 h-4 text-danger",
|
|
28164
|
+
fill: "none",
|
|
28165
|
+
stroke: "currentColor",
|
|
28166
|
+
viewBox: "0 0 24 24",
|
|
28167
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28168
|
+
"path",
|
|
28169
|
+
{
|
|
28170
|
+
strokeLinecap: "round",
|
|
28171
|
+
strokeLinejoin: "round",
|
|
28172
|
+
strokeWidth: 2,
|
|
28173
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
28174
|
+
}
|
|
28175
|
+
)
|
|
28176
|
+
}
|
|
28177
|
+
),
|
|
28178
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-danger", children: "Emergency Master Push Override" })
|
|
28179
|
+
] }),
|
|
28180
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Bypasses remote divergence safety checks and forces the remote branch to match your current local tree. Overwrites remote history. Use only when resolving critical sync lockups." })
|
|
28181
|
+
] }),
|
|
28182
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28183
|
+
"button",
|
|
28184
|
+
{
|
|
28185
|
+
type: "button",
|
|
28186
|
+
onClick: async () => {
|
|
28187
|
+
const confirmAction = window.confirm(
|
|
28188
|
+
"Are you sure? This will force push all current files, overriding remote history and bypassing all safety checks."
|
|
28189
|
+
);
|
|
28190
|
+
if (!confirmAction) return;
|
|
28191
|
+
try {
|
|
28192
|
+
const remotes = await window.api.getRemotes();
|
|
28193
|
+
if (!remotes || remotes.length === 0) {
|
|
28194
|
+
showToast("No remote configured to push to.", "error");
|
|
28195
|
+
return;
|
|
28196
|
+
}
|
|
28197
|
+
showToast("Executing Master Push override...", "info");
|
|
28198
|
+
await window.api.masterPush(remotes[0].name, status?.current || "main");
|
|
28199
|
+
showToast("Master Push successful!", "success");
|
|
28200
|
+
refreshRepoState();
|
|
28201
|
+
cancelSettings();
|
|
28202
|
+
} catch (err) {
|
|
28203
|
+
showToast(
|
|
28204
|
+
"Master Push failed: " + (err.message || "Unknown error"),
|
|
28205
|
+
"error"
|
|
28206
|
+
);
|
|
28207
|
+
}
|
|
28208
|
+
},
|
|
28209
|
+
className: "shrink-0 px-5 py-2.5 bg-danger hover:bg-danger/80 text-white text-xs font-bold rounded-xl transition-all shadow-sm",
|
|
28210
|
+
children: "Execute Force Push"
|
|
28211
|
+
}
|
|
28212
|
+
)
|
|
28213
|
+
] })
|
|
28214
|
+
] })
|
|
28215
|
+
] })
|
|
27634
28216
|
] }),
|
|
27635
28217
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27636
28218
|
"div",
|
|
27637
28219
|
{
|
|
27638
|
-
className: "px-8 py-5 border-t border-border shrink-0 flex
|
|
28220
|
+
className: "px-8 py-4.5 border-t border-border shrink-0 flex items-center justify-between",
|
|
27639
28221
|
style: { backgroundColor: "var(--color-surface)" },
|
|
27640
28222
|
children: [
|
|
27641
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27642
|
-
|
|
27643
|
-
|
|
27644
|
-
|
|
27645
|
-
|
|
27646
|
-
|
|
27647
|
-
|
|
27648
|
-
|
|
27649
|
-
|
|
27650
|
-
|
|
27651
|
-
|
|
27652
|
-
|
|
27653
|
-
|
|
27654
|
-
|
|
27655
|
-
|
|
27656
|
-
|
|
28223
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary hidden sm:block", children: "Preferences are saved locally in your secure client profile." }),
|
|
28224
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 ml-auto", children: [
|
|
28225
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28226
|
+
"button",
|
|
28227
|
+
{
|
|
28228
|
+
type: "button",
|
|
28229
|
+
onClick: () => cancelSettings(),
|
|
28230
|
+
className: "px-5 py-2.5 bg-canvas border border-border hover:bg-surface-hover text-secondary hover:text-primary rounded-xl transition-all font-semibold text-xs",
|
|
28231
|
+
children: t("cancel")
|
|
28232
|
+
}
|
|
28233
|
+
),
|
|
28234
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28235
|
+
"button",
|
|
28236
|
+
{
|
|
28237
|
+
type: "button",
|
|
28238
|
+
onClick: saveSettings,
|
|
28239
|
+
className: "px-7 py-2.5 bg-brand hover:bg-brand-hover text-white rounded-xl transition-all font-bold text-xs shadow-md shadow-brand/20 active:translate-y-0.5",
|
|
28240
|
+
children: t("save")
|
|
28241
|
+
}
|
|
28242
|
+
)
|
|
28243
|
+
] })
|
|
27657
28244
|
]
|
|
27658
28245
|
}
|
|
27659
28246
|
)
|
|
@@ -27804,21 +28391,21 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27804
28391
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "mx-2", children: "•" }),
|
|
27805
28392
|
new Date(commit.date).toLocaleString()
|
|
27806
28393
|
] }),
|
|
27807
|
-
|
|
28394
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27808
28395
|
"button",
|
|
27809
28396
|
{
|
|
27810
28397
|
onClick: () => toggleCommit(commit.hash),
|
|
27811
|
-
className: "text-[10px] font-medium text-accent hover:text-primary transition-colors flex items-center gap-1.5 bg-accent/5 hover:bg-accent/10 px-2 py-1 rounded-md border border-accent/20",
|
|
28398
|
+
className: "text-[10px] font-medium text-accent hover:text-primary transition-colors flex items-center gap-1.5 bg-accent/5 hover:bg-accent/10 px-2 py-1 rounded-md border border-accent/20 cursor-pointer select-none active:scale-95",
|
|
28399
|
+
title: expandedCommits[commit.hash] ? "Hide commit details" : "View commit details",
|
|
27812
28400
|
children: [
|
|
27813
28401
|
expandedCommits[commit.hash] ? "Hide" : "View",
|
|
27814
28402
|
" ",
|
|
27815
|
-
commit.diff.changed,
|
|
27816
|
-
"
|
|
27817
|
-
commit.diff.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-success", children: [
|
|
28403
|
+
commit.diff?.files && commit.diff.files.length > 0 ? `${commit.diff.changed || commit.diff.files.length} ${(commit.diff.changed || commit.diff.files.length) === 1 ? "file" : "files"}` : "details",
|
|
28404
|
+
commit.diff?.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-success", children: [
|
|
27818
28405
|
commit.diff.insertions,
|
|
27819
28406
|
" ++"
|
|
27820
28407
|
] }),
|
|
27821
|
-
commit.diff
|
|
28408
|
+
commit.diff?.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-danger", children: [
|
|
27822
28409
|
commit.diff.deletions,
|
|
27823
28410
|
" --"
|
|
27824
28411
|
] })
|
|
@@ -27826,7 +28413,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27826
28413
|
}
|
|
27827
28414
|
)
|
|
27828
28415
|
] }),
|
|
27829
|
-
expandedCommits[commit.hash] &&
|
|
28416
|
+
expandedCommits[commit.hash] && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4 flex justify-center pb-8 border-t border-border/40 pt-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27830
28417
|
CommitReceiptPrinter,
|
|
27831
28418
|
{
|
|
27832
28419
|
commit,
|
|
@@ -27839,7 +28426,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27839
28426
|
)) })
|
|
27840
28427
|
] }) }),
|
|
27841
28428
|
showAuthModal && deviceFlowData && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-[60] p-6 transition-opacity", children: [
|
|
27842
|
-
enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28429
|
+
!liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28430
|
+
SpaceScene,
|
|
28431
|
+
{
|
|
28432
|
+
fullScreen: true,
|
|
28433
|
+
liteMode,
|
|
28434
|
+
onGameActiveChange: setIsGameActive
|
|
28435
|
+
}
|
|
28436
|
+
),
|
|
27843
28437
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27844
28438
|
"div",
|
|
27845
28439
|
{
|
|
@@ -27989,7 +28583,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27989
28583
|
}
|
|
27990
28584
|
),
|
|
27991
28585
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 pr-8 min-w-0", children: [
|
|
27992
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl bg-brand
|
|
28586
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl bg-brand/10 border border-brand/20 flex items-center justify-center text-brand flex-shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27993
28587
|
"path",
|
|
27994
28588
|
{
|
|
27995
28589
|
strokeLinecap: "round",
|
|
@@ -28185,6 +28779,26 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28185
28779
|
'"'
|
|
28186
28780
|
] })
|
|
28187
28781
|
] }),
|
|
28782
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-3.5 bg-surface/80 rounded-lg border border-border/80 text-xs space-y-2 mt-2", children: [
|
|
28783
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between text-secondary", children: [
|
|
28784
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-semibold text-primary flex items-center gap-1.5", children: [
|
|
28785
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🛡️" }),
|
|
28786
|
+
" Security & Verification"
|
|
28787
|
+
] }),
|
|
28788
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-accent bg-accent/10 px-2 py-0.5 rounded text-[11px] font-semibold", children: authStatus.username ? `@${authStatus.username}` : "Local Author" })
|
|
28789
|
+
] }),
|
|
28790
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 text-secondary text-[11px] gap-1 pt-0.5", children: [
|
|
28791
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Authentication:" }),
|
|
28792
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "col-span-2 font-mono text-primary truncate", children: authStatus.authMethod || "GitHub OAuth (Verified)" }),
|
|
28793
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "AI Assistance:" }),
|
|
28794
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "col-span-2 text-primary font-medium flex items-center gap-1.5", children: [
|
|
28795
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse" }),
|
|
28796
|
+
authStatus.aiProvider || "GitHub Models (gpt-4o-mini)"
|
|
28797
|
+
] }),
|
|
28798
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Session Privacy:" }),
|
|
28799
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "col-span-2 text-secondary opacity-90", children: authStatus.securityStatus || "End-to-End Encrypted Session" })
|
|
28800
|
+
] })
|
|
28801
|
+
] }),
|
|
28188
28802
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex items-center gap-2", children: [
|
|
28189
28803
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28190
28804
|
"input",
|
|
@@ -28220,7 +28834,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28220
28834
|
)
|
|
28221
28835
|
] })
|
|
28222
28836
|
] }) }),
|
|
28223
|
-
pushSuccessData && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/95 backdrop-blur-xl p-8 rounded-xl shadow-2xl border border-border w-full max-w-[
|
|
28837
|
+
pushSuccessData && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/95 backdrop-blur-xl p-8 rounded-xl shadow-2xl border border-border w-full max-w-[480px] mx-4 animate-float text-center", children: [
|
|
28224
28838
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mx-auto w-12 h-12 bg-success/20 rounded-full flex items-center justify-center text-success mb-4 border border-success/30", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-6 h-6", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28225
28839
|
"path",
|
|
28226
28840
|
{
|
|
@@ -28230,8 +28844,8 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28230
28844
|
d: "M5 13l4 4L19 7"
|
|
28231
28845
|
}
|
|
28232
28846
|
) }) }),
|
|
28233
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-
|
|
28234
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-secondary mb-
|
|
28847
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-3 text-primary", children: "Push Successful" }),
|
|
28848
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-secondary mb-4 text-sm leading-relaxed", children: [
|
|
28235
28849
|
"Successfully pushed",
|
|
28236
28850
|
" ",
|
|
28237
28851
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-primary font-medium", children: pushSuccessData.files }),
|
|
@@ -28243,207 +28857,267 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28243
28857
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-primary", children: pushSuccessData.repository }),
|
|
28244
28858
|
"."
|
|
28245
28859
|
] }),
|
|
28860
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/90 p-4 rounded-xl border border-border text-xs text-left mb-6 space-y-2", children: [
|
|
28861
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary border-b border-border/60 pb-1.5", children: [
|
|
28862
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-medium", children: "Timestamp:" }),
|
|
28863
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-primary font-bold text-[11px]", children: pushSuccessData.timestamp || (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }) })
|
|
28864
|
+
] }),
|
|
28865
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28866
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Pushed By:" }),
|
|
28867
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-accent font-semibold text-[11px]", children: pushSuccessData.author || (authStatus.username ? `@${authStatus.username}` : "Git Author") })
|
|
28868
|
+
] }),
|
|
28869
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28870
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Verification:" }),
|
|
28871
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-emerald-400 font-semibold text-[11px]", children: pushSuccessData.authMethod || "GitHub OAuth (Verified ✓)" })
|
|
28872
|
+
] }),
|
|
28873
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28874
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "AI Engine:" }),
|
|
28875
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-primary font-medium text-[11px] flex items-center gap-1.5", children: [
|
|
28876
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400" }),
|
|
28877
|
+
pushSuccessData.aiProvider || "GitHub Models"
|
|
28878
|
+
] })
|
|
28879
|
+
] }),
|
|
28880
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary border-t border-border/60 pt-1.5", children: [
|
|
28881
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Status:" }),
|
|
28882
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-emerald-400 font-bold text-[11px]", children: "Remote Up to Date" })
|
|
28883
|
+
] })
|
|
28884
|
+
] }),
|
|
28246
28885
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28247
28886
|
"button",
|
|
28248
28887
|
{
|
|
28249
28888
|
onClick: () => setPushSuccessData(null),
|
|
28250
|
-
className: "w-full py-2 bg-
|
|
28889
|
+
className: "w-full py-2.5 bg-brand hover:bg-brand-hover text-white rounded-md font-semibold transition-colors text-sm shadow-md",
|
|
28251
28890
|
children: "Done"
|
|
28252
28891
|
}
|
|
28253
|
-
)
|
|
28254
|
-
] }) }),
|
|
28255
|
-
pushFailureData && (() => {
|
|
28256
|
-
const isConflict = Boolean(
|
|
28257
|
-
pushFailureData.reason && (pushFailureData.reason.includes("unmerged files") || pushFailureData.reason.includes("unresolved conflict") || pushFailureData.reason.includes("merge conflict") || pushFailureData.reason.includes("Automatic merge failed") || pushFailureData.reason.includes("you have unmerged paths") || pushFailureData.reason.includes("CONFLICT ("))
|
|
28258
|
-
);
|
|
28259
|
-
const isPull = pushFailureData.operation === "pull" || pushFailureData.reason?.includes("pull-from-remote");
|
|
28260
|
-
const cleanedReason = formatErrorMessage(pushFailureData.reason);
|
|
28261
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28262
|
-
|
|
28263
|
-
|
|
28264
|
-
|
|
28265
|
-
|
|
28266
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
28267
|
-
|
|
28268
|
-
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-6 h-6 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28269
|
-
"path",
|
|
28270
|
-
{
|
|
28271
|
-
strokeLinecap: "round",
|
|
28272
|
-
strokeLinejoin: "round",
|
|
28273
|
-
strokeWidth: 2,
|
|
28274
|
-
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
28275
|
-
}
|
|
28276
|
-
) }),
|
|
28277
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28278
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold tracking-tight", children: isConflict ? "Merge Conflict Detected" : isPull ? "Pull Failed" : "Push Rejected" }),
|
|
28279
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: isConflict ? "Unmerged files prevent Git from syncing automatically." : isPull ? "Unable to pull incoming commits from the remote repository." : "Remote repository rejected your push request." })
|
|
28280
|
-
] })
|
|
28281
|
-
] }),
|
|
28282
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-4 bg-canvas/80 border border-border p-3.5 rounded-lg max-h-36 overflow-y-auto custom-scrollbar", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-primary font-mono text-xs leading-relaxed whitespace-pre-wrap select-text", children: cleanedReason }) }),
|
|
28283
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-secondary mb-5 text-sm leading-relaxed", children: isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
28284
|
-
"Choose a resolution below: let ",
|
|
28285
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-primary font-semibold", children: "AI Auto-Healer" }),
|
|
28286
|
-
" intelligently reconcile conflicts, keep your local changes, accept remote incoming changes, or abort the merge to revert to the previous state."
|
|
28287
|
-
] }) : isPull ? /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Failed to pull latest changes from the remote repository. Check your connection or use the AI Auto-Healer to analyze and fix the issue." }) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Recommendation: You can pull the latest changes from the remote to reconcile your local branch, or you can use the AI Auto-Healer to analyze and fix the issue automatically." }) }),
|
|
28288
|
-
isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2.5", children: [
|
|
28289
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28290
|
-
"button",
|
|
28291
|
-
{
|
|
28292
|
-
onClick: () => {
|
|
28293
|
-
const data = pushFailureData;
|
|
28294
|
-
setPushFailureData(null);
|
|
28295
|
-
autonomousHealAndPush(
|
|
28296
|
-
data.reason,
|
|
28297
|
-
data.operation || "pull",
|
|
28298
|
-
data.overrideRepoPath,
|
|
28299
|
-
data.overrideBranch
|
|
28300
|
-
);
|
|
28301
|
-
},
|
|
28302
|
-
className: "w-full py-2.5 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-brand/20 active:scale-[0.99]",
|
|
28303
|
-
children: "✨ Auto-Resolve with AI"
|
|
28304
|
-
}
|
|
28305
|
-
),
|
|
28306
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
|
|
28307
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28308
|
-
"button",
|
|
28309
|
-
{
|
|
28310
|
-
onClick: handleResolveConflictOurs,
|
|
28311
|
-
className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
|
|
28312
|
-
title: "Keep local changes and discard remote changes",
|
|
28313
|
-
children: "Keep Local (Ours)"
|
|
28314
|
-
}
|
|
28315
|
-
),
|
|
28316
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28317
|
-
"button",
|
|
28318
|
-
{
|
|
28319
|
-
onClick: handleResolveConflictTheirs,
|
|
28320
|
-
className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
|
|
28321
|
-
title: "Accept remote incoming changes and discard local changes",
|
|
28322
|
-
children: "Accept Remote (Theirs)"
|
|
28323
|
-
}
|
|
28324
|
-
),
|
|
28325
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28326
|
-
"button",
|
|
28327
|
-
{
|
|
28328
|
-
onClick: handleAbortMerge,
|
|
28329
|
-
className: "py-2 px-2 bg-danger/10 hover:bg-danger/20 border border-danger/30 text-danger rounded-md font-semibold transition-all text-xs text-center",
|
|
28330
|
-
title: "Abort the merge and revert repository to previous state",
|
|
28331
|
-
children: "Abort Merge"
|
|
28332
|
-
}
|
|
28333
|
-
)
|
|
28334
|
-
] }),
|
|
28335
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28336
|
-
"button",
|
|
28337
|
-
{
|
|
28338
|
-
onClick: () => {
|
|
28339
|
-
setPushFailureData(null);
|
|
28340
|
-
setChangesTab("changes");
|
|
28341
|
-
},
|
|
28342
|
-
className: "w-full py-2 bg-surface hover:bg-surface-hover border border-border text-secondary hover:text-primary rounded-md font-medium transition-colors text-xs text-center",
|
|
28343
|
-
children: "Review Conflicted Files Manually in Changes Tab"
|
|
28344
|
-
}
|
|
28345
|
-
),
|
|
28346
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28347
|
-
"button",
|
|
28348
|
-
{
|
|
28349
|
-
onClick: async () => {
|
|
28350
|
-
const data = pushFailureData;
|
|
28351
|
-
setPushFailureData(null);
|
|
28352
|
-
try {
|
|
28353
|
-
const remotes = await window.api.getRemotes();
|
|
28354
|
-
const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
|
|
28355
|
-
const targetBranch = data?.overrideBranch || "main";
|
|
28356
|
-
await window.api.masterPush(targetRemote, targetBranch);
|
|
28357
|
-
setPushSuccessData({
|
|
28358
|
-
files: "All",
|
|
28359
|
-
branch: targetBranch,
|
|
28360
|
-
repository: targetRemote
|
|
28361
|
-
});
|
|
28362
|
-
} catch (err) {
|
|
28363
|
-
setPushFailureData({
|
|
28364
|
-
reason: err.message || "Master Force Push Failed",
|
|
28365
|
-
operation: "push",
|
|
28366
|
-
overrideRepoPath: data?.overrideRepoPath,
|
|
28367
|
-
overrideBranch: data?.overrideBranch
|
|
28368
|
-
});
|
|
28369
|
-
}
|
|
28370
|
-
},
|
|
28371
|
-
className: "w-full mt-2 py-2.5 bg-danger/20 hover:bg-danger/30 border border-danger/50 text-danger rounded-md font-bold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-danger/10 active:scale-[0.99]",
|
|
28372
|
-
title: "Force push everything (including ignored files) bypassing all rules",
|
|
28373
|
-
children: "⚡ Master Force Push (Override All)"
|
|
28374
|
-
}
|
|
28375
|
-
)
|
|
28376
|
-
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
28377
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-3", children: [
|
|
28378
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28379
|
-
"button",
|
|
28380
|
-
{
|
|
28381
|
-
onClick: () => {
|
|
28382
|
-
const data = pushFailureData;
|
|
28383
|
-
setPushFailureData(null);
|
|
28384
|
-
autonomousHealAndPush(
|
|
28385
|
-
data.reason,
|
|
28386
|
-
data.operation || (isPull ? "pull" : "push"),
|
|
28387
|
-
data.overrideRepoPath,
|
|
28388
|
-
data.overrideBranch
|
|
28389
|
-
);
|
|
28390
|
-
},
|
|
28391
|
-
className: "flex-1 py-2 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 active:scale-[0.99]",
|
|
28392
|
-
children: "✨ Fix with AI"
|
|
28393
|
-
}
|
|
28394
|
-
),
|
|
28395
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28396
|
-
"button",
|
|
28892
|
+
)
|
|
28893
|
+
] }) }),
|
|
28894
|
+
pushFailureData && (() => {
|
|
28895
|
+
const isConflict = Boolean(
|
|
28896
|
+
pushFailureData.reason && (pushFailureData.reason.includes("unmerged files") || pushFailureData.reason.includes("unresolved conflict") || pushFailureData.reason.includes("merge conflict") || pushFailureData.reason.includes("Automatic merge failed") || pushFailureData.reason.includes("you have unmerged paths") || pushFailureData.reason.includes("CONFLICT ("))
|
|
28897
|
+
);
|
|
28898
|
+
const isPull = pushFailureData.operation === "pull" || pushFailureData.reason?.includes("pull-from-remote");
|
|
28899
|
+
const cleanedReason = formatErrorMessage(pushFailureData.reason);
|
|
28900
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28901
|
+
"div",
|
|
28902
|
+
{
|
|
28903
|
+
className: `bg-surface/95 backdrop-blur-xl p-6 sm:p-8 rounded-xl shadow-2xl border ${isConflict ? "border-amber-500/50" : "border-danger/50"} w-full max-w-[520px] animate-float`,
|
|
28904
|
+
children: [
|
|
28905
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28906
|
+
"div",
|
|
28397
28907
|
{
|
|
28398
|
-
|
|
28399
|
-
|
|
28400
|
-
|
|
28401
|
-
|
|
28402
|
-
|
|
28403
|
-
|
|
28908
|
+
className: `flex items-center gap-3 mb-4 ${isConflict ? "text-amber-500" : "text-danger"}`,
|
|
28909
|
+
children: [
|
|
28910
|
+
isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28911
|
+
"svg",
|
|
28912
|
+
{
|
|
28913
|
+
className: "w-6 h-6 flex-shrink-0",
|
|
28914
|
+
viewBox: "0 0 24 24",
|
|
28915
|
+
fill: "none",
|
|
28916
|
+
stroke: "currentColor",
|
|
28917
|
+
strokeWidth: "2",
|
|
28918
|
+
strokeLinecap: "round",
|
|
28919
|
+
strokeLinejoin: "round",
|
|
28920
|
+
children: [
|
|
28921
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "18", cy: "18", r: "3" }),
|
|
28922
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "6", cy: "6", r: "3" }),
|
|
28923
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 9v12" }),
|
|
28924
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18 9a9 9 0 0 0-9 9" })
|
|
28925
|
+
]
|
|
28926
|
+
}
|
|
28927
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28928
|
+
"svg",
|
|
28929
|
+
{
|
|
28930
|
+
className: "w-6 h-6 flex-shrink-0",
|
|
28931
|
+
fill: "none",
|
|
28932
|
+
stroke: "currentColor",
|
|
28933
|
+
viewBox: "0 0 24 24",
|
|
28934
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28935
|
+
"path",
|
|
28936
|
+
{
|
|
28937
|
+
strokeLinecap: "round",
|
|
28938
|
+
strokeLinejoin: "round",
|
|
28939
|
+
strokeWidth: 2,
|
|
28940
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
28941
|
+
}
|
|
28942
|
+
)
|
|
28943
|
+
}
|
|
28944
|
+
),
|
|
28945
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28946
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold tracking-tight", children: isConflict ? "Merge Conflict Detected" : isPull ? "Pull Failed" : "Push Rejected" }),
|
|
28947
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: isConflict ? "Unmerged files prevent Git from syncing automatically." : isPull ? "Unable to pull incoming commits from the remote repository." : "Remote repository rejected your push request." })
|
|
28948
|
+
] })
|
|
28949
|
+
]
|
|
28404
28950
|
}
|
|
28405
28951
|
),
|
|
28406
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28407
|
-
|
|
28408
|
-
|
|
28409
|
-
|
|
28410
|
-
|
|
28411
|
-
|
|
28412
|
-
|
|
28413
|
-
)
|
|
28414
|
-
|
|
28415
|
-
|
|
28416
|
-
|
|
28417
|
-
|
|
28418
|
-
|
|
28419
|
-
|
|
28420
|
-
|
|
28421
|
-
|
|
28422
|
-
|
|
28423
|
-
|
|
28424
|
-
|
|
28425
|
-
|
|
28426
|
-
|
|
28427
|
-
|
|
28428
|
-
|
|
28429
|
-
|
|
28430
|
-
});
|
|
28431
|
-
} catch (err) {
|
|
28432
|
-
setPushFailureData({
|
|
28433
|
-
reason: err.message || "Master Force Push Failed",
|
|
28434
|
-
operation: "push",
|
|
28435
|
-
overrideRepoPath: data?.overrideRepoPath,
|
|
28436
|
-
overrideBranch: data?.overrideBranch
|
|
28437
|
-
});
|
|
28952
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-4 bg-canvas/80 border border-border p-3.5 rounded-lg max-h-36 overflow-y-auto custom-scrollbar", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-primary font-mono text-xs leading-relaxed whitespace-pre-wrap select-text", children: cleanedReason }) }),
|
|
28953
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-secondary mb-5 text-sm leading-relaxed", children: isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
28954
|
+
"Choose a resolution below: let",
|
|
28955
|
+
" ",
|
|
28956
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-primary font-semibold", children: "AI Auto-Healer" }),
|
|
28957
|
+
" ",
|
|
28958
|
+
"intelligently reconcile conflicts, keep your local changes, accept remote incoming changes, or abort the merge to revert to the previous state."
|
|
28959
|
+
] }) : isPull ? /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Failed to pull latest changes from the remote repository. Check your connection or use the AI Auto-Healer to analyze and fix the issue." }) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Recommendation: You can pull the latest changes from the remote to reconcile your local branch, or you can use the AI Auto-Healer to analyze and fix the issue automatically." }) }),
|
|
28960
|
+
isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2.5", children: [
|
|
28961
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28962
|
+
"button",
|
|
28963
|
+
{
|
|
28964
|
+
onClick: () => {
|
|
28965
|
+
const data = pushFailureData;
|
|
28966
|
+
setPushFailureData(null);
|
|
28967
|
+
autonomousHealAndPush(
|
|
28968
|
+
data.reason,
|
|
28969
|
+
data.operation || "pull",
|
|
28970
|
+
data.overrideRepoPath,
|
|
28971
|
+
data.overrideBranch
|
|
28972
|
+
);
|
|
28973
|
+
},
|
|
28974
|
+
className: "w-full py-2.5 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-brand/20 active:scale-[0.99]",
|
|
28975
|
+
children: "✨ Auto-Resolve with AI"
|
|
28438
28976
|
}
|
|
28439
|
-
|
|
28440
|
-
|
|
28441
|
-
|
|
28442
|
-
|
|
28443
|
-
|
|
28444
|
-
|
|
28445
|
-
|
|
28446
|
-
|
|
28977
|
+
),
|
|
28978
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
|
|
28979
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28980
|
+
"button",
|
|
28981
|
+
{
|
|
28982
|
+
onClick: handleResolveConflictOurs,
|
|
28983
|
+
className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
|
|
28984
|
+
title: "Keep local changes and discard remote changes",
|
|
28985
|
+
children: "Keep Local (Ours)"
|
|
28986
|
+
}
|
|
28987
|
+
),
|
|
28988
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28989
|
+
"button",
|
|
28990
|
+
{
|
|
28991
|
+
onClick: handleResolveConflictTheirs,
|
|
28992
|
+
className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
|
|
28993
|
+
title: "Accept remote incoming changes and discard local changes",
|
|
28994
|
+
children: "Accept Remote (Theirs)"
|
|
28995
|
+
}
|
|
28996
|
+
),
|
|
28997
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28998
|
+
"button",
|
|
28999
|
+
{
|
|
29000
|
+
onClick: handleAbortMerge,
|
|
29001
|
+
className: "py-2 px-2 bg-danger/10 hover:bg-danger/20 border border-danger/30 text-danger rounded-md font-semibold transition-all text-xs text-center",
|
|
29002
|
+
title: "Abort the merge and revert repository to previous state",
|
|
29003
|
+
children: "Abort Merge"
|
|
29004
|
+
}
|
|
29005
|
+
)
|
|
29006
|
+
] }),
|
|
29007
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29008
|
+
"button",
|
|
29009
|
+
{
|
|
29010
|
+
onClick: () => {
|
|
29011
|
+
setPushFailureData(null);
|
|
29012
|
+
setChangesTab("changes");
|
|
29013
|
+
},
|
|
29014
|
+
className: "w-full py-2 bg-surface hover:bg-surface-hover border border-border text-secondary hover:text-primary rounded-md font-medium transition-colors text-xs text-center",
|
|
29015
|
+
children: "Review Conflicted Files Manually in Changes Tab"
|
|
29016
|
+
}
|
|
29017
|
+
),
|
|
29018
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29019
|
+
"button",
|
|
29020
|
+
{
|
|
29021
|
+
onClick: async () => {
|
|
29022
|
+
const data = pushFailureData;
|
|
29023
|
+
setPushFailureData(null);
|
|
29024
|
+
try {
|
|
29025
|
+
const remotes = await window.api.getRemotes();
|
|
29026
|
+
const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
|
|
29027
|
+
const targetBranch = data?.overrideBranch || "main";
|
|
29028
|
+
await window.api.masterPush(targetRemote, targetBranch);
|
|
29029
|
+
setPushSuccessData({
|
|
29030
|
+
files: "All",
|
|
29031
|
+
branch: targetBranch,
|
|
29032
|
+
repository: targetRemote
|
|
29033
|
+
});
|
|
29034
|
+
} catch (err) {
|
|
29035
|
+
setPushFailureData({
|
|
29036
|
+
reason: err.message || "Master Force Push Failed",
|
|
29037
|
+
operation: "push",
|
|
29038
|
+
overrideRepoPath: data?.overrideRepoPath,
|
|
29039
|
+
overrideBranch: data?.overrideBranch
|
|
29040
|
+
});
|
|
29041
|
+
}
|
|
29042
|
+
},
|
|
29043
|
+
className: "w-full mt-2 py-2.5 bg-danger/20 hover:bg-danger/30 border border-danger/50 text-danger rounded-md font-bold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-danger/10 active:scale-[0.99]",
|
|
29044
|
+
title: "Force push everything (including ignored files) bypassing all rules",
|
|
29045
|
+
children: "⚡ Master Force Push (Override All)"
|
|
29046
|
+
}
|
|
29047
|
+
)
|
|
29048
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
29049
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-3", children: [
|
|
29050
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29051
|
+
"button",
|
|
29052
|
+
{
|
|
29053
|
+
onClick: () => {
|
|
29054
|
+
const data = pushFailureData;
|
|
29055
|
+
setPushFailureData(null);
|
|
29056
|
+
autonomousHealAndPush(
|
|
29057
|
+
data.reason,
|
|
29058
|
+
data.operation || (isPull ? "pull" : "push"),
|
|
29059
|
+
data.overrideRepoPath,
|
|
29060
|
+
data.overrideBranch
|
|
29061
|
+
);
|
|
29062
|
+
},
|
|
29063
|
+
className: "flex-1 py-2 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 active:scale-[0.99]",
|
|
29064
|
+
children: "✨ Fix with AI"
|
|
29065
|
+
}
|
|
29066
|
+
),
|
|
29067
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29068
|
+
"button",
|
|
29069
|
+
{
|
|
29070
|
+
onClick: () => {
|
|
29071
|
+
setPushFailureData(null);
|
|
29072
|
+
handlePull();
|
|
29073
|
+
},
|
|
29074
|
+
className: "flex-1 py-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-sm active:scale-[0.99]",
|
|
29075
|
+
children: isPull ? "Retry Pull" : "Pull Changes"
|
|
29076
|
+
}
|
|
29077
|
+
),
|
|
29078
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29079
|
+
"button",
|
|
29080
|
+
{
|
|
29081
|
+
onClick: () => setPushFailureData(null),
|
|
29082
|
+
className: "flex-1 py-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-colors text-sm active:scale-[0.99]",
|
|
29083
|
+
children: "Cancel"
|
|
29084
|
+
}
|
|
29085
|
+
)
|
|
29086
|
+
] }),
|
|
29087
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29088
|
+
"button",
|
|
29089
|
+
{
|
|
29090
|
+
onClick: async () => {
|
|
29091
|
+
const data = pushFailureData;
|
|
29092
|
+
setPushFailureData(null);
|
|
29093
|
+
try {
|
|
29094
|
+
const remotes = await window.api.getRemotes();
|
|
29095
|
+
const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
|
|
29096
|
+
const targetBranch = data?.overrideBranch || "main";
|
|
29097
|
+
await window.api.masterPush(targetRemote, targetBranch);
|
|
29098
|
+
setPushSuccessData({
|
|
29099
|
+
files: "All",
|
|
29100
|
+
branch: targetBranch,
|
|
29101
|
+
repository: targetRemote
|
|
29102
|
+
});
|
|
29103
|
+
} catch (err) {
|
|
29104
|
+
setPushFailureData({
|
|
29105
|
+
reason: err.message || "Master Force Push Failed",
|
|
29106
|
+
operation: "push",
|
|
29107
|
+
overrideRepoPath: data?.overrideRepoPath,
|
|
29108
|
+
overrideBranch: data?.overrideBranch
|
|
29109
|
+
});
|
|
29110
|
+
}
|
|
29111
|
+
},
|
|
29112
|
+
className: "w-full py-2 bg-danger/20 hover:bg-danger/30 border border-danger/50 text-danger rounded-md font-bold transition-all text-sm flex items-center justify-center gap-2 active:scale-[0.99]",
|
|
29113
|
+
title: "Force push everything (including ignored files) bypassing all rules",
|
|
29114
|
+
children: "⚡ Master Force Push (Override All)"
|
|
29115
|
+
}
|
|
29116
|
+
)
|
|
29117
|
+
] })
|
|
29118
|
+
]
|
|
29119
|
+
}
|
|
29120
|
+
) });
|
|
28447
29121
|
})(),
|
|
28448
29122
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-64 lg:w-72 flex-shrink-0 bg-surface/80 backdrop-blur-md p-5 border-r border-border flex flex-col relative z-10 shadow-lg transition-colors duration-300", children: [
|
|
28449
29123
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mb-6 p-1", children: [
|
|
@@ -28706,7 +29380,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28706
29380
|
}
|
|
28707
29381
|
),
|
|
28708
29382
|
t("collaborationRepo"),
|
|
28709
|
-
collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-auto bg-brand text-
|
|
29383
|
+
collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-auto bg-brand/20 text-brand text-[10px] font-bold px-1.5 py-0.5 rounded-full", children: collaboratedRepos.length })
|
|
28710
29384
|
]
|
|
28711
29385
|
}
|
|
28712
29386
|
),
|
|
@@ -28779,7 +29453,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28779
29453
|
)
|
|
28780
29454
|
] })
|
|
28781
29455
|
] }),
|
|
28782
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 p-6 flex flex-col overflow-y-auto custom-scrollbar min-h-0 relative z-10", children: isRepo && status
|
|
29456
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex-1 p-6 flex flex-col overflow-y-auto custom-scrollbar min-h-0 relative z-10", children: isRepo && status ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 flex flex-col min-h-0 gap-4 mb-6 relative z-20", children: [
|
|
28783
29457
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap justify-between items-center bg-surface backdrop-blur-md border border-border p-3 rounded-xl transition-colors duration-300 gap-4 relative z-50", children: [
|
|
28784
29458
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-4 text-sm", children: [
|
|
28785
29459
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 relative", children: [
|
|
@@ -28954,7 +29628,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28954
29628
|
"button",
|
|
28955
29629
|
{
|
|
28956
29630
|
onClick: handleToggleAutoSync,
|
|
28957
|
-
className: `px-2 py-1.5 rounded transition-colors flex items-center justify-center border font-medium ${autoSyncEnabled ? "bg-green-500/20 text-green-400 border-green-500/30" : "hover:bg-brand text-
|
|
29631
|
+
className: `px-2 py-1.5 rounded transition-colors flex items-center justify-center border font-medium ${autoSyncEnabled ? "bg-green-500/20 text-green-400 border-green-500/30" : "hover:bg-brand/20 text-brand border-brand/30"}`,
|
|
28958
29632
|
title: autoSyncEnabled ? "Disable Auto-Push" : "Enable Auto-Push",
|
|
28959
29633
|
children: [
|
|
28960
29634
|
"⚡ ",
|
|
@@ -29073,6 +29747,35 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29073
29747
|
"Refresh"
|
|
29074
29748
|
]
|
|
29075
29749
|
}
|
|
29750
|
+
),
|
|
29751
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
29752
|
+
"button",
|
|
29753
|
+
{
|
|
29754
|
+
onClick: () => setShowForcePushModal(true),
|
|
29755
|
+
className: "w-full sm:w-auto px-4 py-2 sm:px-3 sm:py-1.5 bg-danger/10 hover:bg-danger/20 border border-danger/30 text-danger rounded-md text-xs font-bold active:scale-95 transition-all flex items-center justify-center gap-1.5",
|
|
29756
|
+
title: "Emergency Force Push (Master Override)",
|
|
29757
|
+
children: [
|
|
29758
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29759
|
+
"svg",
|
|
29760
|
+
{
|
|
29761
|
+
className: "w-3.5 h-3.5",
|
|
29762
|
+
fill: "none",
|
|
29763
|
+
stroke: "currentColor",
|
|
29764
|
+
viewBox: "0 0 24 24",
|
|
29765
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29766
|
+
"path",
|
|
29767
|
+
{
|
|
29768
|
+
strokeLinecap: "round",
|
|
29769
|
+
strokeLinejoin: "round",
|
|
29770
|
+
strokeWidth: 2,
|
|
29771
|
+
d: "M13 10V3L4 14h7v7l9-11h-7z"
|
|
29772
|
+
}
|
|
29773
|
+
)
|
|
29774
|
+
}
|
|
29775
|
+
),
|
|
29776
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Force Push" })
|
|
29777
|
+
]
|
|
29778
|
+
}
|
|
29076
29779
|
)
|
|
29077
29780
|
] })
|
|
29078
29781
|
] }),
|
|
@@ -29119,7 +29822,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29119
29822
|
"button",
|
|
29120
29823
|
{
|
|
29121
29824
|
onClick: () => window.api.openExternal(remoteUrl),
|
|
29122
|
-
className: "p-1.5 hover:bg-brand text-
|
|
29825
|
+
className: "p-1.5 hover:bg-brand/20 text-brand rounded transition-colors flex items-center justify-center border border-brand/30",
|
|
29123
29826
|
title: "View Repository on GitHub",
|
|
29124
29827
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3.5 h-3.5", viewBox: "0 0 24 24", fill: "currentColor", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.205 11.387.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 21.795 24 17.298 24 12c0-6.627-5.373-12-12-12z" }) })
|
|
29125
29828
|
}
|
|
@@ -29145,7 +29848,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29145
29848
|
"button",
|
|
29146
29849
|
{
|
|
29147
29850
|
onClick: () => setShowContributorsModal(true),
|
|
29148
|
-
className: "px-2 py-1.5 hover:bg-brand text-
|
|
29851
|
+
className: "px-2 py-1.5 hover:bg-brand/20 text-brand rounded transition-colors flex items-center justify-center border border-brand/30 font-medium",
|
|
29149
29852
|
title: "Manage Collaborators",
|
|
29150
29853
|
children: [
|
|
29151
29854
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -29298,7 +30001,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29298
30001
|
children: "Deleted"
|
|
29299
30002
|
}
|
|
29300
30003
|
),
|
|
29301
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ml-auto text-xs font-bold text-brand bg-brand
|
|
30004
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "ml-auto text-xs font-bold text-brand bg-brand/20 border border-brand/30 px-3 py-1 rounded-full", children: "Collaboration Repo" })
|
|
29302
30005
|
] }),
|
|
29303
30006
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29304
30007
|
CollaborationRepoView,
|
|
@@ -29365,7 +30068,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29365
30068
|
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-surface border-b-2" : "text-secondary border-transparent hover:text-primary"}`,
|
|
29366
30069
|
children: [
|
|
29367
30070
|
"Collaboration Repo",
|
|
29368
|
-
collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "ml-1.5 bg-brand text-
|
|
30071
|
+
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 })
|
|
29369
30072
|
]
|
|
29370
30073
|
}
|
|
29371
30074
|
),
|
|
@@ -29375,7 +30078,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29375
30078
|
{
|
|
29376
30079
|
onClick: handleUploadFiles,
|
|
29377
30080
|
disabled: !repoPath || isUploading,
|
|
29378
|
-
className: "text-xs bg-brand text-white hover:bg-brand
|
|
30081
|
+
className: "text-xs bg-brand text-white hover:bg-brand/90 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",
|
|
29379
30082
|
title: "Upload files directly into this repository",
|
|
29380
30083
|
children: [
|
|
29381
30084
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -29726,7 +30429,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29726
30429
|
]
|
|
29727
30430
|
}
|
|
29728
30431
|
),
|
|
29729
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-bold text-brand bg-brand
|
|
30432
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex items-center gap-2", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs font-bold text-brand bg-brand/20 border border-brand/30 px-3 py-1 rounded-full", children: "Collaboration Hub" }) })
|
|
29730
30433
|
] }),
|
|
29731
30434
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29732
30435
|
CollaborationRepoView,
|
|
@@ -29950,90 +30653,189 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29950
30653
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29951
30654
|
"svg",
|
|
29952
30655
|
{
|
|
29953
|
-
className: "w-3.5 h-3.5",
|
|
30656
|
+
className: "w-3.5 h-3.5",
|
|
30657
|
+
fill: "none",
|
|
30658
|
+
stroke: "currentColor",
|
|
30659
|
+
viewBox: "0 0 24 24",
|
|
30660
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30661
|
+
"path",
|
|
30662
|
+
{
|
|
30663
|
+
strokeLinecap: "round",
|
|
30664
|
+
strokeLinejoin: "round",
|
|
30665
|
+
strokeWidth: 2,
|
|
30666
|
+
d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
|
|
30667
|
+
}
|
|
30668
|
+
)
|
|
30669
|
+
}
|
|
30670
|
+
)
|
|
30671
|
+
}
|
|
30672
|
+
)
|
|
30673
|
+
] })
|
|
30674
|
+
] }),
|
|
30675
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 flex flex-col items-center justify-center text-secondary relative z-10 py-6", children: [
|
|
30676
|
+
invitations.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 p-4 sm:p-5 bg-surface/90 border border-brand/40 hover:border-brand/70 rounded-2xl shadow-xl flex items-center gap-4 max-w-md w-full backdrop-blur-md animate-fade-in transition-all", children: [
|
|
30677
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-11 h-11 rounded-xl bg-brand text-white flex items-center justify-center text-xl flex-shrink-0 shadow-md", children: "🔔" }),
|
|
30678
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 text-left min-w-0", children: [
|
|
30679
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm font-bold text-primary truncate", children: [
|
|
30680
|
+
invitations.length,
|
|
30681
|
+
" Collaboration Invitation",
|
|
30682
|
+
invitations.length > 1 ? "s" : "",
|
|
30683
|
+
" Pending"
|
|
30684
|
+
] }),
|
|
30685
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Accept now to clone or link and start collaborating." })
|
|
30686
|
+
] }),
|
|
30687
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30688
|
+
"button",
|
|
30689
|
+
{
|
|
30690
|
+
onClick: () => setShowInvitationsModal(true),
|
|
30691
|
+
className: "px-3.5 py-1.5 bg-brand hover:bg-brand-hover text-white text-xs font-bold rounded-lg transition-all shadow-sm flex-shrink-0 cursor-pointer",
|
|
30692
|
+
children: [
|
|
30693
|
+
"Review (",
|
|
30694
|
+
invitations.length,
|
|
30695
|
+
")"
|
|
30696
|
+
]
|
|
30697
|
+
}
|
|
30698
|
+
)
|
|
30699
|
+
] }),
|
|
30700
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-24 h-24 mb-6 opacity-30 hover:opacity-50 transition-opacity", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logo, alt: "Logo", className: "w-full h-full drop-shadow-md" }) }),
|
|
30701
|
+
repoPath ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
30702
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xl mb-2 text-primary font-semibold", children: "Folder Loaded" }),
|
|
30703
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-mono text-accent bg-accent/10 px-3 py-1 rounded-md mb-6 border border-accent/20", children: repoPath }),
|
|
30704
|
+
errorMsg ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-danger bg-danger/10 border border-danger/30 p-5 rounded-xl text-sm text-center max-w-md shadow-lg flex flex-col items-center gap-3", children: [
|
|
30705
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
30706
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Error:" }),
|
|
30707
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-1 text-xs opacity-90", children: errorMsg })
|
|
30708
|
+
] }),
|
|
30709
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2", children: [
|
|
30710
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30711
|
+
"button",
|
|
30712
|
+
{
|
|
30713
|
+
onClick: () => refreshRepoState(),
|
|
30714
|
+
className: "px-4 py-1.5 bg-brand hover:bg-brand-hover text-white text-xs font-semibold rounded-lg transition-all cursor-pointer",
|
|
30715
|
+
children: "Retry"
|
|
30716
|
+
}
|
|
30717
|
+
),
|
|
30718
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30719
|
+
"button",
|
|
30720
|
+
{
|
|
30721
|
+
onClick: () => setShowSetupWizard(true),
|
|
30722
|
+
className: "px-4 py-1.5 bg-surface-hover hover:bg-surface text-secondary hover:text-primary text-xs font-semibold rounded-lg border border-border transition-all cursor-pointer",
|
|
30723
|
+
children: "Setup Repository"
|
|
30724
|
+
}
|
|
30725
|
+
)
|
|
30726
|
+
] })
|
|
30727
|
+
] }) : !isRepo ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-3 max-w-md text-center p-6 bg-surface/50 rounded-2xl border border-border/40 backdrop-blur-sm", children: [
|
|
30728
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm text-secondary", children: "This folder is loaded, but Git is not initialized in it yet." }),
|
|
30729
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mt-2", children: [
|
|
30730
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30731
|
+
"button",
|
|
30732
|
+
{
|
|
30733
|
+
onClick: () => setShowSetupWizard(true),
|
|
30734
|
+
className: "px-5 py-2.5 bg-brand hover:bg-brand-hover text-white font-semibold rounded-xl text-xs transition-all shadow-md hover:shadow-brand/20 cursor-pointer flex items-center gap-2",
|
|
30735
|
+
children: [
|
|
30736
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30737
|
+
"svg",
|
|
30738
|
+
{
|
|
30739
|
+
className: "w-4 h-4",
|
|
30740
|
+
fill: "none",
|
|
30741
|
+
stroke: "currentColor",
|
|
30742
|
+
viewBox: "0 0 24 24",
|
|
30743
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30744
|
+
"path",
|
|
30745
|
+
{
|
|
30746
|
+
strokeLinecap: "round",
|
|
30747
|
+
strokeLinejoin: "round",
|
|
30748
|
+
strokeWidth: "2",
|
|
30749
|
+
d: "M12 4v16m8-8H4"
|
|
30750
|
+
}
|
|
30751
|
+
)
|
|
30752
|
+
}
|
|
30753
|
+
),
|
|
30754
|
+
"Initialize Git Repository"
|
|
30755
|
+
]
|
|
30756
|
+
}
|
|
30757
|
+
),
|
|
30758
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30759
|
+
"button",
|
|
30760
|
+
{
|
|
30761
|
+
onClick: async () => {
|
|
30762
|
+
if (!repoPath) return;
|
|
30763
|
+
const res = await window.api.setRepoPath(repoPath);
|
|
30764
|
+
if (res) {
|
|
30765
|
+
setRepoPath(res.path);
|
|
30766
|
+
setIsRepo(res.isRepo);
|
|
30767
|
+
if (res.isRepo) {
|
|
30768
|
+
await refreshRepoState();
|
|
30769
|
+
}
|
|
30770
|
+
}
|
|
30771
|
+
},
|
|
30772
|
+
className: "px-4 py-2.5 bg-surface hover:bg-surface-hover text-secondary hover:text-primary font-semibold rounded-xl text-xs border border-border transition-all cursor-pointer flex items-center gap-1.5",
|
|
30773
|
+
children: [
|
|
30774
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30775
|
+
"svg",
|
|
30776
|
+
{
|
|
30777
|
+
className: "w-3.5 h-3.5",
|
|
30778
|
+
fill: "none",
|
|
30779
|
+
stroke: "currentColor",
|
|
30780
|
+
viewBox: "0 0 24 24",
|
|
30781
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30782
|
+
"path",
|
|
30783
|
+
{
|
|
30784
|
+
strokeLinecap: "round",
|
|
30785
|
+
strokeLinejoin: "round",
|
|
30786
|
+
strokeWidth: "2",
|
|
30787
|
+
d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
|
|
30788
|
+
}
|
|
30789
|
+
)
|
|
30790
|
+
}
|
|
30791
|
+
),
|
|
30792
|
+
"Check Again"
|
|
30793
|
+
]
|
|
30794
|
+
}
|
|
30795
|
+
)
|
|
30796
|
+
] })
|
|
30797
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [
|
|
30798
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "flex items-center gap-2 text-sm text-secondary", children: [
|
|
30799
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30800
|
+
"svg",
|
|
30801
|
+
{
|
|
30802
|
+
className: "w-4 h-4 animate-spin text-brand",
|
|
29954
30803
|
fill: "none",
|
|
29955
|
-
stroke: "currentColor",
|
|
29956
30804
|
viewBox: "0 0 24 24",
|
|
29957
|
-
children:
|
|
29958
|
-
|
|
29959
|
-
|
|
29960
|
-
|
|
29961
|
-
|
|
29962
|
-
|
|
29963
|
-
|
|
29964
|
-
|
|
29965
|
-
|
|
30805
|
+
children: [
|
|
30806
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30807
|
+
"circle",
|
|
30808
|
+
{
|
|
30809
|
+
className: "opacity-25",
|
|
30810
|
+
cx: "12",
|
|
30811
|
+
cy: "12",
|
|
30812
|
+
r: "10",
|
|
30813
|
+
stroke: "currentColor",
|
|
30814
|
+
strokeWidth: "4"
|
|
30815
|
+
}
|
|
30816
|
+
),
|
|
30817
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30818
|
+
"path",
|
|
30819
|
+
{
|
|
30820
|
+
className: "opacity-75",
|
|
30821
|
+
fill: "currentColor",
|
|
30822
|
+
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
30823
|
+
}
|
|
30824
|
+
)
|
|
30825
|
+
]
|
|
29966
30826
|
}
|
|
29967
|
-
)
|
|
29968
|
-
|
|
29969
|
-
|
|
29970
|
-
] })
|
|
29971
|
-
] }),
|
|
29972
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 flex flex-col items-center justify-center text-secondary relative z-10 py-6", children: [
|
|
29973
|
-
invitations.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-6 p-4 sm:p-5 bg-surface/90 border border-brand/40 hover:border-brand/70 rounded-2xl shadow-xl flex items-center gap-4 max-w-md w-full backdrop-blur-md animate-fade-in transition-all", children: [
|
|
29974
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-11 h-11 rounded-xl bg-brand text-white flex items-center justify-center text-xl flex-shrink-0 shadow-md", children: "🔔" }),
|
|
29975
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 text-left min-w-0", children: [
|
|
29976
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-sm font-bold text-primary truncate", children: [
|
|
29977
|
-
invitations.length,
|
|
29978
|
-
" Collaboration Invitation",
|
|
29979
|
-
invitations.length > 1 ? "s" : "",
|
|
29980
|
-
" Pending"
|
|
30827
|
+
),
|
|
30828
|
+
" ",
|
|
30829
|
+
"Analyzing Git Repository..."
|
|
29981
30830
|
] }),
|
|
29982
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29983
|
-
|
|
29984
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
29985
|
-
"button",
|
|
29986
|
-
{
|
|
29987
|
-
onClick: () => setShowInvitationsModal(true),
|
|
29988
|
-
className: "px-3.5 py-1.5 bg-brand hover:bg-brand-hover text-white text-xs font-bold rounded-lg transition-all shadow-sm flex-shrink-0 cursor-pointer",
|
|
29989
|
-
children: [
|
|
29990
|
-
"Review (",
|
|
29991
|
-
invitations.length,
|
|
29992
|
-
")"
|
|
29993
|
-
]
|
|
29994
|
-
}
|
|
29995
|
-
)
|
|
29996
|
-
] }),
|
|
29997
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-24 h-24 mb-6 opacity-30 hover:opacity-50 transition-opacity", children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: logo, alt: "Logo", className: "w-full h-full drop-shadow-md" }) }),
|
|
29998
|
-
repoPath ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
29999
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xl mb-2 text-primary font-semibold", children: "Folder Loaded" }),
|
|
30000
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-mono text-accent bg-accent/10 px-3 py-1 rounded-md mb-6 border border-accent/20", children: repoPath }),
|
|
30001
|
-
errorMsg ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-danger bg-danger/10 border border-danger/30 p-4 rounded-md text-sm text-center max-w-md", children: [
|
|
30002
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: "Error:" }),
|
|
30003
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
|
|
30004
|
-
errorMsg
|
|
30005
|
-
] }) : !isRepo ? /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm", children: 'Click "Initialize Git in Folder" in the sidebar.' }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "flex items-center gap-2 text-sm", children: [
|
|
30006
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30007
|
-
"svg",
|
|
30831
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30832
|
+
"button",
|
|
30008
30833
|
{
|
|
30009
|
-
|
|
30010
|
-
|
|
30011
|
-
|
|
30012
|
-
children: [
|
|
30013
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30014
|
-
"circle",
|
|
30015
|
-
{
|
|
30016
|
-
className: "opacity-25",
|
|
30017
|
-
cx: "12",
|
|
30018
|
-
cy: "12",
|
|
30019
|
-
r: "10",
|
|
30020
|
-
stroke: "currentColor",
|
|
30021
|
-
strokeWidth: "4"
|
|
30022
|
-
}
|
|
30023
|
-
),
|
|
30024
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30025
|
-
"path",
|
|
30026
|
-
{
|
|
30027
|
-
className: "opacity-75",
|
|
30028
|
-
fill: "currentColor",
|
|
30029
|
-
d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"
|
|
30030
|
-
}
|
|
30031
|
-
)
|
|
30032
|
-
]
|
|
30834
|
+
onClick: () => refreshRepoState(),
|
|
30835
|
+
className: "text-xs text-secondary hover:text-primary underline mt-2 cursor-pointer",
|
|
30836
|
+
children: "Force Refresh"
|
|
30033
30837
|
}
|
|
30034
|
-
)
|
|
30035
|
-
" ",
|
|
30036
|
-
"Analyzing..."
|
|
30838
|
+
)
|
|
30037
30839
|
] })
|
|
30038
30840
|
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-center flex flex-col items-center", children: [
|
|
30039
30841
|
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-3xl font-bold text-primary mb-2 tracking-tight", children: "GIT ELECTRON" }),
|
|
@@ -30085,7 +30887,10 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
30085
30887
|
onClick: async () => {
|
|
30086
30888
|
try {
|
|
30087
30889
|
await window.api.acceptInvitation(inv.id);
|
|
30088
|
-
showToast(
|
|
30890
|
+
showToast(
|
|
30891
|
+
`Invitation accepted for ${inv.repository.full_name}!`,
|
|
30892
|
+
"success"
|
|
30893
|
+
);
|
|
30089
30894
|
setShowInvitationsModal(false);
|
|
30090
30895
|
setShowCollabActionModal({
|
|
30091
30896
|
name: inv.repository.name,
|
|
@@ -30139,6 +30944,288 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
30139
30944
|
}
|
|
30140
30945
|
)
|
|
30141
30946
|
] }) }),
|
|
30947
|
+
showPrivacyModal && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed inset-0 bg-black/80 backdrop-blur-md flex items-center justify-center z-50 p-4 md:p-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/98 backdrop-blur-2xl rounded-2xl shadow-2xl border border-border w-full max-w-4xl h-[720px] max-h-[92vh] flex flex-col overflow-hidden animate-float text-left", children: [
|
|
30948
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-8 py-5 border-b border-border shrink-0 flex items-center justify-between bg-surface", children: [
|
|
30949
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
30950
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl bg-emerald-500/10 border border-emerald-500/25 flex items-center justify-center text-emerald-400", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30951
|
+
"path",
|
|
30952
|
+
{
|
|
30953
|
+
strokeLinecap: "round",
|
|
30954
|
+
strokeLinejoin: "round",
|
|
30955
|
+
strokeWidth: 2,
|
|
30956
|
+
d: "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"
|
|
30957
|
+
}
|
|
30958
|
+
) }) }),
|
|
30959
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
30960
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-bold text-primary leading-tight", children: "Privacy & Security Trust Center" }),
|
|
30961
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Enterprise Grade • Local-First Architecture • Zero Telemetry Guaranteed" })
|
|
30962
|
+
] })
|
|
30963
|
+
] }),
|
|
30964
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30965
|
+
"button",
|
|
30966
|
+
{
|
|
30967
|
+
type: "button",
|
|
30968
|
+
onClick: () => setShowPrivacyModal(false),
|
|
30969
|
+
className: "w-8 h-8 rounded-lg text-secondary hover:text-primary hover:bg-surface-hover flex items-center justify-center transition-colors border border-transparent hover:border-border",
|
|
30970
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30971
|
+
"path",
|
|
30972
|
+
{
|
|
30973
|
+
strokeLinecap: "round",
|
|
30974
|
+
strokeLinejoin: "round",
|
|
30975
|
+
strokeWidth: 2,
|
|
30976
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
30977
|
+
}
|
|
30978
|
+
) })
|
|
30979
|
+
}
|
|
30980
|
+
)
|
|
30981
|
+
] }),
|
|
30982
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-8 md:p-10 space-y-8 bg-surface/20", children: [
|
|
30983
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-5", children: [
|
|
30984
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
30985
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-8 h-8 rounded-lg bg-emerald-500/10 text-emerald-400 flex items-center justify-center mb-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30986
|
+
"path",
|
|
30987
|
+
{
|
|
30988
|
+
strokeLinecap: "round",
|
|
30989
|
+
strokeLinejoin: "round",
|
|
30990
|
+
strokeWidth: 2,
|
|
30991
|
+
d: "M5 13l4 4L19 7"
|
|
30992
|
+
}
|
|
30993
|
+
) }) }),
|
|
30994
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "0.00% Telemetry" }),
|
|
30995
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Zero user analytics, tracking pixels, or diagnostic beacons collected or phoned home. None." })
|
|
30996
|
+
] }),
|
|
30997
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
30998
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-8 h-8 rounded-lg bg-brand/10 text-brand flex items-center justify-center mb-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30999
|
+
"path",
|
|
31000
|
+
{
|
|
31001
|
+
strokeLinecap: "round",
|
|
31002
|
+
strokeLinejoin: "round",
|
|
31003
|
+
strokeWidth: 2,
|
|
31004
|
+
d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
|
31005
|
+
}
|
|
31006
|
+
) }) }),
|
|
31007
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "100% Local-First" }),
|
|
31008
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Repositories, commit logs, branches, and diffs never leave your local workstation file system." })
|
|
31009
|
+
] }),
|
|
31010
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
31011
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-8 h-8 rounded-lg bg-accent/10 text-accent flex items-center justify-center mb-1", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31012
|
+
"path",
|
|
31013
|
+
{
|
|
31014
|
+
strokeLinecap: "round",
|
|
31015
|
+
strokeLinejoin: "round",
|
|
31016
|
+
strokeWidth: 2,
|
|
31017
|
+
d: "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"
|
|
31018
|
+
}
|
|
31019
|
+
) }) }),
|
|
31020
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "OS Vault Security" }),
|
|
31021
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Tokens sealed with Windows DPAPI / macOS Keychain. Direct TLS 1.3 to official GitHub APIs." })
|
|
31022
|
+
] })
|
|
31023
|
+
] }),
|
|
31024
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
31025
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
31026
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
31027
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono font-bold text-brand bg-brand/10 border border-brand/20 px-2 py-0.5 rounded", children: "SECTION 01" }),
|
|
31028
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Local-First & Zero Telemetry Architecture" })
|
|
31029
|
+
] }),
|
|
31030
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-semibold text-emerald-400 bg-emerald-500/10 px-2.5 py-1 rounded-full border border-emerald-500/20", children: "Zero Surveillance" })
|
|
31031
|
+
] }),
|
|
31032
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "GitQuickPush operates exclusively on your local machine as an offline-first Git client. We run zero intermediary proxy servers, host zero analytics collectors, and track zero keystrokes or repo activities. Your source code and commit history remain 100% isolated inside your workstation's local filesystem." }),
|
|
31033
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
31034
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ No telemetry collection" }),
|
|
31035
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ No remote code replication" }),
|
|
31036
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Works in air-gapped environments" })
|
|
31037
|
+
] })
|
|
31038
|
+
] }),
|
|
31039
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
31040
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
31041
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
31042
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono font-bold text-brand bg-brand/10 border border-brand/20 px-2 py-0.5 rounded", children: "SECTION 02" }),
|
|
31043
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Hardware-Sealed OS Keystore & Token Isolation" })
|
|
31044
|
+
] }),
|
|
31045
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-semibold text-accent bg-accent/10 px-2.5 py-1 rounded-full border border-accent/20", children: "DPAPI / Keychain" })
|
|
31046
|
+
] }),
|
|
31047
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "GitHub OAuth tokens and sensitive configuration parameters are encrypted using Electron's native safeStorage API, backed directly by your operating system's cryptographic master vault (Windows DPAPI, macOS Keychain, or Linux SecretService). Network authentication requests connect strictly to official github.com API endpoints over TLS 1.3 with cryptographic certificate validation." }),
|
|
31048
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
31049
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ OS-level hardware encryption" }),
|
|
31050
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Direct TLS 1.3 to github.com" }),
|
|
31051
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Zero third-party relay servers" })
|
|
31052
|
+
] })
|
|
31053
|
+
] }),
|
|
31054
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
31055
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
31056
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
31057
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono font-bold text-brand bg-brand/10 border border-brand/20 px-2 py-0.5 rounded", children: "SECTION 03" }),
|
|
31058
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Ephemeral AI Assistance & Privacy Guarantees" })
|
|
31059
|
+
] }),
|
|
31060
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-semibold text-primary/80 bg-canvas px-2.5 py-1 rounded-full border border-border", children: "In-Memory Only" })
|
|
31061
|
+
] }),
|
|
31062
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "When utilizing automated AI commit message generation or conflict diagnosis, only the necessary git diff patch is transmitted via direct TLS connection to your designated AI endpoint (GitHub Models / Google Gemini API). Data packets are processed strictly in-memory ephemerally and are never retained on disk, logged to telemetry stores, or used to train external public foundation models." }),
|
|
31063
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
31064
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Ephemeral in-memory analysis" }),
|
|
31065
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Never used for AI model training" }),
|
|
31066
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Fully optional & user-controlled" })
|
|
31067
|
+
] })
|
|
31068
|
+
] }),
|
|
31069
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
31070
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
31071
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
31072
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono font-bold text-brand bg-brand/10 border border-brand/20 px-2 py-0.5 rounded", children: "SECTION 04" }),
|
|
31073
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Zero Surveillance Hardware Access" })
|
|
31074
|
+
] }),
|
|
31075
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-semibold text-emerald-400 bg-emerald-500/10 px-2.5 py-1 rounded-full border border-emerald-500/20", children: "Strict Sandbox" })
|
|
31076
|
+
] }),
|
|
31077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "GitQuickPush maintains zero capabilities or permissions to access your camera, microphone, device location, system contacts, or external disk directories outside of designated Git workspace roots. All file system watchers operate strictly within the repository boundaries chosen by the user." }),
|
|
31078
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
31079
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Camera & microphone disabled" }),
|
|
31080
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Zero location tracking" }),
|
|
31081
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Scoped strictly to repository root" })
|
|
31082
|
+
] })
|
|
31083
|
+
] }),
|
|
31084
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
31085
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
31086
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
31087
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-mono font-bold text-brand bg-brand/10 border border-brand/20 px-2 py-0.5 rounded", children: "SECTION 05" }),
|
|
31088
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Institutional Compliance & Corporate Readiness" })
|
|
31089
|
+
] }),
|
|
31090
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] font-semibold text-brand bg-brand/10 px-2.5 py-1 rounded-full border border-brand/20", children: "Enterprise Ready" })
|
|
31091
|
+
] }),
|
|
31092
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary leading-relaxed", children: "Because no proprietary codebases, employee identities, or repository metrics are transmitted or centralized on remote cloud infrastructure, GitQuickPush is fully aligned with institutional data sovereignty, GDPR, and enterprise security auditing standards. Organizations may freely deploy the application in strict internal environments." }),
|
|
31093
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
31094
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ GDPR & institutional compliance" }),
|
|
31095
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ SOC 2 alignment" }),
|
|
31096
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary/80 bg-canvas px-2.5 py-1 rounded-md border border-border/60", children: "✓ Open architecture auditability" })
|
|
31097
|
+
] })
|
|
31098
|
+
] })
|
|
31099
|
+
] }),
|
|
31100
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-8 py-4.5 border-t border-border shrink-0 flex items-center justify-between bg-surface", children: [
|
|
31101
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-secondary font-mono", children: "Document ID: GQP-PRIV-2026.1 • Local-First Architecture Compliance" }),
|
|
31102
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31103
|
+
"button",
|
|
31104
|
+
{
|
|
31105
|
+
type: "button",
|
|
31106
|
+
onClick: () => setShowPrivacyModal(false),
|
|
31107
|
+
className: "px-7 py-2.5 bg-brand hover:bg-brand-hover text-white rounded-xl font-bold text-xs shadow-md shadow-brand/20 transition-all active:translate-y-0.5",
|
|
31108
|
+
children: "Close Trust Center"
|
|
31109
|
+
}
|
|
31110
|
+
)
|
|
31111
|
+
] })
|
|
31112
|
+
] }) }),
|
|
31113
|
+
showForcePushModal && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed inset-0 bg-black/80 backdrop-blur-md flex items-center justify-center z-50 p-4 md:p-6 transition-opacity", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/98 backdrop-blur-2xl rounded-2xl shadow-2xl border border-danger/40 w-full max-w-lg overflow-hidden animate-float text-left", children: [
|
|
31114
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-5 border-b border-border flex items-center justify-between bg-danger/5", children: [
|
|
31115
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
31116
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-10 h-10 rounded-xl bg-danger/10 border border-danger/25 flex items-center justify-center text-danger", children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31117
|
+
"path",
|
|
31118
|
+
{
|
|
31119
|
+
strokeLinecap: "round",
|
|
31120
|
+
strokeLinejoin: "round",
|
|
31121
|
+
strokeWidth: 2,
|
|
31122
|
+
d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
|
|
31123
|
+
}
|
|
31124
|
+
) }) }),
|
|
31125
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
31126
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-base font-bold text-primary leading-tight", children: "Confirm Force Push Override" }),
|
|
31127
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-danger/80 mt-0.5 font-medium", children: "Destructive Remote Branch Override" })
|
|
31128
|
+
] })
|
|
31129
|
+
] }),
|
|
31130
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31131
|
+
"button",
|
|
31132
|
+
{
|
|
31133
|
+
type: "button",
|
|
31134
|
+
onClick: () => setShowForcePushModal(false),
|
|
31135
|
+
className: "w-8 h-8 rounded-lg text-secondary hover:text-primary hover:bg-surface-hover flex items-center justify-center transition-colors",
|
|
31136
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31137
|
+
"path",
|
|
31138
|
+
{
|
|
31139
|
+
strokeLinecap: "round",
|
|
31140
|
+
strokeLinejoin: "round",
|
|
31141
|
+
strokeWidth: 2,
|
|
31142
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
31143
|
+
}
|
|
31144
|
+
) })
|
|
31145
|
+
}
|
|
31146
|
+
)
|
|
31147
|
+
] }),
|
|
31148
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 space-y-4", children: [
|
|
31149
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 rounded-xl bg-danger/10 border border-danger/30 text-xs text-danger leading-relaxed", children: [
|
|
31150
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "font-bold text-sm mb-1 flex items-center gap-1.5", children: [
|
|
31151
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⚠️" }),
|
|
31152
|
+
" Warning: Non-Fast-Forward Overwrite"
|
|
31153
|
+
] }),
|
|
31154
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
|
|
31155
|
+
"Force pushing will forcefully rewrite the remote branch history to exactly mirror your local working tree. Any remote commits not present on your local workstation will be ",
|
|
31156
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "font-black underline", children: "permanently lost" }),
|
|
31157
|
+
"."
|
|
31158
|
+
] })
|
|
31159
|
+
] }),
|
|
31160
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 rounded-xl bg-canvas border border-border space-y-2.5 text-xs", children: [
|
|
31161
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31162
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Active Branch:" }),
|
|
31163
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono font-bold text-primary bg-surface px-2 py-0.5 rounded border border-border", children: status?.current || "main" })
|
|
31164
|
+
] }),
|
|
31165
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31166
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Target Remote:" }),
|
|
31167
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono font-bold text-brand bg-brand/10 px-2 py-0.5 rounded border border-brand/20", children: "origin" })
|
|
31168
|
+
] }),
|
|
31169
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31170
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Safety Check:" }),
|
|
31171
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-warning font-semibold", children: "Bypassing Divergence Guards" })
|
|
31172
|
+
] })
|
|
31173
|
+
] })
|
|
31174
|
+
] }),
|
|
31175
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-4 border-t border-border bg-surface flex items-center justify-end gap-3", children: [
|
|
31176
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31177
|
+
"button",
|
|
31178
|
+
{
|
|
31179
|
+
type: "button",
|
|
31180
|
+
disabled: isExecutingForcePush,
|
|
31181
|
+
onClick: () => setShowForcePushModal(false),
|
|
31182
|
+
className: "px-4 py-2 bg-canvas border border-border hover:bg-surface-hover text-secondary hover:text-primary rounded-xl text-xs font-semibold transition-all disabled:opacity-50",
|
|
31183
|
+
children: "Cancel"
|
|
31184
|
+
}
|
|
31185
|
+
),
|
|
31186
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31187
|
+
"button",
|
|
31188
|
+
{
|
|
31189
|
+
type: "button",
|
|
31190
|
+
disabled: isExecutingForcePush,
|
|
31191
|
+
onClick: handleExecuteForcePush,
|
|
31192
|
+
className: "px-5 py-2 bg-danger hover:bg-danger/80 text-white rounded-xl text-xs font-bold transition-all shadow-md shadow-danger/25 flex items-center gap-2 disabled:opacity-50",
|
|
31193
|
+
children: isExecutingForcePush ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
31194
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31195
|
+
"svg",
|
|
31196
|
+
{
|
|
31197
|
+
className: "w-4 h-4 animate-spin",
|
|
31198
|
+
fill: "none",
|
|
31199
|
+
stroke: "currentColor",
|
|
31200
|
+
viewBox: "0 0 24 24",
|
|
31201
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31202
|
+
"path",
|
|
31203
|
+
{
|
|
31204
|
+
strokeLinecap: "round",
|
|
31205
|
+
strokeLinejoin: "round",
|
|
31206
|
+
strokeWidth: 2,
|
|
31207
|
+
d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"
|
|
31208
|
+
}
|
|
31209
|
+
)
|
|
31210
|
+
}
|
|
31211
|
+
),
|
|
31212
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Overwriting Remote..." })
|
|
31213
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
31214
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31215
|
+
"path",
|
|
31216
|
+
{
|
|
31217
|
+
strokeLinecap: "round",
|
|
31218
|
+
strokeLinejoin: "round",
|
|
31219
|
+
strokeWidth: 2,
|
|
31220
|
+
d: "M13 10V3L4 14h7v7l9-11h-7z"
|
|
31221
|
+
}
|
|
31222
|
+
) }),
|
|
31223
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Force Push Branch" })
|
|
31224
|
+
] })
|
|
31225
|
+
}
|
|
31226
|
+
)
|
|
31227
|
+
] })
|
|
31228
|
+
] }) }),
|
|
30142
31229
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fixed top-6 right-6 z-[300] flex flex-col gap-3 pointer-events-none", children: toasts.map((toast) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "animate-fade-in pointer-events-auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
30143
31230
|
"div",
|
|
30144
31231
|
{
|