mirror of
https://github.com/theoludwig/theoludwig.git
synced 2024-12-08 00:44:30 +01:00
refactor: components struture
This commit is contained in:
parent
ceeeb2f9c5
commit
b5c50728de
@ -13,7 +13,7 @@ const preview: Preview = {
|
|||||||
},
|
},
|
||||||
options: {
|
options: {
|
||||||
storySort: {
|
storySort: {
|
||||||
order: ["Design System", "User Interface", "Errors", "Feature"],
|
order: ["Design System", "Layout", "Errors"],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
backgrounds: { disable: true },
|
backgrounds: { disable: true },
|
||||||
|
@ -5,7 +5,7 @@ RUN corepack enable
|
|||||||
WORKDIR /usr/src/app
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
FROM node-pnpm AS builder
|
FROM node-pnpm AS builder
|
||||||
RUN pnpm install --global turbo@2.0.9
|
RUN pnpm install --global turbo@2.0.10
|
||||||
COPY ./ ./
|
COPY ./ ./
|
||||||
RUN turbo prune @repo/website --docker
|
RUN turbo prune @repo/website --docker
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { getBlogPosts } from "@repo/blog"
|
import { getBlogPosts } from "@repo/blog"
|
||||||
import { BlogPosts } from "@repo/blog/BlogPosts"
|
import { BlogPosts } from "@repo/blog/BlogPosts"
|
||||||
import { LOCALE_DEFAULT, type LocaleProps } from "@repo/i18n/config"
|
import { LOCALE_DEFAULT, type LocaleProps } from "@repo/i18n/config"
|
||||||
|
import { MainLayout } from "@repo/ui/Layout/MainLayout"
|
||||||
import {
|
import {
|
||||||
Section,
|
Section,
|
||||||
SectionDescription,
|
SectionDescription,
|
||||||
SectionTitle,
|
SectionTitle,
|
||||||
} from "@repo/ui/design/Section"
|
} from "@repo/ui/Layout/Section"
|
||||||
import { MainLayout } from "@repo/ui/MainLayout"
|
|
||||||
import type { Metadata } from "next"
|
import type { Metadata } from "next"
|
||||||
import { unstable_setRequestLocale } from "next-intl/server"
|
import { unstable_setRequestLocale } from "next-intl/server"
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import "@repo/config-tailwind/styles.css"
|
import "@repo/config-tailwind/styles.css"
|
||||||
import type { Locale, LocaleProps } from "@repo/i18n/config"
|
import type { Locale, LocaleProps } from "@repo/i18n/config"
|
||||||
import { LOCALES } from "@repo/i18n/config"
|
import { LOCALES } from "@repo/i18n/config"
|
||||||
import { Footer } from "@repo/ui/Footer"
|
import { Footer } from "@repo/ui/Layout/Footer"
|
||||||
import { Header } from "@repo/ui/Header"
|
import { Header } from "@repo/ui/Layout/Header"
|
||||||
import { ThemeProvider } from "@repo/ui/Header/SwitchTheme"
|
import { ThemeProvider } from "@repo/ui/Layout/Header/SwitchTheme"
|
||||||
import { VERSION } from "@repo/utils/constants"
|
import { VERSION } from "@repo/utils/constants"
|
||||||
import type { Metadata } from "next"
|
import type { Metadata } from "next"
|
||||||
import { NextIntlClientProvider } from "next-intl"
|
import { NextIntlClientProvider } from "next-intl"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { MainLayout } from "@repo/ui/MainLayout"
|
import { Spinner } from "@repo/ui/Design/Spinner"
|
||||||
import { Spinner } from "@repo/ui/design/Spinner"
|
import { MainLayout } from "@repo/ui/Layout/MainLayout"
|
||||||
|
|
||||||
const Loading: React.FC = () => {
|
const Loading: React.FC = () => {
|
||||||
return (
|
return (
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import type { LocaleProps } from "@repo/i18n/config"
|
import type { LocaleProps } from "@repo/i18n/config"
|
||||||
import { About } from "@repo/ui/About"
|
import { About } from "@repo/ui/Home/About"
|
||||||
import { RevealFade } from "@repo/ui/design/Section"
|
import { Interests } from "@repo/ui/Home/Interests"
|
||||||
import { Interests } from "@repo/ui/Interests"
|
import { OpenSource } from "@repo/ui/Home/OpenSource"
|
||||||
import { MainLayout } from "@repo/ui/MainLayout"
|
import { Portfolio } from "@repo/ui/Home/Portfolio"
|
||||||
import { OpenSource } from "@repo/ui/OpenSource"
|
import { Skills } from "@repo/ui/Home/Skills"
|
||||||
import { Portfolio } from "@repo/ui/Portfolio"
|
import { MainLayout } from "@repo/ui/Layout/MainLayout"
|
||||||
import { Skills } from "@repo/ui/Skills"
|
import { RevealFade } from "@repo/ui/Layout/Section"
|
||||||
import { unstable_setRequestLocale } from "next-intl/server"
|
import { unstable_setRequestLocale } from "next-intl/server"
|
||||||
|
|
||||||
interface HomePageProps extends LocaleProps {}
|
interface HomePageProps extends LocaleProps {}
|
||||||
|
@ -14,6 +14,8 @@ export const config = {
|
|||||||
|
|
||||||
// Set a cookie to remember the previous locale for
|
// Set a cookie to remember the previous locale for
|
||||||
// all requests that have a locale prefix
|
// all requests that have a locale prefix
|
||||||
|
// Next.js issue, middleware matcher should support template literals:
|
||||||
|
// https://github.com/vercel/next.js/issues/56398
|
||||||
"/(en-US|fr-FR)/:path*",
|
"/(en-US|fr-FR)/:path*",
|
||||||
|
|
||||||
// Enable redirects that add missing locales
|
// Enable redirects that add missing locales
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
"markdownlint-rule-relative-links": "3.0.0",
|
"markdownlint-rule-relative-links": "3.0.0",
|
||||||
"replace-in-files-cli": "3.0.0",
|
"replace-in-files-cli": "3.0.0",
|
||||||
"semantic-release": "23.1.1",
|
"semantic-release": "23.1.1",
|
||||||
"turbo": "2.0.9",
|
"turbo": "2.0.10",
|
||||||
"typescript": "catalog:"
|
"typescript": "catalog:"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
"use client"
|
"use client"
|
||||||
|
|
||||||
import Giscus from "@giscus/react"
|
import Giscus from "@giscus/react"
|
||||||
import { useTheme } from "@repo/ui/Header/SwitchTheme"
|
import { useTheme } from "@repo/ui/Layout/Header/SwitchTheme"
|
||||||
|
|
||||||
interface BlogPostCommentsProps {}
|
interface BlogPostCommentsProps {}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { getISODate } from "@repo/utils/dates"
|
import { getISODate } from "@repo/utils/dates"
|
||||||
import "katex/dist/katex.min.css"
|
import "katex/dist/katex.min.css"
|
||||||
|
|
||||||
import { Typography } from "@repo/ui/design/Typography"
|
import { Typography } from "@repo/ui/Design/Typography"
|
||||||
import { MainLayout } from "@repo/ui/MainLayout"
|
import { MainLayout } from "@repo/ui/Layout/MainLayout"
|
||||||
import type { BlogPost } from "./BlogPost"
|
import type { BlogPost } from "./BlogPost"
|
||||||
import { BlogPostContent } from "./BlogPostContent"
|
import { BlogPostContent } from "./BlogPostContent"
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Link } from "@repo/i18n/navigation"
|
import { Link } from "@repo/i18n/navigation"
|
||||||
import { Section, SectionContent } from "@repo/ui/design/Section"
|
import { Typography } from "@repo/ui/Design/Typography"
|
||||||
import { Typography } from "@repo/ui/design/Typography"
|
import { Section, SectionContent } from "@repo/ui/Layout/Section"
|
||||||
import { getISODate } from "@repo/utils/dates"
|
import { getISODate } from "@repo/utils/dates"
|
||||||
import type { BlogPost } from "./BlogPost"
|
import type { BlogPost } from "./BlogPost"
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import { BLOG_POST_MOCK } from "../BlogPost"
|
|||||||
import { BlogPostUI as BlogPostUIComponent } from "../BlogPostUI"
|
import { BlogPostUI as BlogPostUIComponent } from "../BlogPostUI"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/Blog/BlogPostUI",
|
title: "Blog/BlogPostUI",
|
||||||
component: BlogPostUIComponent,
|
component: BlogPostUIComponent,
|
||||||
} satisfies Meta<typeof BlogPostUIComponent>
|
} satisfies Meta<typeof BlogPostUIComponent>
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import { BLOG_POST_MOCK } from "../BlogPost"
|
|||||||
import { BlogPosts as BlogPostsComponent } from "../BlogPosts"
|
import { BlogPosts as BlogPostsComponent } from "../BlogPosts"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/Blog/BlogPosts",
|
title: "Blog/BlogPosts",
|
||||||
component: BlogPostsComponent,
|
component: BlogPostsComponent,
|
||||||
} satisfies Meta<typeof BlogPostsComponent>
|
} satisfies Meta<typeof BlogPostsComponent>
|
||||||
|
|
||||||
|
@ -4,22 +4,22 @@
|
|||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": {
|
"exports": {
|
||||||
"./About": "./src/About/About.tsx",
|
"./Design/Button": "./src/Design/Button/Button.tsx",
|
||||||
"./design/Button": "./src/design/Button/Button.tsx",
|
"./Design/Link": "./src/Design/Link/Link.tsx",
|
||||||
"./design/Link": "./src/design/Link/Link.tsx",
|
"./Design/Spinner": "./src/Design/Spinner/Spinner.tsx",
|
||||||
"./design/Section": "./src/design/Section/Section.tsx",
|
"./Design/Typography": "./src/Design/Typography/Typography.tsx",
|
||||||
"./design/Spinner": "./src/design/Spinner/Spinner.tsx",
|
|
||||||
"./design/Typography": "./src/design/Typography/Typography.tsx",
|
|
||||||
"./Errors/ErrorNotFound": "./src/Errors/ErrorNotFound/ErrorNotFound.tsx",
|
"./Errors/ErrorNotFound": "./src/Errors/ErrorNotFound/ErrorNotFound.tsx",
|
||||||
"./Errors/ErrorServer": "./src/Errors/ErrorServer/ErrorServer.tsx",
|
"./Errors/ErrorServer": "./src/Errors/ErrorServer/ErrorServer.tsx",
|
||||||
"./Footer": "./src/Footer/Footer.tsx",
|
"./Home/About": "./src/Home/About/About.tsx",
|
||||||
"./Header": "./src/Header/Header.tsx",
|
"./Home/Interests": "./src/Home/Interests/Interests.tsx",
|
||||||
"./Interests": "./src/Interests/Interests.tsx",
|
"./Home/OpenSource": "./src/Home/OpenSource/OpenSource.tsx",
|
||||||
"./Header/SwitchTheme": "./src/Header/SwitchTheme.tsx",
|
"./Home/Portfolio": "./src/Home/Portfolio/Portfolio.tsx",
|
||||||
"./MainLayout": "./src/MainLayout/MainLayout.tsx",
|
"./Home/Skills": "./src/Home/Skills/Skills.tsx",
|
||||||
"./OpenSource": "./src/OpenSource/OpenSource.tsx",
|
"./Layout/Footer": "./src/Layout/Footer/Footer.tsx",
|
||||||
"./Portfolio": "./src/Portfolio/Portfolio.tsx",
|
"./Layout/Header": "./src/Layout/Header/Header.tsx",
|
||||||
"./Skills": "./src/Skills/Skills.tsx"
|
"./Layout/Header/SwitchTheme": "./src/Layout/Header/SwitchTheme.tsx",
|
||||||
|
"./Layout/MainLayout": "./src/Layout/MainLayout/MainLayout.tsx",
|
||||||
|
"./Layout/Section": "./src/Layout/Section/Section.tsx"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint:eslint": "eslint src --max-warnings 0 --report-unused-disable-directives",
|
"lint:eslint": "eslint src --max-warnings 0 --report-unused-disable-directives",
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { MainLayout } from "../../MainLayout/MainLayout"
|
import { Link } from "../../Design/Link/Link"
|
||||||
import { Link } from "../../design/Link/Link"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
import { Section } from "../../design/Section/Section"
|
import { MainLayout } from "../../Layout/MainLayout/MainLayout"
|
||||||
import { Typography } from "../../design/Typography/Typography"
|
import { Section } from "../../Layout/Section/Section"
|
||||||
|
|
||||||
export interface ErrorNotFoundProps {}
|
export interface ErrorNotFoundProps {}
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { useEffect } from "react"
|
import { useEffect } from "react"
|
||||||
import { MainLayout } from "../../MainLayout/MainLayout"
|
import { Button } from "../../Design/Button/Button"
|
||||||
import { Button } from "../../design/Button/Button"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
import { Section } from "../../design/Section/Section"
|
import { MainLayout } from "../../Layout/MainLayout/MainLayout"
|
||||||
import { Typography } from "../../design/Typography/Typography"
|
import { Section } from "../../Layout/Section/Section"
|
||||||
|
|
||||||
export interface ErrorServerProps {
|
export interface ErrorServerProps {
|
||||||
error: Error & { digest?: string }
|
error: Error & { digest?: string }
|
||||||
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { About as AboutComponent } from "./About"
|
import { About as AboutComponent } from "./About"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/About",
|
title: "Home/About",
|
||||||
component: AboutComponent,
|
component: AboutComponent,
|
||||||
} satisfies Meta<typeof AboutComponent>
|
} satisfies Meta<typeof AboutComponent>
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
import { Section, SectionContent } from "../design/Section/Section"
|
import { Section, SectionContent } from "../../Layout/Section/Section"
|
||||||
import { AboutDescription } from "./AboutDescription"
|
import { AboutDescription } from "./AboutDescription"
|
||||||
import { AboutIntroduction } from "./AboutIntroduction"
|
import { AboutIntroduction } from "./AboutIntroduction"
|
||||||
import { AboutList } from "./AboutList/AboutList"
|
import { AboutList } from "./AboutList/AboutList"
|
@ -1,6 +1,6 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { Button } from "../design/Button/Button"
|
import { Button } from "../../Design/Button/Button"
|
||||||
import { Typography } from "../design/Typography/Typography"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
|
|
||||||
export interface AboutDescriptionProps {}
|
export interface AboutDescriptionProps {}
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { Typography } from "../design/Typography/Typography"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
|
|
||||||
export interface AboutIntroductionProps {}
|
export interface AboutIntroductionProps {}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
import { Typography } from "../design/Typography/Typography"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
|
|
||||||
export interface InterestItemProps {
|
export interface InterestItemProps {
|
||||||
title: string
|
title: string
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { Interests as InterestsComponent } from "./Interests"
|
import { Interests as InterestsComponent } from "./Interests"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/Interests",
|
title: "Home/Interests",
|
||||||
component: InterestsComponent,
|
component: InterestsComponent,
|
||||||
} satisfies Meta<typeof InterestsComponent>
|
} satisfies Meta<typeof InterestsComponent>
|
||||||
|
|
@ -1,12 +1,12 @@
|
|||||||
import { GIT_REPO_LINK } from "@repo/utils/constants"
|
import { GIT_REPO_LINK } from "@repo/utils/constants"
|
||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { FaGit, FaMicrochip } from "react-icons/fa"
|
import { FaGit, FaMicrochip } from "react-icons/fa"
|
||||||
import { Link } from "../design/Link/Link"
|
import { Link } from "../../Design/Link/Link"
|
||||||
import {
|
import {
|
||||||
Section,
|
Section,
|
||||||
SectionContent,
|
SectionContent,
|
||||||
SectionTitle,
|
SectionTitle,
|
||||||
} from "../design/Section/Section"
|
} from "../../Layout/Section/Section"
|
||||||
import { InterestItem } from "./InterestItem"
|
import { InterestItem } from "./InterestItem"
|
||||||
|
|
||||||
export interface InterestsProps {}
|
export interface InterestsProps {}
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { OpenSource as OpenSourceComponent } from "./OpenSource"
|
import { OpenSource as OpenSourceComponent } from "./OpenSource"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/OpenSource",
|
title: "Home/OpenSource",
|
||||||
component: OpenSourceComponent,
|
component: OpenSourceComponent,
|
||||||
} satisfies Meta<typeof OpenSourceComponent>
|
} satisfies Meta<typeof OpenSourceComponent>
|
||||||
|
|
@ -3,7 +3,7 @@ import {
|
|||||||
Section,
|
Section,
|
||||||
SectionDescription,
|
SectionDescription,
|
||||||
SectionTitle,
|
SectionTitle,
|
||||||
} from "../design/Section/Section"
|
} from "../../Layout/Section/Section"
|
||||||
import { Repository } from "./Repository"
|
import { Repository } from "./Repository"
|
||||||
|
|
||||||
export interface OpenSourceProps {}
|
export interface OpenSourceProps {}
|
@ -1,6 +1,6 @@
|
|||||||
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
|
import { SectionContent } from "../../Layout/Section/Section"
|
||||||
import { GitHubIcon } from "../About/SocialMediaList/SocialMediaIcons/GitHubIcon"
|
import { GitHubIcon } from "../About/SocialMediaList/SocialMediaIcons/GitHubIcon"
|
||||||
import { SectionContent } from "../design/Section/Section"
|
|
||||||
import { Typography } from "../design/Typography/Typography"
|
|
||||||
|
|
||||||
export interface RepositoryProps {
|
export interface RepositoryProps {
|
||||||
name: string
|
name: string
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { Portfolio as PortfolioComponent } from "./Portfolio"
|
import { Portfolio as PortfolioComponent } from "./Portfolio"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/Portfolio",
|
title: "Home/Portfolio",
|
||||||
component: PortfolioComponent,
|
component: PortfolioComponent,
|
||||||
} satisfies Meta<typeof PortfolioComponent>
|
} satisfies Meta<typeof PortfolioComponent>
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { Section, SectionTitle } from "../design/Section/Section"
|
import { Section, SectionTitle } from "../../Layout/Section/Section"
|
||||||
import { PortfolioItem, type PortfolioProject } from "./PortfolioItem"
|
import { PortfolioItem, type PortfolioProject } from "./PortfolioItem"
|
||||||
|
|
||||||
export interface PortfolioProps {}
|
export interface PortfolioProps {}
|
@ -1,6 +1,6 @@
|
|||||||
import Image from "next/image"
|
import Image from "next/image"
|
||||||
import { SectionContent } from "../design/Section/Section"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
import { Typography } from "../design/Typography/Typography"
|
import { SectionContent } from "../../Layout/Section/Section"
|
||||||
|
|
||||||
export interface PortfolioProject {
|
export interface PortfolioProject {
|
||||||
id: string
|
id: string
|
@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
import Image from "next/image"
|
import Image from "next/image"
|
||||||
import { useMemo } from "react"
|
import { useMemo } from "react"
|
||||||
import { Link } from "../design/Link/Link"
|
import { Link } from "../../Design/Link/Link"
|
||||||
import { useTheme } from "../Header/SwitchTheme"
|
import { useTheme } from "../../Layout/Header/SwitchTheme"
|
||||||
import type { SkillName } from "./skills"
|
import type { SkillName } from "./skills"
|
||||||
import { skills } from "./skills"
|
import { skills } from "./skills"
|
||||||
|
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { Skills as SkillsComponent } from "./Skills"
|
import { Skills as SkillsComponent } from "./Skills"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "Feature/Skills",
|
title: "Home/Skills",
|
||||||
component: SkillsComponent,
|
component: SkillsComponent,
|
||||||
} satisfies Meta<typeof SkillsComponent>
|
} satisfies Meta<typeof SkillsComponent>
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import { Section, SectionTitle } from "../design/Section/Section"
|
import { Section, SectionTitle } from "../../Layout/Section/Section"
|
||||||
import { SkillItem } from "./SkillItem"
|
import { SkillItem } from "./SkillItem"
|
||||||
import { SkillsSection } from "./SkillsSection"
|
import { SkillsSection } from "./SkillsSection"
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
import { SectionContent } from "../design/Section/Section"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
import { Typography } from "../design/Typography/Typography"
|
import { SectionContent } from "../../Layout/Section/Section"
|
||||||
|
|
||||||
export interface SkillsSectionProps extends React.PropsWithChildren {
|
export interface SkillsSectionProps extends React.PropsWithChildren {
|
||||||
title: string
|
title: string
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { Footer as FooterComponent } from "./Footer"
|
import { Footer as FooterComponent } from "./Footer"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "User Interface/Footer",
|
title: "Layout/Footer",
|
||||||
component: FooterComponent,
|
component: FooterComponent,
|
||||||
} satisfies Meta<typeof FooterComponent>
|
} satisfies Meta<typeof FooterComponent>
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
|
|
||||||
import { GIT_REPO_LINK } from "@repo/utils/constants"
|
import { GIT_REPO_LINK } from "@repo/utils/constants"
|
||||||
import { Link } from "../design/Link/Link"
|
import { Link } from "../../Design/Link/Link"
|
||||||
|
|
||||||
export interface FooterProps {
|
export interface FooterProps {
|
||||||
version: string
|
version: string
|
@ -3,7 +3,7 @@ import type { Meta, StoryObj } from "@storybook/react"
|
|||||||
import { Header as HeaderComponent } from "./Header"
|
import { Header as HeaderComponent } from "./Header"
|
||||||
|
|
||||||
const meta = {
|
const meta = {
|
||||||
title: "User Interface/Header",
|
title: "Layout/Header",
|
||||||
component: HeaderComponent,
|
component: HeaderComponent,
|
||||||
} satisfies Meta<typeof HeaderComponent>
|
} satisfies Meta<typeof HeaderComponent>
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
import { useTranslations } from "next-intl"
|
import { useTranslations } from "next-intl"
|
||||||
import Image from "next/image"
|
import Image from "next/image"
|
||||||
import { Link } from "../design/Link/Link"
|
import { Link } from "../../Design/Link/Link"
|
||||||
import { Locales } from "./Locales/Locales"
|
import { Locales } from "./Locales/Locales"
|
||||||
import { SwitchTheme } from "./SwitchTheme"
|
import { SwitchTheme } from "./SwitchTheme"
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
import { classNames } from "@repo/config-tailwind/classNames"
|
import { classNames } from "@repo/config-tailwind/classNames"
|
||||||
import type { TypographyProps } from "../Typography/Typography"
|
import type { TypographyProps } from "../../Design/Typography/Typography"
|
||||||
import { Typography } from "../Typography/Typography"
|
import { Typography } from "../../Design/Typography/Typography"
|
||||||
|
|
||||||
export * from "./RevealFade"
|
export * from "./RevealFade"
|
||||||
|
|
@ -12,6 +12,7 @@ export const getISODate = (date: Date): string => {
|
|||||||
/**
|
/**
|
||||||
* Calculates the age of a person based on their birth date.
|
* Calculates the age of a person based on their birth date.
|
||||||
* @param birthDate
|
* @param birthDate
|
||||||
|
* @returns
|
||||||
*/
|
*/
|
||||||
export const getAge = (birthDate: Date): number => {
|
export const getAge = (birthDate: Date): number => {
|
||||||
const today = new Date()
|
const today = new Date()
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
/**
|
||||||
|
* Capitalize the first letter of a string.
|
||||||
|
* @param string
|
||||||
|
* @returns
|
||||||
|
* @example capitalize("hello, world!") // "Hello, world!"
|
||||||
|
*/
|
||||||
export const capitalize = (string: string): string => {
|
export const capitalize = (string: string): string => {
|
||||||
return string.charAt(0).toUpperCase() + string.slice(1)
|
return string.charAt(0).toUpperCase() + string.slice(1)
|
||||||
}
|
}
|
||||||
|
76
pnpm-lock.yaml
generated
76
pnpm-lock.yaml
generated
@ -246,8 +246,8 @@ importers:
|
|||||||
specifier: 23.1.1
|
specifier: 23.1.1
|
||||||
version: 23.1.1(typescript@5.5.4)
|
version: 23.1.1(typescript@5.5.4)
|
||||||
turbo:
|
turbo:
|
||||||
specifier: 2.0.9
|
specifier: 2.0.10
|
||||||
version: 2.0.9
|
version: 2.0.10
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 5.5.4
|
version: 5.5.4
|
||||||
@ -3624,8 +3624,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
|
resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
caniuse-lite@1.0.30001644:
|
caniuse-lite@1.0.30001645:
|
||||||
resolution: {integrity: sha512-YGvlOZB4QhZuiis+ETS0VXR+MExbFf4fZYYeMTEE0aTQd/RdIjkTyZjLrbYVKnHzppDvnOhritRVv+i7Go6mHw==}
|
resolution: {integrity: sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==}
|
||||||
|
|
||||||
cardinal@2.1.1:
|
cardinal@2.1.1:
|
||||||
resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
|
resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==}
|
||||||
@ -4269,8 +4269,8 @@ packages:
|
|||||||
ee-first@1.1.1:
|
ee-first@1.1.1:
|
||||||
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
||||||
|
|
||||||
electron-to-chromium@1.5.3:
|
electron-to-chromium@1.5.4:
|
||||||
resolution: {integrity: sha512-QNdYSS5i8D9axWp/6XIezRObRHqaav/ur9z1VzCDUCH1XIFOr9WQk5xmgunhsTpjjgDy3oLxO/WMOVZlpUQrlA==}
|
resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==}
|
||||||
|
|
||||||
elliptic@6.5.6:
|
elliptic@6.5.6:
|
||||||
resolution: {integrity: sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==}
|
resolution: {integrity: sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==}
|
||||||
@ -8111,38 +8111,38 @@ packages:
|
|||||||
tty-browserify@0.0.1:
|
tty-browserify@0.0.1:
|
||||||
resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==}
|
resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==}
|
||||||
|
|
||||||
turbo-darwin-64@2.0.9:
|
turbo-darwin-64@2.0.10:
|
||||||
resolution: {integrity: sha512-owlGsOaExuVGBUfrnJwjkL1BWlvefjSKczEAcpLx4BI7Oh6ttakOi+JyomkPkFlYElRpjbvlR2gP8WIn6M/+xQ==}
|
resolution: {integrity: sha512-ND4hohx0wrd0AUsCf2RsdavlzUWVi0JU3vX5Vn2+wk3GG5RcZWIKi3y+it9MjgYuqqlCystkDbeamfH05iiQBQ==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
turbo-darwin-arm64@2.0.9:
|
turbo-darwin-arm64@2.0.10:
|
||||||
resolution: {integrity: sha512-XAXkKkePth5ZPPE/9G9tTnPQx0C8UTkGWmNGYkpmGgRr8NedW+HrPsi9N0HcjzzIH9A4TpNYvtiV+WcwdaEjKA==}
|
resolution: {integrity: sha512-cvHMMi1jDiiVl5ls1nWwXyanH7mB+xD3oYyZOC3NzZdFAfce3CWpL6hgUnK2CFxbdvaHQTizkQEgsHvUeD9nTQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
turbo-linux-64@2.0.9:
|
turbo-linux-64@2.0.10:
|
||||||
resolution: {integrity: sha512-l9wSgEjrCFM1aG16zItBsZ206ZlhSSx1owB8Cgskfv0XyIXRGHRkluihiaxkp+UeU5WoEfz4EN5toc+ICA0q0w==}
|
resolution: {integrity: sha512-dPRwHrKkzyc/VuQLfhOeYLkBxA60vvLZyn9pXChRF0zyimg04OnhBYcKBNkfWMUU+Z1gQDFEvfyvnV9EEHLh0Q==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
turbo-linux-arm64@2.0.9:
|
turbo-linux-arm64@2.0.10:
|
||||||
resolution: {integrity: sha512-gRnjxXRne18B27SwxXMqL3fJu7jw/8kBrOBTBNRSmZZiG1Uu3nbnP7b4lgrA/bCku6C0Wligwqurvtpq6+nFHA==}
|
resolution: {integrity: sha512-6qsYl+b1gf243QbL6cw+TbgUEWo6/krCCWDQjVg/8Znx45rkXnTJUqtIAMkQQsT+t7d3UU8hreQ77pjOW59LcQ==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
turbo-windows-64@2.0.9:
|
turbo-windows-64@2.0.10:
|
||||||
resolution: {integrity: sha512-ZVo0apxUvaRq4Vm1qhsfqKKhtRgReYlBVf9MQvVU1O9AoyydEQvLDO1ryqpXDZWpcHoFxHAQc9msjAMtE5K2lA==}
|
resolution: {integrity: sha512-rkMOqvwN7hmMJNeChj63ZpLlIF6b9QC0jW/IbOMgcZMLcvz9iF+qCc2yaeDWgfOgLsNjhtv1rlhimShUuasSXw==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
turbo-windows-arm64@2.0.9:
|
turbo-windows-arm64@2.0.10:
|
||||||
resolution: {integrity: sha512-sGRz7c5Pey6y7y9OKi8ypbWNuIRPF9y8xcMqL56OZifSUSo+X2EOsOleR9MKxQXVaqHPGOUKWsE6y8hxBi9pag==}
|
resolution: {integrity: sha512-r7HQScx+CpO0p+Mw97Yq63uUAIwTfEUXRX6qxzeipBK+mTsnV1A6dTTYeVLD3S5AlL8GGdXddx0swyDeeVkQng==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
turbo@2.0.9:
|
turbo@2.0.10:
|
||||||
resolution: {integrity: sha512-QaLaUL1CqblSKKPgLrFW3lZWkWG4pGBQNW+q1ScJB5v1D/nFWtsrD/yZljW/bdawg90ihi4/ftQJ3h6fz1FamA==}
|
resolution: {integrity: sha512-1t10h9bWl94/zktjzVWwTerJL3kIMDSA8mfibr1bevGLjF0DsiHOJFkCQFa5QABK0eXb0Af5mdRehLRBVem0Qg==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
tween-functions@1.2.0:
|
tween-functions@1.2.0:
|
||||||
@ -12234,8 +12234,8 @@ snapshots:
|
|||||||
|
|
||||||
browserslist@4.23.2:
|
browserslist@4.23.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
caniuse-lite: 1.0.30001644
|
caniuse-lite: 1.0.30001645
|
||||||
electron-to-chromium: 1.5.3
|
electron-to-chromium: 1.5.4
|
||||||
node-releases: 2.0.18
|
node-releases: 2.0.18
|
||||||
update-browserslist-db: 1.1.0(browserslist@4.23.2)
|
update-browserslist-db: 1.1.0(browserslist@4.23.2)
|
||||||
|
|
||||||
@ -12297,7 +12297,7 @@ snapshots:
|
|||||||
|
|
||||||
camelcase@6.3.0: {}
|
camelcase@6.3.0: {}
|
||||||
|
|
||||||
caniuse-lite@1.0.30001644: {}
|
caniuse-lite@1.0.30001645: {}
|
||||||
|
|
||||||
cardinal@2.1.1:
|
cardinal@2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -12932,7 +12932,7 @@ snapshots:
|
|||||||
|
|
||||||
ee-first@1.1.1: {}
|
ee-first@1.1.1: {}
|
||||||
|
|
||||||
electron-to-chromium@1.5.3: {}
|
electron-to-chromium@1.5.4: {}
|
||||||
|
|
||||||
elliptic@6.5.6:
|
elliptic@6.5.6:
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -16004,7 +16004,7 @@ snapshots:
|
|||||||
'@next/env': 14.2.5
|
'@next/env': 14.2.5
|
||||||
'@swc/helpers': 0.5.5
|
'@swc/helpers': 0.5.5
|
||||||
busboy: 1.6.0
|
busboy: 1.6.0
|
||||||
caniuse-lite: 1.0.30001644
|
caniuse-lite: 1.0.30001645
|
||||||
graceful-fs: 4.2.11
|
graceful-fs: 4.2.11
|
||||||
postcss: 8.4.31
|
postcss: 8.4.31
|
||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
@ -17907,32 +17907,32 @@ snapshots:
|
|||||||
|
|
||||||
tty-browserify@0.0.1: {}
|
tty-browserify@0.0.1: {}
|
||||||
|
|
||||||
turbo-darwin-64@2.0.9:
|
turbo-darwin-64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-darwin-arm64@2.0.9:
|
turbo-darwin-arm64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-linux-64@2.0.9:
|
turbo-linux-64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-linux-arm64@2.0.9:
|
turbo-linux-arm64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-windows-64@2.0.9:
|
turbo-windows-64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-windows-arm64@2.0.9:
|
turbo-windows-arm64@2.0.10:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo@2.0.9:
|
turbo@2.0.10:
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
turbo-darwin-64: 2.0.9
|
turbo-darwin-64: 2.0.10
|
||||||
turbo-darwin-arm64: 2.0.9
|
turbo-darwin-arm64: 2.0.10
|
||||||
turbo-linux-64: 2.0.9
|
turbo-linux-64: 2.0.10
|
||||||
turbo-linux-arm64: 2.0.9
|
turbo-linux-arm64: 2.0.10
|
||||||
turbo-windows-64: 2.0.9
|
turbo-windows-64: 2.0.10
|
||||||
turbo-windows-arm64: 2.0.9
|
turbo-windows-arm64: 2.0.10
|
||||||
|
|
||||||
tween-functions@1.2.0: {}
|
tween-functions@1.2.0: {}
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ catalog:
|
|||||||
"typescript": "5.5.4"
|
"typescript": "5.5.4"
|
||||||
"@total-typescript/ts-reset": "0.5.1"
|
"@total-typescript/ts-reset": "0.5.1"
|
||||||
"@types/node": "22.0.0"
|
"@types/node": "22.0.0"
|
||||||
"tsx": "4.16.2"
|
|
||||||
|
|
||||||
# ESLint
|
# ESLint
|
||||||
"@typescript-eslint/eslint-plugin": "7.18.0"
|
"@typescript-eslint/eslint-plugin": "7.18.0"
|
||||||
|
Loading…
Reference in New Issue
Block a user