gitxelectron 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14437,7 +14437,7 @@ function ContributorsModal({ onClose, remoteUrl }) {
14437
14437
  disabled: adding || loading
14438
14438
  }
14439
14439
  ),
14440
- showSuggestions && suggestions.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-full left-0 right-0 mt-1 bg-surface border border-border rounded-lg shadow-2xl overflow-hidden z-20 max-h-64 overflow-y-auto custom-scrollbar", children: [
14440
+ showSuggestions && suggestions.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "absolute top-full left-0 right-0 mt-1 bg-canvas border border-border rounded-lg shadow-2xl overflow-hidden z-50 max-h-64 overflow-y-auto custom-scrollbar", children: [
14441
14441
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "px-3 py-1.5 bg-canvas/80 text-[10px] uppercase font-bold text-secondary tracking-wider border-b border-border flex items-center justify-between", children: [
14442
14442
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Worldwide GitHub Accounts" }),
14443
14443
  /* @__PURE__ */ jsxRuntimeExports.jsxs("span", { children: [
@@ -24230,7 +24230,8 @@ const CollaborationRepoView = ({
24230
24230
  isRefreshing,
24231
24231
  onOpenExternal,
24232
24232
  onUnlinkMapping,
24233
- onChangeFolder
24233
+ onChangeFolder,
24234
+ onSyncCollabRepo
24234
24235
  }) => {
24235
24236
  const filteredRepos = collaboratedRepos.filter((repo) => {
24236
24237
  if (!collabSearch.trim()) return true;
@@ -24470,7 +24471,7 @@ const CollaborationRepoView = ({
24470
24471
  )
24471
24472
  ] }),
24472
24473
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "text-xs text-secondary line-clamp-2 min-h-[34px] break-words leading-relaxed", children: repo.description || /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "italic text-secondary/50", children: "No repository description provided." }) }),
24473
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/60 pt-3 flex flex-col sm:flex-row sm:items-center justify-between gap-2.5 min-w-0", children: [
24474
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border-t border-border/60 pt-3 flex flex-wrap items-center justify-between gap-3 min-w-0", children: [
24474
24475
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "min-w-0 flex-1", children: savedPath ? isMissing ? /* @__PURE__ */ jsxRuntimeExports.jsxs(
24475
24476
  "div",
24476
24477
  {
@@ -24495,7 +24496,7 @@ const CollaborationRepoView = ({
24495
24496
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "w-1.5 h-1.5 rounded-full bg-secondary/40" }),
24496
24497
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Not cloned yet" })
24497
24498
  ] }) }),
24498
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-1.5 flex-shrink-0 self-end sm:self-center", children: [
24499
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center justify-end gap-1.5 flex-shrink-0", children: [
24499
24500
  /* @__PURE__ */ jsxRuntimeExports.jsxs(
24500
24501
  "button",
24501
24502
  {
@@ -24512,6 +24513,22 @@ const CollaborationRepoView = ({
24512
24513
  ]
24513
24514
  }
24514
24515
  ),
24516
+ savedPath && !isMissing && onSyncCollabRepo && /* @__PURE__ */ jsxRuntimeExports.jsxs(
24517
+ "button",
24518
+ {
24519
+ type: "button",
24520
+ onClick: (e) => {
24521
+ e.stopPropagation();
24522
+ onSyncCollabRepo(repo, savedPath);
24523
+ },
24524
+ className: "px-2.5 py-1.5 text-xs font-semibold rounded-xl transition-all shadow-xs flex items-center gap-1 bg-blue-600/15 hover:bg-blue-600/25 text-blue-400 border border-blue-500/30",
24525
+ title: "Pull all latest team changes into this folder immediately",
24526
+ children: [
24527
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "⬇️" }),
24528
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Pull" })
24529
+ ]
24530
+ }
24531
+ ),
24515
24532
  savedPath && /* @__PURE__ */ jsxRuntimeExports.jsx(
24516
24533
  "button",
24517
24534
  {
@@ -26062,9 +26079,15 @@ Are you SURE you want to link "${repoName}" to this folder?`
26062
26079
  try {
26063
26080
  const remotes = await window.api.getRemotes();
26064
26081
  if (remotes.length > 0) {
26065
- await window.api.pullFromRemote(remotes[0].name, branches.current);
26082
+ const result = await window.api.pullFromRemote(remotes[0].name, branches?.current);
26066
26083
  await refreshRepoState();
26067
- showToast("Successfully pulled latest changes!", "success");
26084
+ if (result?.alreadyUpToDate) {
26085
+ showToast("✨ Local files are already completely up to date with GitHub!", "info");
26086
+ } else if (result?.message) {
26087
+ showToast(`✅ ${result.message}`, "success");
26088
+ } else {
26089
+ showToast("✅ Successfully updated local files with team changes!", "success");
26090
+ }
26068
26091
  } else {
26069
26092
  setShowSetupWizard(true);
26070
26093
  }
@@ -26074,6 +26097,23 @@ Are you SURE you want to link "${repoName}" to this folder?`
26074
26097
  setIsPulling(false);
26075
26098
  }
26076
26099
  };
26100
+ const handleSyncCollabRepo = async (repo, savedPath) => {
26101
+ try {
26102
+ showToast(`Syncing ${repo.name} with GitHub...`, "info");
26103
+ await window.api.setRepoPath(savedPath);
26104
+ const res = await window.api.pullFromRemote();
26105
+ if (res?.alreadyUpToDate) {
26106
+ showToast(`✨ ${repo.name} is already completely up to date!`, "info");
26107
+ } else {
26108
+ showToast(`✅ ${repo.name}: ${res?.message || "Synced latest team changes!"}`, "success");
26109
+ }
26110
+ if (repoPath === savedPath) {
26111
+ await refreshRepoState();
26112
+ }
26113
+ } catch (e) {
26114
+ showToast(`Failed to sync ${repo.name}: ${e.message}`, "error");
26115
+ }
26116
+ };
26077
26117
  const autonomousHealAndPush = async (initialError, operation, overrideRepoPath, overrideBranch) => {
26078
26118
  let currentError = initialError;
26079
26119
  let attempts = 0;
@@ -27440,6 +27480,19 @@ Are you SURE you want to link "${repoName}" to this folder?`
27440
27480
  t("universalPush")
27441
27481
  ]
27442
27482
  }
27483
+ ),
27484
+ repoPath && /* @__PURE__ */ jsxRuntimeExports.jsxs(
27485
+ "button",
27486
+ {
27487
+ onClick: handlePull,
27488
+ disabled: isPulling,
27489
+ className: `w-full font-medium py-2 px-4 rounded-md transition-all border text-sm flex items-center justify-center gap-2 shadow-sm ${(status?.behind ?? 0) > 0 ? "bg-blue-600/25 text-blue-300 border-blue-500/50 hover:bg-blue-600/35 ring-1 ring-blue-500/30 animate-pulse" : "bg-surface-hover hover:brightness-110 text-primary border-border hover:border-brand/40"}`,
27490
+ title: "Download and update all new files pushed by team members on GitHub to your local folder",
27491
+ children: [
27492
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-4 h-4 text-accent", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" }) }),
27493
+ isPulling ? "Pulling..." : (status?.behind ?? 0) > 0 ? `Pull (${status.behind})` : "Pull"
27494
+ ]
27495
+ }
27443
27496
  )
27444
27497
  ] }),
27445
27498
  collaboratedRepos.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "mb-4", children: [
@@ -28039,10 +28092,11 @@ Are you SURE you want to link "${repoName}" to this folder?`
28039
28092
  "button",
28040
28093
  {
28041
28094
  onClick: handlePull,
28042
- disabled: isPulling || status.conflicted.length > 0,
28043
- className: "ml-2 px-3 py-1 bg-surface-hover hover:brightness-110 text-primary rounded-md font-semibold transition-all disabled:opacity-50 border border-border flex items-center gap-1",
28095
+ disabled: isPulling || status?.conflicted?.length > 0,
28096
+ title: "Download and update all new files and changes pushed by your team on GitHub to your computer",
28097
+ className: `ml-2 px-3 py-1.5 rounded-lg font-semibold transition-all duration-200 border flex items-center gap-1.5 shadow-sm text-xs ${(status?.behind ?? 0) > 0 ? "bg-gradient-to-r from-blue-600 to-indigo-600 hover:from-blue-500 hover:to-indigo-500 text-white border-blue-400/40 ring-2 ring-blue-500/20 animate-pulse" : "bg-surface-hover hover:brightness-110 text-primary border-border hover:border-brand/40"} disabled:opacity-50`,
28044
28098
  children: isPulling ? /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
28045
- /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "w-3 h-3 animate-spin", fill: "none", viewBox: "0 0 24 24", children: [
28099
+ /* @__PURE__ */ jsxRuntimeExports.jsxs("svg", { className: "w-3.5 h-3.5 animate-spin text-accent", fill: "none", viewBox: "0 0 24 24", children: [
28046
28100
  /* @__PURE__ */ jsxRuntimeExports.jsx(
28047
28101
  "circle",
28048
28102
  {
@@ -28063,9 +28117,11 @@ Are you SURE you want to link "${repoName}" to this folder?`
28063
28117
  }
28064
28118
  )
28065
28119
  ] }),
28066
- " ",
28067
- "Pulling"
28068
- ] }) : "Pull"
28120
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "Pulling..." })
28121
+ ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
28122
+ /* @__PURE__ */ jsxRuntimeExports.jsx("svg", { className: "w-3.5 h-3.5 text-accent", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsxRuntimeExports.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" }) }),
28123
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: (status?.behind ?? 0) > 0 ? `Pull (${status.behind})` : "Pull" })
28124
+ ] })
28069
28125
  }
28070
28126
  )
28071
28127
  ] })
@@ -28107,7 +28163,8 @@ Are you SURE you want to link "${repoName}" to this folder?`
28107
28163
  isRefreshing,
28108
28164
  onOpenExternal: (url) => window.api.openExternal(url),
28109
28165
  onUnlinkMapping: removeMapping,
28110
- onChangeFolder: handleSelectCollabFolder
28166
+ onChangeFolder: handleSelectCollabFolder,
28167
+ onSyncCollabRepo: handleSyncCollabRepo
28111
28168
  }
28112
28169
  )
28113
28170
  ] }) : /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
@@ -21,8 +21,8 @@
21
21
  href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap"
22
22
  rel="stylesheet"
23
23
  />
24
- <script type="module" crossorigin src="./assets/index-BPsK_u-e.js"></script>
25
- <link rel="stylesheet" crossorigin href="./assets/index-Cl2V4XSJ.css">
24
+ <script type="module" crossorigin src="./assets/index-DXxc3xeq.js"></script>
25
+ <link rel="stylesheet" crossorigin href="./assets/index-C1EI1txt.css">
26
26
  </head>
27
27
 
28
28
  <body class="bg-gray-900 text-white font-sans antialiased overflow-hidden">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gitxelectron",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "An elegant, completely silent auto-syncing Git client. Works as a desktop app and npm CLI tool.",
5
5
  "main": "./out/main/index.js",
6
6
  "files": [