diff --git a/src/main/java/com/agendaestudantil/configuracao/ConfiguracaoSeguranca.java b/src/main/java/com/agendaestudantil/configuracao/ConfiguracaoSeguranca.java index 52a70d2..aa1a437 100644 --- a/src/main/java/com/agendaestudantil/configuracao/ConfiguracaoSeguranca.java +++ b/src/main/java/com/agendaestudantil/configuracao/ConfiguracaoSeguranca.java @@ -4,6 +4,7 @@ import com.agendaestudantil.filtro.FiltroJwt; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpStatus; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -12,6 +13,7 @@ import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.HttpStatusEntryPoint; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; @@ -44,6 +46,8 @@ public class ConfiguracaoSeguranca { "/swagger-ui/**", "/v3/api-docs/**") .permitAll() .anyRequest().authenticated()) + .exceptionHandling(ex -> ex + .authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .addFilterBefore(filtroJwt, UsernamePasswordAuthenticationFilter.class); diff --git a/src/main/resources/static/calendario.css b/src/main/resources/static/calendario.css index c0cf5c6..dc1715b 100644 --- a/src/main/resources/static/calendario.css +++ b/src/main/resources/static/calendario.css @@ -157,6 +157,19 @@ body { font-family: inherit; } #btnNovoEvento:hover { background: #a03224; } +#btnGerenciarDisciplinas { + background: transparent; + color: #c0392b; + border: 2px solid #c0392b; + border-radius: 8px; + padding: 6px 16px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: background 0.2s, color 0.2s; + font-family: inherit; +} +#btnGerenciarDisciplinas:hover { background: #c0392b; color: #fff; } /* Calendar area */ .calendar-area { background: #fff; border-radius: 12px; box-shadow: 0 1px 4px rgba(0,0,0,0.08); overflow: hidden; } @@ -444,3 +457,89 @@ body { [data-theme="dark"] #toast { background: #2a2a2a; } [data-theme="dark"] .mais-eventos { color: var(--text-secondary); } + +/* ===== DISCIPLINE BUTTON DARK MODE ===== */ +[data-theme="dark"] #btnGerenciarDisciplinas { + color: #e57373; + border-color: #e57373; +} +[data-theme="dark"] #btnGerenciarDisciplinas:hover { + background: #e57373; + color: #fff; +} + +/* ===== MODAL DISCIPLINA PANELS ===== */ +.modal-disc-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 16px; +} +.modal-disc-header h2 { + font-size: 18px; + font-weight: 700; + color: #1f2937; + margin: 0; +} +[data-theme="dark"] .modal-disc-header h2 { color: var(--text-primary); } + +.modal-fechar-btn { + background: none; + border: none; + font-size: 22px; + line-height: 1; + cursor: pointer; + color: #9ca3af; + padding: 2px 7px; + border-radius: 6px; + transition: background 0.15s, color 0.15s; +} +.modal-fechar-btn:hover { background: #f3f4f6; color: #374151; } +[data-theme="dark"] .modal-fechar-btn:hover { background: var(--hover-bg); color: var(--text-primary); } + +.modal-corpo-lista { + max-height: 310px; + overflow-y: auto; + margin-bottom: 4px; +} +.modal-corpo-form { margin-bottom: 4px; } + +/* Discipline list item */ +.disc-item { + display: flex; + align-items: center; + gap: 10px; + padding: 11px 8px; + border-radius: 8px; + cursor: pointer; + transition: background 0.15s; + border-bottom: 1px solid #e5e7eb; +} +.disc-item:last-child { border-bottom: none; } +.disc-item:hover { background: #f9fafb; } +[data-theme="dark"] .disc-item { border-bottom-color: var(--border-color); } +[data-theme="dark"] .disc-item:hover { background: var(--hover-bg); } + +.disc-cor { + width: 13px; + height: 13px; + border-radius: 50%; + flex-shrink: 0; +} +.disc-nome { + font-weight: 600; + font-size: 14px; + flex: 1; + color: #111827; +} +[data-theme="dark"] .disc-nome { color: var(--text-primary); } +.disc-info { + font-size: 12px; + color: #6b7280; +} +[data-theme="dark"] .disc-info { color: var(--text-secondary); } +.disc-seta { + color: #9ca3af; + font-size: 20px; + line-height: 1; +} diff --git a/src/main/resources/static/calendario.html b/src/main/resources/static/calendario.html index 3b1de6d..3993066 100644 --- a/src/main/resources/static/calendario.html +++ b/src/main/resources/static/calendario.html @@ -9,6 +9,115 @@ + @@ -54,6 +163,21 @@ +
+ +
+
+ Notificações + +
+
+
Nenhuma notificação
+
+
+
Configurações @@ -196,34 +320,44 @@