fix(deps): update dependency typescript-eslint to ^8.48.1 (#4438)

Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com>
Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
This commit is contained in:
homarr-renovate[bot]
2025-12-08 16:52:25 +01:00
committed by GitHub
parent 020cbd72d3
commit d88c6027fe
21 changed files with 180 additions and 154 deletions

View File

@@ -12,7 +12,11 @@ import { groupCreateSchema } from "@homarr/validation/group";
export const InitGroup = () => { export const InitGroup = () => {
const t = useI18n(); const t = useI18n();
const { mutateAsync } = clientApi.group.createInitialExternalGroup.useMutation(); const { mutateAsync } = clientApi.group.createInitialExternalGroup.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/init");
},
});
const form = useZodForm(groupCreateSchema, { const form = useZodForm(groupCreateSchema, {
initialValues: { initialValues: {
name: "", name: "",
@@ -21,9 +25,6 @@ export const InitGroup = () => {
const handleSubmitAsync = async (values: z.infer<typeof groupCreateSchema>) => { const handleSubmitAsync = async (values: z.infer<typeof groupCreateSchema>) => {
await mutateAsync(values, { await mutateAsync(values, {
async onSuccess() {
await revalidatePathActionAsync("/init");
},
onError(error) { onError(error) {
if (error.data?.code === "CONFLICT") { if (error.data?.code === "CONFLICT") {
form.setErrors({ name: t("common.zod.errors.custom.groupNameTaken") }); form.setErrors({ name: t("common.zod.errors.custom.groupNameTaken") });

View File

@@ -17,7 +17,11 @@ import { settingsInitSchema } from "@homarr/validation/settings";
export const InitSettings = () => { export const InitSettings = () => {
const tSection = useScopedI18n("management.page.settings.section"); const tSection = useScopedI18n("management.page.settings.section");
const t = useI18n(); const t = useI18n();
const { mutateAsync } = clientApi.serverSettings.initSettings.useMutation(); const { mutateAsync } = clientApi.serverSettings.initSettings.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/init");
},
});
const form = useZodForm(settingsInitSchema, { initialValues: defaultServerSettings }); const form = useZodForm(settingsInitSchema, { initialValues: defaultServerSettings });
form.watch("analytics.enableGeneral", ({ value }) => { form.watch("analytics.enableGeneral", ({ value }) => {
@@ -31,11 +35,7 @@ export const InitSettings = () => {
}); });
const handleSubmitAsync = async (values: z.infer<typeof settingsInitSchema>) => { const handleSubmitAsync = async (values: z.infer<typeof settingsInitSchema>) => {
await mutateAsync(values, { await mutateAsync(values);
async onSuccess() {
await revalidatePathActionAsync("/init");
},
});
}; };
return ( return (

View File

@@ -26,19 +26,19 @@ export const InitUserForm = () => {
const handleSubmitAsync = async (values: FormType) => { const handleSubmitAsync = async (values: FormType) => {
await mutateAsync(values, { await mutateAsync(values, {
async onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
title: tUser("notification.success.title"), title: tUser("notification.success.title"),
message: tUser("notification.success.message"), message: tUser("notification.success.message"),
}); });
await signIn("credentials", { void signIn("credentials", {
name: values.username, name: values.username,
password: values.password, password: values.password,
redirect: false, redirect: false,
}).then(async () => {
await revalidatePathActionAsync("/init");
}); });
await revalidatePathActionAsync("/init");
}, },
onError: (error) => { onError: (error) => {
showErrorNotification({ showErrorNotification({

View File

@@ -84,9 +84,6 @@ export const BoardCardMenuDropdown = ({ board }: BoardCardMenuDropdownProps) =>
id: board.id, id: board.id,
name: board.name, name: board.name,
}, },
onSuccess: async () => {
await revalidatePathActionAsync("/manage/boards");
},
}); });
}, [board.id, board.name, openDuplicateModal]); }, [board.id, board.name, openDuplicateModal]);

View File

@@ -86,7 +86,11 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
}, },
}); });
const { mutateAsync: createIntegrationAsync, isPending } = clientApi.integration.create.useMutation(); const { mutateAsync: createIntegrationAsync, isPending } = clientApi.integration.create.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/integrations");
},
});
const [error, setError] = useState<null | AnyMappedTestConnectionError>(null); const [error, setError] = useState<null | AnyMappedTestConnectionError>(null);
const handleSubmitAsync = async ({ appId, appHref, hasApp, ...values }: FormType) => { const handleSubmitAsync = async ({ appId, appHref, hasApp, ...values }: FormType) => {
@@ -116,7 +120,7 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
app, app,
}, },
{ {
async onSuccess(data) { onSuccess(data) {
// We do it this way as we are unable to send a typesafe error through onError // We do it this way as we are unable to send a typesafe error through onError
if (data?.error) { if (data?.error) {
setError(data.error); setError(data.error);
@@ -132,7 +136,7 @@ export const NewIntegrationForm = ({ searchParams }: NewIntegrationFormProps) =>
message: t("integration.page.create.notification.success.message"), message: t("integration.page.create.notification.success.message"),
}); });
await revalidatePathActionAsync("/manage/integrations").then(() => router.push("/manage/integrations")); router.push("/manage/integrations");
}, },
onError: () => { onError: () => {
showErrorNotification({ showErrorNotification({

View File

@@ -15,7 +15,11 @@ interface RemoveCertificateProps {
export const RemoveCertificate = ({ fileName }: RemoveCertificateProps) => { export const RemoveCertificate = ({ fileName }: RemoveCertificateProps) => {
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();
const { mutateAsync } = clientApi.certificates.removeCertificate.useMutation(); const { mutateAsync } = clientApi.certificates.removeCertificate.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/tools/certificates");
},
});
const t = useI18n(); const t = useI18n();
const handleClick = () => { const handleClick = () => {
@@ -27,12 +31,11 @@ export const RemoveCertificate = ({ fileName }: RemoveCertificateProps) => {
await mutateAsync( await mutateAsync(
{ fileName }, { fileName },
{ {
async onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
title: t("certificate.action.remove.notification.success.title"), title: t("certificate.action.remove.notification.success.title"),
message: t("certificate.action.remove.notification.success.message"), message: t("certificate.action.remove.notification.success.message"),
}); });
await revalidatePathActionAsync("/manage/tools/certificates");
}, },
onError() { onError() {
showErrorNotification({ showErrorNotification({

View File

@@ -15,7 +15,11 @@ interface RemoveHostnameActionIconProps {
} }
export const RemoveHostnameActionIcon = (input: RemoveHostnameActionIconProps) => { export const RemoveHostnameActionIcon = (input: RemoveHostnameActionIconProps) => {
const { mutateAsync } = clientApi.certificates.removeTrustedHostname.useMutation(); const { mutateAsync } = clientApi.certificates.removeTrustedHostname.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/tools/certificates/hostnames");
},
});
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();
const t = useI18n(); const t = useI18n();
@@ -26,8 +30,7 @@ export const RemoveHostnameActionIcon = (input: RemoveHostnameActionIconProps) =
// eslint-disable-next-line no-restricted-syntax // eslint-disable-next-line no-restricted-syntax
async onConfirm() { async onConfirm() {
await mutateAsync(input, { await mutateAsync(input, {
async onSuccess() { onSuccess() {
await revalidatePathActionAsync("/manage/tools/certificates/hostnames");
showSuccessNotification({ showSuccessNotification({
title: t("certificate.action.removeHostname.notification.success.title"), title: t("certificate.action.removeHostname.notification.success.title"),
message: t("certificate.action.removeHostname.notification.success.message"), message: t("certificate.action.removeHostname.notification.success.message"),

View File

@@ -206,15 +206,16 @@ const ContainerActionBarButton = (props: ContainerActionBarButtonProps) => {
const t = useScopedI18n("docker.action"); const t = useScopedI18n("docker.action");
const utils = clientApi.useUtils(); const utils = clientApi.useUtils();
const { mutateAsync, isPending } = clientApi.docker[`${props.action}All`].useMutation(); const { mutateAsync, isPending } = clientApi.docker[`${props.action}All`].useMutation({
async onSettled() {
await utils.docker.getContainers.invalidate();
},
});
const handleClickAsync = async () => { const handleClickAsync = async () => {
await mutateAsync( await mutateAsync(
{ ids: props.selectedIds }, { ids: props.selectedIds },
{ {
async onSettled() {
await utils.docker.getContainers.invalidate();
},
onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
title: t(`${props.action}.notification.success.title`), title: t(`${props.action}.notification.success.title`),

View File

@@ -18,7 +18,12 @@ interface UserProfileAvatarForm {
} }
export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => { export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
const { mutate } = clientApi.user.setProfileImage.useMutation(); const { mutate } = clientApi.user.setProfileImage.useMutation({
async onSuccess() {
// Revalidate all as the avatar is used in multiple places
await revalidatePathActionAsync("/");
},
});
const [opened, { toggle }] = useDisclosure(false); const [opened, { toggle }] = useDisclosure(false);
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();
const t = useI18n(); const t = useI18n();
@@ -38,9 +43,7 @@ export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
image: base64Url, image: base64Url,
}, },
{ {
async onSuccess() { onSuccess() {
// Revalidate all as the avatar is used in multiple places
await revalidatePathActionAsync("/");
showSuccessNotification({ showSuccessNotification({
message: tManageAvatar("changeImage.notification.success.message"), message: tManageAvatar("changeImage.notification.success.message"),
}); });
@@ -74,9 +77,7 @@ export const UserProfileAvatarForm = ({ user }: UserProfileAvatarForm) => {
image: null, image: null,
}, },
{ {
async onSuccess() { onSuccess() {
// Revalidate all as the avatar is used in multiple places
await revalidatePathActionAsync("/");
showSuccessNotification({ showSuccessNotification({
message: tManageAvatar("removeImage.notification.success.message"), message: tManageAvatar("removeImage.notification.success.message"),
}); });

View File

@@ -25,7 +25,11 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
const [innerOwnerId, setInnerOwnerId] = useState(group.ownerId); const [innerOwnerId, setInnerOwnerId] = useState(group.ownerId);
const { openModal } = useModalAction(UserSelectModal); const { openModal } = useModalAction(UserSelectModal);
const { openConfirmModal } = useConfirmModal(); const { openConfirmModal } = useConfirmModal();
const { mutateAsync } = clientApi.group.transferOwnership.useMutation(); const { mutateAsync } = clientApi.group.transferOwnership.useMutation({
async onSuccess() {
await revalidatePathActionAsync(`/manage/users/groups/${group.id}`);
},
});
const handleTransfer = useCallback(() => { const handleTransfer = useCallback(() => {
openModal( openModal(
@@ -47,7 +51,7 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
userId: id, userId: id,
}, },
{ {
async onSuccess() { onSuccess() {
setInnerOwnerId(id); setInnerOwnerId(id);
showSuccessNotification({ showSuccessNotification({
title: tRoot("common.notification.transfer.success"), title: tRoot("common.notification.transfer.success"),
@@ -56,7 +60,6 @@ export const TransferGroupOwnership = ({ group }: TransferGroupOwnershipProps) =
user: name, user: name,
}), }),
}); });
await revalidatePathActionAsync(`/manage/users/groups/${group.id}`);
}, },
onError() { onError() {
showErrorNotification({ showErrorNotification({

View File

@@ -56,16 +56,19 @@ export const GroupsTable = ({ groups, initialGroupIds, hasFilter }: GroupsTableP
() => initialGroupIds.some((groupId, index) => groupIds.indexOf(groupId) !== index), () => initialGroupIds.some((groupId, index) => groupIds.indexOf(groupId) !== index),
[groupIds, initialGroupIds], [groupIds, initialGroupIds],
); );
const { mutateAsync, isPending } = clientApi.group.savePositions.useMutation(); const { mutateAsync, isPending } = clientApi.group.savePositions.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/users/groups");
},
});
const handleSavePositionsAsync = async () => { const handleSavePositionsAsync = async () => {
await mutateAsync( await mutateAsync(
{ positions: groupIds }, { positions: groupIds },
{ {
async onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
message: t("group.action.changePosition.notification.success.message"), message: t("group.action.changePosition.notification.success.message"),
}); });
await revalidatePathActionAsync("/manage/users/groups");
}, },
onError() { onError() {
showSuccessNotification({ showSuccessNotification({

View File

@@ -16,7 +16,19 @@ interface UploadMediaProps {
export const UploadMedia = ({ children, onSettled, onSuccess, multiple = false }: UploadMediaProps) => { export const UploadMedia = ({ children, onSettled, onSuccess, multiple = false }: UploadMediaProps) => {
const t = useI18n(); const t = useI18n();
const { mutateAsync, isPending } = clientApi.media.uploadMedia.useMutation(); const { mutateAsync, isPending } = clientApi.media.uploadMedia.useMutation({
async onSuccess(mediaIds) {
await onSuccess?.(
mediaIds.map((id) => ({
id,
url: `/api/user-medias/${id}`,
})),
);
},
async onSettled() {
await onSettled?.();
},
});
const handleFileUploadAsync = async (files: File[] | File | null) => { const handleFileUploadAsync = async (files: File[] | File | null) => {
if (!files || (Array.isArray(files) && files.length === 0)) return; if (!files || (Array.isArray(files) && files.length === 0)) return;
@@ -24,25 +36,16 @@ export const UploadMedia = ({ children, onSettled, onSuccess, multiple = false }
const formData = new FormData(); const formData = new FormData();
filesArray.forEach((file) => formData.append("files", file)); filesArray.forEach((file) => formData.append("files", file));
await mutateAsync(formData, { await mutateAsync(formData, {
async onSuccess(mediaIds) { onSuccess() {
showSuccessNotification({ showSuccessNotification({
message: t("media.action.upload.notification.success.message"), message: t("media.action.upload.notification.success.message"),
}); });
await onSuccess?.(
mediaIds.map((id) => ({
id,
url: `/api/user-medias/${id}`,
})),
);
}, },
onError() { onError() {
showErrorNotification({ showErrorNotification({
message: t("media.action.upload.notification.error.message"), message: t("media.action.upload.notification.error.message"),
}); });
}, },
async onSettled() {
await onSettled?.();
},
}); });
}; };

View File

@@ -2,7 +2,6 @@ import type { z } from "zod/v4";
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import type { MaybePromise } from "@homarr/common/types";
import { AppForm } from "@homarr/forms-collection"; import { AppForm } from "@homarr/forms-collection";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications";
@@ -10,7 +9,7 @@ import { useI18n, useScopedI18n } from "@homarr/translation/client";
import type { appManageSchema } from "@homarr/validation/app"; import type { appManageSchema } from "@homarr/validation/app";
interface QuickAddAppModalProps { interface QuickAddAppModalProps {
onClose: (createdApp: Omit<RouterOutputs["app"]["create"], "appId">) => MaybePromise<void>; onClose: (createdApp: Omit<RouterOutputs["app"]["create"], "appId">) => void;
} }
export const QuickAddAppModal = createModal<QuickAddAppModalProps>(({ actions, innerProps }) => { export const QuickAddAppModal = createModal<QuickAddAppModalProps>(({ actions, innerProps }) => {
@@ -28,13 +27,13 @@ export const QuickAddAppModal = createModal<QuickAddAppModalProps>(({ actions, i
const handleSubmit = (values: z.infer<typeof appManageSchema>) => { const handleSubmit = (values: z.infer<typeof appManageSchema>) => {
mutate(values, { mutate(values, {
async onSuccess(app) { onSuccess(app) {
showSuccessNotification({ showSuccessNotification({
title: tScoped("success.title"), title: tScoped("success.title"),
message: tScoped("success.message"), message: tScoped("success.message"),
}); });
await innerProps.onClose(app); innerProps.onClose(app);
actions.closeModal(); actions.closeModal();
}, },
}); });

View File

@@ -1,7 +1,7 @@
import { Button, Group, Stack, Text, TextInput } from "@mantine/core"; import { Button, Group, Stack, Text, TextInput } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import type { MaybePromise } from "@homarr/common/types"; import { revalidatePathActionAsync } from "@homarr/common/client";
import { useZodForm } from "@homarr/form"; import { useZodForm } from "@homarr/form";
import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
@@ -15,7 +15,6 @@ interface InnerProps {
id: string; id: string;
name: string; name: string;
}; };
onSuccess: () => MaybePromise<void>;
} }
export const DuplicateBoardModal = createModal<InnerProps>(({ actions, innerProps }) => { export const DuplicateBoardModal = createModal<InnerProps>(({ actions, innerProps }) => {
@@ -27,7 +26,11 @@ export const DuplicateBoardModal = createModal<InnerProps>(({ actions, innerProp
}, },
}); });
const boardNameStatus = useBoardNameStatus(form.values.name); const boardNameStatus = useBoardNameStatus(form.values.name);
const { mutateAsync, isPending } = clientApi.board.duplicateBoard.useMutation(); const { mutateAsync, isPending } = clientApi.board.duplicateBoard.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/boards");
},
});
return ( return (
<form <form
@@ -40,13 +43,12 @@ export const DuplicateBoardModal = createModal<InnerProps>(({ actions, innerProp
id: innerProps.board.id, id: innerProps.board.id,
}, },
{ {
async onSuccess() { onSuccess() {
actions.closeModal(); actions.closeModal();
showSuccessNotification({ showSuccessNotification({
title: t("board.action.duplicate.notification.success.title"), title: t("board.action.duplicate.notification.success.title"),
message: t("board.action.duplicate.notification.success.message"), message: t("board.action.duplicate.notification.success.message"),
}); });
await innerProps.onSuccess();
}, },
onError() { onError() {
showErrorNotification({ showErrorNotification({

View File

@@ -65,7 +65,11 @@ export const ImportBoardModal = createModal(({ actions }) => {
}, },
); );
const { mutateAsync, isPending } = clientApi.board.importOldmarrConfig.useMutation(); const { mutateAsync, isPending } = clientApi.board.importOldmarrConfig.useMutation({
async onSuccess() {
await revalidatePathActionAsync("/manage/boards");
},
});
const boardNameStatus = useBoardNameStatus(form.values.configuration.name); const boardNameStatus = useBoardNameStatus(form.values.configuration.name);
const handleSubmitAsync = async (values: { file: File; configuration: OldmarrImportConfiguration }) => { const handleSubmitAsync = async (values: { file: File; configuration: OldmarrImportConfiguration }) => {
@@ -74,9 +78,8 @@ export const ImportBoardModal = createModal(({ actions }) => {
formData.set("configuration", JSON.stringify(values.configuration)); formData.set("configuration", JSON.stringify(values.configuration));
await mutateAsync(formData, { await mutateAsync(formData, {
async onSuccess() { onSuccess() {
actions.closeModal(); actions.closeModal();
await revalidatePathActionAsync("/manage/boards");
showSuccessNotification({ showSuccessNotification({
title: tOldImport("notification.success.title"), title: tOldImport("notification.success.title"),
message: tOldImport("notification.success.message"), message: tOldImport("notification.success.message"),

View File

@@ -27,7 +27,11 @@ export const AddCertificateModal = createModal<InnerProps>(({ actions, innerProp
}, },
}, },
); );
const { mutateAsync } = clientApi.certificates.addCertificate.useMutation(); const { mutateAsync } = clientApi.certificates.addCertificate.useMutation({
async onSuccess() {
await innerProps.onSuccess?.();
},
});
return ( return (
<form <form
@@ -35,12 +39,11 @@ export const AddCertificateModal = createModal<InnerProps>(({ actions, innerProp
const formData = new FormData(); const formData = new FormData();
formData.set("file", values.file); formData.set("file", values.file);
await mutateAsync(formData, { await mutateAsync(formData, {
async onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
title: t("certificate.action.create.notification.success.title"), title: t("certificate.action.create.notification.success.title"),
message: t("certificate.action.create.notification.success.message"), message: t("certificate.action.create.notification.success.message"),
}); });
await innerProps.onSuccess?.();
actions.closeModal(); actions.closeModal();
}, },
onError() { onError() {

View File

@@ -29,10 +29,10 @@ export const ImportTokenModal = createModal<InnerProps>(({ actions, innerProps }
mutate( mutate(
{ checksum: innerProps.checksum, token: values.token }, { checksum: innerProps.checksum, token: values.token },
{ {
async onSuccess(isValid) { onSuccess(isValid) {
if (isValid) { if (isValid) {
actions.closeModal(); actions.closeModal();
await innerProps.onSuccessAsync(values.token); void innerProps.onSuccessAsync(values.token);
} else { } else {
showErrorNotification({ showErrorNotification({
title: tTokenModal("notification.error.title"), title: tTokenModal("notification.error.title"),

View File

@@ -69,10 +69,10 @@ export const WidgetAppInput = ({ property, kind }: CommonWidgetInputProps<"app">
variant="default" variant="default"
onClick={() => onClick={() =>
openModal({ openModal({
// eslint-disable-next-line no-restricted-syntax onClose(createdAppId) {
async onClose(createdAppId) { void refetch().then(() => {
await refetch(); form.setFieldValue(`options.${property}`, createdAppId);
form.setFieldValue(`options.${property}`, createdAppId); });
}, },
}) })
} }

View File

@@ -111,9 +111,13 @@ const createColumns = (
header: t("action.title"), header: t("action.title"),
Cell({ row }) { Cell({ row }) {
const utils = clientApi.useUtils(); const utils = clientApi.useUtils();
const { mutateAsync: startContainer } = clientApi.docker.startAll.useMutation(); // eslint-disable-next-line no-restricted-syntax
const { mutateAsync: stopContainer } = clientApi.docker.stopAll.useMutation(); const onSettled = async () => {
const { mutateAsync: restartContainer } = clientApi.docker.restartAll.useMutation(); await utils.docker.getContainers.invalidate();
};
const { mutateAsync: startContainer } = clientApi.docker.startAll.useMutation({ onSettled });
const { mutateAsync: stopContainer } = clientApi.docker.stopAll.useMutation({ onSettled });
const { mutateAsync: restartContainer } = clientApi.docker.restartAll.useMutation({ onSettled });
const handleActionAsync = async (action: "start" | "stop" | "restart") => { const handleActionAsync = async (action: "start" | "stop" | "restart") => {
const mutation = action === "start" ? startContainer : action === "stop" ? stopContainer : restartContainer; const mutation = action === "start" ? startContainer : action === "stop" ? stopContainer : restartContainer;
@@ -121,9 +125,6 @@ const createColumns = (
await mutation( await mutation(
{ ids: [row.original.id] }, { ids: [row.original.id] },
{ {
async onSettled() {
await utils.docker.getContainers.invalidate();
},
onSuccess() { onSuccess() {
showSuccessNotification({ showSuccessNotification({
title: t(`action.${action}.notification.success.title`), title: t(`action.${action}.notification.success.title`),

143
pnpm-lock.yaml generated
View File

@@ -2421,7 +2421,7 @@ importers:
version: 2.6.1(eslint@9.39.1)(turbo@2.6.1) version: 2.6.1(eslint@9.39.1)(turbo@2.6.1)
eslint-plugin-import: eslint-plugin-import:
specifier: ^2.32.0 specifier: ^2.32.0
version: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1) version: 2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)
eslint-plugin-jsx-a11y: eslint-plugin-jsx-a11y:
specifier: ^6.10.2 specifier: ^6.10.2
version: 6.10.2(eslint@9.39.1) version: 6.10.2(eslint@9.39.1)
@@ -2432,8 +2432,8 @@ importers:
specifier: ^6.1.1 specifier: ^6.1.1
version: 6.1.1(eslint@9.39.1) version: 6.1.1(eslint@9.39.1)
typescript-eslint: typescript-eslint:
specifier: ^8.46.2 specifier: ^8.48.1
version: 8.46.2(eslint@9.39.1)(typescript@5.9.3) version: 8.48.1(eslint@9.39.1)(typescript@5.9.3)
devDependencies: devDependencies:
'@homarr/prettier-config': '@homarr/prettier-config':
specifier: workspace:^0.1.0 specifier: workspace:^0.1.0
@@ -5061,63 +5061,63 @@ packages:
'@types/xml2js@0.4.14': '@types/xml2js@0.4.14':
resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==}
'@typescript-eslint/eslint-plugin@8.46.2': '@typescript-eslint/eslint-plugin@8.48.1':
resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==} resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
'@typescript-eslint/parser': ^8.46.2 '@typescript-eslint/parser': ^8.48.1
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.46.2': '@typescript-eslint/parser@8.48.1':
resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.46.2': '@typescript-eslint/project-service@8.48.1':
resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.46.2': '@typescript-eslint/scope-manager@8.48.1':
resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.46.2': '@typescript-eslint/tsconfig-utils@8.48.1':
resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.46.2': '@typescript-eslint/type-utils@8.48.1':
resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.46.2': '@typescript-eslint/types@8.48.1':
resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.46.2': '@typescript-eslint/typescript-estree@8.48.1':
resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.46.2': '@typescript-eslint/utils@8.48.1':
resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0' typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.46.2': '@typescript-eslint/visitor-keys@8.48.1':
resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@umami/node@0.4.0': '@umami/node@0.4.0':
@@ -10565,8 +10565,8 @@ packages:
types-ramda@0.30.1: types-ramda@0.30.1:
resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==} resolution: {integrity: sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA==}
typescript-eslint@8.46.2: typescript-eslint@8.48.1:
resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==} resolution: {integrity: sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: ^8.57.0 || ^9.0.0 eslint: ^8.57.0 || ^9.0.0
@@ -14090,14 +14090,14 @@ snapshots:
dependencies: dependencies:
'@types/node': 24.10.1 '@types/node': 24.10.1
'@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)': '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)':
dependencies: dependencies:
'@eslint-community/regexpp': 4.12.1 '@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/type-utils': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/utils': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.46.2 '@typescript-eslint/visitor-keys': 8.48.1
eslint: 9.39.1 eslint: 9.39.1
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 7.0.4 ignore: 7.0.4
@@ -14107,41 +14107,41 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3)': '@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
'@typescript-eslint/visitor-keys': 8.46.2 '@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3 debug: 4.4.3
eslint: 9.39.1 eslint: 9.39.1
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
debug: 4.4.3 debug: 4.4.3
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/scope-manager@8.46.2': '@typescript-eslint/scope-manager@8.48.1':
dependencies: dependencies:
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
'@typescript-eslint/visitor-keys': 8.46.2 '@typescript-eslint/visitor-keys': 8.48.1
'@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
dependencies: dependencies:
typescript: 5.9.3 typescript: 5.9.3
'@typescript-eslint/type-utils@8.46.2(eslint@9.39.1)(typescript@5.9.3)': '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
'@typescript-eslint/utils': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
debug: 4.4.3 debug: 4.4.3
eslint: 9.39.1 eslint: 9.39.1
ts-api-utils: 2.1.0(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -14149,38 +14149,37 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/types@8.46.2': {} '@typescript-eslint/types@8.48.1': {}
'@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
dependencies: dependencies:
'@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
'@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
'@typescript-eslint/visitor-keys': 8.46.2 '@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3 debug: 4.4.3
fast-glob: 3.3.2
is-glob: 4.0.3
minimatch: 9.0.5 minimatch: 9.0.5
semver: 7.7.3 semver: 7.7.3
tinyglobby: 0.2.15
ts-api-utils: 2.1.0(typescript@5.9.3) ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/utils@8.46.2(eslint@9.39.1)(typescript@5.9.3)': '@typescript-eslint/utils@8.48.1(eslint@9.39.1)(typescript@5.9.3)':
dependencies: dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1)
'@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/scope-manager': 8.48.1
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
eslint: 9.39.1 eslint: 9.39.1
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@typescript-eslint/visitor-keys@8.46.2': '@typescript-eslint/visitor-keys@8.48.1':
dependencies: dependencies:
'@typescript-eslint/types': 8.46.2 '@typescript-eslint/types': 8.48.1
eslint-visitor-keys: 4.2.1 eslint-visitor-keys: 4.2.1
'@umami/node@0.4.0': {} '@umami/node@0.4.0': {}
@@ -15988,17 +15987,17 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1): eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1 eslint: 9.39.1
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1): eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.9 array-includes: 3.1.9
@@ -16009,7 +16008,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 9.39.1 eslint: 9.39.1
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1) eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@@ -16021,7 +16020,7 @@ snapshots:
string.prototype.trimend: 1.0.9 string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0 tsconfig-paths: 3.15.0
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
transitivePeerDependencies: transitivePeerDependencies:
- eslint-import-resolver-typescript - eslint-import-resolver-typescript
- eslint-import-resolver-webpack - eslint-import-resolver-webpack
@@ -20508,12 +20507,12 @@ snapshots:
dependencies: dependencies:
ts-toolbelt: 9.6.0 ts-toolbelt: 9.6.0
typescript-eslint@8.46.2(eslint@9.39.1)(typescript@5.9.3): typescript-eslint@8.48.1(eslint@9.39.1)(typescript@5.9.3):
dependencies: dependencies:
'@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/parser': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/parser': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
'@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
'@typescript-eslint/utils': 8.46.2(eslint@9.39.1)(typescript@5.9.3) '@typescript-eslint/utils': 8.48.1(eslint@9.39.1)(typescript@5.9.3)
eslint: 9.39.1 eslint: 9.39.1
typescript: 5.9.3 typescript: 5.9.3
transitivePeerDependencies: transitivePeerDependencies:

View File

@@ -24,7 +24,7 @@
"eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^6.1.1", "eslint-plugin-react-hooks": "^6.1.1",
"typescript-eslint": "^8.46.2" "typescript-eslint": "^8.48.1"
}, },
"devDependencies": { "devDependencies": {
"@homarr/prettier-config": "workspace:^0.1.0", "@homarr/prettier-config": "workspace:^0.1.0",