diff --git a/package.json b/package.json index 34679de..321a4ee 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "prettier": "^2.8.0", "prettier-plugin-svelte": "^2.8.1", "sass": "^1.55.0", + "semver": "^7.5.4", "sirv-cli": "^2.0.2", "svelte": "^3.54.0", "svelte-check": "^2.9.2", diff --git a/src/routes/patches/+page.svelte b/src/routes/patches/+page.svelte index da1fff5..e08b7d5 100644 --- a/src/routes/patches/+page.svelte +++ b/src/routes/patches/+page.svelte @@ -39,6 +39,7 @@ let timeout: ReturnType; let mobilePackages = false; + let showAllVersions = false; function checkCompatibility(patch: Patch, pkg: string) { if (pkg === '') { @@ -169,7 +170,7 @@ {#key selectedPkg || searchTermFiltered}
- +
{/key} {/each} diff --git a/src/routes/patches/PatchItem.svelte b/src/routes/patches/PatchItem.svelte index 2678a35..3402fd6 100644 --- a/src/routes/patches/PatchItem.svelte +++ b/src/routes/patches/PatchItem.svelte @@ -2,9 +2,10 @@ import { slide, fade } from 'svelte/transition'; import { quintOut } from 'svelte/easing'; import type { Patch } from '$lib/types'; - import { friendlyName } from '$util/friendlyName'; + import { compare, coerce } from 'semver'; export let patch: Patch; + export let showAllVersions: boolean; const hasPatchOptions = !!patch.options.length; let expanded: boolean = false; @@ -21,7 +22,7 @@

{patch.name}

{#if hasPatchOptions} - dropdown + dropdown {/if}
{patch.description}
@@ -36,13 +37,6 @@ {/each} - - {#if patch.compatiblePackages.length && patch.compatiblePackages[0].versions.length} -
  • - 🎯 {patch.compatiblePackages[0].versions.slice(-1)} -
  • - {/if} - {#if !patch.compatiblePackages.length}
  • 🌎 Universal patch
  • {/if} @@ -50,6 +44,41 @@ {#if hasPatchOptions}
  • ⚙️ Patch options
  • {/if} + + + {#if patch.compatiblePackages.length && patch.compatiblePackages[0].versions.length} + {#if showAllVersions} + {#each patch.compatiblePackages[0].versions + .slice() + .sort((a, b) => { + const coercedA = coerce(a); + const coercedB = coerce(b); + if (coercedA && coercedB) return compare(coercedA, coercedB); + else if (!coercedA && !coercedB) return 0; + else return !coercedA ? 1 : -1; + }) + .reverse() as version} +
  • + 🎯 {version} +
  • + {/each} + {:else} +
  • + 🎯 {patch.compatiblePackages[0].versions.slice(-1)} +
  • + {/if} + {#if patch.compatiblePackages[0].versions.length > 1} +
  • (showAllVersions = !showAllVersions)}> + dropdown +
  • + {/if} + {/if} {#if expanded && hasPatchOptions} @@ -78,6 +107,9 @@ } .patch-info { + display: flex; + justify-content: center; + align-items: center; list-style: none; font-size: 0.8rem; font-weight: 500; @@ -134,13 +166,18 @@ justify-content: space-between; } - #arrow { - height: 1.5rem; + .expand-arrow { transition: all 0.2s var(--bezier-one); user-select: none; + &#expand-versions { + height: 1.125rem; + } + &#expand-card { + height: 1.5rem; + } } - .rotate #arrow { + .rotate .expand-arrow { transform: rotate(180deg); }