diff --git a/CHANGELOG.md b/CHANGELOG.md index cf7a2f3..d6f9f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,37 @@ O formato segue [Keep a Changelog](https://keepachangelog.com/pt-BR/). Este projeto adota [Versionamento Semântico](https://semver.org/pt-BR/). +## [1.43.3] - 2025-12-16 + +### Improved +- **Página Transações - Mobile Completo** - Lista de transações otimizada para mobile + - Cards individuais: data + badges (tipo/status) + descrição + conta + categoria + valor + - Menu dropdown com todas as ações (completar, editar, duplicar, dividir, etc.) + - Descrição original do banco visível quando diferente + - Fontes: 0.65-1rem, padding p-3, borders secundários + - Desktop mantém tabela completa + +- **Paginação Mobile** - Controles otimizados + - Mobile: Mostra apenas 3 botões (anterior, atual, próxima) + - Indicador "/ total" para contexto + - Botões maiores (36px) para facilitar toque + - Desktop: Mantém visualização de até 7 páginas + +### Fixed +- **CategorySelector - Scroll e Visualização** - Problemas em modais corrigidos + - Position fixed com z-index 100000 (acima de modais) + - Scroll sempre visível com scrollbar customizada (8px) + - Altura fixa garantindo funcionamento: 280px (mobile) / 350px (desktop) + - Largura mínima inteligente: 280px (mobile) / 320px (desktop) + - Ajuste automático de posição se ultrapassar viewport + - Margens de segurança: 10-20px das bordas + - Cores da scrollbar harmonizadas com tema escuro + - `-webkit-overflow-scrolling: touch` para iOS + - Modal com `overflow: auto` para scroll adequado + - Cálculo simplificado e robusto de posição + - Funciona perfeitamente em todos os lugares (modais e páginas) + + ## [1.43.2] - 2025-12-16 ### Improved diff --git a/VERSION b/VERSION index 6426a65..6564ab3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.43.2 +1.43.3 diff --git a/frontend/src/components/CategorySelector.jsx b/frontend/src/components/CategorySelector.jsx index f87737c..9783aa8 100644 --- a/frontend/src/components/CategorySelector.jsx +++ b/frontend/src/components/CategorySelector.jsx @@ -30,24 +30,46 @@ export default function CategorySelector({ const dropdownRef = useRef(null); const searchInputRef = useRef(null); - // Calcular posición del dropdown (arriba o abajo según espacio disponible) + // Calcular posición del dropdown const updateDropdownPosition = () => { if (buttonRef.current) { const rect = buttonRef.current.getBoundingClientRect(); - const dropdownHeight = 350; // altura aproximada del dropdown + const isMobile = window.innerWidth < 768; const viewportHeight = window.innerHeight; - const spaceBelow = viewportHeight - rect.bottom - 10; // 10px margen + + // Altura máxima do dropdown + const maxDropdownHeight = isMobile ? 280 : 350; + + // Largura mínima para exibir conteúdo completo + const minWidth = Math.max(rect.width, isMobile ? 280 : 320); + + // Ajustar left se ultrapassar viewport + let leftPosition = rect.left; + const viewportWidth = window.innerWidth; + if (leftPosition + minWidth > viewportWidth - 20) { + leftPosition = viewportWidth - minWidth - 20; + } + if (leftPosition < 10) { + leftPosition = 10; + } + + // Espaço disponível abaixo e acima + const spaceBelow = viewportHeight - rect.bottom - 10; const spaceAbove = rect.top - 10; - // Decidir si mostrar arriba o abajo - const showAbove = spaceBelow < dropdownHeight && spaceAbove > spaceBelow; + // Decidir se mostra acima ou abaixo + const showAbove = spaceBelow < maxDropdownHeight && spaceAbove > spaceBelow; + + // Calcular altura real disponível + const availableSpace = showAbove ? spaceAbove : spaceBelow; + const dropdownHeight = Math.min(maxDropdownHeight, Math.max(200, availableSpace)); setDropdownPosition({ - top: showAbove ? rect.top - Math.min(dropdownHeight, spaceAbove) : rect.bottom, - left: rect.left, - width: rect.width, + top: showAbove ? rect.top - dropdownHeight : rect.bottom, + left: leftPosition, + width: minWidth, showAbove: showAbove, - maxHeight: showAbove ? Math.min(dropdownHeight, spaceAbove) : Math.min(dropdownHeight, spaceBelow) + maxHeight: dropdownHeight }); } }; @@ -196,18 +218,24 @@ export default function CategorySelector({ {isOpen && (