diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6bba59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,130 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* diff --git a/Components/Card/card.js b/Components/Card/card.js deleted file mode 100644 index bb1a770..0000000 --- a/Components/Card/card.js +++ /dev/null @@ -1,71 +0,0 @@ -const _className = { - card: 'card', - image: 'card__image', - textContainer: 'card__text', - title: 'card__headline', - text: 'card__content', - button: 'card__button' -}; - -export default class Card { - - constructor() { - } - - static create(_title, _text, _url, _image) { - const card = document.createElement('div'); - card.className = _className.card; - - if (_image) { - this.addImg(card, _image); - } - - this.addText(card, _title, _text) - this.addBtn(card, 'Acessar', _url); - - return card; - } - - static addImg(card, _image) { - const image = document.createElement('img'); - image.src = _image.src; - image.alt = _image.alt; - image.className = _className.image; - - card.appendChild(image); - - return null; - } - - static addText(card, _title, _text) { - const container = document.createElement('div'); - container.className = _className.textContainer; - - const title = document.createElement('h3'); - title.className = _className.title; - title.innerHTML = _title; - - const text = document.createElement('p'); - text.className = _className.text; - text.innerHTML = _text; - - container.append(title, text); - - card.appendChild(container); - - return null; - } - - static addBtn(card, _text, _anchor) { - const button = document.createElement('a'); - button.className = _className.button; - button.innerHTML = _text; - - _anchor ? button.href = _anchor : button.href = '#'; - - card.appendChild(button); - - return null; - } - -} \ No newline at end of file diff --git a/Components/Card/card.json b/Components/Card/card.json deleted file mode 100644 index 845830a..0000000 --- a/Components/Card/card.json +++ /dev/null @@ -1,101 +0,0 @@ -[ - { - "tit": "ADMINSTRAÇÃO", - "desc": "Domine as habilidades essenciais de gestão e liderança para impulsionar o sucesso em diversos setores empresariais.", - "url": "./cursos/adm.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "ANÁLISE E DESENVOLVIMENTO DE SISTEMAS", - "desc": "Aprenda a projetar, desenvolver e implementar soluções de software inovadoras para atender às demandas do mercado digital em constante evolução.", - "url": "./cursos/ads.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "BANCO DE DADOS", - "desc": "Torne-se especialista na gestão eficiente e segura de grandes volumes de dados, preparando-se para atuar em projetos de bancos de dados complexos.", - "url": "./cursos/banco-de-dados.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "ENGENHARIA DA COMPUTAÇÃO", - "desc": "Explore o mundo da tecnologia de hardware e software, desenvolvendo habilidades para criar sistemas computacionais avançados e inovadores.", - "url": "./cursos/engenharia-da-computacao.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "ENGENHARIA DA MECATRÔNICA", - "desc": "Integre conhecimentos de engenharia mecânica, eletrônica e de controle para projetar e construir sistemas automatizados e robóticos.", - "url": "./cursos/engenharia-da-mecatronica.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "ENGENHARIA DA PRODUÇÃO", - "desc": "Adquira expertise em otimização de processos, gestão de recursos e logística para aumentar a eficiência e a qualidade na produção industrial.", - "url": "./cursos/engenharia-da-producao.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "GESTÃO DE TECNOLOGIA DA INFORMAÇÃO", - "desc": "Desenvolva competências para gerir recursos tecnológicos de forma estratégica, alinhando a TI aos objetivos de negócio da organização.", - "url": "./cursos/gestao-de-tecnologia-da-informacao.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "JOGOS DIGITAIS", - "desc": "Entre no universo criativo dos jogos digitais, aprendendo a projetar, desenvolver e publicar jogos envolventes para diversas plataformas.", - "url": "./cursos/jogos-digitais.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "REDE DE COMPUTADORES", - "desc": "Aprofunde-se na arquitetura, configuração e segurança de redes de computadores, preparando-se para atuar na administração e manutenção de infraestruturas de rede.", - "url": "./cursos/rede-de-computadores.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "SISTEMAS DA INFORMAÇÃO", - "desc": "Desenvolva habilidades para analisar, projetar e implementar sistemas de informação eficientes, integrando tecnologia e processos de negócio.", - "url": "./cursos/sistemas-da-informacao.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - }, - { - "tit": "SISTEMAS PARA INTERNET", - "desc": "Explore as tecnologias web mais recentes, aprendendo a desenvolver aplicações web dinâmicas e interativas para atender às demandas do mercado online.", - "url": "./cursos/sistemas-para-internet.html", - "img": { - "src": "./imgs/fiap.png", - "alt": "FIAP" - } - } -] diff --git a/Components/Card/index.js b/Components/Card/index.js deleted file mode 100644 index 45ba1c6..0000000 --- a/Components/Card/index.js +++ /dev/null @@ -1,29 +0,0 @@ -import Card from './card.js'; - -function obterDadosDoJSON() { - return fetch('../Components/Card/card.json') - .then(response => { - if (!response.ok) throw new Error('Erro ao carregar o arquivo JSON'); - return response.json(); - }) - .catch(error => console.error('Erro:', error)); -} - -const section = document.body.querySelector('.section--cards'); - -if (section) { - obterDadosDoJSON() - .then(data => { - data.map( - materia => section.appendChild( - Card.create( - materia.tit, - materia.desc, - materia.url, - materia.img - ) - ) - ) - }) - .catch(error => console.error("ERRO: " + error)); -} \ No newline at end of file diff --git a/Components/Curso/curso.js b/Components/Curso/curso.js deleted file mode 100644 index 5f4ccc9..0000000 --- a/Components/Curso/curso.js +++ /dev/null @@ -1,70 +0,0 @@ -const _className = { - title: 'cursos__title', - textContainer: 'cursos__text-container', - text: 'cursos__text', - nav: 'cursos__nav', - link: 'link' -}; - -export default class Curso { - - static create(_title, _text, _nav) { - const curso = document.querySelector('.cursos'); - - this.addTitle(curso, _title); - this.addText(curso, _text); - this.addNav(curso, _nav); - - return curso; - } - - static addTitle(curso, _title) { - const title = document.createElement('h2'); - title.className = _className.title; - title.innerHTML = _title; - - curso.appendChild(title); - return null; - } - - static addText(curso, _container) { - const container = document.createElement('div'); - container.className = _className.textContainer; - - _container.map(_text => { - - const text = document.createElement('p'); - text.innerHTML = _text; - container.appendChild(text); - - }) - - curso.appendChild(container); - return null; - } - - static addNav(curso, _nav) { - const container = document.createElement('nav'); - container.className = _className.nav; - - if (_nav.prev) { - const prev = document.createElement('a'); - prev.className = _className.link; - prev.href = _nav.prev; - prev.innerHTML = "Curso Anterior"; - container.appendChild(prev) - } - - if (_nav.next) { - const next = document.createElement('a'); - next.className = _className.link; - next.href = _nav.next; - next.innerHTML = "Próximo Curso"; - container.appendChild(next) - } - - curso.appendChild(container); - return null; - } - -} \ No newline at end of file diff --git a/Components/Curso/index.js b/Components/Curso/index.js deleted file mode 100644 index acaf796..0000000 --- a/Components/Curso/index.js +++ /dev/null @@ -1,44 +0,0 @@ -import Curso from "./curso.js"; - -function obterDadosDoJSON() { - return fetch('../Components/Curso/cursos.json') - .then(response => { - if (!response.ok) throw new Error('Erro ao carregar o arquivo JSON'); - return response.json(); - }) - .catch(error => console.error('Erro:', error)); -} - -const sections = [ - document.getElementById('curso-adm'), - document.getElementById('curso-ads'), - document.getElementById('curso-bd'), - document.getElementById('curso-engComp'), - document.getElementById('curso-engMec'), - document.getElementById('curso-engProd'), - document.getElementById('curso-gestTecInf'), - document.getElementById('curso-jogos'), - document.getElementById('curso-redeComp'), - document.getElementById('curso-sistInf'), - document.getElementById('curso-sistNet') -]; - -obterDadosDoJSON() - .then(data => { - - sections.map((sect, i) => { - if (sect) { - sect.appendChild( - Curso.create( - data[i].title, - data[i].text, - data[i].nav - ) - ) - - } - }) - - }) - .catch(error => console.error("ERRO: " + error)); - diff --git a/Components/Curso/cursos.json b/Components/base/cursos.json similarity index 74% rename from Components/Curso/cursos.json rename to Components/base/cursos.json index f05ddd5..ce56604 100644 --- a/Components/Curso/cursos.json +++ b/Components/base/cursos.json @@ -1,18 +1,22 @@ [ { "title": "Adminstração", + "desc": "Domine as habilidades essenciais de gestão e liderança para impulsionar o sucesso em diversos setores empresariais.", "text": [ - "A FIAP tem o melhor curso de Administração de São Paulo, primeiro colocado no ENADE. Isso é consequência de um ambiente de excelência em tecnologia, inovação e empreendedorismo, que desperta nos alunos o pensamento crítico, engajamento social e os prepara para o mercado de trabalho.", - "O curso aborda tanto o lado gerencial quanto o lado estratégico de negócios, em disciplinas como: negociação, liderança e trabalho em equipe, direito empresarial, gestão financeira, gestão de pessoas, marketing, processos e gestão de TI.", - "Você será capaz de apoiar e conduzir os principais planos de uma empresa em cenários dinâmicos, competitivos e tecnológicos." + "A FIAP tem o melhor curso de Administração de São Paulo, primeiro colocado no ENADE. Isso é consequência de um ambiente de excelência em tecnologia, inovação e empreendedorismo, que desperta nos alunos o pensamento crítico, engajamento social e os prepara para o mercado de trabalho.", + "O curso aborda tanto o lado gerencial quanto o lado estratégico de negócios, em disciplinas como: negociação, liderança e trabalho em equipe, direito empresarial, gestão financeira, gestão de pessoas, marketing, processos e gestão de TI.", + "Você será capaz de apoiar e conduzir os principais planos de uma empresa em cenários dinâmicos, competitivos e tecnológicos." ], "nav": { "prev": "", "next": "./ads.html" - } + }, + "url": "./cursos/adm.html", + "idPage": "curso-adm" }, { "title": "Análise e Desenvolvimento de Sistemas", + "desc": "Aprenda a projetar, desenvolver e implementar soluções de software inovadoras para atender às demandas do mercado digital em constante evolução.", "text": [ "Você vai aprender a identificar as necessidades estruturais de um sistema, documentar, criar protótipos e desenvolver para web e mobile utilizando os principais softwares, ferramentas e metodologias do mercado, além de ser capaz de gerenciar projetos e controlar a qualidade de programas.", "O curso aborda tanto o lado gerencial quanto o lado estratégico de negócios, em disciplinas como: negociação, liderança e trabalho em equipe, direito empresarial, gestão financeira, gestão de pessoas, marketing, processos e gestão de TI.", @@ -21,10 +25,13 @@ "nav": { "prev": "./adm.html", "next": "./banco-de-dados.html" - } + }, + "url": "./cursos/ads.html", + "idPage": "curso-ads" }, { "title": "Banco de Dados", + "desc": "Torne-se especialista na gestão eficiente e segura de grandes volumes de dados, preparando-se para atuar em projetos de bancos de dados complexos.", "text": [ "Tecnologia em Banco de Dados prepara você para entender e utilizar melhor os dados, criando soluções inovadoras a partir de um fluxo de conteúdo monitorado e analisado.", "E personalizando os serviços prestados por meio da construção de bases de dados para tomada de decisão e aplicação dos conceitos de BI (Business Intelligence) relacionados à modelagem de indicadores de desempenho, integração de dados corporativos e visualização das informações.", @@ -34,10 +41,13 @@ "nav": { "prev": "./ads.html", "next": "./engenharia-da-computacao.html" - } + }, + "url": "./cursos/banco-de-dados.html", + "idPage": "curso-bd" }, { "title": "Engenharia da Computação", + "desc": "Explore o mundo da tecnologia de hardware e software, desenvolvendo habilidades para criar sistemas computacionais avançados e inovadores.", "text": [ "O ENGENHEIRO DA COMPUTAÇÃO desenvolve projetos nas áreas de sistemas operacionais, arquitetura de computadores, redes, robótica e inteligência artificial.", "A grade privilegia conhecimentos avançados na área de exatas (física e matemática) e aspectos de eletrônica, controle e automação, telecomunicações e TI.", @@ -47,10 +57,13 @@ "nav": { "prev": "./banco-de-dados.html", "next": "./engenharia-da-mecatronica.html" - } + }, + "url": "./cursos/engenharia-da-computacao.html", + "idPage": "curso-engComp" }, { "title": "Engenharia da Mecatrônica", + "desc": "Integre conhecimentos de engenharia mecânica, eletrônica e de controle para projetar e construir sistemas automatizados e robóticos.", "text": [ "É uma das profissões mais promissoras do mercado, tanto em época de crise como em momentos positivos da economia.", "Para ganhar competitividade, toda empresa precisa desenvolver e implantar sistemas automatizados, utilizando tecnologias exponenciais.", @@ -61,22 +74,28 @@ "nav": { "prev": "./engenharia-da-computacao.html", "next": "./engenharia-da-producao.html" - } + }, + "url": "./cursos/engenharia-da-mecatronica.html", + "idPage": "curso-engMec" }, { "title": "Engenharia da Produção", + "desc": "Adquira expertise em otimização de processos, gestão de recursos e logística para aumentar a eficiência e a qualidade na produção industrial.", "text": [ - "O ENGENHEIRO DE PRODUÇÃO reúne conhecimentos das áreas de administração, economia e engenharia. O curso foi planejado para incorporar a influência de ferramentas tecnológic indispensáveis para gestão de negócios.", + "O ENGENHEIRO DE PRODUÇÃO reúne conhecimentos das áreas de administração, economia e engenharia. O curso foi planejado para incorporar a influência de ferramentas tecnológic indispensáveis para gestão de negócios.", "A grade privilegia conhecimentos avançados na área de exatas (matemáti ciência e tecnologia) e à formação em aspectos políticos, sociais, ambientais, culturais e de sustentabilidade.", "Na FIAP, o futuro engenheiro dispõe de um parque tecnológico avança laboratórios de química, informática, fabricação e o Maker Labs, onde você pode ir da ideia ao protótipo, uni práticas multidisciplinares de mecânica, eletrônica e tecnologia, com impressoras 3D, usinagem, cortadoras lase fresadoras de precisão." ], "nav": { "prev": "./engenharia-da-mecatronica.html", "next": "./gestao-de-tecnologia-da-informacao.html" - } + }, + "url": "./cursos/engenharia-da-producao.html", + "idPage": "curso-engProd" }, { "title": "Gestão de Tecnologia da Informação", + "desc": "Desenvolva competências para gerir recursos tecnológicos de forma estratégica, alinhando a TI aos objetivos de negócio da organização.", "text": [ "Você vai planejar e gerenciar sistemas computacionais (hardware) e de informação (software) nas áreas de processos, mobilidade, segurança, tecnologias emergentes, sistemas integrados, big data, cloud computing, engenharia de software, marketing digital e redes sociais.", "O curso traz uma abordagem equilibrada entre o conhecimento técnico e de gestão, unindo conhecimento base de plataformas de desenvolvimento com metodologias de projetos.", @@ -85,10 +104,13 @@ "nav": { "prev": "./engenharia-da-producao.html", "next": "./jogos-digitais.html" - } + }, + "url": "./cursos/gestao-de-tecnologia-da-informacao.html", + "idPage": "curso-gestTecInf" }, { "title": "Jogos Digitais", + "desc": "Entre no universo criativo dos jogos digitais, aprendendo a projetar, desenvolver e publicar jogos envolventes para diversas plataformas.", "text": [ "Você vai ser preparado para desenvolver jogos em todas as plataformas: internet, consoles (Playstation, Xbox e Nintendo), smartphones (aplicativos para celulares e tablets), desktops (PC e Mac), TV digital, simuladores de realidade virtual e virtualizações (totem tour virtual).", "Você vai aprender a idealizar e desenvolver um jogo desde o enredo, passando pela criação de personagens, conceitos de gameficação, ambientes e objetos de cenários.", @@ -99,10 +121,13 @@ "nav": { "prev": "./gestao-de-tecnologia-da-informacao.html", "next": "./rede-de-computadores.html" - } + }, + "url": "./cursos/jogos-digitais.html", + "idPage": "curso-jogos" }, { "title": "Rede de Computadores", + "desc": "Aprofunde-se na arquitetura, configuração e segurança de redes de computadores, preparando-se para atuar na administração e manutenção de infraestruturas de rede.", "text": [ "É ministrado em um ambiente que simula uma empresa real, com computadores (SO Linux e Windows), roteadores, switches, cabeamento e demais equipamentos, trazendo a vivência que você precisa para ser competitivo no mercado de trabalho.", "Você vai aprender a dimensionar o uso de equipamentos multiusuários. Configurar acesso e disponibilidade para internet e intranet, roteadores e provedores. Trabalhar com sistemas de gerenciamento de redes, sistemas operacionais e simulação de ambiente de Cloud Computing. E com os novos conhecimentos sobre hardware, software e modos de funcionamento, também vai ser capaz de otimizar o desempenho dos computadores, adequando a estrutura física ao seu potencial de produção, o que aumenta o desempenho. Tudo isso de acordo com as regras de segurança." @@ -110,12 +135,15 @@ "nav": { "prev": "./jogos-digitais.html", "next": "./sistemas-da-informacao.html" - } + }, + "url": "./cursos/rede-de-computadores.html", + "idPage": "curso-redeComp" }, { "title": "Sistemas da Informação", + "desc": "Desenvolva habilidades para analisar, projetar e implementar sistemas de informação eficientes, integrando tecnologia e processos de negócio.", "text": [ - "O BACHAREL EM SISTEMAS DE INFORMAÇÃO recebe uma visão ampla das organizações e seus modelos de negócio e de como a tecnologia pode amplificar sua estratégia.", + "O BACHAREL EM SISTEMAS DE INFORMAÇÃO recebe uma visão ampla das organizações e seus modelos de negócio e de como a tecnologia pode amplificar sua estratégia.", "Com conteúdo que vai de hardware a inteligência artificial, passando por gestão empresarial, o curso abrange conhecimentos de desenvolvimento de aplicativos (mobile, games e web), engenharia de software e governança de TI, banco de dados, redes, business intelligence, análise de sistemas orientados a objetos, gestão de SI, gerência de projetos e segurança da informação.", "A grade foi desenvolvida para que, desde o primeiro ano, os alunos recebam a base necessária para atuarem na área de TI de grandes empresas, resolvendo problemas por meio de raciocínio lógico e buscando solução para os desafios das organizações.", "Pensar de uma forma digital não é mais uma tendência: é uma estratégia de inovação e de geração de negócios. O acesso à Internet banda larga aumentou 55% em 2015, totalizando 133,7 milhões de acessos, segundo a Telebrasil. Números que ampliam a importância de um tecnólogo não só voltado para a Internet, mas que também domine as novas tecnologias e metodologias que estão surgindo.", @@ -124,10 +152,13 @@ "nav": { "prev": "./rede-de-computadores.html", "next": "./sistemas-para-internet.html" - } + }, + "url": "./cursos/sistemas-da-informacao.html", + "idPage": "curso-sistInf" }, { "title": "Sistemas para Internet", + "desc": "Explore as tecnologias web mais recentes, aprendendo a desenvolver aplicações web dinâmicas e interativas para atender às demandas do mercado online.", "text": [ "Tecnologia em Sistemas para Internet prepara você para criar experiências omnichannel e desenvolver plataformas tecnológicas que apoiem o processo de transformação digital do mercado.", "Este é um curso que possibilita a imersão completa em todo o ecossistema digital: desde a criação, manutenção, segurança e gerenciamento de sites, portais e aplicativos mobile até o desenvolvimento de projetos de Marketing Digital e CyberSecurity.", @@ -136,7 +167,9 @@ "nav": { "prev": "./sistemas-da-informacao.html", "next": "" - } + }, + "url": "./cursos/sistemas-para-internet.html", + "idPage": "curso-sistNet" } ] \ No newline at end of file diff --git a/Components/base/equipe.json b/Components/base/equipe.json new file mode 100644 index 0000000..44ceb90 --- /dev/null +++ b/Components/base/equipe.json @@ -0,0 +1,32 @@ +[ + { + "nome": "André Sant'Ana", + "rm": "551575", + "avatar": "/src/assets/fotos/foto-andre.jpeg", + "github": "https://github.com/andresant-ana" + }, + { + "nome": "Gabriel Eringer", + "rm": "99632", + "avatar": "/src/assets/fotos/foto-gabriel.jpeg", + "github": "https://github.com/GEdO23" + }, + { + "nome": "Yago Marques", + "rm": "551616", + "avatar": "/src/assets/fotos/foto-yago.jpeg", + "github": "https://github.com/YagoFarah" + }, + { + "nome": "Juan Dutra", + "rm": "98719", + "avatar": "/src/assets/fotos/foto-juan.png", + "github": "https://github.com/Juandutr" + }, + { + "nome": "Eduardo Tatsuo", + "rm": "551428", + "avatar": "/src/assets/fotos/foto-tatsuo.png", + "github": "https://github.com/tatsuoyohji" + } +] \ No newline at end of file diff --git a/Components/base/favoritos.json b/Components/base/favoritos.json new file mode 100644 index 0000000..9403c8f --- /dev/null +++ b/Components/base/favoritos.json @@ -0,0 +1,77 @@ +[ + { + "integrante": "André Sant'Ana", + "sites": [ + { + "href": "https://openai.com/blog/chatgpt", + "imgSrc": "/src/assets/logos/logo-chatgpt.png", + "imgAlt": "ChatGPT" + }, + { + "href": "https://www.bing.com/?cc=br", + "imgSrc": "/src/assets/logos/logo-bing.png", + "imgAlt": "Microsoft Bing" + } + ] + }, + { + "integrante": "Gabriel Eringer", + "sites": [ + { + "href": "https://www.youtube.com", + "imgSrc": "/src/assets/logos/logo-youtube.png", + "imgAlt": "Youtube" + }, + { + "href": "https://mimo.org/web/50/overview", + "imgSrc": "/src/assets/logos/logo-mimo.png", + "imgAlt": "Mimo" + } + ] + }, + { + "integrante": "Juan Dutra", + "sites": [ + { + "href": "https://www.fiap.com.br", + "imgSrc": "/src/assets/logos/logo-fiap.png", + "imgAlt": "FIAP" + }, + { + "href": "https://www.alura.com.br", + "imgSrc": "/src/assets/logos/logo-alura.png", + "imgAlt": "Alura" + } + ] + }, + { + "integrante": "Yago Farah", + "sites": [ + { + "href": "https://www.techtudo.com.br", + "imgSrc": "/src/assets/logos/logo-techtudo.png", + "imgAlt": "techtudo" + }, + { + "href": "https://www.youtube.com", + "imgSrc": "/src/assets/logos/logo-youtube.png", + "imgAlt": "Youtube" + } + ] + }, + { + "integrante": "Eduardo Tatsuo", + "sites": [ + { + "href": "https://jp.mercari.com", + "imgSrc": "/src/assets/logos/logo-mercari.png", + "imgAlt": "mercari" + }, + { + "href": "https://www.balenciaga.com/en-en", + "imgSrc": "/src/assets/logos/logo-balenciaga.png", + "imgAlt": "Balenciaga" + } + ] + } +] \ No newline at end of file diff --git a/Components/js/Banner/banner.js b/Components/js/Banner/banner.js new file mode 100644 index 0000000..06d76f4 --- /dev/null +++ b/Components/js/Banner/banner.js @@ -0,0 +1,29 @@ +import { AbstractComponent, Anchor, Text } from "../components.js"; +const styles = { + "TITLE": "hero-banner__title", + "DESC": "hero-banner__description", + "BUTTON": "hero-banner__button" +}; +export class Banner extends AbstractComponent { + create(_banner, _title, _desc, _anchor) { + try { + const title = new Text().create({ content: _title, tag: "h2", className: styles.TITLE }); + const desc = new Text().create({ content: _desc, tag: "p", className: styles.DESC }); + const anchor = new Anchor().create(_anchor); + if (title) + _banner.appendChild(title); + if (desc) + _banner.appendChild(desc); + if (anchor) { + anchor.classList.add(styles.BUTTON); + _banner.appendChild(anchor); + } + ; + return _banner; + } + catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/js/Banner/index.js b/Components/js/Banner/index.js new file mode 100644 index 0000000..aa9532e --- /dev/null +++ b/Components/js/Banner/index.js @@ -0,0 +1,12 @@ +import { Banner } from "./banner.js"; +const info = { + "title": "Desbrave o Futuro com Nossos Cursos de Tecnologia", + "desc": "Prepare-se para uma carreira de sucesso com os cursos inovadores da nossa faculdade de tecnologia. Explore as últimas tendências, domine habilidades essenciais e conquiste o mercado de trabalho. Seja parte da revolução digital!", + "button": { + "href": "./src/pages/cursos.html", + "content": "Explore Nossos Cursos" + } +}; +const banner = document.getElementById("hero-banner-principal"); +if (banner) + new Banner().create(banner, info.title, info.desc, { href: info.button.href, content: info.button.content }); diff --git a/Components/js/Cabecalho/cabecalho.js b/Components/js/Cabecalho/cabecalho.js new file mode 100644 index 0000000..68e013c --- /dev/null +++ b/Components/js/Cabecalho/cabecalho.js @@ -0,0 +1,43 @@ +import { Container, Anchor, Image, AbstractComponent } from "../components.js"; +const styles = { + "LOGO": "cabecalho__logo", + "UL": "cabecalho__nav", + "A": "link", + "CURRENT_PAGE": "link--pagina-atual" +}; +export class Cabecalho extends AbstractComponent { + constructor() { + super(...arguments); + this.devMode = false; + } + create(_header, _currentPage, _links) { + try { + if (_header) { + this.devLogComponent("CABEÇALHO", "create", { _header, _currentPage, _links }); + const logo = new Image().create({ src: "/public/fiap.png", alt: "FIAP", className: styles.LOGO }); + _links.map(link => this.devLog(link)); + const nav = new Container().create({ tag: "nav", elements: [ + new Container().create({ tag: "ul", elements: _links.map((link) => { + return new Container().create({ tag: "li", elements: [ + new Anchor().create({ href: link.href, content: link.content, className: styles.A }, { isSpecial: link.content == _currentPage, specialClass: "link--pagina-atual" }) + ] }); + }), className: styles.UL }) + ] }); + if (logo) { + this.devLog(`LOGO: ${logo.innerHTML}`); + _header.appendChild(logo); + } + if (nav) { + this.devLog(`NAV: ${nav.innerHTML}`); + _header.appendChild(nav); + } + this.devLogComponent("CABEÇALHO", "create", { _header }); + } + return _header; + } + catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/js/Cabecalho/index.js b/Components/js/Cabecalho/index.js new file mode 100644 index 0000000..044f482 --- /dev/null +++ b/Components/js/Cabecalho/index.js @@ -0,0 +1,31 @@ +import { Cabecalho } from "../Cabecalho/cabecalho.js"; +const paginas = [ + { + "url": "/index.html", + "nome": "Página Inicial", + "cabecalho_id": "cabecalho--principal" + }, + { + "url": "/src/pages/cursos.html", + "nome": "Cursos", + "cabecalho_id": "cabecalho--cursos" + }, + { + "url": "/src/pages/favoritos.html", + "nome": "Favoritos", + "cabecalho_id": "cabecalho--favoritos" + }, + { + "url": "/src/pages/equipe.html", + "nome": "Equipe", + "cabecalho_id": "cabecalho--equipe" + } +]; +const links = paginas.map(pagina => { + return { href: pagina.url, content: pagina.nome, target: "_self" }; +}); +for (let i = 0; i < paginas.length; i++) { + const header = document.getElementById(paginas[i].cabecalho_id); + if (header) + new Cabecalho().create(header, paginas[i].nome, links); +} diff --git a/Components/js/Card/card.js b/Components/js/Card/card.js new file mode 100644 index 0000000..4b60ed2 --- /dev/null +++ b/Components/js/Card/card.js @@ -0,0 +1,29 @@ +import { Container, Anchor, Image, Text, AbstractComponent } from "../components.js"; +const styles = { + "CARD": "card", + "IMAGE": "card__image", + "TEXT_CONTAINER": "card__text-container", + "TITLE": "card__title", + "TEXT": "card__text", + "BUTTON": "card__button" +}; +export class Card extends AbstractComponent { + create(_title = "default title", _desc = "default description", _button = { href: "#", content: "default button", target: "_self" }, _img) { + try { + const card = new Container().create({ tag: "div", elements: [ + new Image().create({ src: _img.src, alt: _img.alt, className: styles.IMAGE, rounded: _img.rounded }), + new Container().create({ tag: "div", elements: [ + new Text().create({ content: _title, tag: "h3", className: styles.TITLE }), + new Text().create({ content: _desc, tag: "p", className: styles.TEXT }) + ], className: styles.TEXT_CONTAINER }), + new Anchor().create({ href: _button.href, content: _button.content, className: styles.BUTTON }) + ], className: styles.CARD }); + this.devLogComponent("CARD", "create", card); + return card; + } + catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/js/Card/cursos.js b/Components/js/Card/cursos.js new file mode 100644 index 0000000..f0d52f1 --- /dev/null +++ b/Components/js/Card/cursos.js @@ -0,0 +1,16 @@ +import { Card } from "./card.js"; +const cardSectionID = ".card-section--cursos"; +const url = "../../components/base/cursos.json"; +fetch(url, { method: "GET" }) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector(cardSectionID); + if (cardSection) { + _data.map((data) => { + const card = new Card().create(data.title, data.desc, { href: data.url, content: "ACESSAR" }, { src: "../assets/logos/logo-fiap.png", alt: "FIAP" }); + if (card) + cardSection.appendChild(card); + }); + } +}) + .catch((error) => console.error(error)); diff --git a/Components/js/Card/equipe.js b/Components/js/Card/equipe.js new file mode 100644 index 0000000..7e75bfb --- /dev/null +++ b/Components/js/Card/equipe.js @@ -0,0 +1,16 @@ +import { Card } from "./card.js"; +const cardSectionID = ".card-section--equipe"; +const url = "../../components/base/equipe.json"; +fetch(url, { method: "GET" }) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector(cardSectionID); + if (cardSection) { + _data.map((data) => { + const card = new Card().create(data.nome, `RM ${data.rm}`, { href: data.github, content: "VISITAR GITHUB" }, { src: data.avatar, alt: `Avatar de ${data.nome}`, rounded: "100%" }); + if (card) + cardSection.appendChild(card); + }); + } +}) + .catch((error) => console.error(error)); diff --git a/Components/js/Card/favoritos.js b/Components/js/Card/favoritos.js new file mode 100644 index 0000000..d269f0c --- /dev/null +++ b/Components/js/Card/favoritos.js @@ -0,0 +1,18 @@ +import { Card } from "./card.js"; +const cardSectionID = ".card-section--favorites"; +const url = "../../components/base/favoritos.json"; +fetch(url, { method: "GET" }) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector(cardSectionID); + if (cardSection) { + _data.map((data) => { + data.sites.map((site) => { + const card = new Card().create(site.imgAlt, data.integrante, { href: site.href, content: "VISITAR PÁGINA" }, { src: site.imgSrc, alt: site.imgAlt }); + if (card) + cardSection.appendChild(card); + }); + }); + } +}) + .catch((error) => console.error(error)); diff --git a/Components/js/Curso/curso.js b/Components/js/Curso/curso.js new file mode 100644 index 0000000..1094b76 --- /dev/null +++ b/Components/js/Curso/curso.js @@ -0,0 +1,32 @@ +import { Container, Anchor, Text, AbstractComponent } from "../components.js"; +export class Curso extends AbstractComponent { + constructor() { + super(...arguments); + this.styles = { + "CURSO": "cursos", + "TITLE": "cursos__title", + "TEXT_CONTAINER": "cursos__text-container", + "NAV": "cursos__nav", + "LINK": "link" + }; + this.devMode = true; + } + create(_title = "default title", _text = ["default text"], _nav) { + try { + const curso = new Container().create({ tag: "div", elements: [ + new Text().create({ content: _title, tag: "h2", className: this.styles.TITLE }), + new Container().create({ tag: "div", elements: _text.map(text => new Text().create({ content: text, tag: "p" })), className: this.styles.TEXT_CONTAINER }), + new Container().create({ tag: "nav", elements: [ + _nav.prev ? new Anchor().create({ href: _nav.prev, content: "Curso Anterior", className: this.styles.LINK }) : null, + _nav.next ? new Anchor().create({ href: _nav.next, content: "Próximo Curso", className: this.styles.LINK }) : null + ], className: this.styles.NAV }) + ], className: this.styles.CURSO }); + this.devLogComponent("CURSO", "create", curso === null || curso === void 0 ? void 0 : curso.innerHTML); + return curso; + } + catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/js/Curso/index.js b/Components/js/Curso/index.js new file mode 100644 index 0000000..b2cb4a4 --- /dev/null +++ b/Components/js/Curso/index.js @@ -0,0 +1,15 @@ +import { Curso } from "./curso.js"; +const url = "../../../components/base/cursos.json"; +fetch(url, { method: "GET" }) + .then((_response) => _response.json()) + .then((_data) => { + _data.map((curso) => { + const section = document.getElementById(curso.idPage); + if (section) { + const element = new Curso().create(curso.title, curso.text, curso.nav); + if (element) + section.appendChild(element); + } + }); +}) + .catch((error) => console.error(error)); diff --git a/Components/js/components.js b/Components/js/components.js new file mode 100644 index 0000000..0f5baa3 --- /dev/null +++ b/Components/js/components.js @@ -0,0 +1,119 @@ +export class AbstractComponent { + constructor() { + this.devMode = false; + } + addSelector(_component, _className, _id) { + if (_className) + _component.classList.add(_className); + if (_id) + _component.id = _id; + } + devLog(element) { + if (this.devMode) + console.log(element); + } + devLogComponent(_name, _function, _params) { + if (this.devMode) { + this.devLog(`${_name} ${_function} | params`); + for (const item in _params) { + this.devLog(`${item}: ${_params[item]}`); + } + } + } +} +export class Container extends AbstractComponent { + constructor() { + super(...arguments); + this.devMode = false; + } + create(_container = { tag: "div", elements: [] }) { + try { + const container = document.createElement(_container.tag); + this.addSelector(container, _container.className, _container.id); + if (_container.elements) { + _container.elements.map((element, i) => { + if (element) { + container.appendChild(element); + this.devLogComponent("CONTAINER", "elements", [element.innerHTML]); + } + }); + } + ; + this.devLogComponent("CONTAINER", "create", _container); + return container; + } + catch (e) { + console.error(e); + return null; + } + } +} +export class Anchor extends AbstractComponent { + constructor() { + super(...arguments); + this.devMode = false; + } + create(_anchor = { href: "#", content: "default anchor", target: "_self" }, _special) { + try { + const anchor = document.createElement("a"); + anchor.href = _anchor.href; + anchor.innerHTML = _anchor.content; + _anchor.target ? anchor.target = _anchor.target : "_self"; + this.addSelector(anchor, _anchor.className, _anchor.id); + if (_special) { + this.devLog(`ìsSpecial: ${_special.isSpecial}`); + if (_special.isSpecial) + anchor.classList.add(_special.specialClass); + this.devLog(`anchor with special class: ${anchor.innerHTML}`); + } + this.devLogComponent("ANCHOR", "create", _anchor); + return anchor; + } + catch (error) { + console.error(error); + return null; + } + } +} +export class Image extends AbstractComponent { + constructor() { + super(...arguments); + this.devMode = false; + } + create(_image = { src: "", alt: "", rounded: "0" }) { + try { + const image = document.createElement('img'); + image.src = _image.src; + if (_image.alt) + image.alt = _image.alt; + if (_image.rounded) + image.style.borderRadius = _image.rounded; + this.addSelector(image, _image.className, _image.id); + this.devLogComponent("IMAGE", "create", _image); + return image; + } + catch (error) { + console.error(error); + return null; + } + } +} +export class Text extends AbstractComponent { + constructor() { + super(...arguments); + this.devMode = false; + } + create(_text = { content: "default text", tag: "p" }) { + try { + const text = document.createElement(_text.tag); + text.innerHTML = _text.content; + this.addSelector(text, _text.className, _text.id); + this.devLogComponent("TEXT", "create", _text); + return text; + } + catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/ts/Banner/banner.ts b/Components/ts/Banner/banner.ts new file mode 100644 index 0000000..21754ec --- /dev/null +++ b/Components/ts/Banner/banner.ts @@ -0,0 +1,28 @@ +import { AbstractComponent, Anchor, IAnchor, Text } from "../components.js"; + +const styles = { + "TITLE": "hero-banner__title", + "DESC": "hero-banner__description", + "BUTTON": "hero-banner__button" +} + +export class Banner extends AbstractComponent { + create(_banner: HTMLElement, _title: string, _desc: string, _anchor: IAnchor): HTMLElement | null { + try { + const title = new Text().create({ content: _title, tag: "h2", className: styles.TITLE }); + const desc = new Text().create({ content: _desc, tag: "p", className: styles.DESC }); + const anchor = new Anchor().create(_anchor); + if (title) _banner.appendChild(title); + if (desc) _banner.appendChild(desc); + if (anchor) { + anchor.classList.add(styles.BUTTON); + _banner.appendChild(anchor) + }; + return _banner; + + } catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/ts/Banner/index.ts b/Components/ts/Banner/index.ts new file mode 100644 index 0000000..4bc8845 --- /dev/null +++ b/Components/ts/Banner/index.ts @@ -0,0 +1,18 @@ +import { Banner } from "./banner.js"; + +const info = { + "title": "Desbrave o Futuro com Nossos Cursos de Tecnologia", + "desc": "Prepare-se para uma carreira de sucesso com os cursos inovadores da nossa faculdade de tecnologia. Explore as últimas tendências, domine habilidades essenciais e conquiste o mercado de trabalho. Seja parte da revolução digital!", + "button": { + "href": "./src/pages/cursos.html", + "content": "Explore Nossos Cursos" + } +} + +const banner = document.getElementById("hero-banner-principal"); + +if (banner) new Banner().create( + banner, info.title, info.desc, + { href: info.button.href, content: info.button.content } +); + diff --git a/Components/ts/Cabecalho/cabecalho.ts b/Components/ts/Cabecalho/cabecalho.ts new file mode 100644 index 0000000..8608cc0 --- /dev/null +++ b/Components/ts/Cabecalho/cabecalho.ts @@ -0,0 +1,50 @@ +import { Container, Anchor, Image, IAnchor, AbstractComponent } from "../components.js"; + +const styles = { + "LOGO": "cabecalho__logo", + "UL": "cabecalho__nav", + "A": "link", + "CURRENT_PAGE": "link--pagina-atual" +}; + +export class Cabecalho extends AbstractComponent { + + protected devMode: boolean = false; + + create(_header: HTMLElement, _currentPage: string, _links: IAnchor[]): HTMLElement | null { + try { + if (_header) { + this.devLogComponent("CABEÇALHO", "create", {_header, _currentPage, _links}); + + const logo = new Image().create({ src: "/public/fiap.png", alt: "FIAP", className: styles.LOGO }); + + _links.map(link => this.devLog(link)) + const nav = new Container().create({ tag: "nav", elements: [ + new Container().create({ tag: "ul", elements: _links.map((link) => { + return new Container().create({ tag: "li", elements: [ + new Anchor().create({ href: link.href, content: link.content, className: styles.A}, { isSpecial: link.content == _currentPage, specialClass: "link--pagina-atual"}) + ]}) + }), className: styles.UL}) + ]}); + + if (logo) { + this.devLog(`LOGO: ${logo.innerHTML}`) + _header.appendChild(logo); + } + + if (nav) { + this.devLog(`NAV: ${nav.innerHTML}`) + _header.appendChild(nav); + } + + this.devLogComponent( "CABEÇALHO", "create", {_header}); + } + + return _header; + + } catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/ts/Cabecalho/index.ts b/Components/ts/Cabecalho/index.ts new file mode 100644 index 0000000..5811a0f --- /dev/null +++ b/Components/ts/Cabecalho/index.ts @@ -0,0 +1,33 @@ +import { Cabecalho } from "../Cabecalho/cabecalho.js"; + +const paginas = [ + { + "url": "/index.html", + "nome": "Página Inicial", + "cabecalho_id": "cabecalho--principal" + }, + { + "url": "/src/pages/cursos.html", + "nome": "Cursos", + "cabecalho_id": "cabecalho--cursos" + }, + { + "url": "/src/pages/favoritos.html", + "nome": "Favoritos", + "cabecalho_id": "cabecalho--favoritos" + }, + { + "url": "/src/pages/equipe.html", + "nome": "Equipe", + "cabecalho_id": "cabecalho--equipe" + } +] + +const links = paginas.map(pagina => { + return { href: pagina.url, content: pagina.nome, target: "_self" } +}); + +for (let i = 0; i < paginas.length; i++) { + const header = document.getElementById(paginas[i].cabecalho_id); + if (header) new Cabecalho().create(header, paginas[i].nome, links); +} diff --git a/Components/ts/Card/card.ts b/Components/ts/Card/card.ts new file mode 100644 index 0000000..50253aa --- /dev/null +++ b/Components/ts/Card/card.ts @@ -0,0 +1,36 @@ +import { Container, Anchor, Image, Text, AbstractComponent, IAnchor, IImage } from "../components.js"; + +const styles = { + "CARD": "card", + "IMAGE": "card__image", + "TEXT_CONTAINER": "card__text-container", + "TITLE": "card__title", + "TEXT": "card__text", + "BUTTON": "card__button" +} + +interface ICard { + create(_title: string, _desc: string, _button: IAnchor, _img: IImage): HTMLElement | null; +} + +export class Card extends AbstractComponent implements ICard { + create(_title: string="default title", _desc: string="default description", _button: IAnchor={ href: "#", content: "default button", target: "_self" }, _img: IImage): HTMLElement | null { + try { + const card = new Container().create({ tag: "div", elements: [ + new Image().create({ src: _img.src, alt: _img.alt, className: styles.IMAGE, rounded: _img.rounded}), + new Container().create({ tag: "div", elements: [ + new Text().create({ content: _title, tag: "h3", className: styles.TITLE }), + new Text().create({ content: _desc, tag: "p", className: styles.TEXT }) + ], className: styles.TEXT_CONTAINER }), + new Anchor().create({ href: _button.href, content: _button.content, className: styles.BUTTON }) + ], className: styles.CARD }) + + this.devLogComponent("CARD", "create", card); + return card; + + } catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Components/ts/Card/cursos.ts b/Components/ts/Card/cursos.ts new file mode 100644 index 0000000..f52ed4e --- /dev/null +++ b/Components/ts/Card/cursos.ts @@ -0,0 +1,23 @@ +import { Card } from "./card.js"; + +const cardSectionID = ".card-section--cursos"; +const url = "../../components/base/cursos.json"; + +fetch(url, {method: "GET"}) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector( cardSectionID ); + if (cardSection) { + _data.map((data: any) => { + + const card = new Card().create( + data.title, data.desc, + { href: data.url, content: "ACESSAR" }, + { src: "../assets/logos/logo-fiap.png", alt: "FIAP" } + ); + + if (card) cardSection.appendChild(card); + }) + } + }) + .catch((error) => console.error(error)); diff --git a/Components/ts/Card/equipe.ts b/Components/ts/Card/equipe.ts new file mode 100644 index 0000000..3e26435 --- /dev/null +++ b/Components/ts/Card/equipe.ts @@ -0,0 +1,23 @@ +import { Card } from "./card.js"; + +const cardSectionID = ".card-section--equipe"; +const url = "../../components/base/equipe.json"; + +fetch(url, {method: "GET"}) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector( cardSectionID ); + if (cardSection) { + _data.map((data: any) => { + + const card = new Card().create( + data.nome, `RM ${data.rm}`, + { href: data.github, content: "VISITAR GITHUB" }, + { src: data.avatar, alt: `Avatar de ${data.nome}`, rounded: "100%" } + ); + + if (card) cardSection.appendChild(card); + }) + } + }) + .catch((error) => console.error(error)); diff --git a/Components/ts/Card/favoritos.ts b/Components/ts/Card/favoritos.ts new file mode 100644 index 0000000..bfb1dd7 --- /dev/null +++ b/Components/ts/Card/favoritos.ts @@ -0,0 +1,26 @@ +import { Card } from "./card.js"; + +const cardSectionID = ".card-section--favorites"; +const url = "../../components/base/favoritos.json"; + +fetch(url, {method: "GET"}) + .then((_response) => _response.json()) + .then((_data) => { + const cardSection = document.querySelector( cardSectionID ); + if (cardSection) { + _data.map((data: any) => { + + data.sites.map((site: any) => { + const card = new Card().create( + site.imgAlt, data.integrante, + { href: site.href, content: "VISITAR PÁGINA" }, + { src: site.imgSrc, alt: site.imgAlt } + ); + + if (card) cardSection.appendChild(card); + }) + }) + } + }) + .catch((error) => console.error(error)); + diff --git a/Components/ts/Curso/curso.ts b/Components/ts/Curso/curso.ts new file mode 100644 index 0000000..39ee86b --- /dev/null +++ b/Components/ts/Curso/curso.ts @@ -0,0 +1,38 @@ +import { Container, Anchor, Text, AbstractComponent } from "../components.js"; + +export class Curso extends AbstractComponent { + + private styles = { + "CURSO": "cursos", + "TITLE": "cursos__title", + "TEXT_CONTAINER": "cursos__text-container", + "NAV": "cursos__nav", + "LINK": "link" + }; + + protected devMode: boolean = true; + + create(_title: string="default title", _text: string[]=["default text"], _nav: {"prev": string, "next": string}): HTMLElement | null { + try { + const curso = new Container().create({ tag: "div", elements: [ + new Text().create({ content: _title, tag: "h2", className: this.styles.TITLE }), + new Container().create({ tag: "div", elements: _text.map(text => + new Text().create({ content: text, tag: "p" }) + ), className: this.styles.TEXT_CONTAINER }), + new Container().create({ tag: "nav", elements: [ + _nav.prev ? new Anchor().create({ href: _nav.prev, content: "Curso Anterior", className: this.styles.LINK }) : null, + _nav.next ? new Anchor().create({ href: _nav.next, content: "Próximo Curso", className: this.styles.LINK }) : null + ], className: this.styles.NAV }) + ], className: this.styles.CURSO }) + + this.devLogComponent("CURSO", "create", curso?.innerHTML ) + + return curso; + + } catch (error) { + console.error(error); + return null; + } + } +} + diff --git a/Components/ts/Curso/index.ts b/Components/ts/Curso/index.ts new file mode 100644 index 0000000..1451d45 --- /dev/null +++ b/Components/ts/Curso/index.ts @@ -0,0 +1,17 @@ +import { Curso } from "./curso.js"; + +const url = "../../../components/base/cursos.json"; + +fetch(url, {method: "GET"}) + .then((_response) => _response.json()) + .then((_data) => { + _data.map((curso: any) => { + const section = document.getElementById(curso.idPage); + + if (section) { + const element = new Curso().create(curso.title, curso.text, curso.nav); + if (element) section.appendChild(element); + } + }) + }) + .catch((error) => console.error(error)); diff --git a/Components/ts/components.ts b/Components/ts/components.ts new file mode 100644 index 0000000..3d3fe5c --- /dev/null +++ b/Components/ts/components.ts @@ -0,0 +1,156 @@ + +export interface ISelector { + className?: string; + id?: string; +} + +export interface ISpecialClass { + isSpecial: boolean; + specialClass: string; +} + +export interface IContainer extends ISelector { + tag: string; + elements?: (HTMLElement | null)[]; +} + +export interface IAnchor extends ISelector { + href: string; + content: string; + target?: string; +} + +export interface IImage extends ISelector { + src: string; + alt?: string; + rounded?: string; +} + +export interface IText extends ISelector { + content: string; + tag: string; +} + +export abstract class AbstractComponent { + + protected addSelector(_component: HTMLElement, _className?: string, _id?: string) { + if (_className) _component.classList.add(_className); + if (_id) _component.id = _id; + } + + protected devMode = false; + + protected devLog(element: any) { + if (this.devMode) console.log(element); + } + + protected devLogComponent(_name: string, _function: string, _params: any) { + if (this.devMode) { + this.devLog(`${_name} ${_function} | params`) + for (const item in _params) { + this.devLog(`${item}: ${_params[item]}`); + } + } + } +} + +export class Container extends AbstractComponent { + + protected devMode: boolean = false; + + create(_container: IContainer={tag: "div", elements: []}): HTMLElement | null { + try { + const container = document.createElement(_container.tag); + + this.addSelector(container, _container.className, _container.id ); + + if (_container.elements) { + _container.elements.map((element, i) => { + if(element) { + container.appendChild(element); + this.devLogComponent( "CONTAINER", "elements", [element.innerHTML]); + } + }) + }; + + this.devLogComponent( "CONTAINER", "create", _container); + return container; + + } catch (e) { + console.error(e); + return null; + } + } + +} + +export class Anchor extends AbstractComponent { + + protected devMode: boolean = false; + + create(_anchor: IAnchor={ href: "#", content: "default anchor", target: "_self" }, _special?: ISpecialClass): HTMLElement | null { + try { + const anchor = document.createElement("a"); + anchor.href = _anchor.href; + anchor.innerHTML = _anchor.content; + _anchor.target ? anchor.target = _anchor.target : "_self"; + this.addSelector(anchor, _anchor.className, _anchor.id ); + if (_special) { + this.devLog(`ìsSpecial: ${_special.isSpecial}`) + if (_special.isSpecial) anchor.classList.add(_special.specialClass); + this.devLog(`anchor with special class: ${anchor.innerHTML}`) + } + + this.devLogComponent("ANCHOR", "create", _anchor); + return anchor; + + } catch (error) { + console.error(error); + return null; + } + } +} + +export class Image extends AbstractComponent { + + protected devMode: boolean = false; + + create(_image: IImage={src: "", alt: "", rounded: "0"}): HTMLElement | null { + try { + const image = document.createElement('img'); + image.src = _image.src; + if (_image.alt) image.alt = _image.alt; + if (_image.rounded) image.style.borderRadius = _image.rounded; + + this.addSelector(image, _image.className, _image.id ); + this.devLogComponent("IMAGE", "create", _image); + + return image; + + } catch (error) { + console.error(error); + return null; + } + } +} + +export class Text extends AbstractComponent { + + protected devMode: boolean = false; + + create(_text: IText={ content: "default text", tag: "p" }): HTMLElement | null { + try { + const text = document.createElement(_text.tag); + text.innerHTML = _text.content; + + this.addSelector(text, _text.className, _text.id ); + this.devLogComponent("TEXT", "create", _text); + + return text; + + } catch (error) { + console.error(error); + return null; + } + } +} diff --git a/Imgs/alura.png b/Imgs/alura.png deleted file mode 100644 index 00aa809..0000000 Binary files a/Imgs/alura.png and /dev/null differ diff --git a/Imgs/balenciaga.png b/Imgs/balenciaga.png deleted file mode 100644 index c256899..0000000 Binary files a/Imgs/balenciaga.png and /dev/null differ diff --git a/Imgs/bing.jpg b/Imgs/bing.jpg deleted file mode 100644 index 5cbaf99..0000000 Binary files a/Imgs/bing.jpg and /dev/null differ diff --git a/Imgs/chatgpt.jpg b/Imgs/chatgpt.jpg deleted file mode 100644 index 296d7a6..0000000 Binary files a/Imgs/chatgpt.jpg and /dev/null differ diff --git a/Imgs/mercari.jpg b/Imgs/mercari.jpg deleted file mode 100644 index 5e059a0..0000000 Binary files a/Imgs/mercari.jpg and /dev/null differ diff --git a/Imgs/mimo.png b/Imgs/mimo.png deleted file mode 100644 index bbc243b..0000000 Binary files a/Imgs/mimo.png and /dev/null differ diff --git a/Imgs/techtudo.png b/Imgs/techtudo.png deleted file mode 100644 index c828e12..0000000 Binary files a/Imgs/techtudo.png and /dev/null differ diff --git a/Imgs/youtube.png b/Imgs/youtube.png deleted file mode 100644 index b33882f..0000000 Binary files a/Imgs/youtube.png and /dev/null differ diff --git a/cursos.html b/cursos.html deleted file mode 100644 index ce0334a..0000000 --- a/cursos.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - Cursos - FIAP - - - -
- - -
- -
-
- -
- - - \ No newline at end of file diff --git a/cursos/adm.html b/cursos/adm.html deleted file mode 100644 index 876bdb0..0000000 --- a/cursos/adm.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - ADM - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/ads.html b/cursos/ads.html deleted file mode 100644 index 243c656..0000000 --- a/cursos/ads.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - ADS - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/banco-de-dados.html b/cursos/banco-de-dados.html deleted file mode 100644 index b69aa48..0000000 --- a/cursos/banco-de-dados.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - BANCO DE DADOS - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/engenharia-da-computacao.html b/cursos/engenharia-da-computacao.html deleted file mode 100644 index fbd40b4..0000000 --- a/cursos/engenharia-da-computacao.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - ENGENHARIA DA COMPUTAÇÃO - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/engenharia-da-mecatronica.html b/cursos/engenharia-da-mecatronica.html deleted file mode 100644 index 0e1b30d..0000000 --- a/cursos/engenharia-da-mecatronica.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - ENGENHARIA DA MECATRÔNICA - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/engenharia-da-producao.html b/cursos/engenharia-da-producao.html deleted file mode 100644 index d8a31d9..0000000 --- a/cursos/engenharia-da-producao.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - ENGENHARIA DA PRODUÇÃO - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/gestao-de-tecnologia-da-informacao.html b/cursos/gestao-de-tecnologia-da-informacao.html deleted file mode 100644 index 0fadebe..0000000 --- a/cursos/gestao-de-tecnologia-da-informacao.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - GESTÃO DE TECNOLOGIA DA INFORMAÇÃO - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/jogos-digitais.html b/cursos/jogos-digitais.html deleted file mode 100644 index 3634d79..0000000 --- a/cursos/jogos-digitais.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - JOGOS DIGITAIS - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/rede-de-computadores.html b/cursos/rede-de-computadores.html deleted file mode 100644 index 7904575..0000000 --- a/cursos/rede-de-computadores.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - REDE DE COMPUTADORES - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/sistemas-da-informacao.html b/cursos/sistemas-da-informacao.html deleted file mode 100644 index 3c4fe42..0000000 --- a/cursos/sistemas-da-informacao.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - SISTEMAS DA INFORMAÇÃO - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/cursos/sistemas-para-internet.html b/cursos/sistemas-para-internet.html deleted file mode 100644 index 24adf82..0000000 --- a/cursos/sistemas-para-internet.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - SISTEMAS PARA INTERNET - FIAP Cursos - - -
- - -
-
- - - \ No newline at end of file diff --git a/fav.html b/fav.html deleted file mode 100644 index b71b26e..0000000 --- a/fav.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - Favoritos - FIAP - - - -
- - -
- - - - diff --git a/index.html b/index.html index 533005c..2d9cb98 100644 --- a/index.html +++ b/index.html @@ -6,45 +6,20 @@ - - - - - + + + + FIAP -
- - -
+
- -
-

Desbrave o Futuro com Nossos Cursos de Tecnologia

-

Prepare-se para uma carreira de sucesso com os cursos inovadores da nossa faculdade de tecnologia. Explore as últimas tendências, domine habilidades essenciais e conquiste o mercado de trabalho. Seja parte da revolução digital!

- Explore Nossos Cursos -
- +
- - \ No newline at end of file + + diff --git a/integrantes.txt b/integrantes.txt deleted file mode 100644 index f863ce5..0000000 --- a/integrantes.txt +++ /dev/null @@ -1,6 +0,0 @@ -INTEGRANTES DA OM CORP. : - Gabriel Eringer - RM99632 - Eduardo Tatsuo - RM551428 - André Sant'Ana - RM551575 - Juan Dutra - RM98719 - Yago Marques - RM551616 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..90bb760 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1215 @@ +{ + "name": "fiap-courses-and-favorites", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fiap-courses-and-favorites", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "tailwindcss": "^3.4.3" + }, + "devDependencies": {} + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/lru-cache": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.1.tgz", + "integrity": "sha512-tS24spDe/zXhWbNPErCHs/AGOzbKGHT+ybSBqmdLm8WZ1xXLWvH8Qn71QPAlqVhd0qUTWjy+Kl9JmISgDdEjsA==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", + "integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4575871 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "fiap-courses-and-favorites", + "version": "2.0.1", + "description": "Checkpoint HTML Fiap Paulista \r Turma 1TDSPG", + "main": "tailwind.config.js", + "scripts": { + "typescript": "tsc --watch", + "tailwindcss": "npx tailwindcss -i ./src/styles/input.css -o ./src/styles/output.css --watch" + }, + "author": "GEdO23", + "license": "ISC", + "dependencies": { + "tailwindcss": "^3.4.3" + } +} diff --git a/Imgs/fiap-bg.png b/public/background-fiap.png similarity index 100% rename from Imgs/fiap-bg.png rename to public/background-fiap.png diff --git a/Imgs/fiap.png b/public/fiap.png similarity index 100% rename from Imgs/fiap.png rename to public/fiap.png diff --git a/reset.css b/reset.css deleted file mode 100644 index 799a8a6..0000000 --- a/reset.css +++ /dev/null @@ -1,49 +0,0 @@ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} - -/* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { - display: block; -} -body { - line-height: 1; -} -ol, ul { - list-style: none; -} -blockquote, q { - quotes: none; -} -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} - -a { - color: inherit; - text-decoration: none; -} \ No newline at end of file diff --git a/src/assets/fotos/foto-andre.jpeg b/src/assets/fotos/foto-andre.jpeg new file mode 100644 index 0000000..383e091 Binary files /dev/null and b/src/assets/fotos/foto-andre.jpeg differ diff --git a/src/assets/fotos/foto-gabriel.jpeg b/src/assets/fotos/foto-gabriel.jpeg new file mode 100644 index 0000000..531be55 Binary files /dev/null and b/src/assets/fotos/foto-gabriel.jpeg differ diff --git a/src/assets/fotos/foto-juan.png b/src/assets/fotos/foto-juan.png new file mode 100644 index 0000000..19b6f63 Binary files /dev/null and b/src/assets/fotos/foto-juan.png differ diff --git a/src/assets/fotos/foto-tatsuo.png b/src/assets/fotos/foto-tatsuo.png new file mode 100644 index 0000000..49df001 Binary files /dev/null and b/src/assets/fotos/foto-tatsuo.png differ diff --git a/src/assets/fotos/foto-yago.jpeg b/src/assets/fotos/foto-yago.jpeg new file mode 100644 index 0000000..d3fd727 Binary files /dev/null and b/src/assets/fotos/foto-yago.jpeg differ diff --git a/src/assets/logos/logo-alura.png b/src/assets/logos/logo-alura.png new file mode 100644 index 0000000..d5ee62c Binary files /dev/null and b/src/assets/logos/logo-alura.png differ diff --git a/src/assets/logos/logo-balenciaga.png b/src/assets/logos/logo-balenciaga.png new file mode 100644 index 0000000..8cf682c Binary files /dev/null and b/src/assets/logos/logo-balenciaga.png differ diff --git a/src/assets/logos/logo-bing.png b/src/assets/logos/logo-bing.png new file mode 100644 index 0000000..d7433bd Binary files /dev/null and b/src/assets/logos/logo-bing.png differ diff --git a/Imgs/blaze.png b/src/assets/logos/logo-blaze.png similarity index 100% rename from Imgs/blaze.png rename to src/assets/logos/logo-blaze.png diff --git a/src/assets/logos/logo-chatgpt.png b/src/assets/logos/logo-chatgpt.png new file mode 100644 index 0000000..01eb4cc Binary files /dev/null and b/src/assets/logos/logo-chatgpt.png differ diff --git a/src/assets/logos/logo-fiap.png b/src/assets/logos/logo-fiap.png new file mode 100644 index 0000000..c057e7e Binary files /dev/null and b/src/assets/logos/logo-fiap.png differ diff --git a/src/assets/logos/logo-mercari.png b/src/assets/logos/logo-mercari.png new file mode 100644 index 0000000..cb3dd3e Binary files /dev/null and b/src/assets/logos/logo-mercari.png differ diff --git a/src/assets/logos/logo-mimo.png b/src/assets/logos/logo-mimo.png new file mode 100644 index 0000000..b8263e3 Binary files /dev/null and b/src/assets/logos/logo-mimo.png differ diff --git a/src/assets/logos/logo-techtudo.png b/src/assets/logos/logo-techtudo.png new file mode 100644 index 0000000..068051c Binary files /dev/null and b/src/assets/logos/logo-techtudo.png differ diff --git a/src/assets/logos/logo-youtube.png b/src/assets/logos/logo-youtube.png new file mode 100644 index 0000000..68dda67 Binary files /dev/null and b/src/assets/logos/logo-youtube.png differ diff --git a/src/pages/cursos.html b/src/pages/cursos.html new file mode 100644 index 0000000..7698667 --- /dev/null +++ b/src/pages/cursos.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + Cursos - FIAP + + + +
+ +
+
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/adm.html b/src/pages/cursos/adm.html new file mode 100644 index 0000000..4354a2a --- /dev/null +++ b/src/pages/cursos/adm.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + ADM - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/ads.html b/src/pages/cursos/ads.html new file mode 100644 index 0000000..0c80bc9 --- /dev/null +++ b/src/pages/cursos/ads.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + ADS - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/banco-de-dados.html b/src/pages/cursos/banco-de-dados.html new file mode 100644 index 0000000..7be0d01 --- /dev/null +++ b/src/pages/cursos/banco-de-dados.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + BANCO DE DADOS - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/engenharia-da-computacao.html b/src/pages/cursos/engenharia-da-computacao.html new file mode 100644 index 0000000..60443ee --- /dev/null +++ b/src/pages/cursos/engenharia-da-computacao.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + ENGENHARIA DA COMPUTAÇÃO - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/engenharia-da-mecatronica.html b/src/pages/cursos/engenharia-da-mecatronica.html new file mode 100644 index 0000000..7d208a4 --- /dev/null +++ b/src/pages/cursos/engenharia-da-mecatronica.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + ENGENHARIA DA MECATRÔNICA - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/engenharia-da-producao.html b/src/pages/cursos/engenharia-da-producao.html new file mode 100644 index 0000000..e4effcb --- /dev/null +++ b/src/pages/cursos/engenharia-da-producao.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + ENGENHARIA DA PRODUÇÃO - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/gestao-de-tecnologia-da-informacao.html b/src/pages/cursos/gestao-de-tecnologia-da-informacao.html new file mode 100644 index 0000000..65b6d67 --- /dev/null +++ b/src/pages/cursos/gestao-de-tecnologia-da-informacao.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + GESTÃO DE TECNOLOGIA DA INFORMAÇÃO - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/jogos-digitais.html b/src/pages/cursos/jogos-digitais.html new file mode 100644 index 0000000..8207092 --- /dev/null +++ b/src/pages/cursos/jogos-digitais.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + JOGOS DIGITAIS - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/rede-de-computadores.html b/src/pages/cursos/rede-de-computadores.html new file mode 100644 index 0000000..3d6461a --- /dev/null +++ b/src/pages/cursos/rede-de-computadores.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + REDE DE COMPUTADORES - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/sistemas-da-informacao.html b/src/pages/cursos/sistemas-da-informacao.html new file mode 100644 index 0000000..fa1bf28 --- /dev/null +++ b/src/pages/cursos/sistemas-da-informacao.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + SISTEMAS DA INFORMAÇÃO - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/cursos/sistemas-para-internet.html b/src/pages/cursos/sistemas-para-internet.html new file mode 100644 index 0000000..e692862 --- /dev/null +++ b/src/pages/cursos/sistemas-para-internet.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + + SISTEMAS PARA INTERNET - FIAP Cursos + + +
+
+ + + \ No newline at end of file diff --git a/src/pages/equipe.html b/src/pages/equipe.html new file mode 100644 index 0000000..4ee7146 --- /dev/null +++ b/src/pages/equipe.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + Equipe - FIAP + + + +
+ +
+
+
+ + + diff --git a/src/pages/favoritos.html b/src/pages/favoritos.html new file mode 100644 index 0000000..27db354 --- /dev/null +++ b/src/pages/favoritos.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + Favoritos - FIAP + + + +
+ +
+
+
+ + + diff --git a/src/styles/input.css b/src/styles/input.css new file mode 100644 index 0000000..8994c01 --- /dev/null +++ b/src/styles/input.css @@ -0,0 +1,103 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + @apply bg-primary text-secondary font-sans; +} + +.link { + @apply font-bold transition-colors hover:text-tertiary; +} + +.link--pagina-atual { + @apply text-tertiary font-bold; +} + +/* CABEÇALHO */ +.cabecalho { + @apply flex justify-between items-center py-5 px-12 gap-8 flex-wrap bg-accent; +} + +.cabecalho__logo { + @apply h-6; +} + +.cabecalho__nav { + @apply flex flex-wrap gap-8; +} + + +/* HERO BANNER */ +.hero-banner { + @apply bg-secondary text-accent flex flex-col gap-8 py-20 px-12; +} + +.hero-banner__title, +.hero-banner__description { + @apply w-2/4 leading-5; +} + +.hero-banner__title { + @apply text-4xl font-bold; +} + +.hero-banner__button { + @apply bg-tertiary py-4 px-5 rounded w-fit; +} + +#hero-banner-principal { + @apply bg-heroBanner bg-center bg-no-repeat bg-cover; +} + + +/* CARDS */ +.card-section { + @apply flex flex-wrap gap-5 py-20 px-12 justify-center; +} + +.card { + @apply + flex flex-col gap-12 + flex-shrink + w-96 p-6 pb-12 rounded-xl bg-accent + transition-opacity opacity-60 hover:opacity-100; +} + +.card__image { + @apply aspect-square rounded-xl object-contain p-8; +} + +.card__text-container { + @apply flex flex-col gap-1; +} + +.card__title { + @apply text-lg font-semibold; +} + +.card__text { + @apply text-sm text-[#777]; +} + +.card__button { + @apply bg-[#3C3C43] font-semibold text-accent p-3 rounded-xl self-baseline text-sm transition-all hover:bg-tertiary; +} + + +/* CURSOS */ +.cursos { + @apply w-4/5 flex flex-col gap-8 p-12 leading-5; +} + +.cursos__title { + @apply text-4xl font-bold; +} + +.cursos__text-container { + @apply flex flex-col gap-5; +} + +.cursos__nav { + @apply flex gap-5; +} diff --git a/src/styles/output.css b/src/styles/output.css new file mode 100644 index 0000000..5a886a7 --- /dev/null +++ b/src/styles/output.css @@ -0,0 +1,764 @@ +/* +! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com +*/ + +/* +1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) +2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) +*/ + +*, +::before, +::after { + box-sizing: border-box; + /* 1 */ + border-width: 0; + /* 2 */ + border-style: solid; + /* 2 */ + border-color: currentColor; + /* 2 */ +} + +::before, +::after { + --tw-content: ''; +} + +/* +1. Use a consistent sensible line-height in all browsers. +2. Prevent adjustments of font size after orientation changes in iOS. +3. Use a more readable tab size. +4. Use the user's configured `sans` font-family by default. +5. Use the user's configured `sans` font-feature-settings by default. +6. Use the user's configured `sans` font-variation-settings by default. +7. Disable tap highlights on iOS +*/ + +html, +:host { + line-height: 1.5; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ + -moz-tab-size: 4; + /* 3 */ + -o-tab-size: 4; + tab-size: 4; + /* 3 */ + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + /* 4 */ + font-feature-settings: normal; + /* 5 */ + font-variation-settings: normal; + /* 6 */ + -webkit-tap-highlight-color: transparent; + /* 7 */ +} + +/* +1. Remove the margin in all browsers. +2. Inherit line-height from `html` so users can set them as a class directly on the `html` element. +*/ + +body { + margin: 0; + /* 1 */ + line-height: inherit; + /* 2 */ +} + +/* +1. Add the correct height in Firefox. +2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655) +3. Ensure horizontal rules are visible by default. +*/ + +hr { + height: 0; + /* 1 */ + color: inherit; + /* 2 */ + border-top-width: 1px; + /* 3 */ +} + +/* +Add the correct text decoration in Chrome, Edge, and Safari. +*/ + +abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +/* +Remove the default font size and weight for headings. +*/ + +h1, +h2, +h3, +h4, +h5, +h6 { + font-size: inherit; + font-weight: inherit; +} + +/* +Reset links to optimize for opt-in styling instead of opt-out. +*/ + +a { + color: inherit; + text-decoration: inherit; +} + +/* +Add the correct font weight in Edge and Safari. +*/ + +b, +strong { + font-weight: bolder; +} + +/* +1. Use the user's configured `mono` font-family by default. +2. Use the user's configured `mono` font-feature-settings by default. +3. Use the user's configured `mono` font-variation-settings by default. +4. Correct the odd `em` font sizing in all browsers. +*/ + +code, +kbd, +samp, +pre { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + /* 1 */ + font-feature-settings: normal; + /* 2 */ + font-variation-settings: normal; + /* 3 */ + font-size: 1em; + /* 4 */ +} + +/* +Add the correct font size in all browsers. +*/ + +small { + font-size: 80%; +} + +/* +Prevent `sub` and `sup` elements from affecting the line height in all browsers. +*/ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* +1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297) +2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016) +3. Remove gaps between table borders by default. +*/ + +table { + text-indent: 0; + /* 1 */ + border-color: inherit; + /* 2 */ + border-collapse: collapse; + /* 3 */ +} + +/* +1. Change the font styles in all browsers. +2. Remove the margin in Firefox and Safari. +3. Remove default padding in all browsers. +*/ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-feature-settings: inherit; + /* 1 */ + font-variation-settings: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + font-weight: inherit; + /* 1 */ + line-height: inherit; + /* 1 */ + letter-spacing: inherit; + /* 1 */ + color: inherit; + /* 1 */ + margin: 0; + /* 2 */ + padding: 0; + /* 3 */ +} + +/* +Remove the inheritance of text transform in Edge and Firefox. +*/ + +button, +select { + text-transform: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Remove default button styles. +*/ + +button, +input:where([type='button']), +input:where([type='reset']), +input:where([type='submit']) { + -webkit-appearance: button; + /* 1 */ + background-color: transparent; + /* 2 */ + background-image: none; + /* 2 */ +} + +/* +Use the modern Firefox focus style for all focusable elements. +*/ + +:-moz-focusring { + outline: auto; +} + +/* +Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737) +*/ + +:-moz-ui-invalid { + box-shadow: none; +} + +/* +Add the correct vertical alignment in Chrome and Firefox. +*/ + +progress { + vertical-align: baseline; +} + +/* +Correct the cursor style of increment and decrement buttons in Safari. +*/ + +::-webkit-inner-spin-button, +::-webkit-outer-spin-button { + height: auto; +} + +/* +1. Correct the odd appearance in Chrome and Safari. +2. Correct the outline style in Safari. +*/ + +[type='search'] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/* +Remove the inner padding in Chrome and Safari on macOS. +*/ + +::-webkit-search-decoration { + -webkit-appearance: none; +} + +/* +1. Correct the inability to style clickable types in iOS and Safari. +2. Change font properties to `inherit` in Safari. +*/ + +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* +Add the correct display in Chrome and Safari. +*/ + +summary { + display: list-item; +} + +/* +Removes the default spacing and border for appropriate elements. +*/ + +blockquote, +dl, +dd, +h1, +h2, +h3, +h4, +h5, +h6, +hr, +figure, +p, +pre { + margin: 0; +} + +fieldset { + margin: 0; + padding: 0; +} + +legend { + padding: 0; +} + +ol, +ul, +menu { + list-style: none; + margin: 0; + padding: 0; +} + +/* +Reset default styling for dialogs. +*/ + +dialog { + padding: 0; +} + +/* +Prevent resizing textareas horizontally by default. +*/ + +textarea { + resize: vertical; +} + +/* +1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300) +2. Set the default placeholder color to the user's configured gray 400 color. +*/ + +input::-moz-placeholder, textarea::-moz-placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +input::placeholder, +textarea::placeholder { + opacity: 1; + /* 1 */ + color: #9ca3af; + /* 2 */ +} + +/* +Set the default cursor for buttons. +*/ + +button, +[role="button"] { + cursor: pointer; +} + +/* +Make sure disabled buttons don't get the pointer cursor. +*/ + +:disabled { + cursor: default; +} + +/* +1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14) +2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210) + This can trigger a poorly considered lint error in some tools but is included by design. +*/ + +img, +svg, +video, +canvas, +audio, +iframe, +embed, +object { + display: block; + /* 1 */ + vertical-align: middle; + /* 2 */ +} + +/* +Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14) +*/ + +img, +video { + max-width: 100%; + height: auto; +} + +/* Make elements with the HTML hidden attribute stay hidden by default */ + +[hidden] { + display: none; +} + +*, ::before, ::after { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +::backdrop { + --tw-border-spacing-x: 0; + --tw-border-spacing-y: 0; + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-rotate: 0; + --tw-skew-x: 0; + --tw-skew-y: 0; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-pan-x: ; + --tw-pan-y: ; + --tw-pinch-zoom: ; + --tw-scroll-snap-strictness: proximity; + --tw-gradient-from-position: ; + --tw-gradient-via-position: ; + --tw-gradient-to-position: ; + --tw-ordinal: ; + --tw-slashed-zero: ; + --tw-numeric-figure: ; + --tw-numeric-spacing: ; + --tw-numeric-fraction: ; + --tw-ring-inset: ; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: rgb(59 130 246 / 0.5); + --tw-ring-offset-shadow: 0 0 #0000; + --tw-ring-shadow: 0 0 #0000; + --tw-shadow: 0 0 #0000; + --tw-shadow-colored: 0 0 #0000; + --tw-blur: ; + --tw-brightness: ; + --tw-contrast: ; + --tw-grayscale: ; + --tw-hue-rotate: ; + --tw-invert: ; + --tw-saturate: ; + --tw-sepia: ; + --tw-drop-shadow: ; + --tw-backdrop-blur: ; + --tw-backdrop-brightness: ; + --tw-backdrop-contrast: ; + --tw-backdrop-grayscale: ; + --tw-backdrop-hue-rotate: ; + --tw-backdrop-invert: ; + --tw-backdrop-opacity: ; + --tw-backdrop-saturate: ; + --tw-backdrop-sepia: ; + --tw-contain-size: ; + --tw-contain-layout: ; + --tw-contain-paint: ; + --tw-contain-style: ; +} + +body { + --tw-bg-opacity: 1; + background-color: rgb(230 230 230 / var(--tw-bg-opacity)); + font-family: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --tw-text-opacity: 1; + color: rgb(9 9 12 / var(--tw-text-opacity)); +} + +.link { + font-weight: 700; + transition-property: color, background-color, border-color, text-decoration-color, fill, stroke; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.link:hover { + --tw-text-opacity: 1; + color: rgb(237 20 91 / var(--tw-text-opacity)); +} + +.link--pagina-atual { + font-weight: 700; + --tw-text-opacity: 1; + color: rgb(237 20 91 / var(--tw-text-opacity)); +} + +/* CABEÇALHO */ + +.cabecalho { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + gap: 2rem; + --tw-bg-opacity: 1; + background-color: rgb(243 243 243 / var(--tw-bg-opacity)); + padding-top: 1.25rem; + padding-bottom: 1.25rem; + padding-left: 3rem; + padding-right: 3rem; +} + +.cabecalho__logo { + height: 1.5rem; +} + +.cabecalho__nav { + display: flex; + flex-wrap: wrap; + gap: 2rem; +} + +/* HERO BANNER */ + +.hero-banner { + display: flex; + flex-direction: column; + gap: 2rem; + --tw-bg-opacity: 1; + background-color: rgb(9 9 12 / var(--tw-bg-opacity)); + padding-top: 5rem; + padding-bottom: 5rem; + padding-left: 3rem; + padding-right: 3rem; + --tw-text-opacity: 1; + color: rgb(243 243 243 / var(--tw-text-opacity)); +} + +.hero-banner__title, +.hero-banner__description { + width: 50%; + line-height: 1.25rem; +} + +.hero-banner__title { + font-size: 2.25rem; + line-height: 2.5rem; + font-weight: 700; +} + +.hero-banner__button { + width: -moz-fit-content; + width: fit-content; + border-radius: 0.25rem; + --tw-bg-opacity: 1; + background-color: rgb(237 20 91 / var(--tw-bg-opacity)); + padding-top: 1rem; + padding-bottom: 1rem; + padding-left: 1.25rem; + padding-right: 1.25rem; +} + +#hero-banner-principal { + background-image: url('../../public/background-fiap.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +/* CARDS */ + +.card-section { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 1.25rem; + padding-top: 5rem; + padding-bottom: 5rem; + padding-left: 3rem; + padding-right: 3rem; +} + +.card { + display: flex; + width: 24rem; + flex-shrink: 1; + flex-direction: column; + gap: 3rem; + border-radius: 0.75rem; + --tw-bg-opacity: 1; + background-color: rgb(243 243 243 / var(--tw-bg-opacity)); + padding: 1.5rem; + padding-bottom: 3rem; + opacity: 0.6; + transition-property: opacity; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.card:hover { + opacity: 1; +} + +.card__image { + aspect-ratio: 1 / 1; + border-radius: 0.75rem; + -o-object-fit: contain; + object-fit: contain; + padding: 2rem; +} + +.card__text-container { + display: flex; + flex-direction: column; + gap: 0.25rem; +} + +.card__title { + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 600; +} + +.card__text { + font-size: 0.875rem; + line-height: 1.25rem; + --tw-text-opacity: 1; + color: rgb(119 119 119 / var(--tw-text-opacity)); +} + +.card__button { + align-self: baseline; + border-radius: 0.75rem; + --tw-bg-opacity: 1; + background-color: rgb(60 60 67 / var(--tw-bg-opacity)); + padding: 0.75rem; + font-size: 0.875rem; + line-height: 1.25rem; + font-weight: 600; + --tw-text-opacity: 1; + color: rgb(243 243 243 / var(--tw-text-opacity)); + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; +} + +.card__button:hover { + --tw-bg-opacity: 1; + background-color: rgb(237 20 91 / var(--tw-bg-opacity)); +} + +/* CURSOS */ + +.cursos { + display: flex; + width: 80%; + flex-direction: column; + gap: 2rem; + padding: 3rem; + line-height: 1.25rem; +} + +.cursos__title { + font-size: 2.25rem; + line-height: 2.5rem; + font-weight: 700; +} + +.cursos__text-container { + display: flex; + flex-direction: column; + gap: 1.25rem; +} + +.cursos__nav { + display: flex; + gap: 1.25rem; +} diff --git a/style.css b/style.css deleted file mode 100644 index 7f292bb..0000000 --- a/style.css +++ /dev/null @@ -1,169 +0,0 @@ -:root { - --primary-color: #FFF; - --secondary-color: #000; - --tertiary-color: #ED145B; - - --primary-font: Arial, Helvetica, sans-serif; - /*TODO: adcionar fonte secundaria */ - --secondary-font: var(--primary-color), sans-serif; -} - -body { - background-color: var(--primary-color, #FFF); - font-family: var(--primary-font, sans-serif); -} - -.hero-banner, -.cursos { - display: flex; - flex-direction: column; - gap: 2rem; - padding: 5rem 3.125rem; -} - -.cursos { - width: 80%; -} - -.cabecalho { - display: flex; - justify-content: space-between; - align-items: center; - padding: 1.25rem 3.125rem; - gap: 2rem; - flex-wrap: wrap; -} - -.cabecalho__logo { - height: 1.5rem; -} - -.cabecalho__nav { - display: flex; - gap: 2rem; - flex-wrap: wrap; -} - -.cursos__title { - font-size: 2.5rem; - font-weight: 700; -} - -.cursos > * { - line-height: 1.25em; -} - -.link, -strong { - font-weight: 700; - transition: color 0.2s ease-in-out; -} - -.link:hover, -strong:hover, -.link--pagina-atual { - color: var(--tertiary-color, #000); -} - -.hero-banner { - background-color: var(--secondary-color, #000); - background-image: url(/img/fiap-bg.png); - background-position: center; - background-repeat: no-repeat; - background-size: cover; - - color: var(--primary-color, #FFF); -} - -.hero-banner__title, -.hero-banner__description { - text-shadow: 2px 2px 5px #0000007a; - width: 50%; - line-height: 1.25em; -} - -.hero-banner__title { - font-size: 2.5rem; - font-weight: 700; -} - -.hero-banner__button { - background-color: var(--tertiary-color, #000); - padding: 1rem 1.25rem; - border-radius: 5px; - width: fit-content; -} - -.section--cards { - display: flex; - flex-wrap: wrap; - gap: 50px 20px; - padding: 5rem 3.125rem; - justify-content: center; -} - -.card { - display: flex; - flex-direction: column; - padding: 24px; - gap: 24px; - justify-content: space-between; - border-radius: 12px; - background-color: #F3F3F3; - box-shadow: 0 2px 5px #0000007a; - width: 256px; -} - -.card:hover > .card__image { - opacity: 1; -} - -.card__image { - aspect-ratio: 4/3; - border-radius: 12px; - object-fit: contain; - padding: 2rem; - opacity: .8; - transition: .2s ease-in-out; -} - -.card__text { - display: flex; - flex-direction: column; - gap: 4px; -} - -.card__headline { - font-size: 1.125rem; - font-weight: 500; -} - -.card__content { - font-size: 0.875rem; - color: #777; -} - -.card__button { - background: #3C3C43; - color: #FFF; - padding: 12px; - border-radius: 100px; - align-self: baseline; - font-size: 0.875rem; - transition: .2s ease-in-out; -} - -.card__button:hover { - background: var(--tertiary-color, --secondary-color, #000); -} - -.cursos__text-container { - display: flex; - flex-direction: column; - gap: 1.125rem; -} - -.cursos__nav { - display: flex; - gap: 1.125rem; -} \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..89d208f --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,17 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./src/**/*.{html,js}"], + theme: { + extend: {}, + colors: { + primary: `#e6e6e6`, + secondary: `#09090c`, + tertiary: `#ED145B`, + accent: `#f3f3f3` + }, + backgroundImage: { + heroBanner: "url('../../public/background-fiap.png')" + } + }, + plugins: [], +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..393ab36 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "target": "es2016", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "outDir": "./components/js" + } +}