chore(release): automatic release v1.17.0

This commit is contained in:
homarr-releases[bot]
2025-04-18 19:14:04 +00:00
committed by GitHub
112 changed files with 1823 additions and 2219 deletions

View File

@@ -31,6 +31,7 @@ body:
label: Version label: Version
description: What version of Homarr are you running? description: What version of Homarr are you running?
options: options:
- 1.16.0
- 1.15.0 - 1.15.0
- 1.14.0 - 1.14.0
- 1.13.1 - 1.13.1

View File

@@ -56,9 +56,9 @@
"@mantine/tiptap": "^7.17.4", "@mantine/tiptap": "^7.17.4",
"@million/lint": "1.0.14", "@million/lint": "1.0.14",
"@tabler/icons-react": "^3.31.0", "@tabler/icons-react": "^3.31.0",
"@tanstack/react-query": "^5.72.2", "@tanstack/react-query": "^5.74.4",
"@tanstack/react-query-devtools": "^5.72.2", "@tanstack/react-query-devtools": "^5.74.4",
"@tanstack/react-query-next-experimental": "^5.72.2", "@tanstack/react-query-next-experimental": "^5.74.4",
"@trpc/client": "^11.1.0", "@trpc/client": "^11.1.0",
"@trpc/next": "^11.1.0", "@trpc/next": "^11.1.0",
"@trpc/react-query": "^11.1.0", "@trpc/react-query": "^11.1.0",
@@ -72,9 +72,9 @@
"dotenv": "^16.5.0", "dotenv": "^16.5.0",
"flag-icons": "^7.3.2", "flag-icons": "^7.3.2",
"glob": "^11.0.1", "glob": "^11.0.1",
"jotai": "^2.12.2", "jotai": "^2.12.3",
"mantine-react-table": "2.0.0-beta.9", "mantine-react-table": "2.0.0-beta.9",
"next": "15.3.0", "next": "15.3.1",
"postcss-preset-mantine": "^1.17.0", "postcss-preset-mantine": "^1.17.0",
"prismjs": "^1.30.0", "prismjs": "^1.30.0",
"react": "19.1.0", "react": "19.1.0",
@@ -83,22 +83,22 @@
"react-simple-code-editor": "^0.14.1", "react-simple-code-editor": "^0.14.1",
"sass": "^1.86.3", "sass": "^1.86.3",
"superjson": "2.2.2", "superjson": "2.2.2",
"swagger-ui-react": "^5.20.8", "swagger-ui-react": "^5.21.0",
"use-deep-compare-effect": "^1.8.1", "use-deep-compare-effect": "^1.8.1",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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.14.0", "@types/node": "^22.14.1",
"@types/prismjs": "^1.26.5", "@types/prismjs": "^1.26.5",
"@types/react": "19.1.1", "@types/react": "19.1.2",
"@types/react-dom": "19.1.2", "@types/react-dom": "19.1.2",
"@types/swagger-ui-react": "^5.18.0", "@types/swagger-ui-react": "^5.18.0",
"concurrently": "^9.1.2", "concurrently": "^9.1.2",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"node-loader": "^2.1.0", "node-loader": "^2.1.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"

View File

@@ -123,7 +123,7 @@ export const ColorSettingsContent = ({ board }: Props) => {
</Grid.Col> </Grid.Col>
</Grid> </Grid>
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -159,7 +159,7 @@ export const BackgroundSettingsContent = ({ board }: Props) => {
</Grid> </Grid>
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -38,7 +38,7 @@ export const BehaviorSettingsContent = ({ board }: Props) => {
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -46,7 +46,7 @@ export const CustomCssSettingsContent = ({ board }: Props) => {
</Alert> </Alert>
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -116,7 +116,7 @@ export const GeneralSettingsContent = ({ board }: Props) => {
</Grid.Col> </Grid.Col>
</Grid> </Grid>
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -105,7 +105,7 @@ export const LayoutSettingsContent = ({ board }: Props) => {
</Stack> </Stack>
<Group justify="end"> <Group justify="end">
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -73,7 +73,7 @@ export const ChangeHomeBoardForm = ({ user, boardsData }: ChangeHomeBoardFormPro
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.save")} {t("common.action.save")}
</Button> </Button>
</Group> </Group>

View File

@@ -66,7 +66,7 @@ export const ChangeSearchPreferencesForm = ({ user, searchEnginesData }: ChangeS
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.save")} {t("common.action.save")}
</Button> </Button>
</Group> </Group>

View File

@@ -71,7 +71,7 @@ export const FirstDayOfWeek = ({ user }: FirstDayOfWeekProps) => {
</Radio.Group> </Radio.Group>
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.save")} {t("common.action.save")}
</Button> </Button>
</Group> </Group>

View File

@@ -57,7 +57,7 @@ export const PingIconsEnabled = ({ user }: PingIconsEnabledProps) => {
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.save")} {t("common.action.save")}
</Button> </Button>
</Group> </Group>

View File

@@ -81,7 +81,7 @@ export const UserProfileForm = ({ user }: UserProfileFormProps) => {
{isProviderCredentials && ( {isProviderCredentials && (
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" disabled={!form.isDirty()} loading={isPending}> <Button type="submit" disabled={!form.isDirty()} loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -85,7 +85,7 @@ export const ChangePasswordForm = ({ user }: ChangePasswordFormProps) => {
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.confirm")} {t("common.action.confirm")}
</Button> </Button>
</Group> </Group>

View File

@@ -68,7 +68,7 @@ export const RenameGroupForm = ({ group, disabled }: RenameGroupFormProps) => {
{!disabled && ( {!disabled && (
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -40,9 +40,5 @@ export const AddGroupMember = ({ groupId, presentUserIds }: AddGroupMemberProps)
); );
}, [openModal, presentUserIds, groupId, mutateAsync, tMembersAdd]); }, [openModal, presentUserIds, groupId, mutateAsync, tMembersAdd]);
return ( return <MobileAffixButton onClick={handleAddMember}>{tMembersAdd("label")}</MobileAffixButton>;
<MobileAffixButton color="teal" onClick={handleAddMember}>
{tMembersAdd("label")}
</MobileAffixButton>
);
}; };

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import { useCallback } from "react";
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { useCallback } from "react";
import { Button, Card, Group, Switch, Text, Transition } from "@mantine/core"; import { Button, Card, Group, Switch, Text, Transition } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
@@ -108,7 +108,7 @@ export const SaveAffix = ({ groupId }: SaveAffixProps) => {
<Button disabled={isPending} onClick={form.reset}> <Button disabled={isPending} onClick={form.reset}>
{t("common.action.discard")} {t("common.action.discard")}
</Button> </Button>
<Button color="teal" loading={isPending} onClick={handleSubmit}> <Button loading={isPending} onClick={handleSubmit}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -71,7 +71,7 @@ export const GroupHomeBoards = ({ homeBoardId, mobileHomeBoardId, groupId }: Gro
/> />
<Group justify="end"> <Group justify="end">
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.save")} {t("common.action.save")}
</Button> </Button>
</Group> </Group>

View File

@@ -57,9 +57,5 @@ const AddGroup = () => {
openModal(); openModal();
}, [openModal]); }, [openModal]);
return ( return <MobileAffixButton onClick={handleAddGroup}>{t("group.action.create.label")}</MobileAffixButton>;
<MobileAffixButton onClick={handleAddGroup} color="teal">
{t("group.action.create.label")}
</MobileAffixButton>
);
}; };

View File

@@ -264,7 +264,7 @@ const SaveAffix = ({ visible, isPending, onDiscard, onSave }: SaveAffixProps) =>
<Button disabled={isPending} onClick={onDiscard}> <Button disabled={isPending} onClick={onDiscard}>
{t("common.action.discard")} {t("common.action.discard")}
</Button> </Button>
<Button color="teal" loading={isPending} onClick={onSave}> <Button loading={isPending} onClick={onSave}>
{t("common.action.saveChanges")} {t("common.action.saveChanges")}
</Button> </Button>
</Group> </Group>

View File

@@ -89,11 +89,7 @@ const RenderTopToolbarCustomActions = () => {
openModal(); openModal();
}, [openModal]); }, [openModal]);
return ( return <Button onClick={handleNewInvite}>{t("action.new.title")}</Button>;
<Button color="teal" onClick={handleNewInvite}>
{t("action.new.title")}
</Button>
);
}; };
const RenderRowActions = ({ row }: { row: MRT_Row<RouterOutputs["invite"]["getAll"][number]> }) => { const RenderRowActions = ({ row }: { row: MRT_Row<RouterOutputs["invite"]["getAll"][number]> }) => {

View File

@@ -82,7 +82,7 @@ export const GroupAccessForm = <TPermission extends string>({
<Button rightSection={<IconPlus size="1rem" />} variant="light" onClick={handleAddUser}> <Button rightSection={<IconPlus size="1rem" />} variant="light" onClick={handleAddUser}>
{t("common.action.add")} {t("common.action.add")}
</Button> </Button>
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("permission.action.saveGroup")} {t("permission.action.saveGroup")}
</Button> </Button>
</Group> </Group>

View File

@@ -104,7 +104,7 @@ export const UsersAccessForm = <TPermission extends string>({
<Button rightSection={<IconPlus size="1rem" />} variant="light" onClick={handleAddUser}> <Button rightSection={<IconPlus size="1rem" />} variant="light" onClick={handleAddUser}>
{t("common.action.add")} {t("common.action.add")}
</Button> </Button>
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("permission.action.saveUser")} {t("permission.action.saveUser")}
</Button> </Button>
</Group> </Group>

View File

@@ -40,9 +40,7 @@ export const CategoryEditModal = createModal<InnerProps>(({ actions, innerProps
<Button onClick={actions.closeModal} variant="subtle" color="gray"> <Button onClick={actions.closeModal} variant="subtle" color="gray">
{t("common.action.cancel")} {t("common.action.cancel")}
</Button> </Button>
<Button type="submit" color="teal"> <Button type="submit">{innerProps.submitLabel}</Button>
{innerProps.submitLabel}
</Button>
</Group> </Group>
</Stack> </Stack>
</form> </form>

View File

@@ -48,9 +48,7 @@ export const DynamicSectionEditModal = createModal<ModalProps>(({ actions, inner
<Button onClick={actions.closeModal} variant="subtle" color="gray"> <Button onClick={actions.closeModal} variant="subtle" color="gray">
{t("common.action.cancel")} {t("common.action.cancel")}
</Button> </Button>
<Button type="submit" color="teal"> <Button type="submit">{t("common.action.saveChanges")}</Button>
{t("common.action.saveChanges")}
</Button>
</Group> </Group>
</Group> </Group>
</Stack> </Stack>

View File

@@ -44,9 +44,9 @@
"@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.14.0", "@types/node": "^22.14.1",
"dotenv-cli": "^8.0.0", "dotenv-cli": "^8.0.0",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"tsx": "4.19.3", "tsx": "4.19.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"

View File

@@ -34,7 +34,7 @@
"@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/ws": "^8.18.1", "@types/ws": "^8.18.1",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }

View File

@@ -39,12 +39,12 @@
"@semantic-release/npm": "^12.0.1", "@semantic-release/npm": "^12.0.1",
"@semantic-release/release-notes-generator": "^14.0.3", "@semantic-release/release-notes-generator": "^14.0.3",
"@turbo/gen": "^2.5.0", "@turbo/gen": "^2.5.0",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.4.0",
"@vitest/coverage-v8": "^3.1.1", "@vitest/coverage-v8": "^3.1.1",
"@vitest/ui": "^3.1.1", "@vitest/ui": "^3.1.1",
"conventional-changelog-conventionalcommits": "^8.0.0", "conventional-changelog-conventionalcommits": "^8.0.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"jsdom": "^26.0.0", "jsdom": "^26.1.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"semantic-release": "^24.2.3", "semantic-release": "^24.2.3",
"testcontainers": "^10.24.2", "testcontainers": "^10.24.2",
@@ -53,7 +53,7 @@
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
"vitest": "^3.1.1" "vitest": "^3.1.1"
}, },
"packageManager": "pnpm@10.8.0", "packageManager": "pnpm@10.8.1",
"engines": { "engines": {
"node": ">=22.14.0" "node": ">=22.14.0"
}, },

View File

@@ -32,7 +32,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -45,19 +45,19 @@
"@trpc/react-query": "^11.1.0", "@trpc/react-query": "^11.1.0",
"@trpc/server": "^11.1.0", "@trpc/server": "^11.1.0",
"lodash.clonedeep": "^4.5.0", "lodash.clonedeep": "^4.5.0",
"next": "15.3.0", "next": "15.3.1",
"pretty-print-error": "^1.1.2", "pretty-print-error": "^1.1.2",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"superjson": "2.2.2", "superjson": "2.2.2",
"trpc-to-openapi": "^2.1.5", "trpc-to-openapi": "^2.1.5",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }

View File

@@ -101,6 +101,18 @@ const getSecretKindOption = (kind: IntegrationKind, sourcedSecrets: SourcedInteg
); );
if (onlyFormSecretsKindOptions.length >= 1) { if (onlyFormSecretsKindOptions.length >= 1) {
// If the first option is no secret it would always be selected even if we want to have a secret
if (
onlyFormSecretsKindOptions.length >= 2 &&
onlyFormSecretsKindOptions.some((secretKinds) => secretKinds.length === 0)
) {
return (
// Will never be undefined because of the check above
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
onlyFormSecretsKindOptions.find((secretKinds) => secretKinds.length >= 1) ?? onlyFormSecretsKindOptions[0]!
);
}
// Will never be undefined because of the check above // Will never be undefined because of the check above
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return onlyFormSecretsKindOptions[0]!; return onlyFormSecretsKindOptions[0]!;

View File

@@ -35,12 +35,12 @@
"bcrypt": "^5.1.1", "bcrypt": "^5.1.1",
"cookies": "^0.9.1", "cookies": "^0.9.1",
"ldapts": "7.4.0", "ldapts": "7.4.0",
"next": "15.3.0", "next": "15.3.1",
"next-auth": "5.0.0-beta.25", "next-auth": "5.0.0-beta.25",
"pretty-print-error": "^1.1.2", "pretty-print-error": "^1.1.2",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"devDependencies": { "devDependencies": {
"@homarr/eslint-config": "workspace:^0.2.0", "@homarr/eslint-config": "workspace:^0.2.0",
@@ -48,7 +48,7 @@
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/bcrypt": "5.0.2", "@types/bcrypt": "5.0.2",
"@types/cookies": "0.9.0", "@types/cookies": "0.9.0",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }

View File

@@ -32,7 +32,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -29,7 +29,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -34,7 +34,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -30,17 +30,17 @@
"@homarr/env": "workspace:^0.1.0", "@homarr/env": "workspace:^0.1.0",
"@homarr/log": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"next": "15.3.0", "next": "15.3.1",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"undici": "7.8.0", "undici": "7.8.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -33,7 +33,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -29,7 +29,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -32,7 +32,7 @@
"@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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -44,7 +44,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -49,8 +49,8 @@
"@testcontainers/mysql": "^10.24.2", "@testcontainers/mysql": "^10.24.2",
"better-sqlite3": "^11.9.1", "better-sqlite3": "^11.9.1",
"dotenv": "^16.5.0", "dotenv": "^16.5.0",
"drizzle-kit": "^0.30.6", "drizzle-kit": "^0.31.0",
"drizzle-orm": "^0.41.0", "drizzle-orm": "^0.42.0",
"drizzle-zod": "^0.7.1", "drizzle-zod": "^0.7.1",
"mysql2": "3.14.0" "mysql2": "3.14.0"
}, },
@@ -60,7 +60,7 @@
"@homarr/tsconfig": "workspace:^0.1.0", "@homarr/tsconfig": "workspace:^0.1.0",
"@types/better-sqlite3": "7.6.13", "@types/better-sqlite3": "7.6.13",
"dotenv-cli": "^8.0.0", "dotenv-cli": "^8.0.0",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"tsx": "4.19.3", "tsx": "4.19.3",
"typescript": "^5.8.3" "typescript": "^5.8.3"

View File

@@ -29,7 +29,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -37,883 +37,6 @@ export type HomarrDocumentationPath =
| "/blog/tags/version" | "/blog/tags/version"
| "/blog/translations" | "/blog/translations"
| "/search" | "/search"
| "/docs/1.10.0/tags"
| "/docs/1.10.0/tags/active-directory"
| "/docs/1.10.0/tags/ad-guard"
| "/docs/1.10.0/tags/ad-guard-home"
| "/docs/1.10.0/tags/administration"
| "/docs/1.10.0/tags/advanced"
| "/docs/1.10.0/tags/analytics"
| "/docs/1.10.0/tags/api"
| "/docs/1.10.0/tags/apps"
| "/docs/1.10.0/tags/banner"
| "/docs/1.10.0/tags/blocking"
| "/docs/1.10.0/tags/boards"
| "/docs/1.10.0/tags/bookmark"
| "/docs/1.10.0/tags/bookmarks"
| "/docs/1.10.0/tags/caddy"
| "/docs/1.10.0/tags/certificates"
| "/docs/1.10.0/tags/checklist"
| "/docs/1.10.0/tags/code"
| "/docs/1.10.0/tags/community"
| "/docs/1.10.0/tags/configuration"
| "/docs/1.10.0/tags/connections"
| "/docs/1.10.0/tags/customization"
| "/docs/1.10.0/tags/data-sources"
| "/docs/1.10.0/tags/database"
| "/docs/1.10.0/tags/developer"
| "/docs/1.10.0/tags/development"
| "/docs/1.10.0/tags/dns"
| "/docs/1.10.0/tags/docker"
| "/docs/1.10.0/tags/donation"
| "/docs/1.10.0/tags/edit-mode"
| "/docs/1.10.0/tags/env"
| "/docs/1.10.0/tags/environment-variables"
| "/docs/1.10.0/tags/feeds"
| "/docs/1.10.0/tags/getting-started"
| "/docs/1.10.0/tags/google"
| "/docs/1.10.0/tags/grafana"
| "/docs/1.10.0/tags/groups"
| "/docs/1.10.0/tags/hardware"
| "/docs/1.10.0/tags/health"
| "/docs/1.10.0/tags/help"
| "/docs/1.10.0/tags/icon-picker"
| "/docs/1.10.0/tags/icon-repositories"
| "/docs/1.10.0/tags/icons"
| "/docs/1.10.0/tags/iframe"
| "/docs/1.10.0/tags/images"
| "/docs/1.10.0/tags/installation"
| "/docs/1.10.0/tags/integrade"
| "/docs/1.10.0/tags/integration"
| "/docs/1.10.0/tags/integrations"
| "/docs/1.10.0/tags/interface"
| "/docs/1.10.0/tags/jellyserr"
| "/docs/1.10.0/tags/layout"
| "/docs/1.10.0/tags/ldap"
| "/docs/1.10.0/tags/links"
| "/docs/1.10.0/tags/lists"
| "/docs/1.10.0/tags/management"
| "/docs/1.10.0/tags/media"
| "/docs/1.10.0/tags/minecraft"
| "/docs/1.10.0/tags/monitoring"
| "/docs/1.10.0/tags/news"
| "/docs/1.10.0/tags/notebook"
| "/docs/1.10.0/tags/notes"
| "/docs/1.10.0/tags/oidc"
| "/docs/1.10.0/tags/open-collective"
| "/docs/1.10.0/tags/open-media-vault"
| "/docs/1.10.0/tags/overseerr"
| "/docs/1.10.0/tags/permissions"
| "/docs/1.10.0/tags/pgid"
| "/docs/1.10.0/tags/pi-hole"
| "/docs/1.10.0/tags/ping"
| "/docs/1.10.0/tags/programming"
| "/docs/1.10.0/tags/proxmox"
| "/docs/1.10.0/tags/proxy"
| "/docs/1.10.0/tags/puid"
| "/docs/1.10.0/tags/responsive"
| "/docs/1.10.0/tags/roles"
| "/docs/1.10.0/tags/rss"
| "/docs/1.10.0/tags/search"
| "/docs/1.10.0/tags/search-engines"
| "/docs/1.10.0/tags/security"
| "/docs/1.10.0/tags/self-signed"
| "/docs/1.10.0/tags/seo"
| "/docs/1.10.0/tags/server"
| "/docs/1.10.0/tags/settings"
| "/docs/1.10.0/tags/sinkhole"
| "/docs/1.10.0/tags/sso"
| "/docs/1.10.0/tags/system"
| "/docs/1.10.0/tags/table"
| "/docs/1.10.0/tags/technical-documentation"
| "/docs/1.10.0/tags/text"
| "/docs/1.10.0/tags/torrent"
| "/docs/1.10.0/tags/traefik"
| "/docs/1.10.0/tags/translations"
| "/docs/1.10.0/tags/unraid"
| "/docs/1.10.0/tags/uploads"
| "/docs/1.10.0/tags/usenet"
| "/docs/1.10.0/tags/users"
| "/docs/1.10.0/tags/variables"
| "/docs/1.10.0/tags/widgets"
| "/docs/1.10.0/advanced/command-line"
| "/docs/1.10.0/advanced/command-line/fix-usernames"
| "/docs/1.10.0/advanced/command-line/password-recovery"
| "/docs/1.10.0/advanced/development/getting-started"
| "/docs/1.10.0/advanced/environment-variables"
| "/docs/1.10.0/advanced/icons"
| "/docs/1.10.0/advanced/keyboard-shortcuts"
| "/docs/1.10.0/advanced/proxy"
| "/docs/1.10.0/advanced/running-as-different-user"
| "/docs/1.10.0/advanced/single-sign-on"
| "/docs/1.10.0/category/advanced"
| "/docs/1.10.0/category/community"
| "/docs/1.10.0/category/developer-guides"
| "/docs/1.10.0/category/getting-started"
| "/docs/1.10.0/category/installation"
| "/docs/1.10.0/category/installation-1"
| "/docs/1.10.0/category/integrations"
| "/docs/1.10.0/category/management"
| "/docs/1.10.0/category/widgets"
| "/docs/1.10.0/community/donate"
| "/docs/1.10.0/community/faq"
| "/docs/1.10.0/community/get-in-touch"
| "/docs/1.10.0/community/license"
| "/docs/1.10.0/community/translations"
| "/docs/1.10.0/getting-started"
| "/docs/1.10.0/getting-started/after-the-installation"
| "/docs/1.10.0/getting-started/glossary"
| "/docs/1.10.0/getting-started/installation/docker"
| "/docs/1.10.0/getting-started/installation/easy-panel"
| "/docs/1.10.0/getting-started/installation/helm"
| "/docs/1.10.0/getting-started/installation/home-assistant"
| "/docs/1.10.0/getting-started/installation/portainer"
| "/docs/1.10.0/getting-started/installation/qnap"
| "/docs/1.10.0/getting-started/installation/railway"
| "/docs/1.10.0/getting-started/installation/saltbox"
| "/docs/1.10.0/getting-started/installation/source"
| "/docs/1.10.0/getting-started/installation/synology"
| "/docs/1.10.0/getting-started/installation/unraid"
| "/docs/1.10.0/integrations/containers"
| "/docs/1.10.0/integrations/dns"
| "/docs/1.10.0/integrations/hardware"
| "/docs/1.10.0/integrations/media-requester"
| "/docs/1.10.0/integrations/media-server"
| "/docs/1.10.0/integrations/servarr"
| "/docs/1.10.0/integrations/torrent"
| "/docs/1.10.0/integrations/usenet"
| "/docs/1.10.0/management/api"
| "/docs/1.10.0/management/apps"
| "/docs/1.10.0/management/boards"
| "/docs/1.10.0/management/certificates"
| "/docs/1.10.0/management/integrations"
| "/docs/1.10.0/management/media"
| "/docs/1.10.0/management/search-engines"
| "/docs/1.10.0/management/settings"
| "/docs/1.10.0/management/users"
| "/docs/1.10.0/widgets/bookmarks"
| "/docs/1.10.0/widgets/calendar"
| "/docs/1.10.0/widgets/clock"
| "/docs/1.10.0/widgets/dns-hole"
| "/docs/1.10.0/widgets/downloads"
| "/docs/1.10.0/widgets/health-monitoring"
| "/docs/1.10.0/widgets/home-assistant"
| "/docs/1.10.0/widgets/iframe"
| "/docs/1.10.0/widgets/indexer-manager"
| "/docs/1.10.0/widgets/media-requests"
| "/docs/1.10.0/widgets/media-server"
| "/docs/1.10.0/widgets/minecraft-server-status"
| "/docs/1.10.0/widgets/notebook"
| "/docs/1.10.0/widgets/rss"
| "/docs/1.10.0/widgets/video"
| "/docs/1.10.0/widgets/weather"
| "/docs/1.11.0/tags"
| "/docs/1.11.0/tags/active-directory"
| "/docs/1.11.0/tags/ad-guard"
| "/docs/1.11.0/tags/ad-guard-home"
| "/docs/1.11.0/tags/administration"
| "/docs/1.11.0/tags/advanced"
| "/docs/1.11.0/tags/analytics"
| "/docs/1.11.0/tags/api"
| "/docs/1.11.0/tags/apps"
| "/docs/1.11.0/tags/banner"
| "/docs/1.11.0/tags/blocking"
| "/docs/1.11.0/tags/boards"
| "/docs/1.11.0/tags/bookmark"
| "/docs/1.11.0/tags/bookmarks"
| "/docs/1.11.0/tags/caddy"
| "/docs/1.11.0/tags/certificates"
| "/docs/1.11.0/tags/checklist"
| "/docs/1.11.0/tags/code"
| "/docs/1.11.0/tags/community"
| "/docs/1.11.0/tags/configuration"
| "/docs/1.11.0/tags/connections"
| "/docs/1.11.0/tags/customization"
| "/docs/1.11.0/tags/data-sources"
| "/docs/1.11.0/tags/database"
| "/docs/1.11.0/tags/developer"
| "/docs/1.11.0/tags/development"
| "/docs/1.11.0/tags/dns"
| "/docs/1.11.0/tags/docker"
| "/docs/1.11.0/tags/donation"
| "/docs/1.11.0/tags/edit-mode"
| "/docs/1.11.0/tags/env"
| "/docs/1.11.0/tags/environment-variables"
| "/docs/1.11.0/tags/feeds"
| "/docs/1.11.0/tags/getting-started"
| "/docs/1.11.0/tags/google"
| "/docs/1.11.0/tags/grafana"
| "/docs/1.11.0/tags/groups"
| "/docs/1.11.0/tags/hardware"
| "/docs/1.11.0/tags/health"
| "/docs/1.11.0/tags/help"
| "/docs/1.11.0/tags/icon-picker"
| "/docs/1.11.0/tags/icon-repositories"
| "/docs/1.11.0/tags/icons"
| "/docs/1.11.0/tags/iframe"
| "/docs/1.11.0/tags/images"
| "/docs/1.11.0/tags/installation"
| "/docs/1.11.0/tags/integrade"
| "/docs/1.11.0/tags/integration"
| "/docs/1.11.0/tags/integrations"
| "/docs/1.11.0/tags/interface"
| "/docs/1.11.0/tags/jellyserr"
| "/docs/1.11.0/tags/layout"
| "/docs/1.11.0/tags/ldap"
| "/docs/1.11.0/tags/links"
| "/docs/1.11.0/tags/lists"
| "/docs/1.11.0/tags/management"
| "/docs/1.11.0/tags/media"
| "/docs/1.11.0/tags/minecraft"
| "/docs/1.11.0/tags/monitoring"
| "/docs/1.11.0/tags/news"
| "/docs/1.11.0/tags/notebook"
| "/docs/1.11.0/tags/notes"
| "/docs/1.11.0/tags/oidc"
| "/docs/1.11.0/tags/open-collective"
| "/docs/1.11.0/tags/open-media-vault"
| "/docs/1.11.0/tags/overseerr"
| "/docs/1.11.0/tags/permissions"
| "/docs/1.11.0/tags/pgid"
| "/docs/1.11.0/tags/pi-hole"
| "/docs/1.11.0/tags/ping"
| "/docs/1.11.0/tags/programming"
| "/docs/1.11.0/tags/proxmox"
| "/docs/1.11.0/tags/proxy"
| "/docs/1.11.0/tags/puid"
| "/docs/1.11.0/tags/responsive"
| "/docs/1.11.0/tags/roles"
| "/docs/1.11.0/tags/rss"
| "/docs/1.11.0/tags/search"
| "/docs/1.11.0/tags/search-engines"
| "/docs/1.11.0/tags/security"
| "/docs/1.11.0/tags/self-signed"
| "/docs/1.11.0/tags/seo"
| "/docs/1.11.0/tags/server"
| "/docs/1.11.0/tags/settings"
| "/docs/1.11.0/tags/sinkhole"
| "/docs/1.11.0/tags/sso"
| "/docs/1.11.0/tags/system"
| "/docs/1.11.0/tags/table"
| "/docs/1.11.0/tags/technical-documentation"
| "/docs/1.11.0/tags/text"
| "/docs/1.11.0/tags/torrent"
| "/docs/1.11.0/tags/traefik"
| "/docs/1.11.0/tags/translations"
| "/docs/1.11.0/tags/unraid"
| "/docs/1.11.0/tags/uploads"
| "/docs/1.11.0/tags/usenet"
| "/docs/1.11.0/tags/users"
| "/docs/1.11.0/tags/variables"
| "/docs/1.11.0/tags/widgets"
| "/docs/1.11.0/advanced/command-line"
| "/docs/1.11.0/advanced/command-line/fix-usernames"
| "/docs/1.11.0/advanced/command-line/password-recovery"
| "/docs/1.11.0/advanced/development/getting-started"
| "/docs/1.11.0/advanced/development/kubernetes"
| "/docs/1.11.0/advanced/environment-variables"
| "/docs/1.11.0/advanced/icons"
| "/docs/1.11.0/advanced/keyboard-shortcuts"
| "/docs/1.11.0/advanced/proxy"
| "/docs/1.11.0/advanced/running-as-different-user"
| "/docs/1.11.0/advanced/single-sign-on"
| "/docs/1.11.0/category/advanced"
| "/docs/1.11.0/category/community"
| "/docs/1.11.0/category/developer-guides"
| "/docs/1.11.0/category/getting-started"
| "/docs/1.11.0/category/installation"
| "/docs/1.11.0/category/installation-1"
| "/docs/1.11.0/category/integrations"
| "/docs/1.11.0/category/management"
| "/docs/1.11.0/category/widgets"
| "/docs/1.11.0/community/donate"
| "/docs/1.11.0/community/faq"
| "/docs/1.11.0/community/get-in-touch"
| "/docs/1.11.0/community/license"
| "/docs/1.11.0/community/translations"
| "/docs/1.11.0/getting-started"
| "/docs/1.11.0/getting-started/after-the-installation"
| "/docs/1.11.0/getting-started/glossary"
| "/docs/1.11.0/getting-started/installation/docker"
| "/docs/1.11.0/getting-started/installation/easy-panel"
| "/docs/1.11.0/getting-started/installation/helm"
| "/docs/1.11.0/getting-started/installation/home-assistant"
| "/docs/1.11.0/getting-started/installation/portainer"
| "/docs/1.11.0/getting-started/installation/qnap"
| "/docs/1.11.0/getting-started/installation/railway"
| "/docs/1.11.0/getting-started/installation/saltbox"
| "/docs/1.11.0/getting-started/installation/source"
| "/docs/1.11.0/getting-started/installation/synology"
| "/docs/1.11.0/getting-started/installation/unraid"
| "/docs/1.11.0/integrations/containers"
| "/docs/1.11.0/integrations/dns"
| "/docs/1.11.0/integrations/hardware"
| "/docs/1.11.0/integrations/kubernetes"
| "/docs/1.11.0/integrations/media-requester"
| "/docs/1.11.0/integrations/media-server"
| "/docs/1.11.0/integrations/servarr"
| "/docs/1.11.0/integrations/torrent"
| "/docs/1.11.0/integrations/usenet"
| "/docs/1.11.0/management/api"
| "/docs/1.11.0/management/apps"
| "/docs/1.11.0/management/boards"
| "/docs/1.11.0/management/certificates"
| "/docs/1.11.0/management/integrations"
| "/docs/1.11.0/management/media"
| "/docs/1.11.0/management/search-engines"
| "/docs/1.11.0/management/settings"
| "/docs/1.11.0/management/users"
| "/docs/1.11.0/widgets/bookmarks"
| "/docs/1.11.0/widgets/calendar"
| "/docs/1.11.0/widgets/clock"
| "/docs/1.11.0/widgets/dns-hole"
| "/docs/1.11.0/widgets/downloads"
| "/docs/1.11.0/widgets/health-monitoring"
| "/docs/1.11.0/widgets/home-assistant"
| "/docs/1.11.0/widgets/iframe"
| "/docs/1.11.0/widgets/indexer-manager"
| "/docs/1.11.0/widgets/media-requests"
| "/docs/1.11.0/widgets/media-server"
| "/docs/1.11.0/widgets/minecraft-server-status"
| "/docs/1.11.0/widgets/notebook"
| "/docs/1.11.0/widgets/rss"
| "/docs/1.11.0/widgets/video"
| "/docs/1.11.0/widgets/weather"
| "/docs/1.12.0/tags"
| "/docs/1.12.0/tags/active-directory"
| "/docs/1.12.0/tags/ad-guard"
| "/docs/1.12.0/tags/ad-guard-home"
| "/docs/1.12.0/tags/administration"
| "/docs/1.12.0/tags/advanced"
| "/docs/1.12.0/tags/analytics"
| "/docs/1.12.0/tags/api"
| "/docs/1.12.0/tags/apps"
| "/docs/1.12.0/tags/banner"
| "/docs/1.12.0/tags/blocking"
| "/docs/1.12.0/tags/boards"
| "/docs/1.12.0/tags/bookmark"
| "/docs/1.12.0/tags/bookmarks"
| "/docs/1.12.0/tags/caddy"
| "/docs/1.12.0/tags/certificates"
| "/docs/1.12.0/tags/checklist"
| "/docs/1.12.0/tags/code"
| "/docs/1.12.0/tags/community"
| "/docs/1.12.0/tags/configuration"
| "/docs/1.12.0/tags/connections"
| "/docs/1.12.0/tags/customization"
| "/docs/1.12.0/tags/data-sources"
| "/docs/1.12.0/tags/database"
| "/docs/1.12.0/tags/developer"
| "/docs/1.12.0/tags/development"
| "/docs/1.12.0/tags/dns"
| "/docs/1.12.0/tags/docker"
| "/docs/1.12.0/tags/donation"
| "/docs/1.12.0/tags/edit-mode"
| "/docs/1.12.0/tags/env"
| "/docs/1.12.0/tags/environment-variables"
| "/docs/1.12.0/tags/feeds"
| "/docs/1.12.0/tags/finance"
| "/docs/1.12.0/tags/getting-started"
| "/docs/1.12.0/tags/google"
| "/docs/1.12.0/tags/grafana"
| "/docs/1.12.0/tags/groups"
| "/docs/1.12.0/tags/hardware"
| "/docs/1.12.0/tags/health"
| "/docs/1.12.0/tags/help"
| "/docs/1.12.0/tags/icon-picker"
| "/docs/1.12.0/tags/icon-repositories"
| "/docs/1.12.0/tags/icons"
| "/docs/1.12.0/tags/iframe"
| "/docs/1.12.0/tags/images"
| "/docs/1.12.0/tags/installation"
| "/docs/1.12.0/tags/integrade"
| "/docs/1.12.0/tags/integration"
| "/docs/1.12.0/tags/integrations"
| "/docs/1.12.0/tags/interface"
| "/docs/1.12.0/tags/jellyserr"
| "/docs/1.12.0/tags/layout"
| "/docs/1.12.0/tags/ldap"
| "/docs/1.12.0/tags/links"
| "/docs/1.12.0/tags/lists"
| "/docs/1.12.0/tags/management"
| "/docs/1.12.0/tags/market"
| "/docs/1.12.0/tags/media"
| "/docs/1.12.0/tags/minecraft"
| "/docs/1.12.0/tags/monitoring"
| "/docs/1.12.0/tags/news"
| "/docs/1.12.0/tags/notebook"
| "/docs/1.12.0/tags/notes"
| "/docs/1.12.0/tags/oidc"
| "/docs/1.12.0/tags/open-collective"
| "/docs/1.12.0/tags/open-media-vault"
| "/docs/1.12.0/tags/overseerr"
| "/docs/1.12.0/tags/permissions"
| "/docs/1.12.0/tags/pgid"
| "/docs/1.12.0/tags/pi-hole"
| "/docs/1.12.0/tags/ping"
| "/docs/1.12.0/tags/programming"
| "/docs/1.12.0/tags/proxmox"
| "/docs/1.12.0/tags/proxy"
| "/docs/1.12.0/tags/puid"
| "/docs/1.12.0/tags/responsive"
| "/docs/1.12.0/tags/roles"
| "/docs/1.12.0/tags/rss"
| "/docs/1.12.0/tags/search"
| "/docs/1.12.0/tags/search-engines"
| "/docs/1.12.0/tags/security"
| "/docs/1.12.0/tags/self-signed"
| "/docs/1.12.0/tags/seo"
| "/docs/1.12.0/tags/server"
| "/docs/1.12.0/tags/settings"
| "/docs/1.12.0/tags/sinkhole"
| "/docs/1.12.0/tags/sso"
| "/docs/1.12.0/tags/stocks"
| "/docs/1.12.0/tags/system"
| "/docs/1.12.0/tags/table"
| "/docs/1.12.0/tags/technical-documentation"
| "/docs/1.12.0/tags/text"
| "/docs/1.12.0/tags/torrent"
| "/docs/1.12.0/tags/traefik"
| "/docs/1.12.0/tags/translations"
| "/docs/1.12.0/tags/unraid"
| "/docs/1.12.0/tags/uploads"
| "/docs/1.12.0/tags/usenet"
| "/docs/1.12.0/tags/users"
| "/docs/1.12.0/tags/variables"
| "/docs/1.12.0/tags/widgets"
| "/docs/1.12.0/advanced/command-line"
| "/docs/1.12.0/advanced/command-line/fix-usernames"
| "/docs/1.12.0/advanced/command-line/password-recovery"
| "/docs/1.12.0/advanced/development/getting-started"
| "/docs/1.12.0/advanced/development/kubernetes"
| "/docs/1.12.0/advanced/environment-variables"
| "/docs/1.12.0/advanced/icons"
| "/docs/1.12.0/advanced/keyboard-shortcuts"
| "/docs/1.12.0/advanced/proxy"
| "/docs/1.12.0/advanced/running-as-different-user"
| "/docs/1.12.0/advanced/single-sign-on"
| "/docs/1.12.0/category/advanced"
| "/docs/1.12.0/category/community"
| "/docs/1.12.0/category/developer-guides"
| "/docs/1.12.0/category/getting-started"
| "/docs/1.12.0/category/installation"
| "/docs/1.12.0/category/installation-1"
| "/docs/1.12.0/category/integrations"
| "/docs/1.12.0/category/management"
| "/docs/1.12.0/category/widgets"
| "/docs/1.12.0/community/donate"
| "/docs/1.12.0/community/faq"
| "/docs/1.12.0/community/get-in-touch"
| "/docs/1.12.0/community/license"
| "/docs/1.12.0/community/translations"
| "/docs/1.12.0/getting-started"
| "/docs/1.12.0/getting-started/after-the-installation"
| "/docs/1.12.0/getting-started/glossary"
| "/docs/1.12.0/getting-started/installation/docker"
| "/docs/1.12.0/getting-started/installation/easy-panel"
| "/docs/1.12.0/getting-started/installation/helm"
| "/docs/1.12.0/getting-started/installation/home-assistant"
| "/docs/1.12.0/getting-started/installation/portainer"
| "/docs/1.12.0/getting-started/installation/proxmox"
| "/docs/1.12.0/getting-started/installation/qnap"
| "/docs/1.12.0/getting-started/installation/railway"
| "/docs/1.12.0/getting-started/installation/saltbox"
| "/docs/1.12.0/getting-started/installation/source"
| "/docs/1.12.0/getting-started/installation/synology"
| "/docs/1.12.0/getting-started/installation/unraid"
| "/docs/1.12.0/integrations/containers"
| "/docs/1.12.0/integrations/dns"
| "/docs/1.12.0/integrations/hardware"
| "/docs/1.12.0/integrations/kubernetes"
| "/docs/1.12.0/integrations/media-requester"
| "/docs/1.12.0/integrations/media-server"
| "/docs/1.12.0/integrations/servarr"
| "/docs/1.12.0/integrations/torrent"
| "/docs/1.12.0/integrations/usenet"
| "/docs/1.12.0/management/api"
| "/docs/1.12.0/management/apps"
| "/docs/1.12.0/management/boards"
| "/docs/1.12.0/management/certificates"
| "/docs/1.12.0/management/integrations"
| "/docs/1.12.0/management/media"
| "/docs/1.12.0/management/search-engines"
| "/docs/1.12.0/management/settings"
| "/docs/1.12.0/management/users"
| "/docs/1.12.0/widgets/bookmarks"
| "/docs/1.12.0/widgets/calendar"
| "/docs/1.12.0/widgets/clock"
| "/docs/1.12.0/widgets/dns-hole"
| "/docs/1.12.0/widgets/downloads"
| "/docs/1.12.0/widgets/health-monitoring"
| "/docs/1.12.0/widgets/home-assistant"
| "/docs/1.12.0/widgets/iframe"
| "/docs/1.12.0/widgets/indexer-manager"
| "/docs/1.12.0/widgets/media-requests"
| "/docs/1.12.0/widgets/media-server"
| "/docs/1.12.0/widgets/minecraft-server-status"
| "/docs/1.12.0/widgets/notebook"
| "/docs/1.12.0/widgets/rss"
| "/docs/1.12.0/widgets/stocks"
| "/docs/1.12.0/widgets/video"
| "/docs/1.12.0/widgets/weather"
| "/docs/1.13.1/tags"
| "/docs/1.13.1/tags/active-directory"
| "/docs/1.13.1/tags/ad-guard"
| "/docs/1.13.1/tags/ad-guard-home"
| "/docs/1.13.1/tags/administration"
| "/docs/1.13.1/tags/advanced"
| "/docs/1.13.1/tags/analytics"
| "/docs/1.13.1/tags/api"
| "/docs/1.13.1/tags/apps"
| "/docs/1.13.1/tags/banner"
| "/docs/1.13.1/tags/blocking"
| "/docs/1.13.1/tags/boards"
| "/docs/1.13.1/tags/bookmark"
| "/docs/1.13.1/tags/bookmarks"
| "/docs/1.13.1/tags/caddy"
| "/docs/1.13.1/tags/certificates"
| "/docs/1.13.1/tags/checklist"
| "/docs/1.13.1/tags/code"
| "/docs/1.13.1/tags/community"
| "/docs/1.13.1/tags/configuration"
| "/docs/1.13.1/tags/connections"
| "/docs/1.13.1/tags/customization"
| "/docs/1.13.1/tags/data-sources"
| "/docs/1.13.1/tags/database"
| "/docs/1.13.1/tags/developer"
| "/docs/1.13.1/tags/development"
| "/docs/1.13.1/tags/dns"
| "/docs/1.13.1/tags/docker"
| "/docs/1.13.1/tags/donation"
| "/docs/1.13.1/tags/edit-mode"
| "/docs/1.13.1/tags/env"
| "/docs/1.13.1/tags/environment-variables"
| "/docs/1.13.1/tags/feeds"
| "/docs/1.13.1/tags/finance"
| "/docs/1.13.1/tags/getting-started"
| "/docs/1.13.1/tags/google"
| "/docs/1.13.1/tags/grafana"
| "/docs/1.13.1/tags/groups"
| "/docs/1.13.1/tags/hardware"
| "/docs/1.13.1/tags/health"
| "/docs/1.13.1/tags/help"
| "/docs/1.13.1/tags/icon-picker"
| "/docs/1.13.1/tags/icon-repositories"
| "/docs/1.13.1/tags/icons"
| "/docs/1.13.1/tags/iframe"
| "/docs/1.13.1/tags/images"
| "/docs/1.13.1/tags/installation"
| "/docs/1.13.1/tags/integrade"
| "/docs/1.13.1/tags/integration"
| "/docs/1.13.1/tags/integrations"
| "/docs/1.13.1/tags/interface"
| "/docs/1.13.1/tags/jellyserr"
| "/docs/1.13.1/tags/layout"
| "/docs/1.13.1/tags/ldap"
| "/docs/1.13.1/tags/links"
| "/docs/1.13.1/tags/lists"
| "/docs/1.13.1/tags/management"
| "/docs/1.13.1/tags/market"
| "/docs/1.13.1/tags/media"
| "/docs/1.13.1/tags/minecraft"
| "/docs/1.13.1/tags/monitoring"
| "/docs/1.13.1/tags/news"
| "/docs/1.13.1/tags/notebook"
| "/docs/1.13.1/tags/notes"
| "/docs/1.13.1/tags/oidc"
| "/docs/1.13.1/tags/open-collective"
| "/docs/1.13.1/tags/open-media-vault"
| "/docs/1.13.1/tags/overseerr"
| "/docs/1.13.1/tags/permissions"
| "/docs/1.13.1/tags/pgid"
| "/docs/1.13.1/tags/pi-hole"
| "/docs/1.13.1/tags/ping"
| "/docs/1.13.1/tags/programming"
| "/docs/1.13.1/tags/proxmox"
| "/docs/1.13.1/tags/proxy"
| "/docs/1.13.1/tags/puid"
| "/docs/1.13.1/tags/responsive"
| "/docs/1.13.1/tags/roles"
| "/docs/1.13.1/tags/rss"
| "/docs/1.13.1/tags/search"
| "/docs/1.13.1/tags/search-engines"
| "/docs/1.13.1/tags/security"
| "/docs/1.13.1/tags/self-signed"
| "/docs/1.13.1/tags/seo"
| "/docs/1.13.1/tags/server"
| "/docs/1.13.1/tags/settings"
| "/docs/1.13.1/tags/sinkhole"
| "/docs/1.13.1/tags/sso"
| "/docs/1.13.1/tags/stocks"
| "/docs/1.13.1/tags/system"
| "/docs/1.13.1/tags/table"
| "/docs/1.13.1/tags/technical-documentation"
| "/docs/1.13.1/tags/text"
| "/docs/1.13.1/tags/torrent"
| "/docs/1.13.1/tags/traefik"
| "/docs/1.13.1/tags/translations"
| "/docs/1.13.1/tags/unraid"
| "/docs/1.13.1/tags/uploads"
| "/docs/1.13.1/tags/usenet"
| "/docs/1.13.1/tags/users"
| "/docs/1.13.1/tags/variables"
| "/docs/1.13.1/tags/widgets"
| "/docs/1.13.1/advanced/command-line"
| "/docs/1.13.1/advanced/command-line/fix-usernames"
| "/docs/1.13.1/advanced/command-line/password-recovery"
| "/docs/1.13.1/advanced/development/getting-started"
| "/docs/1.13.1/advanced/development/kubernetes"
| "/docs/1.13.1/advanced/environment-variables"
| "/docs/1.13.1/advanced/icons"
| "/docs/1.13.1/advanced/keyboard-shortcuts"
| "/docs/1.13.1/advanced/proxy"
| "/docs/1.13.1/advanced/running-as-different-user"
| "/docs/1.13.1/advanced/single-sign-on"
| "/docs/1.13.1/advanced/styling"
| "/docs/1.13.1/category/advanced"
| "/docs/1.13.1/category/community"
| "/docs/1.13.1/category/developer-guides"
| "/docs/1.13.1/category/getting-started"
| "/docs/1.13.1/category/installation"
| "/docs/1.13.1/category/installation-1"
| "/docs/1.13.1/category/integrations"
| "/docs/1.13.1/category/management"
| "/docs/1.13.1/category/widgets"
| "/docs/1.13.1/community/donate"
| "/docs/1.13.1/community/faq"
| "/docs/1.13.1/community/get-in-touch"
| "/docs/1.13.1/community/license"
| "/docs/1.13.1/community/translations"
| "/docs/1.13.1/getting-started"
| "/docs/1.13.1/getting-started/after-the-installation"
| "/docs/1.13.1/getting-started/glossary"
| "/docs/1.13.1/getting-started/installation/docker"
| "/docs/1.13.1/getting-started/installation/easy-panel"
| "/docs/1.13.1/getting-started/installation/helm"
| "/docs/1.13.1/getting-started/installation/home-assistant"
| "/docs/1.13.1/getting-started/installation/portainer"
| "/docs/1.13.1/getting-started/installation/proxmox"
| "/docs/1.13.1/getting-started/installation/qnap"
| "/docs/1.13.1/getting-started/installation/railway"
| "/docs/1.13.1/getting-started/installation/saltbox"
| "/docs/1.13.1/getting-started/installation/source"
| "/docs/1.13.1/getting-started/installation/synology"
| "/docs/1.13.1/getting-started/installation/unraid"
| "/docs/1.13.1/integrations/cloud"
| "/docs/1.13.1/integrations/containers"
| "/docs/1.13.1/integrations/dns"
| "/docs/1.13.1/integrations/hardware"
| "/docs/1.13.1/integrations/kubernetes"
| "/docs/1.13.1/integrations/media-requester"
| "/docs/1.13.1/integrations/media-server"
| "/docs/1.13.1/integrations/servarr"
| "/docs/1.13.1/integrations/torrent"
| "/docs/1.13.1/integrations/usenet"
| "/docs/1.13.1/management/api"
| "/docs/1.13.1/management/apps"
| "/docs/1.13.1/management/boards"
| "/docs/1.13.1/management/certificates"
| "/docs/1.13.1/management/integrations"
| "/docs/1.13.1/management/media"
| "/docs/1.13.1/management/search-engines"
| "/docs/1.13.1/management/settings"
| "/docs/1.13.1/management/users"
| "/docs/1.13.1/widgets/bookmarks"
| "/docs/1.13.1/widgets/calendar"
| "/docs/1.13.1/widgets/clock"
| "/docs/1.13.1/widgets/dns-hole"
| "/docs/1.13.1/widgets/downloads"
| "/docs/1.13.1/widgets/health-monitoring"
| "/docs/1.13.1/widgets/home-assistant"
| "/docs/1.13.1/widgets/iframe"
| "/docs/1.13.1/widgets/indexer-manager"
| "/docs/1.13.1/widgets/media-requests"
| "/docs/1.13.1/widgets/media-server"
| "/docs/1.13.1/widgets/minecraft-server-status"
| "/docs/1.13.1/widgets/notebook"
| "/docs/1.13.1/widgets/rss"
| "/docs/1.13.1/widgets/stocks"
| "/docs/1.13.1/widgets/video"
| "/docs/1.13.1/widgets/weather"
| "/docs/next/tags"
| "/docs/next/tags/active-directory"
| "/docs/next/tags/ad-guard"
| "/docs/next/tags/ad-guard-home"
| "/docs/next/tags/administration"
| "/docs/next/tags/advanced"
| "/docs/next/tags/analytics"
| "/docs/next/tags/api"
| "/docs/next/tags/apps"
| "/docs/next/tags/banner"
| "/docs/next/tags/blocking"
| "/docs/next/tags/boards"
| "/docs/next/tags/bookmark"
| "/docs/next/tags/bookmarks"
| "/docs/next/tags/caddy"
| "/docs/next/tags/certificates"
| "/docs/next/tags/checklist"
| "/docs/next/tags/code"
| "/docs/next/tags/community"
| "/docs/next/tags/configuration"
| "/docs/next/tags/connections"
| "/docs/next/tags/customization"
| "/docs/next/tags/data-sources"
| "/docs/next/tags/database"
| "/docs/next/tags/developer"
| "/docs/next/tags/development"
| "/docs/next/tags/dns"
| "/docs/next/tags/docker"
| "/docs/next/tags/donation"
| "/docs/next/tags/edit-mode"
| "/docs/next/tags/env"
| "/docs/next/tags/environment-variables"
| "/docs/next/tags/feeds"
| "/docs/next/tags/finance"
| "/docs/next/tags/getting-started"
| "/docs/next/tags/google"
| "/docs/next/tags/grafana"
| "/docs/next/tags/groups"
| "/docs/next/tags/hardware"
| "/docs/next/tags/health"
| "/docs/next/tags/help"
| "/docs/next/tags/icon-picker"
| "/docs/next/tags/icon-repositories"
| "/docs/next/tags/icons"
| "/docs/next/tags/iframe"
| "/docs/next/tags/images"
| "/docs/next/tags/installation"
| "/docs/next/tags/integrade"
| "/docs/next/tags/integration"
| "/docs/next/tags/integrations"
| "/docs/next/tags/interface"
| "/docs/next/tags/jellyserr"
| "/docs/next/tags/layout"
| "/docs/next/tags/ldap"
| "/docs/next/tags/links"
| "/docs/next/tags/lists"
| "/docs/next/tags/management"
| "/docs/next/tags/market"
| "/docs/next/tags/media"
| "/docs/next/tags/minecraft"
| "/docs/next/tags/monitoring"
| "/docs/next/tags/news"
| "/docs/next/tags/notebook"
| "/docs/next/tags/notes"
| "/docs/next/tags/oidc"
| "/docs/next/tags/open-collective"
| "/docs/next/tags/open-media-vault"
| "/docs/next/tags/overseerr"
| "/docs/next/tags/permissions"
| "/docs/next/tags/pgid"
| "/docs/next/tags/pi-hole"
| "/docs/next/tags/ping"
| "/docs/next/tags/programming"
| "/docs/next/tags/proxmox"
| "/docs/next/tags/proxy"
| "/docs/next/tags/puid"
| "/docs/next/tags/responsive"
| "/docs/next/tags/roles"
| "/docs/next/tags/rss"
| "/docs/next/tags/search"
| "/docs/next/tags/search-engines"
| "/docs/next/tags/security"
| "/docs/next/tags/self-signed"
| "/docs/next/tags/seo"
| "/docs/next/tags/server"
| "/docs/next/tags/settings"
| "/docs/next/tags/sinkhole"
| "/docs/next/tags/sso"
| "/docs/next/tags/stocks"
| "/docs/next/tags/system"
| "/docs/next/tags/table"
| "/docs/next/tags/technical-documentation"
| "/docs/next/tags/text"
| "/docs/next/tags/torrent"
| "/docs/next/tags/traefik"
| "/docs/next/tags/translations"
| "/docs/next/tags/unraid"
| "/docs/next/tags/uploads"
| "/docs/next/tags/usenet"
| "/docs/next/tags/users"
| "/docs/next/tags/variables"
| "/docs/next/tags/widgets"
| "/docs/next/advanced/command-line"
| "/docs/next/advanced/command-line/fix-usernames"
| "/docs/next/advanced/command-line/password-recovery"
| "/docs/next/advanced/development/getting-started"
| "/docs/next/advanced/development/kubernetes"
| "/docs/next/advanced/environment-variables"
| "/docs/next/advanced/icons"
| "/docs/next/advanced/keyboard-shortcuts"
| "/docs/next/advanced/proxy"
| "/docs/next/advanced/running-as-different-user"
| "/docs/next/advanced/single-sign-on"
| "/docs/next/advanced/styling"
| "/docs/next/category/advanced"
| "/docs/next/category/community"
| "/docs/next/category/developer-guides"
| "/docs/next/category/getting-started"
| "/docs/next/category/installation"
| "/docs/next/category/installation-1"
| "/docs/next/category/integrations"
| "/docs/next/category/management"
| "/docs/next/category/widgets"
| "/docs/next/community/donate"
| "/docs/next/community/faq"
| "/docs/next/community/get-in-touch"
| "/docs/next/community/license"
| "/docs/next/community/translations"
| "/docs/next/getting-started"
| "/docs/next/getting-started/after-the-installation"
| "/docs/next/getting-started/glossary"
| "/docs/next/getting-started/installation/docker"
| "/docs/next/getting-started/installation/easy-panel"
| "/docs/next/getting-started/installation/helm"
| "/docs/next/getting-started/installation/home-assistant"
| "/docs/next/getting-started/installation/portainer"
| "/docs/next/getting-started/installation/proxmox"
| "/docs/next/getting-started/installation/qnap"
| "/docs/next/getting-started/installation/railway"
| "/docs/next/getting-started/installation/saltbox"
| "/docs/next/getting-started/installation/source"
| "/docs/next/getting-started/installation/synology"
| "/docs/next/getting-started/installation/unraid"
| "/docs/next/integrations/cloud"
| "/docs/next/integrations/containers"
| "/docs/next/integrations/dns"
| "/docs/next/integrations/hardware"
| "/docs/next/integrations/kubernetes"
| "/docs/next/integrations/media-requester"
| "/docs/next/integrations/media-server"
| "/docs/next/integrations/servarr"
| "/docs/next/integrations/torrent"
| "/docs/next/integrations/usenet"
| "/docs/next/management/api"
| "/docs/next/management/apps"
| "/docs/next/management/boards"
| "/docs/next/management/certificates"
| "/docs/next/management/integrations"
| "/docs/next/management/media"
| "/docs/next/management/search-engines"
| "/docs/next/management/settings"
| "/docs/next/management/users"
| "/docs/next/widgets/bookmarks"
| "/docs/next/widgets/calendar"
| "/docs/next/widgets/clock"
| "/docs/next/widgets/dns-hole"
| "/docs/next/widgets/downloads"
| "/docs/next/widgets/health-monitoring"
| "/docs/next/widgets/home-assistant"
| "/docs/next/widgets/iframe"
| "/docs/next/widgets/indexer-manager"
| "/docs/next/widgets/media-requests"
| "/docs/next/widgets/media-server"
| "/docs/next/widgets/minecraft-server-status"
| "/docs/next/widgets/notebook"
| "/docs/next/widgets/rss"
| "/docs/next/widgets/stocks"
| "/docs/next/widgets/video"
| "/docs/next/widgets/weather"
| "/docs/tags" | "/docs/tags"
| "/docs/tags/active-directory" | "/docs/tags/active-directory"
| "/docs/tags/ad-guard" | "/docs/tags/ad-guard"

View File

@@ -142,26 +142,26 @@ export const integrationDefs = {
dashDot: { dashDot: {
name: "Dash.", name: "Dash.",
secretKinds: [[]], secretKinds: [[]],
category: ["healthMonitoring"],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/dashdot.png", iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/dashdot.png",
category: ["healthMonitoring"],
}, },
tdarr: { tdarr: {
name: "Tdarr", name: "Tdarr",
secretKinds: [[]], secretKinds: [[], ["apiKey"]],
category: ["mediaTranscoding"],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/tdarr.png", iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/png/tdarr.png",
category: ["mediaTranscoding"],
}, },
proxmox: { proxmox: {
name: "Proxmox", name: "Proxmox",
secretKinds: [["username", "tokenId", "apiKey", "realm"]], secretKinds: [["username", "tokenId", "apiKey", "realm"]],
category: ["healthMonitoring"],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/proxmox.svg", iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/proxmox.svg",
category: ["healthMonitoring"],
}, },
nextcloud: { nextcloud: {
name: "Nextcloud", name: "Nextcloud",
secretKinds: [["username", "password"]], secretKinds: [["username", "password"]],
category: ["calendar"],
iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/nextcloud.svg", iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/nextcloud.svg",
category: ["calendar"],
}, },
unifiController: { unifiController: {
name: "Unifi Controller", name: "Unifi Controller",

View File

@@ -31,8 +31,8 @@
"@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/dockerode": "^3.3.37", "@types/dockerode": "^3.3.38",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -24,13 +24,13 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@t3-oss/env-nextjs": "^0.12.0", "@t3-oss/env-nextjs": "^0.12.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -27,13 +27,13 @@
"@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": "^7.17.4", "@mantine/form": "^7.17.4",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -31,13 +31,13 @@
"@homarr/validation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0",
"@mantine/core": "^7.17.4", "@mantine/core": "^7.17.4",
"react": "19.1.0", "react": "19.1.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -31,7 +31,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -42,14 +42,14 @@
"tsdav": "^2.1.3", "tsdav": "^2.1.3",
"undici": "7.8.0", "undici": "7.8.0",
"xml2js": "^0.6.2", "xml2js": "^0.6.2",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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/xml2js": "^0.4.14", "@types/xml2js": "^0.4.14",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -30,13 +30,15 @@ export class DashDotIntegration extends Integration {
cpuUtilization: cpuLoad.sumLoad, cpuUtilization: cpuLoad.sumLoad,
memUsed: `${memoryLoad.loadInBytes}`, memUsed: `${memoryLoad.loadInBytes}`,
memAvailable: `${info.maxAvailableMemoryBytes - memoryLoad.loadInBytes}`, memAvailable: `${info.maxAvailableMemoryBytes - memoryLoad.loadInBytes}`,
fileSystem: info.storage.map((storage, index) => ({ fileSystem: info.storage
deviceName: `Storage ${index + 1}: (${storage.disks.map((disk) => disk.device).join(", ")})`, .filter((_, index) => storageLoad[index] !== -1) // filter out undermoutned drives, they display as -1 in the load API
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion .map((storage, index) => ({
used: humanFileSize(storageLoad[index]!), deviceName: `Storage ${index + 1}: (${storage.disks.map((disk) => disk.device).join(", ")})`,
available: `${storage.size}`, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
percentage: storageLoad[index] ? (storageLoad[index] / storage.size) * 100 : 0, used: humanFileSize(storageLoad[index]!),
})), available: storageLoad[index] ? `${storage.size - storageLoad[index]}` : `${storage.size}`,
percentage: storageLoad[index] ? (storageLoad[index] / storage.size) * 100 : 0,
})),
cpuModelName: info.cpuModel === "" ? `Unknown Model (${info.cpuBrand})` : `${info.cpuModel} (${info.cpuBrand})`, cpuModelName: info.cpuModel === "" ? `Unknown Model (${info.cpuBrand})` : `${info.cpuModel} (${info.cpuBrand})`,
cpuTemp: cpuLoad.averageTemperature, cpuTemp: cpuLoad.averageTemperature,
availablePkgUpdates: 0, availablePkgUpdates: 0,

View File

@@ -4,6 +4,7 @@ export interface TdarrPieSegment {
} }
export interface TdarrStatistics { export interface TdarrStatistics {
libraryName: string;
totalFileCount: number; totalFileCount: number;
totalTranscodeCount: number; totalTranscodeCount: number;
totalHealthCheckCount: number; totalHealthCheckCount: number;
@@ -11,19 +12,12 @@ export interface TdarrStatistics {
failedHealthCheckCount: number; failedHealthCheckCount: number;
stagedTranscodeCount: number; stagedTranscodeCount: number;
stagedHealthCheckCount: number; stagedHealthCheckCount: number;
pies: { totalSavedSpace: number;
libraryName: string; transcodeStatus: TdarrPieSegment[];
libraryId: string; healthCheckStatus: TdarrPieSegment[];
totalFiles: number; videoCodecs: TdarrPieSegment[];
totalTranscodes: number; videoContainers: TdarrPieSegment[];
savedSpace: number; videoResolutions: TdarrPieSegment[];
totalHealthChecks: number; audioCodecs: TdarrPieSegment[];
transcodeStatus: TdarrPieSegment[]; audioContainers: TdarrPieSegment[];
healthCheckStatus: TdarrPieSegment[];
videoCodecs: TdarrPieSegment[];
videoContainers: TdarrPieSegment[];
videoResolutions: TdarrPieSegment[];
audioCodecs: TdarrPieSegment[];
audioContainers: TdarrPieSegment[];
}[];
} }

View File

@@ -1,5 +1,3 @@
import { z } from "zod";
import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server"; import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server";
import { Integration } from "../base/integration"; import { Integration } from "../base/integration";
@@ -10,25 +8,34 @@ import { getNodesResponseSchema, getStatisticsSchema, getStatusTableSchema } fro
export class TdarrIntegration extends Integration { export class TdarrIntegration extends Integration {
public async testConnectionAsync(): Promise<void> { public async testConnectionAsync(): Promise<void> {
const url = this.url("/api/v2/status"); await super.handleTestConnectionResponseAsync({
const response = await fetchWithTrustedCertificatesAsync(url); queryFunctionAsync: async () => {
if (response.status !== 200) { return await fetchWithTrustedCertificatesAsync(this.url("/api/v2/is-server-alive"), {
throw new Error(`Unexpected status code: ${response.status}`); method: "POST",
} headers: {
accept: "application/json",
await z.object({ status: z.string() }).parseAsync(await response.json()); "X-Api-Key": super.hasSecretValue("apiKey") ? super.getSecretValue("apiKey") : "",
},
});
},
});
} }
public async getStatisticsAsync(): Promise<TdarrStatistics> { public async getStatisticsAsync(): Promise<TdarrStatistics> {
const url = this.url("/api/v2/cruddb"); const url = this.url("/api/v2/stats/get-pies");
const headerParams = {
accept: "application/json",
"Content-Type": "application/json",
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
};
const response = await fetchWithTrustedCertificatesAsync(url, { const response = await fetchWithTrustedCertificatesAsync(url, {
method: "POST", method: "POST",
headers: { "content-type": "application/json" }, headers: headerParams,
body: JSON.stringify({ body: JSON.stringify({
data: { data: {
collection: "StatisticsJSONDB", libraryId: "", // empty string to get all libraries
mode: "getById",
docID: "statistics",
}, },
}), }),
}); });
@@ -36,36 +43,41 @@ export class TdarrIntegration extends Integration {
const statisticsData = await getStatisticsSchema.parseAsync(await response.json()); const statisticsData = await getStatisticsSchema.parseAsync(await response.json());
return { return {
totalFileCount: statisticsData.totalFileCount, libraryName: "All",
totalTranscodeCount: statisticsData.totalTranscodeCount, totalFileCount: statisticsData.pieStats.totalFiles,
totalHealthCheckCount: statisticsData.totalHealthCheckCount, totalTranscodeCount: statisticsData.pieStats.totalTranscodeCount,
failedTranscodeCount: statisticsData.table3Count, totalHealthCheckCount: statisticsData.pieStats.totalHealthCheckCount,
failedHealthCheckCount: statisticsData.table6Count, // The Tdarr API only returns a category if there is at least one item in it
stagedTranscodeCount: statisticsData.table1Count, failedTranscodeCount:
stagedHealthCheckCount: statisticsData.table4Count, statisticsData.pieStats.status.transcode.find((transcode) => transcode.name === "Transcode error")?.value ?? 0,
pies: statisticsData.pies.map((pie) => ({ failedHealthCheckCount:
libraryName: pie[0], statisticsData.pieStats.status.healthcheck.find((healthcheck) => healthcheck.name === "Error")?.value ?? 0,
libraryId: pie[1], stagedTranscodeCount:
totalFiles: pie[2], statisticsData.pieStats.status.transcode.find((transcode) => transcode.name === "Transcode success")?.value ??
totalTranscodes: pie[3], 0,
savedSpace: pie[4] * 1_000_000_000, // file_size is in GB, convert to bytes, stagedHealthCheckCount:
totalHealthChecks: pie[5], statisticsData.pieStats.status.healthcheck.find((healthcheck) => healthcheck.name === "Queued")?.value ?? 0,
transcodeStatus: pie[6],
healthCheckStatus: pie[7], totalSavedSpace: statisticsData.pieStats.sizeDiff * 1_000_000_000, // sizeDiff is in GB, convert to bytes
videoCodecs: pie[8], transcodeStatus: statisticsData.pieStats.status.transcode,
videoContainers: pie[9], healthCheckStatus: statisticsData.pieStats.status.healthcheck,
videoResolutions: pie[10], videoCodecs: statisticsData.pieStats.video.codecs,
audioCodecs: pie[11], videoContainers: statisticsData.pieStats.video.containers,
audioContainers: pie[12], videoResolutions: statisticsData.pieStats.video.resolutions,
})), audioCodecs: statisticsData.pieStats.audio.codecs,
audioContainers: statisticsData.pieStats.audio.containers,
}; };
} }
public async getWorkersAsync(): Promise<TdarrWorker[]> { public async getWorkersAsync(): Promise<TdarrWorker[]> {
const url = this.url("/api/v2/get-nodes"); const url = this.url("/api/v2/get-nodes");
const headerParams = {
"Content-Type": "application/json",
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
};
const response = await fetchWithTrustedCertificatesAsync(url, { const response = await fetchWithTrustedCertificatesAsync(url, {
method: "GET", method: "GET",
headers: { "content-type": "application/json" }, headers: headerParams,
}); });
const nodesData = await getNodesResponseSchema.parseAsync(await response.json()); const nodesData = await getNodesResponseSchema.parseAsync(await response.json());
@@ -103,9 +115,13 @@ export class TdarrIntegration extends Integration {
private async getTranscodingQueueAsync(firstItemIndex: number, pageSize: number) { private async getTranscodingQueueAsync(firstItemIndex: number, pageSize: number) {
const url = this.url("/api/v2/client/status-tables"); const url = this.url("/api/v2/client/status-tables");
const headerParams = {
"Content-Type": "application/json",
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
};
const response = await fetchWithTrustedCertificatesAsync(url, { const response = await fetchWithTrustedCertificatesAsync(url, {
method: "POST", method: "POST",
headers: { "content-type": "application/json" }, headers: headerParams,
body: JSON.stringify({ body: JSON.stringify({
data: { data: {
start: firstItemIndex, start: firstItemIndex,
@@ -124,7 +140,7 @@ export class TdarrIntegration extends Integration {
healthCheck: item.HealthCheck, healthCheck: item.HealthCheck,
transcode: item.TranscodeDecisionMaker, transcode: item.TranscodeDecisionMaker,
filePath: item.file, filePath: item.file,
fileSize: item.file_size * 1_000_000, // file_size is in MB, convert to bytes fileSize: Math.floor(item.file_size * 1_000_000), // file_size is in MB, convert to bytes, floor because it returns as float
container: item.container, container: item.container,
codec: item.video_codec_name, codec: item.video_codec_name,
resolution: item.video_resolution, resolution: item.video_resolution,
@@ -138,9 +154,13 @@ export class TdarrIntegration extends Integration {
private async getHealthCheckDataAsync(firstItemIndex: number, pageSize: number, totalQueueCount: number) { private async getHealthCheckDataAsync(firstItemIndex: number, pageSize: number, totalQueueCount: number) {
const url = this.url("/api/v2/client/status-tables"); const url = this.url("/api/v2/client/status-tables");
const headerParams = {
"Content-Type": "application/json",
...(super.hasSecretValue("apiKey") ? { "X-Api-Key": super.getSecretValue("apiKey") } : {}),
};
const response = await fetchWithTrustedCertificatesAsync(url, { const response = await fetchWithTrustedCertificatesAsync(url, {
method: "POST", method: "POST",
headers: { "content-type": "application/json" }, headers: headerParams,
body: JSON.stringify({ body: JSON.stringify({
data: { data: {
start: Math.max(firstItemIndex - totalQueueCount, 0), start: Math.max(firstItemIndex - totalQueueCount, 0),
@@ -162,7 +182,7 @@ export class TdarrIntegration extends Integration {
healthCheck: item.HealthCheck, healthCheck: item.HealthCheck,
transcode: item.TranscodeDecisionMaker, transcode: item.TranscodeDecisionMaker,
filePath: item.file, filePath: item.file,
fileSize: item.file_size * 1_000_000, // file_size is in MB, convert to bytes fileSize: Math.floor(item.file_size * 1_000_000), // file_size is in MB, convert to bytes, floor because it returns as float
container: item.container, container: item.container,
codec: item.video_codec_name, codec: item.video_codec_name,
resolution: item.video_resolution, resolution: item.video_resolution,

View File

@@ -1,72 +1,60 @@
import { z } from "zod"; import { z } from "zod";
export const getStatisticsSchema = z.object({ export const getStatisticsSchema = z.object({
totalFileCount: z.number(), pieStats: z.object({
totalTranscodeCount: z.number(), totalFiles: z.number(),
totalHealthCheckCount: z.number(), totalTranscodeCount: z.number(),
table3Count: z.number(), sizeDiff: z.number(),
table6Count: z.number(), totalHealthCheckCount: z.number(),
table1Count: z.number(), status: z.object({
table4Count: z.number(), transcode: z.array(
pies: z.array(
z.tuple([
z.string(), // Library Name
z.string(), // Library ID
z.number(), // File count
z.number(), // Number of transcodes
z.number(), // Space saved (in GB)
z.number(), // Number of health checks
z.array(
z.object({ z.object({
// Transcode Status (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( healthcheck: z.array(
z.object({ z.object({
// Health Status (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( }),
video: z.object({
codecs: z.array(
z.object({ z.object({
// Video files - Codecs (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( containers: z.array(
z.object({ z.object({
// Video files - Containers (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( resolutions: z.array(
z.object({ z.object({
// Video files - Resolutions (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( }),
audio: z.object({
codecs: z.array(
z.object({ z.object({
// Audio files - Codecs (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
z.array( containers: z.array(
z.object({ z.object({
// Audio files - Containers (Pie segments)
name: z.string(), name: z.string(),
value: z.number(), value: z.number(),
}), }),
), ),
]), }),
), }),
}); });
export const getNodesResponseSchema = z.record( export const getNodesResponseSchema = z.record(

View File

@@ -27,13 +27,13 @@
"ioredis": "5.6.1", "ioredis": "5.6.1",
"superjson": "2.2.2", "superjson": "2.2.2",
"winston": "3.17.0", "winston": "3.17.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -36,16 +36,16 @@
"@mantine/core": "^7.17.4", "@mantine/core": "^7.17.4",
"@tabler/icons-react": "^3.31.0", "@tabler/icons-react": "^3.31.0",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"next": "15.3.0", "next": "15.3.1",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -82,7 +82,7 @@ export const AddBoardModal = createModal(({ actions }) => {
<Button onClick={actions.closeModal} variant="subtle" color="gray"> <Button onClick={actions.closeModal} variant="subtle" color="gray">
{t("common.action.cancel")} {t("common.action.cancel")}
</Button> </Button>
<Button type="submit" color="teal" loading={isPending}> <Button type="submit" loading={isPending}>
{t("common.action.create")} {t("common.action.create")}
</Button> </Button>
</Group> </Group>

View File

@@ -44,7 +44,7 @@ export const AddGroupModal = createModal<void>(({ actions }) => {
<Button onClick={actions.closeModal} variant="subtle" color="gray"> <Button onClick={actions.closeModal} variant="subtle" color="gray">
{t("common.action.cancel")} {t("common.action.cancel")}
</Button> </Button>
<Button loading={isPending} type="submit" color="teal"> <Button loading={isPending} type="submit">
{t("common.action.create")} {t("common.action.create")}
</Button> </Button>
</Group> </Group>

View File

@@ -1,4 +1,3 @@
import React from "react";
import { Button, Group, Stack, Text } from "@mantine/core"; import { Button, Group, Stack, Text } from "@mantine/core";
import { DateTimePicker } from "@mantine/dates"; import { DateTimePicker } from "@mantine/dates";
import dayjs from "dayjs"; import dayjs from "dayjs";
@@ -63,7 +62,7 @@ export const InviteCreateModal = createModal<void>(({ actions }) => {
<Button onClick={actions.closeModal} variant="subtle" color="gray"> <Button onClick={actions.closeModal} variant="subtle" color="gray">
{t("common.action.cancel")} {t("common.action.cancel")}
</Button> </Button>
<Button type="submit" loading={isPending} color="teal"> <Button type="submit" loading={isPending}>
{t("common.action.create")} {t("common.action.create")}
</Button> </Button>
</Group> </Group>

View File

@@ -32,7 +32,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -31,7 +31,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -40,11 +40,11 @@
"@mantine/core": "^7.17.4", "@mantine/core": "^7.17.4",
"@mantine/hooks": "^7.17.4", "@mantine/hooks": "^7.17.4",
"adm-zip": "0.5.16", "adm-zip": "0.5.16",
"next": "15.3.0", "next": "15.3.1",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"superjson": "2.2.2", "superjson": "2.2.2",
"zod": "^3.24.2", "zod": "^3.24.3",
"zod-form-data": "^2.0.7" "zod-form-data": "^2.0.7"
}, },
"devDependencies": { "devDependencies": {
@@ -52,7 +52,7 @@
"@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/adm-zip": "0.5.7", "@types/adm-zip": "0.5.7",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -23,13 +23,13 @@
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config",
"dependencies": { "dependencies": {
"@homarr/common": "workspace:^0.1.0", "@homarr/common": "workspace:^0.1.0",
"zod": "^3.24.2" "zod": "^3.24.3"
}, },
"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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -31,7 +31,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -33,7 +33,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -38,7 +38,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -29,7 +29,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -26,7 +26,7 @@
"@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": "^7.17.4", "@mantine/dates": "^7.17.4",
"next": "15.3.0", "next": "15.3.1",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0" "react-dom": "19.1.0"
}, },
@@ -34,7 +34,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -37,8 +37,8 @@
"@mantine/hooks": "^7.17.4", "@mantine/hooks": "^7.17.4",
"@mantine/spotlight": "^7.17.4", "@mantine/spotlight": "^7.17.4",
"@tabler/icons-react": "^3.31.0", "@tabler/icons-react": "^3.31.0",
"jotai": "^2.12.2", "jotai": "^2.12.3",
"next": "15.3.0", "next": "15.3.1",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0", "react-dom": "19.1.0",
"use-deep-compare-effect": "^1.8.1" "use-deep-compare-effect": "^1.8.1"
@@ -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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -32,7 +32,7 @@
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"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.3.0", "next": "15.3.1",
"next-intl": "4.0.2", "next-intl": "4.0.2",
"react": "19.1.0", "react": "19.1.0",
"react-dom": "19.1.0" "react-dom": "19.1.0"
@@ -41,7 +41,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",
"eslint": "^9.24.0", "eslint": "^9.25.0",
"typescript": "^5.8.3" "typescript": "^5.8.3"
} }
} }

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Seleccioneu l'aplicació", "label": "Seleccioneu l'aplicació",
"notFound": "No s'ha trobat cap aplicació" "notFound": "No s'ha trobat cap aplicació",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "选择应用", "label": "选择应用",
"notFound": "未找到应用" "notFound": "未找到应用",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {
@@ -2212,7 +2222,7 @@
"label": "背景图片 URL", "label": "背景图片 URL",
"placeholder": "", "placeholder": "",
"group": { "group": {
"your": "", "your": "你的图像",
"other": "" "other": ""
} }
}, },
@@ -2852,7 +2862,7 @@
"label": "媒体转码" "label": "媒体转码"
}, },
"networkController": { "networkController": {
"label": "" "label": "网络控制器"
} }
} }
}, },

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Vybrat aplikaci", "label": "Vybrat aplikaci",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Vælg app", "label": "Vælg app",
"notFound": "Ingen app fundet" "notFound": "Ingen app fundet",
} "search": "Søg efter en app",
"noResults": "Ingen resultater",
"action": "Vælg {app}",
"title": "Vælg en app, der skal tilføjes til denne tavle"
},
"create": {
"title": "Opret ny app",
"description": "Opret en ny app ",
"action": "Åbn app-oprettelse"
},
"add": "Tilføj en app"
} }
}, },
"integration": { "integration": {
@@ -759,8 +769,8 @@
"message": "Stien er sandsynligvis ikke korrekt" "message": "Stien er sandsynligvis ikke korrekt"
}, },
"tooManyRequests": { "tooManyRequests": {
"title": "", "title": "For mange anmodninger i et givet tidsrum",
"message": "" "message": "Der var for mange anmodninger. Du bliver sandsynligvis rate-limited eller afvist af målsystemet"
} }
} }
}, },
@@ -1787,7 +1797,7 @@
"label": "Vis torrent poster markeret som fuldførte" "label": "Vis torrent poster markeret som fuldførte"
}, },
"showCompletedHttp": { "showCompletedHttp": {
"label": "" "label": "Vis Diverse poster markeret som færdige"
}, },
"activeTorrentThreshold": { "activeTorrentThreshold": {
"label": "Skjul afsluttet torrent under denne tærskel (i kiB/s)" "label": "Skjul afsluttet torrent under denne tærskel (i kiB/s)"
@@ -2038,56 +2048,56 @@
"option": {}, "option": {},
"card": { "card": {
"vpn": { "vpn": {
"countConnected": "" "countConnected": "{count} tilsluttet"
} }
}, },
"error": { "error": {
"integrationsDisconnected": "", "integrationsDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt",
"unknownContentOption": "" "unknownContentOption": "Ukendt indhold indstilling for netværkscontroller resumé widget: "
}, },
"name": "", "name": "Netværkskontroller Oversigt",
"description": "" "description": "Viser resuméet af en netværkskontroller (som UniFi Controller)"
}, },
"networkControllerStatus": { "networkControllerStatus": {
"card": { "card": {
"variants": { "variants": {
"wired": { "wired": {
"name": "" "name": "Kablet"
}, },
"wifi": { "wifi": {
"name": "" "name": "WiFi"
} }
}, },
"users": { "users": {
"label": "" "label": "Brugere"
}, },
"guests": { "guests": {
"label": "" "label": "Gæster"
} }
}, },
"option": { "option": {
"content": { "content": {
"option": { "option": {
"wifi": { "wifi": {
"label": "" "label": "WiFi"
}, },
"wired": { "wired": {
"label": "" "label": "Kablet"
} }
}, },
"label": "" "label": "Widget indhold"
} }
}, },
"error": { "error": {
"integrationsDisconnected": "", "integrationsDisconnected": "Ingen tilgængelige data, alle integrationer afbrudt",
"unknownContentOption": "" "unknownContentOption": "Ukendt indhold indstilling for netværksstatuswidget: "
}, },
"name": "", "name": "Status for netværk",
"description": "" "description": "Vis tilsluttede enheder på et netværk"
}, },
"networkController": { "networkController": {
"error": { "error": {
"internalServerError": "" "internalServerError": "Kunne ikke hente Netværkskontroloversigt"
} }
} }
}, },
@@ -2210,10 +2220,10 @@
}, },
"backgroundImageUrl": { "backgroundImageUrl": {
"label": "Baggrundsbillede URL", "label": "Baggrundsbillede URL",
"placeholder": "", "placeholder": "Begynd at skrive for at søge efter lokale billeder",
"group": { "group": {
"your": "", "your": "Dine billeder",
"other": "" "other": "Andre billeder"
} }
}, },
"backgroundImageAttachment": { "backgroundImageAttachment": {
@@ -2852,7 +2862,7 @@
"label": "Omkodning af medier" "label": "Omkodning af medier"
}, },
"networkController": { "networkController": {
"label": "" "label": "Netværkskontroller"
} }
} }
}, },

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "App wähle", "label": "App wähle",
"notFound": "Keni app gfunge" "notFound": "Keni app gfunge",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "App auswählen", "label": "App auswählen",
"notFound": "Keine App gefunden" "notFound": "Keine App gefunden",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Select an application", "label": "Select an application",
"notFound": "No application found" "notFound": "No application found",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Sélectionner l'app", "label": "Sélectionner l'app",
"notFound": "Aucune app trouvée" "notFound": "Aucune app trouvée",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {
@@ -3363,7 +3373,7 @@
"label": "Espaces de noms" "label": "Espaces de noms"
}, },
"ingresses": { "ingresses": {
"label": "" "label": "Routes"
}, },
"services": { "services": {
"label": "Services" "label": "Services"

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "בחר אפליקציה", "label": "בחר אפליקציה",
"notFound": "לא נמצאה אפליקציה" "notFound": "לא נמצאה אפליקציה",
} "search": "חפש אפליקציה",
"noResults": "אין תוצאות",
"action": "בחר {app}",
"title": "בחר אפליקציה להוספה ללוח זה"
},
"create": {
"title": "צור אפליקציה חדשה",
"description": "צור אפליקציה חדשה",
"action": "פתח את יצירת האפליקציה"
},
"add": "הוסף אפליקציה"
} }
}, },
"integration": { "integration": {
@@ -759,8 +769,8 @@
"message": "כנראה שהנתיב שגוי" "message": "כנראה שהנתיב שגוי"
}, },
"tooManyRequests": { "tooManyRequests": {
"title": "", "title": "יותר מדי בקשות בזמן נתון",
"message": "" "message": "היו יותר מדי בקשות. סביר להניח שמערכת היעד מגבילה את הבקשות או דחתה אותך"
} }
} }
}, },
@@ -985,7 +995,7 @@
}, },
"option": { "option": {
"title": { "title": {
"label": "" "label": "כותרת"
}, },
"borderColor": { "borderColor": {
"label": "צבע מסגרת" "label": "צבע מסגרת"
@@ -1787,7 +1797,7 @@
"label": "הצג ערכי טורנט שסומנו כהשלמה" "label": "הצג ערכי טורנט שסומנו כהשלמה"
}, },
"showCompletedHttp": { "showCompletedHttp": {
"label": "" "label": "הצג ערכים שונים שסומנו כהשלמה"
}, },
"activeTorrentThreshold": { "activeTorrentThreshold": {
"label": "הסתר טורנט שהושלם מתחת לסף הזה (בקיB/s)" "label": "הסתר טורנט שהושלם מתחת לסף הזה (בקיB/s)"
@@ -2038,56 +2048,56 @@
"option": {}, "option": {},
"card": { "card": {
"vpn": { "vpn": {
"countConnected": "" "countConnected": "{count} מחובר"
} }
}, },
"error": { "error": {
"integrationsDisconnected": "", "integrationsDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות",
"unknownContentOption": "" "unknownContentOption": "אפשרות תוכן לא ידוע עבור ווידג'ט סיכום בקר רשת: "
}, },
"name": "", "name": "סיכום בקר רשת",
"description": "" "description": "מציג את הסיכום של בקר רשת (כמו בקר UniFi)"
}, },
"networkControllerStatus": { "networkControllerStatus": {
"card": { "card": {
"variants": { "variants": {
"wired": { "wired": {
"name": "" "name": "חוטי"
}, },
"wifi": { "wifi": {
"name": "" "name": "אלחוטי"
} }
}, },
"users": { "users": {
"label": "" "label": "משתמשים"
}, },
"guests": { "guests": {
"label": "" "label": "אורחים"
} }
}, },
"option": { "option": {
"content": { "content": {
"option": { "option": {
"wifi": { "wifi": {
"label": "" "label": "אלחוטי"
}, },
"wired": { "wired": {
"label": "" "label": "חוטי"
} }
}, },
"label": "" "label": "תוכן יישומון"
} }
}, },
"error": { "error": {
"integrationsDisconnected": "", "integrationsDisconnected": "אין נתונים זמינים, כל האינטגרציות מנותקות",
"unknownContentOption": "" "unknownContentOption": "אפשרות תוכן לא ידוע עבור ווידג'ט סיכום בקר רשת: "
}, },
"name": "", "name": "סטטוס רשת",
"description": "" "description": "הצג מכשירים מחוברים ברשת"
}, },
"networkController": { "networkController": {
"error": { "error": {
"internalServerError": "" "internalServerError": "אחזור תקציר בקר הרשת נכשל"
} }
} }
}, },
@@ -2210,10 +2220,10 @@
}, },
"backgroundImageUrl": { "backgroundImageUrl": {
"label": "כתובת אתר של תמונת רקע", "label": "כתובת אתר של תמונת רקע",
"placeholder": "", "placeholder": "התחל להקליד כדי לחפש תמונות מקומיות",
"group": { "group": {
"your": "", "your": "התמונות שלך",
"other": "" "other": "תמונות אחרות"
} }
}, },
"backgroundImageAttachment": { "backgroundImageAttachment": {
@@ -2852,7 +2862,7 @@
"label": "המרת קידוד מדיה" "label": "המרת קידוד מדיה"
}, },
"networkController": { "networkController": {
"label": "" "label": "בקר רשת"
} }
} }
}, },

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Alkalmazás kiválasztása", "label": "Alkalmazás kiválasztása",
"notFound": "Nem található alkalmazás" "notFound": "Nem található alkalmazás",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Seleziona App", "label": "Seleziona App",
"notFound": "Nessuna app trovata" "notFound": "Nessuna app trovata",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "App selecteren", "label": "App selecteren",
"notFound": "Geen app gevonden" "notFound": "Geen app gevonden",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Velg app", "label": "Velg app",
"notFound": "Ingen app funnet" "notFound": "Ingen app funnet",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Wybierz aplikację", "label": "Wybierz aplikację",
"notFound": "Nie znaleziono aplikacji" "notFound": "Nie znaleziono aplikacji",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Выбрать приложение", "label": "Выбрать приложение",
"notFound": "Приложения не найдены" "notFound": "Приложения не найдены",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Vybrať aplikáciu", "label": "Vybrať aplikáciu",
"notFound": "Nenašla sa žiadna aplikácia" "notFound": "Nenašla sa žiadna aplikácia",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

View File

@@ -2,130 +2,130 @@
"init": { "init": {
"step": { "step": {
"start": { "start": {
"title": "", "title": "Välkommen till Homarr",
"subtitle": "", "subtitle": "Låt oss komma igång med att sätta upp din installation av Homarr.",
"description": "", "description": "För att komma igång, välj hur du vill ställa in din Homarr-installation.",
"action": { "action": {
"scratch": "", "scratch": "Börja från början",
"importOldmarr": "" "importOldmarr": "Importera från Homarr äldre än version 1.0"
} }
}, },
"import": { "import": {
"title": "", "title": "Importera data",
"subtitle": "", "subtitle": "Du kan importera data från en befintlig installation av Homarr.",
"dropzone": { "dropzone": {
"title": "", "title": "Dra ZIP-filen hit eller klicka för att bläddra",
"description": "" "description": "Den uppladdade ZIP-filen kommer att bearbetas och du kommer att kunna välja vad du vill importera"
}, },
"fileInfo": { "fileInfo": {
"action": { "action": {
"change": "" "change": "Byt fil"
} }
}, },
"importSettings": { "importSettings": {
"title": "", "title": "Importera inställningar",
"description": "" "description": "Konfigurera hur importen skall genomföras"
}, },
"boardSelection": { "boardSelection": {
"title": "", "title": "Hittade {count} tavlor",
"description": "", "description": "Välj alla tavlor med den storlek du vill importera",
"action": { "action": {
"selectAll": "", "selectAll": "Välj alla",
"unselectAll": "" "unselectAll": "Avmarkera alla"
} }
}, },
"summary": { "summary": {
"title": "", "title": "Summering av importen",
"description": "", "description": "I sammanfattningen nedan kan du se vad som kommer att importeras",
"action": { "action": {
"import": "" "import": "Bekräfta importen och fortsätt"
}, },
"entities": { "entities": {
"apps": "Appar", "apps": "Applikationer",
"boards": "Tavlor", "boards": "Tavlor",
"integrations": "", "integrations": "Integrationer",
"credentialUsers": "" "credentialUsers": "Användaruppgifter"
} }
}, },
"tokenModal": { "tokenModal": {
"title": "", "title": "Ange 'Token' för importen",
"field": { "field": {
"token": { "token": {
"label": "", "label": "Token",
"description": "" "description": "Ange 'import-token' från din tidigare installation av Homarr"
} }
}, },
"notification": { "notification": {
"error": { "error": {
"title": "", "title": "Felaktig 'Token'",
"message": "" "message": "Den 'Token' som du angivit är felaktig"
} }
} }
} }
}, },
"user": { "user": {
"title": "", "title": "Administratör",
"subtitle": "", "subtitle": "Ange inloggningsuppgifter för administratören.",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Användare har adderats",
"message": "" "message": "Användaren adderades"
}, },
"error": { "error": {
"title": "" "title": "Misslyckades med att addera användaren"
} }
} }
}, },
"group": { "group": {
"title": "", "title": "Extern grupp",
"subtitle": "", "subtitle": "Ange vilken grupp som skall användas för externa användare.",
"form": { "form": {
"name": { "name": {
"label": "", "label": "Gruppens namn",
"description": "" "description": ""
} }
} }
}, },
"settings": { "settings": {
"title": "Inställningar", "title": "Inställningar",
"subtitle": "" "subtitle": "Konfigurera serverinställningar."
}, },
"finish": { "finish": {
"title": "", "title": "Slutför installationen",
"subtitle": "", "subtitle": "Du är redo att sätta igång!",
"description": "", "description": "Du har slutfört installationen. Du kan nu börja använda Homarr. Välj din nästa åtgärd:",
"action": { "action": {
"goToBoard": "", "goToBoard": "Gå till tavlan {name}",
"createBoard": "", "createBoard": "Addera din första tavla",
"inviteUser": "", "inviteUser": "Bjud in andra användare",
"docs": "" "docs": "Läs dokumentationen"
} }
} }
}, },
"backToStart": "" "backToStart": "Tillbaka till början"
}, },
"user": { "user": {
"title": "Användare", "title": "Användare",
"name": "Användare", "name": "Användare",
"page": { "page": {
"login": { "login": {
"title": "", "title": "Logga in på ditt konto",
"subtitle": "" "subtitle": "Välkommen tillbaka! Vänligen ange dina inloggningsuppgifter"
}, },
"invite": { "invite": {
"title": "", "title": "Gå med i Homarr",
"subtitle": "", "subtitle": "Välkommen till Homarr! Vänligen addera ditt konto",
"description": "" "description": "Du har blivit inbjuden av {username}"
}, },
"init": { "init": {
"title": "", "title": "Ny installation av Homarr",
"subtitle": "" "subtitle": "Vänligen addera den första administratören"
} }
}, },
"field": { "field": {
"email": { "email": {
"label": "E-post", "label": "E-postadress",
"verified": "" "verified": "Verifierad"
}, },
"username": { "username": {
"label": "Användarnamn" "label": "Användarnamn"
@@ -133,34 +133,34 @@
"password": { "password": {
"label": "Lösenord", "label": "Lösenord",
"requirement": { "requirement": {
"length": "", "length": "Använd minst 8 tecken",
"lowercase": "Inkluderar liten bokstav", "lowercase": "Använd liten bokstav",
"uppercase": "Inkluderar stor bokstav", "uppercase": "Använd stor bokstav",
"number": "Inkluderar nummer", "number": "Använd siffra",
"special": "" "special": "Använd specialtecken"
} }
}, },
"passwordConfirm": { "passwordConfirm": {
"label": "Bekräfta lösenord" "label": "Bekräfta lösenordet"
}, },
"previousPassword": { "previousPassword": {
"label": "" "label": "Föregående lösenord"
}, },
"homeBoard": { "homeBoard": {
"label": "" "label": "Starttavla"
}, },
"pingIconsEnabled": { "pingIconsEnabled": {
"label": "" "label": "Använd ikoner för \"onlinekontroll\" (pings)"
}, },
"defaultSearchEngine": { "defaultSearchEngine": {
"label": "" "label": "Förvald sökmotor"
}, },
"openSearchInNewTab": { "openSearchInNewTab": {
"label": "" "label": "Visa sökresultat i ny flik"
} }
}, },
"error": { "error": {
"usernameTaken": "" "usernameTaken": "Användarnamnet finns redan"
}, },
"action": { "action": {
"login": { "login": {
@@ -168,41 +168,41 @@
"labelWith": "", "labelWith": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Inloggning lyckades",
"message": "" "message": "Du är nu inloggad"
}, },
"error": { "error": {
"title": "", "title": "Inloggning misslyckades",
"message": "" "message": "Din inloggning misslyckades"
} }
}, },
"forgotPassword": { "forgotPassword": {
"label": "", "label": "Glömt ditt lösenord?",
"description": "" "description": "En administratör kan använda följande kommando för att återställa ditt lösenord:"
} }
}, },
"register": { "register": {
"label": "Skapa konto", "label": "Addera konto",
"notification": { "notification": {
"success": { "success": {
"title": "Konto skapat", "title": "Kontot har adderats",
"message": "" "message": "Var vänlig logga in för att fortsätta"
}, },
"error": { "error": {
"title": "", "title": "Misslyckades att addera kontot",
"message": "" "message": "Ditt konto kunde inte adderas"
} }
} }
}, },
"create": "Skapa användare", "create": "Addera användare",
"changePassword": { "changePassword": {
"label": "", "label": "Ändra lösenordet",
"notification": { "notification": {
"success": { "success": {
"message": "" "message": "Lösenordet har ändrats"
}, },
"error": { "error": {
"message": "" "message": "Kunde inte ändra lösenordet"
} }
} }
}, },
@@ -257,7 +257,7 @@
"message": "" "message": ""
}, },
"toLarge": { "toLarge": {
"title": "", "title": "Bilden är för stor",
"message": "" "message": ""
} }
} }
@@ -300,14 +300,14 @@
} }
}, },
"group": { "group": {
"title": "", "title": "Grupper",
"name": "", "name": "",
"search": "", "search": "",
"field": { "field": {
"name": "Namn", "name": "Namn",
"members": "", "members": "",
"homeBoard": { "homeBoard": {
"label": "", "label": "Starttavla",
"description": "" "description": ""
}, },
"mobileBoard": { "mobileBoard": {
@@ -326,7 +326,7 @@
} }
}, },
"app": { "app": {
"title": "Appar", "title": "Applikationer",
"item": { "item": {
"create": { "create": {
"label": "", "label": "",
@@ -368,15 +368,15 @@
} }
}, },
"integration": { "integration": {
"title": "", "title": "Integrationer",
"item": { "item": {
"create": { "create": {
"label": "", "label": "Addera integrationer",
"description": "" "description": "Tillåt medlemmar att addera integrationer"
}, },
"use-all": { "use-all": {
"label": "", "label": "Använd alla integrationer",
"description": "" "description": "Tillåter medlemmar att addera valfri integration till sina tavlor"
}, },
"interact-all": { "interact-all": {
"label": "", "label": "",
@@ -415,7 +415,7 @@
} }
}, },
"search-engine": { "search-engine": {
"title": "", "title": "Sökmotorer",
"item": { "item": {
"create": { "create": {
"label": "", "label": "",
@@ -541,17 +541,17 @@
} }
}, },
"app": { "app": {
"search": "", "search": "Sök efter en applikation",
"page": { "page": {
"list": { "list": {
"title": "Appar", "title": "Applikationer",
"noResults": { "noResults": {
"title": "", "title": "",
"action": "" "action": ""
} }
}, },
"create": { "create": {
"title": "", "title": "Addera applikation",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "",
@@ -567,11 +567,11 @@
"title": "", "title": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Ändringarna har sparats",
"message": "" "message": ""
}, },
"error": { "error": {
"title": "", "title": "Misslyckades med att spara ändringarna",
"message": "" "message": ""
} }
} }
@@ -596,7 +596,7 @@
"label": "Namn" "label": "Namn"
}, },
"description": { "description": {
"label": "" "label": "Beskrivning"
}, },
"url": { "url": {
"label": "" "label": ""
@@ -611,14 +611,24 @@
"action": { "action": {
"select": { "select": {
"label": "", "label": "",
"notFound": "" "notFound": "",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "Addera en ny applikation",
"description": "Addera en ny applikation ",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {
"page": { "page": {
"list": { "list": {
"title": "", "title": "Integrationer",
"search": "", "search": "",
"noResults": { "noResults": {
"title": "" "title": ""
@@ -815,7 +825,7 @@
"field": { "field": {
"name": "Namn", "name": "Namn",
"size": "Storlek", "size": "Storlek",
"creator": "Skapare" "creator": "Adderad av"
}, },
"action": { "action": {
"upload": { "upload": {
@@ -855,18 +865,18 @@
"error": "Fel", "error": "Fel",
"action": { "action": {
"add": "Lägg till", "add": "Lägg till",
"apply": "Verkställ", "apply": "Använd",
"backToOverview": "", "backToOverview": "Tillbaka till översikten",
"create": "Skapa", "create": "Addera",
"createAnother": "", "createAnother": "Addera och börja om",
"edit": "Redigera", "edit": "Redigera",
"import": "", "import": "",
"insert": "Infoga", "insert": "Infoga",
"remove": "Ta bort", "remove": "Ta bort",
"save": "Spara", "save": "Spara",
"saveChanges": "Spara ändringar", "saveChanges": "Spara",
"cancel": "Avbryt", "cancel": "Avbryt",
"delete": "Radera", "delete": "Ta bort",
"discard": "", "discard": "",
"confirm": "Bekräfta", "confirm": "Bekräfta",
"continue": "", "continue": "",
@@ -931,15 +941,15 @@
"switchToDarkMode": "", "switchToDarkMode": "",
"switchToLightMode": "", "switchToLightMode": "",
"management": "", "management": "",
"preferences": "Dina Inställningar", "preferences": "Dina inställningar",
"logout": "", "logout": "Logga ut",
"login": "Logga in", "login": "Logga in",
"homeBoard": "", "homeBoard": "Din starttavla",
"loggedOut": "", "loggedOut": "",
"updateAvailable": "" "updateAvailable": ""
} }
}, },
"dangerZone": "Farozon", "dangerZone": "Kritiska inställningar",
"noResults": "Hittade inga resultat", "noResults": "Hittade inga resultat",
"unsavedChanges": "", "unsavedChanges": "",
"preview": { "preview": {
@@ -1040,7 +1050,7 @@
"action": { "action": {
"create": "", "create": "",
"import": "", "import": "",
"edit": "", "edit": "Redigera objekt",
"moveResize": "", "moveResize": "",
"duplicate": "", "duplicate": "",
"remove": "" "remove": ""
@@ -1051,7 +1061,7 @@
} }
}, },
"create": { "create": {
"title": "", "title": "Välj objekt du vill lägga till",
"search": "", "search": "",
"addToBoard": "" "addToBoard": ""
}, },
@@ -1073,20 +1083,20 @@
} }
}, },
"edit": { "edit": {
"title": "", "title": "Redigera objekt",
"advancedOptions": { "advancedOptions": {
"label": "", "label": "Avancerade inställningar",
"title": "" "title": "Avancerade inställningar för objektet"
}, },
"field": { "field": {
"integrations": { "integrations": {
"label": "" "label": "Integrationer"
}, },
"customCssClasses": { "customCssClasses": {
"label": "" "label": "Egna CSS-klasser"
}, },
"borderColor": { "borderColor": {
"label": "" "label": "Färg på kantlinje"
} }
} }
}, },
@@ -1101,7 +1111,7 @@
"description": "", "description": "",
"option": { "option": {
"appId": { "appId": {
"label": "" "label": "Välj applikation"
}, },
"openInNewTab": { "openInNewTab": {
"label": "Öppna i ny flik" "label": "Öppna i ny flik"
@@ -1124,17 +1134,17 @@
} }
}, },
"bookmarks": { "bookmarks": {
"name": "", "name": "Bokmärken",
"description": "", "description": "",
"option": { "option": {
"title": { "title": {
"label": "" "label": "Titel"
}, },
"layout": { "layout": {
"label": "", "label": "",
"option": { "option": {
"row": { "row": {
"label": "Horisontal" "label": "Horisontell"
}, },
"column": { "column": {
"label": "Vertikal" "label": "Vertikal"
@@ -1148,20 +1158,20 @@
} }
}, },
"hideTitle": { "hideTitle": {
"label": "" "label": "Dölj titel"
}, },
"hideIcon": { "hideIcon": {
"label": "" "label": "Dölj ikoner"
}, },
"hideHostname": { "hideHostname": {
"label": "" "label": ""
}, },
"openNewTab": { "openNewTab": {
"label": "" "label": "Öppna i en ny flik"
}, },
"items": { "items": {
"label": "", "label": "Bokmärken",
"add": "" "add": "Addera bokmärke"
} }
} }
}, },
@@ -1207,7 +1217,7 @@
"label": "", "label": "",
"option": { "option": {
"row": { "row": {
"label": "Horisontal" "label": "Horisontell"
}, },
"column": { "column": {
"label": "Vertikal" "label": "Vertikal"
@@ -1261,7 +1271,7 @@
}, },
"timezone": { "timezone": {
"label": "Tidszon", "label": "Tidszon",
"description": "" "description": "Välj tidszon som följer IANA-standarden"
}, },
"showDate": { "showDate": {
"label": "" "label": ""
@@ -1304,17 +1314,17 @@
"description": "", "description": "",
"option": { "option": {
"showToolbar": { "showToolbar": {
"label": "Visa verktygsfältet för att hjälpa dig skriva markdown" "label": "Visa verktygsfältet för att hjälpa dig formatera texten"
}, },
"allowReadOnlyCheck": { "allowReadOnlyCheck": {
"label": "Tillåt check i skrivskyddat läge" "label": "Tillåt bocka av i en lista i skrivskyddat läge"
}, },
"content": { "content": {
"label": "Innehållet i anteckningsboken" "label": "Innehållet i anteckningsboken"
} }
}, },
"controls": { "controls": {
"bold": "Fet", "bold": "Fetstil",
"italic": "Kursiv", "italic": "Kursiv",
"strikethrough": "Genomstruken", "strikethrough": "Genomstruken",
"underline": "Understruken", "underline": "Understruken",
@@ -1351,7 +1361,7 @@
"right": "Höger" "right": "Höger"
}, },
"popover": { "popover": {
"clearColor": "Rensa färg", "clearColor": "Ta bort färg",
"source": "Källa", "source": "Källa",
"widthPlaceholder": "Värde i % eller pixlar", "widthPlaceholder": "Värde i % eller pixlar",
"columns": "Kolumner", "columns": "Kolumner",
@@ -1721,7 +1731,7 @@
}, },
"app": { "app": {
"noData": "", "noData": "",
"description": "", "description": "Klicka på <here></here> för att addera en ny applikation",
"quickCreate": "" "quickCreate": ""
}, },
"error": { "error": {
@@ -1750,7 +1760,7 @@
}, },
"error": { "error": {
"noUrl": "", "noUrl": "",
"forYoutubeUseIframe": "" "forYoutubeUseIframe": "För YouTube-videor använd iframe-alternativet"
} }
}, },
"mediaServer": { "mediaServer": {
@@ -1812,7 +1822,7 @@
}, },
"added": { "added": {
"columnTitle": "", "columnTitle": "",
"detailsTitle": "Datum tillagt" "detailsTitle": "Datum har adderats"
}, },
"category": { "category": {
"columnTitle": "", "columnTitle": "",
@@ -2108,7 +2118,7 @@
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "",
"message": "" "message": "Tavlan har duplicerats"
}, },
"error": { "error": {
"title": "", "title": "",
@@ -2120,7 +2130,7 @@
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "",
"message": "" "message": "Tavlan sparades"
}, },
"error": { "error": {
"title": "", "title": "",
@@ -2137,7 +2147,7 @@
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "",
"message": "" "message": "Tavlan har importerats"
}, },
"error": { "error": {
"title": "", "title": "",
@@ -2150,7 +2160,7 @@
"invalidError": "" "invalidError": ""
}, },
"apps": { "apps": {
"label": "Appar", "label": "Applikationer",
"avoidDuplicates": { "avoidDuplicates": {
"label": "", "label": "",
"description": "" "description": ""
@@ -2165,7 +2175,7 @@
}, },
"screenSize": { "screenSize": {
"label": "", "label": "",
"description": "", "description": "I versioner äldre än version 1.0 fanns tre olika lägen, så du kunde välja antalet kolumner för varje skärmstorlek.",
"option": { "option": {
"sm": "Liten", "sm": "Liten",
"md": "Mellan", "md": "Mellan",
@@ -2403,14 +2413,14 @@
}, },
"error": { "error": {
"noBoard": { "noBoard": {
"title": "", "title": "Välkommen till Homarr",
"description": "", "description": "",
"link": "", "link": "",
"notice": "" "notice": ""
}, },
"notFound": { "notFound": {
"title": "", "title": "",
"description": "", "description": "Tavlan som angavs hittades inte eller så har du inte tillgång till den.",
"link": "", "link": "",
"notice": "" "notice": ""
}, },
@@ -2423,7 +2433,7 @@
}, },
"user": { "user": {
"description": "", "description": "",
"link": "", "link": "Konfigurera din starttavla",
"notice": "" "notice": ""
}, },
"anonymous": { "anonymous": {
@@ -2463,7 +2473,7 @@
"items": { "items": {
"home": "Hem", "home": "Hem",
"boards": "Tavlor", "boards": "Tavlor",
"apps": "Appar", "apps": "Applikationer",
"integrations": "", "integrations": "",
"searchEngies": "", "searchEngies": "",
"medias": "", "medias": "",
@@ -2506,7 +2516,7 @@
"user": "Användare", "user": "Användare",
"invite": "Inbjudningar", "invite": "Inbjudningar",
"integration": "", "integration": "",
"app": "Appar", "app": "Applikationer",
"group": "" "group": ""
}, },
"statisticLabel": { "statisticLabel": {
@@ -2529,10 +2539,10 @@
"label": "Inställningar" "label": "Inställningar"
}, },
"setHomeBoard": { "setHomeBoard": {
"label": "", "label": "Ange som din starttavla",
"badge": { "badge": {
"label": "Hem", "label": "Hem",
"tooltip": "" "tooltip": "Den här tavlan kommer att visas som din starttavla"
} }
}, },
"setMobileHomeBoard": { "setMobileHomeBoard": {
@@ -2605,7 +2615,7 @@
"metaTitle": "" "metaTitle": ""
}, },
"create": { "create": {
"metaTitle": "Skapa användare", "metaTitle": "Addera användare",
"title": "", "title": "",
"step": { "step": {
"personalInformation": { "personalInformation": {
@@ -2639,7 +2649,7 @@
"action": { "action": {
"new": { "new": {
"title": "", "title": "",
"description": "Efter utgångsdatumet är en inbjudan inte längre giltig och mottagaren av inbjudan kan inte skapa ett konto." "description": "Efter utgångsdatumet är en inbjudan inte längre giltig och mottagaren kan inte addera ett konto."
}, },
"copy": { "copy": {
"title": "", "title": "",
@@ -2649,7 +2659,7 @@
}, },
"delete": { "delete": {
"title": "Ta bort inbjudan", "title": "Ta bort inbjudan",
"description": "Är du säker på att du vill ta bort den här inbjudan? Användare med den här länken kommer inte längre att kunna skapa ett konto med hjälp av den länken." "description": "Är du säker på att du vill ta bort denna inbjudan? Användare som fått en inbjudan kommer inte längre att kunna addera ett konto med hjälp av länken."
} }
}, },
"field": { "field": {
@@ -2657,7 +2667,7 @@
"label": "" "label": ""
}, },
"creator": { "creator": {
"label": "Skapare" "label": "Adderad av"
}, },
"expirationDate": { "expirationDate": {
"label": "Utgångsdatum" "label": "Utgångsdatum"
@@ -2740,7 +2750,7 @@
}, },
"noTranslate": { "noTranslate": {
"title": "", "title": "",
"text": "" "text": "När webbplatsens språk sannolikt inte att användaren vill läsa, kommer Google att visa en översättningslänk i sökresultaten"
}, },
"noSiteLinksSearchBox": { "noSiteLinksSearchBox": {
"title": "", "title": "",
@@ -2926,7 +2936,7 @@
"state": { "state": {
"label": "Läge", "label": "Läge",
"option": { "option": {
"created": "Skapad", "created": "Adderad",
"running": "Körs", "running": "Körs",
"paused": "Pausad", "paused": "Pausad",
"restarting": "Startar om", "restarting": "Startar om",
@@ -3012,7 +3022,7 @@
"label": "", "label": "",
"notification": { "notification": {
"success": { "success": {
"title": "", "title": "Adderades till Homarr",
"message": "" "message": ""
}, },
"error": { "error": {
@@ -3326,9 +3336,9 @@
"label": "" "label": ""
}, },
"apps": { "apps": {
"label": "Appar", "label": "Applikationer",
"new": { "new": {
"label": "" "label": "Ny"
}, },
"edit": { "edit": {
"label": "Redigera" "label": "Redigera"
@@ -3337,7 +3347,7 @@
"users": { "users": {
"label": "Användare", "label": "Användare",
"create": { "create": {
"label": "Skapa" "label": "Addera"
}, },
"general": "Allmänt", "general": "Allmänt",
"security": "Säkerhet", "security": "Säkerhet",
@@ -3407,7 +3417,7 @@
"help": "", "help": "",
"group": { "group": {
"app": { "app": {
"title": "Appar", "title": "Applikationer",
"children": { "children": {
"action": { "action": {
"open": { "open": {
@@ -3477,7 +3487,7 @@
"label": "" "label": ""
}, },
"newApp": { "newApp": {
"label": "" "label": "Addera en ny applikation"
}, },
"newIntegration": { "newIntegration": {
"label": "", "label": "",
@@ -3525,8 +3535,8 @@
}, },
"option": { "option": {
"google": { "google": {
"name": "", "name": "Google",
"description": "" "description": "Sök på webben med Google"
}, },
"bing": { "bing": {
"name": "", "name": "",
@@ -3541,8 +3551,8 @@
"description": "" "description": ""
}, },
"youTube": { "youTube": {
"name": "", "name": "YouTube",
"description": "" "description": "Sök efter videoklipp på YouTube"
} }
} }
} }

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Uygulama seç", "label": "Uygulama seç",
"notFound": "Uygulama bulunamadı" "notFound": "Uygulama bulunamadı",
} "search": "Uygulama bul",
"noResults": "Sonuç bulunamadı",
"action": "{app} uygulamasını seç",
"title": "Bu panele eklemek üzere bir uygulama seçin"
},
"create": {
"title": "Yeni uygulama oluştur",
"description": "Yeni bir uygulama oluştur ",
"action": "Uygulama oluşturmayı başlat"
},
"add": "Bir uygulama ekle"
} }
}, },
"integration": { "integration": {
@@ -1781,13 +1791,13 @@
"label": "Ters sıralama" "label": "Ters sıralama"
}, },
"showCompletedUsenet": { "showCompletedUsenet": {
"label": "Tamamlanmış olarak işaretlenen usenet girdilerini göster" "label": "Tamamlanmış olarak işaretlenmiş usenet girdilerini göster"
}, },
"showCompletedTorrent": { "showCompletedTorrent": {
"label": "Tamamlanmış olarak işaretlenen torrent girdilerini göster" "label": "Tamamlanmış olarak işaretlenmiş torrent girdilerini göster"
}, },
"showCompletedHttp": { "showCompletedHttp": {
"label": "" "label": "Tamamlanmış olarak işaretlenmiş çeşitli girişleri göster"
}, },
"activeTorrentThreshold": { "activeTorrentThreshold": {
"label": "Tamamlanan torrent'i bu eşik değerinin altına gizle (kiB/s cinsinden)" "label": "Tamamlanan torrent'i bu eşik değerinin altına gizle (kiB/s cinsinden)"

View File

@@ -611,8 +611,18 @@
"action": { "action": {
"select": { "select": {
"label": "Оберіть додаток", "label": "Оберіть додаток",
"notFound": "Додатків не знайдено" "notFound": "Додатків не знайдено",
} "search": "",
"noResults": "",
"action": "",
"title": ""
},
"create": {
"title": "",
"description": "",
"action": ""
},
"add": ""
} }
}, },
"integration": { "integration": {

Some files were not shown because too many files have changed in this diff Show More