UNPKG

merchi_product_editor

Version:

A React component for editing product images using Fabric.js

142 lines (122 loc) 2.16 kB
/* ImageGallery styles */ .image-gallery-container { position: relative; width: 100%; aspect-ratio: 1 / 1; max-width: 700px; margin: 0 auto; } .image-container { position: relative; width: 100%; height: 100%; overflow: hidden; } .image-slide { position: absolute; inset: 0; } .gallery-image { width: 100%; height: 100%; object-fit: contain; transition: opacity 0.3s; opacity: 0; } .image-loaded { opacity: 1; } .loading-indicator { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; } .loading-spinner { width: 2rem; height: 2rem; border: 4px solid #e5e7eb; border-top: 4px solid #374151; border-radius: 50%; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .zoom-button { position: absolute; bottom: 1rem; right: 1rem; padding: 0.75rem; border-radius: 50%; background-color: rgba(255, 255, 255, 0.7); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transition: all 0.3s; z-index: 10; } .zoom-button:hover { background-color: white; } .zoom-icon { width: 1.25rem; height: 1.25rem; color: #374151; } .nav-buttons-container { position: absolute; inset: 0; display: flex; align-items: center; justify-content: space-between; padding: 0 1rem; z-index: 2; } /* Thumbnails gallery */ .thumbnails-container { width: 100%; overflow-x: auto; } .thumbnails-row { display: flex; gap: 0.5rem; margin-top: 1rem; min-width: max-content; padding: 0 0.5rem; justify-content: center; } .thumbnail-button { position: relative; width: 60px; height: 60px; overflow: hidden; border-radius: 0.125rem; border: 1.5px solid transparent; transition: all 0.3s; flex-shrink: 0; } .thumbnail-button.selected { border-color: rgba(48, 61, 191, 0.5); } .thumbnail-image { width: 100%; height: 100%; object-fit: contain; padding: 0.25rem; } /* Media queries */ @media (min-width: 768px) { .thumbnails-row { gap: 1rem; min-width: 0; } .thumbnail-button { width: 80px; height: 80px; } }