chore(release): automatic release v1.53.0

This commit is contained in:
homarr-releases[bot] authored and GitHub committed 2026-02-06 19:37:00 +00:00
commit 129d96f607
33 files changed
+1964 -1996

No files matched your search

+16 -16
View File
@@ -48,21 +48,21 @@
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@homarr/widgets": "workspace:^0.1.0",
"@mantine/colors-generator": "^8.3.13",
"@mantine/core": "^8.3.13",
"@mantine/dropzone": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/modals": "^8.3.13",
"@mantine/tiptap": "^8.3.13",
"@mantine/colors-generator": "^8.3.14",
"@mantine/core": "^8.3.14",
"@mantine/dropzone": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"@mantine/modals": "^8.3.14",
"@mantine/tiptap": "^8.3.14",
"@million/lint": "1.0.14",
"@tabler/icons-react": "^3.36.1",
"@tanstack/react-query": "^5.90.20",
"@tanstack/react-query-devtools": "^5.91.2",
"@tanstack/react-query-devtools": "^5.91.3",
"@tanstack/react-query-next-experimental": "^5.91.0",
"@trpc/client": "^11.8.1",
"@trpc/next": "^11.8.1",
"@trpc/react-query": "^11.8.1",
"@trpc/server": "^11.8.1",
"@trpc/client": "^11.9.0",
"@trpc/next": "^11.9.0",
"@trpc/react-query": "^11.9.0",
"@trpc/server": "^11.9.0",
"@xterm/addon-canvas": "^0.7.0",
"@xterm/addon-fit": "0.11.0",
"@xterm/xterm": "^6.0.0",
@@ -74,13 +74,13 @@
"flag-icons": "^7.5.0",
"glob": "^13.0.0",
"isomorphic-dompurify": "^2.35.0",
"jotai": "^2.16.2",
"jotai": "^2.17.0",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.1.5",
"next": "16.1.6",
"postcss-preset-mantine": "^1.18.0",
"prismjs": "^1.30.0",
"react": "19.2.3",
"react-dom": "19.2.3",
"react": "19.2.4",
"react-dom": "19.2.4",
"react-error-boundary": "^6.1.0",
"react-simple-code-editor": "^0.14.1",
"sass": "^1.97.3",
@@ -96,7 +96,7 @@
"@types/chroma-js": "3.1.2",
"@types/node": "^24.10.9",
"@types/prismjs": "^1.26.5",
"@types/react": "19.2.9",
"@types/react": "19.2.10",
"@types/react-dom": "19.2.3",
"@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.2.1",
@@ -1,6 +1,5 @@
"use client";
import { startTransition } from "react";
import { Button, Card, Group, Stack, Switch, Text } from "@mantine/core";
import { IconArrowRight } from "@tabler/icons-react";
import type { z } from "zod/v4";
@@ -24,16 +23,6 @@ export const InitSettings = () => {
});
const form = useZodForm(settingsInitSchema, { initialValues: defaultServerSettings });
form.watch("analytics.enableGeneral", ({ value }) => {
if (!value) {
startTransition(() => {
form.setFieldValue("analytics.enableWidgetData", false);
form.setFieldValue("analytics.enableIntegrationData", false);
form.setFieldValue("analytics.enableUserData", false);
});
}
});
const handleSubmitAsync = async (values: z.infer<typeof settingsInitSchema>) => {
await mutateAsync(values);
};
@@ -47,24 +36,6 @@ export const InitSettings = () => {
<Stack gap="xs">
<AnalyticsRow kind="general" {...form.getInputProps("analytics.enableGeneral", { type: "checkbox" })} />
<Stack gap="xs" ps="md" w="100%">
<AnalyticsRow
kind="integrationData"
disabled={!form.values.analytics.enableGeneral}
{...form.getInputProps("analytics.enableWidgetData", { type: "checkbox" })}
/>
<AnalyticsRow
kind="widgetData"
disabled={!form.values.analytics.enableGeneral}
{...form.getInputProps("analytics.enableIntegrationData", { type: "checkbox" })}
/>
<AnalyticsRow
kind="usersData"
disabled={!form.values.analytics.enableGeneral}
{...form.getInputProps("analytics.enableUserData", { type: "checkbox" })}
/>
</Stack>
</Stack>
</Stack>
</Card>
@@ -24,15 +24,6 @@ export const AnalyticsSettings = ({ initialData }: AnalyticsSettingsProps) => {
return;
}
if (
!updatedValues.enableGeneral &&
(updatedValues.enableWidgetData || updatedValues.enableIntegrationData || updatedValues.enableUserData)
) {
updatedValues.enableIntegrationData = false;
updatedValues.enableUserData = false;
updatedValues.enableWidgetData = false;
}
void mutateAsync({
settingsKey: "analytics",
value: updatedValues,
@@ -54,30 +45,6 @@ export const AnalyticsSettings = ({ initialData }: AnalyticsSettingsProps) => {
<LoadingOverlay visible={isPending} zIndex={1000} overlayProps={{ radius: "sm", blur: 2 }} />
<Stack>
<SwitchSetting form={form} formKey="enableGeneral" title={t("general.title")} text={t("general.text")} />
<SwitchSetting
form={form}
formKey="enableIntegrationData"
ms="xl"
title={t("integrationData.title")}
text={t("integrationData.text")}
disabled={!form.values.enableGeneral}
/>
<SwitchSetting
form={form}
formKey="enableWidgetData"
ms="xl"
title={t("widgetData.title")}
text={t("widgetData.text")}
disabled={!form.values.enableGeneral}
/>
<SwitchSetting
form={form}
formKey="enableUserData"
ms="xl"
title={t("usersData.title")}
text={t("usersData.text")}
disabled={!form.values.enableGeneral}
/>
</Stack>
</Card>
</>
+1 -1
View File
@@ -39,7 +39,7 @@
"@homarr/widgets": "workspace:^0.1.0",
"dayjs": "^1.11.19",
"dotenv": "^17.2.3",
"fastify": "^5.7.1",
"fastify": "^5.7.2",
"superjson": "2.2.6",
"undici": "7.18.2"
},
+2 -2
View File
@@ -4,10 +4,10 @@
"dependencies": {
"better-sqlite3": "^12.6.2"
},
"packageManager": "pnpm@10.28.1",
"packageManager": "pnpm@10.28.2",
"engines": {
"node": ">=24.13.0",
"pnpm": ">=10.28.1"
"pnpm": ">=10.28.2"
},
"pnpm": {
"onlyBuiltDependencies": [
+10 -10
View File
@@ -39,11 +39,11 @@
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/commit-analyzer": "^13.0.1",
"@semantic-release/git": "^10.0.1",
"@semantic-release/github": "^12.0.2",
"@semantic-release/github": "^12.0.3",
"@semantic-release/npm": "^13.1.3",
"@semantic-release/release-notes-generator": "^14.1.0",
"@testcontainers/redis": "^11.11.0",
"@turbo/gen": "^2.7.6",
"@turbo/gen": "^2.8.1",
"@vitejs/plugin-react": "^5.1.2",
"@vitest/coverage-v8": "^4.0.18",
"@vitest/ui": "^4.0.18",
@@ -52,17 +52,17 @@
"jsdom": "^27.4.0",
"json5": "^2.2.3",
"prettier": "^3.8.1",
"semantic-release": "^25.0.2",
"semantic-release": "^25.0.3",
"testcontainers": "^11.11.0",
"turbo": "^2.7.6",
"turbo": "^2.8.1",
"typescript": "^5.9.3",
"vite-tsconfig-paths": "^6.0.5",
"vitest": "^4.0.18"
},
"packageManager": "pnpm@10.28.1",
"packageManager": "pnpm@10.28.2",
"engines": {
"node": ">=24.13.0",
"pnpm": ">=10.28.1"
"pnpm": ">=10.28.2"
},
"pnpm": {
"onlyBuiltDependencies": [
@@ -79,7 +79,7 @@
"overrides": {
"@babel/helpers@<7.26.10": ">=7.28.6",
"@babel/runtime@<7.26.10": ">=7.28.6",
"axios@>=1.0.0 <1.8.2": ">=1.13.3",
"axios@>=1.0.0 <1.8.2": ">=1.13.4",
"brace-expansion@>=2.0.0 <=2.0.1": ">=4.0.1",
"brace-expansion@>=1.0.0 <=1.1.11": ">=4.0.1",
"esbuild@<=0.24.2": ">=0.27.2",
@@ -88,9 +88,9 @@
"linkifyjs@<4.3.2": ">=4.3.2",
"nanoid@>=4.0.0 <5.0.9": ">=5.1.6",
"prismjs@<1.30.0": ">=1.30.0",
"proxmox-api>undici": "7.19.1",
"react-is": "^19.2.3",
"rollup@>=4.0.0 <4.22.4": ">=4.56.0",
"proxmox-api>undici": "7.19.2",
"react-is": "^19.2.4",
"rollup@>=4.0.0 <4.22.4": ">=4.57.1",
"sha.js@<=2.4.11": ">=2.4.12",
"tar-fs@>=3.0.0 <3.0.9": ">=3.1.1",
"tar-fs@>=2.0.0 <2.1.3": ">=3.1.1",
+3
View File
@@ -22,8 +22,11 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/auth": "workspace:^0.1.0",
"@homarr/common": "workspace:^0.1.0",
"@homarr/core": "workspace:^0.1.0",
"@homarr/db": "workspace:^0.1.0",
"@homarr/docker": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@umami/node": "^0.4.0",
"superjson": "2.2.6"
+70 -54
View File
@@ -1,17 +1,52 @@
import type { UmamiEventData } from "@umami/node";
import { Umami } from "@umami/node";
import { isProviderEnabled } from "@homarr/auth/server";
import { Stopwatch } from "@homarr/common";
import { createLogger } from "@homarr/core/infrastructure/logs";
import { count, db } from "@homarr/db";
import { isMysql, isPostgresql } from "@homarr/db/collection";
import { getServerSettingByKeyAsync } from "@homarr/db/queries";
import { integrations, items, users } from "@homarr/db/schema";
import type { defaultServerSettings } from "@homarr/server-settings";
import {
apiKeys,
apps,
boards,
cronJobConfigurations,
groups,
iconRepositories,
icons,
integrations,
invites,
itemLayouts,
items,
layouts,
medias,
searchEngines,
sectionLayouts,
sections,
users,
} from "@homarr/db/schema";
import { env as dockerEnv } from "@homarr/docker/env";
import { Stopwatch } from "../../common/src";
import packageJson from "../../../package.json";
import { UMAMI_HOST_URL, UMAMI_WEBSITE_ID } from "./constants";
const logger = createLogger({ module: "analytics" });
const getDatabaseType = (): "mysql" | "postgresql" | "sqlite" => {
if (isMysql()) return "mysql";
if (isPostgresql()) return "postgresql";
return "sqlite";
};
const getEnabledAuthProviders = (): string[] => {
const providers: string[] = [];
if (isProviderEnabled("credentials")) providers.push("credentials");
if (isProviderEnabled("oidc")) providers.push("oidc");
if (isProviderEnabled("ldap")) providers.push("ldap");
return providers;
};
export const sendServerAnalyticsAsync = async () => {
const stopWatch = new Stopwatch();
const analyticsSettings = await getServerSettingByKeyAsync(db, "analytics");
@@ -27,67 +62,48 @@ export const sendServerAnalyticsAsync = async () => {
websiteId: UMAMI_WEBSITE_ID,
});
await sendIntegrationDataAsync(umamiInstance, analyticsSettings);
await sendWidgetDataAsync(umamiInstance, analyticsSettings);
await sendUserDataAsync(umamiInstance, analyticsSettings);
const enabledAuthProviders = getEnabledAuthProviders();
logger.info(`Sent all analytics in ${stopWatch.getElapsedInHumanWords()}`);
};
const analyticsData: UmamiEventData = {
homarrVersion: packageJson.version,
databaseType: getDatabaseType(),
dockerEnabled: dockerEnv.ENABLE_DOCKER ? 1 : 0,
kubernetesEnabled: dockerEnv.ENABLE_KUBERNETES ? 1 : 0,
authCredentials: enabledAuthProviders.includes("credentials") ? 1 : 0,
authOidc: enabledAuthProviders.includes("oidc") ? 1 : 0,
authLdap: enabledAuthProviders.includes("ldap") ? 1 : 0,
countUsers: await db.$count(users),
countBoards: await db.$count(boards),
countGroups: await db.$count(groups),
countApps: await db.$count(apps),
countWidgets: await db.$count(items),
countSections: await db.$count(sections),
countIntegrations: await db.$count(integrations),
countSearchEngines: await db.$count(searchEngines),
countIconRepositories: await db.$count(iconRepositories),
countIcons: await db.$count(icons),
countApiKeys: await db.$count(apiKeys),
countInvites: await db.$count(invites),
countMedias: await db.$count(medias),
countLayouts: await db.$count(layouts),
countItemLayouts: await db.$count(itemLayouts),
countSectionLayouts: await db.$count(sectionLayouts),
countCronJobConfigs: await db.$count(cronJobConfigurations),
};
const sendWidgetDataAsync = async (umamiInstance: Umami, analyticsSettings: typeof defaultServerSettings.analytics) => {
if (!analyticsSettings.enableWidgetData) {
return;
}
const widgetCount = await db.$count(items);
const response = await umamiInstance.track("server-widget-data", {
countWidgets: widgetCount,
});
if (response.ok) {
return;
}
logger.warn("Unable to send track event data to Umami instance");
};
const sendUserDataAsync = async (umamiInstance: Umami, analyticsSettings: typeof defaultServerSettings.analytics) => {
if (!analyticsSettings.enableUserData) {
return;
}
const userCount = await db.$count(users);
const response = await umamiInstance.track("server-user-data", {
countUsers: userCount,
});
if (response.ok) {
return;
}
logger.warn("Unable to send track event data to Umami instance");
};
const sendIntegrationDataAsync = async (
umamiInstance: Umami,
analyticsSettings: typeof defaultServerSettings.analytics,
) => {
if (!analyticsSettings.enableIntegrationData) {
return;
}
const integrationKinds = await db
.select({ kind: integrations.kind, count: count(integrations.id) })
.from(integrations)
.groupBy(integrations.kind);
const map: UmamiEventData = {};
integrationKinds.forEach((integrationKind) => {
map[integrationKind.kind] = integrationKind.count;
analyticsData[`integration_${integrationKind.kind}`] = integrationKind.count;
});
const response = await umamiInstance.track("server-integration-data-kind", map);
if (response.ok) {
return;
const response = await umamiInstance.track("server-analytics-v2", analyticsData);
if (!response.ok) {
logger.warn("Unable to send analytics to Umami instance");
}
logger.warn("Unable to send track event data to Umami instance");
logger.info(`Sent analytics in ${stopWatch.getElapsedInHumanWords()}`);
};
+7 -7
View File
@@ -42,14 +42,14 @@
"@homarr/validation": "workspace:^0.1.0",
"@kubernetes/client-node": "^1.4.0",
"@tanstack/react-query": "^5.90.20",
"@trpc/client": "^11.8.1",
"@trpc/react-query": "^11.8.1",
"@trpc/server": "^11.8.1",
"@trpc/tanstack-react-query": "^11.8.1",
"@trpc/client": "^11.9.0",
"@trpc/react-query": "^11.9.0",
"@trpc/server": "^11.9.0",
"@trpc/tanstack-react-query": "^11.9.0",
"lodash.clonedeep": "^4.5.0",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"superjson": "2.2.6",
"trpc-to-openapi": "^3.1.0",
"zod": "^4.2.1"
+4 -4
View File
@@ -33,11 +33,11 @@
"@homarr/validation": "workspace:^0.1.0",
"bcrypt": "^6.0.0",
"cookies": "^0.9.1",
"ldapts": "8.1.3",
"next": "16.1.5",
"ldapts": "8.1.4",
"next": "16.1.6",
"next-auth": "5.0.0-beta.30",
"react": "19.2.3",
"react-dom": "19.2.3",
"react": "19.2.4",
"react-dom": "19.2.4",
"zod": "^4.2.1"
},
"devDependencies": {
+2 -2
View File
@@ -25,8 +25,8 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/api": "workspace:^0.1.0",
"react": "19.2.3",
"react-dom": "19.2.3"
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
+4 -4
View File
@@ -27,12 +27,12 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/core": "workspace:^0.1.0",
"@paralleldrive/cuid2": "^3.1.0",
"@paralleldrive/cuid2": "^3.3.0",
"dayjs": "^1.11.19",
"next": "16.1.5",
"next": "16.1.6",
"octokit": "^5.0.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"react": "19.2.4",
"react-dom": "19.2.4",
"undici": "7.18.2",
"zod": "^4.2.1",
"zod-validation-error": "^5.0.0"
+2 -2
View File
@@ -42,8 +42,8 @@
"dns-caching": "^0.2.9",
"drizzle-orm": "^0.45.1",
"ioredis": "5.9.2",
"mysql2": "3.16.1",
"pg": "^8.17.2",
"mysql2": "3.16.2",
"pg": "^8.18.0",
"superjson": "2.2.6",
"winston": "3.19.0",
"zod": "^4.2.1"
+5 -5
View File
@@ -29,11 +29,11 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/cron-jobs": "workspace:^0.1.0",
"@tanstack/react-query": "^5.90.20",
"@trpc/client": "^11.8.1",
"@trpc/server": "^11.8.1",
"@trpc/tanstack-react-query": "^11.8.1",
"@trpc/client": "^11.9.0",
"@trpc/server": "^11.9.0",
"@trpc/tanstack-react-query": "^11.9.0",
"node-cron": "^4.2.1",
"react": "19.2.3",
"react": "19.2.4",
"zod": "^4.2.1"
},
"devDependencies": {
@@ -41,7 +41,7 @@
"@homarr/prettier-config": "workspace:^0.1.0",
"@homarr/tsconfig": "workspace:^0.1.0",
"@types/node-cron": "^3.0.11",
"@types/react": "19.2.9",
"@types/react": "19.2.10",
"eslint": "^9.39.2",
"typescript": "^5.9.3"
}
+4 -4
View File
@@ -47,8 +47,8 @@
"@homarr/core": "workspace:^0.1.0",
"@homarr/definitions": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@paralleldrive/cuid2": "^3.1.0",
"@mantine/core": "^8.3.14",
"@paralleldrive/cuid2": "^3.3.0",
"@testcontainers/mysql": "^11.11.0",
"@testcontainers/postgresql": "^11.11.0",
"better-sqlite3": "^12.6.2",
@@ -56,8 +56,8 @@
"drizzle-kit": "^0.31.8",
"drizzle-orm": "^0.45.1",
"drizzle-zod": "^0.8.3",
"mysql2": "3.16.1",
"pg": "^8.17.2",
"mysql2": "3.16.2",
"pg": "^8.18.0",
"superjson": "2.2.6"
},
"devDependencies": {
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/common": "workspace:^0.1.0",
"fast-xml-parser": "^5.3.3",
"fast-xml-parser": "^5.3.4",
"zod": "^4.2.1"
},
"devDependencies": {
+1 -1
View File
@@ -26,7 +26,7 @@
"@homarr/common": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/form": "^8.3.13",
"@mantine/form": "^8.3.14",
"mantine-form-zod-resolver": "^1.3.0",
"zod": "^4.2.1"
},
+2 -2
View File
@@ -30,8 +30,8 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"react": "19.2.3",
"@mantine/core": "^8.3.14",
"react": "19.2.4",
"zod": "^4.2.1"
},
"devDependencies": {
+4 -4
View File
@@ -33,12 +33,12 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@mantine/core": "^8.3.14",
"@tabler/icons-react": "^3.36.1",
"dayjs": "^1.11.19",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"zod": "^4.2.1"
},
"devDependencies": {
+3 -3
View File
@@ -24,9 +24,9 @@
"dependencies": {
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"react": "19.2.3"
"@mantine/core": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"react": "19.2.4"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -24,7 +24,7 @@
"prettier": "@homarr/prettier-config",
"dependencies": {
"@homarr/ui": "workspace:^0.1.0",
"@mantine/notifications": "^8.3.13",
"@mantine/notifications": "^8.3.14",
"@tabler/icons-react": "^3.36.1"
},
"devDependencies": {
+5 -5
View File
@@ -37,12 +37,12 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/core": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"adm-zip": "0.5.16",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"superjson": "2.2.6",
"zod": "^4.2.1",
"zod-form-data": "^3.0.1"
+4 -4
View File
@@ -25,10 +25,10 @@
"dependencies": {
"@homarr/db": "workspace:^0.1.0",
"@homarr/server-settings": "workspace:^0.1.0",
"@mantine/dates": "^8.3.13",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3"
"@mantine/dates": "^8.3.14",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
+7 -7
View File
@@ -33,14 +33,14 @@
"@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/spotlight": "^8.3.13",
"@mantine/core": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"@mantine/spotlight": "^8.3.14",
"@tabler/icons-react": "^3.36.1",
"jotai": "^2.16.2",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"jotai": "^2.17.0",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"use-deep-compare-effect": "^1.8.1"
},
"devDependencies": {
+4 -4
View File
@@ -32,10 +32,10 @@
"dayjs": "^1.11.19",
"deepmerge": "4.3.1",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.1.5",
"next-intl": "4.7.0",
"react": "19.2.3",
"react-dom": "19.2.3"
"next": "16.1.6",
"next-intl": "4.8.1",
"react": "19.2.4",
"react-dom": "19.2.4"
},
"devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0",
+1 -1
View File
@@ -3305,7 +3305,7 @@
"title": "crwdns1764:0crwdne1764:0",
"general": {
"title": "crwdns1766:0crwdne1766:0",
"text": "crwdns1768:0crwdne1768:0"
"text": "crwdns3878:0crwdne3878:0"
},
"widgetData": {
"title": "crwdns1770:0crwdne1770:0",
+1 -1
View File
@@ -3305,7 +3305,7 @@
"title": "Analytics",
"general": {
"title": "Send anonymous analytics",
"text": "Homarr will send anonymized analytics using the open source software Umami. It never collects any personal information and is therefore fully GDPR & CCPA compliant. We encourage you to enable analytics because it helps our open source team to identify issues and prioritize our backlog."
"text": "Homarr will send anonymized analytics using the open source software Umami. When enabled, we collect: Homarr version, database type (MySQL/PostgreSQL/SQLite), Docker/Kubernetes status, authentication methods enabled, and the number of each feature. All data is anonymous and aggregated - no personal information, URLs, names, or identifiable data is ever collected. This helps our open source team understand usage patterns and prioritize development."
},
"widgetData": {
"title": "Widget data",
+25 -25
View File
@@ -1138,9 +1138,9 @@
"dangerZone": "Zona de riesgo",
"noResults": "No se han encontrado resultados",
"unsavedChanges": "¡Tienes cambios sin guardar!",
"servers": "",
"applications": "",
"services": "",
"servers": "Servidores",
"applications": "Aplicaciones",
"services": "Servicios",
"preview": {
"show": "Mostrar vista previa",
"hide": "Ocultar vista previa"
@@ -1964,36 +1964,36 @@
}
},
"coolify": {
"name": "",
"description": "",
"name": "Coolify",
"description": "Resumen de su instancia de Coolify con servidores y aplicaciones",
"option": {
"showServers": {
"label": ""
"label": "Mostrar servidores"
},
"showApplications": {
"label": ""
"label": "Mostrar aplicaciones"
},
"showServices": {
"label": ""
"label": "Mostrar servicios"
}
},
"empty": {
"servers": "",
"applications": "",
"services": ""
"servers": "No se encontraron servidores",
"applications": "No se encontraron aplicaciones",
"services": "No se encontraron servicios"
},
"footer": {
"updated": ""
"updated": "Actualizado {when}"
},
"error": {
"noIntegration": "",
"internalServerError": ""
"noIntegration": "No hay integración de Coolify configurada",
"internalServerError": "No se pudieron obtener los datos de Coolify"
},
"server": {
"buildServer": ""
"buildServer": "Construir"
},
"instances": {
"title": ""
"title": "Instancias"
}
},
"common": {
@@ -2646,32 +2646,32 @@
}
},
"systemDisks": {
"name": "",
"description": "",
"name": "Discos del sistema",
"description": "Uso del disco de su sistema",
"option": {
"showTemperatureIfAvailable": {
"label": ""
"label": "Mostrar la temperatura si está disponible"
},
"displayMode": {
"label": "",
"label": "Modo de visualización",
"option": {
"percentage": {
"label": ""
"label": "Porcentaje (e.g., 76 %)"
},
"absolute": {
"label": ""
"label": "Valores absolutos (e.g., 800 GB / 1 TB)"
},
"free": {
"label": ""
"label": "Porcentaje de espacio libre (e.g., 24 % libre)"
}
}
},
"showBackgroundBar": {
"label": ""
"label": "Mostrar la barra de uso en segundo plano"
}
},
"status": {
"unhealthy": ""
"unhealthy": "Poco sano"
}
}
},
File diff suppressed because it is too large. Load diff
+6 -6
View File
@@ -30,15 +30,15 @@
"@homarr/settings": "workspace:^0.1.0",
"@homarr/translation": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^8.3.13",
"@mantine/dates": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/core": "^8.3.14",
"@mantine/dates": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"@tabler/icons-react": "^3.36.1",
"crypto-js": "^4.2.0",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"svgson": "^5.3.1"
},
"devDependencies": {
+23 -23
View File
@@ -48,36 +48,36 @@
"@homarr/translation": "workspace:^0.1.0",
"@homarr/ui": "workspace:^0.1.0",
"@homarr/validation": "workspace:^0.1.0",
"@mantine/charts": "^8.3.13",
"@mantine/core": "^8.3.13",
"@mantine/hooks": "^8.3.13",
"@mantine/charts": "^8.3.14",
"@mantine/core": "^8.3.14",
"@mantine/hooks": "^8.3.14",
"@tabler/icons-react": "^3.36.1",
"@tiptap/extension-color": "3.17.1",
"@tiptap/extension-highlight": "3.17.1",
"@tiptap/extension-image": "3.17.1",
"@tiptap/extension-link": "^3.17.1",
"@tiptap/extension-placeholder": "^3.17.1",
"@tiptap/extension-table": "3.17.1",
"@tiptap/extension-table-cell": "3.17.1",
"@tiptap/extension-table-header": "3.17.1",
"@tiptap/extension-table-row": "3.17.1",
"@tiptap/extension-task-item": "3.17.1",
"@tiptap/extension-task-list": "3.17.1",
"@tiptap/extension-text-align": "3.17.1",
"@tiptap/extension-text-style": "3.17.1",
"@tiptap/extension-underline": "3.17.1",
"@tiptap/react": "^3.17.1",
"@tiptap/starter-kit": "^3.17.1",
"@tiptap/extension-color": "3.18.0",
"@tiptap/extension-highlight": "3.18.0",
"@tiptap/extension-image": "3.18.0",
"@tiptap/extension-link": "^3.18.0",
"@tiptap/extension-placeholder": "^3.18.0",
"@tiptap/extension-table": "3.18.0",
"@tiptap/extension-table-cell": "3.18.0",
"@tiptap/extension-table-header": "3.18.0",
"@tiptap/extension-table-row": "3.18.0",
"@tiptap/extension-task-item": "3.18.0",
"@tiptap/extension-task-list": "3.18.0",
"@tiptap/extension-text-align": "3.18.0",
"@tiptap/extension-text-style": "3.18.0",
"@tiptap/extension-underline": "3.18.0",
"@tiptap/react": "^3.18.0",
"@tiptap/starter-kit": "^3.18.0",
"clsx": "^2.1.1",
"dayjs": "^1.11.19",
"mantine-form-zod-resolver": "^1.3.0",
"mantine-react-table": "2.0.0-beta.9",
"next": "16.1.5",
"react": "19.2.3",
"react-dom": "19.2.3",
"next": "16.1.6",
"react": "19.2.4",
"react-dom": "19.2.4",
"react-markdown": "^10.1.0",
"recharts": "^2.15.4",
"video.js": "^8.23.4",
"video.js": "^8.23.6",
"zod": "^4.2.1"
},
"devDependencies": {
+1241 -1230
View File
File diff suppressed because it is too large. Load diff
+3 -3
View File
@@ -17,14 +17,14 @@
},
"prettier": "@homarr/prettier-config",
"dependencies": {
"@next/eslint-plugin-next": "16.1.4",
"@next/eslint-plugin-next": "16.1.6",
"eslint-config-prettier": "^10.1.8",
"eslint-config-turbo": "^2.7.6",
"eslint-config-turbo": "^2.8.1",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^6.1.1",
"typescript-eslint": "^8.53.1"
"typescript-eslint": "^8.54.0"
},
"devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0",