diff --git a/nuxt.config.js b/nuxt.config.ts similarity index 79% rename from nuxt.config.js rename to nuxt.config.ts index e5656e9..26354c1 100644 --- a/nuxt.config.js +++ b/nuxt.config.ts @@ -6,17 +6,14 @@ import build from './settings/Build' import arch from './settings/Arch' import plugins from './settings/Plugins' import css from './settings/Style' +import {NuxtConfig} from "@nuxt/types"; export default defineNuxtConfig({ - // Auto import components: https://go.nuxtjs.dev/config-components - components: true, - head, modules, ...arch, build, plugins, css, - buildModules, - -}) + buildModules +} as any as NuxtConfig) diff --git a/settings/Arch.ts b/settings/Arch.ts index 8b6da9a..80f90e4 100644 --- a/settings/Arch.ts +++ b/settings/Arch.ts @@ -28,6 +28,8 @@ const server = { port: 3333 } +const components = true + const buildDir = 'build' -export default { srcDir, dir, generate, build, pageTransition, target, server, buildDir } +export default { srcDir, dir, generate, build, pageTransition, target, server, buildDir, components } diff --git a/settings/Head.ts b/settings/Head.ts index 426e5ed..25789bf 100644 --- a/settings/Head.ts +++ b/settings/Head.ts @@ -1,9 +1,9 @@ // Global page headers: https://go.nuxtjs.dev/config-head const params = { - title: 'nuxt-ts-app', + title: 'artsite', color: '#0DA5FF', image: '/images/image.jpg', - url: 'https://my-domain.com', + url: 'https://arthurdanjou.fr', favicon: { type: 'image/jpg', href: '/favicon.jpg', diff --git a/settings/Modules.ts b/settings/Modules.ts index 67f3924..dba93b2 100644 --- a/settings/Modules.ts +++ b/settings/Modules.ts @@ -15,9 +15,9 @@ const i18n = { }, { code: 'fr', + name: 'Français', iso: 'fr-FR', - file: 'fr-FR.ts', - name: 'Français' + file: 'fr-FR.ts' }, ], strategy: 'no_prefix', diff --git a/src/assets/README.md b/src/assets/README.md deleted file mode 100644 index 34766f9..0000000 --- a/src/assets/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# ASSETS - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your un-compiled assets such as LESS, SASS, or JavaScript. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#webpacked). diff --git a/src/assets/css/style.scss b/src/assets/css/style.scss new file mode 100644 index 0000000..685318b --- /dev/null +++ b/src/assets/css/style.scss @@ -0,0 +1,20 @@ +.icon { + transform: translate(3px, -3px); + z-index: 1; +} + +img, svg { + position: static; +} + +body { + @apply dark:bg-dark-900 +} + +* { + @apply select-none outline-none; +} + +.nuxt-content-editor { + @apply dark:bg-dark-800 border dark:border-white border-black border-solid; +} diff --git a/src/assets/css/tailwind.css b/src/assets/css/tailwind.css new file mode 100644 index 0000000..38191fb --- /dev/null +++ b/src/assets/css/tailwind.css @@ -0,0 +1,6 @@ +@import url('https://fonts.googleapis.com/css2?family=Raleway&display=swap'); +@import "./style.scss"; + +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/components/Skill.vue b/src/components/Skill.vue new file mode 100644 index 0000000..568ce9c --- /dev/null +++ b/src/components/Skill.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/content/hello.md b/src/content/hello.md deleted file mode 100644 index d377a41..0000000 --- a/src/content/hello.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Getting started -description: 'Empower your NuxtJS application with @nuxt/content module: write in a content/ directory and fetch your Markdown, JSON, YAML and CSV files through a MongoDB like API, acting as a Git-based Headless CMS.' ---- - -Empower your NuxtJS application with `@nuxtjs/content` module: write in a `content/` directory and fetch your Markdown, JSON, YAML and CSV files through a MongoDB like API, acting as a **Git-based Headless CMS**. - -## Writing content - -Learn how to write your `content/`, supporting Markdown, YAML, CSV and JSON: https://content.nuxtjs.org/writing. - -## Fetching content - -Learn how to fetch your content with `$content`: https://content.nuxtjs.org/fetching. - -## Displaying content - -Learn how to display your Markdown content with the `` component directly in your template: https://content.nuxtjs.org/displaying. \ No newline at end of file diff --git a/src/layouts/README.md b/src/layouts/README.md deleted file mode 100644 index cad1ad5..0000000 --- a/src/layouts/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# LAYOUTS - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your Application Layouts. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/views#layouts). diff --git a/src/layouts/default.vue b/src/layouts/default.vue index 6c2077d..ab72648 100644 --- a/src/layouts/default.vue +++ b/src/layouts/default.vue @@ -1,62 +1,18 @@ - diff --git a/src/layouts/error.vue b/src/layouts/error.vue new file mode 100644 index 0000000..ace00c9 --- /dev/null +++ b/src/layouts/error.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/locales/en-EN.ts b/src/locales/en-EN.ts index bc7fc69..9ad5525 100644 --- a/src/locales/en-EN.ts +++ b/src/locales/en-EN.ts @@ -1,3 +1,227 @@ export default { - test: "test" + header: { + title: 'Arthur Danjou', + home: 'Home', + about: 'About', + blog: 'Blog', + work: 'Work', + contact: 'Contact' + }, + + footer: { + find_me: 'Find me on :', + separator: 'et by', + links_click: '(Clic it\'s free 🔗)', + credits: 'Developed and designed with ❤ using', + credits_separator: 'by', + copyrights: '© Copyright {date} - All rights reserved' + }, + + error: { + back: 'Go to home', + no_page: 'The page you are looking for does not exist', + internal: 'Internal error', + error: 'Error' + }, + + part: { + about: 'About', + blog: 'My Blog', + work: 'My Work', + contact: 'Contact me', + about_description: 'Learn more about me, how I work and who I am', + blog_description: 'I write articles about my life, development and my passions', + work_description: 'Discover my creations to get an idea of my skills', + contact_description: 'Find all my social networks to contact me' + }, + + home: { + banner: { + role: 'Developer & student', + hello: 'Hello, I am', + description: 'I am a {age} year old self-taught developer. I live in Paris 🇫🇷. I love creating more or less useful applications and software. I use modern technologies to get the best possible result ✨', + }, + }, + + blog: { + read: { + back: 'Go back', + thanks: 'Thanks for reading to the end!', + time: 'Reading' + }, + tweet: 'I love a new post from @ArthurDanj, check it out here:', + no_posts: 'Unfortunately there are no items available yet. Come back later 😉', + tags: { + search: 'Are you looking for a specific type of article? Test the search by tag 🏷', + back: 'Return to all articles', + current: 'List of articles with the tag \'{tag}\':' + }, + pagination: { + prev: 'Previous', + next: 'Next' + } + }, + + about: { + banner: { + hello: 'Hello, I am', + 1: 'I am a young creative developer who loves to tinker and touch everything! I am very interested in new technologies, development and IT.', + 2: 'I love sharing my knowledge and helping others through lives on Twitchs, technical articles on my blog, open-source projects or by reviewing community code. As long as I share my passions, I will continue to do this.', + 3: 'I am able to quickly learn new technologies to meet the needs of different projects. I often identify the need for new systems or tools to improve workflow efficiency. I am always motivated by a challenge and like to be well organized to produce consistent results.', + }, + title: { + skills: 'Skills', + interests: 'Interests', + technologies: 'Technologies', + languages: 'Languages', + formations: 'Formations', + experiences: 'Experiences' + }, + interests: { + dev: 'Development', + devops: 'DevOps', + startups: 'Startups & innovative companies', + sysadmin: 'System administration', + trips: 'Trip', + moto: 'Motorbike' + }, + languages: { + fr: 'French', + en: 'English', + native: 'Native', + fluent: 'Fluent' + }, + cv: 'Download my CV', + environment: 'My Environment', + env: { + description: 'My development environment makes it possible to gain in productivity. Indeed, I organize myself in this way to always optimize my time for reflection and development. Here is a list of all my software that I use on a daily basis and my setup.', + ide: 'Text editors', + apps: 'Apps & Softwares', + hosting: 'Hosting & Co', + setup: 'Office setup' + }, + ide: { + java: 'Java editor', + web: 'Web editor', + go: 'Go editor', + db: 'Databases editor', + all: 'All-In-One' + }, + police: 'Font', + console: 'Console', + wsl_2: 'WSL 2', + email_client: 'Email Client', + vpn_client: 'VPN Client', + ftp_client: 'FTP Client', + web_client: 'Web Browser', + design_tool: 'Creation / Graphics', + communication_tool: 'Communication tool', + organisation_tool: 'Organisation tool', + hosting: { + vps: 'VPS hosting', + ndd: 'Domain name' + }, + setup: { + desk: 'Desktop', + phone: 'Phone', + computer: 'Desktop computer', + screen: 'Screen', + keyboard: 'Keyboard', + mouse: 'Mouse', + headphone: 'Headphone', + microphone: 'Headset' + } + }, + + work: { + no_work: 'Unfortunately there are no projects available yet. Come back later 😉', + description: 'Here are the different projects I was able to participate in in my past!', + tech_used: 'Lists of skills used', + go_back: 'Go back' + }, + + contact: { + newsletter: { + title: 'Software & Tech Newsletter 📬', + description: 'Subscribe to not miss my next offers, my next articles and my new projects.', + unfollow: 'No spam. Unsubscribe whenever you want' + }, + form: { + name: 'Name', + mail: 'Mail address', + submit: 'Subscribe', + error: 'Error in the form!', + success: 'Registration confirmed for {email}!' + }, + how_to: { + title: 'How to contact me? ✉', + description: 'Please don\'t hesitate to contact me if you have any questions, think we could work together or if you just want to chat ✌️' + }, + available: { + title: 'Am I available? 🚩', + description: 'This status will be updated in real time to let you know if I am available for work.', + start: 'I am currently', + end: 'for work' + } + }, + + date: { + today: 'Today' + }, + copied: 'Copied', + month: { + '01': 'January', + '02': 'February', + '03': 'March', + '04': 'April', + '05': 'May', + '06': 'June', + '07': 'July', + '08': 'August', + '09': 'September', + 10: 'October', + 11: 'November', + 12: 'December', + }, + hiring: { + status: { + not_available: 'not available', + available: 'available' + } + }, + + tags: { + life: 'Life', + dev: 'Dev', + tech: 'Tech' + }, + + experiences: { + erisium: 'Junior Developer', + freelance: 'FullStack Software & Web FullStack Development', + idemia: 'Discovery of the IT sector & the data-center', + lsam: 'Room cleaning - Waiter - Taking orders - Welcoming customers' + }, + + formations: { + freelance: { + title: 'Self-learning', + description: 'Java, TypeScript, Go, etc...' + }, + dnb: { + title: 'Diplôme National du Brevet', + description: 'Obtention du Brevet mention Très Bien' + }, + bac: { + title: 'Baccalauréat', + description: 'General Baccalaureate Physics / Chemistry & Mathematics' + } + }, + + works: { + artapi: 'ArtApi is my personal API connected to my various instances', + artsite: 'ArtSite is my personal website creating a single point of contact', + erisium: 'Erisium is a french minecraft mini-game server.', + artclick: 'ArtClick is my url shortener' + } } diff --git a/src/locales/fr-FR.ts b/src/locales/fr-FR.ts index 3c278e8..68e4493 100644 --- a/src/locales/fr-FR.ts +++ b/src/locales/fr-FR.ts @@ -1,3 +1,227 @@ export default { - test: "teste" + header: { + title: 'Arthur Danjou', + home: 'Accueil', + about: 'Moi', + blog: 'Blog', + work: 'Travail', + contact: 'Contact' + }, + + footer: { + find_me: 'Retrouvez moi sur :', + separator: 'et par', + links_click: '(Clique c\'est gratuit 🔗)', + credits: 'Développé et conçu avec ❤ en utilisant', + credits_separator: 'par', + copyrights: '© Copyright {date} - Tous droits réservés' + }, + + error: { + back: 'Revenir à l\'accueil', + no_page: 'La page demandée n\'existe pas', + internal: 'Erreur interne', + error: 'Erreur' + }, + + part: { + about: 'A Propos', + blog: 'Mon Blog', + work: 'Mon Travail', + contact: 'Me Contacter', + about_description: 'Apprenez en plus à mon propos, comment je travaille et qui je suis', + blog_description: 'Je rédige des articles concernant ma vie, le développement et mes passions', + work_description: 'Découvrez mes créations pour avoir une idée de mes compétences', + contact_description: 'Retrouvez tous mes réseaux sociaux pour me contacter' + }, + + home: { + banner: { + role: 'Développeur & étudiant', + hello: 'Bonjour, je suis', + description: 'Je suis un jeune développeur autodidacte de {age} ans. J\'habite à Paris 🇫🇷. J\'adore créer des applications et des logiciels plus ou moins utiles. J\'utilise des technologies modernes pour obtenir le meilleur résultat possible ✨', + }, + }, + + blog: { + read: { + back: 'Retour en arrière', + thanks: 'Merci d\'avoir lu jusqu\'au bout !', + time: 'Lecture' + }, + tweet: 'J\'aime un nouvel article d\'@ArthurDanj, venez le découvrir ici :', + no_posts: 'Malheureusement il n\'y a pas encore d\'articles disponibles. Reviens plus tard 😉', + tags: { + search: 'Vous recherchez un type d\'article en particulier ? Tester la recherche par tag 🏷', + back: 'Revenir à tous les articles', + current: 'Liste des articles possédant le tag \'{tag}\' :' + }, + pagination: { + prev: 'Précédent', + next: 'Suivant' + } + }, + + about: { + banner: { + hello: 'Bonjour, je suis', + 1: 'Je suis un jeune développeur créatif qui aime bricoler et toucher à tout ! Je m\'intéresse beaucoup aux nouvelles technologies, au développement et à l\'informatique.', + 2: 'J\'adore partager mes connaissances et aider les autres à travers des lives sur Twitchs, des articles techniques sur mon blog, des projets open-sources ou encore en relisant du code de la communauté. Tant que je partage mes passions, je continuerai à faire ça.', + 3: 'Je suis capable d\'apprendre rapidement des nouvelles technologies pour répondre aux besoins des différents projets. J\'identifie souvent le besoin de nouveaux systèmes ou outils pour améliorer l\'efficacité du flux de travail. Je suis toujours motivé par un défi et j\'aime être bien organisé pour produire des résultats cohérents.', + }, + title: { + skills: 'Compétences', + interests: 'Intérêts', + technologies: 'Technologies', + languages: 'Langues', + formations: 'Formations', + experiences: 'Expériences' + }, + interests: { + dev: 'Développement', + devops: 'DevOps', + startups: 'Startups & Entreprises innovantes', + sysadmin: 'Administration système', + trips: 'Voyage', + moto: 'Moto' + }, + languages: { + fr: 'Français', + en: 'Anglais', + native: 'Natal', + fluent: 'Courant' + }, + cv: 'Télécharger mon CV', + environment: 'Mon Environnement', + env: { + description: 'Mon environnement de développement permet de gagner en productivité. En effet, je m\'organise de la sorte à toujours optimiser mon temps de réflexion et de développement. Voici donc une liste de tous mes logiciels que j\'utilise au quotidien et de mon setup.', + ide: 'Editeurs de texte', + apps: 'Apps & Logiciels', + hosting: 'Hébergement', + setup: 'Setup bureautique' + }, + ide: { + java: 'Editeur Java', + web: 'Editeur Web', + go: 'Editeur Go', + db: 'Editeur Bases de données', + all: 'All-In-One' + }, + police: 'Police d\'Ecriture', + console: 'Console', + wsl_2: 'WSL 2', + email_client: 'Client Email', + vpn_client: 'Client VPN', + ftp_client: 'Client FTP', + web_client: 'Navigateur Web', + design_tool: 'Création / Graphisme', + communication_tool: 'Outil de Communication', + organisation_tool: 'Outil d\'Organisation', + hosting: { + vps: 'Hébergeur VPS', + ndd: 'Nom de domaine' + }, + setup: { + desk: 'Bureau', + phone: 'Téléphone', + computer: 'Ordinateur fixe', + screen: 'Ecran', + keyboard: 'Clavier', + mouse: 'Souris', + headphone: 'Ecouteurs', + microphone: 'Casque / Micro' + } + }, + + work: { + no_work: 'Malheureusement il n\'y a pas encore de projets disponibles. Reviens plus tard 😉', + description: 'Voici les différents projets auxquels j\'ai pu participer dans mon passé !', + tech_used: 'Listes des compétences utilisées', + go_back: 'Retour en arrière' + }, + + contact: { + newsletter: { + title: 'Software & Tech Newsletter 📬', + description: 'Abonnez vous pour ne pas louper mes prochaines offres, mes prochains articles et mes nouveaux projets.', + unfollow: 'Pas de spam. Désabonnement quand vous voulez' + }, + form: { + name: 'Prénom', + mail: 'Adresse Mail', + submit: 'S\'abonner', + error: 'Erreur dans le formulaire !', + success: 'Inscription confirmée pour {email} !' + }, + how_to: { + title: 'Comment me contacter ? ✉', + description: 'N\'hésitez pas à me contacter si vous avez des questions, pensez que nous pourrions travailler ensemble ou si vous souhaitez simplement vous discuter ✌️' + }, + available: { + title: 'Suis-je disponible ? 🚩', + description: 'Ce status sera mis à jour en temps réel pour vous indiquer si je suis disponible pour du travail.', + start: 'Je suis actuellement', + end: 'pour du travail' + } + }, + + date: { + today: 'Aujourd\'hui' + }, + copied: 'Copié', + month: { + '01': 'Janvier', + '02': 'Février', + '03': 'Mars', + '04': 'Avril', + '05': 'Mai', + '06': 'Juin', + '07': 'Juillet', + '08': 'Août', + '09': 'Septembre', + 10: 'Octobre', + 11: 'Novembre', + 12: 'Décembre', + }, + hiring: { + status: { + not_available: 'non disponible', + available: 'disponible' + } + }, + + tags: { + life: 'Vie', + dev: 'Dev', + tech: 'Tech' + }, + + experiences: { + erisium: 'Développeur Junior', + freelance: 'Développement FullStack Software & Web FullStack', + idemia: 'Découverte du secteur IT & du data-center', + lsam: 'Nettoyage de la salle – Serveur – Prise de commandes – Accueil des clients' + }, + + formations: { + freelance: { + title: 'Auto-apprentissage', + description: 'Java, TypeScript, Go, etc...' + }, + dnb: { + title: 'Diplôme National du Brevet', + description: 'Obtention du Brevet mention Très Bien' + }, + bac: { + title: 'Baccalauréat', + description: 'Baccalauréat Général Physique/Chimie & Mathématiques' + } + }, + + works: { + artapi: 'ArtApi est mon API personnelle connectée à mes diverses instances.', + artsite: 'ArtSite est mon site personnel créant un point de contact unique.', + erisium: 'Erisium est un serveur minecraft francophone de mini-jeux.', + artclick: 'ArtClick est mon raccourcisseur d\'url' + } } diff --git a/src/middleware/README.md b/src/middleware/README.md deleted file mode 100644 index 01595de..0000000 --- a/src/middleware/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# MIDDLEWARE - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your application middleware. -Middleware let you define custom functions that can be run before rendering either a page or a group of pages. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware). diff --git a/src/plugins/README.md b/src/plugins/README.md deleted file mode 100644 index ca1f9d8..0000000 --- a/src/plugins/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# PLUGINS - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains Javascript plugins that you want to run before mounting the root Vue.js application. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins). diff --git a/src/static/README.md b/src/static/README.md deleted file mode 100644 index cf00435..0000000 --- a/src/static/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# STATIC - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your static files. -Each file inside this directory is mapped to `/`. -Thus you'd want to delete this README.md before deploying to production. - -Example: `/static/robots.txt` is mapped as `/robots.txt`. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/assets#static). diff --git a/src/static/favicon.ico b/src/static/favicon.ico index 3632d0c..5c2de9d 100644 Binary files a/src/static/favicon.ico and b/src/static/favicon.ico differ diff --git a/src/static/favicon.png b/src/static/favicon.png new file mode 100644 index 0000000..14c4e0a Binary files /dev/null and b/src/static/favicon.png differ diff --git a/src/store/README.md b/src/store/README.md deleted file mode 100644 index 1972d27..0000000 --- a/src/store/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# STORE - -**This directory is not required, you can delete it if you don't want to use it.** - -This directory contains your Vuex Store files. -Vuex Store option is implemented in the Nuxt.js framework. - -Creating a file in this directory automatically activates the option in the framework. - -More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..9acd05a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,968 @@ +const colors = require('tailwindcss/colors') + +module.exports = { + purge: { + enabled: process.env.NODE_ENV === 'production', + content: [ + 'components/**/*.vue', + 'layouts/**/*.vue', + 'pages/**/*.vue', + 'plugins/**/*.ts', + 'nuxt.config.ts', + 'content/**/*.md' + ] + }, + presets: [], + darkMode: 'class', + theme: { + extend: { + typography: (theme) => ({ + DEFAULT: { + css: [ + { + a: { + color: theme('colors.green.400'), + transitionDuration: '300ms', + cursor: 'pointer', + borderBottomColor: theme('colors.dark.200'), + borderOpacity: '0%', + borderBottomWidth: '2px', + borderBottomStyle: 'solid', + textDecoration: 'none', + '&:hover': { + borderBottomColor: theme('colors.green.400'), + color: theme('colors.black') + } + } + } + ] + }, + dark: { + css: [ + { + color: theme('colors.dark.100'), + '[class~="lead"]': { + color: theme('colors.dark.100'), + }, + a: { + color: theme('colors.green.400'), + transitionDuration: '300ms', + cursor: 'pointer', + borderBottomColor: theme('colors.dark.200'), + borderBottomWidth: '2px', + borderBottomStyle: 'solid', + textDecoration: 'none', + '&:hover': { + borderBottomColor: theme('colors.green.400'), + color: theme('colors.white') + } + }, + strong: { + color: theme('colors.white'), + }, + 'ol > li::before': { + color: theme('colors.white'), + }, + 'ul > li::before': { + backgroundColor: theme('colors.white'), + }, + hr: { + borderColor: theme('colors.white'), + }, + blockquote: { + color: theme('colors.dark.100'), + borderLeftColor: theme('colors.white'), + }, + h1: { + color: theme('colors.white'), + }, + h2: { + color: theme('colors.white'), + }, + h3: { + color: theme('colors.white'), + }, + h4: { + color: theme('colors.white'), + }, + 'figure figcaption': { + color: theme('colors.dark.700'), + }, + code: { + color: theme('colors.white'), + }, + 'a code': { + color: theme('colors.white'), + }, + thead: { + color: theme('colors.dark.100'), + borderBottomColor: theme('colors.white'), + }, + 'tbody tr': { + borderBottomColor: theme('colors.white'), + }, + } + ] + } + }) + }, + screens: { + sm: '640px', + md: '768px', + lg: '1024px', + xl: '1280px', + '2xl': '1536px', + }, + colors: { + transparent: 'transparent', + current: 'currentColor', + + black: colors.black, + white: colors.white, + rose: colors.rose, + pink: colors.pink, + fuchsia: colors.fuchsia, + purple: colors.purple, + violet: colors.violet, + indigo: colors.indigo, + blue: colors.blue, + lightBlue: colors.lightBlue, + cyan: colors.cyan, + teal: colors.teal, + emerald: colors.emerald, + green: colors.green, + lime: colors.lime, + yellow: colors.yellow, + amber: colors.amber, + orange: colors.orange, + red: colors.red, + warmGray: colors.warmGray, + trueGray: colors.trueGray, + gray: colors.gray, + coolGray: colors.coolGray, + blueGray: colors.blueGray, + dark: { + 100: 'rgb(150,150,150)', + 200: 'rgb(112,112,112)', + 700: '#272727', + 800: '#212121', + 900: '#121212', + } + }, + spacing: { + px: '1px', + 0: '0px', + 0.5: '0.125rem', + 1: '0.25rem', + 1.5: '0.375rem', + 2: '0.5rem', + 2.5: '0.625rem', + 3: '0.75rem', + 3.5: '0.875rem', + 4: '1rem', + 5: '1.25rem', + 6: '1.5rem', + 7: '1.75rem', + 8: '2rem', + 9: '2.25rem', + 10: '2.5rem', + 11: '2.75rem', + 12: '3rem', + 14: '3.5rem', + 16: '4rem', + 20: '5rem', + 24: '6rem', + 28: '7rem', + 32: '8rem', + 36: '9rem', + 40: '10rem', + 44: '11rem', + 48: '12rem', + 52: '13rem', + 56: '14rem', + 60: '15rem', + 64: '16rem', + 72: '18rem', + 80: '20rem', + 96: '24rem', + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + '1/5': '20%', + '2/5': '40%', + '3/5': '60%', + '4/5': '80%', + '1/6': '16.666667%', + '2/6': '33.333333%', + '3/6': '50%', + '4/6': '66.666667%', + '5/6': '83.333333%', + '1/12': '8.333333%', + '2/12': '16.666667%', + '3/12': '25%', + '4/12': '33.333333%', + '5/12': '41.666667%', + '6/12': '50%', + '7/12': '58.333333%', + '8/12': '66.666667%', + '9/12': '75%', + '10/12': '83.333333%', + '11/12': '91.666667%', + full: '100%', + }, + animation: { + none: 'none', + spin: 'spin 1s linear infinite', + ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite', + pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite', + bounce: 'bounce 1s infinite', + }, + backgroundColor: (theme) => theme('colors'), + backgroundImage: { + none: 'none', + 'gradient-to-t': 'linear-gradient(to top, var(--tw-gradient-stops))', + 'gradient-to-tr': 'linear-gradient(to top right, var(--tw-gradient-stops))', + 'gradient-to-r': 'linear-gradient(to right, var(--tw-gradient-stops))', + 'gradient-to-br': 'linear-gradient(to bottom right, var(--tw-gradient-stops))', + 'gradient-to-b': 'linear-gradient(to bottom, var(--tw-gradient-stops))', + 'gradient-to-bl': 'linear-gradient(to bottom left, var(--tw-gradient-stops))', + 'gradient-to-l': 'linear-gradient(to left, var(--tw-gradient-stops))', + 'gradient-to-tl': 'linear-gradient(to top left, var(--tw-gradient-stops))', + }, + backgroundOpacity: (theme) => theme('opacity'), + backgroundPosition: { + bottom: 'bottom', + center: 'center', + left: 'left', + 'left-bottom': 'left bottom', + 'left-top': 'left top', + right: 'right', + 'right-bottom': 'right bottom', + 'right-top': 'right top', + top: 'top', + }, + backgroundSize: { + auto: 'auto', + cover: 'cover', + contain: 'contain', + }, + borderColor: (theme) => ({ + ...theme('colors'), + DEFAULT: theme('colors.gray.200', 'currentColor'), + }), + borderOpacity: (theme) => theme('opacity'), + borderRadius: { + none: '0px', + sm: '0.125rem', + DEFAULT: '0.25rem', + md: '0.375rem', + lg: '0.5rem', + xl: '0.75rem', + '2xl': '1rem', + '3xl': '1.5rem', + full: '9999px', + }, + borderWidth: { + DEFAULT: '1px', + 0: '0px', + 2: '2px', + 4: '4px', + 6: '6px', + 8: '8px', + }, + boxShadow: { + sm: '0 1px 2px 0 rgba(0, 0, 0, 0.05)', + DEFAULT: '0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06)', + md: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)', + lg: '0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)', + xl: '0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)', + '2xl': '0 25px 50px -12px rgba(0, 0, 0, 0.25)', + inner: 'inset 0 2px 4px 0 rgba(0, 0, 0, 0.06)', + white: '0 4px 4px -1px rgba(255,255,255,0.9), 0 2px 2px -1px rgba(255,255,255,0.94)', + none: 'none', + }, + container: {}, + cursor: { + auto: 'auto', + default: 'default', + pointer: 'pointer', + wait: 'wait', + text: 'text', + move: 'move', + 'not-allowed': 'not-allowed', + }, + divideColor: (theme) => theme('borderColor'), + divideOpacity: (theme) => theme('borderOpacity'), + divideWidth: (theme) => theme('borderWidth'), + fill: { current: 'currentColor' }, + flex: { + 1: '1 1 0%', + auto: '1 1 auto', + initial: '0 1 auto', + none: 'none', + }, + flexGrow: { + 0: '0', + DEFAULT: '1', + }, + flexShrink: { + 0: '0', + DEFAULT: '1', + }, + fontFamily: { + sans: [ + 'Raleway', + 'ui-sans-serif', + 'system-ui', + '-apple-system', + 'BlinkMacSystemFont', + '"Segoe UI"', + 'Roboto', + '"Helvetica Neue"', + 'Arial', + '"Noto Sans"', + 'sans-serif', + '"Apple Color Emoji"', + '"Segoe UI Emoji"', + '"Segoe UI Symbol"', + '"Noto Color Emoji"', + ], + serif: ['raleway', 'ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'], + mono: [ + 'raleway', + 'ui-monospace', + 'SFMono-Regular', + 'Menlo', + 'Monaco', + 'Consolas', + '"Liberation Mono"', + '"Courier New"', + 'monospace', + ], + }, + fontSize: { + xs: ['0.75rem', { lineHeight: '1rem' }], + sm: ['0.875rem', { lineHeight: '1.25rem' }], + base: ['1rem', { lineHeight: '1.5rem' }], + lg: ['1.125rem', { lineHeight: '1.75rem' }], + xl: ['1.25rem', { lineHeight: '1.75rem' }], + '2xl': ['1.5rem', { lineHeight: '2rem' }], + '3xl': ['1.875rem', { lineHeight: '2.25rem' }], + '4xl': ['2.25rem', { lineHeight: '2.5rem' }], + '5xl': ['3rem', { lineHeight: '1' }], + '6xl': ['3.75rem', { lineHeight: '1' }], + '7xl': ['4.5rem', { lineHeight: '1' }], + '8xl': ['6rem', { lineHeight: '1' }], + '9xl': ['8rem', { lineHeight: '1' }], + }, + fontWeight: { + thin: '100', + extralight: '200', + light: '300', + normal: '400', + medium: '500', + semibold: '600', + bold: '700', + extrabold: '800', + black: '900', + }, + gap: (theme) => theme('spacing'), + gradientColorStops: (theme) => theme('colors'), + gridAutoColumns: { + auto: 'auto', + min: 'min-content', + max: 'max-content', + fr: 'minmax(0, 1fr)', + }, + gridAutoRows: { + auto: 'auto', + min: 'min-content', + max: 'max-content', + fr: 'minmax(0, 1fr)', + }, + gridColumn: { + auto: 'auto', + 'span-1': 'span 1 / span 1', + 'span-2': 'span 2 / span 2', + 'span-3': 'span 3 / span 3', + 'span-4': 'span 4 / span 4', + 'span-5': 'span 5 / span 5', + 'span-6': 'span 6 / span 6', + 'span-7': 'span 7 / span 7', + 'span-8': 'span 8 / span 8', + 'span-9': 'span 9 / span 9', + 'span-10': 'span 10 / span 10', + 'span-11': 'span 11 / span 11', + 'span-12': 'span 12 / span 12', + 'span-full': '1 / -1', + }, + gridColumnEnd: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + 13: '13', + }, + gridColumnStart: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + 13: '13', + }, + gridRow: { + auto: 'auto', + 'span-1': 'span 1 / span 1', + 'span-2': 'span 2 / span 2', + 'span-3': 'span 3 / span 3', + 'span-4': 'span 4 / span 4', + 'span-5': 'span 5 / span 5', + 'span-6': 'span 6 / span 6', + 'span-full': '1 / -1', + }, + gridRowStart: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + }, + gridRowEnd: { + auto: 'auto', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + }, + transformOrigin: { + center: 'center', + top: 'top', + 'top-right': 'top right', + right: 'right', + 'bottom-right': 'bottom right', + bottom: 'bottom', + 'bottom-left': 'bottom left', + left: 'left', + 'top-left': 'top left', + }, + gridTemplateColumns: { + none: 'none', + 1: 'repeat(1, minmax(0, 1fr))', + 2: 'repeat(2, minmax(0, 1fr))', + 3: 'repeat(3, minmax(0, 1fr))', + 4: 'repeat(4, minmax(0, 1fr))', + 5: 'repeat(5, minmax(0, 1fr))', + 6: 'repeat(6, minmax(0, 1fr))', + 7: 'repeat(7, minmax(0, 1fr))', + 8: 'repeat(8, minmax(0, 1fr))', + 9: 'repeat(9, minmax(0, 1fr))', + 10: 'repeat(10, minmax(0, 1fr))', + 11: 'repeat(11, minmax(0, 1fr))', + 12: 'repeat(12, minmax(0, 1fr))', + }, + gridTemplateRows: { + none: 'none', + 1: 'repeat(1, minmax(0, 1fr))', + 2: 'repeat(2, minmax(0, 1fr))', + 3: 'repeat(3, minmax(0, 1fr))', + 4: 'repeat(4, minmax(0, 1fr))', + 5: 'repeat(5, minmax(0, 1fr))', + 6: 'repeat(6, minmax(0, 1fr))', + }, + height: (theme) => ({ + auto: 'auto', + ...theme('spacing'), + screen: '100vh', + }), + inset: (theme, { negative }) => ({ + auto: 'auto', + ...theme('spacing'), + ...negative(theme('spacing')), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + full: '100%', + '-1/2': '-50%', + '-1/3': '-33.333333%', + '-2/3': '-66.666667%', + '-1/4': '-25%', + '-2/4': '-50%', + '-3/4': '-75%', + '-full': '-100%', + }), + keyframes: { + spin: { + to: { + transform: 'rotate(360deg)', + }, + }, + ping: { + '75%, 100%': { + transform: 'scale(2)', + opacity: '0', + }, + }, + pulse: { + '50%': { + opacity: '.5', + }, + }, + bounce: { + '0%, 100%': { + transform: 'translateY(-25%)', + animationTimingFunction: 'cubic-bezier(0.8,0,1,1)', + }, + '50%': { + transform: 'none', + animationTimingFunction: 'cubic-bezier(0,0,0.2,1)', + }, + }, + }, + letterSpacing: { + tighter: '-0.05em', + tight: '-0.025em', + normal: '0em', + wide: '0.025em', + wider: '0.05em', + widest: '0.1em', + }, + lineHeight: { + none: '1', + tight: '1.25', + snug: '1.375', + normal: '1.5', + relaxed: '1.625', + loose: '2', + 3: '.75rem', + 4: '1rem', + 5: '1.25rem', + 6: '1.5rem', + 7: '1.75rem', + 8: '2rem', + 9: '2.25rem', + 10: '2.5rem', + }, + listStyleType: { + none: 'none', + disc: 'disc', + decimal: 'decimal', + }, + margin: (theme, { negative }) => ({ + auto: 'auto', + ...theme('spacing'), + ...negative(theme('spacing')), + }), + maxHeight: (theme) => ({ + ...theme('spacing'), + full: '100%', + screen: '100vh', + }), + maxWidth: (theme, { breakpoints }) => ({ + none: 'none', + 0: '0rem', + xs: '20rem', + sm: '24rem', + md: '28rem', + lg: '32rem', + xl: '36rem', + '2xl': '42rem', + '3xl': '48rem', + '4xl': '56rem', + '5xl': '64rem', + '6xl': '72rem', + '7xl': '80rem', + full: '100%', + min: 'min-content', + max: 'max-content', + prose: '65ch', + ...breakpoints(theme('screens')), + }), + minHeight: { + 0: '0px', + full: '100%', + screen: '100vh', + }, + minWidth: { + 0: '0px', + full: '100%', + min: 'min-content', + max: 'max-content', + }, + objectPosition: { + bottom: 'bottom', + center: 'center', + left: 'left', + 'left-bottom': 'left bottom', + 'left-top': 'left top', + right: 'right', + 'right-bottom': 'right bottom', + 'right-top': 'right top', + top: 'top', + }, + opacity: { + 0: '0', + 5: '0.05', + 10: '0.1', + 20: '0.2', + 25: '0.25', + 30: '0.3', + 40: '0.4', + 50: '0.5', + 60: '0.6', + 70: '0.7', + 75: '0.75', + 80: '0.8', + 90: '0.9', + 95: '0.95', + 100: '1', + }, + order: { + first: '-9999', + last: '9999', + none: '0', + 1: '1', + 2: '2', + 3: '3', + 4: '4', + 5: '5', + 6: '6', + 7: '7', + 8: '8', + 9: '9', + 10: '10', + 11: '11', + 12: '12', + }, + outline: { + none: ['2px solid transparent', '2px'], + white: ['2px dotted white', '2px'], + black: ['2px dotted black', '2px'], + }, + padding: (theme) => theme('spacing'), + placeholderColor: (theme) => theme('colors'), + placeholderOpacity: (theme) => theme('opacity'), + ringColor: (theme) => ({ + DEFAULT: theme('colors.blue.500', '#3b82f6'), + ...theme('colors'), + }), + ringOffsetColor: (theme) => theme('colors'), + ringOffsetWidth: { + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + ringOpacity: (theme) => ({ + DEFAULT: '0.5', + ...theme('opacity'), + }), + ringWidth: { + DEFAULT: '3px', + 0: '0px', + 1: '1px', + 2: '2px', + 4: '4px', + 8: '8px', + }, + rotate: { + '-180': '-180deg', + '-90': '-90deg', + '-45': '-45deg', + '-12': '-12deg', + '-6': '-6deg', + '-3': '-3deg', + '-2': '-2deg', + '-1': '-1deg', + 0: '0deg', + 1: '1deg', + 2: '2deg', + 3: '3deg', + 6: '6deg', + 12: '12deg', + 45: '45deg', + 90: '90deg', + 180: '180deg', + }, + scale: { + 0: '0', + 50: '.5', + 75: '.75', + 90: '.9', + 95: '.95', + 100: '1', + 105: '1.05', + 110: '1.1', + 125: '1.25', + 150: '1.5', + }, + skew: { + '-12': '-12deg', + '-6': '-6deg', + '-3': '-3deg', + '-2': '-2deg', + '-1': '-1deg', + 0: '0deg', + 1: '1deg', + 2: '2deg', + 3: '3deg', + 6: '6deg', + 12: '12deg', + }, + space: (theme, { negative }) => ({ + ...theme('spacing'), + ...negative(theme('spacing')), + }), + stroke: { + current: 'currentColor', + }, + strokeWidth: { + 0: '0', + 1: '1', + 2: '2', + }, + textColor: (theme) => theme('colors'), + textOpacity: (theme) => theme('opacity'), + transitionDuration: { + DEFAULT: '150ms', + 75: '75ms', + 100: '100ms', + 150: '150ms', + 200: '200ms', + 300: '300ms', + 500: '500ms', + 700: '700ms', + 1000: '1000ms', + }, + transitionDelay: { + 75: '75ms', + 100: '100ms', + 150: '150ms', + 200: '200ms', + 300: '300ms', + 500: '500ms', + 700: '700ms', + 1000: '1000ms', + }, + transitionProperty: { + none: 'none', + all: 'all', + DEFAULT: 'background-color, border-color, color, fill, stroke, opacity, box-shadow, transform', + colors: 'background-color, border-color, color, fill, stroke', + opacity: 'opacity', + shadow: 'box-shadow', + transform: 'transform', + }, + transitionTimingFunction: { + DEFAULT: 'cubic-bezier(0.4, 0, 0.2, 1)', + linear: 'linear', + in: 'cubic-bezier(0.4, 0, 1, 1)', + out: 'cubic-bezier(0, 0, 0.2, 1)', + 'in-out': 'cubic-bezier(0.4, 0, 0.2, 1)', + }, + translate: (theme, { negative }) => ({ + ...theme('spacing'), + ...negative(theme('spacing')), + '1/2': '50%', + '1/3': '33.333333%', + '2/3': '66.666667%', + '1/4': '25%', + '2/4': '50%', + '3/4': '75%', + full: '100%', + '-1/2': '-50%', + '-1/3': '-33.333333%', + '-2/3': '-66.666667%', + '-1/4': '-25%', + '-2/4': '-50%', + '-3/4': '-75%', + '-full': '-100%', + }), + width: (theme) => ({ + auto: 'auto', + ...theme('spacing'), + screen: '100vw', + min: 'min-content', + max: 'max-content', + }), + zIndex: { + auto: 'auto', + 0: '0', + 10: '10', + 20: '20', + 30: '30', + 40: '40', + 50: '50', + }, + }, + variantOrder: [ + 'first', + 'last', + 'odd', + 'even', + 'visited', + 'checked', + 'group-hover', + 'group-focus', + 'focus-within', + 'hover', + 'focus', + 'focus-visible', + 'active', + 'disabled', + ], + variants: { + accessibility: ['responsive', 'focus-within', 'focus'], + alignContent: ['responsive'], + alignItems: ['responsive'], + alignSelf: ['responsive'], + animation: ['responsive'], + appearance: ['responsive'], + backgroundAttachment: ['responsive'], + backgroundClip: ['responsive'], + backgroundColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'], + backgroundImage: ['responsive'], + backgroundOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'], + backgroundPosition: ['responsive'], + backgroundRepeat: ['responsive'], + backgroundSize: ['responsive'], + borderCollapse: ['responsive'], + borderColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'], + borderOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus', 'dark'], + borderRadius: ['responsive'], + borderStyle: ['responsive'], + borderWidth: ['responsive'], + boxShadow: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus', 'dark'], + boxSizing: ['responsive'], + clear: ['responsive'], + container: ['responsive'], + cursor: ['responsive'], + display: ['responsive'], + divideColor: ['responsive', 'dark'], + divideOpacity: ['responsive'], + divideStyle: ['responsive'], + divideWidth: ['responsive'], + fill: ['responsive'], + flex: ['responsive'], + flexDirection: ['responsive'], + flexGrow: ['responsive'], + flexShrink: ['responsive'], + flexWrap: ['responsive'], + float: ['responsive'], + fontFamily: ['responsive'], + fontSize: ['responsive'], + fontSmoothing: ['responsive'], + fontStyle: ['responsive'], + fontVariantNumeric: ['responsive'], + fontWeight: ['responsive'], + gap: ['responsive'], + gradientColorStops: ['responsive', 'dark', 'hover', 'focus'], + gridAutoColumns: ['responsive'], + gridAutoFlow: ['responsive'], + gridAutoRows: ['responsive'], + gridColumn: ['responsive'], + gridColumnEnd: ['responsive'], + gridColumnStart: ['responsive'], + gridRow: ['responsive'], + gridRowEnd: ['responsive'], + gridRowStart: ['responsive'], + gridTemplateColumns: ['responsive'], + gridTemplateRows: ['responsive'], + height: ['responsive'], + inset: ['responsive'], + justifyContent: ['responsive'], + justifyItems: ['responsive'], + justifySelf: ['responsive'], + letterSpacing: ['responsive'], + lineHeight: ['responsive'], + listStylePosition: ['responsive'], + listStyleType: ['responsive'], + margin: ['responsive'], + maxHeight: ['responsive'], + maxWidth: ['responsive'], + minHeight: ['responsive'], + minWidth: ['responsive'], + objectFit: ['responsive'], + objectPosition: ['responsive'], + opacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'], + order: ['responsive'], + outline: ['responsive', 'focus-within', 'focus'], + overflow: ['responsive'], + overscrollBehavior: ['responsive'], + padding: ['responsive'], + placeContent: ['responsive'], + placeItems: ['responsive'], + placeSelf: ['responsive'], + placeholderColor: ['responsive', 'dark', 'focus'], + placeholderOpacity: ['responsive', 'focus'], + pointerEvents: ['responsive'], + position: ['responsive'], + resize: ['responsive'], + ringColor: ['responsive', 'dark', 'focus-within', 'focus'], + ringOffsetColor: ['responsive', 'dark', 'focus-within', 'focus'], + ringOffsetWidth: ['responsive', 'focus-within', 'focus'], + ringOpacity: ['responsive', 'focus-within', 'focus'], + ringWidth: ['responsive', 'focus-within', 'focus'], + rotate: ['responsive', 'hover', 'focus'], + scale: ['responsive', 'hover', 'focus'], + skew: ['responsive', 'hover', 'focus'], + space: ['responsive'], + stroke: ['responsive'], + strokeWidth: ['responsive'], + tableLayout: ['responsive'], + textAlign: ['responsive'], + textColor: ['responsive', 'dark', 'group-hover', 'focus-within', 'hover', 'focus'], + textDecoration: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'], + textOpacity: ['responsive', 'group-hover', 'focus-within', 'hover', 'focus'], + textOverflow: ['responsive'], + textTransform: ['responsive'], + transform: ['responsive'], + transformOrigin: ['responsive'], + transitionDelay: ['responsive'], + transitionDuration: ['responsive'], + transitionProperty: ['responsive'], + transitionTimingFunction: ['responsive'], + translate: ['responsive', 'hover', 'focus'], + typography: ['dark', 'responsive'], + userSelect: ['responsive'], + verticalAlign: ['responsive'], + visibility: ['responsive'], + whitespace: ['responsive'], + width: ['responsive'], + wordBreak: ['responsive'], + zIndex: ['responsive', 'focus-within', 'focus'], + }, + plugins: [ + require('@tailwindcss/typography'), + ], +} diff --git a/todo_and_review b/todo_and_review new file mode 100644 index 0000000..e69de29