diff --git a/src/frontend/src/components/items/StylishText.tsx b/src/frontend/src/components/items/StylishText.tsx index 946e9f49e5..f44c4ab8a2 100644 --- a/src/frontend/src/components/items/StylishText.tsx +++ b/src/frontend/src/components/items/StylishText.tsx @@ -1,18 +1,58 @@ -import { Text, useMantineTheme } from '@mantine/core'; +import { + type MantineSize, + Text, + darken, + getThemeColor, + lighten, + useMantineColorScheme, + useMantineTheme +} from '@mantine/core'; +import { useMemo } from 'react'; +import { useLocalState } from '../../states/LocalState'; -import * as classes from '../../main.css'; +// Hook that memoizes the gradient color based on the primary color of the theme +const useThematicGradient = () => { + const { usertheme } = useLocalState(); + const theme = useMantineTheme(); + const colorScheme = useMantineColorScheme(); + const primary = useMemo(() => { + return getThemeColor(usertheme.primaryColor, theme); + }, [usertheme.primaryColor, theme]); + + const secondary = useMemo(() => { + let secondary = primary; + if (colorScheme.colorScheme == 'dark') { + secondary = lighten(primary, 0.3); + } else { + secondary = darken(primary, 0.3); + } + + return secondary; + }, [usertheme, colorScheme, primary]); + + return useMemo(() => { + return { primary, secondary }; + }, [primary, secondary]); +}; + +// A stylish text component that uses the primary color of the theme export function StylishText({ children, - size = 'md' + size }: Readonly<{ children: JSX.Element | string; - size?: string; + size?: MantineSize; }>) { - const theme = useMantineTheme(); + const { primary, secondary } = useThematicGradient(); return ( - + {children} ); diff --git a/src/frontend/src/components/nav/DetailDrawer.tsx b/src/frontend/src/components/nav/DetailDrawer.tsx index 42c84b3b6d..6a48ac5fc4 100644 --- a/src/frontend/src/components/nav/DetailDrawer.tsx +++ b/src/frontend/src/components/nav/DetailDrawer.tsx @@ -6,6 +6,7 @@ import type { To } from 'react-router-dom'; import type { UiSizeType } from '../../defaults/formatters'; import { useLocalState } from '../../states/LocalState'; +import { StylishText } from '../items/StylishText'; import * as classes from './DetailDrawer.css'; /** @@ -66,9 +67,7 @@ function DetailDrawerComponent({ )} - - {title} - + {title} } > diff --git a/src/frontend/src/main.css.ts b/src/frontend/src/main.css.ts index 9906e6002b..81be4294a1 100644 --- a/src/frontend/src/main.css.ts +++ b/src/frontend/src/main.css.ts @@ -112,11 +112,6 @@ export const tab = style({ } }); -export const signText = style({ - fontSize: 'xl', - fontWeight: 700 -}); - export const error = style({ backgroundColor: vars.colors.gray[0], color: vars.colors.red[6] diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx index 2462139673..c786b70284 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/AccountDetailPanel.tsx @@ -1,5 +1,5 @@ import { Trans, t } from '@lingui/macro'; -import { Badge, Group, Stack, Table, Title } from '@mantine/core'; +import { Badge, Group, Stack, Table } from '@mantine/core'; import { IconEdit, IconKey, IconUser } from '@tabler/icons-react'; import { useMemo } from 'react'; @@ -8,6 +8,7 @@ import { ActionButton } from '../../../../components/buttons/ActionButton'; import { YesNoUndefinedButton } from '../../../../components/buttons/YesNoButton'; import type { ApiFormFieldSet } from '../../../../components/forms/fields/ApiFormField'; import { ActionDropdown } from '../../../../components/items/ActionDropdown'; +import { StylishText } from '../../../../components/items/StylishText'; import { ApiEndpoints } from '../../../../enums/ApiEndpoints'; import { useEditApiFormModal } from '../../../../hooks/UseForm'; import { useUserState } from '../../../../states/UserState'; @@ -98,9 +99,9 @@ export function AccountDetailPanel() { {editProfile.modal} - + <StylishText size='lg'> <Trans>Account Details</Trans> - + } @@ -125,9 +126,9 @@ export function AccountDetailPanel() { {renderDetailTable(accountDetailFields)} - + <StylishText size='lg'> <Trans>Profile Details</Trans> - + } diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx index 368cfb49cc..b35076311b 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/SecurityContent.tsx @@ -15,7 +15,6 @@ import { Table, Text, TextInput, - Title, Tooltip } from '@mantine/core'; import { useDisclosure } from '@mantine/hooks'; @@ -467,14 +466,14 @@ function MfaSection() { title={t`Recovery Codes`} centered > - + <StylishText size='lg'> <Trans>Unused Codes</Trans> - + {recoveryCodes?.unused_codes?.join('\n')} - + <StylishText size='lg'> <Trans>Used Codes</Trans> - + {recoveryCodes?.used_codes?.join('\n')} diff --git a/src/frontend/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx b/src/frontend/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx index 5a52ed0dc1..77d215ac08 100644 --- a/src/frontend/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx +++ b/src/frontend/src/pages/Index/Settings/AccountSettings/UserThemePanel.tsx @@ -11,7 +11,6 @@ import { Select, Slider, Table, - Title, useMantineTheme } from '@mantine/core'; import { IconRestore } from '@tabler/icons-react'; @@ -19,6 +18,7 @@ import { useState } from 'react'; import { ColorToggle } from '../../../../components/items/ColorToggle'; import { LanguageSelect } from '../../../../components/items/LanguageSelect'; +import { StylishText } from '../../../../components/items/StylishText'; import { SizeMarks } from '../../../../defaults/defaults'; import { IS_DEV } from '../../../../main'; import { useLocalState } from '../../../../states/LocalState'; @@ -57,9 +57,9 @@ export function UserTheme({ height }: Readonly<{ height: number }>) { return ( - + <StylishText size='lg'> <Trans>Display Settings</Trans> - + diff --git a/src/frontend/src/tables/machine/MachineListTable.tsx b/src/frontend/src/tables/machine/MachineListTable.tsx index d8c5de873d..8cac76876f 100644 --- a/src/frontend/src/tables/machine/MachineListTable.tsx +++ b/src/frontend/src/tables/machine/MachineListTable.tsx @@ -11,8 +11,7 @@ import { List, LoadingOverlay, Stack, - Text, - Title + Text } from '@mantine/core'; import { notifications } from '@mantine/notifications'; import { IconCheck, IconRefresh } from '@tabler/icons-react'; @@ -248,9 +247,8 @@ function MachineDrawer({ {machine && } - {machine?.name} + {machine?.name ?? t`Machine`} - {machine?.restart_required && ( diff --git a/src/frontend/src/tables/machine/MachineTypeTable.tsx b/src/frontend/src/tables/machine/MachineTypeTable.tsx index 751efe027c..94e0ea53b4 100644 --- a/src/frontend/src/tables/machine/MachineTypeTable.tsx +++ b/src/frontend/src/tables/machine/MachineTypeTable.tsx @@ -85,9 +85,9 @@ function MachineTypeDrawer({ <> - + <StylishText size='md'> {machineType ? machineType.name : machineTypeSlug} - + {!machineType && ( diff --git a/src/frontend/src/tables/settings/GroupTable.tsx b/src/frontend/src/tables/settings/GroupTable.tsx index dbde4be555..cc86569cf3 100644 --- a/src/frontend/src/tables/settings/GroupTable.tsx +++ b/src/frontend/src/tables/settings/GroupTable.tsx @@ -6,8 +6,7 @@ import { Pill, PillGroup, Stack, - Text, - Title + Text } from '@mantine/core'; import { useCallback, useMemo, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -15,6 +14,7 @@ import { useNavigate } from 'react-router-dom'; import { AddItemButton } from '../../components/buttons/AddItemButton'; import AdminButton from '../../components/buttons/AdminButton'; import { EditApiForm } from '../../components/forms/ApiForm'; +import { StylishText } from '../../components/items/StylishText'; import { DetailDrawer } from '../../components/nav/DetailDrawer'; import { ApiEndpoints } from '../../enums/ApiEndpoints'; import { ModelType } from '../../enums/ModelType'; @@ -112,9 +112,9 @@ export function GroupDrawer({ id={`group-detail-drawer-${id}`} /> - + <StylishText size='md'> <Trans>Permission set</Trans> - + {permissionsAccordion} diff --git a/src/frontend/src/tables/settings/UserTable.tsx b/src/frontend/src/tables/settings/UserTable.tsx index 01b6eeb32a..4baf197f4b 100644 --- a/src/frontend/src/tables/settings/UserTable.tsx +++ b/src/frontend/src/tables/settings/UserTable.tsx @@ -250,7 +250,7 @@ export function UserTable() { // Table Actions - Add New User const newUser = useCreateApiFormModal({ url: ApiEndpoints.user_list, - title: t`Add user`, + title: t`Add User`, fields: { username: {}, email: {},