feat: add releases widget (#2497)

Co-authored-by: Andre Silva <asilva01@acuitysso.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
Co-authored-by: Manuel <30572287+manuel-rw@users.noreply.github.com>
This commit is contained in:
Andre Silva
2025-04-25 19:49:32 +01:00
committed by GitHub
parent d97e74047d
commit 3dcee8cb86
19 changed files with 2068 additions and 7 deletions

View File

@@ -0,0 +1,53 @@
import { IconRocket } from "@tabler/icons-react";
import { z } from "zod";
import { createWidgetDefinition } from "../definition";
import { optionsBuilder } from "../options";
export const { definition, componentLoader } = createWidgetDefinition("releases", {
icon: IconRocket,
createOptions() {
return optionsBuilder.from((factory) => ({
newReleaseWithin: factory.text({
defaultValue: "1w",
withDescription: true,
validate: z
.string()
.regex(/^\d+[hdwmy]$/)
.or(z.literal("")),
}),
staleReleaseWithin: factory.text({
defaultValue: "6m",
withDescription: true,
validate: z
.string()
.regex(/^\d+[hdwmy]$/)
.or(z.literal("")),
}),
showOnlyHighlighted: factory.switch({
withDescription: true,
defaultValue: true,
}),
showDetails: factory.switch({
defaultValue: true,
}),
repositories: factory.multiReleasesRepositories({
defaultValue: [],
validate: z.array(
z.object({
providerKey: z.string().min(1),
identifier: z.string().min(1),
versionFilter: z
.object({
prefix: z.string().optional(),
precision: z.number(),
suffix: z.string().optional(),
})
.optional(),
iconUrl: z.string().url().optional(),
}),
),
}),
}));
},
}).withDynamicImport(() => import("./component"));