gitxelectron 1.3.9 → 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.
@@ -12758,7 +12758,7 @@ function RepositoryWizard({ repoPath, onClose, onSuccess }) {
12758
12758
  });
12759
12759
  }
12760
12760
  }, []);
12761
- const checkAuth = async () => {
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
- const startAuth = async () => {
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.fillStyle = "#0d1117";
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
- currentMode === "retro" && /* @__PURE__ */ jsxRuntimeExports.jsx(RetroSpaceGame, {}),
14294
- currentMode === "2048" && /* @__PURE__ */ jsxRuntimeExports.jsx(LogicGame2048, {}),
14295
- currentMode === "dice" && /* @__PURE__ */ jsxRuntimeExports.jsx(DiceGame, {}),
14296
- currentMode === "none" && /* @__PURE__ */ jsxRuntimeExports.jsx(LiveGitHubSpace, {}),
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
- const reset = () => {
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("pending");
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(async (codeToCopy) => {
23907
- const code = codeToCopy || deviceFlowData?.user_code;
23908
- if (!code) return;
23909
- try {
23910
- await navigator.clipboard.writeText(code);
23911
- setIsCopied(true);
23912
- setTimeout(() => setIsCopied(false), 2500);
23913
- } catch (err) {
23914
- console.warn("Failed to copy to clipboard", err);
23915
- }
23916
- }, [deviceFlowData]);
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(true);
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 ? "Toggle Receipt" : "Print Receipt",
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
- setCollaboratedRepos([]);
26138
- setInvitations([]);
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
- processOfflineQueue();
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
- const refreshRepoState = async () => {
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 (err) {
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 (e) {
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 (e) {
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 (err) {
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 (err) {
26691
+ } catch {
26645
26692
  }
26646
26693
  await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
26647
26694
  setShowAuthModal(false);
@@ -26725,7 +26772,11 @@ Are you SURE you want to link "${repoName}" to this folder?`
26725
26772
  showToast("Resolving conflicts: accepting remote changes...", "info");
26726
26773
  await window.api.executeRawGit(["checkout", "--theirs", "."]);
26727
26774
  await window.api.executeRawGit(["add", "."]);
26728
- await window.api.executeRawGit(["commit", "-m", "Resolved conflicts (accepted remote changes)"]);
26775
+ await window.api.executeRawGit([
26776
+ "commit",
26777
+ "-m",
26778
+ "Resolved conflicts (accepted remote changes)"
26779
+ ]);
26729
26780
  setPushFailureData(null);
26730
26781
  await refreshRepoState();
26731
26782
  showToast("✅ Conflicts resolved (accepted remote changes)", "success");
@@ -26819,11 +26870,17 @@ Are you SURE you want to link "${repoName}" to this folder?`
26819
26870
  }
26820
26871
  const isConflictErr = currentError.includes("unmerged files") || currentError.includes("unresolved conflict") || currentError.includes("automatic merge failed") || currentError.includes("you have unmerged paths");
26821
26872
  if (isConflictErr) {
26822
- setHealerMessage("Unmerged conflict detected. Automatically resolving conflicted files...");
26873
+ setHealerMessage(
26874
+ "Unmerged conflict detected. Automatically resolving conflicted files..."
26875
+ );
26823
26876
  try {
26824
26877
  await window.api.executeRawGit(["checkout", "--ours", "."]);
26825
26878
  await window.api.executeRawGit(["add", "."]);
26826
- await window.api.executeRawGit(["commit", "-m", "Auto-resolved conflicts: kept local changes"]);
26879
+ await window.api.executeRawGit([
26880
+ "commit",
26881
+ "-m",
26882
+ "Auto-resolved conflicts: kept local changes"
26883
+ ]);
26827
26884
  } catch {
26828
26885
  try {
26829
26886
  await window.api.executeRawGit(["merge", "--abort"]);
@@ -26939,7 +26996,12 @@ Are you SURE you want to link "${repoName}" to this folder?`
26939
26996
  repository: repoPath?.split("\\").pop() || "",
26940
26997
  branch: branches.current,
26941
26998
  files: status.staged.length,
26942
- 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"
26943
27005
  });
26944
27006
  setCommitMessage("");
26945
27007
  setShowConfirmPush(false);
@@ -26972,7 +27034,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
26972
27034
  setShowAuthModal(true);
26973
27035
  try {
26974
27036
  await navigator.clipboard.writeText(data.user_code);
26975
- } catch (err) {
27037
+ } catch {
26976
27038
  }
26977
27039
  await window.api.pollDeviceFlow(data.device_code, data.interval * 1e3);
26978
27040
  setShowAuthModal(false);
@@ -26995,7 +27057,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
26995
27057
  try {
26996
27058
  name = await window.api.getGitConfig("user.name");
26997
27059
  email = await window.api.getGitConfig("user.email");
26998
- } catch (e) {
27060
+ } catch {
26999
27061
  }
27000
27062
  if ((!name || !email) && accounts.length > 0) {
27001
27063
  const activeAcc = accounts.find((a) => a.id === activeAccountId) || accounts[0];
@@ -27023,13 +27085,34 @@ Are you SURE you want to link "${repoName}" to this folder?`
27023
27085
  document.documentElement.setAttribute("data-theme", theme);
27024
27086
  setShowSettings(false);
27025
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
+ };
27026
27109
  const viewDiff = async (file, staged) => {
27027
27110
  setDiffFile(file);
27028
27111
  try {
27029
27112
  const diffStr = await window.api.getFileDiff(file, staged);
27030
27113
  setDiffContent(diffStr || "No changes to display.");
27031
27114
  setShowDiff(true);
27032
- } catch (e) {
27115
+ } catch {
27033
27116
  showToast("Failed to get diff", "error");
27034
27117
  }
27035
27118
  };
@@ -27137,8 +27220,9 @@ Are you SURE you want to link "${repoName}" to this folder?`
27137
27220
  onDragLeave: handleDragLeave,
27138
27221
  onDrop: handleDrop,
27139
27222
  children: [
27140
- (showSettings ? draftTheme : theme) === "among-us-live" && /* @__PURE__ */ jsxRuntimeExports.jsx(AmongUsBackground, {}),
27141
- (showSettings ? draftTheme : theme) === "space-explorer-3d" && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceExplorerBackground, {}),
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, {}),
27142
27226
  showWelcomeWizard && /* @__PURE__ */ jsxRuntimeExports.jsx(WelcomeWizard, { onComplete: () => setShowWelcomeWizard(false) }),
27143
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: [
27144
27228
  /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold text-danger mb-4", children: "Git Error" }),
@@ -27201,7 +27285,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
27201
27285
  ] })
27202
27286
  ] }) }),
27203
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: [
27204
- enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceScene, { fullScreen: true, onGameActiveChange: setIsGameActive }),
27288
+ !liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
27289
+ SpaceScene,
27290
+ {
27291
+ fullScreen: true,
27292
+ liteMode,
27293
+ onGameActiveChange: setIsGameActive
27294
+ }
27295
+ ),
27205
27296
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27206
27297
  "div",
27207
27298
  {
@@ -27283,258 +27374,479 @@ Are you SURE you want to link "${repoName}" to this folder?`
27283
27374
  ] }),
27284
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" }),
27285
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" }),
27286
- showSettings && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 transition-opacity p-4 md:p-8", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/95 backdrop-blur-xl rounded-2xl shadow-2xl border border-border w-full max-w-[900px] animate-float max-h-[95vh] flex flex-col overflow-hidden", children: [
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: [
27287
27378
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27288
27379
  "div",
27289
27380
  {
27290
- className: "px-8 py-6 border-b border-border shrink-0 flex items-center gap-3",
27381
+ className: "px-8 py-5 border-b border-border shrink-0 flex items-center justify-between",
27291
27382
  style: { backgroundColor: "var(--color-surface)" },
27292
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: [
27293
27434
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27294
- "svg",
27435
+ "button",
27295
27436
  {
27296
- className: "w-6 h-6 text-brand",
27297
- fill: "none",
27298
- stroke: "currentColor",
27299
- 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"}`,
27300
27440
  children: [
27301
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27302
- "path",
27441
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
27442
+ "svg",
27303
27443
  {
27304
- strokeLinecap: "round",
27305
- strokeLinejoin: "round",
27306
- strokeWidth: 2,
27307
- 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"
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
+ ]
27308
27468
  }
27309
27469
  ),
27310
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27311
- "path",
27312
- {
27313
- strokeLinecap: "round",
27314
- strokeLinejoin: "round",
27315
- strokeWidth: 2,
27316
- d: "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
27317
- }
27318
- )
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
+ ] })
27319
27480
  ]
27320
27481
  }
27321
27482
  ),
27322
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-2xl font-black text-primary m-0", children: t("settings") })
27323
- ]
27324
- }
27325
- ),
27326
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex-1 overflow-y-auto custom-scrollbar p-6 md:p-8 bg-black/10", children: [
27327
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-6 mb-4", children: [
27328
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
27329
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
27330
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
27331
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🎨" }),
27332
- " Preferences"
27333
- ] }),
27334
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
27335
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27336
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("language") }),
27337
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27338
- CustomDropdown,
27339
- {
27340
- options: LANGUAGES.map((l) => ({ value: l.id, label: l.name })),
27341
- value: draftLang,
27342
- onChange: (val) => setDraftLang(val),
27343
- buttonClassName: "w-full bg-surface border border-border rounded-lg p-2.5 text-primary focus:outline-none focus:border-accent transition-all cursor-pointer font-medium text-sm"
27344
- }
27345
- )
27346
- ] }),
27347
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27348
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("theme") }),
27349
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27350
- CustomDropdown,
27351
- {
27352
- options: THEMES.map((t2) => ({ value: t2.id, label: t2.name })),
27353
- value: draftTheme,
27354
- onChange: (val) => {
27355
- setDraftTheme(val);
27356
- document.documentElement.setAttribute("data-theme", val);
27357
- },
27358
- buttonClassName: "w-full bg-surface border border-border rounded-lg p-2.5 text-primary focus:outline-none focus:border-accent transition-all cursor-pointer font-medium text-sm"
27359
- }
27360
- )
27361
- ] })
27362
- ] })
27363
- ] }),
27364
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
27365
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
27366
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "👤" }),
27367
- " Git Profile"
27368
- ] }),
27369
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [
27370
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27371
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("gitUsername") }),
27372
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27373
- "input",
27374
- {
27375
- type: "text",
27376
- value: gitConfig.name,
27377
- readOnly: true,
27378
- className: "w-full bg-surface border border-border rounded-lg p-2.5 text-secondary cursor-not-allowed focus:outline-none font-medium text-sm"
27379
- }
27380
- )
27381
- ] }),
27382
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27383
- /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold uppercase", children: t("gitEmail") }),
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: [
27384
27490
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27385
- "input",
27491
+ "svg",
27386
27492
  {
27387
- type: "email",
27388
- value: gitConfig.email,
27389
- readOnly: true,
27390
- className: "w-full bg-surface border border-border rounded-lg p-2.5 text-secondary cursor-not-allowed focus:outline-none font-medium text-sm"
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
+ )
27391
27506
  }
27392
27507
  ),
27393
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-[10px] text-brand mt-1.5 font-medium", children: t("syncedFromGithub") })
27394
- ] })
27395
- ] })
27396
- ] })
27397
- ] }),
27398
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-6", children: [
27399
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
27400
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary mb-4 flex items-center gap-2 uppercase tracking-wider", children: [
27401
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🛡️" }),
27402
- " Security & Features"
27403
- ] }),
27404
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "space-y-5", children: [
27405
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between", children: [
27406
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
27407
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("dailyMobileVerification") }),
27408
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("dailyMobileDesc") })
27409
- ] }),
27410
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
27508
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
27509
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Accounts & Git" }),
27411
27510
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27412
- "input",
27511
+ "div",
27413
27512
  {
27414
- className: "toggle",
27415
- type: "checkbox",
27416
- checked: draftDailyAuth,
27417
- onChange: (e) => {
27418
- const next = e.target.checked;
27419
- setDraftDailyAuth(next);
27420
- }
27513
+ className: `text-[10px] font-normal ${settingsTab === "accounts" ? "text-white/80" : "text-secondary/70"}`,
27514
+ children: "GitHub profile & author"
27421
27515
  }
27422
- ),
27423
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
27424
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
27516
+ )
27425
27517
  ] })
27426
- ] }),
27427
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/50 pt-5 flex items-center justify-between", children: [
27428
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "pr-4", children: [
27429
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("enableSpaceScene") }),
27430
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("spaceSceneDesc") })
27431
- ] }),
27432
- /* @__PURE__ */ jsxRuntimeExports.jsxs("label", { className: "switch shrink-0", children: [
27433
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27434
- "input",
27435
- {
27436
- className: "toggle",
27437
- type: "checkbox",
27438
- checked: draftLockscreenSpace,
27439
- onChange: (e) => {
27440
- const next = e.target.checked;
27441
- setDraftLockscreenSpace(next);
27518
+ ]
27519
+ }
27520
+ ),
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: [
27528
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
27529
+ "svg",
27530
+ {
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"
27442
27542
  }
27443
- }
27444
- ),
27445
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "slider" }),
27446
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "card-side" })
27447
- ] })
27448
- ] }),
27449
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-5", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
27450
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27451
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-semibold text-primary", children: t("changeLockscreenPin") }),
27452
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-1", children: t("changePinDesc") })
27453
- ] }),
27454
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-2", children: [
27455
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27456
- "input",
27457
- {
27458
- type: "password",
27459
- maxLength: 3,
27460
- value: newPin,
27461
- onChange: (e) => setNewPin(e.target.value),
27462
- placeholder: "***",
27463
- className: "bg-surface border border-border rounded-lg px-3 py-2 text-sm text-primary w-24 outline-none focus:border-accent text-center tracking-widest font-black"
27464
- }
27465
- ),
27543
+ )
27544
+ }
27545
+ ),
27546
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "text-left", children: [
27547
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "font-bold", children: "Security & Privacy" }),
27466
27548
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27467
- "button",
27549
+ "div",
27468
27550
  {
27469
- type: "button",
27470
- onClick: () => {
27471
- if (newPin.length === 3) {
27472
- localStorage.setItem("gitelectron-pin", newPin);
27473
- setStoredPin(newPin);
27474
- setPinChangeSuccess(true);
27475
- setTimeout(() => setPinChangeSuccess(false), 2e3);
27476
- setNewPin("");
27477
- }
27478
- },
27479
- disabled: newPin.length !== 3,
27480
- className: "px-4 py-2 bg-accent text-canvas text-xs font-black rounded-lg hover:bg-accent/90 transition-colors disabled:opacity-50 uppercase",
27481
- children: pinChangeSuccess ? t("saved") : t("savePin")
27551
+ className: `text-[10px] font-normal ${settingsTab === "security" ? "text-white/80" : "text-secondary/70"}`,
27552
+ children: "PIN, 2FA, zero telemetry"
27482
27553
  }
27483
27554
  )
27484
27555
  ] })
27485
- ] }) })
27486
- ] })
27487
- ] }),
27488
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-canvas/40 p-5 rounded-xl border border-border/50", children: [
27489
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-4", children: [
27490
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-bold text-primary flex items-center gap-2 uppercase tracking-wider", children: [
27491
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "👥" }),
27492
- " ",
27493
- t("githubAccounts")
27494
- ] }),
27495
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
27496
- "button",
27497
- {
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: [
27566
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
27567
+ "svg",
27568
+ {
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
+ )
27582
+ }
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" })
27734
+ ] })
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." })
27742
+ ] }),
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") })
27750
+ ] }),
27751
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-5", children: [
27752
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27753
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitUsername") }),
27754
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
27755
+ "input",
27756
+ {
27757
+ type: "text",
27758
+ value: gitConfig.name,
27759
+ readOnly: true,
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"
27761
+ }
27762
+ )
27763
+ ] }),
27764
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27765
+ /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: "block text-secondary mb-1.5 text-xs font-semibold", children: t("gitEmail") }),
27766
+ /* @__PURE__ */ jsxRuntimeExports.jsx(
27767
+ "input",
27768
+ {
27769
+ type: "email",
27770
+ value: gitConfig.email,
27771
+ readOnly: true,
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"
27773
+ }
27774
+ )
27775
+ ] })
27776
+ ] })
27777
+ ] }),
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" })
27783
+ ] }),
27784
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
27785
+ "button",
27786
+ {
27498
27787
  type: "button",
27499
27788
  onClick: () => {
27500
27789
  cancelSettings();
27501
27790
  handleStartAuth();
27502
27791
  },
27503
- className: "px-3 py-1.5 bg-brand text-white hover:bg-brand text-white text-brand text-xs font-bold rounded-lg border border-brand/20 transition-colors",
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",
27504
27793
  children: [
27505
- "+ ",
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
+ ),
27506
27812
  t("addAccount")
27507
27813
  ]
27508
27814
  }
27509
27815
  )
27510
27816
  ] }),
27511
- accounts.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-center p-6 border border-dashed border-border/50 rounded-xl bg-surface/30", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-sm font-medium text-secondary", children: t("noAccountsLinked") }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "space-y-2 max-h-40 overflow-y-auto pr-1 custom-scrollbar mb-4", children: accounts.map((acc) => /* @__PURE__ */ jsxRuntimeExports.jsxs(
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(
27512
27821
  "div",
27513
27822
  {
27514
- className: "flex items-center justify-between p-3 border border-border/80 rounded-xl bg-surface hover:border-brand/50 transition-colors",
27823
+ className: "flex items-center justify-between p-4 border border-border rounded-xl bg-canvas/40 hover:border-brand/40 transition-colors",
27515
27824
  children: [
27516
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [
27825
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3.5", children: [
27517
27826
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27518
27827
  "img",
27519
27828
  {
27520
27829
  src: acc.avatar_url || `https://github.com/${acc.username}.png`,
27521
27830
  alt: acc.username,
27522
- className: "w-8 h-8 rounded-full object-cover border-2 border-border"
27831
+ className: "w-10 h-10 rounded-full object-cover border border-border"
27523
27832
  }
27524
27833
  ),
27525
- /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-sm font-bold text-primary", children: [
27526
- "@",
27527
- acc.username
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" })
27528
27840
  ] })
27529
27841
  ] }),
27530
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [
27531
- activeAccountId === acc.id && /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[10px] uppercase font-black text-success bg-success/10 px-2 py-1 rounded-md border border-success/20", children: "Active" }),
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" }),
27532
27844
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27533
27845
  "button",
27534
27846
  {
27535
27847
  type: "button",
27536
27848
  onClick: () => window.api.openExternal(`https://github.com/${acc.username}`),
27537
- className: "px-2.5 py-1 border border-border hover:border-brand hover:text-brand text-secondary text-[10px] uppercase font-bold rounded-md transition-all",
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",
27538
27850
  children: "Profile"
27539
27851
  }
27540
27852
  )
@@ -27543,7 +27855,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
27543
27855
  },
27544
27856
  acc.id
27545
27857
  )) }),
27546
- authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-4 mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
27858
+ authStatus.status === "Verified" && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "border-t border-border/50 pt-5 mt-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
27547
27859
  "button",
27548
27860
  {
27549
27861
  type: "button",
@@ -27561,7 +27873,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
27561
27873
  showToast("Logout failed", "error");
27562
27874
  }
27563
27875
  },
27564
- className: "w-full py-2.5 bg-danger/10 hover:bg-danger/20 text-danger text-sm font-bold rounded-lg border border-danger/30 hover:border-danger/50 transition-all flex items-center justify-center gap-2",
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",
27565
27877
  children: [
27566
27878
  /* @__PURE__ */ jsxRuntimeExports.jsx(
27567
27879
  "svg",
@@ -27586,74 +27898,324 @@ Are you SURE you want to link "${repoName}" to this folder?`
27586
27898
  }
27587
27899
  ) })
27588
27900
  ] })
27589
- ] })
27590
- ] }),
27591
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "bg-danger/10 p-5 rounded-xl border border-danger/30 mb-8 mt-2", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center justify-between gap-4", children: [
27592
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
27593
- /* @__PURE__ */ jsxRuntimeExports.jsxs("h3", { className: "text-sm font-black text-danger flex items-center gap-2 uppercase tracking-wider mb-1", children: [
27594
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⚠️" }),
27595
- " Emergency Override (Master Push)"
27596
- ] }),
27597
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs font-medium text-danger/80 leading-relaxed max-w-2xl", children: "Bypass all protections, ignore unpushed changes or missing files, and FORCE push all current files. Warning: This completely overwrites remote history." })
27598
27901
  ] }),
27599
- /* @__PURE__ */ jsxRuntimeExports.jsxs(
27600
- "button",
27601
- {
27602
- type: "button",
27603
- onClick: async () => {
27604
- const confirmAction = window.confirm(
27605
- "Are you sure? This will force push all current files, overriding remote history and bypassing all safety checks."
27606
- );
27607
- if (!confirmAction) return;
27608
- try {
27609
- const remotes = await window.api.getRemotes();
27610
- if (!remotes || remotes.length === 0) {
27611
- showToast("No remote configured to push to.", "error");
27612
- return;
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)
27613
27920
  }
27614
- showToast("Executing Master Push override...", "info");
27615
- await window.api.masterPush(remotes[0].name, status?.current || "main");
27616
- showToast("Master Push successful!", "success");
27617
- refreshRepoState();
27618
- cancelSettings();
27619
- } catch (err) {
27620
- showToast(
27621
- "Master Push failed: " + (err.message || "Unknown error"),
27622
- "error"
27623
- );
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
+ ]
27624
28015
  }
27625
- },
27626
- className: "shrink-0 px-6 py-3 bg-danger text-white text-xs font-black uppercase tracking-wider rounded-xl hover:bg-danger/80 border-b-4 border-black/30 active:border-b-0 active:translate-y-1 transition-all flex items-center justify-center gap-2",
27627
- children: [
27628
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "🚀" }),
27629
- " FORCE PUSH"
27630
- ]
27631
- }
27632
- )
27633
- ] }) })
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
+ ] })
27634
28191
  ] }),
27635
28192
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27636
28193
  "div",
27637
28194
  {
27638
- className: "px-8 py-5 border-t border-border shrink-0 flex justify-end gap-3",
28195
+ className: "px-8 py-4.5 border-t border-border shrink-0 flex items-center justify-between",
27639
28196
  style: { backgroundColor: "var(--color-surface)" },
27640
28197
  children: [
27641
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27642
- "button",
27643
- {
27644
- onClick: () => cancelSettings(),
27645
- className: "px-6 py-2.5 bg-surface border-2 border-border hover:bg-surface-hover rounded-xl transition-all font-bold text-sm",
27646
- children: t("cancel")
27647
- }
27648
- ),
27649
- /* @__PURE__ */ jsxRuntimeExports.jsx(
27650
- "button",
27651
- {
27652
- onClick: saveSettings,
27653
- className: "px-8 py-2.5 bg-brand hover:bg-brand-hover text-white rounded-xl transition-all font-black text-sm shadow-lg shadow-brand/20 border-b-4 border-black/20 active:border-b-0 active:translate-y-1",
27654
- children: t("save")
27655
- }
27656
- )
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
+ ] })
27657
28219
  ]
27658
28220
  }
27659
28221
  )
@@ -27804,21 +28366,21 @@ Are you SURE you want to link "${repoName}" to this folder?`
27804
28366
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "mx-2", children: "•" }),
27805
28367
  new Date(commit.date).toLocaleString()
27806
28368
  ] }),
27807
- commit.diff && commit.diff.files && commit.diff.files.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(
28369
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
27808
28370
  "button",
27809
28371
  {
27810
28372
  onClick: () => toggleCommit(commit.hash),
27811
- className: "text-[10px] font-medium text-accent hover:text-primary transition-colors flex items-center gap-1.5 bg-accent/5 hover:bg-accent/10 px-2 py-1 rounded-md border border-accent/20",
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",
27812
28375
  children: [
27813
28376
  expandedCommits[commit.hash] ? "Hide" : "View",
27814
28377
  " ",
27815
- commit.diff.changed,
27816
- " files",
27817
- 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: [
27818
28380
  commit.diff.insertions,
27819
28381
  " ++"
27820
28382
  ] }),
27821
- commit.diff.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-danger", children: [
28383
+ commit.diff?.deletions > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { className: "text-danger", children: [
27822
28384
  commit.diff.deletions,
27823
28385
  " --"
27824
28386
  ] })
@@ -27826,7 +28388,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
27826
28388
  }
27827
28389
  )
27828
28390
  ] }),
27829
- expandedCommits[commit.hash] && commit.diff && commit.diff.files && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mt-4 flex justify-center pb-8 border-t border-border/40 pt-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
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(
27830
28392
  CommitReceiptPrinter,
27831
28393
  {
27832
28394
  commit,
@@ -27839,7 +28401,14 @@ Are you SURE you want to link "${repoName}" to this folder?`
27839
28401
  )) })
27840
28402
  ] }) }),
27841
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: [
27842
- enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(SpaceScene, { fullScreen: true, onGameActiveChange: setIsGameActive }),
28404
+ !liteMode && enableLockscreenSpace && /* @__PURE__ */ jsxRuntimeExports.jsx(
28405
+ SpaceScene,
28406
+ {
28407
+ fullScreen: true,
28408
+ liteMode,
28409
+ onGameActiveChange: setIsGameActive
28410
+ }
28411
+ ),
27843
28412
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
27844
28413
  "div",
27845
28414
  {
@@ -28185,6 +28754,26 @@ Are you SURE you want to link "${repoName}" to this folder?`
28185
28754
  '"'
28186
28755
  ] })
28187
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
+ ] }),
28188
28777
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mt-4 flex items-center gap-2", children: [
28189
28778
  /* @__PURE__ */ jsxRuntimeExports.jsx(
28190
28779
  "input",
@@ -28220,7 +28809,7 @@ Are you SURE you want to link "${repoName}" to this folder?`
28220
28809
  )
28221
28810
  ] })
28222
28811
  ] }) }),
28223
- pushSuccessData && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "bg-surface/95 backdrop-blur-xl p-8 rounded-xl shadow-2xl border border-border w-full max-w-[450px] mx-4 animate-float text-center", children: [
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: [
28224
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(
28225
28814
  "path",
28226
28815
  {
@@ -28230,8 +28819,8 @@ Are you SURE you want to link "${repoName}" to this folder?`
28230
28819
  d: "M5 13l4 4L19 7"
28231
28820
  }
28232
28821
  ) }) }),
28233
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold mb-4 text-primary", children: "Push Successful" }),
28234
- /* @__PURE__ */ jsxRuntimeExports.jsxs("p", { className: "text-secondary mb-6 text-sm leading-relaxed", children: [
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: [
28235
28824
  "Successfully pushed",
28236
28825
  " ",
28237
28826
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-primary font-medium", children: pushSuccessData.files }),
@@ -28243,11 +28832,36 @@ Are you SURE you want to link "${repoName}" to this folder?`
28243
28832
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "font-mono text-primary", children: pushSuccessData.repository }),
28244
28833
  "."
28245
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
+ ] }),
28246
28860
  /* @__PURE__ */ jsxRuntimeExports.jsx(
28247
28861
  "button",
28248
28862
  {
28249
28863
  onClick: () => setPushSuccessData(null),
28250
- className: "w-full py-2 bg-surface-hover border border-border text-primary rounded-md font-semibold transition-colors text-sm",
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",
28251
28865
  children: "Done"
28252
28866
  }
28253
28867
  )
@@ -28258,192 +28872,227 @@ Are you SURE you want to link "${repoName}" to this folder?`
28258
28872
  );
28259
28873
  const isPull = pushFailureData.operation === "pull" || pushFailureData.reason?.includes("pull-from-remote");
28260
28874
  const cleanedReason = formatErrorMessage(pushFailureData.reason);
28261
- return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "absolute inset-0 bg-black/60 backdrop-blur-sm flex items-center justify-center z-50 p-4", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { 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`, children: [
28262
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: `flex items-center gap-3 mb-4 ${isConflict ? "text-amber-500" : "text-danger"}`, children: [
28263
- isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "w-6 h-6 flex-shrink-0", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [
28264
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "18", cy: "18", r: "3" }),
28265
- /* @__PURE__ */ jsxRuntimeExports.jsx("circle", { cx: "6", cy: "6", r: "3" }),
28266
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M6 9v12" }),
28267
- /* @__PURE__ */ jsxRuntimeExports.jsx("path", { d: "M18 9a9 9 0 0 0-9 9" })
28268
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-6 h-6 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
28269
- "path",
28270
- {
28271
- strokeLinecap: "round",
28272
- strokeLinejoin: "round",
28273
- strokeWidth: 2,
28274
- d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
28275
- }
28276
- ) }),
28277
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [
28278
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "text-xl font-bold tracking-tight", children: isConflict ? "Merge Conflict Detected" : isPull ? "Pull Failed" : "Push Rejected" }),
28279
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-secondary mt-0.5", children: isConflict ? "Unmerged files prevent Git from syncing automatically." : isPull ? "Unable to pull incoming commits from the remote repository." : "Remote repository rejected your push request." })
28280
- ] })
28281
- ] }),
28282
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "mb-4 bg-canvas/80 border border-border p-3.5 rounded-lg max-h-36 overflow-y-auto custom-scrollbar", children: /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-primary font-mono text-xs leading-relaxed whitespace-pre-wrap select-text", children: cleanedReason }) }),
28283
- /* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-secondary mb-5 text-sm leading-relaxed", children: isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
28284
- "Choose a resolution below: let ",
28285
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { className: "text-primary font-semibold", children: "AI Auto-Healer" }),
28286
- " intelligently reconcile conflicts, keep your local changes, accept remote incoming changes, or abort the merge to revert to the previous state."
28287
- ] }) : isPull ? /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Failed to pull latest changes from the remote repository. Check your connection or use the AI Auto-Healer to analyze and fix the issue." }) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: "Recommendation: You can pull the latest changes from the remote to reconcile your local branch, or you can use the AI Auto-Healer to analyze and fix the issue automatically." }) }),
28288
- isConflict ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-2.5", children: [
28289
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28290
- "button",
28291
- {
28292
- onClick: () => {
28293
- const data = pushFailureData;
28294
- setPushFailureData(null);
28295
- autonomousHealAndPush(
28296
- data.reason,
28297
- data.operation || "pull",
28298
- data.overrideRepoPath,
28299
- data.overrideBranch
28300
- );
28301
- },
28302
- className: "w-full py-2.5 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-brand/20 active:scale-[0.99]",
28303
- children: "✨ Auto-Resolve with AI"
28304
- }
28305
- ),
28306
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "grid grid-cols-3 gap-2", children: [
28307
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28308
- "button",
28309
- {
28310
- onClick: handleResolveConflictOurs,
28311
- className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
28312
- title: "Keep local changes and discard remote changes",
28313
- children: "Keep Local (Ours)"
28314
- }
28315
- ),
28316
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28317
- "button",
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",
28318
28882
  {
28319
- onClick: handleResolveConflictTheirs,
28320
- className: "py-2 px-2 bg-surface hover:bg-surface-hover border border-border text-primary rounded-md font-semibold transition-all text-xs text-center hover:border-brand/40",
28321
- title: "Accept remote incoming changes and discard local changes",
28322
- children: "Accept Remote (Theirs)"
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
+ ]
28323
28925
  }
28324
28926
  ),
28325
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28326
- "button",
28327
- {
28328
- onClick: handleAbortMerge,
28329
- className: "py-2 px-2 bg-danger/10 hover:bg-danger/20 border border-danger/30 text-danger rounded-md font-semibold transition-all text-xs text-center",
28330
- title: "Abort the merge and revert repository to previous state",
28331
- children: "Abort Merge"
28332
- }
28333
- )
28334
- ] }),
28335
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28336
- "button",
28337
- {
28338
- onClick: () => {
28339
- setPushFailureData(null);
28340
- setChangesTab("changes");
28341
- },
28342
- className: "w-full py-2 bg-surface hover:bg-surface-hover border border-border text-secondary hover:text-primary rounded-md font-medium transition-colors text-xs text-center",
28343
- children: "Review Conflicted Files Manually in Changes Tab"
28344
- }
28345
- ),
28346
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28347
- "button",
28348
- {
28349
- onClick: async () => {
28350
- const data = pushFailureData;
28351
- setPushFailureData(null);
28352
- try {
28353
- const remotes = await window.api.getRemotes();
28354
- const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
28355
- const targetBranch = data?.overrideBranch || "main";
28356
- await window.api.masterPush(targetRemote, targetBranch);
28357
- setPushSuccessData({
28358
- files: "All",
28359
- branch: targetBranch,
28360
- repository: targetRemote
28361
- });
28362
- } catch (err) {
28363
- setPushFailureData({
28364
- reason: err.message || "Master Force Push Failed",
28365
- operation: "push",
28366
- overrideRepoPath: data?.overrideRepoPath,
28367
- overrideBranch: data?.overrideBranch
28368
- });
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"
28369
28991
  }
28370
- },
28371
- className: "w-full mt-2 py-2.5 bg-danger/20 hover:bg-danger/30 border border-danger/50 text-danger rounded-md font-bold transition-all text-sm flex items-center justify-center gap-2 shadow-lg shadow-danger/10 active:scale-[0.99]",
28372
- title: "Force push everything (including ignored files) bypassing all rules",
28373
- children: "⚡ Master Force Push (Override All)"
28374
- }
28375
- )
28376
- ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col gap-3", children: [
28377
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex gap-3", children: [
28378
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28379
- "button",
28380
- {
28381
- onClick: () => {
28382
- const data = pushFailureData;
28383
- setPushFailureData(null);
28384
- autonomousHealAndPush(
28385
- data.reason,
28386
- data.operation || (isPull ? "pull" : "push"),
28387
- data.overrideRepoPath,
28388
- data.overrideBranch
28389
- );
28390
- },
28391
- className: "flex-1 py-2 bg-brand hover:bg-brand-hover border border-white/10 text-white rounded-md font-semibold transition-all text-sm flex items-center justify-center gap-2 active:scale-[0.99]",
28392
- children: "✨ Fix with AI"
28393
- }
28394
- ),
28395
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28396
- "button",
28397
- {
28398
- onClick: () => {
28399
- setPushFailureData(null);
28400
- handlePull();
28401
- },
28402
- 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]",
28403
- children: isPull ? "Retry Pull" : "Pull Changes"
28404
- }
28405
- ),
28406
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28407
- "button",
28408
- {
28409
- onClick: () => setPushFailureData(null),
28410
- 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]",
28411
- children: "Cancel"
28412
- }
28413
- )
28414
- ] }),
28415
- /* @__PURE__ */ jsxRuntimeExports.jsx(
28416
- "button",
28417
- {
28418
- onClick: async () => {
28419
- const data = pushFailureData;
28420
- setPushFailureData(null);
28421
- try {
28422
- const remotes = await window.api.getRemotes();
28423
- const targetRemote = data?.overrideRepoPath || remotes[0]?.name || "origin";
28424
- const targetBranch = data?.overrideBranch || "main";
28425
- await window.api.masterPush(targetRemote, targetBranch);
28426
- setPushSuccessData({
28427
- files: "All",
28428
- branch: targetBranch,
28429
- repository: targetRemote
28430
- });
28431
- } catch (err) {
28432
- setPushFailureData({
28433
- reason: err.message || "Master Force Push Failed",
28434
- operation: "push",
28435
- overrideRepoPath: data?.overrideRepoPath,
28436
- overrideBranch: data?.overrideBranch
28437
- });
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)"
28438
29021
  }
28439
- },
28440
- 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]",
28441
- title: "Force push everything (including ignored files) bypassing all rules",
28442
- children: "⚡ Master Force Push (Override All)"
28443
- }
28444
- )
28445
- ] })
28446
- ] }) });
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
+ ) });
28447
29096
  })(),
28448
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: [
28449
29098
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3 mb-6 p-1", children: [
@@ -29073,6 +29722,35 @@ Are you SURE you want to link "${repoName}" to this folder?`
29073
29722
  "Refresh"
29074
29723
  ]
29075
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
+ }
29076
29754
  )
29077
29755
  ] })
29078
29756
  ] }),
@@ -30085,7 +30763,10 @@ Are you SURE you want to link "${repoName}" to this folder?`
30085
30763
  onClick: async () => {
30086
30764
  try {
30087
30765
  await window.api.acceptInvitation(inv.id);
30088
- showToast(`Invitation accepted for ${inv.repository.full_name}!`, "success");
30766
+ showToast(
30767
+ `Invitation accepted for ${inv.repository.full_name}!`,
30768
+ "success"
30769
+ );
30089
30770
  setShowInvitationsModal(false);
30090
30771
  setShowCollabActionModal({
30091
30772
  name: inv.repository.name,
@@ -30139,6 +30820,288 @@ Are you SURE you want to link "${repoName}" to this folder?`
30139
30820
  }
30140
30821
  )
30141
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
+ ] }) }),
30142
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(
30143
31106
  "div",
30144
31107
  {