diff --git a/inertia/mantine/components/home/feature.tsx b/inertia/mantine/components/home/feature.tsx new file mode 100644 index 0000000..408af8b --- /dev/null +++ b/inertia/mantine/components/home/feature.tsx @@ -0,0 +1,48 @@ +import { Text, ThemeIcon, rem } from '@mantine/core'; +import { useTranslation } from 'react-i18next'; +import { AiFillFolderOpen } from 'react-icons/ai'; +import { FaUser } from 'react-icons/fa'; +import { IoIosLink, IoIosSearch, IoIosShareAlt } from 'react-icons/io'; +import { IoExtensionPuzzleOutline } from 'react-icons/io5'; +import { featureList } from '~/mantine/components/home/feature_list'; + +type FeatureName = (typeof featureList)[number]; + +function getIcon(name: FeatureName) { + switch (name) { + case 'collection': + return AiFillFolderOpen; + case 'link': + return IoIosLink; + case 'search': + return IoIosSearch; + case 'extension': + return IoExtensionPuzzleOutline; + case 'share': + return IoIosShareAlt; + case 'contribute': + return FaUser; + } +} + +interface FeatureProps { + name: FeatureName; +} + +export function Feature({ name: featureName }: FeatureProps) { + const { t } = useTranslation('about'); + const Icon = getIcon(featureName); + return ( +
+ + + + + {t(`${featureName}.title`)} + + + {t(`${featureName}.text`)} + +
+ ); +} diff --git a/inertia/mantine/components/home/feature_list.tsx b/inertia/mantine/components/home/feature_list.tsx new file mode 100644 index 0000000..3a5ec8e --- /dev/null +++ b/inertia/mantine/components/home/feature_list.tsx @@ -0,0 +1,24 @@ +import { SimpleGrid } from '@mantine/core'; +import { Feature } from '~/mantine/components/home/feature'; + +export const featureList = [ + 'collection', + 'link', + 'search', + 'extension', + 'share', + 'contribute', +] as const; + +export const FeatureList = () => ( + + {featureList.map((feature, index) => ( + + ))} + +); diff --git a/inertia/components/layouts/mantine/_mantine_base_layout.tsx b/inertia/mantine/layouts/_mantine_base_layout.tsx similarity index 97% rename from inertia/components/layouts/mantine/_mantine_base_layout.tsx rename to inertia/mantine/layouts/_mantine_base_layout.tsx index 81146b6..d84304f 100644 --- a/inertia/components/layouts/mantine/_mantine_base_layout.tsx +++ b/inertia/mantine/layouts/_mantine_base_layout.tsx @@ -6,7 +6,7 @@ import { useTranslation } from 'react-i18next'; import '@mantine/core/styles.css'; import '@mantine/spotlight/styles.css'; -import '../../../styles/index.css'; +import '../../styles/index.css'; const theme = createTheme({}); const TRANSITION_IN_CLASS = '__transition_fadeIn'; diff --git a/inertia/components/layouts/mantine/mantine_content_layout.tsx b/inertia/mantine/layouts/mantine_content_layout.tsx similarity index 90% rename from inertia/components/layouts/mantine/mantine_content_layout.tsx rename to inertia/mantine/layouts/mantine_content_layout.tsx index 18c5bee..7d553f7 100644 --- a/inertia/components/layouts/mantine/mantine_content_layout.tsx +++ b/inertia/mantine/layouts/mantine_content_layout.tsx @@ -1,8 +1,8 @@ import { Container } from '@mantine/core'; import { PropsWithChildren } from 'react'; import { MantineFooter } from '~/components/footer/mantine_footer'; -import BaseLayout from '~/components/layouts/mantine/_mantine_base_layout'; import MantineNavbar from '~/components/navbar/mantine_navbar'; +import BaseLayout from '~/mantine/layouts/_mantine_base_layout'; const MantineContentLayout = ({ children }: PropsWithChildren) => ( - - - - - {t(`${featureName}.title`)} - - - {t(`${featureName}.text`)} - - - ); -} - function HomePage() { const { t } = useTranslation('about'); return ( @@ -77,16 +17,7 @@ function HomePage() { - - {features.map((feature, index) => ( - - ))} - + ); } diff --git a/inertia/pages/privacy.tsx b/inertia/pages/privacy.tsx index 1165cfa..90f48b2 100644 --- a/inertia/pages/privacy.tsx +++ b/inertia/pages/privacy.tsx @@ -1,6 +1,6 @@ import { ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; -import { MantineContentLayout } from '~/components/layouts/mantine/mantine_content_layout'; +import { MantineContentLayout } from '~/mantine/layouts/mantine_content_layout'; function PrivacyPage() { const { t } = useTranslation('privacy'); diff --git a/inertia/pages/terms.tsx b/inertia/pages/terms.tsx index e8dfd58..605f0f9 100644 --- a/inertia/pages/terms.tsx +++ b/inertia/pages/terms.tsx @@ -2,7 +2,7 @@ import { Link } from '@inertiajs/react'; import { route } from '@izzyjs/route/client'; import { ReactNode } from 'react'; import { Trans, useTranslation } from 'react-i18next'; -import { MantineContentLayout } from '~/components/layouts/mantine/mantine_content_layout'; +import { MantineContentLayout } from '~/mantine/layouts/mantine_content_layout'; function TermsPage() { const { t } = useTranslation('terms');