veza/apps/web/src/utils/aggressiveVisualFix.ts

194 lines
6.5 KiB
TypeScript
Raw Normal View History

/**
* FIX AGRESSIF POUR PROBLÈMES VISUELS
* DÉSACTIVÉ : Ce script était une solution à un problème mal identifié.
* Le vrai problème était le style de focus des inputs, maintenant corrigé.
*
* Ce fichier est conservé pour référence mais n'est plus utilisé.
* Le problème réel a é résolu dans :
* - packages/design-system/src/components/Input/Input.tsx
* - apps/web/src/styles/global-effects.css
*/
export function applyAggressiveVisualFix(): void {
// DÉSACTIVÉ : Le problème réel a été corrigé à la source
// Ce script n'est plus nécessaire
if (typeof window === 'undefined') return;
// Ne rien faire - le problème est résolu dans les styles
return;
// 1. Supprimer complètement body::after (scanlines)
const removeBodyAfter = () => {
let style = document.getElementById('aggressive-fix-body-after') as HTMLStyleElement | null;
if (!style) {
style = document.createElement('style');
style.id = 'aggressive-fix-body-after';
style.textContent = `
body::after {
display: none !important;
content: none !important;
}
`;
document.head.appendChild(style);
}
};
// 1.5. Masquer complètement toutes les scrollbars
const hideAllScrollbars = () => {
let style = document.getElementById('aggressive-fix-scrollbar') as HTMLStyleElement | null;
if (!style) {
style = document.createElement('style');
style.id = 'aggressive-fix-scrollbar';
style.textContent = `
/* Masquer toutes les scrollbars */
::-webkit-scrollbar {
width: 0px !important;
height: 0px !important;
display: none !important;
}
::-webkit-scrollbar-track {
display: none !important;
}
::-webkit-scrollbar-thumb {
display: none !important;
}
* {
scrollbar-width: none !important;
scrollbar-color: transparent transparent !important;
}
`;
document.head.appendChild(style);
}
};
// 2. Supprimer toutes les bordures verticales
const removeVerticalBorders = () => {
const style = document.createElement('style');
style.id = 'aggressive-fix-borders';
style.textContent = `
*:not(input):not(textarea):not(select):not(button):not([class*="input"]):not([class*="Input"]) {
border-left: none !important;
border-right: none !important;
}
*::before,
*::after {
border-left: none !important;
border-right: none !important;
}
html, body {
border-right: none !important;
margin-right: 0 !important;
padding-right: 0 !important;
overflow-x: hidden !important;
}
`;
document.head.appendChild(style);
};
// 3. Masquer tous les éléments suspects
const hideSuspiciousElements = () => {
const allElements = document.querySelectorAll('*');
let hiddenCount = 0;
allElements.forEach((el) => {
const htmlEl = el as HTMLElement;
const computed = window.getComputedStyle(htmlEl);
const rect = htmlEl.getBoundingClientRect();
// Masquer les éléments très étroits et hauts
if (rect.width > 0 && rect.width < 10 && rect.height > window.innerHeight * 0.3) {
htmlEl.style.setProperty('display', 'none', 'important');
hiddenCount++;
console.log(`[AggressiveFix] Masqué élément suspect: ${el.tagName}${el.id ? '#' + el.id : ''} (${rect.width}px x ${rect.height}px)`);
}
// Masquer les éléments sur le bord droit
const isOnRightEdge = rect.right >= window.innerWidth - 10 && rect.right <= window.innerWidth + 10;
if (isOnRightEdge && rect.width < 20 && rect.height > window.innerHeight * 0.2) {
htmlEl.style.setProperty('display', 'none', 'important');
hiddenCount++;
console.log(`[AggressiveFix] Masqué élément sur bord droit: ${el.tagName}${el.id ? '#' + el.id : ''}`);
}
});
if (hiddenCount > 0) {
console.log(`[AggressiveFix] ${hiddenCount} éléments suspects masqués`);
}
};
// 4. Supprimer tous les gradients verticaux
const removeVerticalGradients = () => {
const allElements = document.querySelectorAll('*');
let fixedCount = 0;
allElements.forEach((el) => {
const htmlEl = el as HTMLElement;
const computed = window.getComputedStyle(htmlEl);
const bgImage = computed.backgroundImage || '';
const inlineBg = htmlEl.style.backgroundImage || '';
if ((bgImage.includes('90deg') || inlineBg.includes('90deg')) &&
(bgImage.includes('linear-gradient') || bgImage.includes('repeating-linear-gradient'))) {
htmlEl.style.setProperty('background-image', 'none', 'important');
fixedCount++;
}
});
if (fixedCount > 0) {
console.log(`[AggressiveFix] ${fixedCount} gradients verticaux supprimés`);
}
};
// 5. Observer les nouveaux éléments ajoutés
const observeNewElements = () => {
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node) => {
if (node.nodeType === Node.ELEMENT_NODE) {
const element = node as HTMLElement;
const computed = window.getComputedStyle(element);
const rect = element.getBoundingClientRect();
// Masquer immédiatement les nouveaux éléments suspects
if (rect.width > 0 && rect.width < 10 && rect.height > window.innerHeight * 0.3) {
element.style.setProperty('display', 'none', 'important');
}
// Supprimer les gradients verticaux
const bgImage = computed.backgroundImage || '';
if (bgImage.includes('90deg') && bgImage.includes('linear-gradient')) {
element.style.setProperty('background-image', 'none', 'important');
}
}
});
});
});
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['style', 'class'],
});
};
// Appliquer tous les fixes
removeBodyAfter();
hideAllScrollbars();
removeVerticalBorders();
hideSuspiciousElements();
removeVerticalGradients();
observeNewElements();
// Réappliquer périodiquement
setInterval(() => {
hideSuspiciousElements();
removeVerticalGradients();
}, 2000);
console.log('[AggressiveFix] Fix agressif appliqué avec succès');
}
// DÉSACTIVÉ : Ne plus auto-exécuter
// Le problème réel a été corrigé dans les styles des composants Input