diff --git a/ui/src/Pages/PeoplePage/PeoplePage.tsx b/ui/src/Pages/PeoplePage/PeoplePage.tsx index ffa141e..76e2636 100644 --- a/ui/src/Pages/PeoplePage/PeoplePage.tsx +++ b/ui/src/Pages/PeoplePage/PeoplePage.tsx @@ -20,6 +20,7 @@ import { } from './__generated__/myFaces' import { recognizeUnlabeledFaces } from './__generated__/recognizeUnlabeledFaces' import { isNil, tailwindClassNames } from '../../helpers/utils' +import classNames from 'classnames' export const MY_FACES_QUERY = gql` query myFaces($limit: Int, $offset: Int) { @@ -66,9 +67,32 @@ const RECOGNIZE_UNLABELED_FACES_MUTATION = gql` } ` -const FaceDetailsWrapper = styled.span<{ labeled: boolean }>` - color: ${({ labeled }) => (labeled ? 'black' : '#aaa')}; +type FaceDetailsWrapperProps = { + labeled: boolean + className?: string +} & React.DetailedHTMLProps< + React.HTMLAttributes, + HTMLSpanElement +> +const FaceDetailsWrapperInner = ({ + labeled, + children, + className, + ...otherProps +}: FaceDetailsWrapperProps) => ( + + {children} + +) + +const FaceDetailsWrapper = styled(FaceDetailsWrapperInner)` &:hover, &:focus-visible { color: #2683ca; @@ -180,14 +204,10 @@ export const FaceDetails = ({ return label } -const FaceImagesCount = styled.span` - background-color: #eee; - color: #222; - font-size: 0.9em; - padding: 0 4px; - margin-right: 6px; - border-radius: 4px; -` +const FaceImagesCount = styled.span.attrs({ + className: + 'bg-gray-100 text-gray-900 dark:bg-gray-400 dark:text-black text-sm px-1 mr-2 rounded-md', +})`` type FaceGroupProps = { group: myFaces_myFaceGroups @@ -198,7 +218,7 @@ export const FaceGroup = ({ group }: FaceGroupProps) => { const [editLabel, setEditLabel] = useState(false) return ( -
+
diff --git a/ui/src/Pages/PeoplePage/SingleFaceGroup/FaceGroupTitle.tsx b/ui/src/Pages/PeoplePage/SingleFaceGroup/FaceGroupTitle.tsx index 0e193be..b39fcd7 100644 --- a/ui/src/Pages/PeoplePage/SingleFaceGroup/FaceGroupTitle.tsx +++ b/ui/src/Pages/PeoplePage/SingleFaceGroup/FaceGroupTitle.tsx @@ -67,7 +67,7 @@ const FaceGroupTitle = ({ faceGroup }: FaceGroupTitleProps) => { <>

{faceGroup?.label ?? diff --git a/ui/src/Pages/SettingsPage/SettingsPage.tsx b/ui/src/Pages/SettingsPage/SettingsPage.tsx index 6febb71..9da1757 100644 --- a/ui/src/Pages/SettingsPage/SettingsPage.tsx +++ b/ui/src/Pages/SettingsPage/SettingsPage.tsx @@ -18,7 +18,7 @@ export const SectionTitle = ({ children, nospace }: SectionTitleProps) => { return (

diff --git a/ui/src/Pages/SettingsPage/UserPreferences.tsx b/ui/src/Pages/SettingsPage/UserPreferences.tsx index 8f59602..79e7984 100644 --- a/ui/src/Pages/SettingsPage/UserPreferences.tsx +++ b/ui/src/Pages/SettingsPage/UserPreferences.tsx @@ -1,6 +1,6 @@ import { useMutation, useQuery } from '@apollo/client' import gql from 'graphql-tag' -import React, { useMemo } from 'react' +import React, { useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import styled from 'styled-components' import { LanguageTranslation } from '../../__generated__/globalTypes' @@ -16,6 +16,8 @@ import { changeUserPreferencesVariables, } from './__generated__/changeUserPreferences' import { myUserPreferences } from './__generated__/myUserPreferences' +import { TranslationFn } from '../../localization' +import { changeTheme, getTheme } from '../../theme' const languagePreferences = [ { key: 1, label: 'English', flag: 'uk', value: LanguageTranslation.English }, @@ -47,6 +49,24 @@ const languagePreferences = [ }, ] +const themePreferences = (t: TranslationFn) => [ + { + key: 1, + label: t('settings.user_preferences.theme.auto.label', 'Same as system'), + value: 'auto', + }, + { + key: 2, + label: t('settings.user_preferences.theme.light.label', 'Light'), + value: 'light', + }, + { + key: 2, + label: t('settings.user_preferences.theme.dark.label', 'Dark'), + value: 'dark', + }, +] + const CHANGE_USER_PREFERENCES = gql` mutation changeUserPreferences($language: String) { changeUserPreferences(language: $language) { @@ -86,6 +106,12 @@ const UserPreferencesWrapper = styled.div` const UserPreferences = () => { const { t } = useTranslation() + const [theme, setTheme] = useState(getTheme()) + + const changeStateTheme = (value: string) => { + changeTheme(value) + setTheme(value) + } const { data } = useQuery(MY_USER_PREFERENCES) @@ -109,7 +135,7 @@ const UserPreferences = () => { {t('settings.user_preferences.title', 'User preferences')} -