gitxelectron 1.3.8 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/ai-setup.js +46 -0
- package/bin/cli.js +35 -13
- package/out/main/index.js +308 -252
- package/out/preload/index.js +1 -0
- package/out/renderer/assets/index-CvICUEsw.css +2989 -0
- package/out/renderer/assets/{index-FVTFdxtU.js → index-DypwT1IG.js} +1528 -350
- package/out/renderer/index.html +2 -2
- package/package.json +2 -1
- package/out/renderer/assets/index-D_wJ7hR7.css +0 -2989
|
@@ -12758,7 +12758,7 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12758
12758
|
});
|
|
12759
12759
|
}
|
|
12760
12760
|
}, []);
|
|
12761
|
-
|
|
12761
|
+
async function checkAuth() {
|
|
12762
12762
|
const status = await window.api.getAuthStatus();
|
|
12763
12763
|
if (status.status !== "Verified") {
|
|
12764
12764
|
startAuth();
|
|
@@ -12766,8 +12766,8 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12766
12766
|
setStep(2);
|
|
12767
12767
|
fetchUserRepos();
|
|
12768
12768
|
}
|
|
12769
|
-
}
|
|
12770
|
-
|
|
12769
|
+
}
|
|
12770
|
+
async function startAuth() {
|
|
12771
12771
|
try {
|
|
12772
12772
|
const data = await window.api.startDeviceFlow();
|
|
12773
12773
|
setDeviceFlowData(data);
|
|
@@ -12780,7 +12780,7 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
|
|
|
12780
12780
|
} catch (e) {
|
|
12781
12781
|
setError(e.message);
|
|
12782
12782
|
}
|
|
12783
|
-
}
|
|
12783
|
+
}
|
|
12784
12784
|
const fetchUserRepos = async () => {
|
|
12785
12785
|
try {
|
|
12786
12786
|
const repos = await window.api.getUserRepositories();
|
|
@@ -13819,8 +13819,16 @@ const LiveGitHubSpace = React.memo(() => {
|
|
|
13819
13819
|
pollEvents();
|
|
13820
13820
|
const intervalId = setInterval(pollEvents, 6e4);
|
|
13821
13821
|
let lastSpawnTime = 0;
|
|
13822
|
+
let lastDrawTime = 0;
|
|
13823
|
+
const FPS = 30;
|
|
13824
|
+
const frameInterval = 1e3 / FPS;
|
|
13822
13825
|
const update = (time2) => {
|
|
13823
13826
|
if (!isRunning) return;
|
|
13827
|
+
if (time2 - lastDrawTime < frameInterval) {
|
|
13828
|
+
animationFrameId = requestAnimationFrame(update);
|
|
13829
|
+
return;
|
|
13830
|
+
}
|
|
13831
|
+
lastDrawTime = time2;
|
|
13824
13832
|
if (time2 - lastSpawnTime > 800 && (eventQueue.length > 0 || fallbackQueue.length > 0)) {
|
|
13825
13833
|
let ev;
|
|
13826
13834
|
if (eventQueue.length > 0) {
|
|
@@ -13846,8 +13854,7 @@ const LiveGitHubSpace = React.memo(() => {
|
|
|
13846
13854
|
});
|
|
13847
13855
|
lastSpawnTime = time2;
|
|
13848
13856
|
}
|
|
13849
|
-
ctx.
|
|
13850
|
-
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
13857
|
+
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
13851
13858
|
ctx.fillStyle = "white";
|
|
13852
13859
|
stars.forEach((s) => {
|
|
13853
13860
|
s.x -= s.speed;
|
|
@@ -14254,7 +14261,7 @@ const DiceGame = () => {
|
|
|
14254
14261
|
) })
|
|
14255
14262
|
] }) });
|
|
14256
14263
|
};
|
|
14257
|
-
const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
|
|
14264
|
+
const SpaceScene = ({ fullScreen, liteMode, onGameActiveChange }) => {
|
|
14258
14265
|
const [isOnline, setIsOnline] = reactExports.useState(navigator.onLine);
|
|
14259
14266
|
const [activeMode, setActiveMode] = reactExports.useState("none");
|
|
14260
14267
|
reactExports.useEffect(() => {
|
|
@@ -14290,10 +14297,12 @@ const SpaceScene = ({ fullScreen, onGameActiveChange }) => {
|
|
|
14290
14297
|
{
|
|
14291
14298
|
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
14299
|
children: [
|
|
14293
|
-
|
|
14294
|
-
|
|
14295
|
-
|
|
14296
|
-
|
|
14300
|
+
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: [
|
|
14301
|
+
currentMode === "retro" && /* @__PURE__ */ jsxRuntimeExports.jsx(RetroSpaceGame, {}),
|
|
14302
|
+
currentMode === "2048" && /* @__PURE__ */ jsxRuntimeExports.jsx(LogicGame2048, {}),
|
|
14303
|
+
currentMode === "dice" && /* @__PURE__ */ jsxRuntimeExports.jsx(DiceGame, {}),
|
|
14304
|
+
currentMode === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx(LiveGitHubSpace, {})
|
|
14305
|
+
] }),
|
|
14297
14306
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
14298
14307
|
"button",
|
|
14299
14308
|
{
|
|
@@ -23143,7 +23152,7 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23143
23152
|
reset();
|
|
23144
23153
|
}
|
|
23145
23154
|
}, [isOpen]);
|
|
23146
|
-
|
|
23155
|
+
function reset() {
|
|
23147
23156
|
setStep("START");
|
|
23148
23157
|
setFiles([]);
|
|
23149
23158
|
setAccounts([]);
|
|
@@ -23163,7 +23172,7 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23163
23172
|
setShowDiff(false);
|
|
23164
23173
|
setCommitMessage("");
|
|
23165
23174
|
setErrorMsg("");
|
|
23166
|
-
}
|
|
23175
|
+
}
|
|
23167
23176
|
const handleClose = async () => {
|
|
23168
23177
|
if (workspacePath) {
|
|
23169
23178
|
await window.api.cleanupUniversalWorkspace(workspacePath);
|
|
@@ -23898,22 +23907,27 @@ function UniversalPushWizard({ isOpen, onClose, onAutoHealTrigger }) {
|
|
|
23898
23907
|
function WelcomeWizard({ onComplete }) {
|
|
23899
23908
|
const [step, setStep] = reactExports.useState(1);
|
|
23900
23909
|
const [deviceFlowData, setDeviceFlowData] = reactExports.useState(null);
|
|
23901
|
-
const [authStatus, setAuthStatus] = reactExports.useState(
|
|
23910
|
+
const [authStatus, setAuthStatus] = reactExports.useState(
|
|
23911
|
+
"pending"
|
|
23912
|
+
);
|
|
23902
23913
|
const [pinInput, setPinInput] = reactExports.useState("");
|
|
23903
23914
|
const [isFinishing, setIsFinishing] = reactExports.useState(false);
|
|
23904
23915
|
const [authError, setAuthError] = reactExports.useState("");
|
|
23905
23916
|
const [isCopied, setIsCopied] = reactExports.useState(false);
|
|
23906
|
-
const copyCodeToClipboard = reactExports.useCallback(
|
|
23907
|
-
|
|
23908
|
-
|
|
23909
|
-
|
|
23910
|
-
|
|
23911
|
-
|
|
23912
|
-
|
|
23913
|
-
|
|
23914
|
-
|
|
23915
|
-
|
|
23916
|
-
|
|
23917
|
+
const copyCodeToClipboard = reactExports.useCallback(
|
|
23918
|
+
async (codeToCopy) => {
|
|
23919
|
+
const code = codeToCopy || deviceFlowData?.user_code;
|
|
23920
|
+
if (!code) return;
|
|
23921
|
+
try {
|
|
23922
|
+
await navigator.clipboard.writeText(code);
|
|
23923
|
+
setIsCopied(true);
|
|
23924
|
+
setTimeout(() => setIsCopied(false), 2500);
|
|
23925
|
+
} catch (err) {
|
|
23926
|
+
console.warn("Failed to copy to clipboard", err);
|
|
23927
|
+
}
|
|
23928
|
+
},
|
|
23929
|
+
[deviceFlowData]
|
|
23930
|
+
);
|
|
23917
23931
|
const startAuth = async () => {
|
|
23918
23932
|
try {
|
|
23919
23933
|
setAuthStatus("waiting");
|
|
@@ -25083,7 +25097,7 @@ const CommitReceiptPrinter = ({
|
|
|
25083
25097
|
commit,
|
|
25084
25098
|
onClose
|
|
25085
25099
|
}) => {
|
|
25086
|
-
const [isPrinted, setIsPrinted] = reactExports.useState(
|
|
25100
|
+
const [isPrinted, setIsPrinted] = reactExports.useState(false);
|
|
25087
25101
|
const [searchQuery, setSearchQuery] = reactExports.useState("");
|
|
25088
25102
|
const [scrollTop, setScrollTop] = reactExports.useState(0);
|
|
25089
25103
|
const scrollRef = reactExports.useRef(null);
|
|
@@ -25118,13 +25132,13 @@ const CommitReceiptPrinter = ({
|
|
|
25118
25132
|
onClose && /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "printer-close-btn", onClick: onClose, title: "Close Printer", children: "✕" }),
|
|
25119
25133
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "printer-machine-head", children: [
|
|
25120
25134
|
/* @__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` }) }),
|
|
25135
|
+
/* @__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
25136
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25123
25137
|
"button",
|
|
25124
25138
|
{
|
|
25125
25139
|
className: "print-button",
|
|
25126
25140
|
onClick: () => setIsPrinted(!isPrinted),
|
|
25127
|
-
title: isPrinted ? "
|
|
25141
|
+
title: isPrinted ? "Roll Up Receipt" : "Print Receipt",
|
|
25128
25142
|
children: "🖨"
|
|
25129
25143
|
}
|
|
25130
25144
|
)
|
|
@@ -25149,6 +25163,16 @@ const CommitReceiptPrinter = ({
|
|
|
25149
25163
|
] }),
|
|
25150
25164
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: new Date(commit.date).toLocaleString() })
|
|
25151
25165
|
] }),
|
|
25166
|
+
/* @__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: [
|
|
25167
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
25168
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-semibold", children: "Security:" }),
|
|
25169
|
+
" Verified Commit ✓"
|
|
25170
|
+
] }),
|
|
25171
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
25172
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-semibold", children: "Protocol:" }),
|
|
25173
|
+
" HTTPS (GitHub Models AI)"
|
|
25174
|
+
] })
|
|
25175
|
+
] }),
|
|
25152
25176
|
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "receipt-search-bar", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
25153
25177
|
"input",
|
|
25154
25178
|
{
|
|
@@ -25171,7 +25195,7 @@ const CommitReceiptPrinter = ({
|
|
|
25171
25195
|
className: "receipt-table-scroll custom-scrollbar",
|
|
25172
25196
|
onScroll: handleScroll,
|
|
25173
25197
|
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(
|
|
25198
|
+
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
25199
|
"div",
|
|
25176
25200
|
{
|
|
25177
25201
|
style: { height: `${totalVirtualHeight}px`, position: "relative", width: "100%" },
|
|
@@ -25849,6 +25873,20 @@ function App() {
|
|
|
25849
25873
|
const [isResizing, setIsResizing] = reactExports.useState(false);
|
|
25850
25874
|
const { t, lang, setLang } = useTranslation();
|
|
25851
25875
|
const [appVersion, setAppVersion] = reactExports.useState("");
|
|
25876
|
+
const [liteMode, setLiteMode] = reactExports.useState(() => {
|
|
25877
|
+
const cores = navigator.hardwareConcurrency || 4;
|
|
25878
|
+
const memory = navigator.deviceMemory || 4;
|
|
25879
|
+
return cores < 6 || memory < 8;
|
|
25880
|
+
});
|
|
25881
|
+
reactExports.useEffect(() => {
|
|
25882
|
+
const handleKeyDown = (e) => {
|
|
25883
|
+
if (e.ctrlKey && e.key === "Delete") {
|
|
25884
|
+
setLiteMode((prev) => !prev);
|
|
25885
|
+
}
|
|
25886
|
+
};
|
|
25887
|
+
window.addEventListener("keydown", handleKeyDown);
|
|
25888
|
+
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
25889
|
+
}, []);
|
|
25852
25890
|
reactExports.useEffect(() => {
|
|
25853
25891
|
const initVersion = async () => {
|
|
25854
25892
|
try {
|
|
@@ -25961,6 +25999,11 @@ function App() {
|
|
|
25961
25999
|
const [pushFailureData, setPushFailureData] = reactExports.useState(null);
|
|
25962
26000
|
const [gitErrorData, setGitErrorData] = reactExports.useState(null);
|
|
25963
26001
|
const [showSettings, setShowSettings] = reactExports.useState(false);
|
|
26002
|
+
const [showPrivacyModal, setShowPrivacyModal] = reactExports.useState(false);
|
|
26003
|
+
const [showForcePushModal, setShowForcePushModal] = reactExports.useState(false);
|
|
26004
|
+
const [isExecutingForcePush, setIsExecutingForcePush] = reactExports.useState(false);
|
|
26005
|
+
const [isClearingCache, setIsClearingCache] = reactExports.useState(false);
|
|
26006
|
+
const [settingsTab, setSettingsTab] = reactExports.useState("appearance");
|
|
25964
26007
|
const [draftTheme, setDraftTheme] = reactExports.useState("github-dark");
|
|
25965
26008
|
const [draftLang, setDraftLang] = reactExports.useState("en");
|
|
25966
26009
|
const [draftDailyAuth, setDraftDailyAuth] = reactExports.useState(true);
|
|
@@ -26134,8 +26177,10 @@ function App() {
|
|
|
26134
26177
|
});
|
|
26135
26178
|
}, 3e4);
|
|
26136
26179
|
} else {
|
|
26137
|
-
|
|
26138
|
-
|
|
26180
|
+
Promise.resolve().then(() => {
|
|
26181
|
+
setCollaboratedRepos([]);
|
|
26182
|
+
setInvitations([]);
|
|
26183
|
+
});
|
|
26139
26184
|
}
|
|
26140
26185
|
return () => {
|
|
26141
26186
|
if (invInterval) clearInterval(invInterval);
|
|
@@ -26199,7 +26244,9 @@ function App() {
|
|
|
26199
26244
|
};
|
|
26200
26245
|
window.addEventListener("online", handleOnline);
|
|
26201
26246
|
if (navigator.onLine) {
|
|
26202
|
-
|
|
26247
|
+
Promise.resolve().then(() => {
|
|
26248
|
+
processOfflineQueue();
|
|
26249
|
+
});
|
|
26203
26250
|
}
|
|
26204
26251
|
return () => window.removeEventListener("online", handleOnline);
|
|
26205
26252
|
}, [repoPath]);
|
|
@@ -26486,7 +26533,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26486
26533
|
}
|
|
26487
26534
|
}
|
|
26488
26535
|
};
|
|
26489
|
-
|
|
26536
|
+
async function refreshRepoState() {
|
|
26490
26537
|
if (refreshLockRef.current) return;
|
|
26491
26538
|
refreshLockRef.current = true;
|
|
26492
26539
|
setIsRefreshing(true);
|
|
@@ -26500,7 +26547,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26500
26547
|
try {
|
|
26501
26548
|
const dh = await window.api.getDeletedHistory();
|
|
26502
26549
|
setDeletedHistory(dh);
|
|
26503
|
-
} catch
|
|
26550
|
+
} catch {
|
|
26504
26551
|
}
|
|
26505
26552
|
const auth = await window.api.getAuthStatus();
|
|
26506
26553
|
setAuthStatus(auth);
|
|
@@ -26524,7 +26571,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26524
26571
|
urlObj.password = "";
|
|
26525
26572
|
fetchUrl = urlObj.toString();
|
|
26526
26573
|
}
|
|
26527
|
-
} catch
|
|
26574
|
+
} catch {
|
|
26528
26575
|
}
|
|
26529
26576
|
if (fetchUrl.endsWith(".git")) {
|
|
26530
26577
|
fetchUrl = fetchUrl.replace(/\.git$/, "");
|
|
@@ -26556,7 +26603,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26556
26603
|
}
|
|
26557
26604
|
}
|
|
26558
26605
|
}
|
|
26559
|
-
} catch
|
|
26606
|
+
} catch {
|
|
26560
26607
|
setBranches({ current: "No commits yet", all: [] });
|
|
26561
26608
|
}
|
|
26562
26609
|
})();
|
|
@@ -26604,14 +26651,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26604
26651
|
if (!exists) {
|
|
26605
26652
|
console.warn("Repository path does not exist on disk:", repoPath);
|
|
26606
26653
|
}
|
|
26607
|
-
} catch
|
|
26654
|
+
} catch {
|
|
26608
26655
|
}
|
|
26609
26656
|
}
|
|
26610
26657
|
} finally {
|
|
26611
26658
|
setIsRefreshing(false);
|
|
26612
26659
|
refreshLockRef.current = false;
|
|
26613
26660
|
}
|
|
26614
|
-
}
|
|
26661
|
+
}
|
|
26615
26662
|
const handleCreateBranchSubmit = async (name, base) => {
|
|
26616
26663
|
try {
|
|
26617
26664
|
await window.api.createBranch(name, base);
|
|
@@ -26641,7 +26688,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26641
26688
|
setShowAuthModal(true);
|
|
26642
26689
|
try {
|
|
26643
26690
|
await navigator.clipboard.writeText(data.user_code);
|
|
26644
|
-
} catch
|
|
26691
|
+
} catch {
|
|
26645
26692
|
}
|
|
26646
26693
|
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
26647
26694
|
setShowAuthModal(false);
|
|
@@ -26703,6 +26750,59 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26703
26750
|
setIsPulling(false);
|
|
26704
26751
|
}
|
|
26705
26752
|
};
|
|
26753
|
+
const formatErrorMessage = (msg) => {
|
|
26754
|
+
if (!msg) return "";
|
|
26755
|
+
return msg.replace(/^Error invoking remote method '[^']+':\s*/i, "").replace(/^Error:\s*/i, "").replace(/^error:\s*/i, "").trim();
|
|
26756
|
+
};
|
|
26757
|
+
const handleResolveConflictOurs = async () => {
|
|
26758
|
+
try {
|
|
26759
|
+
showToast("Resolving conflicts: keeping local changes...", "info");
|
|
26760
|
+
await window.api.executeRawGit(["checkout", "--ours", "."]);
|
|
26761
|
+
await window.api.executeRawGit(["add", "."]);
|
|
26762
|
+
await window.api.executeRawGit(["commit", "-m", "Resolved conflicts (kept local changes)"]);
|
|
26763
|
+
setPushFailureData(null);
|
|
26764
|
+
await refreshRepoState();
|
|
26765
|
+
showToast("✅ Conflicts resolved (kept local changes)", "success");
|
|
26766
|
+
} catch (err) {
|
|
26767
|
+
showToast(`Failed to resolve conflicts: ${err.message}`, "error");
|
|
26768
|
+
}
|
|
26769
|
+
};
|
|
26770
|
+
const handleResolveConflictTheirs = async () => {
|
|
26771
|
+
try {
|
|
26772
|
+
showToast("Resolving conflicts: accepting remote changes...", "info");
|
|
26773
|
+
await window.api.executeRawGit(["checkout", "--theirs", "."]);
|
|
26774
|
+
await window.api.executeRawGit(["add", "."]);
|
|
26775
|
+
await window.api.executeRawGit([
|
|
26776
|
+
"commit",
|
|
26777
|
+
"-m",
|
|
26778
|
+
"Resolved conflicts (accepted remote changes)"
|
|
26779
|
+
]);
|
|
26780
|
+
setPushFailureData(null);
|
|
26781
|
+
await refreshRepoState();
|
|
26782
|
+
showToast("✅ Conflicts resolved (accepted remote changes)", "success");
|
|
26783
|
+
} catch (err) {
|
|
26784
|
+
showToast(`Failed to resolve conflicts: ${err.message}`, "error");
|
|
26785
|
+
}
|
|
26786
|
+
};
|
|
26787
|
+
const handleAbortMerge = async () => {
|
|
26788
|
+
try {
|
|
26789
|
+
showToast("Aborting merge...", "info");
|
|
26790
|
+
try {
|
|
26791
|
+
await window.api.executeRawGit(["merge", "--abort"]);
|
|
26792
|
+
} catch {
|
|
26793
|
+
try {
|
|
26794
|
+
await window.api.executeRawGit(["rebase", "--abort"]);
|
|
26795
|
+
} catch {
|
|
26796
|
+
await window.api.executeRawGit(["reset", "--merge"]);
|
|
26797
|
+
}
|
|
26798
|
+
}
|
|
26799
|
+
setPushFailureData(null);
|
|
26800
|
+
await refreshRepoState();
|
|
26801
|
+
showToast("✅ Merge aborted. Repository restored to clean state.", "success");
|
|
26802
|
+
} catch (err) {
|
|
26803
|
+
showToast(`Failed to abort merge: ${err.message}`, "error");
|
|
26804
|
+
}
|
|
26805
|
+
};
|
|
26706
26806
|
const handleSyncCollabRepo = async (repo, savedPath) => {
|
|
26707
26807
|
try {
|
|
26708
26808
|
showToast(`Syncing ${repo.name} with GitHub...`, "info");
|
|
@@ -26768,6 +26868,35 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26768
26868
|
}, 1500);
|
|
26769
26869
|
break;
|
|
26770
26870
|
}
|
|
26871
|
+
const isConflictErr = currentError.includes("unmerged files") || currentError.includes("unresolved conflict") || currentError.includes("automatic merge failed") || currentError.includes("you have unmerged paths");
|
|
26872
|
+
if (isConflictErr) {
|
|
26873
|
+
setHealerMessage(
|
|
26874
|
+
"Unmerged conflict detected. Automatically resolving conflicted files..."
|
|
26875
|
+
);
|
|
26876
|
+
try {
|
|
26877
|
+
await window.api.executeRawGit(["checkout", "--ours", "."]);
|
|
26878
|
+
await window.api.executeRawGit(["add", "."]);
|
|
26879
|
+
await window.api.executeRawGit([
|
|
26880
|
+
"commit",
|
|
26881
|
+
"-m",
|
|
26882
|
+
"Auto-resolved conflicts: kept local changes"
|
|
26883
|
+
]);
|
|
26884
|
+
} catch {
|
|
26885
|
+
try {
|
|
26886
|
+
await window.api.executeRawGit(["merge", "--abort"]);
|
|
26887
|
+
} catch {
|
|
26888
|
+
}
|
|
26889
|
+
}
|
|
26890
|
+
await refreshRepoState();
|
|
26891
|
+
showToast("Merge conflicts resolved successfully!", "success");
|
|
26892
|
+
setTimeout(() => {
|
|
26893
|
+
setShowHealerOverlay(false);
|
|
26894
|
+
if (overrideRepoPath && repoPath) {
|
|
26895
|
+
window.api.setRepoPath(repoPath);
|
|
26896
|
+
}
|
|
26897
|
+
}, 1500);
|
|
26898
|
+
return true;
|
|
26899
|
+
}
|
|
26771
26900
|
const currentStatus = await window.api.getStatus();
|
|
26772
26901
|
const result = await window.api.askAi(
|
|
26773
26902
|
"gemini",
|
|
@@ -26801,14 +26930,18 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26801
26930
|
setShowHealerOverlay(false);
|
|
26802
26931
|
await refreshRepoState();
|
|
26803
26932
|
} else {
|
|
26804
|
-
|
|
26933
|
+
const wasConflict = currentError.includes("unmerged files") || currentError.includes("unresolved conflict") || currentError.includes("automatic merge failed") || currentError.includes("you have unmerged paths");
|
|
26934
|
+
if (!wasConflict) {
|
|
26935
|
+
await window.api.pullFromRemote(remotes[0].name, overrideBranch || branches.current);
|
|
26936
|
+
}
|
|
26805
26937
|
}
|
|
26806
|
-
setHealerMessage(`Successfully auto-healed and
|
|
26938
|
+
setHealerMessage(`Successfully auto-healed and reconciled!`);
|
|
26807
26939
|
setTimeout(() => {
|
|
26808
26940
|
setShowHealerOverlay(false);
|
|
26809
26941
|
if (overrideRepoPath && repoPath) {
|
|
26810
26942
|
window.api.setRepoPath(repoPath);
|
|
26811
26943
|
}
|
|
26944
|
+
refreshRepoState();
|
|
26812
26945
|
}, 2e3);
|
|
26813
26946
|
return;
|
|
26814
26947
|
} else {
|
|
@@ -26863,7 +26996,12 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26863
26996
|
repository: repoPath?.split("\\").pop() || "",
|
|
26864
26997
|
branch: branches.current,
|
|
26865
26998
|
files: status.staged.length,
|
|
26866
|
-
commitMessage
|
|
26999
|
+
commitMessage,
|
|
27000
|
+
timestamp: (/* @__PURE__ */ new Date()).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }),
|
|
27001
|
+
author: authStatus.username ? `@${authStatus.username}` : "Git Author",
|
|
27002
|
+
authMethod: authStatus.authMethod || "GitHub OAuth",
|
|
27003
|
+
aiProvider: authStatus.aiProvider || "GitHub Models",
|
|
27004
|
+
securityStatus: authStatus.securityStatus || "End-to-End Encrypted"
|
|
26867
27005
|
});
|
|
26868
27006
|
setCommitMessage("");
|
|
26869
27007
|
setShowConfirmPush(false);
|
|
@@ -26896,7 +27034,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26896
27034
|
setShowAuthModal(true);
|
|
26897
27035
|
try {
|
|
26898
27036
|
await navigator.clipboard.writeText(data.user_code);
|
|
26899
|
-
} catch
|
|
27037
|
+
} catch {
|
|
26900
27038
|
}
|
|
26901
27039
|
await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
|
|
26902
27040
|
setShowAuthModal(false);
|
|
@@ -26919,7 +27057,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26919
27057
|
try {
|
|
26920
27058
|
name = await window.api.getGitConfig("user.name");
|
|
26921
27059
|
email = await window.api.getGitConfig("user.email");
|
|
26922
|
-
} catch
|
|
27060
|
+
} catch {
|
|
26923
27061
|
}
|
|
26924
27062
|
if ((!name || !email) && accounts.length > 0) {
|
|
26925
27063
|
const activeAcc = accounts.find((a) => a.id === activeAccountId) || accounts[0];
|
|
@@ -26947,13 +27085,34 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
26947
27085
|
document.documentElement.setAttribute("data-theme", theme);
|
|
26948
27086
|
setShowSettings(false);
|
|
26949
27087
|
};
|
|
27088
|
+
const handleExecuteForcePush = async () => {
|
|
27089
|
+
setIsExecutingForcePush(true);
|
|
27090
|
+
try {
|
|
27091
|
+
const remotes = await window.api.getRemotes();
|
|
27092
|
+
if (!remotes || remotes.length === 0) {
|
|
27093
|
+
showToast("No remote configured to push to.", "error");
|
|
27094
|
+
return;
|
|
27095
|
+
}
|
|
27096
|
+
const remoteName = remotes[0].name;
|
|
27097
|
+
const branchName = status?.current || "main";
|
|
27098
|
+
showToast(`Executing Master Force Push to ${remoteName}/${branchName}...`, "info");
|
|
27099
|
+
await window.api.masterPush(remoteName, branchName);
|
|
27100
|
+
showToast("Master Force Push successful!", "success");
|
|
27101
|
+
await refreshRepoState();
|
|
27102
|
+
setShowForcePushModal(false);
|
|
27103
|
+
} catch (err) {
|
|
27104
|
+
showToast("Force Push failed: " + (err.message || "Unknown error"), "error");
|
|
27105
|
+
} finally {
|
|
27106
|
+
setIsExecutingForcePush(false);
|
|
27107
|
+
}
|
|
27108
|
+
};
|
|
26950
27109
|
const viewDiff = async (file, staged) => {
|
|
26951
27110
|
setDiffFile(file);
|
|
26952
27111
|
try {
|
|
26953
27112
|
const diffStr = await window.api.getFileDiff(file, staged);
|
|
26954
27113
|
setDiffContent(diffStr || "No changes to display.");
|
|
26955
27114
|
setShowDiff(true);
|
|
26956
|
-
} catch
|
|
27115
|
+
} catch {
|
|
26957
27116
|
showToast("Failed to get diff", "error");
|
|
26958
27117
|
}
|
|
26959
27118
|
};
|
|
@@ -27061,8 +27220,9 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27061
27220
|
onDragLeave: handleDragLeave,
|
|
27062
27221
|
onDrop: handleDrop,
|
|
27063
27222
|
children: [
|
|
27064
|
-
|
|
27065
|
-
(showSettings ? draftTheme : theme) === "
|
|
27223
|
+
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" }),
|
|
27224
|
+
!liteMode && (showSettings ? draftTheme : theme) === "among-us-live" && /* @__PURE__ */ jsxRuntimeExports.jsx(AmongUsBackground, {}),
|
|
27225
|
+
!liteMode && (showSettings ? draftTheme : theme) === "space-explorer-3d" && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceExplorerBackground, {}),
|
|
27066
27226
|
showWelcomeWizard && /* @__PURE__ */ jsxRuntimeExports.jsx(WelcomeWizard, { onComplete: () => setShowWelcomeWizard(false) }),
|
|
27067
27227
|
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: [
|
|
27068
27228
|
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold text-danger mb-4", children: "Git Error" }),
|
|
@@ -27125,7 +27285,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27125
27285
|
] })
|
|
27126
27286
|
] }) }),
|
|
27127
27287
|
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: [
|
|
27128
|
-
enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27288
|
+
!liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27289
|
+
SpaceScene,
|
|
27290
|
+
{
|
|
27291
|
+
fullScreen: true,
|
|
27292
|
+
liteMode,
|
|
27293
|
+
onGameActiveChange: setIsGameActive
|
|
27294
|
+
}
|
|
27295
|
+
),
|
|
27129
27296
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27130
27297
|
"div",
|
|
27131
27298
|
{
|
|
@@ -27207,214 +27374,412 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27207
27374
|
] }),
|
|
27208
27375
|
/* @__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" }),
|
|
27209
27376
|
/* @__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" }),
|
|
27210
|
-
showSettings && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/
|
|
27377
|
+
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: [
|
|
27211
27378
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27212
27379
|
"div",
|
|
27213
27380
|
{
|
|
27214
|
-
className: "px-8 py-
|
|
27381
|
+
className: "px-8 py-5 border-b border-border shrink-0 flex items-center justify-between",
|
|
27215
27382
|
style: { backgroundColor: "var(--color-surface)" },
|
|
27216
27383
|
children: [
|
|
27384
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
27385
|
+
/* @__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: [
|
|
27386
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27387
|
+
"path",
|
|
27388
|
+
{
|
|
27389
|
+
strokeLinecap: "round",
|
|
27390
|
+
strokeLinejoin: "round",
|
|
27391
|
+
strokeWidth: 2,
|
|
27392
|
+
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"
|
|
27393
|
+
}
|
|
27394
|
+
),
|
|
27395
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27396
|
+
"path",
|
|
27397
|
+
{
|
|
27398
|
+
strokeLinecap: "round",
|
|
27399
|
+
strokeLinejoin: "round",
|
|
27400
|
+
strokeWidth: 2,
|
|
27401
|
+
d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
|
|
27402
|
+
}
|
|
27403
|
+
)
|
|
27404
|
+
] }) }),
|
|
27405
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27406
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-bold text-primary leading-tight", children: "Preferences & Settings" }),
|
|
27407
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Configure client environment, authentication tokens, and disk storage" })
|
|
27408
|
+
] })
|
|
27409
|
+
] }),
|
|
27410
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27411
|
+
"button",
|
|
27412
|
+
{
|
|
27413
|
+
type: "button",
|
|
27414
|
+
onClick: () => cancelSettings(),
|
|
27415
|
+
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",
|
|
27416
|
+
title: "Close Preferences",
|
|
27417
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27418
|
+
"path",
|
|
27419
|
+
{
|
|
27420
|
+
strokeLinecap: "round",
|
|
27421
|
+
strokeLinejoin: "round",
|
|
27422
|
+
strokeWidth: 2,
|
|
27423
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
27424
|
+
}
|
|
27425
|
+
) })
|
|
27426
|
+
}
|
|
27427
|
+
)
|
|
27428
|
+
]
|
|
27429
|
+
}
|
|
27430
|
+
),
|
|
27431
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-1 min-h-0 overflow-hidden", children: [
|
|
27432
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "w-64 border-r border-border shrink-0 bg-canvas/20 p-4 flex flex-col justify-between", children: [
|
|
27433
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("nav", { className: "space-y-2", children: [
|
|
27217
27434
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27218
|
-
"
|
|
27435
|
+
"button",
|
|
27219
27436
|
{
|
|
27220
|
-
|
|
27221
|
-
|
|
27222
|
-
|
|
27223
|
-
viewBox: "0 0 24 24",
|
|
27437
|
+
type: "button",
|
|
27438
|
+
onClick: () => setSettingsTab("appearance"),
|
|
27439
|
+
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"}`,
|
|
27224
27440
|
children: [
|
|
27225
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27226
|
-
"
|
|
27441
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27442
|
+
"svg",
|
|
27227
27443
|
{
|
|
27228
|
-
|
|
27229
|
-
|
|
27230
|
-
|
|
27231
|
-
|
|
27444
|
+
className: "w-4 h-4 shrink-0",
|
|
27445
|
+
fill: "none",
|
|
27446
|
+
stroke: "currentColor",
|
|
27447
|
+
viewBox: "0 0 24 24",
|
|
27448
|
+
children: [
|
|
27449
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27450
|
+
"path",
|
|
27451
|
+
{
|
|
27452
|
+
strokeLinecap: "round",
|
|
27453
|
+
strokeLinejoin: "round",
|
|
27454
|
+
strokeWidth: 2,
|
|
27455
|
+
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"
|
|
27456
|
+
}
|
|
27457
|
+
),
|
|
27458
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27459
|
+
"path",
|
|
27460
|
+
{
|
|
27461
|
+
strokeLinecap: "round",
|
|
27462
|
+
strokeLinejoin: "round",
|
|
27463
|
+
strokeWidth: 2,
|
|
27464
|
+
d: "M12 3v11"
|
|
27465
|
+
}
|
|
27466
|
+
)
|
|
27467
|
+
]
|
|
27232
27468
|
}
|
|
27233
27469
|
),
|
|
27470
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27471
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Appearance" }),
|
|
27472
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27473
|
+
"div",
|
|
27474
|
+
{
|
|
27475
|
+
className: `text-[10px] font-normal ${settingsTab === "appearance" ? "text-white/80" : "text-secondary/70"}`,
|
|
27476
|
+
children: "Theme, UI, Language"
|
|
27477
|
+
}
|
|
27478
|
+
)
|
|
27479
|
+
] })
|
|
27480
|
+
]
|
|
27481
|
+
}
|
|
27482
|
+
),
|
|
27483
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27484
|
+
"button",
|
|
27485
|
+
{
|
|
27486
|
+
type: "button",
|
|
27487
|
+
onClick: () => setSettingsTab("accounts"),
|
|
27488
|
+
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"}`,
|
|
27489
|
+
children: [
|
|
27234
27490
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27235
|
-
"
|
|
27491
|
+
"svg",
|
|
27236
27492
|
{
|
|
27237
|
-
|
|
27238
|
-
|
|
27239
|
-
|
|
27240
|
-
|
|
27493
|
+
className: "w-4 h-4 shrink-0",
|
|
27494
|
+
fill: "none",
|
|
27495
|
+
stroke: "currentColor",
|
|
27496
|
+
viewBox: "0 0 24 24",
|
|
27497
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27498
|
+
"path",
|
|
27499
|
+
{
|
|
27500
|
+
strokeLinecap: "round",
|
|
27501
|
+
strokeLinejoin: "round",
|
|
27502
|
+
strokeWidth: 2,
|
|
27503
|
+
d: "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"
|
|
27504
|
+
}
|
|
27505
|
+
)
|
|
27241
27506
|
}
|
|
27242
|
-
)
|
|
27507
|
+
),
|
|
27508
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27509
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Accounts & Git" }),
|
|
27510
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27511
|
+
"div",
|
|
27512
|
+
{
|
|
27513
|
+
className: `text-[10px] font-normal ${settingsTab === "accounts" ? "text-white/80" : "text-secondary/70"}`,
|
|
27514
|
+
children: "GitHub profile & author"
|
|
27515
|
+
}
|
|
27516
|
+
)
|
|
27517
|
+
] })
|
|
27243
27518
|
]
|
|
27244
27519
|
}
|
|
27245
27520
|
),
|
|
27246
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27247
|
-
|
|
27248
|
-
|
|
27249
|
-
|
|
27250
|
-
|
|
27251
|
-
|
|
27252
|
-
|
|
27253
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
|
|
27254
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
|
|
27255
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🎨" }),
|
|
27256
|
-
" Preferences"
|
|
27257
|
-
] }),
|
|
27258
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
|
|
27259
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27260
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("language") }),
|
|
27521
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27522
|
+
"button",
|
|
27523
|
+
{
|
|
27524
|
+
type: "button",
|
|
27525
|
+
onClick: () => setSettingsTab("security"),
|
|
27526
|
+
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"}`,
|
|
27527
|
+
children: [
|
|
27261
27528
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27262
|
-
|
|
27529
|
+
"svg",
|
|
27263
27530
|
{
|
|
27264
|
-
|
|
27265
|
-
|
|
27266
|
-
|
|
27267
|
-
|
|
27531
|
+
className: "w-4 h-4 shrink-0",
|
|
27532
|
+
fill: "none",
|
|
27533
|
+
stroke: "currentColor",
|
|
27534
|
+
viewBox: "0 0 24 24",
|
|
27535
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27536
|
+
"path",
|
|
27537
|
+
{
|
|
27538
|
+
strokeLinecap: "round",
|
|
27539
|
+
strokeLinejoin: "round",
|
|
27540
|
+
strokeWidth: 2,
|
|
27541
|
+
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"
|
|
27542
|
+
}
|
|
27543
|
+
)
|
|
27268
27544
|
}
|
|
27269
|
-
)
|
|
27270
|
-
|
|
27271
|
-
|
|
27272
|
-
|
|
27545
|
+
),
|
|
27546
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27547
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Security & Privacy" }),
|
|
27548
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27549
|
+
"div",
|
|
27550
|
+
{
|
|
27551
|
+
className: `text-[10px] font-normal ${settingsTab === "security" ? "text-white/80" : "text-secondary/70"}`,
|
|
27552
|
+
children: "PIN, 2FA, zero telemetry"
|
|
27553
|
+
}
|
|
27554
|
+
)
|
|
27555
|
+
] })
|
|
27556
|
+
]
|
|
27557
|
+
}
|
|
27558
|
+
),
|
|
27559
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27560
|
+
"button",
|
|
27561
|
+
{
|
|
27562
|
+
type: "button",
|
|
27563
|
+
onClick: () => setSettingsTab("maintenance"),
|
|
27564
|
+
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"}`,
|
|
27565
|
+
children: [
|
|
27273
27566
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27274
|
-
|
|
27567
|
+
"svg",
|
|
27275
27568
|
{
|
|
27276
|
-
|
|
27277
|
-
|
|
27278
|
-
|
|
27279
|
-
|
|
27280
|
-
|
|
27281
|
-
|
|
27282
|
-
|
|
27569
|
+
className: "w-4 h-4 shrink-0",
|
|
27570
|
+
fill: "none",
|
|
27571
|
+
stroke: "currentColor",
|
|
27572
|
+
viewBox: "0 0 24 24",
|
|
27573
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27574
|
+
"path",
|
|
27575
|
+
{
|
|
27576
|
+
strokeLinecap: "round",
|
|
27577
|
+
strokeLinejoin: "round",
|
|
27578
|
+
strokeWidth: 2,
|
|
27579
|
+
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"
|
|
27580
|
+
}
|
|
27581
|
+
)
|
|
27283
27582
|
}
|
|
27284
|
-
)
|
|
27583
|
+
),
|
|
27584
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27585
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Maintenance" }),
|
|
27586
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27587
|
+
"div",
|
|
27588
|
+
{
|
|
27589
|
+
className: `text-[10px] font-normal ${settingsTab === "maintenance" ? "text-white/80" : "text-secondary/70"}`,
|
|
27590
|
+
children: "Disk cache & Git locks"
|
|
27591
|
+
}
|
|
27592
|
+
)
|
|
27593
|
+
] })
|
|
27594
|
+
]
|
|
27595
|
+
}
|
|
27596
|
+
),
|
|
27597
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27598
|
+
"button",
|
|
27599
|
+
{
|
|
27600
|
+
type: "button",
|
|
27601
|
+
onClick: () => setSettingsTab("developer"),
|
|
27602
|
+
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"}`,
|
|
27603
|
+
children: [
|
|
27604
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27605
|
+
"svg",
|
|
27606
|
+
{
|
|
27607
|
+
className: "w-4 h-4 shrink-0",
|
|
27608
|
+
fill: "none",
|
|
27609
|
+
stroke: "currentColor",
|
|
27610
|
+
viewBox: "0 0 24 24",
|
|
27611
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27612
|
+
"path",
|
|
27613
|
+
{
|
|
27614
|
+
strokeLinecap: "round",
|
|
27615
|
+
strokeLinejoin: "round",
|
|
27616
|
+
strokeWidth: 2,
|
|
27617
|
+
d: "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4"
|
|
27618
|
+
}
|
|
27619
|
+
)
|
|
27620
|
+
}
|
|
27621
|
+
),
|
|
27622
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
|
|
27623
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Tools & Advanced" }),
|
|
27624
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27625
|
+
"div",
|
|
27626
|
+
{
|
|
27627
|
+
className: `text-[10px] font-normal ${settingsTab === "developer" ? "text-white/80" : "text-secondary/70"}`,
|
|
27628
|
+
children: "Overrides & Maintenance"
|
|
27629
|
+
}
|
|
27630
|
+
)
|
|
27631
|
+
] })
|
|
27632
|
+
]
|
|
27633
|
+
}
|
|
27634
|
+
)
|
|
27635
|
+
] }),
|
|
27636
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-3.5 bg-surface/60 border border-border/80 rounded-xl", children: [
|
|
27637
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [
|
|
27638
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-2 h-2 rounded-full bg-success animate-pulse" }),
|
|
27639
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-bold text-primary", children: "GitQuickPush Client" })
|
|
27640
|
+
] }),
|
|
27641
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-[10px] text-secondary", children: "Local-First Engine • Production" })
|
|
27642
|
+
] })
|
|
27643
|
+
] }),
|
|
27644
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 p-8 md:p-10 overflow-y-auto custom-scrollbar bg-surface/30", children: [
|
|
27645
|
+
settingsTab === "appearance" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27646
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27647
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Appearance & Environment" }),
|
|
27648
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Personalize your workspace palette, typography localization, and GPU rendering features." })
|
|
27649
|
+
] }),
|
|
27650
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-4", children: [
|
|
27651
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27652
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27653
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("theme") }),
|
|
27654
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Select your primary color scheme and interface styling" })
|
|
27655
|
+
] }),
|
|
27656
|
+
/* @__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 })
|
|
27657
|
+
] }),
|
|
27658
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27659
|
+
CustomDropdown,
|
|
27660
|
+
{
|
|
27661
|
+
options: THEMES.map((themeItem) => ({
|
|
27662
|
+
value: themeItem.id,
|
|
27663
|
+
label: themeItem.name
|
|
27664
|
+
})),
|
|
27665
|
+
value: draftTheme,
|
|
27666
|
+
onChange: (val) => {
|
|
27667
|
+
setDraftTheme(val);
|
|
27668
|
+
document.documentElement.setAttribute("data-theme", val);
|
|
27669
|
+
},
|
|
27670
|
+
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"
|
|
27671
|
+
}
|
|
27672
|
+
)
|
|
27673
|
+
] }),
|
|
27674
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-4", children: [
|
|
27675
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27676
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27677
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("language") }),
|
|
27678
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Interface language and localized notification text" })
|
|
27679
|
+
] }),
|
|
27680
|
+
/* @__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() })
|
|
27681
|
+
] }),
|
|
27682
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27683
|
+
CustomDropdown,
|
|
27684
|
+
{
|
|
27685
|
+
options: LANGUAGES.map((langItem) => ({
|
|
27686
|
+
value: langItem.id,
|
|
27687
|
+
label: langItem.name
|
|
27688
|
+
})),
|
|
27689
|
+
value: draftLang,
|
|
27690
|
+
onChange: (val) => setDraftLang(val),
|
|
27691
|
+
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"
|
|
27692
|
+
}
|
|
27693
|
+
)
|
|
27694
|
+
] }),
|
|
27695
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-6", children: [
|
|
27696
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-6", children: [
|
|
27697
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27698
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: "Lite Performance Mode" }),
|
|
27699
|
+
/* @__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." })
|
|
27700
|
+
] }),
|
|
27701
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27702
|
+
"button",
|
|
27703
|
+
{
|
|
27704
|
+
type: "button",
|
|
27705
|
+
onClick: () => setLiteMode(!liteMode),
|
|
27706
|
+
className: `relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors ${liteMode ? "bg-brand" : "bg-canvas border border-border"}`,
|
|
27707
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27708
|
+
"span",
|
|
27709
|
+
{
|
|
27710
|
+
className: `inline-block h-4 w-4 transform rounded-full transition-transform ${liteMode ? "translate-x-6 bg-white" : "translate-x-1 bg-secondary"}`
|
|
27711
|
+
}
|
|
27712
|
+
)
|
|
27713
|
+
}
|
|
27714
|
+
)
|
|
27715
|
+
] }),
|
|
27716
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50" }),
|
|
27717
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between gap-6", children: [
|
|
27718
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27719
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("enableSpaceScene") }),
|
|
27720
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed max-w-xl", children: t("spaceSceneDesc") })
|
|
27721
|
+
] }),
|
|
27722
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27723
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27724
|
+
"input",
|
|
27725
|
+
{
|
|
27726
|
+
className: "toggle",
|
|
27727
|
+
type: "checkbox",
|
|
27728
|
+
checked: draftLockscreenSpace,
|
|
27729
|
+
onChange: (e) => setDraftLockscreenSpace(e.target.checked)
|
|
27730
|
+
}
|
|
27731
|
+
),
|
|
27732
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27733
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27285
27734
|
] })
|
|
27286
27735
|
] })
|
|
27736
|
+
] })
|
|
27737
|
+
] }),
|
|
27738
|
+
settingsTab === "accounts" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27739
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27740
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Accounts & Git Identity" }),
|
|
27741
|
+
/* @__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." })
|
|
27287
27742
|
] }),
|
|
27288
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-
|
|
27289
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
27290
|
-
/* @__PURE__ */ jsxRuntimeExports.
|
|
27291
|
-
|
|
27743
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-5", children: [
|
|
27744
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27745
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27746
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: "Git Author Signature (Local Config)" }),
|
|
27747
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Embedded into every commit header on your local workstation" })
|
|
27748
|
+
] }),
|
|
27749
|
+
/* @__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") })
|
|
27292
27750
|
] }),
|
|
27293
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "
|
|
27751
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5", children: [
|
|
27294
27752
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27295
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold
|
|
27753
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitUsername") }),
|
|
27296
27754
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27297
27755
|
"input",
|
|
27298
27756
|
{
|
|
27299
27757
|
type: "text",
|
|
27300
27758
|
value: gitConfig.name,
|
|
27301
27759
|
readOnly: true,
|
|
27302
|
-
className: "w-full bg-
|
|
27760
|
+
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"
|
|
27303
27761
|
}
|
|
27304
27762
|
)
|
|
27305
27763
|
] }),
|
|
27306
27764
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27307
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold
|
|
27765
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitEmail") }),
|
|
27308
27766
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27309
27767
|
"input",
|
|
27310
27768
|
{
|
|
27311
27769
|
type: "email",
|
|
27312
27770
|
value: gitConfig.email,
|
|
27313
27771
|
readOnly: true,
|
|
27314
|
-
className: "w-full bg-
|
|
27772
|
+
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"
|
|
27315
27773
|
}
|
|
27316
|
-
)
|
|
27317
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-brand mt-1.5 font-medium", children: t("syncedFromGithub") })
|
|
27774
|
+
)
|
|
27318
27775
|
] })
|
|
27319
27776
|
] })
|
|
27320
|
-
] })
|
|
27321
|
-
] }),
|
|
27322
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
|
|
27323
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
|
|
27324
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
|
|
27325
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🛡️" }),
|
|
27326
|
-
" Security & Features"
|
|
27327
|
-
] }),
|
|
27328
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-5", children: [
|
|
27329
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27330
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
|
|
27331
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("dailyMobileVerification") }),
|
|
27332
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("dailyMobileDesc") })
|
|
27333
|
-
] }),
|
|
27334
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27335
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27336
|
-
"input",
|
|
27337
|
-
{
|
|
27338
|
-
className: "toggle",
|
|
27339
|
-
type: "checkbox",
|
|
27340
|
-
checked: draftDailyAuth,
|
|
27341
|
-
onChange: (e) => {
|
|
27342
|
-
const next = e.target.checked;
|
|
27343
|
-
setDraftDailyAuth(next);
|
|
27344
|
-
}
|
|
27345
|
-
}
|
|
27346
|
-
),
|
|
27347
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27348
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27349
|
-
] })
|
|
27350
|
-
] }),
|
|
27351
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/50 pt-5 flex items-center justify-between", children: [
|
|
27352
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
|
|
27353
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("enableSpaceScene") }),
|
|
27354
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("spaceSceneDesc") })
|
|
27355
|
-
] }),
|
|
27356
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27357
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27358
|
-
"input",
|
|
27359
|
-
{
|
|
27360
|
-
className: "toggle",
|
|
27361
|
-
type: "checkbox",
|
|
27362
|
-
checked: draftLockscreenSpace,
|
|
27363
|
-
onChange: (e) => {
|
|
27364
|
-
const next = e.target.checked;
|
|
27365
|
-
setDraftLockscreenSpace(next);
|
|
27366
|
-
}
|
|
27367
|
-
}
|
|
27368
|
-
),
|
|
27369
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27370
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27371
|
-
] })
|
|
27372
|
-
] }),
|
|
27373
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-5", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
27374
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27375
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("changeLockscreenPin") }),
|
|
27376
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("changePinDesc") })
|
|
27377
|
-
] }),
|
|
27378
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2", children: [
|
|
27379
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27380
|
-
"input",
|
|
27381
|
-
{
|
|
27382
|
-
type: "password",
|
|
27383
|
-
maxLength: 3,
|
|
27384
|
-
value: newPin,
|
|
27385
|
-
onChange: (e) => setNewPin(e.target.value),
|
|
27386
|
-
placeholder: "***",
|
|
27387
|
-
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"
|
|
27388
|
-
}
|
|
27389
|
-
),
|
|
27390
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27391
|
-
"button",
|
|
27392
|
-
{
|
|
27393
|
-
type: "button",
|
|
27394
|
-
onClick: () => {
|
|
27395
|
-
if (newPin.length === 3) {
|
|
27396
|
-
localStorage.setItem("gitelectron-pin", newPin);
|
|
27397
|
-
setStoredPin(newPin);
|
|
27398
|
-
setPinChangeSuccess(true);
|
|
27399
|
-
setTimeout(() => setPinChangeSuccess(false), 2e3);
|
|
27400
|
-
setNewPin("");
|
|
27401
|
-
}
|
|
27402
|
-
},
|
|
27403
|
-
disabled: newPin.length !== 3,
|
|
27404
|
-
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",
|
|
27405
|
-
children: pinChangeSuccess ? t("saved") : t("savePin")
|
|
27406
|
-
}
|
|
27407
|
-
)
|
|
27408
|
-
] })
|
|
27409
|
-
] }) })
|
|
27410
|
-
] })
|
|
27411
27777
|
] }),
|
|
27412
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-
|
|
27413
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between
|
|
27414
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
27415
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("
|
|
27416
|
-
" ",
|
|
27417
|
-
t("githubAccounts")
|
|
27778
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/80 border border-border/80 rounded-2xl p-6 shadow-sm space-y-5", children: [
|
|
27779
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
27780
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27781
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-secondary", children: t("githubAccounts") }),
|
|
27782
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Linked profiles authorized for repository pushing and collaboration" })
|
|
27418
27783
|
] }),
|
|
27419
27784
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27420
27785
|
"button",
|
|
@@ -27424,41 +27789,64 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27424
27789
|
cancelSettings();
|
|
27425
27790
|
handleStartAuth();
|
|
27426
27791
|
},
|
|
27427
|
-
className: "px-
|
|
27792
|
+
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",
|
|
27428
27793
|
children: [
|
|
27429
|
-
|
|
27794
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27795
|
+
"svg",
|
|
27796
|
+
{
|
|
27797
|
+
className: "w-3.5 h-3.5",
|
|
27798
|
+
fill: "none",
|
|
27799
|
+
stroke: "currentColor",
|
|
27800
|
+
viewBox: "0 0 24 24",
|
|
27801
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27802
|
+
"path",
|
|
27803
|
+
{
|
|
27804
|
+
strokeLinecap: "round",
|
|
27805
|
+
strokeLinejoin: "round",
|
|
27806
|
+
strokeWidth: 2,
|
|
27807
|
+
d: "M12 4v16m8-8H4"
|
|
27808
|
+
}
|
|
27809
|
+
)
|
|
27810
|
+
}
|
|
27811
|
+
),
|
|
27430
27812
|
t("addAccount")
|
|
27431
27813
|
]
|
|
27432
27814
|
}
|
|
27433
27815
|
)
|
|
27434
27816
|
] }),
|
|
27435
|
-
accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.
|
|
27817
|
+
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: [
|
|
27818
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("noAccountsLinked") }),
|
|
27819
|
+
/* @__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." })
|
|
27820
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-3", children: accounts.map((acc) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27436
27821
|
"div",
|
|
27437
27822
|
{
|
|
27438
|
-
className: "flex items-center justify-between p-
|
|
27823
|
+
className: "flex items-center justify-between p-4 border border-border rounded-xl bg-canvas/40 hover:border-brand/40 transition-colors",
|
|
27439
27824
|
children: [
|
|
27440
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
27825
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
27441
27826
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27442
27827
|
"img",
|
|
27443
27828
|
{
|
|
27444
27829
|
src: acc.avatar_url || `https://github.com/${acc.username}.png`,
|
|
27445
27830
|
alt: acc.username,
|
|
27446
|
-
className: "w-
|
|
27831
|
+
className: "w-10 h-10 rounded-full object-cover border border-border"
|
|
27447
27832
|
}
|
|
27448
27833
|
),
|
|
27449
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("
|
|
27450
|
-
|
|
27451
|
-
|
|
27834
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27835
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm font-bold text-primary block", children: [
|
|
27836
|
+
"@",
|
|
27837
|
+
acc.username
|
|
27838
|
+
] }),
|
|
27839
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-secondary", children: "GitHub Enterprise / Cloud" })
|
|
27452
27840
|
] })
|
|
27453
27841
|
] }),
|
|
27454
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
27455
|
-
activeAccountId === acc.id && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] uppercase font-
|
|
27842
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
27843
|
+
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" }),
|
|
27456
27844
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27457
27845
|
"button",
|
|
27458
27846
|
{
|
|
27459
27847
|
type: "button",
|
|
27460
27848
|
onClick: () => window.api.openExternal(`https://github.com/${acc.username}`),
|
|
27461
|
-
className: "px-
|
|
27849
|
+
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",
|
|
27462
27850
|
children: "Profile"
|
|
27463
27851
|
}
|
|
27464
27852
|
)
|
|
@@ -27467,7 +27855,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27467
27855
|
},
|
|
27468
27856
|
acc.id
|
|
27469
27857
|
)) }),
|
|
27470
|
-
authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-
|
|
27858
|
+
authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-5 mt-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27471
27859
|
"button",
|
|
27472
27860
|
{
|
|
27473
27861
|
type: "button",
|
|
@@ -27485,7 +27873,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27485
27873
|
showToast("Logout failed", "error");
|
|
27486
27874
|
}
|
|
27487
27875
|
},
|
|
27488
|
-
className: "w-full py-
|
|
27876
|
+
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",
|
|
27489
27877
|
children: [
|
|
27490
27878
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27491
27879
|
"svg",
|
|
@@ -27510,74 +27898,324 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27510
27898
|
}
|
|
27511
27899
|
) })
|
|
27512
27900
|
] })
|
|
27513
|
-
] })
|
|
27514
|
-
] }),
|
|
27515
|
-
/* @__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: [
|
|
27516
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27517
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-black text-danger flex items-center gap-2 uppercase tracking-wider mb-1", children: [
|
|
27518
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⚠️" }),
|
|
27519
|
-
" Emergency Override (Master Push)"
|
|
27520
|
-
] }),
|
|
27521
|
-
/* @__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." })
|
|
27522
27901
|
] }),
|
|
27523
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27524
|
-
"
|
|
27525
|
-
|
|
27526
|
-
|
|
27527
|
-
|
|
27528
|
-
|
|
27529
|
-
|
|
27530
|
-
)
|
|
27531
|
-
|
|
27532
|
-
|
|
27533
|
-
|
|
27534
|
-
|
|
27535
|
-
|
|
27536
|
-
|
|
27902
|
+
settingsTab === "security" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
27903
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27904
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Security & Access Controls" }),
|
|
27905
|
+
/* @__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." })
|
|
27906
|
+
] }),
|
|
27907
|
+
/* @__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: [
|
|
27908
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
27909
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("dailyMobileVerification") }),
|
|
27910
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: t("dailyMobileDesc") })
|
|
27911
|
+
] }),
|
|
27912
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
|
|
27913
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27914
|
+
"input",
|
|
27915
|
+
{
|
|
27916
|
+
className: "toggle",
|
|
27917
|
+
type: "checkbox",
|
|
27918
|
+
checked: draftDailyAuth,
|
|
27919
|
+
onChange: (e) => setDraftDailyAuth(e.target.checked)
|
|
27537
27920
|
}
|
|
27538
|
-
|
|
27539
|
-
|
|
27540
|
-
|
|
27541
|
-
|
|
27542
|
-
|
|
27543
|
-
|
|
27544
|
-
|
|
27545
|
-
|
|
27546
|
-
|
|
27547
|
-
|
|
27921
|
+
),
|
|
27922
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
|
|
27923
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
|
|
27924
|
+
] })
|
|
27925
|
+
] }),
|
|
27926
|
+
/* @__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: [
|
|
27927
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
27928
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("changeLockscreenPin") }),
|
|
27929
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: t("changePinDesc") })
|
|
27930
|
+
] }),
|
|
27931
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 shrink-0", children: [
|
|
27932
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27933
|
+
"input",
|
|
27934
|
+
{
|
|
27935
|
+
type: "password",
|
|
27936
|
+
maxLength: 3,
|
|
27937
|
+
value: newPin,
|
|
27938
|
+
onChange: (e) => setNewPin(e.target.value),
|
|
27939
|
+
placeholder: "***",
|
|
27940
|
+
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"
|
|
27941
|
+
}
|
|
27942
|
+
),
|
|
27943
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27944
|
+
"button",
|
|
27945
|
+
{
|
|
27946
|
+
type: "button",
|
|
27947
|
+
onClick: () => {
|
|
27948
|
+
if (newPin.length === 3) {
|
|
27949
|
+
localStorage.setItem("gitelectron-pin", newPin);
|
|
27950
|
+
setStoredPin(newPin);
|
|
27951
|
+
setPinChangeSuccess(true);
|
|
27952
|
+
setTimeout(() => setPinChangeSuccess(false), 2e3);
|
|
27953
|
+
setNewPin("");
|
|
27954
|
+
}
|
|
27955
|
+
},
|
|
27956
|
+
disabled: newPin.length !== 3,
|
|
27957
|
+
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",
|
|
27958
|
+
children: pinChangeSuccess ? t("saved") : t("savePin")
|
|
27959
|
+
}
|
|
27960
|
+
)
|
|
27961
|
+
] })
|
|
27962
|
+
] }),
|
|
27963
|
+
/* @__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: [
|
|
27964
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
27965
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1.5", children: [
|
|
27966
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27967
|
+
"svg",
|
|
27968
|
+
{
|
|
27969
|
+
className: "w-4 h-4 text-emerald-400",
|
|
27970
|
+
fill: "none",
|
|
27971
|
+
stroke: "currentColor",
|
|
27972
|
+
viewBox: "0 0 24 24",
|
|
27973
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27974
|
+
"path",
|
|
27975
|
+
{
|
|
27976
|
+
strokeLinecap: "round",
|
|
27977
|
+
strokeLinejoin: "round",
|
|
27978
|
+
strokeWidth: 2,
|
|
27979
|
+
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"
|
|
27980
|
+
}
|
|
27981
|
+
)
|
|
27982
|
+
}
|
|
27983
|
+
),
|
|
27984
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-primary", children: "Enterprise Privacy & Local Security Protocol" })
|
|
27985
|
+
] }),
|
|
27986
|
+
/* @__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)." })
|
|
27987
|
+
] }),
|
|
27988
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27989
|
+
"button",
|
|
27990
|
+
{
|
|
27991
|
+
type: "button",
|
|
27992
|
+
onClick: () => setShowPrivacyModal(true),
|
|
27993
|
+
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",
|
|
27994
|
+
children: [
|
|
27995
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27996
|
+
"svg",
|
|
27997
|
+
{
|
|
27998
|
+
className: "w-4 h-4 text-brand",
|
|
27999
|
+
fill: "none",
|
|
28000
|
+
stroke: "currentColor",
|
|
28001
|
+
viewBox: "0 0 24 24",
|
|
28002
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28003
|
+
"path",
|
|
28004
|
+
{
|
|
28005
|
+
strokeLinecap: "round",
|
|
28006
|
+
strokeLinejoin: "round",
|
|
28007
|
+
strokeWidth: 2,
|
|
28008
|
+
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"
|
|
28009
|
+
}
|
|
28010
|
+
)
|
|
28011
|
+
}
|
|
28012
|
+
),
|
|
28013
|
+
"View Trust Policy"
|
|
28014
|
+
]
|
|
27548
28015
|
}
|
|
27549
|
-
|
|
27550
|
-
|
|
27551
|
-
|
|
27552
|
-
|
|
27553
|
-
|
|
27554
|
-
|
|
27555
|
-
|
|
27556
|
-
|
|
27557
|
-
|
|
28016
|
+
)
|
|
28017
|
+
] })
|
|
28018
|
+
] }),
|
|
28019
|
+
settingsTab === "maintenance" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
28020
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28021
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Storage & Maintenance" }),
|
|
28022
|
+
/* @__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." })
|
|
28023
|
+
] }),
|
|
28024
|
+
/* @__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: [
|
|
28025
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28026
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary mb-1", children: "Application Cache & Storage" }),
|
|
28027
|
+
/* @__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." })
|
|
28028
|
+
] }),
|
|
28029
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28030
|
+
"button",
|
|
28031
|
+
{
|
|
28032
|
+
type: "button",
|
|
28033
|
+
disabled: isClearingCache,
|
|
28034
|
+
onClick: async () => {
|
|
28035
|
+
setIsClearingCache(true);
|
|
28036
|
+
try {
|
|
28037
|
+
const res = await window.api.clearAppCache();
|
|
28038
|
+
if (res.success) {
|
|
28039
|
+
localStorage.removeItem("gitquickpush-offline-queue");
|
|
28040
|
+
showToast("Application cache cleared successfully!", "success");
|
|
28041
|
+
} else {
|
|
28042
|
+
showToast("Cache clear failed: " + res.error, "error");
|
|
28043
|
+
}
|
|
28044
|
+
} catch (err) {
|
|
28045
|
+
showToast("Cache clear failed: " + err.message, "error");
|
|
28046
|
+
} finally {
|
|
28047
|
+
setIsClearingCache(false);
|
|
28048
|
+
}
|
|
28049
|
+
},
|
|
28050
|
+
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",
|
|
28051
|
+
children: [
|
|
28052
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28053
|
+
"svg",
|
|
28054
|
+
{
|
|
28055
|
+
className: `w-4 h-4 ${isClearingCache ? "animate-spin text-brand" : "text-secondary"}`,
|
|
28056
|
+
fill: "none",
|
|
28057
|
+
stroke: "currentColor",
|
|
28058
|
+
viewBox: "0 0 24 24",
|
|
28059
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28060
|
+
"path",
|
|
28061
|
+
{
|
|
28062
|
+
strokeLinecap: "round",
|
|
28063
|
+
strokeLinejoin: "round",
|
|
28064
|
+
strokeWidth: 2,
|
|
28065
|
+
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"
|
|
28066
|
+
}
|
|
28067
|
+
)
|
|
28068
|
+
}
|
|
28069
|
+
),
|
|
28070
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: isClearingCache ? "Purging Cache..." : "Clear Cache" })
|
|
28071
|
+
]
|
|
28072
|
+
}
|
|
28073
|
+
)
|
|
28074
|
+
] }),
|
|
28075
|
+
/* @__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: [
|
|
28076
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28077
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary mb-1", children: "Stale Git Index Lock Release" }),
|
|
28078
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-xs text-secondary leading-relaxed", children: [
|
|
28079
|
+
"If an interrupted commit or system reboot leaves behind a stuck",
|
|
28080
|
+
" ",
|
|
28081
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("code", { className: "text-xs font-mono bg-canvas px-1.5 py-0.5 rounded text-primary", children: ".git/index.lock" }),
|
|
28082
|
+
", clicking this safely clears it to restore repository access."
|
|
28083
|
+
] })
|
|
28084
|
+
] }),
|
|
28085
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28086
|
+
"button",
|
|
28087
|
+
{
|
|
28088
|
+
type: "button",
|
|
28089
|
+
onClick: async () => {
|
|
28090
|
+
try {
|
|
28091
|
+
const success = await window.api.removeGitLock();
|
|
28092
|
+
if (success) {
|
|
28093
|
+
showToast("Git lock released successfully", "success");
|
|
28094
|
+
} else {
|
|
28095
|
+
showToast("No active lock file found", "info");
|
|
28096
|
+
}
|
|
28097
|
+
} catch (err) {
|
|
28098
|
+
showToast("Failed to release lock: " + err.message, "error");
|
|
28099
|
+
}
|
|
28100
|
+
},
|
|
28101
|
+
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",
|
|
28102
|
+
children: [
|
|
28103
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28104
|
+
"svg",
|
|
28105
|
+
{
|
|
28106
|
+
className: "w-4 h-4 text-warning",
|
|
28107
|
+
fill: "none",
|
|
28108
|
+
stroke: "currentColor",
|
|
28109
|
+
viewBox: "0 0 24 24",
|
|
28110
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28111
|
+
"path",
|
|
28112
|
+
{
|
|
28113
|
+
strokeLinecap: "round",
|
|
28114
|
+
strokeLinejoin: "round",
|
|
28115
|
+
strokeWidth: 2,
|
|
28116
|
+
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"
|
|
28117
|
+
}
|
|
28118
|
+
)
|
|
28119
|
+
}
|
|
28120
|
+
),
|
|
28121
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Release Git Lock" })
|
|
28122
|
+
]
|
|
28123
|
+
}
|
|
28124
|
+
)
|
|
28125
|
+
] })
|
|
28126
|
+
] }),
|
|
28127
|
+
settingsTab === "developer" && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-7", children: [
|
|
28128
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28129
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-lg font-bold text-primary", children: "Tools & Advanced Overrides" }),
|
|
28130
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1 leading-relaxed", children: "Developer utilities, diagnostics, and emergency push overrides." })
|
|
28131
|
+
] }),
|
|
28132
|
+
/* @__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: [
|
|
28133
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "max-w-xl", children: [
|
|
28134
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1.5", children: [
|
|
28135
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28136
|
+
"svg",
|
|
28137
|
+
{
|
|
28138
|
+
className: "w-4 h-4 text-danger",
|
|
28139
|
+
fill: "none",
|
|
28140
|
+
stroke: "currentColor",
|
|
28141
|
+
viewBox: "0 0 24 24",
|
|
28142
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28143
|
+
"path",
|
|
28144
|
+
{
|
|
28145
|
+
strokeLinecap: "round",
|
|
28146
|
+
strokeLinejoin: "round",
|
|
28147
|
+
strokeWidth: 2,
|
|
28148
|
+
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"
|
|
28149
|
+
}
|
|
28150
|
+
)
|
|
28151
|
+
}
|
|
28152
|
+
),
|
|
28153
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-xs font-bold uppercase tracking-wider text-danger", children: "Emergency Master Push Override" })
|
|
28154
|
+
] }),
|
|
28155
|
+
/* @__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." })
|
|
28156
|
+
] }),
|
|
28157
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28158
|
+
"button",
|
|
28159
|
+
{
|
|
28160
|
+
type: "button",
|
|
28161
|
+
onClick: async () => {
|
|
28162
|
+
const confirmAction = window.confirm(
|
|
28163
|
+
"Are you sure? This will force push all current files, overriding remote history and bypassing all safety checks."
|
|
28164
|
+
);
|
|
28165
|
+
if (!confirmAction) return;
|
|
28166
|
+
try {
|
|
28167
|
+
const remotes = await window.api.getRemotes();
|
|
28168
|
+
if (!remotes || remotes.length === 0) {
|
|
28169
|
+
showToast("No remote configured to push to.", "error");
|
|
28170
|
+
return;
|
|
28171
|
+
}
|
|
28172
|
+
showToast("Executing Master Push override...", "info");
|
|
28173
|
+
await window.api.masterPush(remotes[0].name, status?.current || "main");
|
|
28174
|
+
showToast("Master Push successful!", "success");
|
|
28175
|
+
refreshRepoState();
|
|
28176
|
+
cancelSettings();
|
|
28177
|
+
} catch (err) {
|
|
28178
|
+
showToast(
|
|
28179
|
+
"Master Push failed: " + (err.message || "Unknown error"),
|
|
28180
|
+
"error"
|
|
28181
|
+
);
|
|
28182
|
+
}
|
|
28183
|
+
},
|
|
28184
|
+
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",
|
|
28185
|
+
children: "Execute Force Push"
|
|
28186
|
+
}
|
|
28187
|
+
)
|
|
28188
|
+
] })
|
|
28189
|
+
] })
|
|
28190
|
+
] })
|
|
27558
28191
|
] }),
|
|
27559
28192
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27560
28193
|
"div",
|
|
27561
28194
|
{
|
|
27562
|
-
className: "px-8 py-5 border-t border-border shrink-0 flex
|
|
28195
|
+
className: "px-8 py-4.5 border-t border-border shrink-0 flex items-center justify-between",
|
|
27563
28196
|
style: { backgroundColor: "var(--color-surface)" },
|
|
27564
28197
|
children: [
|
|
27565
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
27566
|
-
|
|
27567
|
-
|
|
27568
|
-
|
|
27569
|
-
|
|
27570
|
-
|
|
27571
|
-
|
|
27572
|
-
|
|
27573
|
-
|
|
27574
|
-
|
|
27575
|
-
|
|
27576
|
-
|
|
27577
|
-
|
|
27578
|
-
|
|
27579
|
-
|
|
27580
|
-
|
|
28198
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary hidden sm:block", children: "Preferences are saved locally in your secure client profile." }),
|
|
28199
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 ml-auto", children: [
|
|
28200
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28201
|
+
"button",
|
|
28202
|
+
{
|
|
28203
|
+
type: "button",
|
|
28204
|
+
onClick: () => cancelSettings(),
|
|
28205
|
+
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",
|
|
28206
|
+
children: t("cancel")
|
|
28207
|
+
}
|
|
28208
|
+
),
|
|
28209
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28210
|
+
"button",
|
|
28211
|
+
{
|
|
28212
|
+
type: "button",
|
|
28213
|
+
onClick: saveSettings,
|
|
28214
|
+
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",
|
|
28215
|
+
children: t("save")
|
|
28216
|
+
}
|
|
28217
|
+
)
|
|
28218
|
+
] })
|
|
27581
28219
|
]
|
|
27582
28220
|
}
|
|
27583
28221
|
)
|
|
@@ -27728,21 +28366,21 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27728
28366
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "mx-2", children: "•" }),
|
|
27729
28367
|
new Date(commit.date).toLocaleString()
|
|
27730
28368
|
] }),
|
|
27731
|
-
|
|
28369
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27732
28370
|
"button",
|
|
27733
28371
|
{
|
|
27734
28372
|
onClick: () => toggleCommit(commit.hash),
|
|
27735
|
-
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",
|
|
28373
|
+
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",
|
|
28374
|
+
title: expandedCommits[commit.hash] ? "Hide commit details" : "View commit details",
|
|
27736
28375
|
children: [
|
|
27737
28376
|
expandedCommits[commit.hash] ? "Hide" : "View",
|
|
27738
28377
|
" ",
|
|
27739
|
-
commit.diff.changed,
|
|
27740
|
-
"
|
|
27741
|
-
commit.diff.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-success", children: [
|
|
28378
|
+
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",
|
|
28379
|
+
commit.diff?.insertions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-success", children: [
|
|
27742
28380
|
commit.diff.insertions,
|
|
27743
28381
|
" ++"
|
|
27744
28382
|
] }),
|
|
27745
|
-
commit.diff
|
|
28383
|
+
commit.diff?.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-danger", children: [
|
|
27746
28384
|
commit.diff.deletions,
|
|
27747
28385
|
" --"
|
|
27748
28386
|
] })
|
|
@@ -27750,7 +28388,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27750
28388
|
}
|
|
27751
28389
|
)
|
|
27752
28390
|
] }),
|
|
27753
|
-
expandedCommits[commit.hash] &&
|
|
28391
|
+
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(
|
|
27754
28392
|
CommitReceiptPrinter,
|
|
27755
28393
|
{
|
|
27756
28394
|
commit,
|
|
@@ -27763,7 +28401,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
27763
28401
|
)) })
|
|
27764
28402
|
] }) }),
|
|
27765
28403
|
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: [
|
|
27766
|
-
enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28404
|
+
!liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28405
|
+
SpaceScene,
|
|
28406
|
+
{
|
|
28407
|
+
fullScreen: true,
|
|
28408
|
+
liteMode,
|
|
28409
|
+
onGameActiveChange: setIsGameActive
|
|
28410
|
+
}
|
|
28411
|
+
),
|
|
27767
28412
|
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
27768
28413
|
"div",
|
|
27769
28414
|
{
|
|
@@ -28109,6 +28754,26 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28109
28754
|
'"'
|
|
28110
28755
|
] })
|
|
28111
28756
|
] }),
|
|
28757
|
+
/* @__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: [
|
|
28758
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between text-secondary", children: [
|
|
28759
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "font-semibold text-primary flex items-center gap-1.5", children: [
|
|
28760
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🛡️" }),
|
|
28761
|
+
" Security & Verification"
|
|
28762
|
+
] }),
|
|
28763
|
+
/* @__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" })
|
|
28764
|
+
] }),
|
|
28765
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 text-secondary text-[11px] gap-1 pt-0.5", children: [
|
|
28766
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Authentication:" }),
|
|
28767
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "col-span-2 font-mono text-primary truncate", children: authStatus.authMethod || "GitHub OAuth (Verified)" }),
|
|
28768
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "AI Assistance:" }),
|
|
28769
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "col-span-2 text-primary font-medium flex items-center gap-1.5", children: [
|
|
28770
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400 animate-pulse" }),
|
|
28771
|
+
authStatus.aiProvider || "GitHub Models (gpt-4o-mini)"
|
|
28772
|
+
] }),
|
|
28773
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Session Privacy:" }),
|
|
28774
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "col-span-2 text-secondary opacity-90", children: authStatus.securityStatus || "End-to-End Encrypted Session" })
|
|
28775
|
+
] })
|
|
28776
|
+
] }),
|
|
28112
28777
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex items-center gap-2", children: [
|
|
28113
28778
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28114
28779
|
"input",
|
|
@@ -28144,7 +28809,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28144
28809
|
)
|
|
28145
28810
|
] })
|
|
28146
28811
|
] }) }),
|
|
28147
|
-
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-[
|
|
28812
|
+
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: [
|
|
28148
28813
|
/* @__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(
|
|
28149
28814
|
"path",
|
|
28150
28815
|
{
|
|
@@ -28154,8 +28819,8 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28154
28819
|
d: "M5 13l4 4L19 7"
|
|
28155
28820
|
}
|
|
28156
28821
|
) }) }),
|
|
28157
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-
|
|
28158
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-secondary mb-
|
|
28822
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-3 text-primary", children: "Push Successful" }),
|
|
28823
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-secondary mb-4 text-sm leading-relaxed", children: [
|
|
28159
28824
|
"Successfully pushed",
|
|
28160
28825
|
" ",
|
|
28161
28826
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-primary font-medium", children: pushSuccessData.files }),
|
|
@@ -28167,69 +28832,268 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28167
28832
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-primary", children: pushSuccessData.repository }),
|
|
28168
28833
|
"."
|
|
28169
28834
|
] }),
|
|
28835
|
+
/* @__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: [
|
|
28836
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary border-b border-border/60 pb-1.5", children: [
|
|
28837
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] font-medium", children: "Timestamp:" }),
|
|
28838
|
+
/* @__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" }) })
|
|
28839
|
+
] }),
|
|
28840
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28841
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Pushed By:" }),
|
|
28842
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-accent font-semibold text-[11px]", children: pushSuccessData.author || (authStatus.username ? `@${authStatus.username}` : "Git Author") })
|
|
28843
|
+
] }),
|
|
28844
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28845
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Verification:" }),
|
|
28846
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-emerald-400 font-semibold text-[11px]", children: pushSuccessData.authMethod || "GitHub OAuth (Verified ✓)" })
|
|
28847
|
+
] }),
|
|
28848
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary", children: [
|
|
28849
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "AI Engine:" }),
|
|
28850
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-primary font-medium text-[11px] flex items-center gap-1.5", children: [
|
|
28851
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-emerald-400" }),
|
|
28852
|
+
pushSuccessData.aiProvider || "GitHub Models"
|
|
28853
|
+
] })
|
|
28854
|
+
] }),
|
|
28855
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center text-secondary border-t border-border/60 pt-1.5", children: [
|
|
28856
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px]", children: "Status:" }),
|
|
28857
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-emerald-400 font-bold text-[11px]", children: "Remote Up to Date" })
|
|
28858
|
+
] })
|
|
28859
|
+
] }),
|
|
28170
28860
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28171
28861
|
"button",
|
|
28172
28862
|
{
|
|
28173
28863
|
onClick: () => setPushSuccessData(null),
|
|
28174
|
-
className: "w-full py-2 bg-
|
|
28864
|
+
className: "w-full py-2.5 bg-brand hover:bg-brand-hover text-white rounded-md font-semibold transition-colors text-sm shadow-md",
|
|
28175
28865
|
children: "Done"
|
|
28176
28866
|
}
|
|
28177
|
-
)
|
|
28178
|
-
] }) }),
|
|
28179
|
-
pushFailureData &&
|
|
28180
|
-
|
|
28181
|
-
|
|
28182
|
-
|
|
28183
|
-
|
|
28184
|
-
|
|
28185
|
-
|
|
28186
|
-
|
|
28187
|
-
|
|
28188
|
-
}
|
|
28189
|
-
|
|
28190
|
-
|
|
28191
|
-
|
|
28192
|
-
|
|
28193
|
-
|
|
28194
|
-
|
|
28195
|
-
|
|
28196
|
-
|
|
28197
|
-
|
|
28198
|
-
|
|
28199
|
-
|
|
28200
|
-
|
|
28201
|
-
|
|
28202
|
-
|
|
28203
|
-
|
|
28204
|
-
|
|
28205
|
-
|
|
28206
|
-
|
|
28207
|
-
|
|
28208
|
-
|
|
28209
|
-
|
|
28210
|
-
|
|
28211
|
-
|
|
28212
|
-
|
|
28213
|
-
|
|
28214
|
-
|
|
28215
|
-
|
|
28216
|
-
|
|
28217
|
-
|
|
28218
|
-
|
|
28219
|
-
|
|
28220
|
-
|
|
28221
|
-
|
|
28222
|
-
|
|
28223
|
-
|
|
28224
|
-
|
|
28225
|
-
|
|
28226
|
-
|
|
28227
|
-
|
|
28228
|
-
|
|
28229
|
-
|
|
28230
|
-
|
|
28231
|
-
|
|
28232
|
-
|
|
28867
|
+
)
|
|
28868
|
+
] }) }),
|
|
28869
|
+
pushFailureData && (() => {
|
|
28870
|
+
const isConflict = Boolean(
|
|
28871
|
+
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 ("))
|
|
28872
|
+
);
|
|
28873
|
+
const isPull = pushFailureData.operation === "pull" || pushFailureData.reason?.includes("pull-from-remote");
|
|
28874
|
+
const cleanedReason = formatErrorMessage(pushFailureData.reason);
|
|
28875
|
+
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(
|
|
28876
|
+
"div",
|
|
28877
|
+
{
|
|
28878
|
+
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`,
|
|
28879
|
+
children: [
|
|
28880
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28881
|
+
"div",
|
|
28882
|
+
{
|
|
28883
|
+
className: `flex items-center gap-3 mb-4 ${isConflict ? "text-amber-500" : "text-danger"}`,
|
|
28884
|
+
children: [
|
|
28885
|
+
isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
28886
|
+
"svg",
|
|
28887
|
+
{
|
|
28888
|
+
className: "w-6 h-6 flex-shrink-0",
|
|
28889
|
+
viewBox: "0 0 24 24",
|
|
28890
|
+
fill: "none",
|
|
28891
|
+
stroke: "currentColor",
|
|
28892
|
+
strokeWidth: "2",
|
|
28893
|
+
strokeLinecap: "round",
|
|
28894
|
+
strokeLinejoin: "round",
|
|
28895
|
+
children: [
|
|
28896
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "18", cy: "18", r: "3" }),
|
|
28897
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "6", cy: "6", r: "3" }),
|
|
28898
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 9v12" }),
|
|
28899
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18 9a9 9 0 0 0-9 9" })
|
|
28900
|
+
]
|
|
28901
|
+
}
|
|
28902
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28903
|
+
"svg",
|
|
28904
|
+
{
|
|
28905
|
+
className: "w-6 h-6 flex-shrink-0",
|
|
28906
|
+
fill: "none",
|
|
28907
|
+
stroke: "currentColor",
|
|
28908
|
+
viewBox: "0 0 24 24",
|
|
28909
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28910
|
+
"path",
|
|
28911
|
+
{
|
|
28912
|
+
strokeLinecap: "round",
|
|
28913
|
+
strokeLinejoin: "round",
|
|
28914
|
+
strokeWidth: 2,
|
|
28915
|
+
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"
|
|
28916
|
+
}
|
|
28917
|
+
)
|
|
28918
|
+
}
|
|
28919
|
+
),
|
|
28920
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
28921
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold tracking-tight", children: isConflict ? "Merge Conflict Detected" : isPull ? "Pull Failed" : "Push Rejected" }),
|
|
28922
|
+
/* @__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." })
|
|
28923
|
+
] })
|
|
28924
|
+
]
|
|
28925
|
+
}
|
|
28926
|
+
),
|
|
28927
|
+
/* @__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 }) }),
|
|
28928
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-secondary mb-5 text-sm leading-relaxed", children: isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
28929
|
+
"Choose a resolution below: let",
|
|
28930
|
+
" ",
|
|
28931
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-primary font-semibold", children: "AI Auto-Healer" }),
|
|
28932
|
+
" ",
|
|
28933
|
+
"intelligently reconcile conflicts, keep your local changes, accept remote incoming changes, or abort the merge to revert to the previous state."
|
|
28934
|
+
] }) : 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." }) }),
|
|
28935
|
+
isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2.5", children: [
|
|
28936
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28937
|
+
"button",
|
|
28938
|
+
{
|
|
28939
|
+
onClick: () => {
|
|
28940
|
+
const data = pushFailureData;
|
|
28941
|
+
setPushFailureData(null);
|
|
28942
|
+
autonomousHealAndPush(
|
|
28943
|
+
data.reason,
|
|
28944
|
+
data.operation || "pull",
|
|
28945
|
+
data.overrideRepoPath,
|
|
28946
|
+
data.overrideBranch
|
|
28947
|
+
);
|
|
28948
|
+
},
|
|
28949
|
+
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]",
|
|
28950
|
+
children: "✨ Auto-Resolve with AI"
|
|
28951
|
+
}
|
|
28952
|
+
),
|
|
28953
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
|
|
28954
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28955
|
+
"button",
|
|
28956
|
+
{
|
|
28957
|
+
onClick: handleResolveConflictOurs,
|
|
28958
|
+
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",
|
|
28959
|
+
title: "Keep local changes and discard remote changes",
|
|
28960
|
+
children: "Keep Local (Ours)"
|
|
28961
|
+
}
|
|
28962
|
+
),
|
|
28963
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28964
|
+
"button",
|
|
28965
|
+
{
|
|
28966
|
+
onClick: handleResolveConflictTheirs,
|
|
28967
|
+
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",
|
|
28968
|
+
title: "Accept remote incoming changes and discard local changes",
|
|
28969
|
+
children: "Accept Remote (Theirs)"
|
|
28970
|
+
}
|
|
28971
|
+
),
|
|
28972
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28973
|
+
"button",
|
|
28974
|
+
{
|
|
28975
|
+
onClick: handleAbortMerge,
|
|
28976
|
+
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",
|
|
28977
|
+
title: "Abort the merge and revert repository to previous state",
|
|
28978
|
+
children: "Abort Merge"
|
|
28979
|
+
}
|
|
28980
|
+
)
|
|
28981
|
+
] }),
|
|
28982
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28983
|
+
"button",
|
|
28984
|
+
{
|
|
28985
|
+
onClick: () => {
|
|
28986
|
+
setPushFailureData(null);
|
|
28987
|
+
setChangesTab("changes");
|
|
28988
|
+
},
|
|
28989
|
+
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",
|
|
28990
|
+
children: "Review Conflicted Files Manually in Changes Tab"
|
|
28991
|
+
}
|
|
28992
|
+
),
|
|
28993
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
28994
|
+
"button",
|
|
28995
|
+
{
|
|
28996
|
+
onClick: async () => {
|
|
28997
|
+
const data = pushFailureData;
|
|
28998
|
+
setPushFailureData(null);
|
|
28999
|
+
try {
|
|
29000
|
+
const remotes = await window.api.getRemotes();
|
|
29001
|
+
const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
|
|
29002
|
+
const targetBranch = data?.overrideBranch || "main";
|
|
29003
|
+
await window.api.masterPush(targetRemote, targetBranch);
|
|
29004
|
+
setPushSuccessData({
|
|
29005
|
+
files: "All",
|
|
29006
|
+
branch: targetBranch,
|
|
29007
|
+
repository: targetRemote
|
|
29008
|
+
});
|
|
29009
|
+
} catch (err) {
|
|
29010
|
+
setPushFailureData({
|
|
29011
|
+
reason: err.message || "Master Force Push Failed",
|
|
29012
|
+
operation: "push",
|
|
29013
|
+
overrideRepoPath: data?.overrideRepoPath,
|
|
29014
|
+
overrideBranch: data?.overrideBranch
|
|
29015
|
+
});
|
|
29016
|
+
}
|
|
29017
|
+
},
|
|
29018
|
+
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]",
|
|
29019
|
+
title: "Force push everything (including ignored files) bypassing all rules",
|
|
29020
|
+
children: "⚡ Master Force Push (Override All)"
|
|
29021
|
+
}
|
|
29022
|
+
)
|
|
29023
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
|
|
29024
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-3", children: [
|
|
29025
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29026
|
+
"button",
|
|
29027
|
+
{
|
|
29028
|
+
onClick: () => {
|
|
29029
|
+
const data = pushFailureData;
|
|
29030
|
+
setPushFailureData(null);
|
|
29031
|
+
autonomousHealAndPush(
|
|
29032
|
+
data.reason,
|
|
29033
|
+
data.operation || (isPull ? "pull" : "push"),
|
|
29034
|
+
data.overrideRepoPath,
|
|
29035
|
+
data.overrideBranch
|
|
29036
|
+
);
|
|
29037
|
+
},
|
|
29038
|
+
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]",
|
|
29039
|
+
children: "✨ Fix with AI"
|
|
29040
|
+
}
|
|
29041
|
+
),
|
|
29042
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29043
|
+
"button",
|
|
29044
|
+
{
|
|
29045
|
+
onClick: () => {
|
|
29046
|
+
setPushFailureData(null);
|
|
29047
|
+
handlePull();
|
|
29048
|
+
},
|
|
29049
|
+
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]",
|
|
29050
|
+
children: isPull ? "Retry Pull" : "Pull Changes"
|
|
29051
|
+
}
|
|
29052
|
+
),
|
|
29053
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29054
|
+
"button",
|
|
29055
|
+
{
|
|
29056
|
+
onClick: () => setPushFailureData(null),
|
|
29057
|
+
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]",
|
|
29058
|
+
children: "Cancel"
|
|
29059
|
+
}
|
|
29060
|
+
)
|
|
29061
|
+
] }),
|
|
29062
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29063
|
+
"button",
|
|
29064
|
+
{
|
|
29065
|
+
onClick: async () => {
|
|
29066
|
+
const data = pushFailureData;
|
|
29067
|
+
setPushFailureData(null);
|
|
29068
|
+
try {
|
|
29069
|
+
const remotes = await window.api.getRemotes();
|
|
29070
|
+
const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
|
|
29071
|
+
const targetBranch = data?.overrideBranch || "main";
|
|
29072
|
+
await window.api.masterPush(targetRemote, targetBranch);
|
|
29073
|
+
setPushSuccessData({
|
|
29074
|
+
files: "All",
|
|
29075
|
+
branch: targetBranch,
|
|
29076
|
+
repository: targetRemote
|
|
29077
|
+
});
|
|
29078
|
+
} catch (err) {
|
|
29079
|
+
setPushFailureData({
|
|
29080
|
+
reason: err.message || "Master Force Push Failed",
|
|
29081
|
+
operation: "push",
|
|
29082
|
+
overrideRepoPath: data?.overrideRepoPath,
|
|
29083
|
+
overrideBranch: data?.overrideBranch
|
|
29084
|
+
});
|
|
29085
|
+
}
|
|
29086
|
+
},
|
|
29087
|
+
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]",
|
|
29088
|
+
title: "Force push everything (including ignored files) bypassing all rules",
|
|
29089
|
+
children: "⚡ Master Force Push (Override All)"
|
|
29090
|
+
}
|
|
29091
|
+
)
|
|
29092
|
+
] })
|
|
29093
|
+
]
|
|
29094
|
+
}
|
|
29095
|
+
) });
|
|
29096
|
+
})(),
|
|
28233
29097
|
/* @__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: [
|
|
28234
29098
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mb-6 p-1", children: [
|
|
28235
29099
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -28858,6 +29722,35 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
28858
29722
|
"Refresh"
|
|
28859
29723
|
]
|
|
28860
29724
|
}
|
|
29725
|
+
),
|
|
29726
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
29727
|
+
"button",
|
|
29728
|
+
{
|
|
29729
|
+
onClick: () => setShowForcePushModal(true),
|
|
29730
|
+
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",
|
|
29731
|
+
title: "Emergency Force Push (Master Override)",
|
|
29732
|
+
children: [
|
|
29733
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29734
|
+
"svg",
|
|
29735
|
+
{
|
|
29736
|
+
className: "w-3.5 h-3.5",
|
|
29737
|
+
fill: "none",
|
|
29738
|
+
stroke: "currentColor",
|
|
29739
|
+
viewBox: "0 0 24 24",
|
|
29740
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
29741
|
+
"path",
|
|
29742
|
+
{
|
|
29743
|
+
strokeLinecap: "round",
|
|
29744
|
+
strokeLinejoin: "round",
|
|
29745
|
+
strokeWidth: 2,
|
|
29746
|
+
d: "M13 10V3L4 14h7v7l9-11h-7z"
|
|
29747
|
+
}
|
|
29748
|
+
)
|
|
29749
|
+
}
|
|
29750
|
+
),
|
|
29751
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Force Push" })
|
|
29752
|
+
]
|
|
29753
|
+
}
|
|
28861
29754
|
)
|
|
28862
29755
|
] })
|
|
28863
29756
|
] }),
|
|
@@ -29870,7 +30763,10 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29870
30763
|
onClick: async () => {
|
|
29871
30764
|
try {
|
|
29872
30765
|
await window.api.acceptInvitation(inv.id);
|
|
29873
|
-
showToast(
|
|
30766
|
+
showToast(
|
|
30767
|
+
`Invitation accepted for ${inv.repository.full_name}!`,
|
|
30768
|
+
"success"
|
|
30769
|
+
);
|
|
29874
30770
|
setShowInvitationsModal(false);
|
|
29875
30771
|
setShowCollabActionModal({
|
|
29876
30772
|
name: inv.repository.name,
|
|
@@ -29924,6 +30820,288 @@ Are you SURE you want to link "${repoName}" to this folder?`
|
|
|
29924
30820
|
}
|
|
29925
30821
|
)
|
|
29926
30822
|
] }) }),
|
|
30823
|
+
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: [
|
|
30824
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-8 py-5 border-b border-border shrink-0 flex items-center justify-between bg-surface", children: [
|
|
30825
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
|
|
30826
|
+
/* @__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(
|
|
30827
|
+
"path",
|
|
30828
|
+
{
|
|
30829
|
+
strokeLinecap: "round",
|
|
30830
|
+
strokeLinejoin: "round",
|
|
30831
|
+
strokeWidth: 2,
|
|
30832
|
+
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"
|
|
30833
|
+
}
|
|
30834
|
+
) }) }),
|
|
30835
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
30836
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-lg font-bold text-primary leading-tight", children: "Privacy & Security Trust Center" }),
|
|
30837
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: "Enterprise Grade • Local-First Architecture • Zero Telemetry Guaranteed" })
|
|
30838
|
+
] })
|
|
30839
|
+
] }),
|
|
30840
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30841
|
+
"button",
|
|
30842
|
+
{
|
|
30843
|
+
type: "button",
|
|
30844
|
+
onClick: () => setShowPrivacyModal(false),
|
|
30845
|
+
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",
|
|
30846
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30847
|
+
"path",
|
|
30848
|
+
{
|
|
30849
|
+
strokeLinecap: "round",
|
|
30850
|
+
strokeLinejoin: "round",
|
|
30851
|
+
strokeWidth: 2,
|
|
30852
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
30853
|
+
}
|
|
30854
|
+
) })
|
|
30855
|
+
}
|
|
30856
|
+
)
|
|
30857
|
+
] }),
|
|
30858
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-8 md:p-10 space-y-8 bg-surface/20", children: [
|
|
30859
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-5", children: [
|
|
30860
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
30861
|
+
/* @__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(
|
|
30862
|
+
"path",
|
|
30863
|
+
{
|
|
30864
|
+
strokeLinecap: "round",
|
|
30865
|
+
strokeLinejoin: "round",
|
|
30866
|
+
strokeWidth: 2,
|
|
30867
|
+
d: "M5 13l4 4L19 7"
|
|
30868
|
+
}
|
|
30869
|
+
) }) }),
|
|
30870
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "0.00% Telemetry" }),
|
|
30871
|
+
/* @__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." })
|
|
30872
|
+
] }),
|
|
30873
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
30874
|
+
/* @__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(
|
|
30875
|
+
"path",
|
|
30876
|
+
{
|
|
30877
|
+
strokeLinecap: "round",
|
|
30878
|
+
strokeLinejoin: "round",
|
|
30879
|
+
strokeWidth: 2,
|
|
30880
|
+
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"
|
|
30881
|
+
}
|
|
30882
|
+
) }) }),
|
|
30883
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "100% Local-First" }),
|
|
30884
|
+
/* @__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." })
|
|
30885
|
+
] }),
|
|
30886
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-5 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-2", children: [
|
|
30887
|
+
/* @__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(
|
|
30888
|
+
"path",
|
|
30889
|
+
{
|
|
30890
|
+
strokeLinecap: "round",
|
|
30891
|
+
strokeLinejoin: "round",
|
|
30892
|
+
strokeWidth: 2,
|
|
30893
|
+
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"
|
|
30894
|
+
}
|
|
30895
|
+
) }) }),
|
|
30896
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h4", { className: "text-sm font-bold text-primary", children: "OS Vault Security" }),
|
|
30897
|
+
/* @__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." })
|
|
30898
|
+
] })
|
|
30899
|
+
] }),
|
|
30900
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
30901
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
30902
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
30903
|
+
/* @__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" }),
|
|
30904
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Local-First & Zero Telemetry Architecture" })
|
|
30905
|
+
] }),
|
|
30906
|
+
/* @__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" })
|
|
30907
|
+
] }),
|
|
30908
|
+
/* @__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." }),
|
|
30909
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
30910
|
+
/* @__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" }),
|
|
30911
|
+
/* @__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" }),
|
|
30912
|
+
/* @__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" })
|
|
30913
|
+
] })
|
|
30914
|
+
] }),
|
|
30915
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
30916
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
30917
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
30918
|
+
/* @__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" }),
|
|
30919
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Hardware-Sealed OS Keystore & Token Isolation" })
|
|
30920
|
+
] }),
|
|
30921
|
+
/* @__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" })
|
|
30922
|
+
] }),
|
|
30923
|
+
/* @__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." }),
|
|
30924
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
30925
|
+
/* @__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" }),
|
|
30926
|
+
/* @__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" }),
|
|
30927
|
+
/* @__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" })
|
|
30928
|
+
] })
|
|
30929
|
+
] }),
|
|
30930
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
30931
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
30932
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
30933
|
+
/* @__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" }),
|
|
30934
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Ephemeral AI Assistance & Privacy Guarantees" })
|
|
30935
|
+
] }),
|
|
30936
|
+
/* @__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" })
|
|
30937
|
+
] }),
|
|
30938
|
+
/* @__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." }),
|
|
30939
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
30940
|
+
/* @__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" }),
|
|
30941
|
+
/* @__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" }),
|
|
30942
|
+
/* @__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" })
|
|
30943
|
+
] })
|
|
30944
|
+
] }),
|
|
30945
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
30946
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
30947
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
30948
|
+
/* @__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" }),
|
|
30949
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Zero Surveillance Hardware Access" })
|
|
30950
|
+
] }),
|
|
30951
|
+
/* @__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" })
|
|
30952
|
+
] }),
|
|
30953
|
+
/* @__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." }),
|
|
30954
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
30955
|
+
/* @__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" }),
|
|
30956
|
+
/* @__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" }),
|
|
30957
|
+
/* @__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" })
|
|
30958
|
+
] })
|
|
30959
|
+
] }),
|
|
30960
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 rounded-2xl bg-surface/80 border border-border/80 shadow-sm space-y-3", children: [
|
|
30961
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
|
|
30962
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2.5", children: [
|
|
30963
|
+
/* @__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" }),
|
|
30964
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-sm font-bold text-primary", children: "Institutional Compliance & Corporate Readiness" })
|
|
30965
|
+
] }),
|
|
30966
|
+
/* @__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" })
|
|
30967
|
+
] }),
|
|
30968
|
+
/* @__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." }),
|
|
30969
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap gap-2 pt-1", children: [
|
|
30970
|
+
/* @__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" }),
|
|
30971
|
+
/* @__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" }),
|
|
30972
|
+
/* @__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" })
|
|
30973
|
+
] })
|
|
30974
|
+
] })
|
|
30975
|
+
] }),
|
|
30976
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-8 py-4.5 border-t border-border shrink-0 flex items-center justify-between bg-surface", children: [
|
|
30977
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-secondary font-mono", children: "Document ID: GQP-PRIV-2026.1 • Local-First Architecture Compliance" }),
|
|
30978
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
30979
|
+
"button",
|
|
30980
|
+
{
|
|
30981
|
+
type: "button",
|
|
30982
|
+
onClick: () => setShowPrivacyModal(false),
|
|
30983
|
+
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",
|
|
30984
|
+
children: "Close Trust Center"
|
|
30985
|
+
}
|
|
30986
|
+
)
|
|
30987
|
+
] })
|
|
30988
|
+
] }) }),
|
|
30989
|
+
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: [
|
|
30990
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-5 border-b border-border flex items-center justify-between bg-danger/5", children: [
|
|
30991
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
30992
|
+
/* @__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(
|
|
30993
|
+
"path",
|
|
30994
|
+
{
|
|
30995
|
+
strokeLinecap: "round",
|
|
30996
|
+
strokeLinejoin: "round",
|
|
30997
|
+
strokeWidth: 2,
|
|
30998
|
+
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"
|
|
30999
|
+
}
|
|
31000
|
+
) }) }),
|
|
31001
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
|
|
31002
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("h3", { className: "text-base font-bold text-primary leading-tight", children: "Confirm Force Push Override" }),
|
|
31003
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-danger/80 mt-0.5 font-medium", children: "Destructive Remote Branch Override" })
|
|
31004
|
+
] })
|
|
31005
|
+
] }),
|
|
31006
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31007
|
+
"button",
|
|
31008
|
+
{
|
|
31009
|
+
type: "button",
|
|
31010
|
+
onClick: () => setShowForcePushModal(false),
|
|
31011
|
+
className: "w-8 h-8 rounded-lg text-secondary hover:text-primary hover:bg-surface-hover flex items-center justify-center transition-colors",
|
|
31012
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31013
|
+
"path",
|
|
31014
|
+
{
|
|
31015
|
+
strokeLinecap: "round",
|
|
31016
|
+
strokeLinejoin: "round",
|
|
31017
|
+
strokeWidth: 2,
|
|
31018
|
+
d: "M6 18L18 6M6 6l12 12"
|
|
31019
|
+
}
|
|
31020
|
+
) })
|
|
31021
|
+
}
|
|
31022
|
+
)
|
|
31023
|
+
] }),
|
|
31024
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-6 space-y-4", children: [
|
|
31025
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 rounded-xl bg-danger/10 border border-danger/30 text-xs text-danger leading-relaxed", children: [
|
|
31026
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "font-bold text-sm mb-1 flex items-center gap-1.5", children: [
|
|
31027
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⚠️" }),
|
|
31028
|
+
" Warning: Non-Fast-Forward Overwrite"
|
|
31029
|
+
] }),
|
|
31030
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("p", { children: [
|
|
31031
|
+
"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 ",
|
|
31032
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "font-black underline", children: "permanently lost" }),
|
|
31033
|
+
"."
|
|
31034
|
+
] })
|
|
31035
|
+
] }),
|
|
31036
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 rounded-xl bg-canvas border border-border space-y-2.5 text-xs", children: [
|
|
31037
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31038
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Active Branch:" }),
|
|
31039
|
+
/* @__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" })
|
|
31040
|
+
] }),
|
|
31041
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31042
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Target Remote:" }),
|
|
31043
|
+
/* @__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" })
|
|
31044
|
+
] }),
|
|
31045
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex justify-between items-center", children: [
|
|
31046
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-secondary font-medium", children: "Safety Check:" }),
|
|
31047
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-warning font-semibold", children: "Bypassing Divergence Guards" })
|
|
31048
|
+
] })
|
|
31049
|
+
] })
|
|
31050
|
+
] }),
|
|
31051
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-6 py-4 border-t border-border bg-surface flex items-center justify-end gap-3", children: [
|
|
31052
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31053
|
+
"button",
|
|
31054
|
+
{
|
|
31055
|
+
type: "button",
|
|
31056
|
+
disabled: isExecutingForcePush,
|
|
31057
|
+
onClick: () => setShowForcePushModal(false),
|
|
31058
|
+
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",
|
|
31059
|
+
children: "Cancel"
|
|
31060
|
+
}
|
|
31061
|
+
),
|
|
31062
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31063
|
+
"button",
|
|
31064
|
+
{
|
|
31065
|
+
type: "button",
|
|
31066
|
+
disabled: isExecutingForcePush,
|
|
31067
|
+
onClick: handleExecuteForcePush,
|
|
31068
|
+
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",
|
|
31069
|
+
children: isExecutingForcePush ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
31070
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31071
|
+
"svg",
|
|
31072
|
+
{
|
|
31073
|
+
className: "w-4 h-4 animate-spin",
|
|
31074
|
+
fill: "none",
|
|
31075
|
+
stroke: "currentColor",
|
|
31076
|
+
viewBox: "0 0 24 24",
|
|
31077
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31078
|
+
"path",
|
|
31079
|
+
{
|
|
31080
|
+
strokeLinecap: "round",
|
|
31081
|
+
strokeLinejoin: "round",
|
|
31082
|
+
strokeWidth: 2,
|
|
31083
|
+
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"
|
|
31084
|
+
}
|
|
31085
|
+
)
|
|
31086
|
+
}
|
|
31087
|
+
),
|
|
31088
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Overwriting Remote..." })
|
|
31089
|
+
] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
31090
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
31091
|
+
"path",
|
|
31092
|
+
{
|
|
31093
|
+
strokeLinecap: "round",
|
|
31094
|
+
strokeLinejoin: "round",
|
|
31095
|
+
strokeWidth: 2,
|
|
31096
|
+
d: "M13 10V3L4 14h7v7l9-11h-7z"
|
|
31097
|
+
}
|
|
31098
|
+
) }),
|
|
31099
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Force Push Branch" })
|
|
31100
|
+
] })
|
|
31101
|
+
}
|
|
31102
|
+
)
|
|
31103
|
+
] })
|
|
31104
|
+
] }) }),
|
|
29927
31105
|
/* @__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(
|
|
29928
31106
|
"div",
|
|
29929
31107
|
{
|