-
Notifications
You must be signed in to change notification settings - Fork 410
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(dark-mode): adiciona suporte ao dark mode #377
Conversation
Wrap BaseLayout with a Box that contains all content #375
Someone is attempting to deploy this pull request to the TabNews Team on Vercel. To accomplish this, the commit author's email address needs to be associated with a GitHub account. Learn more about how to change the commit author information. |
Add settings to sync bytemd theme with user selected theme #375
const mode = localStorage.getItem('theme') || 'day'; | ||
const modeToChange = mode === 'day' ? 'night' : 'day'; | ||
|
||
localStorage.setItem('theme', modeToChange); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pensando aqui. Será que não ficaria mais leagl salvar esses dados no perfil do usuário (no banco de dados) do que no localStorage?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seria interessante, assim o tema iria ficar sincronizado em qualquer dispositivo que a pessoa logar com sua conta, porém acho pra implementar isso cabe abrir uma outra pull request
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Boa! Será que vale abrir uma Issue?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Acho super válido!
@ermesonsampaio is attempting to deploy a commit to the TabNews Team on Vercel. To accomplish this, @ermesonsampaio needs to request access to the Team. Afterwards, an owner of the Team is required to accept their membership request. If you're already a member of the respective Vercel Team, make sure that your Personal Vercel Account is connected to your GitHub account. |
Show @ermesonsampaio ! Estava testando localmente e vi que o Modo
|
@filipedeschamps Essa mudança de estilos é no mínimo intrigante, é notável que no ambiente de Produção os estilos no modo Como pedido vou descrever como foi o processo de implementação do dark mode. PrimerNão houve nenhuma barreira por conta do hook ByteMD(View)Houve uma certa dificuldade, pois anteriormente o tema vinha do ByteMD(Edit)Dentro do componente A implementação do dark mode na parte onde você escreve o markdown foi simples, foi só adicionar uma propriedade Na parte do layout do ByteMD foi necessário criar um arquivo css para que o layout ficasse em harmonia com o restante da aplicação. Highlight.jsA solução encontrada foi utilizar |
Após fazer essa listagem meio que doucumentando as soluções encontradas, uma maneira de deixar o highlight da visualização do markdown no mesmo nível do ambiente de produção é usar a mesma solução encontrada para o A diferença que ainda continuaria seria só no modo |
Agora o light mode nessa branch está assim como o tabnews em produção. |
Showww!!! Dois pontos:
Screen.Recording.2022-05-30.at.8.53.54.AM.mov |
Acho que isso é um problema recorrente do React mesmo, no meu projeto do Temcrase, eu usei uma lib para fazer o DarkMode e eles tem esse script aqui pra prevenir isso: https://github.com/gabrnunes/tem-crase/blob/main/public/noflash.js Será que dá pra adaptar ele pro teu contexto @ermesonsampaio ? |
@gabrnunes pelo que entendi basicamente esse script define uma classe no body de acordo com o tema no |
Publicado em Homologação 😍 e fiz um post de teste: https://tabnews-kyre21c3n-tabnews.vercel.app/filipedeschamps/dark-mode-no-tabnews-beta Em paralelo, a Home fica sensacionalmente linda 🤝 Em paralelo 2, esse Dark Mode também faz passar mal o próprio ByteMD, olha o playground deles (na parte de syntax highlight): https://bytemd.js.org/playground/ Não ta fácil pra ninguém @ermesonsampaio 😂 |
Oi, pessoal! Não entendi onde paramos nessa questão do modo dark. Quem sabe eu possa ajudar em algo. 🤝🏽 |
Sofremos alguns detalhes técnicos na implementação, mas algo pode facilitar a nossa vida que é o GitHub estar criando um componente nativo dentro do Primer: https://primer.style/react/drafts/MarkdownEditor Não resolve todos os problemas, mas imagino que resolverá completamente o problema de estilização do editor. |
@ermesonsampaio pode liberar seu repositório para eu poder ajudar ? 🥺 |
@lucasalberto01 infelizmente perdi o acesso a essa conta. |
@ermesonsampaio MEEEEEEEEEEEEE, vamos ter que escrever tudo de novo ? Pq agora não tem como atualizar essa PR com as correções solicitadas |
Já que estão ressurgindo muitos pedidos a respeito dessa feature, vou resumir o maior impedimento, na minha visão, desde a última vez que dei uma olhada nisso. Todas as principais páginas (home, recentes, username/slug, ...) são renderizadas no servidor (SSR), e nesse momento não é possível definir o tema do usuário, por conta disso a seleção do tema só é feita quando o navegador faz o hydration da página, o que causa esse problema #377 (comment). Como o @aprendendofelipe disse aqui em cima, esse é um problema com o PrimerJs, que a princípio precisa de uma restruturação para aceitar variáveis css. No meu último comentário eu implemento uma alternativa para tentar contornar esse problema, mas ela pode impactar no SEO e vai impedir o acesso de um usuário com o js desativado. * Se eu tiver entendido errado ou já existir alguma outra solução por favor me avise |
@ErickCReis eu acabei de fazer uma PR sobre isso (#916) e esse flash não está acontecendo na versão de dev nem na versão buildada. |
Dei uma olhada lá, e eu acho que vc está caindo nesse caso aqui: #377 (comment)
|
@ErickCReis sabe alguma forma de testar e averiguá isso aqui em dev ? |
@lucasalberto01 Não lembro como fiz da última vez, mas desativando o JS no dev tools vc deve ver esse erro, acho que só vai funcionar com a versão buildada. |
Turma, caindo de paraquedas: minha sugestão é avaliar o componente oficial do Primer: https://primer.style/react/drafts/MarkdownEditor Eu imagino que ele irá oferecer a compatibilidade "de graça" com dark mode 🤝 |
Acho que ainda é como o @ErickCReis resumiu.
Isso elimina só um dos problemas, que é o ByteMD, e é o mais fácil de resolver. Ainda sobra o problema com a hidratação da página, que, até onde vi, para eliminar o flash e os problemas com SEO, só utilizando variáveis CSS, mas não é assim que o Primer faz a estilização. Então temos que fazer uma "gambiarra" para estilizar os componentes do Primer com variáveis CSS. Nada impossível de fazer, mas daí ninguém garante que vai ser compatível com as atualizações do Primer. |
caindo de paraquedas aqui galera, mas ja tive problemas com fouc ao implementar dark mode (nao foi com next, foi com sveltekit) na primeira implementação, eu salvava a variavel do tema no localStorage, dessa forma fica impossivel o servidor saber qual o tema do usuario pra ja enviar, por exemplo, uma classe "dark-mode" no Consegui resolver o problema salvando o tema nos cookies, pq o servidor tem acesso aos cookies, entao bastou escrever algo como um middleware que pega o cookie do tema, e setar ele no body antes de enviar o html. o problema no fim das contas se resume a salvar o tema do usuario em algum lugar que o servidor possa ver. |
não da pra liberar o recurso mesmo como beta ? |
@manotroll eu resolvi a tela piscando nessa PR #916. Não sei como está essa questão dos merges com o @filipedeschamps @aprendendofelipe |
EDIT: Dei uma olhadinha básica aqui, parece que a tag css dos elementos é dinamica e aleatória, sei lá pq. O que inviabiliza a minha ideia a seguir. Vi coisas como Pessoal, como o Dark Mode até agora deu alguns problemas na implementação, eu sugiro uma medida paliativa para ajudar os olhos dos nossos leitores vampiros. 1- Implementar, pelo menos, um Dark Mode apenas de leitura (nem todo mudo está editando coisas) basicamente, é colocar no arquivo css do tabnews algo como:
O exemplo acima é... apenas um exemplo da minha implementação aqui, de um projeto pessoal. Se concordarem posso até abrir um PR novo para a comunidade validar. |
@ermesonsampaio, acho que agora a conta correta é @ermesonqueiroz, né? Muito obrigado pelo PR! E obrigado também pra toda a turma que participou por aqui, pois contribuíram muito para chegarmos na solução do PR #1348 que foi para produção hoje. 💪 O post comemorativo é esse: 🎉 https://www.tabnews.com.br/FelipeBarso/tabnews-dark-mode-e-novas-funcionalidades-do-editor Vou fechar esse PR e qualquer ajuste necessário será mais fácil discutirmos em uma issue e resolver em um novo PR. 👍 Por exemplo a opção de salvar a preferência na conta do usuário, como sugerido pelo @gabrnunes, isso é algo que muito provavelmente será implementado futuramente 😉 |
Adiciona um alternador de temas
Dependência
Esse pull requeste depende da issue #375