|
6 | 6 | import { ChevronRight } from "@lucide/svelte";
|
7 | 7 | import type { GitHubRelease } from "$lib/server/github-cache";
|
8 | 8 | import type { CategorizedPackage } from "$lib/server/package-discoverer";
|
9 |
| - import type { Prettify } from "$lib/types"; |
| 9 | + import { type PackageSettings, type Prettify, releasesTypes } from "$lib/types"; |
10 | 10 | import { cn } from "$lib/utils";
|
11 | 11 | import { Badge } from "$lib/components/ui/badge";
|
12 | 12 | import * as Card from "$lib/components/ui/card";
|
13 | 13 | import { Checkbox } from "$lib/components/ui/checkbox";
|
14 | 14 | import { Label } from "$lib/components/ui/label";
|
15 | 15 | import { Separator } from "$lib/components/ui/separator";
|
| 16 | + import * as ToggleGroup from "$lib/components/ui/toggle-group"; |
| 17 | + import { DEFAULT_SETTINGS } from "./settings.svelte"; |
16 | 18 |
|
17 | 19 | type CleanRelease = { cleanName: string; cleanVersion: string } & GitHubRelease;
|
18 | 20 |
|
|
41 | 43 | | undefined
|
42 | 44 | >;
|
43 | 45 | };
|
44 |
| - showPrereleases?: boolean; |
| 46 | + settings?: PackageSettings; |
45 | 47 | headless?: boolean;
|
46 | 48 | class?: ClassValue;
|
47 | 49 | };
|
48 | 50 | let {
|
49 | 51 | packageName = "",
|
50 | 52 | allPackages = [],
|
51 |
| - showPrereleases = $bindable(true), |
52 | 53 | otherReleases = {},
|
| 54 | + settings = $bindable(DEFAULT_SETTINGS), |
53 | 55 | headless = false,
|
54 | 56 | class: className
|
55 | 57 | }: Props = $props();
|
|
222 | 224 | </Card.Content>
|
223 | 225 | </Card.Root>
|
224 | 226 | {#if headless}
|
225 |
| - <Separator class="my-4" /> |
| 227 | + <Separator class="my-4 rounded-full data-[orientation=horizontal]:h-1" /> |
| 228 | + <h3 class="mb-6 text-xl font-semibold tracking-tight text-primary">Visibility settings</h3> |
226 | 229 | {/if}
|
227 | 230 | <div
|
228 | 231 | class={[
|
229 |
| - "flex items-center gap-2", |
| 232 | + "flex flex-col gap-2", |
230 | 233 | !headless && "-mt-2 rounded-b-xl border-x border-b bg-card px-4 pt-5 pb-2.5"
|
231 | 234 | ]}
|
232 | 235 | >
|
233 |
| - <Checkbox |
234 |
| - id="beta-releases-{id}" |
235 |
| - aria-labelledby="beta-releases-label-{id}" |
236 |
| - bind:checked={showPrereleases} |
237 |
| - /> |
238 |
| - <Label |
239 |
| - id="beta-releases-label-{id}" |
240 |
| - for="beta-releases-{id}" |
241 |
| - class="text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" |
242 |
| - > |
243 |
| - Show {packageName} prereleases |
244 |
| - </Label> |
| 236 | + <!-- Prereleases toggle --> |
| 237 | + <div class="flex items-center gap-2"> |
| 238 | + <Checkbox |
| 239 | + id="beta-releases-{id}" |
| 240 | + aria-labelledby="beta-releases-label-{id}" |
| 241 | + bind:checked={ |
| 242 | + () => settings.showPrereleases ?? DEFAULT_SETTINGS.showPrereleases, |
| 243 | + newState => (settings.showPrereleases = newState) |
| 244 | + } |
| 245 | + /> |
| 246 | + <Label |
| 247 | + id="beta-releases-label-{id}" |
| 248 | + for="beta-releases-{id}" |
| 249 | + class="text-sm leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" |
| 250 | + > |
| 251 | + Show {packageName} prereleases |
| 252 | + </Label> |
| 253 | + </div> |
| 254 | + |
| 255 | + <Separator class="mt-0.5" /> |
| 256 | + |
| 257 | + <!-- Version filtering --> |
| 258 | + <div class="flex items-center gap-2"> |
| 259 | + <span class="text-sm leading-none font-medium text-nowrap">Show release types:</span> |
| 260 | + <ToggleGroup.Root |
| 261 | + type="single" |
| 262 | + bind:value={ |
| 263 | + () => settings.releasesType ?? DEFAULT_SETTINGS.releasesType, |
| 264 | + newType => { |
| 265 | + // don't take in account deselections, naturally always leaving something selected |
| 266 | + if (newType) settings.releasesType = newType; |
| 267 | + } |
| 268 | + } |
| 269 | + size="sm" |
| 270 | + class="w-full" |
| 271 | + > |
| 272 | + {#each releasesTypes as releaseType (releaseType.toLowerCase())} |
| 273 | + <ToggleGroup.Item value={releaseType.toLowerCase()} class="h-auto py-0.5"> |
| 274 | + {releaseType} |
| 275 | + </ToggleGroup.Item> |
| 276 | + {/each} |
| 277 | + </ToggleGroup.Root> |
| 278 | + </div> |
245 | 279 | </div>
|
246 | 280 | </div>
|
0 commit comments