Аксесоари
Филтри
Categories
Colors
Sizes
Materials
Collections
Категории
Цветове
Размери
Материали
Колекции
Резултати: 12 от 12
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
Всички
This product has multiple variants. The options may be chosen on the product page
(function($){
function initForm($form){
if ($form.data('brx_limit_built')) return;
$form.data('brx_limit_built', true);
// ---- Detect color attribute per form ----
var swatchMapAll = $form.data('brxSwatches') || {};
var dataColor = String($form.data('colorAttr') || '').replace(/^attribute_/,'');
var firstMapKey = Object.keys(swatchMapAll)[0] || '';
if (firstMapKey && !/^pa_/.test(firstMapKey)) firstMapKey = 'pa_' + firstMapKey;
// fallback to first pa_* select if needed
var firstPa = ($form.find('select[name^="attribute_pa_"]').first().attr('name') || '').replace(/^attribute_/,'');
var colorAttr = dataColor || firstMapKey || firstPa || 'pa_color';
// normalize swatch map for that attr
var colorMap =
swatchMapAll[colorAttr] ||
swatchMapAll['pa_'+colorAttr] ||
swatchMapAll[colorAttr.replace(/^pa_/, '')] || {};
var sizeAttr = String($form.data('sizeAttr') || 'pa_size').replace(/^attribute_/,'');
var $colorSel = $form.find('select[name="attribute_'+colorAttr+'"]');
if (!$colorSel.length) $colorSel = $form.find('select[name^="attribute_pa_"]').first();
var $sizeSel = $form.find('select[name="attribute_'+sizeAttr+'"]');
if (!$colorSel.length) return;
var variations = $form.data('product_variations') || [];
// Card image (don’t touch on load)
var $card = $form.closest('.product, .brxe-block, .brxe-container, .single-product');
var $img = $card.find('img.brxe-image').first();
if (!$img.length) $img = $card.find('.woocommerce-LoopProduct-link img').first().length ? $card.find('.woocommerce-LoopProduct-link img').first() : $card.find('img').first();
if ($img.length && !$img.data('orig')) {
$img.data('orig', 1);
$img.attr({'data-orig-src':$img.attr('src')||'', 'data-orig-srcset':$img.attr('srcset')||'', 'data-orig-sizes':$img.attr('sizes')||''});
}
var productUrl =
$form.data('productUrl') ||
$card.find('a.woocommerce-LoopProduct-link, a[href*="/product/"]').first().attr('href') ||
window.location.href;
// ---- helpers ----
function optEnabled($o){ return $o.is(':enabled') && !$o.hasClass('disabled') && $o.hasClass('attached'); }
function firstEnabledVal($sel){
var v=''; $sel.find('option').each(function(){ if(!this.value) return; var $o=$(this); if (optEnabled($o)){ v=this.value; return false; } }); return v;
}
function ensureSize(){
if (!$sizeSel.length) return;
if ($sizeSel.val()) return;
var v = firstEnabledVal($sizeSel);
if (v){
$sizeSel.val(v);
if ($colorSel.val()){ $sizeSel.trigger('change'); $form.trigger('check_variations'); }
}
}
function findVariation(color,size){
if (!Array.isArray(variations)) return null;
if (size){
var ex = variations.find(function(v){ return v.attributes && v.attributes['attribute_'+colorAttr]===color && v.attributes['attribute_'+sizeAttr]===size; });
if (ex) return ex;
}
return variations.find(function(v){ return v.attributes && v.attributes['attribute_'+colorAttr]===color; }) || null;
}
function applyImageObj(img){
if (!$img.length || !img) return false;
var src = img.full_src || img.src; if (!src) return false;
$img.attr('src', src);
if (img.srcset) $img.attr('srcset', img.srcset); else $img.removeAttr('srcset');
if (img.sizes) $img.attr('sizes', img.sizes); else $img.removeAttr('sizes');
return true;
}
function applyColorThumb(slug){
var m = colorMap[slug]; if (!m || !m.url) return false;
return applyImageObj({src:m.url});
}
function swapFromSelection(){
var c = $colorSel.val()||''; if (!c) return false;
var s = $sizeSel.length ? ($sizeSel.val()||'') : '';
var v = findVariation(c,s);
if (v && v.image && (v.image.src || v.image.full_src)) return applyImageObj(v.image);
return applyColorThumb(c);
}
// ---- build (limit 4) ----
function buildColorUL(){
// compute enabled options
var opts=[]; $colorSel.find('option').each(function(){ var val=this.value; if(!val) return; var $o=$(this); opts.push({val:val,label:$o.text(),enabled:optEnabled($o)}); });
var enabled = opts.filter(function(o){return o.enabled;});
var MAX=4, visible = enabled.slice(0,MAX), more = Math.max(enabled.length-MAX,0);
// if we can’t build at least one chip, keep whatever exists and abort
if (!visible.length) return false;
// build in memory first
var $ul = $('<ul class="bricks-variation-swatches bricks-swatch-image brx-built" role="list" data-attribute_name="attribute_'+colorAttr+'"></ul>');
var current = $colorSel.val();
function chip(o){
var img=colorMap[o.val];
var $li=$('<li data-value="'+o.val+'"></li>');
var $a =$('<a href="#" aria-label="'+(o.label||o.val)+'"></a>');
if (img && img.url){ $a.append('<img src="'+img.url+'" alt="'+(o.label||o.val)+'" loading="lazy" />'); }
else { $a.append('<span class="brx-swatch-fallback">'+(o.label||o.val)+'</span>'); }
$li.append($a);
if (current && current===o.val) $li.addClass('selected');
return $li;
}
visible.forEach(function(o){ $ul.append(chip(o)); });
if (more>0){ $ul.append('<li class="brx-swatch-more"><a class="brx-swatch-more-btn" href="'+productUrl+'">+ '+more+' MORE</a></li>'); }
// now that we know we can build, remove any existing swatch ULs next to the select
$colorSel.nextAll('ul.bricks-variation-swatches').remove();
// insert and hide select
$colorSel.after($ul).hide();
// clicks
$ul.on('click','li:not(.brx-swatch-more) a', function(e){
e.preventDefault();
var $li=$(this).closest('li'), val=$li.data('value');
$ul.find('li').removeClass('selected'); $li.addClass('selected');
if ($colorSel.val()!==val){
$colorSel.val(val).trigger('change');
$form.trigger('check_variations');
$colorSel.trigger('woocommerce_variation_has_changed');
}
ensureSize();
swapFromSelection();
});
return true;
}
// init
var ok = buildColorUL();
if ($sizeSel.length){ $sizeSel.closest('tr, .value, .form-row, .bricks-variation-swatches').hide(); }
ensureSize();
// prefer Woo image when found
$form.on('found_variation', function(e, variation){
if (variation && variation.image && (variation.image.src || variation.image.full_src)) applyImageObj(variation.image);
});
// rebuild on availability changes
$form.on('woocommerce_update_variation_values', function(){
buildColorUL();
ensureSize();
swapFromSelection();
});
}
function boot(){ $('.variations_form').each(function(){ initForm($(this)); }); }
$(document).ready(function(){ boot(); $(document).on('bricks/ajax/load', boot); });
})(jQuery);
/* ✅ Normalize swatch structure */
.bricks-variation-swatches.bricks-swatch-image li,
.bricks-variation-swatches.bricks-swatch-label li {
position: relative;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid grey;
border-radius: 90px;
box-sizing: border-box;
cursor: pointer;
transition: all 0.2s ease;
background: #fff;
}
/* ✅ Fix inner anchor without breaking tooltip */
.bricks-variation-swatches li > a {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 100%;
border: none !important;
background: transparent !important;
text-decoration: none;
color: inherit;
box-shadow: none;
cursor: inherit;
}
/* ✅ Image swatches */
.bricks-swatch-image li,
.bricks-swatch-image li a {
width: 28px;
height: 28px;
}
.bricks-swatch-image li img {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 6px;
}
/* ✅ Size/Label swatches */
.bricks-swatch-label li,
.bricks-swatch-label li a {
min-width: 28px;
height: 28px;
font-size: 12px;
font-weight: 600;
text-transform: uppercase;
border-radius: 8px;
border: 1px solid #ddd;
transition: all 0.2s ease;
background: #fff;
}
/* Hover + Selected states */
.bricks-variation-swatches li:hover {
border-color: #000;
}
.bricks-variation-swatches li.selected,
.bricks-variation-swatches li.bricks-swatch-selected {
border-color: #000;
background: #000;
color: #fff;
}
/* ✅ Keep tooltip visible */
.bricks-variation-swatches li[data-balloon]:hover::after,
.bricks-variation-swatches li[data-balloon]:hover::before {
opacity: 1 !important;
visibility: visible !important;
}
/* Limit color swatches to 5 on mobile */
.brx-loop-variation-wrapper .bricks-variation-swatches.bricks-swatch-image li:nth-child(n+5) {
display: none !important;
}
/*Swatches padding*/
form.cart table.variations td, form.woocommerce-cart-form table.variations td {
padding-top: 5px !important;
padding-bottom: 0px !important;
}
.bricks-variation-swatches.bricks-swatch-image img {
border-radius: 90px !important;
}
.bricks-variation-swatches{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin:0;padding:0;list-style:none}
.bricks-variation-swatches li{line-height:1;cursor:pointer}
.bricks-variation-swatches li.disabled{opacity:.35;pointer-events:none}
/* image swatches */
.bricks-swatch-image li, .bricks-swatch-image li a {width:28px;height:28px;}
.bricks-swatch-image li img{width:100%;height:100%;object-fit:cover;border-radius:6px;border:1px solid rgba(0,0,0,.1);transition:transform .15s ease, box-shadow .15s ease;}
.bricks-swatch-image li:hover img{transform:translateY(-1px);box-shadow:0 2px 6px rgba(0,0,0,.15);}
.bricks-variation-swatches li.selected img{outline:2px solid rgba(0,0,0,.6);}
/* fallback label */
.brx-swatch-fallback{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border:1px solid rgba(0,0,0,.15);border-radius:6px;font-size:11px}
/* "+ # more" chip */
.brx-swatch-more-btn{
display:inline-flex;align-items:center;justify-content:center;
height:28px;padding:0 .6rem;border:1px dashed #aaa;border-radius:8px;
background:#fff;color:#111;font-size:12px;text-decoration:none;
transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;
}
.brx-swatch-more-btn:hover{transform:translateY(-1px);box-shadow:0 2px 8px rgba(0,0,0,.1);border-color:#111;}
FAQs
Question
Answer
Question
Answer
Question
Answer
Question
Answer
Question
Answer
Question
Answer














