fix(store): semver-aware update badge and add missing gap-1.5 utility

- Replace naive version !== comparison with isNewerVersion() that does
  semver greater-than check, preventing false "Update" badges on
  same-version or downgrade scenarios
- Add missing .gap-1.5 CSS utility used by category pills and tag lists

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Chuck
2026-02-16 21:42:37 -05:00
parent a55b28065f
commit 60deee2f75
2 changed files with 16 additions and 1 deletions

View File

@@ -204,6 +204,7 @@ body {
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.gap-1\.5 { gap: 0.375rem; }
.gap-2 { gap: 0.5rem; }
.gap-3 { gap: 0.75rem; }
.gap-4 { gap: 1rem; }

View File

@@ -5593,7 +5593,7 @@ function renderPluginStore(plugins) {
container.innerHTML = plugins.map(plugin => {
const isInstalled = installedMap.has(plugin.id);
const installedVersion = installedMap.get(plugin.id);
const hasUpdate = isInstalled && plugin.version && installedVersion && plugin.version !== installedVersion;
const hasUpdate = isInstalled && plugin.version && installedVersion && isNewerVersion(plugin.version, installedVersion);
return `
<div class="plugin-card">
<div class="flex items-start justify-between mb-4">
@@ -6354,6 +6354,20 @@ function formatCommit(commit, branch) {
return 'Latest';
}
// Check if storeVersion is strictly newer than installedVersion (semver-aware)
function isNewerVersion(storeVersion, installedVersion) {
const parse = (v) => (v || '').replace(/^v/, '').split('.').map(n => parseInt(n, 10) || 0);
const a = parse(storeVersion);
const b = parse(installedVersion);
const len = Math.max(a.length, b.length);
for (let i = 0; i < len; i++) {
const diff = (a[i] || 0) - (b[i] || 0);
if (diff > 0) return true;
if (diff < 0) return false;
}
return false;
}
// Check if plugin is new (updated within last 7 days)
function isNewPlugin(lastUpdated) {
if (!lastUpdated) return false;