@bebranded/bb-contents 1.0.113 → 1.0.114

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bb-contents.js +54 -33
  2. package/package.json +1 -1
package/bb-contents.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * BeBranded Contents
3
3
  * Contenus additionnels français pour Webflow
4
- * @version 1.0.113
4
+ * @version 1.0.114
5
5
  * @author BeBranded
6
6
  * @license MIT
7
7
  * @website https://www.bebranded.xyz
@@ -32,11 +32,11 @@
32
32
  window._bbContentsInitialized = true;
33
33
 
34
34
  // Log de démarrage simple (une seule fois)
35
- console.log('bb-contents | v1.0.113');
35
+ console.log('bb-contents | v1.0.114');
36
36
 
37
37
  // Configuration
38
38
  const config = {
39
- version: '1.0.113',
39
+ version: '1.0.114',
40
40
  debug: false, // Debug désactivé pour rendu propre
41
41
  prefix: 'bb-', // utilisé pour générer les sélecteurs (data-bb-*)
42
42
  youtubeEndpoint: null, // URL du worker YouTube (à définir par l'utilisateur)
@@ -409,43 +409,42 @@
409
409
  const originalHeight = img.style.height;
410
410
 
411
411
  img.onload = () => {
412
- // SOLUTION MOBILE SAFARI : Pour les SVG sur mobile Safari, approche différente
412
+ // SOLUTION MOBILE SAFARI : Pour les SVG sur mobile Safari, utiliser contain avec optimisations
413
413
  if (isSVG && isMobile && isSafari) {
414
- // SUR SAFARI MOBILE : Ne PAS utiliser object-fit qui cause du flou
415
- // Utiliser des dimensions fixes et laisser le SVG se dimensionner naturellement
416
- img.style.objectFit = 'none';
414
+ // SUR SAFARI MOBILE : Utiliser contain MAIS avec des optimisations pour éviter le flou
415
+ img.style.objectFit = 'contain';
417
416
  img.style.objectPosition = 'center';
418
417
 
419
- // Forcer les dimensions du conteneur parent pour contraindre le SVG
418
+ // Dimensions avec contraintes pour forcer contain
419
+ img.style.width = '100%';
420
+ img.style.height = '100%';
421
+ img.style.maxWidth = '100%';
422
+ img.style.maxHeight = '100%';
423
+ img.style.boxSizing = 'border-box';
424
+
425
+ // Optimisations pour améliorer le rendu des SVG avec contain
426
+ // Utiliser auto au lieu de crisp-edges pour contain
427
+ img.style.imageRendering = 'auto';
428
+ img.style.webkitBackfaceVisibility = 'hidden';
429
+ img.style.backfaceVisibility = 'hidden';
430
+
431
+ // Forcer le GPU rendering AVANT d'appliquer contain
432
+ img.style.webkitTransform = 'translateZ(0)';
433
+ img.style.transform = 'translateZ(0)';
434
+
435
+ // Conteneur parent pour contraindre et centrer
420
436
  const parent = img.parentElement;
421
437
  if (parent) {
422
- // S'assurer que le parent a des dimensions fixes
423
- const parentComputed = getComputedStyle(parent);
424
- if (!parentComputed.width || parentComputed.width === 'auto') {
425
- parent.style.width = '100%';
426
- }
427
- if (!parentComputed.height || parentComputed.height === 'auto') {
428
- parent.style.height = '100%';
429
- }
430
-
431
438
  parent.style.display = 'flex';
432
439
  parent.style.alignItems = 'center';
433
440
  parent.style.justifyContent = 'center';
434
441
  parent.style.overflow = 'hidden';
435
442
  parent.style.boxSizing = 'border-box';
436
443
 
437
- // Forcer le SVG à prendre la taille du parent sans object-fit
438
- img.style.width = '100%';
439
- img.style.height = '100%';
440
- img.style.maxWidth = '100%';
441
- img.style.maxHeight = '100%';
442
- img.style.boxSizing = 'border-box';
444
+ // S'assurer que le parent a des dimensions
445
+ if (!parent.style.width) parent.style.width = '100%';
446
+ if (!parent.style.height) parent.style.height = '100%';
443
447
  }
444
-
445
- // Améliorer le rendu des SVG sans object-fit
446
- img.style.imageRendering = 'crisp-edges';
447
- img.style.webkitBackfaceVisibility = 'hidden';
448
- img.style.backfaceVisibility = 'hidden';
449
448
  } else if (isSVG && isMobile) {
450
449
  // Pour Chrome mobile, utiliser contain normalement
451
450
  img.style.objectFit = 'contain';
@@ -501,17 +500,39 @@
501
500
  const waitForImages = () => {
502
501
  waitTimeout += 100;
503
502
 
504
- // Attendre que TOUTES les images soient chargées (ou s'il n'y a pas d'images, attendre un minimum)
503
+ // SAFARI MOBILE : Attendre ABSOLUMENT que TOUTES les images soient chargées
505
504
  if (totalImages === 0) {
506
505
  // Pas d'images, démarrer après un court délai
507
506
  const renderDelay = isMobile ? 500 : 100;
508
507
  setTimeout(() => {
509
508
  startSafariAnimation();
510
509
  }, renderDelay);
511
- } else if (imagesLoaded >= totalImages || waitTimeout >= maxWaitTime) {
512
- // Toutes les images sont chargées OU timeout atteint
513
- // Attendre plus longtemps sur mobile pour le rendu visuel
514
- const renderDelay = isMobile ? 1000 : 200;
510
+ } else if (imagesLoaded >= totalImages) {
511
+ // SAFARI MOBILE : Vérifier que les images ont vraiment leurs dimensions
512
+ let imagesReady = true;
513
+ if (isSafari && isMobile) {
514
+ images.forEach(img => {
515
+ if (!img.complete || img.naturalWidth === 0 || img.naturalHeight === 0) {
516
+ imagesReady = false;
517
+ }
518
+ });
519
+ }
520
+
521
+ if (imagesReady) {
522
+ // Toutes les images sont chargées ET ont leurs dimensions
523
+ // Attendre plus longtemps sur mobile Safari pour le rendu visuel
524
+ const renderDelay = isSafari && isMobile ? 1500 : (isMobile ? 1000 : 200);
525
+ setTimeout(() => {
526
+ startSafariAnimation();
527
+ }, renderDelay);
528
+ } else {
529
+ // Continuer à attendre que les dimensions soient disponibles
530
+ setTimeout(waitForImages, 100);
531
+ }
532
+ } else if (waitTimeout >= maxWaitTime) {
533
+ // Timeout atteint : forcer le démarrage mais c'est un fallback
534
+ console.warn('[MARQUEE] Timeout atteint, certaines images peuvent ne pas être chargées');
535
+ const renderDelay = isSafari && isMobile ? 1500 : (isMobile ? 1000 : 200);
515
536
  setTimeout(() => {
516
537
  startSafariAnimation();
517
538
  }, renderDelay);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bebranded/bb-contents",
3
- "version": "1.0.113",
3
+ "version": "1.0.114",
4
4
  "description": "Contenus additionnels français pour Webflow",
5
5
  "main": "bb-contents.js",
6
6
  "scripts": {