fix: nextjs is slow dev server (#364)

* fix: nextjs slow compile time

* fix: change optimized package imports and transpile packages

* fix: format issue
This commit is contained in:
Meier Lukas
2024-04-25 22:06:15 +02:00
committed by GitHub
parent 04a313186f
commit b78d32b81c
112 changed files with 345 additions and 394 deletions

View File

@@ -6,17 +6,6 @@ import "@homarr/auth/env.mjs";
const config = { const config = {
output: "standalone", output: "standalone",
reactStrictMode: true, reactStrictMode: true,
/** Enables hot reloading for local packages without a build step */
transpilePackages: [
"@homarr/api",
"@homarr/auth",
"@homarr/db",
"@homarr/ui",
"@homarr/validation",
"@homarr/form",
"@homarr/notifications",
"@homarr/spotlight",
],
/** We already do linting and typechecking as separate tasks in CI */ /** We already do linting and typechecking as separate tasks in CI */
eslint: { ignoreDuringBuilds: true }, eslint: { ignoreDuringBuilds: true },
typescript: { ignoreBuildErrors: true }, typescript: { ignoreBuildErrors: true },
@@ -24,12 +13,16 @@ const config = {
optimizePackageImports: [ optimizePackageImports: [
"@mantine/core", "@mantine/core",
"@mantine/hooks", "@mantine/hooks",
"@mantine/dates", "@tabler/icons-react",
"@mantine/notifications",
"@mantine/form",
"@mantine/spotlight",
], ],
}, },
transpilePackages: [
"@homarr/ui",
"@homarr/notifications",
"@homarr/modals",
"@homarr/spotlight",
"@homarr/widgets",
],
images: { images: {
domains: ["cdn.jsdelivr.net"], domains: ["cdn.jsdelivr.net"],
}, },

View File

@@ -1,6 +1,8 @@
"use client"; "use client";
import { useCallback } from "react"; import { useCallback } from "react";
import { ActionIcon } from "@mantine/core";
import { IconTrash } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
@@ -10,7 +12,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { ActionIcon, IconTrash } from "@homarr/ui";
import { revalidatePathAction } from "../../../revalidatePathAction"; import { revalidatePathAction } from "../../../revalidatePathAction";

View File

@@ -1,11 +1,11 @@
"use client"; "use client";
import Link from "next/link"; import Link from "next/link";
import { Button, Group, Stack, Textarea, TextInput } from "@mantine/core";
import { useForm, zodResolver } from "@homarr/form"; import { useForm, zodResolver } from "@homarr/form";
import type { TranslationFunction } from "@homarr/translation"; import type { TranslationFunction } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Group, Stack, Textarea, TextInput } from "@homarr/ui";
import type { z } from "@homarr/validation"; import type { z } from "@homarr/validation";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";

View File

@@ -1,6 +1,7 @@
import { Container, Stack, Title } from "@mantine/core";
import { api } from "@homarr/api/server"; import { api } from "@homarr/api/server";
import { getI18n } from "@homarr/translation/server"; import { getI18n } from "@homarr/translation/server";
import { Container, Stack, Title } from "@homarr/ui";
import { AppEditForm } from "./_app-edit-form"; import { AppEditForm } from "./_app-edit-form";

View File

@@ -1,4 +1,4 @@
import { Container, Stack, Title } from "@homarr/ui"; import { Container, Stack, Title } from "@mantine/core";
import { AppNewForm } from "./_app-new-form"; import { AppNewForm } from "./_app-new-form";

View File

@@ -1,8 +1,4 @@
import Link from "next/link"; import Link from "next/link";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { getI18n } from "@homarr/translation/server";
import { import {
ActionIcon, ActionIcon,
ActionIconGroup, ActionIconGroup,
@@ -12,12 +8,15 @@ import {
Card, Card,
Container, Container,
Group, Group,
IconApps,
IconPencil,
Stack, Stack,
Text, Text,
Title, Title,
} from "@homarr/ui"; } from "@mantine/core";
import { IconApps, IconPencil } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { getI18n } from "@homarr/translation/server";
import { AppDeleteButton } from "./_app-delete-button"; import { AppDeleteButton } from "./_app-delete-button";

View File

@@ -1,7 +1,8 @@
import { Avatar } from "@mantine/core";
import type { MantineSize } from "@mantine/core";
import { getIconUrl } from "@homarr/definitions"; import { getIconUrl } from "@homarr/definitions";
import type { IntegrationKind } from "@homarr/definitions"; import type { IntegrationKind } from "@homarr/definitions";
import { Avatar } from "@homarr/ui";
import type { MantineSize } from "@homarr/ui";
interface IntegrationAvatarProps { interface IntegrationAvatarProps {
size: MantineSize; size: MantineSize;

View File

@@ -1,6 +1,8 @@
"use client"; "use client";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { ActionIcon } from "@mantine/core";
import { IconTrash } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { useConfirmModal } from "@homarr/modals"; import { useConfirmModal } from "@homarr/modals";
@@ -9,7 +11,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { ActionIcon, IconTrash } from "@homarr/ui";
import { revalidatePathAction } from "../../../revalidatePathAction"; import { revalidatePathAction } from "../../../revalidatePathAction";

View File

@@ -2,13 +2,6 @@
import { useState } from "react"; import { useState } from "react";
import { useParams } from "next/navigation"; import { useParams } from "next/navigation";
import { useDisclosure } from "@mantine/hooks";
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
import type { RouterOutputs } from "@homarr/api";
import { integrationSecretKindObject } from "@homarr/definitions";
import { useI18n } from "@homarr/translation/client";
import { import {
ActionIcon, ActionIcon,
Avatar, Avatar,
@@ -16,12 +9,18 @@ import {
Card, Card,
Collapse, Collapse,
Group, Group,
IconEye,
IconEyeOff,
Kbd, Kbd,
Stack, Stack,
Text, Text,
} from "@homarr/ui"; } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { IconEye, IconEyeOff } from "@tabler/icons-react";
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
import type { RouterOutputs } from "@homarr/api";
import { integrationSecretKindObject } from "@homarr/definitions";
import { useI18n } from "@homarr/translation/client";
import { integrationSecretIcons } from "./_integration-secret-icons"; import { integrationSecretIcons } from "./_integration-secret-icons";

View File

@@ -1,6 +1,7 @@
import { IconKey, IconPassword, IconUser } from "@tabler/icons-react";
import type { IntegrationSecretKind } from "@homarr/definitions"; import type { IntegrationSecretKind } from "@homarr/definitions";
import type { TablerIcon } from "@homarr/ui"; import type { TablerIcon } from "@homarr/ui";
import { IconKey, IconPassword, IconUser } from "@homarr/ui";
export const integrationSecretIcons = { export const integrationSecretIcons = {
username: IconUser, username: IconUser,

View File

@@ -1,11 +1,11 @@
"use client"; "use client";
import type { ChangeEventHandler, FocusEventHandler } from "react"; import type { ChangeEventHandler, FocusEventHandler } from "react";
import { PasswordInput, TextInput } from "@mantine/core";
import { integrationSecretKindObject } from "@homarr/definitions"; import { integrationSecretKindObject } from "@homarr/definitions";
import type { IntegrationSecretKind } from "@homarr/definitions"; import type { IntegrationSecretKind } from "@homarr/definitions";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { PasswordInput, TextInput } from "@homarr/ui";
import { integrationSecretIcons } from "./_integration-secret-icons"; import { integrationSecretIcons } from "./_integration-secret-icons";

View File

@@ -1,6 +1,8 @@
"use client"; "use client";
import { useRef, useState } from "react"; import { useRef, useState } from "react";
import { Alert, Anchor, Group, Loader } from "@mantine/core";
import { IconCheck, IconInfoCircle, IconX } from "@tabler/icons-react";
import type { RouterInputs } from "@homarr/api"; import type { RouterInputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
@@ -9,15 +11,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useI18n, useScopedI18n } from "@homarr/translation/client"; import { useI18n, useScopedI18n } from "@homarr/translation/client";
import {
Alert,
Anchor,
Group,
IconCheck,
IconInfoCircle,
IconX,
Loader,
} from "@homarr/ui";
interface UseTestConnectionDirtyProps { interface UseTestConnectionDirtyProps {
defaultDirty: boolean; defaultDirty: boolean;

View File

@@ -2,6 +2,7 @@
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { Button, Fieldset, Group, Stack, TextInput } from "@mantine/core";
import type { RouterOutputs } from "@homarr/api"; import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
@@ -16,7 +17,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Fieldset, Group, Stack, TextInput } from "@homarr/ui";
import type { z } from "@homarr/validation"; import type { z } from "@homarr/validation";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";

View File

@@ -1,7 +1,8 @@
import { Container, Group, Stack, Title } from "@mantine/core";
import { api } from "@homarr/api/server"; import { api } from "@homarr/api/server";
import { getIntegrationName } from "@homarr/definitions"; import { getIntegrationName } from "@homarr/definitions";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Container, Group, Stack, Title } from "@homarr/ui";
import { IntegrationAvatar } from "../../_integration-avatar"; import { IntegrationAvatar } from "../../_integration-avatar";
import { EditIntegrationForm } from "./_integration-edit-form"; import { EditIntegrationForm } from "./_integration-edit-form";

View File

@@ -2,18 +2,11 @@
import { useMemo, useState } from "react"; import { useMemo, useState } from "react";
import Link from "next/link"; import Link from "next/link";
import { Group, Menu, ScrollArea, Stack, Text, TextInput } from "@mantine/core";
import { IconSearch } from "@tabler/icons-react";
import { getIntegrationName, integrationKinds } from "@homarr/definitions"; import { getIntegrationName, integrationKinds } from "@homarr/definitions";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import {
Group,
IconSearch,
Menu,
ScrollArea,
Stack,
Text,
TextInput,
} from "@homarr/ui";
import { IntegrationAvatar } from "../_integration-avatar"; import { IntegrationAvatar } from "../_integration-avatar";

View File

@@ -3,6 +3,14 @@
import { useCallback } from "react"; import { useCallback } from "react";
import Link from "next/link"; import Link from "next/link";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import {
Button,
Fieldset,
Group,
SegmentedControl,
Stack,
TextInput,
} from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import type { import type {
@@ -17,14 +25,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useI18n, useScopedI18n } from "@homarr/translation/client"; import { useI18n, useScopedI18n } from "@homarr/translation/client";
import {
Button,
Fieldset,
Group,
SegmentedControl,
Stack,
TextInput,
} from "@homarr/ui";
import type { z } from "@homarr/validation"; import type { z } from "@homarr/validation";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";

View File

@@ -1,9 +1,9 @@
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { Container, Group, Stack, Title } from "@mantine/core";
import type { IntegrationKind } from "@homarr/definitions"; import type { IntegrationKind } from "@homarr/definitions";
import { getIntegrationName, integrationKinds } from "@homarr/definitions"; import { getIntegrationName, integrationKinds } from "@homarr/definitions";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Container, Group, Stack, Title } from "@homarr/ui";
import type { validation } from "@homarr/validation"; import type { validation } from "@homarr/validation";
import { z } from "@homarr/validation"; import { z } from "@homarr/validation";

View File

@@ -1,11 +1,4 @@
import Link from "next/link"; import Link from "next/link";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { objectEntries } from "@homarr/common";
import type { IntegrationKind } from "@homarr/definitions";
import { getIntegrationName } from "@homarr/definitions";
import { getScopedI18n } from "@homarr/translation/server";
import { import {
AccordionControl, AccordionControl,
AccordionItem, AccordionItem,
@@ -15,10 +8,7 @@ import {
Anchor, Anchor,
Button, Button,
Container, Container,
CountBadge,
Group, Group,
IconChevronDown,
IconPencil,
Menu, Menu,
MenuDropdown, MenuDropdown,
MenuTarget, MenuTarget,
@@ -31,7 +21,16 @@ import {
TableTr, TableTr,
Text, Text,
Title, Title,
} from "@homarr/ui"; } from "@mantine/core";
import { IconChevronDown, IconPencil } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { objectEntries } from "@homarr/common";
import type { IntegrationKind } from "@homarr/definitions";
import { getIntegrationName } from "@homarr/definitions";
import { getScopedI18n } from "@homarr/translation/server";
import { CountBadge } from "@homarr/ui";
import { ActiveTabAccordion } from "../../../../components/active-tab-accordion"; import { ActiveTabAccordion } from "../../../../components/active-tab-accordion";
import { IntegrationAvatar } from "./_integration-avatar"; import { IntegrationAvatar } from "./_integration-avatar";

View File

@@ -1,6 +1,5 @@
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { AppShellMain } from "@mantine/core";
import { AppShellMain } from "@homarr/ui";
import { MainHeader } from "~/components/layout/header"; import { MainHeader } from "~/components/layout/header";
import { ClientShell } from "~/components/layout/shell"; import { ClientShell } from "~/components/layout/shell";

View File

@@ -1,4 +1,4 @@
import { Stack, Title } from "@homarr/ui"; import { Stack, Title } from "@mantine/core";
export default function HomePage() { export default function HomePage() {
return ( return (

View File

@@ -2,19 +2,19 @@
import { useState } from "react"; import { useState } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { signIn } from "@homarr/auth/client";
import { useForm, zodResolver } from "@homarr/form";
import { useScopedI18n } from "@homarr/translation/client";
import { import {
Alert, Alert,
Button, Button,
IconAlertTriangle,
PasswordInput, PasswordInput,
rem, rem,
Stack, Stack,
TextInput, TextInput,
} from "@homarr/ui"; } from "@mantine/core";
import { IconAlertTriangle } from "@tabler/icons-react";
import { signIn } from "@homarr/auth/client";
import { useForm, zodResolver } from "@homarr/form";
import { useScopedI18n } from "@homarr/translation/client";
import type { z } from "@homarr/validation"; import type { z } from "@homarr/validation";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";

View File

@@ -1,5 +1,6 @@
import { Card, Center, Stack, Text, Title } from "@mantine/core";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Card, Center, Stack, Text, Title } from "@homarr/ui";
import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo"; import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo";
import { LoginForm } from "./_login-form"; import { LoginForm } from "./_login-form";

View File

@@ -1,6 +1,17 @@
"use client"; "use client";
import { useCallback } from "react"; import { useCallback } from "react";
import { Group, Menu } from "@mantine/core";
import {
IconBox,
IconBoxAlignTop,
IconChevronDown,
IconPackageImport,
IconPencil,
IconPencilOff,
IconPlus,
IconSettings,
} from "@tabler/icons-react";
import { useAtom, useAtomValue } from "jotai"; import { useAtom, useAtomValue } from "jotai";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
@@ -10,18 +21,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useI18n, useScopedI18n } from "@homarr/translation/client"; import { useI18n, useScopedI18n } from "@homarr/translation/client";
import {
Group,
IconBox,
IconBoxAlignTop,
IconChevronDown,
IconPackageImport,
IconPencil,
IconPencilOff,
IconPlus,
IconSettings,
Menu,
} from "@homarr/ui";
import { revalidatePathAction } from "~/app/revalidatePathAction"; import { revalidatePathAction } from "~/app/revalidatePathAction";
import { editModeAtom } from "~/components/board/editMode"; import { editModeAtom } from "~/components/board/editMode";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { IconLayoutBoard } from "@homarr/ui"; import { IconLayoutBoard } from "@tabler/icons-react";
import { HeaderButton } from "~/components/layout/header/button"; import { HeaderButton } from "~/components/layout/header/button";
import { useRequiredBoard } from "../../../_context"; import { useRequiredBoard } from "../../../_context";

View File

@@ -1,24 +1,11 @@
"use client"; "use client";
import { useCallback } from "react"; import { useCallback } from "react";
import type { SelectProps } from "@mantine/core";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import type { BoardPermission } from "@homarr/definitions";
import { boardPermissions } from "@homarr/definitions";
import { useForm } from "@homarr/form";
import { createModal, useModalAction } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client";
import type { SelectProps, TablerIcon } from "@homarr/ui";
import { import {
Button, Button,
Flex, Flex,
Group, Group,
IconCheck,
IconEye,
IconPencil,
IconPlus,
IconSettings,
Select, Select,
Stack, Stack,
Table, Table,
@@ -28,7 +15,23 @@ import {
TableThead, TableThead,
TableTr, TableTr,
Text, Text,
} from "@homarr/ui"; } from "@mantine/core";
import {
IconCheck,
IconEye,
IconPencil,
IconPlus,
IconSettings,
} from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import type { BoardPermission } from "@homarr/definitions";
import { boardPermissions } from "@homarr/definitions";
import { useForm } from "@homarr/form";
import { createModal, useModalAction } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client";
import type { TablerIcon } from "@homarr/ui";
import type { Board } from "../../_types"; import type { Board } from "../../_types";

View File

@@ -1,5 +1,7 @@
"use client"; "use client";
import { Button, Grid, Group, Stack, TextInput } from "@mantine/core";
import { import {
backgroundImageAttachments, backgroundImageAttachments,
backgroundImageRepeats, backgroundImageRepeats,
@@ -8,14 +10,9 @@ import {
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import type { TranslationObject } from "@homarr/translation"; import type { TranslationObject } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import type { SelectItemWithDescriptionBadge } from "@homarr/ui";
import { import {
Button, SelectItemWithDescriptionBadge,
Grid,
Group,
SelectWithDescriptionBadge, SelectWithDescriptionBadge,
Stack,
TextInput,
} from "@homarr/ui"; } from "@homarr/ui";
import type { Board } from "../../_types"; import type { Board } from "../../_types";

View File

@@ -1,9 +1,5 @@
"use client"; "use client";
import { useDisclosure } from "@mantine/hooks";
import { useForm } from "@homarr/form";
import { useI18n } from "@homarr/translation/client";
import { import {
Anchor, Anchor,
Button, Button,
@@ -18,7 +14,11 @@ import {
Stack, Stack,
Text, Text,
useMantineTheme, useMantineTheme,
} from "@homarr/ui"; } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { useForm } from "@homarr/form";
import { useI18n } from "@homarr/translation/client";
import { generateColors } from "../../_theme"; import { generateColors } from "../../_theme";
import type { Board } from "../../_types"; import type { Board } from "../../_types";

View File

@@ -2,11 +2,11 @@
import { useCallback } from "react"; import { useCallback } from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { Button, Divider, Group, Stack, Text } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { useConfirmModal, useModalAction } from "@homarr/modals"; import { useConfirmModal, useModalAction } from "@homarr/modals";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { Button, Divider, Group, Stack, Text } from "@homarr/ui";
import { BoardRenameModal } from "~/components/board/modals/board-rename-modal"; import { BoardRenameModal } from "~/components/board/modals/board-rename-modal";
import { useRequiredBoard } from "../../_context"; import { useRequiredBoard } from "../../_context";

View File

@@ -1,24 +1,24 @@
"use client"; "use client";
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import {
Button,
Grid,
Group,
Loader,
Stack,
TextInput,
Tooltip,
} from "@mantine/core";
import { import {
useDebouncedValue, useDebouncedValue,
useDocumentTitle, useDocumentTitle,
useFavicon, useFavicon,
} from "@mantine/hooks"; } from "@mantine/hooks";
import { IconAlertTriangle } from "@tabler/icons-react";
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import {
Button,
Grid,
Group,
IconAlertTriangle,
Loader,
Stack,
TextInput,
Tooltip,
} from "@homarr/ui";
import { useUpdateBoard } from "../../_client"; import { useUpdateBoard } from "../../_client";
import type { Board } from "../../_types"; import type { Board } from "../../_types";

View File

@@ -1,8 +1,9 @@
"use client"; "use client";
import { Button, Grid, Group, Input, Slider, Stack } from "@mantine/core";
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Grid, Group, Input, Slider, Stack } from "@homarr/ui";
import type { Board } from "../../_types"; import type { Board } from "../../_types";
import { useSavePartialSettingsMutation } from "./_shared"; import { useSavePartialSettingsMutation } from "./_shared";

View File

@@ -1,15 +1,14 @@
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { api } from "@homarr/api/server";
import { capitalize } from "@homarr/common";
import type { TranslationObject } from "@homarr/translation";
import { getScopedI18n } from "@homarr/translation/server";
import type { TablerIcon } from "@homarr/ui";
import { import {
AccordionControl, AccordionControl,
AccordionItem, AccordionItem,
AccordionPanel, AccordionPanel,
Container, Container,
Stack,
Text,
Title,
} from "@mantine/core";
import {
IconAlertTriangle, IconAlertTriangle,
IconBrush, IconBrush,
IconFileTypeCss, IconFileTypeCss,
@@ -17,10 +16,13 @@ import {
IconPhoto, IconPhoto,
IconSettings, IconSettings,
IconUser, IconUser,
Stack, } from "@tabler/icons-react";
Text,
Title, import { api } from "@homarr/api/server";
} from "@homarr/ui"; import { capitalize } from "@homarr/common";
import type { TranslationObject } from "@homarr/translation";
import { getScopedI18n } from "@homarr/translation/server";
import type { TablerIcon } from "@homarr/ui";
import { ActiveTabAccordion } from "../../../../../components/active-tab-accordion"; import { ActiveTabAccordion } from "../../../../../components/active-tab-accordion";
import { AccessSettingsContent } from "./_access"; import { AccessSettingsContent } from "./_access";

View File

@@ -1,10 +1,10 @@
"use client"; "use client";
import { useCallback, useRef } from "react"; import { useCallback, useRef } from "react";
import { Box, LoadingOverlay, Stack } from "@mantine/core";
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 { Box, LoadingOverlay, Stack } from "@homarr/ui";
import { BoardCategorySection } from "~/components/board/sections/category-section"; import { BoardCategorySection } from "~/components/board/sections/category-section";
import { BoardEmptySection } from "~/components/board/sections/empty-section"; import { BoardEmptySection } from "~/components/board/sections/empty-section";

View File

@@ -1,8 +1,8 @@
import type { PropsWithChildren, ReactNode } from "react"; import type { PropsWithChildren, ReactNode } from "react";
import type { Metadata } from "next"; import type { Metadata } from "next";
import { AppShellMain } from "@mantine/core";
import { capitalize } from "@homarr/common"; import { capitalize } from "@homarr/common";
import { AppShellMain } from "@homarr/ui";
import { MainHeader } from "~/components/layout/header"; import { MainHeader } from "~/components/layout/header";
import { BoardLogoWithTitle } from "~/components/layout/logo/board-logo"; import { BoardLogoWithTitle } from "~/components/layout/logo/board-logo";

View File

@@ -1,9 +1,8 @@
"use client"; "use client";
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import type { MantineColorsTuple } from "@mantine/core";
import type { MantineColorsTuple } from "@homarr/ui"; import { createTheme, darken, lighten, MantineProvider } from "@mantine/core";
import { createTheme, darken, lighten, MantineProvider } from "@homarr/ui";
import { useRequiredBoard } from "./_context"; import { useRequiredBoard } from "./_context";

View File

@@ -1,6 +1,7 @@
"use client"; "use client";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { Button, PasswordInput, Stack, TextInput } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { useForm, zodResolver } from "@homarr/form"; import { useForm, zodResolver } from "@homarr/form";
@@ -9,7 +10,6 @@ import {
showSuccessNotification, showSuccessNotification,
} from "@homarr/notifications"; } from "@homarr/notifications";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { Button, PasswordInput, Stack, TextInput } from "@homarr/ui";
import type { z } from "@homarr/validation"; import type { z } from "@homarr/validation";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";

View File

@@ -1,8 +1,8 @@
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { Card, Center, Stack, Text, Title } from "@mantine/core";
import { db } from "@homarr/db"; import { db } from "@homarr/db";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Card, Center, Stack, Text, Title } from "@homarr/ui";
import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo"; import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo";
import { InitUserForm } from "./_init-user-form"; import { InitUserForm } from "./_init-user-form";

View File

@@ -3,12 +3,13 @@ import { Inter } from "next/font/google";
import "@homarr/notifications/styles.css"; import "@homarr/notifications/styles.css";
import "@homarr/spotlight/styles.css"; import "@homarr/spotlight/styles.css";
import "@homarr/ui/styles.css"; import "@mantine/core/styles.css";
import { ColorSchemeScript, createTheme, MantineProvider } from "@mantine/core";
import { auth } from "@homarr/auth"; import { auth } from "@homarr/auth";
import { ModalProvider } from "@homarr/modals"; import { ModalProvider } from "@homarr/modals";
import { Notifications } from "@homarr/notifications"; import { Notifications } from "@homarr/notifications";
import { ColorSchemeScript, createTheme, MantineProvider } from "@homarr/ui";
import { JotaiProvider } from "./_client-providers/jotai"; import { JotaiProvider } from "./_client-providers/jotai";
import { NextInternationalProvider } from "./_client-providers/next-international"; import { NextInternationalProvider } from "./_client-providers/next-international";

View File

@@ -1,4 +1,4 @@
import { Center, Loader } from "@homarr/ui"; import { Center, Loader } from "@mantine/core";
export default function CommonLoading() { export default function CommonLoading() {
return ( return (

View File

@@ -1,5 +1,6 @@
import { Center, Stack, Text, Title } from "@mantine/core";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Center, Stack, Text, Title } from "@homarr/ui";
export default async function NotFound() { export default async function NotFound() {
const t = await getScopedI18n("management.notFound"); const t = await getScopedI18n("management.notFound");

View File

@@ -2,12 +2,13 @@
import { useCallback } from "react"; import { useCallback } from "react";
import Link from "next/link"; import Link from "next/link";
import { Menu } from "@mantine/core";
import { IconSettings, IconTrash } from "@tabler/icons-react";
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 { useConfirmModal } from "@homarr/modals"; import { useConfirmModal } from "@homarr/modals";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { IconSettings, IconTrash, Menu } from "@homarr/ui";
import { revalidatePathAction } from "~/app/revalidatePathAction"; import { revalidatePathAction } from "~/app/revalidatePathAction";

View File

@@ -1,11 +1,12 @@
"use client"; "use client";
import { useCallback } from "react"; import { useCallback } from "react";
import { Button } from "@mantine/core";
import { IconCategoryPlus } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { useModalAction } from "@homarr/modals"; import { useModalAction } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, IconCategoryPlus } from "@homarr/ui";
import { revalidatePathAction } from "~/app/revalidatePathAction"; import { revalidatePathAction } from "~/app/revalidatePathAction";
import { AddBoardModal } from "~/components/manage/boards/add-board-modal"; import { AddBoardModal } from "~/components/manage/boards/add-board-modal";

View File

@@ -1,8 +1,4 @@
import Link from "next/link"; import Link from "next/link";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { getScopedI18n } from "@homarr/translation/server";
import { import {
ActionIcon, ActionIcon,
Button, Button,
@@ -11,15 +7,17 @@ import {
Grid, Grid,
GridCol, GridCol,
Group, Group,
IconDotsVertical,
IconLock,
IconWorld,
Menu, Menu,
MenuTarget, MenuTarget,
Text, Text,
Title, Title,
Tooltip, Tooltip,
} from "@homarr/ui"; } from "@mantine/core";
import { IconDotsVertical, IconLock, IconWorld } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { api } from "@homarr/api/server";
import { getScopedI18n } from "@homarr/translation/server";
import { BoardCardMenuDropdown } from "./_components/board-card-menu-dropdown"; import { BoardCardMenuDropdown } from "./_components/board-card-menu-dropdown";
import { CreateBoardButton } from "./_components/create-board-button"; import { CreateBoardButton } from "./_components/create-board-button";

View File

@@ -1,8 +1,6 @@
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { AppShellMain } from "@mantine/core";
import { getScopedI18n } from "@homarr/translation/server";
import { import {
AppShellMain,
IconBook2, IconBook2,
IconBrandDiscord, IconBrandDiscord,
IconBrandDocker, IconBrandDocker,
@@ -17,7 +15,9 @@ import {
IconTool, IconTool,
IconUser, IconUser,
IconUsers, IconUsers,
} from "@homarr/ui"; } from "@tabler/icons-react";
import { getScopedI18n } from "@homarr/translation/server";
import { MainHeader } from "~/components/layout/header"; import { MainHeader } from "~/components/layout/header";
import type { NavigationLink } from "~/components/layout/navigation"; import type { NavigationLink } from "~/components/layout/navigation";

View File

@@ -1,5 +1,6 @@
import { Title } from "@mantine/core";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Title } from "@homarr/ui";
import { Test } from "./test"; import { Test } from "./test";

View File

@@ -2,9 +2,9 @@
import { useCallback, useState } from "react"; import { useCallback, useState } from "react";
import type { ChangeEvent } from "react"; import type { ChangeEvent } from "react";
import { Button, Stack, Text, TextInput } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { Button, Stack, Text, TextInput } from "@homarr/ui";
export const Test = () => { export const Test = () => {
const [value, setValue] = useState(""); const [value, setValue] = useState("");

View File

@@ -1,5 +1,6 @@
import { Box } from "@mantine/core";
import { getScopedI18n } from "@homarr/translation/server"; import { getScopedI18n } from "@homarr/translation/server";
import { Box } from "@homarr/ui";
import "@xterm/xterm/css/xterm.css"; import "@xterm/xterm/css/xterm.css";

View File

@@ -1,12 +1,12 @@
"use client"; "use client";
import { useEffect, useRef } from "react"; import { useEffect, useRef } from "react";
import { Box } from "@mantine/core";
import { CanvasAddon } from "@xterm/addon-canvas"; import { CanvasAddon } from "@xterm/addon-canvas";
import { FitAddon } from "@xterm/addon-fit"; import { FitAddon } from "@xterm/addon-fit";
import { Terminal } from "@xterm/xterm"; import { Terminal } from "@xterm/xterm";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { Box } from "@homarr/ui";
import classes from "./terminal.module.css"; import classes from "./terminal.module.css";

View File

@@ -2,11 +2,11 @@
import React from "react"; import React from "react";
import { useRouter } from "next/navigation"; import { useRouter } from "next/navigation";
import { Button, Divider, Group, Stack, Text } from "@mantine/core";
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 { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { Button, Divider, Group, Stack, Text } from "@homarr/ui";
interface DangerZoneAccordionProps { interface DangerZoneAccordionProps {
user: NonNullable<RouterOutputs["user"]["getById"]>; user: NonNullable<RouterOutputs["user"]["getById"]>;

View File

@@ -1,10 +1,11 @@
"use client"; "use client";
import { Button, Stack, TextInput } from "@mantine/core";
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 { useForm, zodResolver } from "@homarr/form"; import { useForm, zodResolver } from "@homarr/form";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { Button, Stack, TextInput } from "@homarr/ui";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";
import { revalidatePathAction } from "~/app/revalidatePathAction"; import { revalidatePathAction } from "~/app/revalidatePathAction";

View File

@@ -1,11 +1,12 @@
"use client"; "use client";
import { Button, PasswordInput, Stack, Title } from "@mantine/core";
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 { useForm, zodResolver } from "@homarr/form"; import { useForm, zodResolver } from "@homarr/form";
import { showSuccessNotification } from "@homarr/notifications"; import { showSuccessNotification } from "@homarr/notifications";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, PasswordInput, Stack, Title } from "@homarr/ui";
import { validation } from "@homarr/validation"; import { validation } from "@homarr/validation";
import { revalidatePathAction } from "~/app/revalidatePathAction"; import { revalidatePathAction } from "~/app/revalidatePathAction";

View File

@@ -1,7 +1,4 @@
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { api } from "@homarr/api/server";
import { getScopedI18n } from "@homarr/translation/server";
import { import {
Accordion, Accordion,
AccordionControl, AccordionControl,
@@ -9,14 +6,19 @@ import {
AccordionPanel, AccordionPanel,
Avatar, Avatar,
Group, Group,
Stack,
Text,
Title,
} from "@mantine/core";
import {
IconAlertTriangleFilled, IconAlertTriangleFilled,
IconSettingsFilled, IconSettingsFilled,
IconShieldLockFilled, IconShieldLockFilled,
IconUserFilled, IconUserFilled,
Stack, } from "@tabler/icons-react";
Text,
Title, import { api } from "@homarr/api/server";
} from "@homarr/ui"; import { getScopedI18n } from "@homarr/translation/server";
import { DangerZoneAccordion } from "./_components/dangerZone.accordion"; import { DangerZoneAccordion } from "./_components/dangerZone.accordion";
import { ProfileAccordion } from "./_components/profile.accordion"; import { ProfileAccordion } from "./_components/profile.accordion";

View File

@@ -2,21 +2,14 @@
import { useMemo } from "react"; import { useMemo } from "react";
import Link from "next/link"; import Link from "next/link";
import { Avatar, Button, Group, Text, ThemeIcon, Title } from "@mantine/core";
import { IconCheck } from "@tabler/icons-react";
import type { MRT_ColumnDef } from "mantine-react-table"; import type { MRT_ColumnDef } from "mantine-react-table";
import { MantineReactTable, useMantineReactTable } from "mantine-react-table"; import { MantineReactTable, useMantineReactTable } from "mantine-react-table";
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 { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import {
Avatar,
Button,
Group,
IconCheck,
Text,
ThemeIcon,
Title,
} from "@homarr/ui";
interface UserListComponentProps { interface UserListComponentProps {
initialUserList: RouterOutputs["user"]["getAll"]; initialUserList: RouterOutputs["user"]["getAll"];

View File

@@ -1,21 +1,21 @@
"use client"; "use client";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo, useState } from "react";
import { clientApi } from "@homarr/api/client";
import { useForm, zodResolver } from "@homarr/form";
import { useScopedI18n } from "@homarr/translation/client";
import { import {
Avatar, Avatar,
Card, Card,
IconUserCheck,
PasswordInput, PasswordInput,
Stack, Stack,
Stepper, Stepper,
Text, Text,
TextInput, TextInput,
Title, Title,
} from "@homarr/ui"; } from "@mantine/core";
import { IconUserCheck } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client";
import { useForm, zodResolver } from "@homarr/form";
import { useScopedI18n } from "@homarr/translation/client";
import { validation, z } from "@homarr/validation"; import { validation, z } from "@homarr/validation";
import { StepperNavigationComponent } from "./stepper-navigation.component"; import { StepperNavigationComponent } from "./stepper-navigation.component";

View File

@@ -1,15 +1,13 @@
import Link from "next/link"; import Link from "next/link";
import { Button, Card, Group } from "@mantine/core";
import { useI18n } from "@homarr/translation/client";
import { import {
Button,
Card,
Group,
IconArrowBackUp, IconArrowBackUp,
IconArrowLeft, IconArrowLeft,
IconArrowRight, IconArrowRight,
IconRotate, IconRotate,
} from "@homarr/ui"; } from "@tabler/icons-react";
import { useI18n } from "@homarr/translation/client";
interface StepperNavigationComponentProps { interface StepperNavigationComponentProps {
hasPrevious: boolean; hasPrevious: boolean;

View File

@@ -1,4 +1,4 @@
import { Center } from "@homarr/ui"; import { Center } from "@mantine/core";
export default function CommonNotFound() { export default function CommonNotFound() {
return <Center h="100vh">404</Center>; return <Center h="100vh">404</Center>;

View File

@@ -1,20 +1,18 @@
"use client"; "use client";
import { useCallback, useMemo, useState } from "react"; import { useCallback, useMemo, useState } from "react";
import { ActionIcon, Affix, Card } from "@mantine/core";
import {
IconDimensions,
IconPencil,
IconToggleLeft,
IconToggleRight,
} from "@tabler/icons-react";
import type { IntegrationKind, WidgetKind } from "@homarr/definitions"; import type { IntegrationKind, WidgetKind } from "@homarr/definitions";
import { useModalAction } from "@homarr/modals"; import { useModalAction } from "@homarr/modals";
import { showSuccessNotification } from "@homarr/notifications"; import { showSuccessNotification } from "@homarr/notifications";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import {
ActionIcon,
Affix,
Card,
IconDimensions,
IconPencil,
IconToggleLeft,
IconToggleRight,
} from "@homarr/ui";
import { import {
loadWidgetDynamic, loadWidgetDynamic,
reduceWidgetOptionsWithDefaultValues, reduceWidgetOptionsWithDefaultValues,

View File

@@ -1,9 +1,10 @@
"use client"; "use client";
import { Button, Group, InputWrapper, Slider, Stack } from "@mantine/core";
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Group, InputWrapper, Slider, Stack } from "@homarr/ui";
interface InnerProps { interface InnerProps {
dimensions: Dimensions; dimensions: Dimensions;

View File

@@ -1,8 +1,8 @@
import { notFound } from "next/navigation"; import { notFound } from "next/navigation";
import { Center } from "@mantine/core";
import { db } from "@homarr/db"; import { db } from "@homarr/db";
import type { WidgetKind } from "@homarr/definitions"; import type { WidgetKind } from "@homarr/definitions";
import { Center } from "@homarr/ui";
import { widgetImports } from "@homarr/widgets"; import { widgetImports } from "@homarr/widgets";
import { env } from "~/env.mjs"; import { env } from "~/env.mjs";

View File

@@ -3,11 +3,10 @@
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { useCallback } from "react"; import { useCallback } from "react";
import { usePathname } from "next/navigation"; import { usePathname } from "next/navigation";
import type { AccordionProps } from "@mantine/core";
import { Accordion } from "@mantine/core";
import { useShallowEffect } from "@mantine/hooks"; import { useShallowEffect } from "@mantine/hooks";
import type { AccordionProps } from "@homarr/ui";
import { Accordion } from "@homarr/ui";
type ActiveTabAccordionProps = PropsWithChildren< type ActiveTabAccordionProps = PropsWithChildren<
Omit<AccordionProps<false>, "onChange"> Omit<AccordionProps<false>, "onChange">
>; >;

View File

@@ -1,7 +1,8 @@
import { Button, Card, Center, Grid, Stack, Text } from "@mantine/core";
import type { WidgetKind } from "@homarr/definitions"; import type { WidgetKind } from "@homarr/definitions";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Card, Center, Grid, Stack, Text } from "@homarr/ui";
import { objectEntries } from "../../../../../../packages/common/src"; import { objectEntries } from "../../../../../../packages/common/src";
import { widgetImports } from "../../../../../../packages/widgets/src"; import { widgetImports } from "../../../../../../packages/widgets/src";

View File

@@ -1,10 +1,11 @@
"use client"; "use client";
import { Button, Group, Stack, TextInput } from "@mantine/core";
import { clientApi } from "@homarr/api/client"; import { clientApi } from "@homarr/api/client";
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Group, Stack, TextInput } from "@homarr/ui";
import type { validation, z } from "@homarr/validation"; import type { validation, z } from "@homarr/validation";
interface InnerProps { interface InnerProps {

View File

@@ -1,16 +1,14 @@
import type { RefObject } from "react"; import type { RefObject } from "react";
import { useDisclosure } from "@mantine/hooks";
import { import {
Card, Card,
Collapse, Collapse,
Group, Group,
IconChevronDown,
IconChevronUp,
Stack, Stack,
Title, Title,
UnstyledButton, UnstyledButton,
} from "@homarr/ui"; } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { IconChevronDown, IconChevronUp } from "@tabler/icons-react";
import type { CategorySection } from "~/app/[locale]/boards/_types"; import type { CategorySection } from "~/app/[locale]/boards/_types";
import { CategoryMenu } from "./category/category-menu"; import { CategoryMenu } from "./category/category-menu";

View File

@@ -1,7 +1,8 @@
import { Button, Group, Stack, TextInput } from "@mantine/core";
import { useForm } from "@homarr/form"; import { useForm } from "@homarr/form";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Group, Stack, TextInput } from "@homarr/ui";
interface Category { interface Category {
id: string; id: string;

View File

@@ -1,12 +1,8 @@
"use client"; "use client";
import React, { useMemo } from "react"; import React, { useMemo } from "react";
import { useAtomValue } from "jotai"; import { ActionIcon, Menu } from "@mantine/core";
import { useScopedI18n } from "@homarr/translation/client";
import type { TablerIcon } from "@homarr/ui";
import { import {
ActionIcon,
IconDotsVertical, IconDotsVertical,
IconEdit, IconEdit,
IconRowInsertBottom, IconRowInsertBottom,
@@ -14,8 +10,11 @@ import {
IconTransitionBottom, IconTransitionBottom,
IconTransitionTop, IconTransitionTop,
IconTrash, IconTrash,
Menu, } from "@tabler/icons-react";
} from "@homarr/ui"; import { useAtomValue } from "jotai";
import { useScopedI18n } from "@homarr/translation/client";
import type { TablerIcon } from "@homarr/ui";
import type { CategorySection } from "~/app/[locale]/boards/_types"; import type { CategorySection } from "~/app/[locale]/boards/_types";
import { editModeAtom } from "../../editMode"; import { editModeAtom } from "../../editMode";

View File

@@ -2,21 +2,19 @@
// Ignored because of gridstack attributes // Ignored because of gridstack attributes
import type { RefObject } from "react"; import type { RefObject } from "react";
import { ActionIcon, Card, Menu } from "@mantine/core";
import { useElementSize } from "@mantine/hooks"; import { useElementSize } from "@mantine/hooks";
import {
IconDotsVertical,
IconLayoutKanban,
IconPencil,
IconTrash,
} from "@tabler/icons-react";
import combineClasses from "clsx"; import combineClasses from "clsx";
import { useAtomValue } from "jotai"; import { useAtomValue } from "jotai";
import { useConfirmModal, useModalAction } from "@homarr/modals"; import { useConfirmModal, useModalAction } from "@homarr/modals";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import {
ActionIcon,
Card,
IconDotsVertical,
IconLayoutKanban,
IconPencil,
IconTrash,
Menu,
} from "@homarr/ui";
import { import {
loadWidgetDynamic, loadWidgetDynamic,
reduceWidgetOptionsWithDefaultValues, reduceWidgetOptionsWithDefaultValues,

View File

@@ -1,6 +1,5 @@
import { usePathname } from "next/navigation"; import { usePathname } from "next/navigation";
import type { AppShellProps } from "@mantine/core";
import type { AppShellProps } from "@homarr/ui";
import { useOptionalBoard } from "~/app/[locale]/boards/_context"; import { useOptionalBoard } from "~/app/[locale]/boards/_context";

View File

@@ -1,8 +1,8 @@
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import Link from "next/link"; import Link from "next/link";
import { AppShellHeader, Group, UnstyledButton } from "@mantine/core";
import { Spotlight } from "@homarr/spotlight"; import { Spotlight } from "@homarr/spotlight";
import { AppShellHeader, Group, UnstyledButton } from "@homarr/ui";
import { ClientBurger } from "./header/burger"; import { ClientBurger } from "./header/burger";
import { DesktopSearchInput, MobileSearchButton } from "./header/search"; import { DesktopSearchInput, MobileSearchButton } from "./header/search";

View File

@@ -1,10 +1,9 @@
"use client"; "use client";
import { useCallback } from "react"; import { useCallback } from "react";
import { Burger } from "@mantine/core";
import { atom, useAtom } from "jotai"; import { atom, useAtom } from "jotai";
import { Burger } from "@homarr/ui";
export const navigationCollapsedAtom = atom(true); export const navigationCollapsedAtom = atom(true);
export const ClientBurger = () => { export const ClientBurger = () => {

View File

@@ -1,9 +1,8 @@
import type { ForwardedRef, ReactNode } from "react"; import type { ForwardedRef, ReactNode } from "react";
import { forwardRef } from "react"; import { forwardRef } from "react";
import Link from "next/link"; import Link from "next/link";
import type { ActionIconProps } from "@mantine/core";
import type { ActionIconProps } from "@homarr/ui"; import { ActionIcon } from "@mantine/core";
import { ActionIcon } from "@homarr/ui";
type HeaderButtonProps = ( type HeaderButtonProps = (
| { | {

View File

@@ -1,8 +1,10 @@
"use client"; "use client";
import { TextInput, UnstyledButton } from "@mantine/core";
import { IconSearch } from "@tabler/icons-react";
import { openSpotlight } from "@homarr/spotlight"; import { openSpotlight } from "@homarr/spotlight";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { IconSearch, TextInput, UnstyledButton } from "@homarr/ui";
import { HeaderButton } from "./button"; import { HeaderButton } from "./button";
import classes from "./search.module.css"; import classes from "./search.module.css";

View File

@@ -1,4 +1,4 @@
import { UnstyledButton } from "@homarr/ui"; import { UnstyledButton } from "@mantine/core";
import { UserAvatar } from "~/components/user-avatar"; import { UserAvatar } from "~/components/user-avatar";
import { UserAvatarMenu } from "~/components/user-avatar-menu"; import { UserAvatarMenu } from "~/components/user-avatar-menu";

View File

@@ -1,7 +1,6 @@
import Image from "next/image"; import Image from "next/image";
import type { TitleOrder } from "@mantine/core";
import type { TitleOrder } from "@homarr/ui"; import { Group, Title } from "@mantine/core";
import { Group, Title } from "@homarr/ui";
interface LogoProps { interface LogoProps {
size: number; size: number;

View File

@@ -3,8 +3,7 @@
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import Link from "next/link"; import Link from "next/link";
import { usePathname } from "next/navigation"; import { usePathname } from "next/navigation";
import { NavLink } from "@mantine/core";
import { NavLink } from "@homarr/ui";
export const CommonNavLink = (props: ClientNavigationLink) => export const CommonNavLink = (props: ClientNavigationLink) =>
"href" in props ? ( "href" in props ? (

View File

@@ -1,5 +1,6 @@
import { AppShellNavbar, AppShellSection, ScrollArea } from "@mantine/core";
import type { TablerIcon } from "@homarr/ui"; import type { TablerIcon } from "@homarr/ui";
import { AppShellNavbar, AppShellSection, ScrollArea } from "@homarr/ui";
import type { ClientNavigationLink } from "./navigation-link"; import type { ClientNavigationLink } from "./navigation-link";
import { CommonNavLink } from "./navigation-link"; import { CommonNavLink } from "./navigation-link";

View File

@@ -1,10 +1,9 @@
"use client"; "use client";
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { AppShell } from "@mantine/core";
import { useAtomValue } from "jotai"; import { useAtomValue } from "jotai";
import { AppShell } from "@homarr/ui";
import { useOptionalBackgroundProps } from "./background"; import { useOptionalBackgroundProps } from "./background";
import { navigationCollapsedAtom } from "./header/burger"; import { navigationCollapsedAtom } from "./header/burger";

View File

@@ -1,9 +1,9 @@
import { Button, Group, Stack, TextInput } from "@mantine/core";
import { boardSchemas } from "node_modules/@homarr/validation/src/board"; import { boardSchemas } from "node_modules/@homarr/validation/src/board";
import { useForm, zodResolver } from "@homarr/form"; import { useForm, zodResolver } from "@homarr/form";
import { createModal } from "@homarr/modals"; import { createModal } from "@homarr/modals";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { Button, Group, Stack, TextInput } from "@homarr/ui";
import { z } from "@homarr/validation"; import { z } from "@homarr/validation";
interface InnerProps { interface InnerProps {

View File

@@ -2,17 +2,16 @@
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import Link from "next/link"; import Link from "next/link";
import { Menu, useMantineColorScheme } from "@mantine/core";
import { useScopedI18n } from "@homarr/translation/client";
import { import {
IconDashboard, IconDashboard,
IconLogout, IconLogout,
IconMoon, IconMoon,
IconSun, IconSun,
IconTool, IconTool,
Menu, } from "@tabler/icons-react";
useMantineColorScheme,
} from "@homarr/ui"; import { useScopedI18n } from "@homarr/translation/client";
interface UserAvatarMenuProps { interface UserAvatarMenuProps {
children: ReactNode; children: ReactNode;

View File

@@ -1,6 +1,7 @@
import type { AvatarProps, MantineSize } from "@mantine/core";
import { Avatar } from "@mantine/core";
import { auth } from "@homarr/auth"; import { auth } from "@homarr/auth";
import type { AvatarProps, MantineSize } from "@homarr/ui";
import { Avatar } from "@homarr/ui";
interface UserAvatarProps { interface UserAvatarProps {
size: MantineSize; size: MantineSize;

View File

@@ -40,5 +40,11 @@
"vite-tsconfig-paths": "^4.3.2", "vite-tsconfig-paths": "^4.3.2",
"vitest": "^1.5.0" "vitest": "^1.5.0"
}, },
"dependencies": {
"@mantine/core": "^7.8.0",
"@mantine/dates": "^7.8.0",
"@tabler/icons-react": "^3.2.0",
"mantine-react-table": "2.0.0-beta.1"
},
"prettier": "@homarr/prettier-config" "prettier": "@homarr/prettier-config"
} }

View File

@@ -1,5 +1,7 @@
import { useCallback } from "react"; import { useCallback } from "react";
import type { ComponentPropsWithoutRef, ReactNode } from "react"; import type { ComponentPropsWithoutRef, ReactNode } from "react";
import type { ButtonProps, GroupProps } from "@mantine/core";
import { Box, Button, Group } from "@mantine/core";
import type { import type {
stringOrTranslation, stringOrTranslation,
@@ -7,8 +9,6 @@ import type {
} from "@homarr/translation"; } from "@homarr/translation";
import { translateIfNecessary } from "@homarr/translation"; import { translateIfNecessary } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import type { ButtonProps, GroupProps } from "@homarr/ui";
import { Box, Button, Group } from "@homarr/ui";
import { createModal } from "./creator"; import { createModal } from "./creator";

View File

@@ -8,12 +8,12 @@ import {
useReducer, useReducer,
useRef, useRef,
} from "react"; } from "react";
import { getDefaultZIndex, Modal } from "@mantine/core";
import { randomId } from "@mantine/hooks"; import { randomId } from "@mantine/hooks";
import type { stringOrTranslation } from "@homarr/translation"; import type { stringOrTranslation } from "@homarr/translation";
import { translateIfNecessary } from "@homarr/translation"; import { translateIfNecessary } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import { getDefaultZIndex, Modal } from "@homarr/ui";
import type { ConfirmModalProps } from "./confirm-modal"; import type { ConfirmModalProps } from "./confirm-modal";
import { ConfirmModal } from "./confirm-modal"; import { ConfirmModal } from "./confirm-modal";

View File

@@ -1,7 +1,7 @@
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import type { ModalProps } from "@mantine/core";
import type { stringOrTranslation } from "@homarr/translation"; import type { stringOrTranslation } from "@homarr/translation";
import type { ModalProps } from "@homarr/ui";
export type ModalComponent<TInnerProps> = (props: { export type ModalComponent<TInnerProps> = (props: {
actions: { closeModal: () => void }; actions: { closeModal: () => void };

View File

@@ -1,7 +1,6 @@
import type { NotificationData } from "@mantine/notifications"; import type { NotificationData } from "@mantine/notifications";
import { notifications } from "@mantine/notifications"; import { notifications } from "@mantine/notifications";
import { IconCheck, IconX } from "@tabler/icons-react";
import { IconCheck, IconX } from "@homarr/ui";
type CommonNotificationProps = Pick<NotificationData, "title" | "message">; type CommonNotificationProps = Pick<NotificationData, "title" | "message">;

View File

@@ -1,5 +1,6 @@
import { Chip } from "@mantine/core";
import { useScopedI18n } from "@homarr/translation/client"; import { useScopedI18n } from "@homarr/translation/client";
import { Chip } from "@homarr/ui";
import { import {
selectNextAction, selectNextAction,

View File

@@ -2,23 +2,16 @@
import { useCallback, useState } from "react"; import { useCallback, useState } from "react";
import Link from "next/link"; import Link from "next/link";
import { Center, Chip, Divider, Flex, Group, Text } from "@mantine/core";
import { import {
Spotlight as MantineSpotlight, Spotlight as MantineSpotlight,
SpotlightAction, SpotlightAction,
} from "@mantine/spotlight"; } from "@mantine/spotlight";
import { IconSearch } from "@tabler/icons-react";
import { useAtomValue } from "jotai"; import { useAtomValue } from "jotai";
import type { TranslationFunction } from "@homarr/translation"; import type { TranslationFunction } from "@homarr/translation";
import { useI18n } from "@homarr/translation/client"; import { useI18n } from "@homarr/translation/client";
import {
Center,
Chip,
Divider,
Flex,
Group,
IconSearch,
Text,
} from "@homarr/ui";
import { GroupChip } from "./chip-group"; import { GroupChip } from "./chip-group";
import classes from "./component.module.css"; import classes from "./component.module.css";

View File

@@ -1,4 +1,4 @@
import { IconDownload } from "@homarr/ui"; import { IconDownload } from "@tabler/icons-react";
import { useRegisterSpotlightActions } from "./data-store"; import { useRegisterSpotlightActions } from "./data-store";

View File

@@ -1,8 +1,5 @@
import type { Icon123 } from "@tabler/icons-react"; import type { Icon123 } from "@tabler/icons-react";
export * from "@mantine/core";
export * from "@mantine/dates";
export * from "@tabler/icons-react";
export * from "./src"; export * from "./src";
export type TablerIcon = typeof Icon123; export type TablerIcon = typeof Icon123;

View File

@@ -33,11 +33,5 @@
"@homarr/eslint-config/base" "@homarr/eslint-config/base"
] ]
}, },
"prettier": "@homarr/prettier-config", "prettier": "@homarr/prettier-config"
"dependencies": {
"@mantine/core": "^7.8.0",
"@mantine/dates": "^7.8.0",
"@tabler/icons-react": "^3.2.0",
"mantine-react-table": "2.0.0-beta.1"
}
} }

View File

@@ -1,11 +1,12 @@
"use client"; "use client";
import { memo, useMemo } from "react"; import { memo, useMemo } from "react";
import type { SelectProps } from "@mantine/core";
import { Group, Loader, Select } from "@mantine/core";
import { IconCheck } from "@tabler/icons-react";
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 { SelectProps } from "@homarr/ui";
import { Group, IconCheck, Loader, Select } from "@homarr/ui";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -2,19 +2,12 @@
import type { ChangeEvent } from "react"; import type { ChangeEvent } from "react";
import { useCallback } from "react"; import { useCallback } from "react";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import { createModal, useModalAction } from "@homarr/modals";
import { useScopedI18n } from "@homarr/translation/client";
import { import {
ActionIcon, ActionIcon,
Anchor, Anchor,
Button, Button,
Fieldset, Fieldset,
Group, Group,
IconClick,
IconListSearch,
Loader, Loader,
NumberInput, NumberInput,
Stack, Stack,
@@ -22,7 +15,13 @@ import {
Text, Text,
TextInput, TextInput,
Tooltip, Tooltip,
} from "@homarr/ui"; } from "@mantine/core";
import { IconClick, IconListSearch } from "@tabler/icons-react";
import type { RouterOutputs } from "@homarr/api";
import { clientApi } from "@homarr/api/client";
import { createModal, useModalAction } from "@homarr/modals";
import { useScopedI18n } from "@homarr/translation/client";
import type { OptionLocation } from "../options"; import type { OptionLocation } from "../options";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { MultiSelect } from "@homarr/ui"; import { MultiSelect } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { NumberInput } from "@homarr/ui"; import { NumberInput } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { Select } from "@homarr/ui"; import { Select } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { InputWrapper, Slider } from "@homarr/ui"; import { InputWrapper, Slider } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { Switch } from "@homarr/ui"; import { Switch } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import { TextInput } from "@homarr/ui"; import { TextInput } from "@mantine/core";
import type { CommonWidgetInputProps } from "./common"; import type { CommonWidgetInputProps } from "./common";
import { useWidgetInputTranslation } from "./common"; import { useWidgetInputTranslation } from "./common";

View File

@@ -1,20 +1,20 @@
"use client"; "use client";
import type { PropsWithChildren } from "react"; import type { PropsWithChildren } from "react";
import { clientApi } from "@homarr/api/client";
import { useRegisterSpotlightActions } from "@homarr/spotlight";
import { useScopedI18n } from "@homarr/translation/client";
import { import {
Center, Center,
Flex, Flex,
IconDeviceDesktopX,
Loader, Loader,
Stack, Stack,
Text, Text,
Tooltip, Tooltip,
UnstyledButton, UnstyledButton,
} from "@homarr/ui"; } from "@mantine/core";
import { IconDeviceDesktopX } from "@tabler/icons-react";
import { clientApi } from "@homarr/api/client";
import { useRegisterSpotlightActions } from "@homarr/spotlight";
import { useScopedI18n } from "@homarr/translation/client";
import type { WidgetComponentProps } from "../definition"; import type { WidgetComponentProps } from "../definition";
import classes from "./app.module.css"; import classes from "./app.module.css";

View File

@@ -1,4 +1,4 @@
import { IconApps } from "@homarr/ui"; import { IconApps } from "@tabler/icons-react";
import { createWidgetDefinition } from "../definition"; import { createWidgetDefinition } from "../definition";
import { optionsBuilder } from "../options"; import { optionsBuilder } from "../options";

View File

@@ -1,13 +1,12 @@
"use client"; "use client";
import { useEffect, useMemo, useRef, useState } from "react"; import { useEffect, useMemo, useRef, useState } from "react";
import { Flex, Stack, Text } from "@mantine/core";
import dayjs from "dayjs"; import dayjs from "dayjs";
import advancedFormat from "dayjs/plugin/advancedFormat"; import advancedFormat from "dayjs/plugin/advancedFormat";
import timezones from "dayjs/plugin/timezone"; import timezones from "dayjs/plugin/timezone";
import utc from "dayjs/plugin/utc"; import utc from "dayjs/plugin/utc";
import { Flex, Stack, Text } from "@homarr/ui";
import type { WidgetComponentProps } from "../definition"; import type { WidgetComponentProps } from "../definition";
dayjs.extend(advancedFormat); dayjs.extend(advancedFormat);

View File

@@ -1,7 +1,6 @@
import { IconClock } from "@tabler/icons-react";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { IconClock } from "@homarr/ui";
import { createWidgetDefinition } from "../definition"; import { createWidgetDefinition } from "../definition";
import { optionsBuilder } from "../options"; import { optionsBuilder } from "../options";

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