Skip to content

Commit

Permalink
Merge pull request #60 from GalsenDev221/dev
Browse files Browse the repository at this point in the history
(FEAT) / Final `Hacktoberfest` contribution 🍂
  • Loading branch information
daoodaba975 authored Oct 31, 2024
2 parents 01188a6 + fbf2540 commit 5713882
Show file tree
Hide file tree
Showing 9 changed files with 228 additions and 41 deletions.
33 changes: 24 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Galsen UI

# GalsenUI

**GalsenUI** est une bibliothèque de composants **Tailwind CSS** et **CSS pur** réutilisables, conçue pour la communauté des développeurs du Sénégal. Ce projet **made in Senegal** a pour but de partager des éléments UI modernes et flexibles pour aider les développeurs à accélérer la création de projets et renforcer les initiatives de la communauté **Galsen Dev**.
**Galsen UI** est une bibliothèque de composants **Tailwind CSS** et **CSS pur** réutilisables, conçue pour la communauté des développeurs du Sénégal. Ce projet **made in Senegal** a pour but de partager des éléments UI modernes et flexibles pour aider les développeurs à accélérer la création de projets.
Ce projet vient renforcer les projets et activités de la communauté **Galsen DEV**.

## Sommaire

- [GalsenUI](#galsenui)
- [Galsen UI](#galsen-ui)
- [Sommaire](#sommaire)
- [Aperçu du projet](#aperçu-du-projet)
- [Prérequis](#prérequis)
Expand All @@ -17,15 +17,29 @@

## Aperçu du projet

**GalsenUI** propose une collection de composants UI prêts à l'emploi, faciles à intégrer dans vos projets. Conçus avec **Tailwind CSS** et **CSS pur**, ces composants sont entièrement personnalisables, réactifs, et adaptés aux besoins des développeurs modernes.
**Galsen UI** propose une collection de composants UI prêts à l'emploi, faciles à intégrer dans vos projets. Conçus avec **Tailwind CSS** et **CSS** pur, ces composants sont entièrement personnalisables, réactifs, et adaptés aux besoins des développeurs modernes.

L’objectif est de fournir aux développeurs une base solide pour créer des applications élégantes et accessibles, en s'appuyant sur les meilleures pratiques de développement front-end.

![NextJS](https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=next.js&logoColor=white)
![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)
![TailwindCSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white)
![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)
![MDX](https://img.shields.io/badge/MDX-1B1F24?style=for-the-badge&logo=mdx&logoColor=white)

---

![Made-In-Senegal](./public/svgs/madeinsenegal.svg)

🚧 Si vous souhaitez contribuer à ce projet, veuillez lire **[CONTRIBUTING.md](../CONTRIBUTING.md)** d'abord !

---

## Prérequis

Avant de commencer, assurez-vous davoir les éléments suivants installés :
Avant de commencer, assurez-vous d'avoir les éléments suivants installés :

- **Node.js** (version 20.x ou supérieure recommandée) - [Télécharger Node.js](https://nodejs.org)
- Node.js (Version 20.x ou supérieure recommandée) : [Télécharger Node.js](https://nodejs.org)

## Installation

Expand Down Expand Up @@ -65,7 +79,7 @@ Une fois le projet lancé, ouvrez votre navigateur et accédez à [http://localh

## Contribuer

Les contributions sont les bienvenues ! Pour contribuer à **GalsenUI**, suivez les étapes ci-dessous :
Les contributions sont les bienvenues ! Pour contribuer à **Galsen UI**, suivez les étapes ci-dessous :

1. **Fork** le dépôt.
2. **Créez une branche** pour votre fonctionnalité (`git checkout -b fonctionnalité/ma-fonctionnalité`).
Expand All @@ -79,4 +93,5 @@ Nous vous invitons également à consulter notre [Code de Conduite](CODE_OF_COND

Ce projet est sous licence [MIT](LICENSE.md). Vous êtes libre de l'utiliser et de le modifier selon vos besoins.

Merci d'utiliser **GalsenUI** et de soutenir la communauté Galsen Dev ! Pour toute question, suggestion ou amélioration, n'hésitez pas à nous contacter.
Merci d'utiliser **Galsen UI** et de soutenir la communauté Galsen DEV !
Pour toute question, suggestion ou amélioration, n'hésitez pas à nous contacter.
33 changes: 21 additions & 12 deletions app/components/[componentName]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,54 +1,63 @@
// "use client";
import { promises as fs } from "fs";
import { serialize } from 'next-mdx-remote/serialize'
import { serialize } from "next-mdx-remote/serialize";
import RemoteMdxWrapper from "@/components/Mdx/RemoteMdxWrapper";
import RenderHTMLFiles from '@/components/galsenUiComponents/RenderHTMLFiles';
import RenderHTMLFiles from "@/components/galsenUiComponents/RenderHTMLFiles";
import H1 from "@/components/Mdx/H1";
import ErrorMessage from "@/components/Error/ErrorMessage";
import Link from "next/link";


type PageProps = {
params: { componentName: string };
};

// TODO: I'll be back to refactor: Because components should not handle logic
export default async function Page({ params }: PageProps) {

// <ErrorMessage message="Veuillez vérifier si cette catégorie de composants existe." />

// <ErrorMessage
// title="Erreur de connexion"
// message="Impossible de se connecter au serveur. Veuillez réessayer."
// dismissible
// onDismiss={() => console.log('Message fermé')}
// className="my-8"
// />

// TODO: recuperer les titres et description de chaque composant
const componentsData = await fs.readFile(
process.cwd() + `/src/data/components/galsen-ui-${params.componentName}.mdx`,
process.cwd() +
`/src/data/components/galsen-ui-${params.componentName}.mdx`,
"utf8"
)
);
const mdxSource = await serialize(componentsData, { parseFrontmatter: true });

const componentHTMLFiles = await fs.readdir(
process.cwd() + `/public/components/${params.componentName}`,
"utf8"
)
);

const mdxScope = {
files: componentHTMLFiles,
componentSlug: params.componentName,
components: mdxSource.frontmatter.components
}
components: mdxSource.frontmatter.components,
};

return (
<main className="">
<section className="px-4 py-16 sm:max-w-7xl sm:mx-auto">
<Link href="/" passHref>
<button className="py-2 px-4 mb-3 bg-blue-500 text-white rounded hover:bg-blue-600">
Back to Home
Retour
</button>
</Link>
<RemoteMdxWrapper
mdxSource={mdxSource}
mdxScope={mdxScope}
mdxComponents={{
h1: H1,
RenderHTMLFiles
}} />
RenderHTMLFiles,
}}
/>
</section>
</main>
);
Expand Down
99 changes: 90 additions & 9 deletions components/Error/ErrorMessage.tsx
Original file line number Diff line number Diff line change
@@ -1,14 +1,95 @@
import React from 'react'
import React from "react";

type PropsType = {
message: string
interface ErrorMessageProps {
message: string;
title?: string;
className?: string;
dismissible?: boolean;
onDismiss?: () => void;
}

const ErrorMessage = ({ message }: PropsType) => {
const ErrorMessage = ({
message,
title,
className = "",
dismissible = false,
onDismiss,
}: ErrorMessageProps) => {
const [isVisible, setIsVisible] = React.useState(true);

const handleDismiss = React.useCallback(() => {
setIsVisible(false);
onDismiss?.();
}, [onDismiss]);

if (!isVisible) return null;

return (
// TODO: this components must be redesigned
<div className='text-center mt-8'>{message}</div>
)
}
<div
role="alert"
className={`
bg-red-50
border-l-4
border-red-500
p-4
rounded-r-lg
shadow-sm
my-4
relative
transform
transition-all
duration-300
hover:shadow-md
${className}
`}
>
<div className="flex items-start">
<div className="flex-shrink-0">
<svg
className="h-5 w-5 text-red-500"
viewBox="0 0 20 20"
fill="currentColor"
>
<path
fillRule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z"
clipRule="evenodd"
/>
</svg>
</div>

<div className="ml-3">
{title && (
<h3 className="text-sm font-medium text-red-800">{title}</h3>
)}
<div className={`text-sm text-red-700 ${title ? "mt-1" : ""}`}>
{message}
</div>
</div>
{dismissible && (
<button
onClick={handleDismiss}
className="absolute top-4 right-4 text-red-500 hover:text-red-700 transition-colors"
aria-label="Fermer le message d'erreur"
>
<svg
className="h-4 w-4"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M6 18L18 6M6 6l12 12"
/>
</svg>
</button>
)}
</div>
</div>
);
};

export default ErrorMessage
export default ErrorMessage;
33 changes: 22 additions & 11 deletions components/TheFooter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,29 @@ export default function TheFooter() {
return (
<footer className="mt-14 border-t border-neutral-100">
<div className="px-4 py-5 flex flex-col gap-2 items-center justify-between sm:max-w-7xl sm:mx-auto sm:flex-row md:py-8">
<span>&copy; Galsen UI. Tous droits réservés</span>
<span>&copy; Galsen UI. Tous droits réservés.</span>
<ul className="inline-flex items-center gap-4">
<li className="text-sm">
<a href="https://www.facebook.com/watch/galsendev221/" target="_blank" rel="noopener noreferrer" className="hover:text-blue-600">Facebook</a>
</li>
<li className="text-sm">
<a href="https://x.com/galsendev221" target="_blank" rel="noopener noreferrer" className="hover:text-blue-400">Twitter</a>
</li>
<li className="text-sm">
<a href="https://github.com/GalsenDev221/" target="_blank" rel="noopener noreferrer" className="hover:text-gray-600">Github</a>
</li>
</ul>
<li className="text-sm">
<a
href="https://x.com/galsendev221"
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-400"
>
Twitter
</a>
</li>
<li className="text-sm">
<a
href="https://github.com/GalsenDev221"
target="_blank"
rel="noopener noreferrer"
className="hover:text-gray-600"
>
Github
</a>
</li>
</ul>
</div>
</footer>
);
Expand Down
8 changes: 8 additions & 0 deletions public/components/switchs/1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div class="flex justify-center items-center h-screen space-x-4">
<label class="inline-flex relative items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" />
<div
class="w-11 h-6 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"
></div>
</label>
</div>
8 changes: 8 additions & 0 deletions public/components/switchs/2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<div class="flex justify-center items-center h-screen space-x-4">
<label class="inline-flex relative items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer" />
<div
class="w-12 h-7 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[3px] after:left-[3px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-6 after:w-6 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"
></div>
</label>
</div>
6 changes: 6 additions & 0 deletions public/components/switchs/3.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<div class="flex justify-center items-center h-screen space-x-4">
<label class="inline-flex relative items-center cursor-pointer">
<input type="checkbox" value="" class="sr-only peer">
<div class="w-10 h-5 bg-gray-200 peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 rounded-full peer dark:bg-gray-700 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[1px] after:left-[1px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-4 after:w-4 after:transition-all dark:border-gray-600 peer-checked:bg-blue-600"></div>
</label>
</div>
Loading

0 comments on commit 5713882

Please sign in to comment.