From 8ee4cf95a878594ad92d623a0a4df0b1c778cd7a Mon Sep 17 00:00:00 2001 From: Silas Date: Wed, 28 Jan 2026 22:18:32 -0300 Subject: [PATCH 1/2] feat: add configurable tooltips --- .flowbite-react/pid | 2 +- .../feedback/components/ReportTitleInput.tsx | 4 +- .../feedback/components/ToggleSwitch.tsx | 4 +- .../feedback/config/TooltipContent.ts | 19 ++ src/components/feedback/index.tsx | 295 +++++++++++------- src/shared/Tooltip.tsx | 61 ++++ src/shared/index.ts | 1 + 7 files changed, 260 insertions(+), 126 deletions(-) create mode 100644 src/components/feedback/config/TooltipContent.ts create mode 100644 src/shared/Tooltip.tsx diff --git a/.flowbite-react/pid b/.flowbite-react/pid index f75f5ed..fa606e0 100644 --- a/.flowbite-react/pid +++ b/.flowbite-react/pid @@ -1 +1 @@ -3518 \ No newline at end of file +21636 \ No newline at end of file diff --git a/src/components/feedback/components/ReportTitleInput.tsx b/src/components/feedback/components/ReportTitleInput.tsx index f9656e8..ab1522f 100644 --- a/src/components/feedback/components/ReportTitleInput.tsx +++ b/src/components/feedback/components/ReportTitleInput.tsx @@ -1,9 +1,9 @@ -import React, { ChangeEvent } from 'react'; +import React, { ChangeEvent, ReactNode } from 'react'; interface ReportTitleInputProps { title: string; onChange: (value: string) => void; - label?: string; + label?: ReactNode; placeholder?: string; } diff --git a/src/components/feedback/components/ToggleSwitch.tsx b/src/components/feedback/components/ToggleSwitch.tsx index 6944dc8..0303acd 100644 --- a/src/components/feedback/components/ToggleSwitch.tsx +++ b/src/components/feedback/components/ToggleSwitch.tsx @@ -1,8 +1,8 @@ -import React, { ChangeEvent } from 'react'; +import React, { ChangeEvent, ReactNode } from 'react'; interface ToggleSwitchProps { id: string; - label: string; + label: ReactNode; isChecked: boolean; onChange: (e: ChangeEvent) => void; } diff --git a/src/components/feedback/config/TooltipContent.ts b/src/components/feedback/config/TooltipContent.ts new file mode 100644 index 0000000..36e93ac --- /dev/null +++ b/src/components/feedback/config/TooltipContent.ts @@ -0,0 +1,19 @@ +export const TOOLTIP_CONTENT = { + header: {}, + geral: { + Titulo_do_relatorio: "Define o título que aparecerá no topo do relatório de feedback gerado", + Exibir_pontuacao: "Quando ativado, exibe a pontuação numérica (0-100) no feedback final", + Exibir_testes_aprovados: "Exibe quais testes foram aprovados no relatório de feedback", + Adicionar_resumo: "Inclui um resumo geral do desempenho no início do relatório", + Adicionar_conteudo_online_de_apoio: "Materiais de apoio vinculados a testes específicos para ajudar o aluno" + }, + ai: { + inteligencia_artificial: "Defina como a Inteligência Artificial deve se comportar ao avaliar o aluno", + Fornecimento_de_solucoes: "Define se o feedback deve incluir dicas, soluções completas, ou apenas avaliação", + Tom_do_feedback: "Determina o tom utilizado pela IA ao gerar o feedback (encorajador, neutro, direto)", + Persona_do_feedback: "Define a personalidade da IA ao fornecer feedback (ex: professor experiente, mentor amigável)", + Contexto_da_atividade: "Contexto sobre a atividade avaliada para melhorar a relevância do feedback gerado", + Orientacoes_extras: "Instruções adicionais para guiar a IA na geração de feedback personalizado", + Arquivos_para_leitura: "Arquivos que serão lidos e incluídos no contexto do feedback" + } +}; \ No newline at end of file diff --git a/src/components/feedback/index.tsx b/src/components/feedback/index.tsx index c8a943a..de6b714 100644 --- a/src/components/feedback/index.tsx +++ b/src/components/feedback/index.tsx @@ -3,9 +3,10 @@ import ReportTitleInput from './components/ReportTitleInput'; import ToggleSwitch from './components/ToggleSwitch'; import ResourceForm from './components/ResourceForm'; import ResourceList from './components/ResourceList'; -import { SaveButton } from '../../shared'; +import { SaveButton, Tooltip } from '../../shared'; import { useSaveState, useArrayState, useFormInput } from '../../hooks'; import useFeedbackForm, { FeedbackConfig, OnlineResource } from './hooks/useFeedbackForm'; +import { TOOLTIP_CONTENT } from './config/TooltipContent'; type FeedbackMode = 'ai' | 'static' | 'default'; @@ -17,12 +18,12 @@ interface FeedbackFormProps { const FeedbackForm: React.FC = ({ onSave, feedbackMode = 'ai' }) => { // Custom hook for feedback form state and logic const feedbackForm = useFeedbackForm(feedbackMode); - + // Array states for resources and reading files const readingFilesState = useArrayState([]); const currentFileInput = useFormInput(""); const resourcesState = useArrayState([]); - + // Save state hook const { isSaved, showSuccess: showSaveSuccess, showAnimation: saveButtonAnimation, triggerSave, cancelSave } = useSaveState(); @@ -66,45 +67,70 @@ const FeedbackForm: React.FC = ({ onSave, feedbackMode = 'ai'

Geral

- +
- + Título do Relatório + + + } /> - {/* Configurações Booleanas (Toggles) */} + {/* Configurações Booleanas */}
- feedbackForm.handleToggle('show_score')} + label={ + + Exibir Pontuação + + + } /> - feedbackForm.handleToggle('show_passed_tests')} + label={ + + Exibir Testes Aprovados + + + } /> - feedbackForm.handleToggle('add_report_summary')} + label={ + + Adicionar Resumo + + + } /> +
{/* Conteúdo Online */}
-

- Adicionar Conteúdo Online de Apoio -

+
+

+ Adicionar Conteúdo Online de Apoio +

+ +
- @@ -117,125 +143,152 @@ const FeedbackForm: React.FC = ({ onSave, feedbackMode = 'ai'

Inteligência Artificial + Beta

-
- {/* Fornecimento de Soluções */} -
-

Fornecimento de Soluções

-
- {(["hint", "yes", "no"] as const).map((type) => ( - - ))} + }`} + > + {type === "hint" ? "Dica" : type === "yes" ? "Sim" : "Não"} + + ))} +
-
- - {/* Tom do Feedback */} - - - {/* Persona do Feedback */} - - - {/* Contexto da Atividade */} -
-

Contexto da Atividade

-