From 7b67bd083ad60a826122b780dbc6d2153fa98aad Mon Sep 17 00:00:00 2001 From: Leonardo Date: Tue, 28 Apr 2026 17:11:56 -0300 Subject: [PATCH] Melissa Agenda: breakpoint compact + drawer mobile teleportado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dois pontos de quebra agora: - sempre presente no DOM (v-show controla display) — garante target valido desde o mount. Botao "Menu" mobile-only aparece a esquerda do header. Backdrop entre drawer e .ma-page com Transition de fade. Bonus styles.scss: fix borda dupla do FullCalendar. .fc-scrollgrid em light mode mantinha borda externa que somada com a borda das celulas da ponta dava 2px na borda do calendario. Zera o contorno do contairner — celulas (td/th) ja desenham a grade visual. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/assets/styles.scss | 7 +- src/layout/melissa/MelissaAgenda.vue | 377 ++++++++++++++++++--------- 2 files changed, 264 insertions(+), 120 deletions(-) diff --git a/src/assets/styles.scss b/src/assets/styles.scss index f404423..4e3faca 100644 --- a/src/assets/styles.scss +++ b/src/assets/styles.scss @@ -279,13 +279,18 @@ background: var(--surface-hover); } +/* Bordas do FullCalendar — solução pra "borda dupla": + - células (td/th) MANTÊM a borda → forma a grade visual + - contêiner .fc-scrollgrid ZERA → sem isso, a borda externa fica + dobrada (1px do contêiner + 1px da célula da ponta = 2px na borda) */ .app-dark .fc-theme-standard td, .app-dark .fc-theme-standard th { border: 1px solid var(--surface-border); } +.fc-theme-standard .fc-scrollgrid, .app-dark .fc-theme-standard .fc-scrollgrid { - border: 1px solid var(--surface-border); + border: none; } .app-dark .fc-timegrid-event-harness-inset .fc-timegrid-event, diff --git a/src/layout/melissa/MelissaAgenda.vue b/src/layout/melissa/MelissaAgenda.vue index a1d73b9..e5fbe02 100644 --- a/src/layout/melissa/MelissaAgenda.vue +++ b/src/layout/melissa/MelissaAgenda.vue @@ -68,27 +68,40 @@ const onlySessionsOptions = [ { label: 'Tudo', value: false } ]; -// ── Drawer mobile ──────────────────────────────────────────── -// Quando largura <1024px, .ma-side e .ma-widgets viram off-canvas -// dentro de .ma-drawer. drawerOpen controla translateX via CSS. +// ── Breakpoints ────────────────────────────────────────────── +// Dois pontos: +// { if (typeof window !== 'undefined' && window.matchMedia) { _mqMobile = window.matchMedia('(max-width: 1023px)'); isMobile.value = _mqMobile.matches; - _mqMobile.addEventListener('change', _onMqChange); + _mqMobile.addEventListener('change', _onMqMobileChange); + + _mqCompact = window.matchMedia('(max-width: 1279px)'); + isCompact.value = _mqCompact.matches; + _mqCompact.addEventListener('change', _onMqCompactChange); } }); onBeforeUnmount(() => { - if (_mqMobile) _mqMobile.removeEventListener('change', _onMqChange); + if (_mqMobile) _mqMobile.removeEventListener('change', _onMqMobileChange); + if (_mqCompact) _mqCompact.removeEventListener('change', _onMqCompactChange); }); function toggleDrawer() { @@ -108,6 +121,13 @@ function goSettings() { // pra não inflar a toolbar em telas pequenas. const mobileActionsRef = ref(null); const mobileActionsItems = computed(() => [ + // Views (Dia/Semana/Mês/Lista) — view-switcher inline some em setView('dia') }, + { label: 'Semana', icon: calendarView.value === 'semana' ? 'pi pi-check' : 'pi pi-calendar', command: () => setView('semana') }, + { label: 'Mês', icon: calendarView.value === 'mes' ? 'pi pi-check' : 'pi pi-calendar', command: () => setView('mes') }, + { label: 'Lista', icon: calendarView.value === 'lista' ? 'pi pi-check' : 'pi pi-list', command: () => setView('lista') }, + { separator: true }, { label: onlySessions.value ? 'Mostrar tudo' : 'Apenas sessões', icon: onlySessions.value ? 'pi pi-list' : 'pi pi-filter', @@ -818,22 +838,45 @@ defineExpose({