chore(release): automatic release v1.42.0

This commit is contained in:
homarr-releases[bot] authored and GitHub committed 2025-10-17 19:14:09 +00:00
commit 4dabc98bd4
76 files changed
+1640 -939

No files matched your search

+1
View File
@@ -33,6 +33,7 @@ body:
options: options:
# The below comment is used to insert a new version with on-release.yml # The below comment is used to insert a new version with on-release.yml
#NEXT_VERSION# #NEXT_VERSION#
- 1.41.0
- 1.40.0 - 1.40.0
- 1.39.0 - 1.39.0
- 1.38.0 - 1.38.0
+11 -11
View File
@@ -50,12 +50,12 @@
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0",
"@mantine/colors-generator": "^8.3.3", "@mantine/colors-generator": "^8.3.4",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/dropzone": "^8.3.3", "@mantine/dropzone": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"@mantine/modals": "^8.3.3", "@mantine/modals": "^8.3.4",
"@mantine/tiptap": "^8.3.3", "@mantine/tiptap": "^8.3.4",
"@million/lint": "1.0.14", "@million/lint": "1.0.14",
"@tabler/icons-react": "^3.35.0", "@tabler/icons-react": "^3.35.0",
"@tanstack/react-query": "^5.90.2", "@tanstack/react-query": "^5.90.2",
@@ -85,19 +85,19 @@
"react-simple-code-editor": "^0.14.1", "react-simple-code-editor": "^0.14.1",
"sass": "^1.93.2", "sass": "^1.93.2",
"superjson": "2.2.2", "superjson": "2.2.2",
"swagger-ui-react": "^5.29.3", "swagger-ui-react": "^5.29.4",
"use-deep-compare-effect": "^1.8.1", "use-deep-compare-effect": "^1.8.1",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/chroma-js": "3.1.1", "@types/chroma-js": "3.1.1",
"@types/node": "^22.18.8", "@types/node": "^22.18.10",
"@types/prismjs": "^1.26.5", "@types/prismjs": "^1.26.5",
"@types/react": "19.2.0", "@types/react": "19.2.2",
"@types/react-dom": "19.2.0", "@types/react-dom": "19.2.1",
"@types/swagger-ui-react": "^5.18.0", "@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.2.1", "concurrently": "^9.2.1",
"eslint": "^9.37.0", "eslint": "^9.37.0",
@@ -2,6 +2,7 @@ import { Box, Grid, GridCol, Group, Image, Stack, Title } from "@mantine/core";
import { splitToNChunks } from "@homarr/common"; import { splitToNChunks } from "@homarr/common";
import { integrationDefs } from "@homarr/definitions"; import { integrationDefs } from "@homarr/definitions";
import { getScopedI18n } from "@homarr/translation/server";
import classes from "./hero-banner.module.css"; import classes from "./hero-banner.module.css";
@@ -12,19 +13,20 @@ const icons = Object.values(integrationDefs)
const countIconGroups = 3; const countIconGroups = 3;
const animationDurationInSeconds = icons.length; const animationDurationInSeconds = icons.length;
const arrayInChunks = splitToNChunks(icons, countIconGroups); const arrayInChunks = splitToNChunks(icons, countIconGroups);
const gridSpan = 12 / countIconGroups;
export const HeroBanner = () => { export const HeroBanner = async () => {
const gridSpan = 12 / countIconGroups; const t = await getScopedI18n("management.page.home");
return ( return (
<Box className={classes.bannerContainer} p={{ base: "lg", md: "3rem" }} bg="dark.6" pos="relative"> <Box className={classes.bannerContainer} p={{ base: "lg", md: "3rem" }} bg="dark.6" pos="relative">
<Stack gap={0}> <Stack gap={0}>
<Title fz={{ base: "h4", md: "h2" }} c="dimmed"> <Title fz={{ base: "h4", md: "h2" }} c="dimmed">
Welcome back to your {t("heroBanner.title")}
</Title> </Title>
<Group gap="xs" wrap="nowrap"> <Group gap="xs" wrap="nowrap">
<Image src="/logo/logo.png" w={{ base: 32, md: 40 }} h={{ base: 32, md: 40 }} /> <Image src="/logo/logo.png" w={{ base: 32, md: 40 }} h={{ base: 32, md: 40 }} />
<Title fz={{ base: "h3", md: "h1" }}>Homarr Board</Title> <Title fz={{ base: "h3", md: "h1" }}>{t("heroBanner.subtitle", { app: "Homarr" })}</Title>
</Group> </Group>
</Stack> </Stack>
<Box visibleFrom="md" className={classes.scrollContainer} w={"30%"} top={0} right={0} pos="absolute"> <Box visibleFrom="md" className={classes.scrollContainer} w={"30%"} top={0} right={0} pos="absolute">
+20 -75
View File
@@ -1,25 +1,16 @@
import type { Metadata } from "next";
import Link from "next/link"; import Link from "next/link";
import { Card, Group, SimpleGrid, Space, Stack, Text } from "@mantine/core"; import { Card, Group, SimpleGrid, Space, Stack, Text } from "@mantine/core";
import { IconArrowRight } from "@tabler/icons-react"; import { IconArrowRight } from "@tabler/icons-react";
import { api } from "@homarr/api/server"; import { api } from "@homarr/api/server";
import { auth } from "@homarr/auth/next";
import { isProviderEnabled } from "@homarr/auth/server";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb";
import { createMetaTitle } from "~/metadata"; import { createMetaTitle } from "~/metadata";
import { HeroBanner } from "./_components/hero-banner"; import { HeroBanner } from "./_components/hero-banner";
interface LinkProps { export async function generateMetadata(): Promise<Metadata> {
title: string;
subtitle: string;
count: number;
href: string;
hidden?: boolean;
}
export async function generateMetadata() {
const t = await getScopedI18n("management"); const t = await getScopedI18n("management");
return { return {
@@ -29,78 +20,32 @@ export async function generateMetadata() {
export default async function ManagementPage() { export default async function ManagementPage() {
const statistics = await api.home.getStats(); const statistics = await api.home.getStats();
const session = await auth();
const t = await getScopedI18n("management.page.home"); const t = await getScopedI18n("management.page.home");
const links: LinkProps[] = [
{
count: statistics.countBoards,
href: "/manage/boards",
subtitle: t("statisticLabel.boards"),
title: t("statistic.board"),
},
{
count: statistics.countUsers,
href: "/manage/users",
subtitle: t("statisticLabel.authentication"),
title: t("statistic.user"),
hidden: !session?.user.permissions.includes("admin"),
},
{
count: statistics.countInvites,
href: "/manage/users/invites",
subtitle: t("statisticLabel.authentication"),
title: t("statistic.invite"),
hidden: !isProviderEnabled("credentials") || !session?.user.permissions.includes("admin"),
},
{
count: statistics.countIntegrations,
href: "/manage/integrations",
subtitle: t("statisticLabel.resources"),
title: t("statistic.integration"),
},
{
count: statistics.countApps,
href: "/manage/apps",
subtitle: t("statisticLabel.resources"),
title: t("statistic.app"),
hidden: !session?.user,
},
{
count: statistics.countGroups,
href: "/manage/users/groups",
subtitle: t("statisticLabel.authorization"),
title: t("statistic.group"),
hidden: !session?.user.permissions.includes("admin"),
},
];
return ( return (
<> <>
<DynamicBreadcrumb /> <DynamicBreadcrumb />
<HeroBanner /> <HeroBanner />
<Space h="md" /> <Space h="md" />
<SimpleGrid cols={{ xs: 1, sm: 2, md: 3 }}> <SimpleGrid cols={{ xs: 1, sm: 2, md: 3 }}>
{links.map( {statistics.map((statistic) => (
(link) => <Card component={Link} href={statistic.path} key={statistic.path} radius="lg">
!link.hidden && ( <Group justify="space-between" wrap="nowrap">
<Card component={Link} href={link.href} key={link.href} radius="lg"> <Group wrap="nowrap">
<Group justify="space-between" wrap="nowrap"> <Text size="2.4rem" fw="bolder">
<Group wrap="nowrap"> {statistic.count}
<Text size="2.4rem" fw="bolder"> </Text>
{link.count} <Stack gap={0}>
</Text> <Text c="red" size="xs">
<Stack gap={0}> {t(`statisticLabel.${statistic.subtitleKey}`)}
<Text c="red" size="xs"> </Text>
{link.subtitle} <Text fw="bold">{t(`statistic.${statistic.titleKey}`)}</Text>
</Text> </Stack>
<Text fw="bold">{link.title}</Text> </Group>
</Stack> <IconArrowRight />
</Group> </Group>
<IconArrowRight /> </Card>
</Group> ))}
</Card>
),
)}
</SimpleGrid> </SimpleGrid>
</> </>
); );
@@ -92,38 +92,24 @@ export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
}); });
}, [mutate, user.id, openConfirmModal, tManageAvatar]); }, [mutate, user.id, openConfirmModal, tManageAvatar]);
const isCredentialsUser = user.provider === "credentials";
return ( return (
<Box pos="relative"> <Box pos="relative">
<Menu <Menu opened={opened} keepMounted onChange={toggle} position="bottom-start" withArrow>
opened={opened}
keepMounted
onChange={isCredentialsUser ? toggle : undefined}
position="bottom-start"
withArrow
>
<Menu.Target> <Menu.Target>
<UnstyledButton <UnstyledButton onClick={toggle}>
component={isCredentialsUser ? undefined : "div"}
style={{ cursor: !isCredentialsUser ? "default" : undefined }}
onClick={isCredentialsUser ? toggle : undefined}
>
<UserAvatar user={user} size={200} /> <UserAvatar user={user} size={200} />
{isCredentialsUser && ( <Button
<Button component="div"
component="div" pos="absolute"
pos="absolute" bottom={0}
bottom={0} left={0}
left={0} size="compact-md"
size="compact-md" fw="normal"
fw="normal" variant="default"
variant="default" leftSection={<IconPencil size={18} stroke={1.5} />}
leftSection={<IconPencil size={18} stroke={1.5} />} >
> {t("common.action.edit")}
{t("common.action.edit")} </Button>
</Button>
)}
</UnstyledButton> </UnstyledButton>
</Menu.Target> </Menu.Target>
<Menu.Dropdown> <Menu.Dropdown>
+1 -1
View File
@@ -47,7 +47,7 @@
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/node": "^22.18.8", "@types/node": "^22.18.10",
"dotenv-cli": "^10.0.0", "dotenv-cli": "^10.0.0",
"esbuild": "^0.25.10", "esbuild": "^0.25.10",
"eslint": "^9.37.0", "eslint": "^9.37.0",
+2 -2
View File
@@ -58,7 +58,7 @@
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.2.4" "vitest": "^3.2.4"
}, },
"packageManager": "pnpm@10.18.0", "packageManager": "pnpm@10.18.2",
"engines": { "engines": {
"node": ">=22.20.0" "node": ">=22.20.0"
}, },
@@ -82,7 +82,7 @@
"brace-expansion@>=1.0.0 <=1.1.11": ">=4.0.1", "brace-expansion@>=1.0.0 <=1.1.11": ">=4.0.1",
"esbuild@<=0.24.2": ">=0.25.10", "esbuild@<=0.24.2": ">=0.25.10",
"form-data@>=4.0.0 <4.0.4": ">=4.0.4", "form-data@>=4.0.0 <4.0.4": ">=4.0.4",
"hono@<4.6.5": ">=4.9.10", "hono@<4.6.5": ">=4.9.11",
"linkifyjs@<4.3.2": ">=4.3.2", "linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.6", "nanoid@>=4.0.0 <5.0.9": ">=5.1.6",
"prismjs@<1.30.0": ">=1.30.0", "prismjs@<1.30.0": ">=1.30.0",
+3 -2
View File
@@ -40,6 +40,7 @@
"@homarr/redis": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0",
"@homarr/request-handler": "workspace:^0.1.0", "@homarr/request-handler": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@kubernetes/client-node": "^1.4.0", "@kubernetes/client-node": "^1.4.0",
"@tanstack/react-query": "^5.90.2", "@tanstack/react-query": "^5.90.2",
@@ -52,8 +53,8 @@
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"superjson": "2.2.2", "superjson": "2.2.2",
"trpc-to-openapi": "^3.0.1", "trpc-to-openapi": "^3.1.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+136 -20
View File
@@ -1,31 +1,147 @@
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
import { isProviderEnabled } from "@homarr/auth/server"; import { isProviderEnabled } from "@homarr/auth/server";
import type { Database } from "@homarr/db"; import { db, eq, inArray, or } from "@homarr/db";
import { apps, boards, groups, integrations, invites, users } from "@homarr/db/schema"; import {
apps,
boards,
boardUserPermissions,
groupMembers,
groups,
integrations,
invites,
medias,
searchEngines,
users,
} from "@homarr/db/schema";
import type { TranslationObject } from "@homarr/translation";
import { createTRPCRouter, publicProcedure } from "../trpc"; import { createTRPCRouter, publicProcedure } from "../trpc";
interface HomeStatistic {
titleKey: keyof TranslationObject["management"]["page"]["home"]["statistic"];
subtitleKey: keyof TranslationObject["management"]["page"]["home"]["statisticLabel"];
count: number;
path: string;
}
export const homeRouter = createTRPCRouter({ export const homeRouter = createTRPCRouter({
getStats: publicProcedure.query(async ({ ctx }) => { getStats: publicProcedure.query(async ({ ctx }) => {
const isAdmin = ctx.session?.user.permissions.includes("admin") ?? false; const isAdmin = ctx.session?.user.permissions.includes("admin") ?? false;
const isCredentialsEnabled = isProviderEnabled("credentials"); const isCredentialsEnabled = isProviderEnabled("credentials");
return { const statistics: HomeStatistic[] = [];
countBoards: await getCountForTableAsync(ctx.db, boards, true),
countUsers: await getCountForTableAsync(ctx.db, users, isAdmin), const boardIds: string[] = [];
countGroups: await getCountForTableAsync(ctx.db, groups, true), if (ctx.session?.user && !ctx.session.user.permissions.includes("board-view-all")) {
countInvites: await getCountForTableAsync(ctx.db, invites, isAdmin), const permissionsOfCurrentUserWhenPresent = await ctx.db.query.boardUserPermissions.findMany({
countIntegrations: await getCountForTableAsync(ctx.db, integrations, isCredentialsEnabled && isAdmin), where: eq(boardUserPermissions.userId, ctx.session.user.id),
countApps: await getCountForTableAsync(ctx.db, apps, true), });
};
const permissionsOfCurrentUserGroupsWhenPresent = await ctx.db.query.groupMembers.findMany({
where: eq(groupMembers.userId, ctx.session.user.id),
with: {
group: {
with: {
boardPermissions: {},
},
},
},
});
boardIds.push(
...permissionsOfCurrentUserWhenPresent
.map((permission) => permission.boardId)
.concat(
permissionsOfCurrentUserGroupsWhenPresent
.map((groupMember) => groupMember.group.boardPermissions.map((permission) => permission.boardId))
.flat(),
),
);
}
statistics.push({
titleKey: "board",
subtitleKey: "boards",
count: await db.$count(
boards,
ctx.session?.user.permissions.includes("board-view-all")
? undefined
: or(
eq(boards.isPublic, true),
eq(boards.creatorId, ctx.session?.user.id ?? ""),
boardIds.length > 0 ? inArray(boards.id, boardIds) : undefined,
),
),
path: "/manage/boards",
});
if (isAdmin) {
statistics.push({
titleKey: "user",
subtitleKey: "authentication",
count: await db.$count(users),
path: "/manage/users",
});
}
if (isAdmin && isCredentialsEnabled) {
statistics.push({
titleKey: "invite",
subtitleKey: "authentication",
count: await db.$count(invites),
path: "/manage/users/invites",
});
}
if (ctx.session?.user.permissions.includes("integration-create")) {
statistics.push({
titleKey: "integration",
subtitleKey: "resources",
count: await db.$count(integrations),
path: "/manage/integrations",
});
}
if (ctx.session?.user) {
statistics.push({
titleKey: "app",
subtitleKey: "resources",
count: await db.$count(apps),
path: "/manage/apps",
});
}
if (isAdmin) {
statistics.push({
titleKey: "group",
subtitleKey: "authorization",
count: await db.$count(groups),
path: "/manage/users/groups",
});
}
if (ctx.session?.user.permissions.includes("search-engine-create")) {
statistics.push({
titleKey: "searchEngine",
subtitleKey: "resources",
count: await db.$count(searchEngines),
path: "/manage/search-engines",
});
}
if (ctx.session?.user.permissions.includes("media-upload")) {
statistics.push({
titleKey: "media",
subtitleKey: "resources",
count: await db.$count(
medias,
ctx.session.user.permissions.includes("media-view-all")
? undefined
: eq(medias.creatorId, ctx.session.user.id),
),
path: "/manage/medias",
});
}
return statistics;
}), }),
}); });
const getCountForTableAsync = async (db: Database, table: AnySQLiteTable, canView: boolean) => {
if (!canView) {
return 0;
}
return await db.$count(table);
};
+1 -9
View File
@@ -114,11 +114,10 @@ export const userRouter = createTRPCRouter({
.input( .input(
z.object({ z.object({
userId: z.string(), userId: z.string(),
// Max image size of 256KB, only png and jpeg are allowed
image: z image: z
.string() .string()
.regex(/^data:image\/(png|jpeg|gif|webp);base64,[A-Za-z0-9/+]+=*$/g) .regex(/^data:image\/(png|jpeg|gif|webp);base64,[A-Za-z0-9/+]+=*$/g)
.max(262144) .max(350000) // approximately 256KB in base64 (256 * 1024 * 4 / 3 + prefixes)
.nullable(), .nullable(),
}), }),
) )
@@ -147,13 +146,6 @@ export const userRouter = createTRPCRouter({
}); });
} }
if (user.provider !== "credentials") {
throw new TRPCError({
code: "FORBIDDEN",
message: "Profile image can not be changed for users with external providers",
});
}
await ctx.db await ctx.db
.update(users) .update(users)
.set({ .set({
+10
View File
@@ -20,6 +20,7 @@ export const createSignInEventHandler = (db: Database): Exclude<NextAuthConfig["
where: eq(users.id, user.id), where: eq(users.id, user.id),
columns: { columns: {
name: true, name: true,
image: true,
colorScheme: true, colorScheme: true,
}, },
}); });
@@ -59,6 +60,15 @@ export const createSignInEventHandler = (db: Database): Exclude<NextAuthConfig["
`Username for user of oidc provider has changed. user=${user.id} old='${dbUser.name}' new='${profileUsername}'`, `Username for user of oidc provider has changed. user=${user.id} old='${dbUser.name}' new='${profileUsername}'`,
); );
} }
if (
typeof profile.picture === "string" &&
dbUser.image !== profile.picture &&
!dbUser.image?.startsWith("data:")
) {
await db.update(users).set({ image: profile.picture }).where(eq(users.id, user.id));
logger.info(`Profile picture for user of oidc provider has changed. user=${user.id}'`);
}
} }
logger.info(`User '${dbUser.name}' logged in at ${dayjs().format()}`); logger.info(`User '${dbUser.name}' logged in at ${dayjs().format()}`);
+3 -3
View File
@@ -23,8 +23,8 @@
}, },
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@auth/core": "^0.40.0", "@auth/core": "^0.41.0",
"@auth/drizzle-adapter": "^1.10.0", "@auth/drizzle-adapter": "^1.11.0",
"@homarr/certificates": "workspace:^0.1.0", "@homarr/certificates": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/core": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0",
@@ -39,7 +39,7 @@
"next-auth": "5.0.0-beta.29", "next-auth": "5.0.0-beta.29",
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
@@ -61,6 +61,7 @@ export const OidcProvider = (headers: ReadonlyHeaders | null): OIDCConfig<Profil
id: profile.sub, id: profile.sub,
name, name,
email: profile.email, email: profile.email,
image: typeof profile.picture === "string" ? profile.picture : null,
provider: "oidc", provider: "oidc",
}; };
}, },
+1 -1
View File
@@ -37,7 +37,7 @@
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"undici": "7.16.0", "undici": "7.16.0",
"zod": "^4.1.11", "zod": "^4.1.12",
"zod-validation-error": "^4.0.2" "zod-validation-error": "^4.0.2"
}, },
"devDependencies": { "devDependencies": {
+2 -2
View File
@@ -25,8 +25,8 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@t3-oss/env-nextjs": "^0.13.8", "@t3-oss/env-nextjs": "^0.13.8",
"ioredis": "5.8.0", "ioredis": "5.8.1",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -35,14 +35,14 @@
"@trpc/tanstack-react-query": "^11.6.0", "@trpc/tanstack-react-query": "^11.6.0",
"node-cron": "^4.2.1", "node-cron": "^4.2.1",
"react": "19.2.0", "react": "19.2.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-cron": "^3.0.11", "@types/node-cron": "^3.0.11",
"@types/react": "19.2.0", "@types/react": "19.2.2",
"eslint": "^9.37.0", "eslint": "^9.37.0",
"typescript": "^5.9.3" "typescript": "^5.9.3"
} }
+3 -3
View File
@@ -43,13 +43,13 @@
}, },
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@auth/core": "^0.40.0", "@auth/core": "^0.41.0",
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/core": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@paralleldrive/cuid2": "^2.2.2", "@paralleldrive/cuid2": "^2.2.2",
"@testcontainers/mysql": "^11.7.1", "@testcontainers/mysql": "^11.7.1",
"@testcontainers/postgresql": "^11.7.1", "@testcontainers/postgresql": "^11.7.1",
@@ -58,7 +58,7 @@
"drizzle-kit": "^0.31.5", "drizzle-kit": "^0.31.5",
"drizzle-orm": "^0.44.6", "drizzle-orm": "^0.44.6",
"drizzle-zod": "^0.8.3", "drizzle-zod": "^0.8.3",
"mysql2": "3.15.1", "mysql2": "3.15.2",
"pg": "^8.16.3", "pg": "^8.16.3",
"superjson": "2.2.2" "superjson": "2.2.2"
}, },
+1 -1
View File
@@ -25,7 +25,7 @@
"dependencies": { "dependencies": {
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"fast-xml-parser": "^5.3.0", "fast-xml-parser": "^5.3.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -26,9 +26,9 @@
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^8.3.3", "@mantine/form": "^8.3.4",
"mantine-form-zod-resolver": "^1.3.0", "mantine-form-zod-resolver": "^1.3.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -29,9 +29,9 @@
"@homarr/notifications": "workspace:^0.1.0", "@homarr/notifications": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"react": "19.2.0", "react": "19.2.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -26,7 +26,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@ctrl/deluge": "^7.4.0", "@ctrl/deluge": "^7.4.0",
"@ctrl/qbittorrent": "^9.9.0", "@ctrl/qbittorrent": "^9.9.1",
"@ctrl/transmission": "^7.4.0", "@ctrl/transmission": "^7.4.0",
"@gitbeaker/rest": "^43.5.0", "@gitbeaker/rest": "^43.5.0",
"@homarr/certificates": "workspace:^0.1.0", "@homarr/certificates": "workspace:^0.1.0",
@@ -49,7 +49,7 @@
"tsdav": "^2.1.5", "tsdav": "^2.1.5",
"undici": "7.16.0", "undici": "7.16.0",
"xml2js": "^0.6.2", "xml2js": "^0.6.2",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
@@ -1,4 +1,7 @@
import type { Agent } from "https"; import type { Agent } from "https";
import dayjs from "dayjs";
import timezone from "dayjs/plugin/timezone";
import utc from "dayjs/plugin/utc";
import type { RequestInit as NodeFetchRequestInit } from "node-fetch"; import type { RequestInit as NodeFetchRequestInit } from "node-fetch";
import * as ical from "node-ical"; import * as ical from "node-ical";
import { DAVClient } from "tsdav"; import { DAVClient } from "tsdav";
@@ -14,6 +17,9 @@ import type { TestingResult } from "../base/test-connection/test-connection-serv
import type { ICalendarIntegration } from "../interfaces/calendar/calendar-integration"; import type { ICalendarIntegration } from "../interfaces/calendar/calendar-integration";
import type { CalendarEvent } from "../interfaces/calendar/calendar-types"; import type { CalendarEvent } from "../interfaces/calendar/calendar-types";
dayjs.extend(utc);
dayjs.extend(timezone);
@HandleIntegrationErrors([integrationTsdavHttpErrorHandler]) @HandleIntegrationErrors([integrationTsdavHttpErrorHandler])
export class NextcloudIntegration extends Integration implements ICalendarIntegration { export class NextcloudIntegration extends Integration implements ICalendarIntegration {
protected async testingAsync(input: IntegrationTestingInput): Promise<TestingResult> { protected async testingAsync(input: IntegrationTestingInput): Promise<TestingResult> {
@@ -41,47 +47,59 @@ export class NextcloudIntegration extends Integration implements ICalendarIntegr
) )
).flat(); ).flat();
return calendarEvents.map((event): CalendarEvent => { return calendarEvents
// @ts-expect-error the typescript definitions for this package are wrong .map((event) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access // @ts-expect-error the typescript definitions for this package are wrong
const icalData = ical.default.parseICS(event.data) as ical.CalendarResponse; // eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
const veventObject = Object.values(icalData).find((data) => data.type === "VEVENT"); const icalData = ical.default.parseICS(event.data) as ical.CalendarResponse;
const veventObject = Object.values(icalData).find((data) => data.type === "VEVENT");
if (!veventObject) { if (!veventObject) {
throw new Error(`Invalid event data object: ${JSON.stringify(event.data)}. Unable to process the calendar.`); throw new Error(`Invalid event data object: ${JSON.stringify(event.data)}. Unable to process the calendar.`);
} }
logger.debug(`Converting VEVENT event to ${event.etag} from Nextcloud: ${JSON.stringify(veventObject)}`); logger.debug(`Converting VEVENT event to ${event.etag} from Nextcloud: ${JSON.stringify(veventObject)}`);
const date = veventObject.start; const eventUrlWithoutHost = new URL(event.url).pathname;
const eventSlug = Buffer.from(eventUrlWithoutHost).toString("base64url");
const eventUrlWithoutHost = new URL(event.url).pathname; const startDates = veventObject.rrule ? veventObject.rrule.between(start, end) : [veventObject.start];
const dateInMillis = veventObject.start.valueOf();
const url = this.url( const durationMs = veventObject.end.getTime() - veventObject.start.getTime();
`/apps/calendar/timeGridWeek/now/edit/sidebar/${Buffer.from(eventUrlWithoutHost).toString("base64url")}/${dateInMillis / 1000}`,
);
return { return startDates.map((startDate) => {
title: veventObject.summary, const timezoneOffsetMinutes = veventObject.rrule?.origOptions.tzid
subTitle: null, ? dayjs(startDate).tz(veventObject.rrule.origOptions.tzid).utcOffset()
description: veventObject.description, : 0;
startDate: date, const utcStartDate = new Date(startDate.getTime() - timezoneOffsetMinutes * 60 * 1000);
endDate: veventObject.end, const endDate = new Date(utcStartDate.getTime() + durationMs);
image: null, const dateInMillis = utcStartDate.valueOf();
location: veventObject.location || null,
indicatorColor: "#ff8600", return {
links: [ title: veventObject.summary,
{ subTitle: null,
href: url.toString(), description: veventObject.description,
name: "Nextcloud", startDate: utcStartDate,
logo: "/images/apps/nextcloud.svg", endDate,
color: undefined, image: null,
isDark: true, location: veventObject.location || null,
}, indicatorColor:
], "color" in veventObject && typeof veventObject.color === "string" ? veventObject.color : "#ff8600",
}; links: [
}); {
href: this.url(
`/apps/calendar/timeGridWeek/now/edit/sidebar/${eventSlug}/${dateInMillis / 1000}`,
).toString(),
name: "Nextcloud",
logo: "/images/apps/nextcloud.svg",
color: undefined,
isDark: true,
},
],
};
});
})
.flat();
} }
private async createCalendarClientAsync(agent?: Agent) { private async createCalendarClientAsync(agent?: Agent) {
@@ -142,7 +142,10 @@ export class PlexIntegration extends Integration implements IMediaServerIntegrat
rating: item.rating?.toFixed(1), rating: item.rating?.toFixed(1),
tags: item.Genre?.map((genre) => genre.tag) ?? [], tags: item.Genre?.map((genre) => genre.tag) ?? [],
href: super href: super
.url(`/web/index.html#!/server/${machineIdentifier}/details?key=${encodeURIComponent(item.key)}`) .url(
// Url with children on the end results in infinite loading screen, see https://github.com/homarr-labs/homarr/issues/4078
`/web/index.html#!/server/${machineIdentifier}/details?key=${encodeURIComponent(item.key.replace("/children", ""))}`,
)
.toString(), .toString(),
length: item.duration ? Math.round(item.duration / 1000) : undefined, length: item.duration ? Math.round(item.duration / 1000) : undefined,
}; };
+1 -1
View File
@@ -27,7 +27,7 @@
"@homarr/core": "workspace:^0.1.0", "@homarr/core": "workspace:^0.1.0",
"superjson": "2.2.2", "superjson": "2.2.2",
"winston": "3.18.3", "winston": "3.18.3",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -33,13 +33,13 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@tabler/icons-react": "^3.35.0", "@tabler/icons-react": "^3.35.0",
"dayjs": "^1.11.18", "dayjs": "^1.11.18",
"next": "15.5.4", "next": "15.5.4",
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+2 -2
View File
@@ -24,8 +24,8 @@
"dependencies": { "dependencies": {
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"react": "19.2.0" "react": "19.2.0"
}, },
"devDependencies": { "devDependencies": {
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/notifications": "^8.3.3", "@mantine/notifications": "^8.3.4",
"@tabler/icons-react": "^3.35.0" "@tabler/icons-react": "^3.35.0"
}, },
"devDependencies": { "devDependencies": {
+3 -3
View File
@@ -37,14 +37,14 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"adm-zip": "0.5.16", "adm-zip": "0.5.16",
"next": "15.5.4", "next": "15.5.4",
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0", "react-dom": "19.2.0",
"superjson": "2.2.2", "superjson": "2.2.2",
"zod": "^4.1.11", "zod": "^4.1.12",
"zod-form-data": "^3.0.1" "zod-form-data": "^3.0.1"
}, },
"devDependencies": { "devDependencies": {
+1 -1
View File
@@ -23,7 +23,7 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -27,7 +27,7 @@
"@homarr/db": "workspace:^", "@homarr/db": "workspace:^",
"@homarr/definitions": "workspace:^", "@homarr/definitions": "workspace:^",
"@homarr/log": "workspace:^", "@homarr/log": "workspace:^",
"ioredis": "5.8.0", "ioredis": "5.8.1",
"superjson": "2.2.2" "superjson": "2.2.2"
}, },
"devDependencies": { "devDependencies": {
+1 -1
View File
@@ -33,7 +33,7 @@
"octokit": "^5.0.3", "octokit": "^5.0.3",
"superjson": "2.2.2", "superjson": "2.2.2",
"undici": "7.16.0", "undici": "7.16.0",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+3 -2
View File
@@ -47,7 +47,7 @@ async function getContainersWithStatsAsync() {
const instance = dockerInstances.find(({ host }) => host === container.instance)?.instance; const instance = dockerInstances.find(({ host }) => host === container.instance)?.instance;
if (!instance) return null; if (!instance) return null;
const stats = await instance.getContainer(container.Id).stats({ stream: false }); const stats = await instance.getContainer(container.Id).stats({ stream: false, "one-shot": true });
return { return {
id: container.Id, id: container.Id,
@@ -60,7 +60,8 @@ async function getContainersWithStatsAsync() {
return icon.name.toLowerCase().includes(extractedImage.toLowerCase()); return icon.name.toLowerCase().includes(extractedImage.toLowerCase());
})?.url ?? null, })?.url ?? null,
cpuUsage: calculateCpuUsage(stats), cpuUsage: calculateCpuUsage(stats),
memoryUsage: stats.memory_stats.usage, // memory usage by default includes cache, which should not be shown as it is also not shown with docker stats command
memoryUsage: stats.memory_stats.usage - stats.memory_stats.stats.cache,
image: container.Image, image: container.Image,
ports: container.Ports, ports: container.Ports,
}; };
+1 -1
View File
@@ -26,7 +26,7 @@
"@homarr/api": "workspace:^0.1.0", "@homarr/api": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0",
"@mantine/dates": "^8.3.3", "@mantine/dates": "^8.3.4",
"next": "15.5.4", "next": "15.5.4",
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0" "react-dom": "19.2.0"
+3 -3
View File
@@ -33,9 +33,9 @@
"@homarr/settings": "workspace:^0.1.0", "@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"@mantine/spotlight": "^8.3.3", "@mantine/spotlight": "^8.3.4",
"@tabler/icons-react": "^3.35.0", "@tabler/icons-react": "^3.35.0",
"jotai": "^2.15.0", "jotai": "^2.15.0",
"next": "15.5.4", "next": "15.5.4",
+1 -1
View File
@@ -33,7 +33,7 @@
"deepmerge": "4.3.1", "deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9", "mantine-react-table": "2.0.0-beta.9",
"next": "15.5.4", "next": "15.5.4",
"next-intl": "4.3.9", "next-intl": "4.3.12",
"react": "19.2.0", "react": "19.2.0",
"react-dom": "19.2.0" "react-dom": "19.2.0"
}, },
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "" "label": ""
}, },
@@ -2974,13 +2986,19 @@
"invite": "", "invite": "",
"integration": "", "integration": "",
"app": "", "app": "",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "", "boards": "",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "用户组名称已存在" "groupNameTaken": "用户组名称已存在"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "标题" "label": "标题"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "边界颜色" "label": "边界颜色"
} }
@@ -1744,6 +1753,9 @@
"label": "显示当前风速", "label": "显示当前风速",
"description": "仅在当前天气时" "description": "仅在当前天气时"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "天气位置" "label": "天气位置"
}, },
@@ -2974,13 +2986,19 @@
"invite": "邀请", "invite": "邀请",
"integration": "集成", "integration": "集成",
"app": "应用", "app": "应用",
"group": "群组" "group": "群组",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "面板", "boards": "面板",
"resources": "资源", "resources": "资源",
"authentication": "认证", "authentication": "认证",
"authorization": "认证" "authorization": "认证"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+22 -4
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "crwdns2366:0crwdne2366:0" "groupNameTaken": "crwdns2366:0crwdne2366:0"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "crwdns3764:0crwdne3764:0",
"milesPerHour": "crwdns3766:0crwdne3766:0"
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "crwdns3103:0crwdne3103:0" "label": "crwdns3103:0crwdne3103:0"
}, },
"customCssClasses": {
"label": "crwdns3776:0crwdne3776:0"
},
"borderColor": { "borderColor": {
"label": "crwdns2839:0crwdne2839:0" "label": "crwdns2839:0crwdne2839:0"
} }
@@ -1744,6 +1753,9 @@
"label": "crwdns2706:0crwdne2706:0", "label": "crwdns2706:0crwdne2706:0",
"description": "crwdns2708:0crwdne2708:0" "description": "crwdns2708:0crwdne2708:0"
}, },
"useImperialSpeed": {
"label": "crwdns3768:0crwdne3768:0"
},
"location": { "location": {
"label": "crwdns1018:0crwdne1018:0" "label": "crwdns1018:0crwdne1018:0"
}, },
@@ -1762,12 +1774,12 @@
"description": "crwdns1030:0crwdne1030:0" "description": "crwdns1030:0crwdne1030:0"
} }
}, },
"currentWindSpeed": "crwdns2710:0{currentWindSpeed}crwdne2710:0", "currentWindSpeed": "crwdns3770:0{currentWindSpeed}crwdnd3770:0{unit}crwdne3770:0",
"dailyForecast": { "dailyForecast": {
"sunrise": "crwdns2712:0crwdne2712:0", "sunrise": "crwdns2712:0crwdne2712:0",
"sunset": "crwdns2714:0crwdne2714:0", "sunset": "crwdns2714:0crwdne2714:0",
"maxWindSpeed": "crwdns2716:0{maxWindSpeed}crwdne2716:0", "maxWindSpeed": "crwdns3772:0{maxWindSpeed}crwdnd3772:0{unit}crwdne3772:0",
"maxWindGusts": "crwdns2718:0{maxWindGusts}crwdne2718:0" "maxWindGusts": "crwdns3774:0{maxWindGusts}crwdnd3774:0{unit}crwdne3774:0"
}, },
"kind": { "kind": {
"clear": "crwdns1032:0crwdne1032:0", "clear": "crwdns1032:0crwdne1032:0",
@@ -2974,13 +2986,19 @@
"invite": "crwdns1620:0crwdne1620:0", "invite": "crwdns1620:0crwdne1620:0",
"integration": "crwdns1622:0crwdne1622:0", "integration": "crwdns1622:0crwdne1622:0",
"app": "crwdns1624:0crwdne1624:0", "app": "crwdns1624:0crwdne1624:0",
"group": "crwdns1626:0crwdne1626:0" "group": "crwdns1626:0crwdne1626:0",
"searchEngine": "crwdns3778:0crwdne3778:0",
"media": "crwdns3780:0crwdne3780:0"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "crwdns1628:0crwdne1628:0", "boards": "crwdns1628:0crwdne1628:0",
"resources": "crwdns1630:0crwdne1630:0", "resources": "crwdns1630:0crwdne1630:0",
"authentication": "crwdns1632:0crwdne1632:0", "authentication": "crwdns1632:0crwdne1632:0",
"authorization": "crwdns1634:0crwdne1634:0" "authorization": "crwdns1634:0crwdne1634:0"
},
"heroBanner": {
"title": "crwdns3782:0crwdne3782:0",
"subtitle": "crwdns3784:0{app}crwdne3784:0"
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Název skupiny je již používán" "groupNameTaken": "Název skupiny je již používán"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Lokalita pro počasí" "label": "Lokalita pro počasí"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Pozvánky", "invite": "Pozvánky",
"integration": "", "integration": "",
"app": "Aplikace", "app": "Aplikace",
"group": "Skupiny" "group": "Skupiny",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Plochy", "boards": "Plochy",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+40 -22
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Gruppenavn allerede taget" "groupNameTaken": "Gruppenavn allerede taget"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Titel" "label": "Titel"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Kantfarve" "label": "Kantfarve"
} }
@@ -1708,7 +1717,7 @@
"name": "Kalender", "name": "Kalender",
"description": "Vis begivenheder fra dine integrationer i en kalendervisning inden for en vis relativ tidsperiode", "description": "Vis begivenheder fra dine integrationer i en kalendervisning inden for en vis relativ tidsperiode",
"duration": { "duration": {
"allDay": "" "allDay": "Hele dagen"
}, },
"option": { "option": {
"releaseType": { "releaseType": {
@@ -1744,6 +1753,9 @@
"label": "Vis aktuel vindhastighed", "label": "Vis aktuel vindhastighed",
"description": "Kun på nuværende vejr" "description": "Kun på nuværende vejr"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Vejr lokation" "label": "Vejr lokation"
}, },
@@ -1982,21 +1994,21 @@
"name": "Navn", "name": "Navn",
"id": "Id", "id": "Id",
"metadata": { "metadata": {
"title": "", "title": "Statistik for nørder",
"video": { "video": {
"title": "", "title": "Video",
"resolution": "" "resolution": "Opløsning"
}, },
"audio": { "audio": {
"title": "", "title": "Lyd",
"channelCount": "", "channelCount": "Lyd kanaler",
"codec": "" "codec": "Lyd codec"
}, },
"transcoding": { "transcoding": {
"title": "", "title": "Transkoder",
"container": "", "container": "Container",
"resolution": "", "resolution": "Opløsning",
"target": "" "target": "Mål codec"
} }
} }
} }
@@ -2974,13 +2986,19 @@
"invite": "Invitationer", "invite": "Invitationer",
"integration": "Integrationer", "integration": "Integrationer",
"app": "Apps", "app": "Apps",
"group": "Grupper" "group": "Grupper",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tavler", "boards": "Tavler",
"resources": "Ressourcer", "resources": "Ressourcer",
"authentication": "Autorisering", "authentication": "Autorisering",
"authorization": "Autorisation" "authorization": "Autorisation"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
@@ -3338,7 +3356,7 @@
"label": "Firewall Grænseflader" "label": "Firewall Grænseflader"
}, },
"weather": { "weather": {
"label": "" "label": "Vejr"
} }
}, },
"interval": { "interval": {
@@ -3466,19 +3484,19 @@
"subtitle": "{count} brugt i koden for Homarr" "subtitle": "{count} brugt i koden for Homarr"
}, },
"hotkeys": { "hotkeys": {
"title": "", "title": "Genvejstaster",
"subtitle": "", "subtitle": "Tastaturgenveje til at forbedre din arbejdsgang",
"field": { "field": {
"shortcut": "", "shortcut": "Genvej",
"action": "" "action": "Handling"
}, },
"action": { "action": {
"toggleBoardEdit": "", "toggleBoardEdit": "Skift tavleredigeringstilstand",
"toggleColorScheme": "", "toggleColorScheme": "Slå lys/mørk tilstand til/fra",
"saveNotebook": "", "saveNotebook": "Gem notesbog (kun inde i notesbog widget)",
"openSpotlight": "" "openSpotlight": "Åbn søgefunktionen"
}, },
"note": "" "note": "Tip: Mod refererer til både Ctrl-tasten og -tasten på macOS"
} }
} }
} }
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Gruppenname bereits vergeben" "groupNameTaken": "Gruppenname bereits vergeben"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Rahmenfarbe" "label": "Rahmenfarbe"
} }
@@ -1744,6 +1753,9 @@
"label": "Aktuelle Windgeschwindigkeit anzeigen", "label": "Aktuelle Windgeschwindigkeit anzeigen",
"description": "Nur bei aktuellem Wetter" "description": "Nur bei aktuellem Wetter"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Wetterstandort" "label": "Wetterstandort"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Einladungen", "invite": "Einladungen",
"integration": "Integrationen", "integration": "Integrationen",
"app": "", "app": "",
"group": "Gruppen" "group": "Gruppen",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "", "boards": "",
"resources": "Ressourcen", "resources": "Ressourcen",
"authentication": "Authentifizierung", "authentication": "Authentifizierung",
"authorization": "Autorisierung" "authorization": "Autorisierung"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Gruppenname bereits vergeben" "groupNameTaken": "Gruppenname bereits vergeben"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Titel" "label": "Titel"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Rahmenfarbe" "label": "Rahmenfarbe"
} }
@@ -1744,6 +1753,9 @@
"label": "Aktuelle Windgeschwindigkeit anzeigen", "label": "Aktuelle Windgeschwindigkeit anzeigen",
"description": "Nur bei aktuellem Wetter" "description": "Nur bei aktuellem Wetter"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Wetterstandort" "label": "Wetterstandort"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Einladungen", "invite": "Einladungen",
"integration": "Integrationen", "integration": "Integrationen",
"app": "Apps", "app": "Apps",
"group": "Gruppen" "group": "Gruppen",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Boards", "boards": "Boards",
"resources": "Ressourcen", "resources": "Ressourcen",
"authentication": "Authentifizierung", "authentication": "Authentifizierung",
"authorization": "Autorisierung" "authorization": "Autorisierung"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Τοποθεσία καιρού" "label": "Τοποθεσία καιρού"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Προσκλήσεις", "invite": "Προσκλήσεις",
"integration": "", "integration": "",
"app": "Εφαρμογές", "app": "Εφαρμογές",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Πίνακες", "boards": "Πίνακες",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "An existing group already has this name" "groupNameTaken": "An existing group already has this name"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Title" "label": "Title"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Border colour" "label": "Border colour"
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "" "label": ""
}, },
@@ -2974,13 +2986,19 @@
"invite": "", "invite": "",
"integration": "", "integration": "",
"app": "", "app": "",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "", "boards": "",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+7 -1
View File
@@ -2986,13 +2986,19 @@
"invite": "Invites", "invite": "Invites",
"integration": "Integrations", "integration": "Integrations",
"app": "Apps", "app": "Apps",
"group": "Groups" "group": "Groups",
"searchEngine": "Search engines",
"media": "Medias"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Boards", "boards": "Boards",
"resources": "Resources", "resources": "Resources",
"authentication": "Authentication", "authentication": "Authentication",
"authorization": "Authorization" "authorization": "Authorization"
},
"heroBanner": {
"title": "Welcome back to your",
"subtitle": "{app} Board"
} }
}, },
"board": { "board": {
+28 -10
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Nombre del grupo en uso" "groupNameTaken": "Nombre del grupo en uso"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "km/h",
"milesPerHour": "mph"
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Título" "label": "Título"
}, },
"customCssClasses": {
"label": "Clases CSS personalizadas"
},
"borderColor": { "borderColor": {
"label": "Color del borde" "label": "Color del borde"
} }
@@ -1744,6 +1753,9 @@
"label": "Mostrar velocidad del viento actual", "label": "Mostrar velocidad del viento actual",
"description": "Sólo en el tiempo actual" "description": "Sólo en el tiempo actual"
}, },
"useImperialSpeed": {
"label": "Usar mph para la velocidad del viento"
},
"location": { "location": {
"label": "Ubicación" "label": "Ubicación"
}, },
@@ -1762,12 +1774,12 @@
"description": "Cómo debería ser la fecha" "description": "Cómo debería ser la fecha"
} }
}, },
"currentWindSpeed": "{currentWindSpeed} km/h", "currentWindSpeed": "{currentWindSpeed} {unit}",
"dailyForecast": { "dailyForecast": {
"sunrise": "Amanecer", "sunrise": "Amanecer",
"sunset": "Atardecer", "sunset": "Atardecer",
"maxWindSpeed": "Velocidad máxima del viento: {maxWindSpeed} km/h", "maxWindSpeed": "Velocidad máxima del viento: {maxWindSpeed} {unit}",
"maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} km/h" "maxWindGusts": "Máximas ráfagas de viento: {maxWindGusts} {unit}"
}, },
"kind": { "kind": {
"clear": "Despejado", "clear": "Despejado",
@@ -2225,7 +2237,7 @@
"total": "Total" "total": "Total"
}, },
"users": { "users": {
"main": "Mejores usuarios", "main": "Clasificación de usuarios",
"requests": "Solicitudes" "requests": "Solicitudes"
} }
} }
@@ -2974,13 +2986,19 @@
"invite": "Invitaciones", "invite": "Invitaciones",
"integration": "Integraciones", "integration": "Integraciones",
"app": "Aplicaciones", "app": "Aplicaciones",
"group": "Grupos" "group": "Grupos",
"searchEngine": "Motores de búsqueda",
"media": "Imágenes"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tableros", "boards": "Tableros",
"resources": "Recursos", "resources": "Recursos",
"authentication": "Autenticación", "authentication": "Autenticación",
"authorization": "Autenticación" "authorization": "Autenticación"
},
"heroBanner": {
"title": "Bienvenido de nuevo a tu",
"subtitle": "Tablero de {app}"
} }
}, },
"board": { "board": {
@@ -3044,11 +3062,11 @@
"general": { "general": {
"title": "General", "title": "General",
"item": { "item": {
"language": "Idioma y región", "language": "Idioma",
"board": { "board": {
"title": "Tablero de inicio", "title": "Tableros",
"type": { "type": {
"general": "General", "general": "Escritorio",
"mobile": "Móvil" "mobile": "Móvil"
} }
}, },
@@ -3217,7 +3235,7 @@
"board": { "board": {
"title": "Tableros", "title": "Tableros",
"homeBoard": { "homeBoard": {
"label": "Tablero de inicio global", "label": "Tablero de escritorio global",
"mobileLabel": "Tablero móvil global", "mobileLabel": "Tablero móvil global",
"description": "Sólo los tableros públicos están disponibles para la selección" "description": "Sólo los tableros públicos están disponibles para la selección"
}, },
@@ -4397,7 +4415,7 @@
"page": { "page": {
"list": { "list": {
"title": "Certificados de confianza", "title": "Certificados de confianza",
"description": "Utilizado por Homarr para solicitar datos de las integraciones.", "description": "Utilizados por Homarr para solicitar datos de las integraciones.",
"noResults": { "noResults": {
"title": "Aún no hay certificados" "title": "Aún no hay certificados"
}, },
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "" "label": ""
}, },
@@ -2974,13 +2986,19 @@
"invite": "", "invite": "",
"integration": "", "integration": "",
"app": "", "app": "",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "", "boards": "",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Nom de groupe déjà utilisé" "groupNameTaken": "Nom de groupe déjà utilisé"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Titre" "label": "Titre"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Couleur de la bordure" "label": "Couleur de la bordure"
} }
@@ -1744,6 +1753,9 @@
"label": "Afficher la vitesse actuelle du vent", "label": "Afficher la vitesse actuelle du vent",
"description": "Uniquement sur la météo actuelle" "description": "Uniquement sur la météo actuelle"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Lieu de la météo" "label": "Lieu de la météo"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Invitations", "invite": "Invitations",
"integration": "Intégrations", "integration": "Intégrations",
"app": "Applications", "app": "Applications",
"group": "Groupes" "group": "Groupes",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tableaux de bord", "boards": "Tableaux de bord",
"resources": "Ressources", "resources": "Ressources",
"authentication": "Authentification", "authentication": "Authentification",
"authorization": "Autorisation" "authorization": "Autorisation"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "שם הקבוצה כבר תפוס" "groupNameTaken": "שם הקבוצה כבר תפוס"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "כותרת" "label": "כותרת"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "צבע מסגרת" "label": "צבע מסגרת"
} }
@@ -1744,6 +1753,9 @@
"label": "הצגת מהירות רוח נוכחית", "label": "הצגת מהירות רוח נוכחית",
"description": "רק במזג אוויר נוכחי" "description": "רק במזג אוויר נוכחי"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "מיקום מזג האוויר" "label": "מיקום מזג האוויר"
}, },
@@ -2974,13 +2986,19 @@
"invite": "הזמנות", "invite": "הזמנות",
"integration": "אינטגרציות", "integration": "אינטגרציות",
"app": "אפליקציות", "app": "אפליקציות",
"group": "קבוצות" "group": "קבוצות",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "לוחות", "boards": "לוחות",
"resources": "מקורות", "resources": "מקורות",
"authentication": "אימות", "authentication": "אימות",
"authorization": "הרשאה" "authorization": "הרשאה"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Lokacija vremenske prognoze" "label": "Lokacija vremenske prognoze"
}, },
@@ -2974,13 +2986,19 @@
"invite": "poziva", "invite": "poziva",
"integration": "", "integration": "",
"app": "aplikacije", "app": "aplikacije",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Daske", "boards": "Daske",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Időjárás helye" "label": "Időjárás helye"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Meghívók", "invite": "Meghívók",
"integration": "Integrációk", "integration": "Integrációk",
"app": "Alkalmazások", "app": "Alkalmazások",
"group": "Csoportok" "group": "Csoportok",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Táblák", "boards": "Táblák",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Nome gruppo già preso" "groupNameTaken": "Nome gruppo già preso"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Titolo" "label": "Titolo"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Colore del bordo" "label": "Colore del bordo"
} }
@@ -1744,6 +1753,9 @@
"label": "Mostra la velocità attuale del vento", "label": "Mostra la velocità attuale del vento",
"description": "Solo sul meteo corrente" "description": "Solo sul meteo corrente"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Località meteo" "label": "Località meteo"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Inviti", "invite": "Inviti",
"integration": "Integrazioni", "integration": "Integrazioni",
"app": "Applicazioni", "app": "Applicazioni",
"group": "Gruppi" "group": "Gruppi",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Board", "boards": "Board",
"resources": "Risorse", "resources": "Risorse",
"authentication": "Autenticazione", "authentication": "Autenticazione",
"authorization": "Autorizzazione" "authorization": "Autorizzazione"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "グループ名は、既に使用されています" "groupNameTaken": "グループ名は、既に使用されています"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "タイトル" "label": "タイトル"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "境界線の色" "label": "境界線の色"
} }
@@ -1744,6 +1753,9 @@
"label": "現在の風速を表示", "label": "現在の風速を表示",
"description": "現在の天気のみ表示" "description": "現在の天気のみ表示"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "天候の場所" "label": "天候の場所"
}, },
@@ -2974,13 +2986,19 @@
"invite": "招待", "invite": "招待",
"integration": "連携機能", "integration": "連携機能",
"app": "アプリ", "app": "アプリ",
"group": "グループ" "group": "グループ",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "ボード", "boards": "ボード",
"resources": "リソース", "resources": "リソース",
"authentication": "認証", "authentication": "認証",
"authorization": "認可" "authorization": "認可"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "날씨 위치" "label": "날씨 위치"
}, },
@@ -2974,13 +2986,19 @@
"invite": "초대", "invite": "초대",
"integration": "", "integration": "",
"app": "앱", "app": "앱",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "보드", "boards": "보드",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "" "label": ""
}, },
@@ -2974,13 +2986,19 @@
"invite": "Pakvietimai", "invite": "Pakvietimai",
"integration": "", "integration": "",
"app": "Programėlės", "app": "Programėlės",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Lentos", "boards": "Lentos",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Laikapstākļu atrašānās vieta" "label": "Laikapstākļu atrašānās vieta"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Uzaicinājumi", "invite": "Uzaicinājumi",
"integration": "", "integration": "",
"app": "Lietotnes", "app": "Lietotnes",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Dēļi", "boards": "Dēļi",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Groepsnaam al in gebruik" "groupNameTaken": "Groepsnaam al in gebruik"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Titel" "label": "Titel"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Randkleur" "label": "Randkleur"
} }
@@ -1744,6 +1753,9 @@
"label": "Toon huidige windsnelheid", "label": "Toon huidige windsnelheid",
"description": "Alleen op het huidige weer" "description": "Alleen op het huidige weer"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Weerlocatie" "label": "Weerlocatie"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Uitnodigingen", "invite": "Uitnodigingen",
"integration": "Integraties", "integration": "Integraties",
"app": "Apps", "app": "Apps",
"group": "Groepen" "group": "Groepen",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Borden", "boards": "Borden",
"resources": "Bronnen", "resources": "Bronnen",
"authentication": "Authenticatie", "authentication": "Authenticatie",
"authorization": "Authorisatie" "authorization": "Authorisatie"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Gruppenavn allerede tatt" "groupNameTaken": "Gruppenavn allerede tatt"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Grensefarge" "label": "Grensefarge"
} }
@@ -1744,6 +1753,9 @@
"label": "Vis nåværende vindhastighet", "label": "Vis nåværende vindhastighet",
"description": "Bare på nåværende vær" "description": "Bare på nåværende vær"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Vær plassering" "label": "Vær plassering"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Invitasjoner", "invite": "Invitasjoner",
"integration": "Integrasjoner", "integration": "Integrasjoner",
"app": "Apper", "app": "Apper",
"group": "Grupper" "group": "Grupper",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tavler", "boards": "Tavler",
"resources": "Ressurser", "resources": "Ressurser",
"authentication": "Autentisering", "authentication": "Autentisering",
"authorization": "Autorisasjon" "authorization": "Autorisasjon"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+21 -3
View File
@@ -389,7 +389,7 @@
} }
}, },
"media": { "media": {
"title": "Media", "title": "Multimedia",
"item": { "item": {
"upload": { "upload": {
"label": "Prześlij media", "label": "Prześlij media",
@@ -978,7 +978,7 @@
} }
}, },
"media": { "media": {
"plural": "Medias", "plural": "Multimedia",
"search": "Znajdź media", "search": "Znajdź media",
"field": { "field": {
"name": "Nazwa", "name": "Nazwa",
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Nazwa użytkownika jest już zajęta" "groupNameTaken": "Nazwa użytkownika jest już zajęta"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "km/h",
"milesPerHour": "mph"
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Tytuł" "label": "Tytuł"
}, },
"customCssClasses": {
"label": "Niestandardowe klasy CSS"
},
"borderColor": { "borderColor": {
"label": "Kolor obramowania" "label": "Kolor obramowania"
} }
@@ -1744,6 +1753,9 @@
"label": "Pokaż aktualną prędkość wiatru", "label": "Pokaż aktualną prędkość wiatru",
"description": "Tylko dla bieżącej pogody" "description": "Tylko dla bieżącej pogody"
}, },
"useImperialSpeed": {
"label": "Prędkość wiatru w mph"
},
"location": { "location": {
"label": "Lokalizacja pogody" "label": "Lokalizacja pogody"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Zaproszenia", "invite": "Zaproszenia",
"integration": "Integracje", "integration": "Integracje",
"app": "Aplikacje", "app": "Aplikacje",
"group": "Grupy" "group": "Grupy",
"searchEngine": "Wyszukiwarki",
"media": "Multimedia"
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tablice", "boards": "Tablice",
"resources": "Zasoby", "resources": "Zasoby",
"authentication": "Uwierzytelnianie", "authentication": "Uwierzytelnianie",
"authorization": "Autoryzacja" "authorization": "Autoryzacja"
},
"heroBanner": {
"title": "Witaj z powrotem w swojej",
"subtitle": "{app} tablicy"
} }
}, },
"board": { "board": {
+20 -2
View File
@@ -153,7 +153,7 @@
"label": "Usar ícone para pings" "label": "Usar ícone para pings"
}, },
"defaultSearchEngine": { "defaultSearchEngine": {
"label": "Mecanismo de busca padrão" "label": "Mecanismo de pesquisa padrão"
}, },
"openSearchInNewTab": { "openSearchInNewTab": {
"label": "Abrir resultados da busca em uma nova aba" "label": "Abrir resultados da busca em uma nova aba"
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Localização do tempo" "label": "Localização do tempo"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Convites", "invite": "Convites",
"integration": "", "integration": "",
"app": "Aplicativos", "app": "Aplicativos",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Placas", "boards": "Placas",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Locație meteo" "label": "Locație meteo"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Invitații", "invite": "Invitații",
"integration": "", "integration": "",
"app": "Aplicații", "app": "Aplicații",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Planșe", "boards": "Planșe",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Имя группы уже занято" "groupNameTaken": "Имя группы уже занято"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Цвет границы" "label": "Цвет границы"
} }
@@ -1744,6 +1753,9 @@
"label": "Показать текущую скорость ветра", "label": "Показать текущую скорость ветра",
"description": "Только для текущей погоды" "description": "Только для текущей погоды"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Местоположение" "label": "Местоположение"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Приглашения", "invite": "Приглашения",
"integration": "Интеграции", "integration": "Интеграции",
"app": "Приложения", "app": "Приложения",
"group": "Группы" "group": "Группы",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Панели", "boards": "Панели",
"resources": "Ресурсы", "resources": "Ресурсы",
"authentication": "Аутентификация", "authentication": "Аутентификация",
"authorization": "Авторизация" "authorization": "Авторизация"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Názov skupiny je už obsadený" "groupNameTaken": "Názov skupiny je už obsadený"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Názov" "label": "Názov"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Farba okraja" "label": "Farba okraja"
} }
@@ -1744,6 +1753,9 @@
"label": "Zobraziť aktuálnu rýchlosť vetra", "label": "Zobraziť aktuálnu rýchlosť vetra",
"description": "Len za aktuálneho počasia" "description": "Len za aktuálneho počasia"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Poloha počasia" "label": "Poloha počasia"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Pozvánky", "invite": "Pozvánky",
"integration": "Integrácie", "integration": "Integrácie",
"app": "Aplikácie", "app": "Aplikácie",
"group": "Skupiny" "group": "Skupiny",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Dosky", "boards": "Dosky",
"resources": "Zdroje", "resources": "Zdroje",
"authentication": "Autentifikácia", "authentication": "Autentifikácia",
"authorization": "Autorizácia" "authorization": "Autorizácia"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Lokacija vremena" "label": "Lokacija vremena"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Vabi", "invite": "Vabi",
"integration": "", "integration": "",
"app": "Aplikacije", "app": "Aplikacije",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Deske", "boards": "Deske",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Plats för väder" "label": "Plats för väder"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Inbjudningar", "invite": "Inbjudningar",
"integration": "Integrationer", "integration": "Integrationer",
"app": "Applikationer", "app": "Applikationer",
"group": "Grupper" "group": "Grupper",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Tavlor", "boards": "Tavlor",
"resources": "Resurser", "resources": "Resurser",
"authentication": "Autentisering", "authentication": "Autentisering",
"authorization": "Auktorisering" "authorization": "Auktorisering"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Grup adı zaten alınmış" "groupNameTaken": "Grup adı zaten alınmış"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "Başlık" "label": "Başlık"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "Kenarlık rengi" "label": "Kenarlık rengi"
} }
@@ -1744,6 +1753,9 @@
"label": "Mevcut rüzgar hızını göster", "label": "Mevcut rüzgar hızını göster",
"description": "Yalnızca mevcut hava durumunda" "description": "Yalnızca mevcut hava durumunda"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Hava durumu konumu" "label": "Hava durumu konumu"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Davetler", "invite": "Davetler",
"integration": "Entegrasyonlar", "integration": "Entegrasyonlar",
"app": "Uygulamalar", "app": "Uygulamalar",
"group": "Gruplar" "group": "Gruplar",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Paneller", "boards": "Paneller",
"resources": "Kaynaklar", "resources": "Kaynaklar",
"authentication": "Kimlik doğrulama", "authentication": "Kimlik doğrulama",
"authorization": "Yetkilendirme" "authorization": "Yetkilendirme"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "Назва групи вже зайнята" "groupNameTaken": "Назва групи вже зайнята"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "Показати поточну швидкість вітру", "label": "Показати поточну швидкість вітру",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Погодна локація" "label": "Погодна локація"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Запрошення", "invite": "Запрошення",
"integration": "Інтеграції", "integration": "Інтеграції",
"app": "Додатки", "app": "Додатки",
"group": "Групи" "group": "Групи",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Дошки", "boards": "Дошки",
"resources": "Ресурси", "resources": "Ресурси",
"authentication": "Аутентифікація", "authentication": "Аутентифікація",
"authorization": "Авторизація" "authorization": "Авторизація"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "" "groupNameTaken": ""
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "" "label": ""
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "" "label": ""
} }
@@ -1744,6 +1753,9 @@
"label": "", "label": "",
"description": "" "description": ""
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "Vị trí thời tiết" "label": "Vị trí thời tiết"
}, },
@@ -2974,13 +2986,19 @@
"invite": "Mời", "invite": "Mời",
"integration": "", "integration": "",
"app": "Ứng dụng", "app": "Ứng dụng",
"group": "" "group": "",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "Bảng", "boards": "Bảng",
"resources": "", "resources": "",
"authentication": "", "authentication": "",
"authorization": "" "authorization": ""
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+19 -1
View File
@@ -1145,6 +1145,12 @@
"groupNameTaken": "用戶組名稱已存在" "groupNameTaken": "用戶組名稱已存在"
} }
} }
},
"unit": {
"speed": {
"kilometersPerHour": "",
"milesPerHour": ""
}
} }
}, },
"section": { "section": {
@@ -1157,6 +1163,9 @@
"title": { "title": {
"label": "標題" "label": "標題"
}, },
"customCssClasses": {
"label": ""
},
"borderColor": { "borderColor": {
"label": "邊框顏色" "label": "邊框顏色"
} }
@@ -1744,6 +1753,9 @@
"label": "顯示當前風速", "label": "顯示當前風速",
"description": "僅限當前天氣" "description": "僅限當前天氣"
}, },
"useImperialSpeed": {
"label": ""
},
"location": { "location": {
"label": "天氣位置" "label": "天氣位置"
}, },
@@ -2974,13 +2986,19 @@
"invite": "邀請", "invite": "邀請",
"integration": "集成", "integration": "集成",
"app": "應用程式", "app": "應用程式",
"group": "群組" "group": "群組",
"searchEngine": "",
"media": ""
}, },
"statisticLabel": { "statisticLabel": {
"boards": "面板", "boards": "面板",
"resources": "資源", "resources": "資源",
"authentication": "認證", "authentication": "認證",
"authorization": "認證" "authorization": "認證"
},
"heroBanner": {
"title": "",
"subtitle": ""
} }
}, },
"board": { "board": {
+3 -3
View File
@@ -30,9 +30,9 @@
"@homarr/log": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/dates": "^8.3.3", "@mantine/dates": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"@tabler/icons-react": "^3.35.0", "@tabler/icons-react": "^3.35.0",
"mantine-react-table": "2.0.0-beta.9", "mantine-react-table": "2.0.0-beta.9",
"next": "15.5.4", "next": "15.5.4",
+1 -1
View File
@@ -24,7 +24,7 @@
"dependencies": { "dependencies": {
"@homarr/definitions": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"zod": "^4.1.11", "zod": "^4.1.12",
"zod-form-data": "^3.0.1" "zod-form-data": "^3.0.1"
}, },
"devDependencies": { "devDependencies": {
+20 -20
View File
@@ -48,26 +48,26 @@
"@homarr/translation": "workspace:^0.1.0", "@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0", "@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/charts": "^8.3.3", "@mantine/charts": "^8.3.4",
"@mantine/core": "^8.3.3", "@mantine/core": "^8.3.4",
"@mantine/hooks": "^8.3.3", "@mantine/hooks": "^8.3.4",
"@tabler/icons-react": "^3.35.0", "@tabler/icons-react": "^3.35.0",
"@tiptap/extension-color": "2.26.2", "@tiptap/extension-color": "2.26.3",
"@tiptap/extension-highlight": "2.26.2", "@tiptap/extension-highlight": "2.26.3",
"@tiptap/extension-image": "2.26.2", "@tiptap/extension-image": "2.26.3",
"@tiptap/extension-link": "^2.26.2", "@tiptap/extension-link": "^2.26.3",
"@tiptap/extension-placeholder": "^2.26.2", "@tiptap/extension-placeholder": "^2.26.3",
"@tiptap/extension-table": "2.26.2", "@tiptap/extension-table": "2.26.3",
"@tiptap/extension-table-cell": "2.26.2", "@tiptap/extension-table-cell": "2.26.3",
"@tiptap/extension-table-header": "2.26.2", "@tiptap/extension-table-header": "2.26.3",
"@tiptap/extension-table-row": "2.26.2", "@tiptap/extension-table-row": "2.26.3",
"@tiptap/extension-task-item": "2.26.2", "@tiptap/extension-task-item": "2.26.3",
"@tiptap/extension-task-list": "2.26.2", "@tiptap/extension-task-list": "2.26.3",
"@tiptap/extension-text-align": "2.26.2", "@tiptap/extension-text-align": "2.26.3",
"@tiptap/extension-text-style": "2.26.2", "@tiptap/extension-text-style": "2.26.3",
"@tiptap/extension-underline": "2.26.2", "@tiptap/extension-underline": "2.26.3",
"@tiptap/react": "^2.26.2", "@tiptap/react": "^2.26.3",
"@tiptap/starter-kit": "^2.26.1", "@tiptap/starter-kit": "^2.26.3",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.18", "dayjs": "^1.11.18",
"mantine-form-zod-resolver": "^1.3.0", "mantine-form-zod-resolver": "^1.3.0",
@@ -78,7 +78,7 @@
"react-markdown": "^10.1.0", "react-markdown": "^10.1.0",
"recharts": "^2.15.4", "recharts": "^2.15.4",
"video.js": "^8.23.4", "video.js": "^8.23.4",
"zod": "^4.1.11" "zod": "^4.1.12"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
+642 -617
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1 +1 @@
[{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"tancak","avatar_url":"https://avatars.githubusercontent.com/u/11760749?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47Line truncated [{"login":"ajnart","avatar_url":"https://avatars.githubusercontent.com/u/49837342?v=4"},{"login":"manuel-rw","avatar_url":"https://avatars.githubusercontent.com/u/30572287?v=4"},{"login":"Meierschlumpf","avatar_url":"https://avatars.githubusercontent.com/u/63781622?v=4"},{"login":"SeDemal","avatar_url":"https://avatars.githubusercontent.com/u/26098587?v=4"},{"login":"lammersbjorn","avatar_url":"https://avatars.githubusercontent.com/u/71191962?v=4"},{"login":"LarveyOfficial","avatar_url":"https://avatars.githubusercontent.com/u/39219859?v=4"},{"login":"c00ldude1oo","avatar_url":"https://avatars.githubusercontent.com/u/15677803?v=4"},{"login":"InterN0te","avatar_url":"https://avatars.githubusercontent.com/u/10882916?v=4"},{"login":"Aimsucks","avatar_url":"https://avatars.githubusercontent.com/u/1828486?v=4"},{"login":"JannesV","avatar_url":"https://avatars.githubusercontent.com/u/5984244?v=4"},{"login":"MauriceNino","avatar_url":"https://avatars.githubusercontent.com/u/18658092?v=4"},{"login":"hillaliy","avatar_url":"https://avatars.githubusercontent.com/u/950010?v=4"},{"login":"Skeeww","avatar_url":"https://avatars.githubusercontent.com/u/9639992?v=4"},{"login":"RichyHBM","avatar_url":"https://avatars.githubusercontent.com/u/5472275?v=4"},{"login":"Bonfire","avatar_url":"https://avatars.githubusercontent.com/u/5704760?v=4"},{"login":"wieli99","avatar_url":"https://avatars.githubusercontent.com/u/46794825?v=4"},{"login":"ishaanparlikar","avatar_url":"https://avatars.githubusercontent.com/u/43013132?v=4"},{"login":"Zareix","avatar_url":"https://avatars.githubusercontent.com/u/29818713?v=4"},{"login":"tuggan","avatar_url":"https://avatars.githubusercontent.com/u/4325608?v=4"},{"login":"Spillebulle","avatar_url":"https://avatars.githubusercontent.com/u/46653946?v=4"},{"login":"tancak","avatar_url":"https://avatars.githubusercontent.com/u/11760749?v=4"},{"login":"spkesDE","avatar_url":"https://avatars.githubusercontent.com/u/1682314?v=4"},{"login":"j3lte","avatar_url":"https://avatars.githubusercontent.com/u/2557568?v=4"},{"login":"dslatt","avatar_url":"https://avatars.githubusercontent.com/u/5211001?v=4"},{"login":"Malong11-007","avatar_url":"https://avatars.githubusercontent.com/u/40298510?v=4"},{"login":"StefanB7","avatar_url":"https://avatars.githubusercontent.com/u/22056509?v=4"},{"login":"souravghosh01","avatar_url":"https://avatars.githubusercontent.com/u/37548139?v=4"},{"login":"SR3u","avatar_url":"https://avatars.githubusercontent.com/u/2380522?v=4"},{"login":"Rikpat","avatar_url":"https://avatars.githubusercontent.com/u/33869814?v=4"},{"login":"NormanJS","avatar_url":"https://avatars.githubusercontent.com/u/83409549?v=4"},{"login":"No-Maines-Land","avatar_url":"https://avatars.githubusercontent.com/u/20687725?v=4"},{"login":"stark1tty","avatar_url":"https://avatars.githubusercontent.com/u/69326376?v=4"},{"login":"Momcilo42","avatar_url":"https://avatars.githubusercontent.com/u/10118137?v=4"},{"login":"marius-arch","avatar_url":"https://avatars.githubusercontent.com/u/72494359?v=4"},{"login":"Lumilias","avatar_url":"https://avatars.githubusercontent.com/u/10852161?v=4"},{"login":"Havock94","avatar_url":"https://avatars.githubusercontent.com/u/7635248?v=4"},{"login":"Lollyde","avatar_url":"https://avatars.githubusercontent.com/u/11347524?v=4"},{"login":"krishnamuppaneni","avatar_url":"https://avatars.githubusercontent.com/u/4703366?v=4"},{"login":"devtobi","avatar_url":"https://avatars.githubusercontent.com/u/28538704?v=4"},{"login":"TyxTang","avatar_url":"https://avatars.githubusercontent.com/u/90897955?v=4"},{"login":"VinnyVynce","avatar_url":"https://avatars.githubusercontent.com/u/19630511?v=4"},{"login":"WillyJL","avatar_url":"https://avatars.githubusercontent.com/u/49810075?v=4"},{"login":"anonysoul","avatar_url":"https://avatars.githubusercontent.com/u/105715150?v=4"},{"login":"cospeedster","avatar_url":"https://avatars.githubusercontent.com/u/52749645?v=4"},{"login":"diederbert","avatar_url":"https://avatars.githubusercontent.com/u/162878798?v=4"},{"login":"digdilem","avatar_url":"https://avatars.githubusercontent.com/u/4052275?v=4"},{"login":"dinghino","avatar_url":"https://avatars.githubusercontent.com/u/14729459?v=4"},{"login":"gfomichev","avatar_url":"https://avatars.githubusercontent.com/u/1596146?v=4"},{"login":"gnattu","avatar_url":"https://avatars.githubusercontent.com/u/12995396?v=4"},{"login":"tuxpizza","avatar_url":"https://avatars.githubusercontent.com/u/84710786?v=4"},{"login":"xmarkurion","avatar_url":"https://avatars.githubusercontent.com/u/46654687?v=4"},{"login":"huanga","avatar_url":"https://avatars.githubusercontent.com/u/732970?v=4"},{"login":"taos15","avatar_url":"https://avatars.githubusercontent.com/u/122130728?v=4"},{"login":"arghyadipchak","avatar_url":"https://avatars.githubusercontent.com/u/32430374?v=4"},{"login":"AuthorShin","avatar_url":"https://avatars.githubusercontent.com/u/4959043?v=4"},{"login":"benniblot","avatar_url":"https://avatars.githubusercontent.com/u/47Line truncated
+1 -1
View File
@@ -1 +1 @@
[{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowLine truncated [{"username":"carlchina","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/6697/medium/d22bbe7797bbeb30dbdc73a5648d329a_default.png"},{"username":"zielmann","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/7795/medium/ad22b8b8d5eb33e4154d53a454c862fd_default.png"},{"username":"Thalyn","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12494028/medium/5faf5acc945a874ed116c4567edaa09f_default.png"},{"username":"magnushj","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12503488/medium/68f32e33ea7b891960055c9f831f7344_default.png"},{"username":"almontegil","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12580457/medium/f4136cacbdfdb4c28ae7f85dc5f840db_default.png"},{"username":"Skick","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12619811/medium/0331f1de413a645b4516bc4e037f31bb.jpg"},{"username":"andibing","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12664938/medium/b8be63e4dcb2e791ced1ffc9e3a049a5.jpg"},{"username":"gronare","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12680911/medium/c6eb14d1504156f34a158e507f73aa3d_default.png"},{"username":"SmartPhoneLover","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12701640/medium/ec95486662ec875cda080e778c3ff702.jpg"},{"username":"marcelotk_15","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/12773227/medium/ecf6bea16ab0c873c131df2154ee9718_default.png"},{"username":"S3OD177","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13051544/medium/11dd990837f61f7e8f7d36b041a7fddb_default.png"},{"username":"marcg","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13153301/medium/ebcf60fbf27deb148ec40a659566c6ff_default.png"},{"username":"BeersTeddy","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13185230/medium/2f1f4e1effe74a23422b195cbefb2a95_default.png"},{"username":"jamesmcmahon0","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13245578/medium/586aa873b4abddbd9abc6f3de99ab70e.jpeg"},{"username":"b1nar10","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13286752/medium/249b02e3368752cb175446082015737c_default.png"},{"username":"vannCN","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13330448/medium/9b8a9ee3611e51e951e22d5fd4eb7d8d.jpg"},{"username":"binswm","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13343482/medium/45dde0e6097b9b72705d2eba9dbbc276_default.png"},{"username":"SkewRam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13496556/medium/188f5c2deb7938eda51eb786cc4539ca.jpeg"},{"username":"raphcatarino","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13547726/medium/b003511e67df13a4b4b5689488fa8099.jpg"},{"username":"shillos5","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13600557/medium/b17650b2b84f829d54fa548c44c1ab27.jpeg"},{"username":"wolong98","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/13641407/medium/f4634edc58c7857a357e5293543c15cf.jpg"},{"username":"spair0039","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14012333/medium/72430e96027c09c19141cac38eae4617.png"},{"username":"MajorMarcin","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14072183/medium/0a197e64bb92b6ea94cecbb607512c45.jpg"},{"username":"KosmoMoustache","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14103535/medium/51c438cdd9f86e8811c75f4869de479c.png"},{"username":"Soochaehwa","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14118689/medium/496a1ce63111547bf455a1e0a7ac75f1_default.png"},{"username":"garryfield","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14187035/medium/520c964706676045f6eeec1b08edc880.jpg"},{"username":"droidenko","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14444264/medium/4aa3a8e824f72bc9e5ec0d8de307095e.jpeg"},{"username":"maathis","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14489950/medium/6eeddf13a757ee35f78f1763f94d95e1.jpeg"},{"username":"bukvam","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14546502/medium/a819dc40a13c57395a17dc46e847d3ce.jpg"},{"username":"gm.cinalli","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14670666/medium/2d466a0fdbda40764526be86c97c0ab4.jpeg"},{"username":"antoine2tt","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14722148/medium/f88d926900862dd59007ea4b3419cb9d.png"},{"username":"cretzen","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14799754/medium/3ba5c1805ec20c000d5810c07985afe9.jpg"},{"username":"ktKongTong","avatarUrl":"https://crowdin-static.cf-downloads.crowdin.com/avatar/14817246/medium/97cfc3c028dbdaf85ebd1102da71e58c.jpeg"},{"username":"marinkaberg","avatarUrl":"https://crowLine truncated
+1 -1
View File
@@ -24,7 +24,7 @@
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^6.1.1", "eslint-plugin-react-hooks": "^6.1.1",
"typescript-eslint": "^8.45.0" "typescript-eslint": "^8.46.0"
}, },
"devDependencies": { "devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",