proforto.nl
Open in
urlscan Pro
167.235.180.7
Public Scan
Submitted URL: https://interface.mailcampaigns.nl/v3/l/q2IvqzIlp2yiow0jWaIloQ1uFSVjL0uAAxk5BKqwoGygLwAXZTW5AKIvDmykLwWXqSyKAUEAIRy3GIZkrzVlJwOwZzu...
Effective URL: https://proforto.nl/jobman-1201-softshell-werkjas?utm_source=Algemene%20mailings&utm_medium=email&utm_campaign=nieuw...
Submission: On June 11 via api from US — Scanned from NL
Effective URL: https://proforto.nl/jobman-1201-softshell-werkjas?utm_source=Algemene%20mailings&utm_medium=email&utm_campaign=nieuw...
Submission: On June 11 via api from US — Scanned from NL
Form analysis
6 forms found in the DOMPOST
<form class="form form-login" method="post" @submit.prevent="submitForm();" id="login-form">
<div class="fieldset login">
<div class="field email required">
<label class="label" for="form-login-username" form="login-form">
<span>E-mailadres</span>
</label>
<div class="control">
<input name="username" id="form-login-username" x-ref="customer-email" @change="errors = 0" type="email" required="" class="form-input input-text" autocomplete="off">
</div>
</div>
<div class="field password required">
<label for="form-login-password" class="label" form="login-form">
<span>Wachtwoord</span>
</label>
<div class="control">
<input name="password" id="form-login-password" type="password" class="form-input input-text" required="" x-ref="customer-password" @change="errors = 0" autocomplete="off">
</div>
</div>
<input name="context" type="hidden" value="checkout">
<div class="actions-toolbar flex justify-between pt-6 pb-2 items-center">
<button type="submit" class="inline-flex btn btn-primary disabled:opacity-75"> Inloggen </button>
<a href="https://proforto.nl/customer/account/forgotpassword/">
Wachtwoord vergeten? </a>
</div>
</div>
</form>
POST https://proforto.nl/checkout/cart/add/uenc/aHR0cHM6Ly9wcm9mb3J0by5ubC9qb2JtYW4tMTIwMS1zb2Z0c2hlbGwtd2Vya2phcz9lbWFpbD1jMzVlNGJlNzc1OGIxOThhNjc2YWU1ZWE3ZjE0NDQ2NjJjMzk1NTAwMDFjM2ZkZDkzMGZlMDhiM2QwMTU1NzU4/product/163404/
<form method="post" x-data="initAddToCartForm()" @submit="validateAddToCartForm"
action="https://proforto.nl/checkout/cart/add/uenc/aHR0cHM6Ly9wcm9mb3J0by5ubC9qb2JtYW4tMTIwMS1zb2Z0c2hlbGwtd2Vya2phcz9lbWFpbD1jMzVlNGJlNzc1OGIxOThhNjc2YWU1ZWE3ZjE0NDQ2NjJjMzk1NTAwMDFjM2ZkZDkzMGZlMDhiM2QwMTU1NzU4/product/163404/" class="mb-6"
id="product_addtocart_form" enctype="multipart/form-data">
<input type="hidden" name="product" value="163404">
<input type="hidden" name="selected_configurable_option" value="">
<input type="hidden" name="related_product" id="related-products-field" value="">
<input type="hidden" name="item" value="163404">
<input name="form_key" type="hidden" value="69PDfbh9CJW0dfsn">
<script>
function initConfigurableSwatchOptions_163404() {
const configurableOptionsComponent = initConfigurableOptions('163404', {
"attributes": {
"324": {
"id": "324",
"code": "jobman_kleuren",
"label": "Kleur",
"options": [{
"id": "3180",
"label": "Wit",
"products": ["353951", "353950", "353949", "353952", "353953", "353948"]
}, {
"id": "8493",
"label": "Bruin",
"products": ["316802"]
}, {
"id": "3190",
"label": "Oranje",
"products": ["163407", "163406"]
}, {
"id": "3192",
"label": "Rood",
"products": []
}, {
"id": "3194",
"label": "Royal blauw",
"products": ["316817", "316815", "316812", "316813", "316814", "316816", "316818", "316819"]
}, {
"id": "3197",
"label": "Marine",
"products": ["316822", "316821", "316825", "316826", "316827", "316820", "316823", "316824"]
}, {
"id": "3204",
"label": "Bosgroen",
"products": ["316834"]
}, {
"id": "3212",
"label": "Donkergrijs",
"products": ["316842"]
}, {
"id": "9238",
"label": "Donkergrijs",
"products": ["353959", "353957", "353958", "353956", "353961", "353960"]
}, {
"id": "3214",
"label": "Zwart",
"products": ["316849", "316850", "316844", "316847", "316848", "316846", "316845"]
}],
"position": "0"
},
"141": {
"id": "141",
"code": "maat",
"label": "Maat",
"options": [{
"id": "119",
"label": "XS",
"products": ["316844", "316812", "316820"]
}, {
"id": "515",
"label": "S",
"products": ["316821", "353956", "353948", "316813", "316845", "163406"]
}, {
"id": "349",
"label": "M",
"products": ["316822", "353957", "353949", "316814", "316846", "163407"]
}, {
"id": "513",
"label": "L",
"products": ["353958", "353950", "316815", "316847", "316823"]
}, {
"id": "512",
"label": "XL",
"products": ["353959", "353951", "316816", "316848", "316824"]
}, {
"id": "511",
"label": "XXL",
"products": ["316849", "316825", "316817", "353952", "353960"]
}, {
"id": "2135",
"label": "XXXL",
"products": ["316850", "316826", "316842", "353961", "316834", "353953", "316802", "316818"]
}, {
"id": "665",
"label": "4XL",
"products": ["316827", "316819"]
}],
"position": "1"
}
},
"template": "\u20ac\u00a0<%- data.price %>",
"currencyFormat": "\u20ac\u00a0%s",
"optionPrices": {
"316822": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316821": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316849": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353959": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353957": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353958": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316850": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353951": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353950": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353949": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316825": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316817": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316815": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316826": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316827": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353952": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353956": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316842": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353961": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353960": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316834": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353953": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"353948": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316844": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316802": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316812": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316813": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316814": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316816": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316818": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316819": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316820": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316847": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316848": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316846": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316823": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316824": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"316845": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"163407": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
},
"163406": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
},
"tierPrices": [],
"msrpPrice": {
"amount": 42.9
}
}
},
"priceFormat": {
"pattern": "\u20ac\u00a0%s",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": ".",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 42.9
},
"oldPrice": {
"amount": 51.909001
},
"basePrice": {
"amount": 38.61
},
"finalPrice": {
"amount": 46.718101
}
},
"productId": "163404",
"chooseText": "Kies een optie...",
"images": [],
"index": {
"316822": {
"324": "3197",
"141": "349"
},
"316821": {
"324": "3197",
"141": "515"
},
"316849": {
"324": "3214",
"141": "511"
},
"353959": {
"324": "9238",
"141": "512"
},
"353957": {
"324": "9238",
"141": "349"
},
"353958": {
"324": "9238",
"141": "513"
},
"316850": {
"324": "3214",
"141": "2135"
},
"353951": {
"324": "3180",
"141": "512"
},
"353950": {
"324": "3180",
"141": "513"
},
"353949": {
"324": "3180",
"141": "349"
},
"316825": {
"324": "3197",
"141": "511"
},
"316817": {
"324": "3194",
"141": "511"
},
"316815": {
"324": "3194",
"141": "513"
},
"316826": {
"324": "3197",
"141": "2135"
},
"316827": {
"324": "3197",
"141": "665"
},
"353952": {
"324": "3180",
"141": "511"
},
"353956": {
"324": "9238",
"141": "515"
},
"316842": {
"324": "3212",
"141": "2135"
},
"353961": {
"324": "9238",
"141": "2135"
},
"353960": {
"324": "9238",
"141": "511"
},
"316834": {
"324": "3204",
"141": "2135"
},
"353953": {
"324": "3180",
"141": "2135"
},
"353948": {
"324": "3180",
"141": "515"
},
"316844": {
"324": "3214",
"141": "119"
},
"316802": {
"324": "8493",
"141": "2135"
},
"316812": {
"324": "3194",
"141": "119"
},
"316813": {
"324": "3194",
"141": "515"
},
"316814": {
"324": "3194",
"141": "349"
},
"316816": {
"324": "3194",
"141": "512"
},
"316818": {
"324": "3194",
"141": "2135"
},
"316819": {
"324": "3194",
"141": "665"
},
"316820": {
"324": "3197",
"141": "119"
},
"316847": {
"324": "3214",
"141": "513"
},
"316848": {
"324": "3214",
"141": "512"
},
"316846": {
"324": "3214",
"141": "349"
},
"316823": {
"324": "3197",
"141": "513"
},
"316824": {
"324": "3197",
"141": "512"
},
"316845": {
"324": "3214",
"141": "515"
},
"163407": {
"324": "3190",
"141": "349"
},
"163406": {
"324": "3190",
"141": "515"
}
},
"salable": {
"324": {
"3197": ["316822", "316821", "316825", "316826", "316827", "316820", "316823", "316824"],
"3214": ["316849", "316850", "316844", "316847", "316848", "316846", "316845"],
"3180": ["353951", "353950", "353949", "353952", "353953", "353948"],
"3194": ["316817", "316815", "316813", "316816", "316818"],
"3212": ["316842"],
"8493": ["316802"],
"3190": ["163407", "163406"]
},
"141": {
"349": ["316822", "353949", "316846", "163407"],
"515": ["316821", "353948", "316813", "316845", "163406"],
"511": ["316849", "316825", "316817", "353952"],
"2135": ["316850", "316826", "316842", "353953", "316802", "316818"],
"512": ["353951", "316816", "316848", "316824"],
"513": ["353950", "316815", "316847", "316823"],
"665": ["316827"],
"119": ["316844", "316820"]
}
},
"canDisplayShowOutOfStockStatus": true
});
const swatchOptionsComponent = initSwatchOptions({
"324": {
"3204": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/2\/3204.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/2\/3204.jpg",
"label": "Bosgroen"
},
"8493": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/8\/4\/8493.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/8\/4\/8493.jpg",
"label": "Bruin"
},
"9238": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/9\/2\/9238.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/9\/2\/9238.jpg",
"label": "Donkergrijs"
},
"3212": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/2\/3212.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/2\/3212.jpg",
"label": "Donkergrijs"
},
"3197": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/1\/3197.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/1\/3197.jpg",
"label": "Marine"
},
"3190": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/1\/3190.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/1\/3190.jpg",
"label": "Oranje"
},
"3192": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/1\/3192.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/1\/3192.jpg",
"label": "Rood"
},
"3194": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/1\/3194.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/1\/3194.jpg",
"label": "Royal blauw"
},
"3180": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/1\/3180.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/1\/3180.jpg",
"label": "Wit"
},
"3214": {
"type": "2",
"value": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_image\/30x20\/3\/2\/3214.jpg",
"thumb": "https:\/\/proforto.nl\/media\/attribute\/swatch\/swatch_thumb\/110x90\/3\/2\/3214.jpg",
"label": "Zwart"
},
"additional_data": "{\"swatch_input_type\":\"visual\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":\"0\"}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent);
}
</script>
<div x-data="initConfigurableSwatchOptions_163404()" x-init="init(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" class="relative mb-6" x-defer="intersect">
<div>
<div class="swatch-attribute min-h-14
jobman_kleuren">
<template x-if="showSwatches && optionConfig.attributes[324]?.options?.length >= 1">
<div class="option-wrapper py-2">
<label class="w-full sm:w-1/2 text-left font-bold label product-option-label" id="attribute-label-163404-324" aria-hidden="true">
<span> Kies je kleur </span>
</label>
<div x-show="showErrors && !selectedValues[324]" x-cloak="" x-transition="" class="bold inline-block bg-error-message text-error-message border border-error-message rounded py-1 px-2 mb-4"> Dit is een verplicht veld. </div>
<div class="w-full text-left text-gray-900 product-option-values">
<div class="flex items-center swatch-attribute-options gap-3 required" role="radiogroup" aria-label="Kleur">
<template x-for="(item, index) in optionConfig.attributes[324]?.options" :key="item.id">
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
</template>
<div class="option-wrapper py-2">
<label class="w-full sm:w-1/2 text-left font-bold label product-option-label" id="attribute-label-163404-324" aria-hidden="true">
<span> Kies je kleur </span>
</label>
<div x-show="showErrors && !selectedValues[324]" x-transition="" class="bold inline-block bg-error-message text-error-message border border-error-message rounded py-1 px-2 mb-4" style="display: none;"> Dit is een verplicht veld.
</div>
<div class="w-full text-left text-gray-900 product-option-values">
<div class="flex items-center swatch-attribute-options gap-3 required" role="radiogroup" aria-label="Kleur">
<template x-for="(item, index) in optionConfig.attributes[324]?.options" :key="item.id">
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
</template>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3180-1" title="Wit"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/1/3180.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3180-1" value="3180" aria-label="Wit">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-8493-1" title="Bruin"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/8/4/8493.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-8493-1" value="8493" aria-label="Bruin" data-deliverydate="2024-06-19T10:00:00.368Z">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3190-1" title="Oranje"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/1/3190.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3190-1" value="3190" aria-label="Oranje">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter w-6 h-6 opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)" style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/1/3192.jpg') center / cover no-repeat">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap sr-only" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }">Rood</div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3194-1" title="Royal blauw"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/1/3194.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3194-1" value="3194" aria-label="Royal blauw">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3197-1" title="Marine"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/1/3197.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3197-1" value="3197" aria-label="Marine">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter w-6 h-6 opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)" style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/2/3204.jpg') center / cover no-repeat">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap sr-only" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }">Bosgroen</div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3212-1" title="Donkergrijs"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/2/3212.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3212-1" value="3212" aria-label="Donkergrijs" data-deliverydate="2024-06-19T10:00:00.368Z">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter w-6 h-6 opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)" style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/9/2/9238.jpg') center / cover no-repeat">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap sr-only" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }">Donkergrijs</div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</div>
<div x-id="['attribute-option-163404-'+item.id]">
<template x-if="optionIsActive(324, item.id) && optionIsEnabled(324, item.id)">
<label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
</template><label :for="$id('attribute-option-163404-'+item.id)" class="swatch-option relative border-2 shadow-sm cursor-pointer select-none bg-container-lighter product-option-value-label mb-0 focus:visible w-6 h-6" :class="{
'border-container-lighter ring-2 ring-black':
(selectedValues[324] === item.id),
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :title="getSwatchText(324, item.id)" :style="getSwatchBackgroundStyle('324',item.id)" @touchstart.passive.debounce.50ms="changeOption(324, $event.target.value)" for="attribute-option-163404-3214-1" title="Zwart"
style="background: #ffffff url('https://proforto.nl/media/attribute/swatch/swatch_image/30x20/3/2/3214.jpg') center / cover no-repeat">
<input :id="$id('attribute-option-163404-'+item.id)" :value="item.id" name="super_attribute[324]" type="radio" class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input opacity-0 required"
style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" @change="$el.style.visibility = 'visible'" :data-deliverydate="getDeliveryDateForOption(324, item.id)"
x-on:change.debounce.50ms="changeOption(324, $event.target.value)" x-on:click="clearOptionIfActive(324, item.id)" x-model="selectedValues[324]" :class="{ 'required': getAllowedAttributeOptions(324).filter(
attributeOption => selectedValues[attributeOption]
).length === 0
}" :aria-label="getSwatchText(324, item.id)" aria-describedby="attribute-label-163404-324" id="attribute-option-163404-3214-1" value="3214" aria-label="Zwart">
<template x-if="isTextSwatch(324, item.id)">
<div x-html="getSwatchText(324, item.id)" class="pointer-events-none select-none whitespace-nowrap" aria-hidden="true"></div>
</template>
</label>
<template x-if="!optionIsActive(324, item.id) || !optionIsEnabled(324, item.id)">
<div class="relative border-2 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" :class="{
'w-6 h-6' : !isTextSwatch(324, item.id),
'opacity-20 !cursor-default hover:!scale-100 hover:!shadow-md': !optionConfig.salable[324][item.id] || !getAllowedAttributeOptions(324).find((option) => option.id === item.id)
}" :style="getSwatchBackgroundStyle('324',item.id)">
<div x-html="getSwatchText(324, item.id)" class="whitespace-nowrap" :class="{ 'sr-only' : !isTextSwatch(324, item.id) }"></div>
<svg class="absolute inset-0 w-full h-full text-gray-500 bg-white/25">
<line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line>
</svg>
</div>
</template>
</div>
</div>
</div>
</div>
</div>
<div class="option-wrapper py-2 w-full">
<label class="w-1/2 text-left font-bold label" for="attribute141">
<span> Kies je maat </span>
</label>
<div class="flex justify-between items-center mb-1">
<div class="sizechart-link-container" onclick.debounce.10ms="window.dataLayer.push({
event: 'click_find_measure'
});">
<faslet-app shop-id="proforto" platform="magento" product-name="Jobman 1201 Softshell Jacket" product-identifier="163404" brand="Jobman"
product-img="https://proforto.nl/media/catalog/product/cache/15f3e0f09e69a38995740853d6579368/6/0/60637_preview.jpg" locale="nl">
</faslet-app>
<script src="https://widget.prod.faslet.net/faslet-app.min.js" defer=""></script>
</div>
<div class="flex items-center">
<script>
async function showSizeChart() {
document.getElementById('pschart-showsizes').style.display = 'block';
[...document.getElementsByClassName('pschart-sizechart-link-close'), ...document.getElementsByClassName('pschart-addedoverlay')].forEach(el => {
el.addEventListener('click', (event) => {
if (event.target === el) {
closeSizeChart();
}
});
});
document.addEventListener('keydown', event => {
if (event.key === 'Escape') {
closeSizeChart();
}
})
await yieldToMain();
window.dataLayer.push({
event: "click_measure_table"
});
}
function closeSizeChart() {
document.getElementById('pschart-showsizes').style.display = 'none';
}
</script>
<div class="inline hover:underline cursor-pointer whitespace-nowrap" onclick="showSizeChart()"> Bekijk maattabel </div>
</div>
</div>
<div class="sr-only ml-2 w-1/2 text-left text-gray-900">
<select name="super_attribute[141]" id="attribute141" class="sr-only form-select super-attribute-select required" @change="$el.style.visibility = 'visible'" x-on:change.debounce.50ms="changeOption(141, event.target.value)">
<option value=""> Kies een optie... </option>
<template x-for="(item, index) in getAllowedAttributeOptions(141)" :key="item.id">
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id">
</option>
</template>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="119">XS</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="515">S</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="349">M</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="513">L</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="512">XL</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="511">XXL</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="2135">XXXL</option>
<option :value="item.id" x-html="item.label" :selected="selectedValues[141] === item.id" value="665">4XL</option>
</select>
</div>
<div x-show="showErrors && !selectedValues[141]" x-transition="" class="bold inline-block bg-error-message text-error-message border border-error-message rounded py-1 px-2 mb-4" style="display: none;"> Dit is een verplicht veld.
</div>
<div class="flex flex-wrap gap-3">
<template x-for="(item, index) in getAttributeOptions(141)" :key="item.id">
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">
</div>
</template>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">XS</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">S</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">M</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">L</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">XL</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">XXL</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">XXXL</div>
<div class="capitalize cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'!border-black': selectedValues[141] === item.id,
'opacity-20 cursor-default hover:scale-100 hover:shadow-md': !optionConfig.salable[141][item.id] || !getAllowedAttributeOptions(141).find((option) => option.id === item.id)
}" :value="item.id" x-html="getAttributeOptionLabel(item)" :data-deliverydate="getDeliveryDateForOption(141, item.id)" x-on:click.debounce.50ms="changeOption(141, item.id)"
:selected="selectedValues[141] === item.id">4XL</div>
</div>
</div>
</div>
<div class="my-2 py-2 px-4 bg-container-lighter rounded shadow-md"> Het model is 185 cm en draagt maat M. <span class="underline">
<div class="inline hover:underline cursor-pointer whitespace-nowrap" onclick="showSizeChart()"> Bekijk maattabel </div>
</span>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute pointer-events-none select-none" :style="getTooltipPosition()">
<div class="shadow-lg">
<div class="absolute top-0 left-0 z-10 min-w-20 p-2 -mt-6 text-sm leading-tight text-black
transform -translate-x-1/2 -translate-y-full bg-white rounded-lg shadow-lg text-center" :class="{'-translate-x-5' : isFirstItemCol()}">
<template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div class="inline-block border shadow-sm border-container" :style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"></div>
</template>
<span class="mx-2 text-lg font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-10 w-8 h-8 text-white transform -translate-x-1/5
-translate-y-8 fill-current stroke-current" width="12" height="12">
<rect x="12" y="-12" width="12" height="12" transform="rotate(45)" class="shadow-xl"></rect>
</svg>
</div>
</div>
</template>
</div>
<div id="initial-load-product-info"
data-product-info="{"data":{"products":{"items":[{"id":163404,"name":"Jobman 1201 Softshell Jacket","sku":"JOB-65120171","__typename":"ConfigurableProduct","dependency_rules":"[{\"conditions\":[{\"values\":[],\"type\":\"!eq\",\"id\":84162}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84163\":{\"values\":[],\"id\":84163},\"84171\":{\"values\":[],\"id\":84171}}}},{\"conditions\":[{\"values\":[\"84165\"],\"type\":\"!eq\",\"id\":84162}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84163\":{\"values\":{\"84167\":\"84167\",\"84168\":\"84168\",\"84169\":\"84169\",\"84170\":\"84170\",\"84171\":\"84171\",\"84172\":\"84172\",\"84173\":\"84173\"},\"id\":84163}}}},{\"conditions\":[{\"values\":[],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84164\":{\"values\":[],\"id\":84164},\"84165\":{\"values\":[],\"id\":84165},\"84166\":{\"values\":[],\"id\":84166},\"84167\":{\"values\":[],\"id\":84167},\"84168\":{\"values\":[],\"id\":84168},\"84169\":{\"values\":[],\"id\":84169},\"84170\":{\"values\":[],\"id\":84170}}}},{\"conditions\":[{\"values\":[\"84170\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84164\":{\"values\":[],\"id\":84164}}}},{\"conditions\":[{\"values\":[\"84167\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84165\":{\"values\":[],\"id\":84165}}}},{\"conditions\":[{\"values\":[\"84168\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84166\":{\"values\":[],\"id\":84166}}}},{\"conditions\":[{\"values\":[\"84172\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84167\":{\"values\":[],\"id\":84167}}}},{\"conditions\":[{\"values\":[\"84173\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84168\":{\"values\":[],\"id\":84168}}}},{\"conditions\":[{\"values\":[\"84171\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84169\":{\"values\":[],\"id\":84169}}}},{\"conditions\":[{\"values\":[\"84169\"],\"type\":\"!eq\",\"id\":84163}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84170\":{\"values\":[],\"id\":84170}}}},{\"conditions\":[{\"values\":[\"84166\"],\"type\":\"!eq\",\"id\":84162}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84171\":{\"values\":{\"84174\":\"84174\",\"84175\":\"84175\",\"84176\":\"84176\",\"84177\":\"84177\",\"84178\":\"84178\",\"84179\":\"84179\",\"84180\":\"84180\"},\"id\":84171}}}},{\"conditions\":[{\"values\":[],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84172\":{\"values\":[],\"id\":84172},\"84173\":{\"values\":[],\"id\":84173},\"84174\":{\"values\":[],\"id\":84174},\"84175\":{\"values\":[],\"id\":84175},\"84176\":{\"values\":[],\"id\":84176},\"84177\":{\"values\":[],\"id\":84177},\"84178\":{\"values\":[],\"id\":84178}}}},{\"conditions\":[{\"values\":[\"84174\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84172\":{\"values\":[],\"id\":84172}}}},{\"conditions\":[{\"values\":[\"84175\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84173\":{\"values\":[],\"id\":84173}}}},{\"conditions\":[{\"values\":[\"84176\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84174\":{\"values\":[],\"id\":84174}}}},{\"conditions\":[{\"values\":[\"84177\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84175\":{\"values\":[],\"id\":84175}}}},{\"conditions\":[{\"values\":[\"84178\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84176\":{\"values\":[],\"id\":84176}}}},{\"conditions\":[{\"values\":[\"84179\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84177\":{\"values\":[],\"id\":84177}}}},{\"conditions\":[{\"values\":[\"84180\"],\"type\":\"!eq\",\"id\":84171}],\"condition_type\":\"or\",\"actions\":{\"hide\":{\"84178\":{\"values\":[],\"id\":84178}}}}]","hidden_dependents":"{\"hidden_options\":[84164,84165,84166,84167,84168,84169,84170,84172,84173,84174,84175,84176,84177,84178,84163,84171],\"hidden_values\":[84167,84168,84169,84170,84171,84172,84173,84174,84175,84176,84177,84178,84179,84180],\"preselected_values\":{\"84162\":[84164]}}","absolute_price":"0","absolute_cost":"0","absolute_weight":"0","sku_policy":"use_config","shareable_link":null,"hide_additional_product_price":"0","options":[{"__typename":"CustomizableDropDownOption","title":"Bedrukken of borduren","required":false,"sort_order":1,"option_id":84162,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"1","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;p&gt;Het kostenoverzicht voor bedrukken of borduren bij grotere aantallen vind je op &lt;a href=&quot;klantenservice\/bedrukken&quot;&gt;deze pagina&lt;\/a&gt;. &lt;\/p&gt;&lt;p&gt;Bij Proforto heb je de mogelijkheid om kleding te personaliseren door middel van bedrukken of borduren. Beide opties hebben hun voordelen. In het overzicht hieronder vind je de belangrijkste verschillen. &lt;h3&gt;Bedrukken&lt;\/h3&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Bedrukken biedt meer mogelijkheden dan borduren, zo kan met bedrukken een full color afbeelding of veelkleurig logo toegepast worden. &lt;\/li&gt;&lt;li&gt;Bedrukken kan een minder lange levensduur dan borduren hebben, afhankelijk van aantal wasbeurten en wastemperatuur.&lt;\/li&gt;&lt;li&gt;Voor bedrukken gelden - in tegenstelling tot borduren - geen instelkosten. Hierdoor is dit prijstechnisch aantrekkelijker - zeker bij kleinere aantallen.&lt;\/li&gt;&lt;\/ul&gt;&lt;\/p&gt;&lt;h3&gt;Borduren&lt;\/h3&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Heeft een chique uitstraling.&lt;\/li&gt;&lt;li&gt;Hogere kwaliteit dan bedrukken, maar kostbaarder.&lt;\/li&gt;&lt;li&gt;Beperkte mogelijkheden met afbeeldingen, vormen en kleuren.&lt;\/li&gt;&lt;\/ul&gt;&lt;\/p&gt;\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","dropdown_value":[{"title":"Geen","option_type_id":84164,"price":0,"price_type":"FIXED","sku":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Geen\"},{\"store_id\":\"1\",\"title\":\"Geen\"}]","special_price":null,"all_tier_prices":null,"description":null,"cost":"0.000000","images_data":null,"is_default":"1","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Bedrukken","option_type_id":84165,"price":0,"price_type":"FIXED","sku":"printing","mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken\"},{\"store_id\":\"1\",\"title\":\"Bedrukken\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":null,"description":null,"cost":"0.000000","images_data":null,"is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Borduren","option_type_id":84166,"price":0,"price_type":"FIXED","sku":"embroidery","mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren\"},{\"store_id\":\"1\",\"title\":\"Borduren\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":null,"description":null,"cost":"0.000000","images_data":null,"is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"}]},{"__typename":"CustomizableMultipleOption","title":"Bedrukken: Positie","required":false,"sort_order":2,"option_id":84163,"qty_input":"0","div_class":"","one_time":"0","is_swatch":"1","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;p&gt;Proforto werkt met de onderstaande vaste posities voor bedrukken en borduren. We benaderen de positie altijd vanuit dragersperspectief; de positie 'arm links' doelt dus op een bedrukking van de kleding op de mouw van je linker arm. In de onderstaande afbeeldingen zie je een voorbeeld van de posities.&lt;\/p&gt; &lt;p&gt;Afhankelijk van de verhoudingen van de aangeleverde afbeelding kan het formaat afwijken van onderstaande voorbeelden. We bedrukken in principe het maximaal haalbare vierkante centimeters voor de positie.&lt;\/p&gt;&lt;img src=&quot;media\/wysiwyg\/bedrukken-borduren\/posities.png&quot; \/&gt;\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","multiple_value":[{"title":"Borst links","option_type_id":84167,"price":19.95,"price_type":"FIXED","sku":"printing_position_chest_left","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst links\"},{\"store_id\":\"1\",\"title\":\"Borst links\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-links.png\",\"option_type_image_id\":\"5555715\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-links.jpg\",\"option_type_image_id\":\"5555716\",\"title_text\":\"\",\"sort_order\":\"2\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Borst rechts","option_type_id":84168,"price":19.95,"price_type":"FIXED","sku":"printing_position_chest_right","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst rechts\"},{\"store_id\":\"1\",\"title\":\"Borst rechts\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-rechts.png\",\"option_type_image_id\":\"5555717\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-rechts.jpg\",\"option_type_image_id\":\"5555718\",\"title_text\":\"\",\"sort_order\":\"2\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Borst midden","option_type_id":84169,"price":19.95,"price_type":"FIXED","sku":"printing_position_chest_center","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst midden\"},{\"store_id\":\"1\",\"title\":\"Borst midden\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-midden.png\",\"option_type_image_id\":\"5555719\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-midden.jpg\",\"option_type_image_id\":\"5555720\",\"title_text\":\"\",\"sort_order\":\"2\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Arm links","option_type_id":84170,"price":19.95,"price_type":"FIXED","sku":"printing_position_arm_left","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Arm links\"},{\"store_id\":\"1\",\"title\":\"Arm links\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-arm-links.png\",\"option_type_image_id\":\"5555721\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-arm-links.jpg\",\"option_type_image_id\":\"5555722\",\"title_text\":\"\",\"sort_order\":\"2\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Arm rechts","option_type_id":84171,"price":19.95,"price_type":"FIXED","sku":"printing_position_arm_right","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Arm rechts\"},{\"store_id\":\"1\",\"title\":\"Arm rechts\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-arm-rechts.png\",\"option_type_image_id\":\"5555723\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltipt-shirt-voor-arm-rechts.jpg\",\"option_type_image_id\":\"5555724\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Rug midden","option_type_id":84172,"price":19.95,"price_type":"FIXED","sku":"printing_position_back_center","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Rug midden\"},{\"store_id\":\"1\",\"title\":\"Rug midden\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-rug-midden.png\",\"option_type_image_id\":\"5555725\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-rug-midden.jpg\",\"option_type_image_id\":\"5555726\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Rug boven","option_type_id":84173,"price":19.95,"price_type":"FIXED","sku":"printing_position_back_upper","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"19.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"19.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Rug boven\"},{\"store_id\":\"1\",\"title\":\"Rug boven\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"9.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"3.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"2.5000\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-rug-boven.png\",\"option_type_image_id\":\"5555727\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-rug-boven.jpg\",\"option_type_image_id\":\"5555728\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"}]},{"__typename":"CustomizableFileOption","title":"Bedrukken: Arm links","required":false,"sort_order":3,"option_id":84164,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_arm_left","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Arm links\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Arm links\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Borst links","required":false,"sort_order":4,"option_id":84165,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_chest_left","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Borst links\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Borst links\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Borst rechts","required":false,"sort_order":5,"option_id":84166,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_chest_right","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Borst rechts\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Borst rechts\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Rug midden","required":false,"sort_order":6,"option_id":84167,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_back_center","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Rug midden\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Rug midden\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Rug boven","required":false,"sort_order":7,"option_id":84168,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_back_upper","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Rug boven\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Rug boven\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Arm rechts","required":false,"sort_order":8,"option_id":84169,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_arm_right","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Arm rechts\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Arm rechts\"}]"}},{"__typename":"CustomizableFileOption","title":"Bedrukken: Borst midden","required":false,"sort_order":9,"option_id":84170,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor de bedrukking op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"printing_logo_chest_center","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Bedrukken: Borst midden\"},{\"store_id\":\"1\",\"title\":\"Bedrukken: Borst midden\"}]"}},{"__typename":"CustomizableMultipleOption","title":"Borduren: Positie","required":false,"sort_order":10,"option_id":84171,"qty_input":"0","div_class":"","one_time":"0","is_swatch":"1","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;p&gt;Proforto werkt met de onderstaande vaste posities voor bedrukken en borduren. We benaderen de positie altijd vanuit dragersperspectief; de positie 'arm links' doelt dus op een bedrukking van de kleding op de mouw van je linker arm. In de onderstaande afbeeldingen zie je een voorbeeld van de posities.&lt;\/p&gt; &lt;p&gt;Afhankelijk van de verhoudingen van de aangeleverde afbeelding kan het formaat afwijken van onderstaande voorbeelden. We bedrukken in principe het maximaal haalbare vierkante centimeters voor de positie.&lt;\/p&gt;&lt;img src=&quot;media\/wysiwyg\/bedrukken-borduren\/posities.png&quot; \/&gt;\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","multiple_value":[{"title":"Borst links","option_type_id":84174,"price":29.95,"price_type":"FIXED","sku":"embroidery_position_chest_left","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"29.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst links\"},{\"store_id\":\"1\",\"title\":\"Borst links\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-links_1.png\",\"option_type_image_id\":\"5555729\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-links_1.jpg\",\"option_type_image_id\":\"5555730\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Borst rechts","option_type_id":84175,"price":29.95,"price_type":"FIXED","sku":"embroidery_position_chest_right","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"29.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst rechts\"},{\"store_id\":\"1\",\"title\":\"Borst rechts\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-rechts_1.png\",\"option_type_image_id\":\"5555731\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-rechts_1.jpg\",\"option_type_image_id\":\"5555732\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Borst midden","option_type_id":84176,"price":34.95,"price_type":"FIXED","sku":"embroidery_position_chest_center","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"34.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"34.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"34.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borst midden\"},{\"store_id\":\"1\",\"title\":\"Borst midden\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-borst-midden_1.png\",\"option_type_image_id\":\"5555733\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-borst-midden_1.jpg\",\"option_type_image_id\":\"5555734\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Arm links","option_type_id":84177,"price":29.95,"price_type":"FIXED","sku":"embroidery_position_arm_left","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"29.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Arm links\"},{\"store_id\":\"1\",\"title\":\"Arm links\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-arm-links_1.png\",\"option_type_image_id\":\"5555735\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-voor-arm-links_1.jpg\",\"option_type_image_id\":\"5555736\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Arm rechts","option_type_id":84178,"price":29.95,"price_type":"FIXED","sku":"embroidery_position_arm_right","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"29.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Arm rechts\"},{\"store_id\":\"1\",\"title\":\"Arm rechts\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-arm-rechts_1.png\",\"option_type_image_id\":\"5555737\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltipt-shirt-voor-arm-rechts_1.jpg\",\"option_type_image_id\":\"5555738\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Rug midden","option_type_id":84179,"price":34.95,"price_type":"FIXED","sku":"embroidery_position_back_center","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"34.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"34.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"34.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Rug midden\"},{\"store_id\":\"1\",\"title\":\"Rug midden\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-rug-midden_1.png\",\"option_type_image_id\":\"5555739\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-rug-midden_1.jpg\",\"option_type_image_id\":\"5555740\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"},{"title":"Rug boven","option_type_id":84180,"price":29.95,"price_type":"FIXED","sku":"embroidery_position_back_upper","selection_limit_from":null,"selection_limit_to":null,"mageworx_option_type_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"29.950000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"29.950000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Rug boven\"},{\"store_id\":\"1\",\"title\":\"Rug boven\"}]","special_price":"{\"price\":\"20.0000\",\"customer_group_id\":\"32000\",\"price_type\":\"percentage_discount\",\"date_from\":\"\",\"date_to\":\"\",\"comment\":\"\"}","all_tier_prices":"[{\"price\":\"20.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"3\"},{\"price\":\"14.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"5\"},{\"price\":\"7.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"15\"},{\"price\":\"5.9500\",\"customer_group_id\":\"32000\",\"price_type\":\"fixed\",\"date_from\":\"\",\"date_to\":\"\",\"qty\":\"35\"}]","description":null,"cost":"0.000000","images_data":"[{\"value\":\"\/b\/o\/bovenkleding-2-rug-boven_1.png\",\"option_type_image_id\":\"5555741\",\"title_text\":\"\",\"sort_order\":\"0\",\"base_image\":\"1\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"0\"},{\"value\":\"\/t\/o\/tooltip-t-shirt-rug-boven_1.jpg\",\"option_type_image_id\":\"5555742\",\"title_text\":\"\",\"sort_order\":\"1\",\"base_image\":\"0\",\"replace_main_gallery_image\":\"0\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"overlay_image\":\"0\",\"tooltip_image\":\"1\"}]","is_default":"0","qty_multiplier":"0","weight":"0.000000","weight_type":"","qty":"0.00","manage_stock":"0","disabled":"0"}]},{"__typename":"CustomizableFileOption","title":"Borduren: Borst links","required":false,"sort_order":11,"option_id":84172,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_chest_left","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Borst links\"},{\"store_id\":\"1\",\"title\":\"Borduren: Borst links\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Borst rechts","required":false,"sort_order":12,"option_id":84173,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_chest_right","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Borst rechts\"},{\"store_id\":\"1\",\"title\":\"Borduren: Borst rechts\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Borst midden","required":false,"sort_order":13,"option_id":84174,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_chest_center","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Borst midden\"},{\"store_id\":\"1\",\"title\":\"Borduren: Borst midden\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Arm links","required":false,"sort_order":14,"option_id":84175,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_arm_left","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Arm links\"},{\"store_id\":\"1\",\"title\":\"Borduren: Arm links\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Arm rechts","required":false,"sort_order":15,"option_id":84176,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_arm_right","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Arm rechts\"},{\"store_id\":\"1\",\"title\":\"Borduren: Arm rechts\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Rug midden","required":false,"sort_order":16,"option_id":84177,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_back_center","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Rug midden\"},{\"store_id\":\"1\",\"title\":\"Borduren: Rug midden\"}]"}},{"__typename":"CustomizableFileOption","title":"Borduren: Rug boven","required":false,"sort_order":17,"option_id":84178,"qty_input":"0","div_class":"","one_time":"1","is_swatch":"0","is_hidden":"0","mageworx_option_gallery":"0","mageworx_option_image_mode":"0","description":"[{\"store_id\":\"0\",\"description\":\"&lt;strong&gt;Bestand uploaden&lt;\/strong&gt;&lt;br\/&gt;- Upload het bestand dat gebruikt moet worden voor het borduurwerk op deze positie;&lt;br\/&gt;- Zorg ervoor dat het bestand van hoge kwaliteit is, bij voorkeur in zg. vector formaat (.eps of .pdf);&lt;br\/&gt;- Nadat je bestanden zijn ge\u00fcpload ontvang je een drukproef van het bestand op de juiste positie per mail.\"}]","sku_policy":"use_config","is_all_customer_groups":null,"is_all_store_views":null,"customer_group":null,"store_view":null,"disabled":"0","disabled_by_values":"0","file_value":{"file_extension":"pdf, eps, svg, jpg, jpeg, png, ai, tif, psd","image_size_x":0,"image_size_y":0,"price_type":"FIXED","price":0,"sku":"embroidery_logo_back_upper","mageworx_option_price":"[{\"store_id\":\"0\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"1\",\"price_type\":\"fixed\",\"price\":\"0.000000\"},{\"store_id\":\"2\",\"price_type\":\"fixed\",\"price\":\"0.000000\"}]","mageworx_title":"[{\"store_id\":\"0\",\"title\":\"Borduren: Rug boven\"},{\"store_id\":\"1\",\"title\":\"Borduren: Rug boven\"}]"}}]}]}}}"
data-swatch-data="{"data":{"swatchMediaData":{"swatch_media_data":"{\"options\":{\"84162\":{\"type\":\"drop_down\",\"mageworx_option_gallery\":\"0\",\"mageworx_option_image_mode\":\"0\",\"sort_order\":\"1\",\"values\":{\"84164\":{\"sort_order\":\"1\"},\"84165\":{\"sort_order\":\"2\"},\"84166\":{\"sort_order\":\"3\"}}},\"84163\":{\"type\":\"multiple\",\"mageworx_option_gallery\":\"0\",\"mageworx_option_image_mode\":\"0\",\"sort_order\":\"2\",\"values\":{\"84167\":{\"sort_order\":\"1\",\"images\":{\"5555715\":{\"value_id\":\"5555715\",\"option_type_id\":\"84167\",\"position\":\"1\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-links.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-links.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555716\":{\"value_id\":\"5555716\",\"option_type_id\":\"84167\",\"position\":\"2\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-links.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-links.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84168\":{\"sort_order\":\"2\",\"images\":{\"5555717\":{\"value_id\":\"5555717\",\"option_type_id\":\"84168\",\"position\":\"1\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-rechts.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-rechts.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555718\":{\"value_id\":\"5555718\",\"option_type_id\":\"84168\",\"position\":\"2\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-rechts.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-rechts.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84169\":{\"sort_order\":\"3\",\"images\":{\"5555719\":{\"value_id\":\"5555719\",\"option_type_id\":\"84169\",\"position\":\"1\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-midden.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-midden.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555720\":{\"value_id\":\"5555720\",\"option_type_id\":\"84169\",\"position\":\"2\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-midden.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-midden.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84170\":{\"sort_order\":\"4\",\"images\":{\"5555721\":{\"value_id\":\"5555721\",\"option_type_id\":\"84170\",\"position\":\"1\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-arm-links.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-arm-links.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555722\":{\"value_id\":\"5555722\",\"option_type_id\":\"84170\",\"position\":\"2\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-arm-links.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-arm-links.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84171\":{\"sort_order\":\"5\",\"images\":{\"5555723\":{\"value_id\":\"5555723\",\"option_type_id\":\"84171\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-arm-rechts.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-arm-rechts.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555724\":{\"value_id\":\"5555724\",\"option_type_id\":\"84171\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltipt-shirt-voor-arm-rechts.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltipt-shirt-voor-arm-rechts.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84172\":{\"sort_order\":\"6\",\"images\":{\"5555725\":{\"value_id\":\"5555725\",\"option_type_id\":\"84172\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-rug-midden.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-rug-midden.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555726\":{\"value_id\":\"5555726\",\"option_type_id\":\"84172\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-rug-midden.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-rug-midden.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84173\":{\"sort_order\":\"7\",\"images\":{\"5555727\":{\"value_id\":\"5555727\",\"option_type_id\":\"84173\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-rug-boven.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-rug-boven.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555728\":{\"value_id\":\"5555728\",\"option_type_id\":\"84173\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-rug-boven.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-rug-boven.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"}}},\"84171\":{\"type\":\"multiple\",\"mageworx_option_gallery\":\"0\",\"mageworx_option_image_mode\":\"0\",\"sort_order\":\"10\",\"values\":{\"84174\":{\"sort_order\":\"1\",\"images\":{\"5555729\":{\"value_id\":\"5555729\",\"option_type_id\":\"84174\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-links_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-links_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555730\":{\"value_id\":\"5555730\",\"option_type_id\":\"84174\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-links_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-links_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84175\":{\"sort_order\":\"2\",\"images\":{\"5555731\":{\"value_id\":\"5555731\",\"option_type_id\":\"84175\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-rechts_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-rechts_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555732\":{\"value_id\":\"5555732\",\"option_type_id\":\"84175\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-rechts_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-rechts_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84176\":{\"sort_order\":\"3\",\"images\":{\"5555733\":{\"value_id\":\"5555733\",\"option_type_id\":\"84176\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-borst-midden_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-borst-midden_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555734\":{\"value_id\":\"5555734\",\"option_type_id\":\"84176\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-borst-midden_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-borst-midden_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84177\":{\"sort_order\":\"4\",\"images\":{\"5555735\":{\"value_id\":\"5555735\",\"option_type_id\":\"84177\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-arm-links_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-arm-links_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555736\":{\"value_id\":\"5555736\",\"option_type_id\":\"84177\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-voor-arm-links_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-voor-arm-links_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84178\":{\"sort_order\":\"5\",\"images\":{\"5555737\":{\"value_id\":\"5555737\",\"option_type_id\":\"84178\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-arm-rechts_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-arm-rechts_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555738\":{\"value_id\":\"5555738\",\"option_type_id\":\"84178\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltipt-shirt-voor-arm-rechts_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltipt-shirt-voor-arm-rechts_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84179\":{\"sort_order\":\"6\",\"images\":{\"5555739\":{\"value_id\":\"5555739\",\"option_type_id\":\"84179\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-rug-midden_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-rug-midden_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555740\":{\"value_id\":\"5555740\",\"option_type_id\":\"84179\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-rug-midden_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-rug-midden_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"},\"84180\":{\"sort_order\":\"7\",\"images\":{\"5555741\":{\"value_id\":\"5555741\",\"option_type_id\":\"84180\",\"position\":\"0\",\"file\":\"\\\/b\\\/o\\\/bovenkleding-2-rug-boven_1.png\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/b\\\/o\\\/70x70\\\/bovenkleding-2-rug-boven_1.png\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"1\",\"tooltip_image\":\"0\"},\"5555742\":{\"value_id\":\"5555742\",\"option_type_id\":\"84180\",\"position\":\"1\",\"file\":\"\\\/t\\\/o\\\/tooltip-t-shirt-rug-boven_1.jpg\",\"label\":\"\",\"custom_media_type\":\"image\",\"color\":\"\",\"disabled\":\"0\",\"url\":\"https:\\\/\\\/proforto.nl\\\/media\\\/mageworx\\\/optionfeatures\\\/product\\\/option\\\/value\\\/t\\\/o\\\/70x70\\\/tooltip-t-shirt-rug-boven_1.jpg\",\"replace_main_gallery_image\":\"0\",\"overlay_image\":\"0\",\"base_image\":\"0\",\"tooltip_image\":\"1\"}},\"overlay_image_url\":\"\"}}}},\"option_types\":[\"field\",\"area\",\"file\",\"drop_down\",\"radio\",\"checkbox\",\"multiple\",\"date\",\"date_time\",\"time\"],\"render_images_for_option_types\":[\"drop_down\",\"radio\",\"checkbox\",\"multiple\"],\"option_gallery_type\":{\"disabled\":0,\"beside_option\":1,\"once_selected\":2}}"}}}">
</div>
<script>
'use strict';
function init() {
const productInfo = JSON.parse(document.getElementById('initial-load-product-info').dataset.productInfo);
const swatchDataJson = JSON.parse(document.getElementById('initial-load-product-info').dataset.swatchData);
const swatchData = JSON.parse(swatchDataJson.data.swatchMediaData.swatch_media_data);
let options = [];
let optionsMap = {};
let valuesMap = {};
let dependencyRules = [];
let step0 = [];
let step1 = [];
let step2 = [];
let uncategorized = [];
let selectedOptionValue = {};
if (productInfo.data.products.items.length > 0) {
const item = productInfo.data.products.items[0];
dependencyRules = JSON.parse(item.dependency_rules);
if (item.options) {
options = item.options;
}
for (const [i, optionData] of options.entries()) {
optionsMap[optionData.option_id.toString()] = i;
selectedOptionValue[optionData.option_id.toString()] = getInitialOptionValue(optionData);
const sku = getAnyValueSku(optionData);
optionData.step = classifyOption(sku);
const optionSwatchData = swatchData.options[optionData.option_id.toString()];
const optionValues = extractOptionValues(optionData);
for (const optionValue of optionValues) {
valuesMap[optionValue.option_type_id.toString()] = optionValue;
if (optionValue.all_tier_prices) {
optionValue.tierPrices = JSON.parse(optionValue.all_tier_prices);
}
const valueSwatchData = optionSwatchData.values[optionValue.option_type_id.toString()];
if (valueSwatchData.images) {
optionValue.images = Object.values(valueSwatchData.images);
}
if (optionValue.special_price) {
const specialPriceData = JSON.parse(optionValue.special_price);
if (specialPriceData.price_type === 'percentage_discount') {
optionValue.discount = specialPriceData.price;
} else {
optionValue.discount = null;
}
}
}
const sameDiscounts = optionValues.every((value) => value.discount === optionValues[0].discount) && optionValues.length > 0;
if (sameDiscounts) {
optionData.discount = optionValues[0].discount;
}
}
if (options.length > 0 && dependencyRules.length > 0) {
calculateParentDiscount(options, optionsMap, valuesMap, dependencyRules);
}
}
return {
options,
optionsMap,
valuesMap,
dependencyRules,
// Contains the alpine model value of the selected option value
selectedOptionValue,
// These contain the right data for rendering
step0,
step1,
step2,
uncategorized,
cart: [],
uploadNow: "false",
discountTableName: '',
discountTables: [],
optionValueQuantities: {},
optionValueQuantitiesWithCart: {},
initOptions() {
const productId = 163404;
if (this.options.length === 0) {
// Ignore pages without options
return;
}
this.$qty = document.getElementById('qty[' + productId + ']');
this.$qty.addEventListener('change', (event) => {
this.calculateDiscountTables();
this.sendNewPrices();
});
this.$addToCart = document.getElementById('product-addtocart-button');
const $addToCartWrapper = this.$addToCart?.parentElement;
const $priceAddToCartWrapper = $addToCartWrapper?.parentElement;
const $formArea = $priceAddToCartWrapper?.parentElement;
const $apo = document.getElementById('apo-block');
// $formArea?.insertBefore($apo, $priceAddToCartWrapper);
this.calculateVisibility();
Alpine.effect(() => {
this.calculateDiscountTables();
this.sendNewPrices();
});
this.$watch(('uploadNow'), () => {
this.sendUploadNowSelection();
})
},
async onChangeField(optionId) {
const optionIndex = this.optionsMap[optionId];
const option = this.options[optionIndex];
this.eraseDependentOptions(option);
this.calculateVisibility();
if (Array.isArray(this.selectedOptionValue[optionId.toString()])) {
for (const selectedOptionValue of this.selectedOptionValue[optionId.toString()]) {
this.sendActiveOption(selectedOptionValue);
}
} else {
this.sendActiveOption(this.selectedOptionValue[optionId.toString()]);
}
this.sendActiveOption(option.option_id);
this.sendNewPrices();
if (optionId === this.step0OptionId()) {
window.productPersonalisation = getTitle(this.selectedStep0Value());
window.dispatchEvent(new CustomEvent('personalisation-selection-changed', {
detail: {
personalisation: getTitle(this.selectedStep0Value()),
optionId: option.option_id,
value: this.selectedOptionValue[optionId.toString()]
}
}));
}
const selected = this.selectedOptionValue[optionId.toString()]
let selectedTitles = Array.isArray(selected) ? selected.map(s => this.valuesMap[s].title).join(', ') : this.valuesMap[selected].title
const step = this.options.find(o => o.option_id === optionId).step
if (step === 1) {
selectedTitles = this.step1[0].title.split(':')[0] + ': ' + selectedTitles
}
await yieldToMain();
window.dataLayer.push({
events: {
category: 'printFlow',
action: 'step' + (step + 1),
label: selectedTitles,
},
event: 'printFlow'
});
},
async sendFileSelectionEvent(optionId) {
await yieldToMain();
window.dataLayer.push({
events: {
category: 'printFlow',
action: 'step4',
label: this.options.find(o => o.option_id === optionId).title,
},
event: 'printFlow'
});
},
eraseDependentOptions(option) {
if (option.value === null) {
return;
}
this.dependencyRules.forEach((rule) => {
rule.conditions.forEach((condition) => {
if (condition.id === option.option_id) {
Object.values(rule.actions.hide).forEach((action) => {
const optionIndex = this.optionsMap[action.id];
const dependingOption = this.options[optionIndex];
this.selectedOptionValue[action.id.toString()] = getInitialOptionValue(dependingOption);
});
}
});
});
},
calculateVisibility() {
this.options.forEach((option) => {
option.hidden = false;
extractOptionValues(option).forEach((value) => {
value.hidden = false;
});
});
this.dependencyRules.forEach((rule) => {
this.checkRule(rule);
});
this.hideOptionsWhenAllValuesHidden();
this.setSteps();
this.discountTableName = getTitle(this.selectedStep0Value());
},
checkRule(rule) {
if (rule.condition_type === 'or') {
this.checkOrRule(rule);
} else {
console.error("AND rules not implemented");
// this.checkAndRule(rule);
}
},
checkOrRule(rule) {
let isConvertedToAndCondition = false;
let areConditionsNotPassed = false;
rule.conditions.forEach((item) => {
let conditionOptionValues = item.values;
let optionIdx = this.optionsMap[item.id.toString()];
let option = options[optionIdx];
let optionValue = this.selectedOptionValue[item.id.toString()];
if (conditionOptionValues.length === 0 && item.id) {
conditionOptionValues = extractOptionValues(option).map((value) => value.option_type_id);
isConvertedToAndCondition = true;
}
if (item.type === '!eq') {
conditionOptionValues.forEach((conditionOptionValueId) => {
if (isConvertedToAndCondition) {
if (optionValue !== undefined && Array.isArray(optionValue)) {
if (optionValue.indexOf(conditionOptionValueId.toString()) !== -1) {
areConditionsNotPassed = true;
}
} else {
if (optionValue === conditionOptionValueId.toString()) {
areConditionsNotPassed = true;
}
}
} else {
if (optionValue !== undefined && Array.isArray(optionValue)) {
if (optionValue.indexOf(conditionOptionValueId.toString()) === -1) {
this.addHiddenValuesByRule(rule);
}
} else {
if (optionValue !== conditionOptionValueId.toString()) {
this.addHiddenValuesByRule(rule);
}
}
}
});
if (isConvertedToAndCondition && !areConditionsNotPassed) {
this.addHiddenValuesByRule(rule);
}
} else if (item.type === 'eq') {
conditionOptionValues.forEach((conditionOptionValueId) => {
if (optionValue !== undefined && Array.isArray(optionValue)) {
if (optionValue && optionValue.length && optionValue.indexOf(conditionOptionValueId.toString()) !== -1) {
areConditionsNotPassed = true;
}
} else {
if (optionValue === conditionOptionValueId.toString()) {
this.addHiddenValuesByRule(rule);
}
}
});
}
});
},
addHiddenValuesByRule(rule) {
if (rule.actions.hide) {
Object.values(rule.actions.hide).forEach((value) => {
let optionIdx = this.optionsMap[value.id.toString()];
let option = this.options[optionIdx];
if (!isValuesOption(option)) {
option.hidden = true;
return;
}
extractOptionValues(option).forEach((optionValue) => {
if (Object.values(value.values).indexOf(optionValue.option_type_id.toString()) !== -1) {
optionValue.hidden = true;
}
});
});
}
},
hideOptionsWhenAllValuesHidden() {
this.options.forEach((option) => {
if (!isValuesOption(option)) {
return;
}
let allValuesHidden = true;
extractOptionValues(option).forEach((optionValue) => {
if (!optionValue.hidden) {
allValuesHidden = false;
}
});
if (allValuesHidden) {
option.hidden = true;
}
});
},
setSteps() {
const step0 = [];
const step1 = [];
const step2 = [];
const uncategorized = [];
for (const optionData of this.options) {
if (optionData.hidden) {
continue;
}
const step = optionData.step;
const option = makeOption(optionData);
if (step === 0) {
step0.push(option);
} else if (step === 1) {
step1.push(option);
} else if (step === 2) {
step2.push(option);
} else {
uncategorized.push(option);
}
}
this.step0 = step0;
this.step1 = step1;
this.step2 = step2;
this.uncategorized = uncategorized;
},
calculateDiscountTables() {
let discountTables = [];
this.optionValueQuantities = this.countOptionQuantities();
this.optionValueQuantitiesWithCart = this.countCartOptionQuantities({
...this.optionValueQuantities
});
for (const [valueId, qty] of Object.entries(this.optionValueQuantitiesWithCart)) {
const value = this.valuesMap[valueId];
if (!value || !value.tierPrices || value.price === 0) {
continue;
}
discountTables.push(this.makeDiscountTable(value, qty, value.tierPrices));
}
this.discountTables = discountTables;
},
countOptionQuantities() {
let optionValueQuantities = {};
for (const option of this.options) {
if (option.hidden) {
continue;
}
const optionId = option.option_id.toString();
const optionValueId = this.selectedOptionValue[optionId];
if (optionValueId) {
if (Array.isArray(optionValueId)) {
for (const valueId of optionValueId) {
optionValueQuantities[valueId] = 1;
}
} else {
optionValueQuantities[optionValueId] = 1;
}
}
}
const currentAmount = +this.$qty.value;
for (const [key, qty] of Object.entries(optionValueQuantities)) {
optionValueQuantities[key] = qty * currentAmount;
}
return optionValueQuantities;
},
countCartOptionQuantities(optionValueQuantities) {
const productId = '163404';
if (!this.cart.items) {
return optionValueQuantities;
}
for (const cartItem of this.cart.items) {
if (cartItem.product_id !== productId) {
continue;
}
for (const cartOption of cartItem.options) {
if (!cartOption.is_customizable_option) {
continue;
}
if (Array.isArray(cartOption.value_id)) {
for (const valueId of cartOption.value_id) {
if (!optionValueQuantities[valueId]) {
continue;
}
optionValueQuantities[valueId] += cartItem.qty;
}
} else {
if (!optionValueQuantities[cartOption.value_id]) {
continue;
}
optionValueQuantities[cartOption.value_id] += cartItem.qty;
}
}
}
return optionValueQuantities;
},
loadCart(data) {
if (data.cart) {
this.cart = data.cart;
}
},
selectedStep0Value() {
let selectedValue = "";
this.options.forEach((option) => {
if (option.step === 0 && !option.hidden) {
const valueId = this.selectedOptionValue[option.option_id.toString()];
if (valueId) {
for (const value of extractOptionValues(option)) {
if (value.is_default === "1") {
continue;
}
if (value.option_type_id.toString() === valueId) {
selectedValue = value;
return true;
}
}
}
}
});
return selectedValue;
},
step0OptionId() {
let optionId = "";
this.options.forEach((option) => {
if (option.step === 0 && !option.hidden) {
optionId = option.option_id;
return true;
}
});
return optionId;
},
makeDiscountTable(value, qty, tierPrices) {
let taxRate = 21;
let discountPercent = 0;
if (!isNaN(+value?.discount)) {
discountPercent = +value.discount;
}
tierPrices.sort((a, b) => a.qty - b.qty);
let tiers = [{
from: 1,
base_price: value.price
}];
if (discountPercent > 0) {
tiers[0].original_base_price = tiers[0].base_price;
tiers[0].base_price = value.price * (1 - discountPercent / 100);
}
let anyActive = false;
for (const [idx, tierPrice] of tierPrices.entries()) {
tiers[idx].to = +tierPrice.qty - 1;
const lastActive = qty < +tierPrice.qty && qty >= tiers[idx].from;
tiers[idx].active = lastActive;
anyActive = anyActive || lastActive;
tiers[idx + 1] = {
from: +tierPrice.qty,
base_price: tierPrice.price
};
if (discountPercent > 0) {
tiers[idx + 1].original_base_price = tiers[idx + 1].base_price;
tiers[idx + 1].base_price = tierPrice.price * (1 - discountPercent / 100);
}
}
if (Alpine.store('tax').showPricesAs === 'excl') {
for (const tier of tiers) {
tier.originalPrice = tier.original_base_price;
tier.price = tier.base_price;
}
} else if (Alpine.store('tax').showPricesAs === 'incl') {
for (const tier of tiers) {
tier.originalPrice = tier.original_base_price * (1 + taxRate / 100);
tier.price = tier.base_price * (1 + taxRate / 100);
}
}
if (!anyActive) {
tiers[tiers.length - 1].active = true;
}
return {
valueId: value.option_type_id,
title: getTitle(value),
tiers: tiers,
qty: qty,
anyDiscounted: discountPercent > 0,
};
},
mouseEnter(event, tooltipImageUrl) {
if (this.$tooltip) {
document.body.removeChild(this.$tooltip);
this.$tooltip = null;
}
const tooltip = document.createElement('div');
tooltip.style = `
position: absolute;
top: ${event.clientY + 10}px;
left: ${event.clientX + 10}px;
width: 200px;
height: 200px;
background: url(${tooltipImageUrl}) no-repeat;
background-size: contain;
z-index: 1000;
`;
this.$tooltip = tooltip;
document.body.appendChild(tooltip);
},
mouseMove(event) {
if (this.$tooltip) {
this.$tooltip.style.top = `${event.clientY + 10}px`;
this.$tooltip.style.left = `${event.clientX + 10}px`;
}
},
mouseLeave(event) {
if (this.$tooltip) {
document.body.removeChild(this.$tooltip);
this.$tooltip = null;
}
},
sendNewPrices() {
let taxRate = 21;
let prices = {};
for (const [valueId, qty] of Object.entries(this.optionValueQuantitiesWithCart)) {
const value = this.valuesMap[valueId];
if (!value) {
continue;
}
let discountPercent = 0;
if (!isNaN(+value.discount)) {
discountPercent = +value.discount;
}
if (!value.tierPrices) {
prices[valueId] = value.price * (1 - discountPercent / 100);
continue;
}
// Reverse sort
value.tierPrices.sort((a, b) => b.qty - a.qty);
for (const tierPrice of value.tierPrices) {
if (qty >= +tierPrice.qty) {
prices[valueId] = +tierPrice.price * (1 - discountPercent / 100);
break;
}
}
if (prices[valueId] === undefined) {
prices[valueId] = value.price * (1 - discountPercent / 100);
}
}
window.dispatchEvent(new CustomEvent('update-custom-option-base-prices', {
detail: prices
}));
prices = {};
for (const [valueId, qty] of Object.entries(this.optionValueQuantitiesWithCart)) {
const value = this.valuesMap[valueId];
if (!value) {
continue;
}
let discountPercent = 0;
if (!isNaN(+value.discount)) {
discountPercent = +value.discount;
}
if (!value.tierPrices) {
prices[valueId] = value.price * (1 - discountPercent / 100) * (1 + taxRate / 100);
continue;
}
// Reverse sort
value.tierPrices.sort((a, b) => b.qty - a.qty);
for (const tierPrice of value.tierPrices) {
if (qty >= +tierPrice.qty) {
prices[valueId] = +tierPrice.price * (1 - discountPercent / 100) * (1 + taxRate / 100);
break;
}
}
if (prices[valueId] === undefined) {
prices[valueId] = value.price * (1 - discountPercent / 100) * (1 + taxRate / 100);
}
}
window.dispatchEvent(new CustomEvent('update-custom-option-prices', {
detail: prices
}));
},
sendActiveOption(optionId) {
window.dispatchEvent(new CustomEvent('update-custom-option-active', {
detail: {
active: true,
customOptionId: optionId
}
}));
},
async sendUploadNowSelection() {
await yieldToMain();
window.dataLayer.push({
events: {
category: 'printFlow',
action: 'step3',
label: this.uploadNow ? 'upload-now' : 'upload-later',
},
event: 'printFlow'
});
}
}
}
function makeOption(optionData) {
let option = {
optionId: optionData.option_id,
required: optionData.required || optionData.title.toLowerCase().includes('positie'), // Choose position should always be required
title: optionData.title,
description: getOptionDescription(optionData),
initialValue: getInitialOptionValue(optionData),
value: getInitialOptionValue(optionData),
renderType: getOptionRenderType(optionData),
};
if (isValuesOption(optionData)) {
option.optionValues = getOptionValues(optionData);
}
return option;
}
function getOptionValues(optionData) {
let values = [];
for (const value of extractOptionValues(optionData)) {
if (value.hidden) {
continue;
}
values.push(makeValue(value, optionData.step))
}
return values;
}
function makeValue(valueData, step) {
let value = {
valueId: valueData.option_type_id,
title: getTitle(valueData),
sku: valueData.sku
};
if (valueData.discount && step === 0) {
value.discount = valueData.discount;
}
if (valueData.images) {
for (const image of valueData.images) {
if (image.base_image === "1") {
value.baseImageUrl = image.url;
}
if (image.tooltip_image === "1") {
value.tooltipImageUrl = image.url;
}
}
}
return value
}
function extractOptionValues(option) {
if (option.__typename === 'CustomizableMultipleOption') {
return option.multiple_value;
} else if (option.__typename === 'CustomizableRadioOption') {
return option.radio_value;
} else if (option.__typename === 'CustomizableCheckboxOption') {
return option.checkbox_value;
} else if (option.__typename === 'CustomizableDropDownOption') {
return option.dropdown_value;
}
return [];
}
function getOptionValue(option) {
if (option.__typename === 'CustomizableFileOption') {
return option.file_value;
} else if (option.__typename === 'CustomizableAreaOption') {
return option.area_value;
} else if (option.__typename === 'CustomizableFieldOption') {
return option.field_value;
}
return null;
}
function getOptionRenderType(option) {
if (option.__typename === 'CustomizableDropDownOption' && option.is_swatch) {
return 'single_swatch';
} else if (option.__typename === 'CustomizableMultipleOption' && option.is_swatch) {
return 'multi_swatch';
} else if (option.__typename === 'CustomizableMultipleOption') {
return 'checkbox';
} else if (option.__typename === 'CustomizableMultipleOption') {
return 'multiple_select';
} else if (option.__typename === 'CustomizableRadioOption') {
return 'radio';
} else if (option.__typename === 'CustomizableCheckboxOption') {
return 'checkbox';
} else if (option.__typename === 'CustomizableDropDownOption') {
return 'radio';
} else if (option.__typename === 'CustomizableFileOption') {
return 'file';
}
return 'text';
}
function isValuesOption(option) {
return option.__typename === 'CustomizableMultipleOption' || option.__typename === 'CustomizableRadioOption' || option.__typename === 'CustomizableCheckboxOption' || option.__typename === 'CustomizableDropDownOption';
}
function isMultipleValuesOption(option) {
return option.__typename === 'CustomizableMultipleOption' || option.__typename === 'CustomizableCheckboxOption';
}
function getAnyValueSku(option) {
const value = getOptionValue(option);
if (value !== null) {
return value.sku;
}
const values = extractOptionValues(option);
for (const value of values) {
if (value.sku) {
return value.sku;
}
}
return '';
}
function classifyOption(sku) {
if (sku === 'printing' || sku === 'embroidery') {
return 0;
}
if (sku.startsWith('printing_position') || sku.startsWith('embroidery_position')) {
return 1;
}
if (sku.startsWith('printing_logo') || sku.startsWith('embroidery_logo')) {
return 2;
}
}
function getInitialOptionValue(option) {
for (const optionValue of extractOptionValues(option)) {
if (optionValue.is_default === '1') {
return optionValue.option_type_id.toString();
}
}
if (isMultipleValuesOption(option)) {
return [];
}
return null;
}
function getOptionDescription(option) {
if (option.description === null) {
return '';
}
try {
const descriptionData = JSON.parse(option.description);
const currentStoreId = '1';
let item = descriptionData.find((data) => data.store_id === currentStoreId);
if (item === undefined) {
item = descriptionData.find((data) => data.store_id === '0');
}
return item.description;
} catch {
return option.description;
}
}
function getTitle(valueData) {
try {
const titleData = JSON.parse(valueData.mageworx_title);
const currentStoreId = '1';
let item = titleData.find((data) => data.store_id === currentStoreId);
if (item === undefined) {
item = titleData.find((data) => data.store_id === '0');
}
return item.title;
} catch {
return valueData.title;
}
}
function decodeHtml(html) {
var txt = document.createElement("textarea");
txt.innerHTML = html;
return txt.value;
}
function calculateParentDiscount(options, optionsMap, valuesMap, dependencyRules) {
for (const rule of dependencyRules) {
if (rule.conditions.length !== 1) {
continue;
}
if (rule.conditions[0].values.length !== 1) {
continue;
}
if (Object.keys(rule.actions.hide).length !== 1) {
continue;
}
const conditionValueId = rule.conditions[0].values[0];
const childOptionId = Object.values(rule.actions.hide)[0].id;
const childOption = options[optionsMap[childOptionId]];
if (!childOption.discount) {
continue;
}
valuesMap[conditionValueId].discount = childOption.discount;
}
}
</script>
<div id="apo-block" x-data="init()" x-init="initOptions()" @private-content-loaded.window="loadCart($event.detail.data)" x-defer="intersect">
<template x-for="option in uncategorized">
<div>
<h2 x-text="option.title" class="font-bold">Title</h2>
<span x-text="option.description" class="hidden">Description</span>
<div class="flex gap-3 flex-wrap">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden " :class="{
'required': option.required,
}" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType == 'multiple_select'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType == 'checkbox'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
</template>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
<template x-if="step0.length !== 0">
<div class="mb-8">
<template x-for="option in step0">
<div>
<h2 x-text="option.title" class="font-bold inline">Title</h2>
<template x-if="option.description">
<div class="inline-flex align-middle" x-data="{ open: false }">
<div class="hover:underline flex items-center cursor-pointer ml-4 gap-2 text-anchor" @click="open = true">
<svg height="14px" width="14px" class="text-anchor">
<use xlink:href="#info"></use>
</svg> Meer info
</div>
<div class="fixed left-0 top-0 h-screen w-screen cursor-pointer bg-black opacity-60 z-90" x-cloak="" x-show="open" @click="open = false"></div>
<div class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 p-4 shadow bg-white z-100 min-w-[280px] rounded max-w-[90vw] max-h-[90vh] overflow-scroll w-max" x-cloak="" x-show="open">
<div class="relative border-b border-container flex gap-2 mb-2 pb-2 font-bold italic items-center pr-5">
<div x-text="option.title"></div>
<svg height="20px" width="20px" class="absolute top-0 right-0 cursor-pointer" @click="open = false">
<use xlink:href="#close"></use>
</svg>
</div>
<div class="prose" x-html="decodeHtml(option.description)"></div>
</div>
</div>
</template>
<div class="flex gap-3 flex-wrap mt-2">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden " :class="{
'required': option.required,
}" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType == 'multiple_select'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType == 'checkbox'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
</template>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
</div>
</template>
<div class="mb-8">
<template x-for="option in step0">
<div>
<h2 x-text="option.title" class="font-bold inline">Title</h2>
<template x-if="option.description">
<div class="inline-flex align-middle" x-data="{ open: false }">
<div class="hover:underline flex items-center cursor-pointer ml-4 gap-2 text-anchor" @click="open = true">
<svg height="14px" width="14px" class="text-anchor">
<use xlink:href="#info"></use>
</svg> Meer info
</div>
<div class="fixed left-0 top-0 h-screen w-screen cursor-pointer bg-black opacity-60 z-90" x-cloak="" x-show="open" @click="open = false"></div>
<div class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 p-4 shadow bg-white z-100 min-w-[280px] rounded max-w-[90vw] max-h-[90vh] overflow-scroll w-max" x-cloak="" x-show="open">
<div class="relative border-b border-container flex gap-2 mb-2 pb-2 font-bold italic items-center pr-5">
<div x-text="option.title"></div>
<svg height="20px" width="20px" class="absolute top-0 right-0 cursor-pointer" @click="open = false">
<use xlink:href="#close"></use>
</svg>
</div>
<div class="prose" x-html="decodeHtml(option.description)"></div>
</div>
</div>
</template>
<div class="flex gap-3 flex-wrap mt-2">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden " :class="{
'required': option.required,
}" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType == 'multiple_select'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType == 'checkbox'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
</template>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
<div>
<h2 x-text="option.title" class="font-bold inline">Bedrukken of borduren</h2>
<template x-if="option.description">
<div class="inline-flex align-middle" x-data="{ open: false }">
<div class="hover:underline flex items-center cursor-pointer ml-4 gap-2 text-anchor" @click="open = true">
<svg height="14px" width="14px" class="text-anchor">
<use xlink:href="#info"></use>
</svg> Meer info
</div>
<div class="fixed left-0 top-0 h-screen w-screen cursor-pointer bg-black opacity-60 z-90" x-cloak="" x-show="open" @click="open = false"></div>
<div class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 p-4 shadow bg-white z-100 min-w-[280px] rounded max-w-[90vw] max-h-[90vh] overflow-scroll w-max" x-cloak="" x-show="open">
<div class="relative border-b border-container flex gap-2 mb-2 pb-2 font-bold italic items-center pr-5">
<div x-text="option.title"></div>
<svg height="20px" width="20px" class="absolute top-0 right-0 cursor-pointer" @click="open = false">
<use xlink:href="#close"></use>
</svg>
</div>
<div class="prose" x-html="decodeHtml(option.description)"></div>
</div>
</div>
</template>
<div class="inline-flex align-middle" x-data="{ open: false }">
<div class="hover:underline flex items-center cursor-pointer ml-4 gap-2 text-anchor" @click="open = true">
<svg height="14px" width="14px" class="text-anchor">
<use xlink:href="#info"></use>
</svg> Meer info
</div>
<div class="fixed left-0 top-0 h-screen w-screen cursor-pointer bg-black opacity-60 z-90" x-show="open" @click="open = false" style="display: none;"></div>
<div class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 p-4 shadow bg-white z-100 min-w-[280px] rounded max-w-[90vw] max-h-[90vh] overflow-scroll w-max" x-show="open" style="display: none;">
<div class="relative border-b border-container flex gap-2 mb-2 pb-2 font-bold italic items-center pr-5">
<div x-text="option.title">Bedrukken of borduren</div>
<svg height="20px" width="20px" class="absolute top-0 right-0 cursor-pointer" @click="open = false">
<use xlink:href="#close"></use>
</svg>
</div>
<div class="prose" x-html="decodeHtml(option.description)">
<p>Het kostenoverzicht voor bedrukken of borduren bij grotere aantallen vind je op <a href="klantenservice/bedrukken">deze pagina</a>. </p>
<p>Bij Proforto heb je de mogelijkheid om kleding te personaliseren door middel van bedrukken of borduren. Beide opties hebben hun voordelen. In het overzicht hieronder vind je de belangrijkste verschillen. </p>
<h3>Bedrukken</h3>
<p></p>
<ul>
<li>Bedrukken biedt meer mogelijkheden dan borduren, zo kan met bedrukken een full color afbeelding of veelkleurig logo toegepast worden. </li>
<li>Bedrukken kan een minder lange levensduur dan borduren hebben, afhankelijk van aantal wasbeurten en wastemperatuur.</li>
<li>Voor bedrukken gelden - in tegenstelling tot borduren - geen instelkosten. Hierdoor is dit prijstechnisch aantrekkelijker - zeker bij kleinere aantallen.</li>
</ul>
<p></p>
<h3>Borduren</h3>
<p></p>
<ul>
<li>Heeft een chique uitstraling.</li>
<li>Hogere kwaliteit dan bedrukken, maar kostbaarder.</li>
<li>Beperkte mogelijkheden met afbeeldingen, vormen en kleuren.</li>
</ul>
<p></p>
</div>
</div>
</div>
<div class="flex gap-3 flex-wrap mt-2">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden " :class="{
'required': option.required,
}" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType == 'multiple_select'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType == 'checkbox'">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="onChangeField(option.optionId)" form="product_addtocart_form" :name="'options[' + option.optionId + '][]'"
x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<!-- TODO: deze peer checked maakt nog geen mooie rand, ligt het aan onze tailwind config? -->
<label :for="value.valueId" class="peer-checked:border-blue-600" @mouseenter="(event) => mouseEnter(event, value.tooltipImageUrl)" @mousemove="mouseMove" @mouseleave="mouseLeave">
<img :src="value.baseImageUrl" :alt="value.title" height="50" width="50">
</label>
</template>
</div>
</template>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
</template><template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form" id="value84164" name="options[84162]" value="84164">
<label x-text="value.title" :for="'value' + value.valueId" for="value84164">Geen</label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible border-black ring-1 ring-black" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title">Geen</div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form" id="value84165" name="options[84162]" value="84165">
<label x-text="value.title" :for="'value' + value.valueId" for="value84165">Bedrukken</label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title">Bedrukken</div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)">20</span>% </div>
</div>
</div>
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form" id="value84166" name="options[84162]" value="84166">
<label x-text="value.title" :for="'value' + value.valueId" for="value84166">Borduren</label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title">Borduren</div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>% </div>
</template>
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)">20</span>% </div>
</div>
</div>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="step1.length !== 0">
<div class="mb-8 rounded-xl shadow-md">
<div class="p-4 bg-primary text-white rounded-t-xl flex justify-between items-center">
<div class="font-bold font-title normal-case">1. Kies je positie(s)</div>
<div class="flex gap-4 items-center" :class="{
'invisible': !selectedOptionValue[step1[0]?.optionId]?.length
}" x-cloak="">
<div class="font-bold italic lowercase">
<span x-text="selectedOptionValue[step1[0]?.optionId]?.length"></span>
<span x-show="options[0].dropdown_value.find(v => v.option_type_id == selectedOptionValue[step0[0].optionId])?.sku == 'printing'">
<span x-show="selectedOptionValue[step1[0]?.optionId]?.length === 1"> Opdruk </span>
<span x-show="selectedOptionValue[step1[0]?.optionId]?.length > 1"> Opdrukken </span>
</span>
<span x-show="options[0].dropdown_value.find(v => v.option_type_id == selectedOptionValue[step0[0].optionId])?.sku == 'embroidery'">
<span x-show="selectedOptionValue[step1[0]?.optionId]?.length === 1"> Borduring </span>
<span x-show="selectedOptionValue[step1[0]?.optionId]?.length > 1"> Borduringen </span>
</span>
</div>
<svg height="24px" width="24px" class="text-white">
<use xlink:href="#usp"></use>
</svg>
</div>
</div>
<div class="border border-container border-t-0 rounded-b-xl p-4">
<p class="mb-4">Het is mogelijk om meerdere posities te selecteren</p>
<div x-show="showErrors && !selectedOptionValue[step1[0]?.optionId]?.length" x-cloak="" x-transition="" class="bold inline-block bg-error-message text-error-message border border-error-message rounded py-1 px-2 mb-4"> Dit is een
verplicht veld. </div>
<template x-for="option in step1">
<div>
<div class="flex gap-3 flex-wrap">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden " :class="{
'required': option.required,
}" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span x-text="Math.round(value.discount)"></span>%
</div>
</template>
</div>
</div>
</template>
</template>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
<template x-if="option.description">
<div x-data="{ open: false }">
<div class="hover:underline flex items-center cursor-pointer mt-8 gap-2" @click="open = true">
<svg height="20px" width="20px" class="text-anchor">
<use xlink:href="#info"></use>
</svg> Bekijk de posities en uitleg in een overzicht
</div>
<div class="fixed left-0 top-0 h-screen w-screen cursor-pointer bg-black opacity-60 z-90" x-cloak="" x-show="open" @click="open = false"></div>
<div class="fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 p-4 shadow bg-white z-100 min-w-[280px] rounded max-w-[90vw] max-h-[90vh] overflow-scroll w-max" x-cloak="" x-show="open">
<div class="relative border-b border-container flex gap-2 mb-2 pb-2 font-bold italic items-center pr-5"> Posities voor bedrukken of borduren <svg height="20px" width="20px" class="absolute top-0 right-0 cursor-pointer"
@click="open = false">
<use xlink:href="#close"></use>
</svg>
</div>
<div class="prose" x-html="decodeHtml(option.description)"></div>
</div>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
<template x-if="step1.length !== 0">
<div class="mb-8 rounded-xl shadow-md">
<div class="p-4 rounded-t-xl flex justify-between items-center" :class="{
'bg-primary text-white': step2.length !== 0,
'border border-container rounded-xl': step2.length === 0
}">
<div class="font-bold font-title normal-case">2. Upload je logo('s)</div>
<svg height="24px" width="24px" class="text-white" :class="{
'invisible': !(uploadNow !== 'true' && step2.length) && !step2.every(({ optionId }) => !!selectedOptionValue[optionId])
}" x-cloak="">
<use xlink:href="#usp"></use>
</svg>
</div>
<template x-if="step2.length !== 0">
<div class="border border-container border-t-0 rounded-b-xl p-4">
<p class="mb-4">We accepteren alle logo's en formaten, maar hoe hoger de kwaliteit hoe beter!</p>
<div>
<input type="radio" name="uploadNow" value="false" id="upload-later" x-model="uploadNow">
<label class="inline-block" for="upload-later">Achteraf mijn logo aanleveren</label>
</div>
<div>
<input type="radio" name="uploadNow" value="true" id="upload-now" x-model="uploadNow">
<label class="inline-block" for="upload-now">Nu uploaden</label>
</div>
<template x-if="uploadNow === 'true'">
<div class="space-y-6">
<template x-for="option in step2">
<div>
<h2>
<span class="font-bold">Bestand uploaden voor:</span>
<span x-text="option.title.split(':').at(-1)"></span>
</h2>
<span x-text="option.description" class="hidden">Description</span>
<div x-show="showErrors && !selectedOptionValue[option.option_id]" x-cloak="" x-transition="" class="bold inline-block bg-error-message text-error-message border border-error-message rounded py-1 px-2 my-2"> Dit is een
verplicht veld. </div>
<div class="flex gap-3 mb-2 flex-wrap">
<template x-if="option.renderType == 'file'">
<div>
<div class="mt-2 flex gap-2 flex-wrap items-center">
<label class="inline-block capitalize whitespace-nowrap cursor-pointer border border-container rounded py-1 px-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg"
:for="'options_' + option.optionId + '_file'"> Selecteer bestand </label>
<input class="hidden required" type="file" :id="'options_' + option.optionId + '_file'" @change="(e) => {
selectedOptionValue[option.optionId] = e.target.files[0].name;
sendFileSelectionEvent(option.optionId)
}" form="product_addtocart_form" :name="'options_' + option.optionId + '_file'">
<span class="whitespace-nowrap" x-text="selectedOptionValue[option.optionId]"></span>
</div>
<div class="mt-2 flex gap-2" x-show="selectedOptionValue[option.optionId]">
<svg height="20px" width="20px" class="text-checkmark">
<use xlink:href="#usp"></use>
</svg>
<div>Gecontroleerd</div>
</div>
</div>
</template>
<template x-if="option.renderType === 'radio'">
<div class="checkbox-group" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="onChangeField(option.optionId)"
form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
<template x-if="value.discount"><span x-text="'-' + +value.discount + '%'" class="bg-green-500 text-white text-sm p-1 rounded-full"></span></template>
</div>
</template>
</div>
</template>
<template x-if="option.renderType === 'single_swatch'">
<template x-for="value in option.optionValues">
<div>
<div class="hidden">
<input type="radio" :id="'value' + value.valueId" :name="'options[' + option.optionId + ']'" :value="value.valueId" x-model="selectedOptionValue[option.optionId]" @change="$el.style.visibility = 'visible'"
@change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form">
<label x-text="value.title" :for="'value' + value.valueId"></label>
</div>
<div class="relative capitalize cursor-pointer border border-container rounded p-2 min-w-[35px] text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg focus:visible" :class="{
'border-black ring-1 ring-black': selectedOptionValue[option.optionId] == value.valueId,
}" @click.debounce.50ms="() => {
document.getElementById('value' + value.valueId).click();
}">
<div x-text="value.title"></div>
<template x-if="value.discount">
<div class="font-bold text-xs leading-none p-1 bg-discount-tag text-discount-tag absolute -top-2 -right-2 border-l-2 rounded border-black border-opacity-20 shadow-md"> -<span
x-text="Math.round(value.discount)"></span>% </div>
</template>
</div>
</div>
</template>
</template>
<script>
function initTooltip() {
return {
isTouch: false,
show: false,
left: 0,
top: 0,
handleMouseMove(event) {
if (this.isTouch) {
this.isTouch = false;
return;
}
this.show = true;
this.left = event.clientX + 15;
this.top = event.clientY + 15;
},
handleMouseLeave(event) {
this.show = false;
},
handleTouchStart() {
this.isTouch = true;
}
}
}
</script>
<template x-if="option.renderType == 'multi_swatch'">
<div class="checkbox-group flex gap-3 flex-wrap" :class="{
'required': option.required,
}">
<template x-for="value in option.optionValues">
<div>
<input type="checkbox" :id="value.valueId" :class="value.baseImageUrl ? 'hidden peer' : ''" @change="$el.style.visibility = 'visible'" @change.debounce.50ms="onChangeField(option.optionId)" form="product_addtocart_form"
:name="'options[' + option.optionId + '][]'" x-model="selectedOptionValue[option.optionId]" :value="value.valueId">
<template x-if="!value.baseImageUrl">
<label :for="value.valueId" x-text="value.title"></label>
</template>
<template x-if="value.baseImageUrl">
<div>
<template x-if="value.tooltipImageUrl">
<label x-data="initTooltip()" :for="value.valueId" class="peer-checked:border-blue-600 focus:visible" @touchstart.debounce.50ms="handleTouchStart" @mousemove="handleMouseMove" @mouseleave="handleMouseLeave">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
<img class="fixed z-50 shadow-md shadow-black/50 rounded-md" x-show="show" :style="{
'left': `${left}px`,
'top': `${top}px`,
}" :src="value.tooltipImageUrl" :alt="value.title">
</label>
</template>
<template x-if="!value.tooltipImageUrl">
<label :for="value.valueId" class="peer-checked:border-blue-600">
<img class="cursor-pointer border border-container rounded p-1 box-content text-center shadow-md transition-all duration-300 hover:scale-110 hover:shadow-lg" :class="{
'border-black border-1 ring-1 ring-black': selectedOptionValue[option.optionId].includes(`${value.valueId}`),
}" :src="value.baseImageUrl" :alt="value.title" height="70" width="70">
</label>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</div>
</template>
</div>
</template>
</div>
</template>
</div>
</template>
<template x-if="discountTables.length !== 0">
<div>
<p class="font-bold mb-2">Kortingstabel <span x-text="discountTableName"></span></p>
<template x-for="table in discountTables">
<div>
<span x-text="table.title"></span>
<table class="border-collapse w-full text-center">
<tbody>
<tr>
<td class="border-black border-b p-2"><span class="font-bold">Stuks</span></td>
<template x-for="tier in table.tiers">
<td class="border-black border-b border-l p-2" :class="{
'bg-green-100': tier.active,
}">
<span x-text="tier.to ? tier.from + ' - ' + tier.to : tier.from + '+'"></span>
</td>
</template>
</tr>
<template x-if="table.anyDiscounted">
<tr>
<td class="p-2 pb-0"><span class="font-bold">Prijs</span></td>
<template x-for="tier in table.tiers">
<td class="border-black border-l p-2 pb-0" :class="{
'bg-green-100': tier.active,
}">
<span class="text-gray-500 p-2 line-through" x-text="hyva.formatPrice(tier.originalPrice)"></span>
</td>
</template>
</tr>
</template>
<tr>
<td class="p-2">
<template x-if="!table.anyDiscounted">
<span class="font-bold">Prijs</span>
</template>
</td>
<template x-for="tier in table.tiers">
<td class="border-black border-l p-2" :class="{
'bg-green-100': tier.active,
}">
<span x-text="hyva.formatPrice(tier.price)"></span>
</td>
</template>
</tr>
<tr>
<td></td>
<template x-for="tier in table.tiers">
<td>
<template x-if="tier.active">
<span class="-translate-y-2 inline-block rounded-full bg-green-500 text-white p-2 w-4 box-content leading-none" x-text="table.qty"></span>
</template>
</td>
</template>
</tr>
</tbody>
</table>
</div>
</template>
</div>
</template>
</div>
</form>
<form aria-label="Write A Review Form">
<div class="write-review-wrapper write-form">
<div class="write-review yotpo-regular-box" id="write-review-tabpanel-main-widget" role="tabpanel">
<div class="yotpo-header">
<div>
<h2 class="y-label yotpo-header-title">SCHRIJF EEN REVIEW</h2>
</div>
<div class="yotpo-mandatory-explain"> <span class="yotpo-mandatory-mark">*</span> Geeft een verplicht veld aan </div> <br> <span class="yotpo-mandatory-mark">* </span> <span class="y-label"
id="write-review-score-0797f3b7-5ac0-4b2e-84c9-7673d926a5ad">Score: <span class="form-input-error yotpo-hidden" id="yotpo_score_message_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></span></span>
<div aria-describedby="yotpo_score_message_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" aria-labelledby="write-review-score-0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" role="radiogroup" tabindex="-1"> <span class="stars-wrapper"> <span
class="yotpo-icon yotpo-icon-empty-star pull-left review-star" data-score="1" aria-label="score 1" role="radio" tabindex="0" aria-checked="false" aria-required="true"></span> <span
class="yotpo-icon yotpo-icon-empty-star pull-left review-star" data-score="2" aria-label="score 2" role="radio" tabindex="-1" aria-checked="false" aria-required="true"></span> <span
class="yotpo-icon yotpo-icon-empty-star pull-left review-star" data-score="3" aria-label="score 3" role="radio" tabindex="-1" aria-checked="false" aria-required="true"></span> <span
class="yotpo-icon yotpo-icon-empty-star pull-left review-star" data-score="4" aria-label="score 4" role="radio" tabindex="-1" aria-checked="false" aria-required="true"></span> <span
class="yotpo-icon yotpo-icon-empty-star pull-left review-star" data-score="5" aria-label="score 5" role="radio" tabindex="-1" aria-checked="false" aria-required="true"></span> </span> </div>
</div>
<div class="write-review-content">
<div class="form-group">
<div class="form-element"> <span class="yotpo-mandatory-mark">* </span> <label class="y-label" for="yotpo_input_review_title_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"> Titel: <span class="form-input-error yotpo-hidden"
id="yotpo_input_review_title_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></span> </label> <input id="yotpo_input_review_title_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" class="y-input" name="review_title" maxlength="150"
aria-required="true" placeholder="" aria-describedby="yotpo_input_review_title_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"> </div>
<div class="form-element"> <span class="yotpo-mandatory-mark">* </span> <label class="y-label" for="yotpo_input_review_content_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"> Beoordeling: <span class="form-input-error yotpo-hidden"
id="yotpo_input_review_content_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></span> </label> <textarea id="yotpo_input_review_content_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" class="y-input yotpo-text-box" name="review_content"
aria-required="true" placeholder="" aria-describedby="yotpo_input_review_content_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></textarea> </div>
</div>
</div>
<div class="yotpo-footer yotpo-animation-opacity visible" style="display: inherit;">
<div class="socialize-wrapper">
<div class="connected">U bent verbonden als <span class="username"></span></div>
<div class="socialize"> <span class="y-label">Verbinden met:</span>
<div>
<div class="yotpo-default-button yotpo-icon-btn" data-network="twitter" aria-label="connect with twitter" role="link" tabindex="0"><span class="yotpo-icon yotpo-icon-twitter pull-left"></span></div>
<div class="yotpo-default-button yotpo-icon-btn" data-network="facebook" aria-label="connect with facebook" role="link" tabindex="0"><span class="yotpo-icon yotpo-icon-facebook pull-left"></span></div>
</div>
</div>
<div class="yotpo-or"> -OF- </div>
</div>
<div class="connect-wrapper visible " style="display: inherit;">
<div class="form-element name-input visible" style="display: inherit;"> <span class="yotpo-mandatory-mark">* </span> <label class="y-label" for="yotpo_input_review_username_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad">Gebruik uw naam: <span
class="form-input-error yotpo-hidden" id="yotpo_input_review_username_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></span></label> <input id="yotpo_input_review_username_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" class="y-input"
autocomplete="nickname" name="display_name" maxlength="40" aria-required="true" placeholder="" aria-describedby="yotpo_input_review_username_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"> </div>
<div class="form-element email-input " style="display: none;"> <span class="yotpo-mandatory-mark">* </span> <label class="y-label" for="yotpo_input_review_email_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad">E-mail: <span
class="form-input-error yotpo-hidden" id="yotpo_input_review_email_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"></span></label> <input id="yotpo_input_review_email_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad" class="y-input"
autocomplete="email" name="email" aria-required="true" placeholder="" aria-describedby="yotpo_input_review_email_error_0797f3b7-5ac0-4b2e-84c9-7673d926a5ad"> </div>
<div class="yotpo-clr"></div>
</div>
</div>
<div class="error-box yotpo-hidden">
<div class="text-wrapper"> <span class="error-text empty yotpo-hidden">Titel en inhoud van de review kunnen niet leeg zijn</span>
<span class="error-text empty_question yotpo-hidden">Het veld van de vraag mag niet leeg zijn</span>
<span class="error-text score yotpo-hidden">Geef een beoordeling met sterren voor deze review</span>
<span class="error-text display_name_empty yotpo-hidden">Veldnaam mag niet leeg zijn</span>
<span class="error-text email yotpo-hidden">Ongeldige e-mail</span>
<span class="error-text user-already-reviewed yotpo-hidden">Uw review is al ingediend.</span>
<span class="error-text max_length yotpo-hidden">Maximumlengte is overschreden</span>
<span class="error-text mandatory_field yotpo-hidden">Vul alle verplichte velden (*) in</span>
<span class="error-text open_question_answer_length yotpo-hidden">Een of meer van uw antwoorden voldoen niet aan de vereiste criteria</span>
</div>
<div class="yotpo-icon-btn-small transparent-color-btn"><span class="yotpo-icon yotpo-icon-cross" role="button" tabindex="0" aria-label="close error message"></span></div>
</div>
<div class="form-element submit-button"> <span class="form-input-error yotpo-hidden"></span> <input type="button" class="yotpo-default-button primary-color-btn yotpo-submit" aria-disabled="true" data-button-type="submit" value="Plaatsen">
</div>
<div class="yotpo-preloader-wrapper">
<div class="yotpo yotpo-pre-loader">
<span class="yotpo-empty-stars">
<span class="yotpo-icon yotpo-icon-empty-star"></span>
<span class="yotpo-icon yotpo-icon-empty-star"></span>
<span class="yotpo-icon yotpo-icon-empty-star"></span>
<span class="yotpo-icon yotpo-icon-empty-star"></span>
<span class="yotpo-icon yotpo-icon-empty-star"></span>
</span>
<span class="yotpo-full-stars">
<span class="yotpo-icon yotpo-icon-star"></span>
<span class="yotpo-icon yotpo-icon-star"></span>
<span class="yotpo-icon yotpo-icon-star"></span>
<span class="yotpo-icon yotpo-icon-star"></span>
<span class="yotpo-icon yotpo-icon-star"></span>
</span>
</div>
</div>
<div class="yotpo-clr"></div>
</div>
</div>
</form>
<form aria-label="Ask A Question Form">
<div class="write-question-wrapper write-form">
<div class="write-review yotpo-regular-box" id="write-question-tabpanel" role="tabpanel">
<div>
<h2 class="y-label yotpo-header-title">STEL EEN VRAAG</h2>
</div>
<div class="yotpo-mandatory-explain"> <span class="yotpo-mandatory-mark">* </span> Geeft een verplicht veld aan </div> <br>
<div class="write-question-content">
<div class="form-group">
<div class="form-element"> <label class="y-label" for="yotpo_input_question_content"><span class="yotpo-mandatory-mark">* </span>Vraag: <span class="form-input-error yotpo-hidden"></span></label> <textarea id="yotpo_input_question_content"
class="y-input yotpo-text-box" name="review_content" maxlength="1000" aria-required="true" placeholder=""></textarea> </div>
</div>
</div>
<div class="error-box yotpo-hidden">
<div class="text-wrapper"> <span class="error-text empty yotpo-hidden">Titel en inhoud van de review kunnen niet leeg zijn</span>
<span class="error-text empty_question yotpo-hidden">Het veld van de vraag mag niet leeg zijn</span>
<span class="error-text score yotpo-hidden">Geef een beoordeling met sterren voor deze review</span>
<span class="error-text display_name_empty yotpo-hidden">Veldnaam mag niet leeg zijn</span>
<span class="error-text email yotpo-hidden">Ongeldige e-mail</span>
<span class="error-text user-already-reviewed yotpo-hidden">Uw review is al ingediend.</span>
<span class="error-text max_length yotpo-hidden">Maximumlengte is overschreden</span>
<span class="error-text mandatory_field yotpo-hidden">Vul alle verplichte velden (*) in</span>
<span class="error-text open_question_answer_length yotpo-hidden">Een of meer van uw antwoorden voldoen niet aan de vereiste criteria</span>
</div>
<div class="yotpo-icon-btn-small transparent-color-btn"><span class="yotpo-icon yotpo-icon-cross"></span></div>
</div>
<div class="yotpo-footer yotpo-animation-opacity visible" style="display: inherit;">
<div class="connect-wrapper">
<div class="form-element name-input"> <label class="y-label" for="yotpo_input_question_username"><span class="yotpo-mandatory-mark">* </span>Gebruik uw naam: <span class="form-input-error yotpo-hidden"></span></label> <input
id="yotpo_input_question_username" class="y-input" autocomplete="nickname" name="display_name" maxlength="40" aria-required="true" placeholder=""> </div>
<div class="form-element email-input visible" style="display: inherit;"> <label class="y-label" for="yotpo_input_question_email"><span class="yotpo-mandatory-mark">* </span>E-mail: <span class="form-input-error yotpo-hidden"></span></label>
<input id="yotpo_input_question_email" class="y-input" autocomplete="email" name="email" aria-required="true" placeholder=""> </div>
<div class="yotpo-clr"></div>
</div>
</div>
<div class="form-element submit-button"> <span class="form-input-error yotpo-hidden"></span> <input type="button" class="yotpo-default-button primary-color-btn yotpo-submit" aria-disabled="true" data-button-type="submit" value="Plaatsen">
</div>
<div class="yotpo-clr"></div>
</div>
</div>
</form>
POST
<form method="post" x-ref="formRef" :action="formAction" @submit.prevent="submit" action="">
<template x-if="productData">
<div>
<img :src="productData.image[0]" :srcset="productData.image[1]" class="object-contain w-full" height="250px" width="250px">
<p class="font-bold mb-4" x-text="productData.name"></p>
<template x-for="attributeId in Object.keys(productData.configurableAttributes)">
<div class="mb-2">
<div class="font-bold" x-text="productData.configurableAttributes[attributeId].label"></div>
<div x-cloak="" x-transition="" x-show="showErrors && !selectedValues[attributeId]" class="bold bg-error-message text-error-message border border-error-message rounded py-1 px-2 my-1">Dit is een verplicht veld.</div>
<select @change="handleOptionChange" :id="attributeId" :name="`super_attribute[${attributeId}]`" class="w-full border-container rounded">
<option value="" x-text="'Kies je ' + productData.configurableAttributes[attributeId].label.toLowerCase()"></option>
<template x-for="option in productData.configurableAttributes[attributeId].options">
<option :value="option.id" x-text="option.label"></option>
</template>
</select>
</div>
</template>
</div>
</template>
<input class="hidden" name="product" :value="product">
<input class="hidden" name="qty" :value="1">
<input class="hidden" name="form_key" :value="formKey">
<button class="mt-4 btn btn-cta w-full justify-center">In winkelmandje</button>
</form>
Name: sub_mc_form — POST https://interface.mailcampaigns.nl/interface/contactform.php?ref=p3IvoJy0Mz9loI8kAGHmKmR1AGp=
<form action="https://interface.mailcampaigns.nl/interface/contactform.php?ref=p3IvoJy0Mz9loI8kAGHmKmR1AGp=" method="post" id="sub_mc_form" enctype="multipart/form-data" name="sub_mc_form" target="_blank" class="block my-8">
<p class="md:text-justify mb-4 md:w-min">
<span class="text-xl font-title md:whitespace-nowrap"> Sluit je nu aan bij de Proforto-familie </span>
<br>
<br>
<span> Als Proforto-lid geniet je van exclusieve voordelen en houden we je up-to-date met de nieuwste trends in werkkleding en veiligheidsuitrusting. </span>
</p>
<div class="w-fit">
<p class="font-bold mb-4"> Schrijf je in voor onze nieuwsbrief en ontvang direct 5% korting<br class="hidden md:block"> op je volgende bestelling. </p>
<input type="text" class="form-input w-full mb-4" name="field_names[ODcwNDQ=][]" id="ODcwNDQ" data-validation="email" placeholder="je@mailadres.nl" required="">
<input type="submit" class="btn btn-primary cursor-pointer" value="Inschrijven" name="subscribe_newsletter" id="mc-embedded-subscribe">
</div>
</form>
Text Content
Hoe wil je winkelen? Op deze website worden de prijzen excl. of incl. BTW getoond en worden er cookies geplaatst. Klik hier als je deze wilt weigeren. Prijzen excl. BTW Zakelijk Prijzen incl. BTW Particulier Accepteer alles Hoe wil je winkelen? Op deze website worden de prijzen excl. of incl. BTW getoond en worden er cookies geplaatst. Klik hier als je deze wilt weigeren. Prijzen excl. BTW Zakelijk Prijzen incl. BTW Particulier Accepteer alles JavaScript lijkt te zijn uitgeschakeld in uw browser. Voor de beste gebruikerservaring, zorg ervoor dat javascript ingeschakeld is voor uw browser. Ga naar de inhoud * Gratis verzending vanaf €75,-€90,75 Gratis verzending vanaf €75,-€90,75 Bij bestellingen vanaf €75,-€90,75 profiteer je altijd van gratis verzending. Bij bestellingen onder de €75,-€90,75 betaal je €5,95€7,19 verzendkosten. * Gratis retourneren Gratis retourneren Terugsturen is bij ons gratis en werkt heel simpel. Je kunt jouw bestelling gratis retourneren binnen 100 dagen. * Grootste assortiment Grootste assortiment Proforto is met 100+ merken de grootste leverancier van werkkleding en werkschoenen. * Snelle levering Snelle levering Bij Proforto doen we er alles aan om jouw bestelling zo snel mogelijk af te leveren. Voor onze populaire producten geldt: vóór 23u besteld, de volgende werkdag in huis!* * voor 23u besteld, morgen in huis geldt alleen op werkdagen * Achteraf betalen Achteraf betalen Bij Proforto is het mogelijk om achteraf te betalen. Hiervoor werken wij samen met onze betaalpartner Billink. Tijdens het afrekenproces kies je voor de betaalmethode 'Achteraf betalen'. * 9.6/10 "Fantastisch!" Menu Sluiten Werkkleding chevron-right chevron-left Werkkleding Alle artikelen in Werkkleding Lente & Zomerkleding chevron-right chevron-left Lente & Zomerkleding Alle artikelen in Lente & Zomerkleding Softshell Werkjassen Bodywarmers Korte Werkbroeken Verkoelende/bamboe Shirts en Polo's Coolmax Sokken Petten Verkoelende Artikelen Zomer Werkschoenen Werkbroeken chevron-right chevron-left Werkbroeken Alle artikelen in Werkbroeken Lange Werkbroeken Korte Werkbroeken Driekwart Werkbroeken Stretch Werkbroeken Jeans Werkbroeken Pantalons Regenbroeken Thermobroeken Werkjassen chevron-right chevron-left Werkjassen Alle artikelen in Werkjassen Werkjacks Softshell Jassen Winterjassen Doorwerkjassen Pilotenjassen Fleece Jassen Stofjassen Regenjassen Werktruien chevron-right chevron-left Werktruien Alle artikelen in Werktruien Sweaters Hoodies Fleece Truien Werkvesten chevron-right chevron-left Werkvesten Alle artikelen in Werkvesten Vesten Fleece Vesten Bodywarmers Werkshirts chevron-right chevron-left Werkshirts Alle artikelen in Werkshirts T-shirts Longsleeves Overhemden Blouses Thermoshirts Werkpolo's chevron-right chevron-left Werkpolo's Alle artikelen in Werkpolo's Poloshirts Polosweaters Werkoveralls chevron-right chevron-left Werkoveralls Alle artikelen in Werkoveralls Overalls Amerikaanse Overalls Bodybroeken Winteroveralls Kinderoveralls Accessoires voor Professionals chevron-right chevron-left Accessoires voor Professionals Alle artikelen in Accessoires voor Professionals Gereedschapsgordel Holsterzakken Spijkerschort Werkriemen Gereedschapstas Gereedschapskoffer Kniebeschermers Toebehoren Overige kleding chevron-right chevron-left Overige kleding Alle artikelen in Overige kleding Petten Werkmutsen Onderbroeken Riemen Werksokken Regenkleding Thermokleding Advies over werkkleding Werkschoenen chevron-right chevron-left Werkschoenen Alle artikelen in Werkschoenen Veiligheidsschoenen chevron-right chevron-left Veiligheidsschoenen Alle artikelen in Veiligheidsschoenen Werkschoenen Heren Werkschoenen Dames Werkschoenen S3 Werkschoenen S2 Werkschoenen S1P Werkschoenen S1 Werkschoenen Onbeveiligd Werkschoenen Sneakers Werkschoenen Sportief Werkschoenen Stalen Neus Werklaarzen chevron-right chevron-left Werklaarzen Alle artikelen in Werklaarzen Werklaarzen Heren Werklaarzen Dames Werklaarzen S3 Werklaarzen S4 Werklaarzen S5 Werklaarzen Onbeveiligd Werklaarzen Gevoerd Klompen chevron-right chevron-left Klompen Alle artikelen in Klompen Medische klompen Zweedse klompen Tuinklompen Werkklompen Accessoires chevron-right chevron-left Accessoires Alle artikelen in Accessoires Werksokken Inlegzolen Veters Onderhoudsmiddelen Overschoenen Advies over werkschoenen Keuzehulp Persoonlijke bescherming chevron-right chevron-left Persoonlijke bescherming Alle artikelen in Persoonlijke bescherming Werkhandschoenen chevron-right chevron-left Werkhandschoenen Alle artikelen in Werkhandschoenen Allround Werkhandschoenen Wegwerphandschoenen (Latex & Nitril) Warme Werkhandschoenen Waterdichte Werkhandschoenen Tuinhandschoenen Lashandschoenen Chemisch Bestendige Handschoenen Leren Werkhandschoenen Nitril Handschoenen Latex Handschoenen Oog & Gelaatsbescherming chevron-right chevron-left Oog & Gelaatsbescherming Alle artikelen in Oog & Gelaatsbescherming Veiligheidsbrillen Lasbrillen Gelaatsschermen Lashelmen Lasschilden Gehoorbescherming chevron-right chevron-left Gehoorbescherming Alle artikelen in Gehoorbescherming Vormbare Oordoppen Gehoorbeugels Voorgevormde Oordoppen Gehoorkappen Hoofdbescherming chevron-right chevron-left Hoofdbescherming Alle artikelen in Hoofdbescherming Veiligheidshelmen Stootpetten Wegwerpkleding en PBM chevron-right chevron-left Wegwerpkleding en PBM Alle artikelen in Wegwerpkleding en PBM Wegwerphandschoenen Overschoenen Wegwerpoveralls Haarnetjes Baardnetjes Overige Wegwerpkleding Ademhalingsbescherming chevron-right chevron-left Ademhalingsbescherming Alle artikelen in Ademhalingsbescherming Stofmaskers Halfgelaatsmaskers Volgelaatsmaskers Filters Mondkapjes Reflecterende Kleding chevron-right chevron-left Reflecterende Kleding Alle artikelen in Reflecterende Kleding Reflecterende Poloshirts Reflecterende Overalls Reflecterende Werkbroeken Reflecterende Hesjes Reflecterende Shirts Reflecterende Jassen Reflecterende Truien Reflecterende Vesten Brandvertragende Kleding chevron-right chevron-left Brandvertragende Kleding Alle artikelen in Brandvertragende Kleding Brandvertragende Overalls Brandvertragende Werkbroeken Brandvertragende Jassen Brandvertragende Shirts Brandvertragende Overhemden EHBO chevron-right chevron-left EHBO Alle artikelen in EHBO EHBO Koffers Oogspoelflessen Valbeveiliging chevron-right chevron-left Valbeveiliging Alle artikelen in Valbeveiliging Complete sets valbeveiliging Harnassen Vanglijnen Valstopapparaten Veiligheidshaken Ankerpunten Toebehoren en Accessoires Zaagkleding chevron-right chevron-left Zaagkleding Alle artikelen in Zaagkleding Zaagbroeken Zaaghelmen Zaaglaarzen Zaaghandschoenen Zaagjassen Zaagoveralls Overige zaagbescherming Branches chevron-right chevron-left Branches Alle artikelen in Branches Zorg en Beauty chevron-right chevron-left Zorg en Beauty Alle artikelen in Zorg en Beauty Algemene zorg chevron-right chevron-left Algemene zorg Alle artikelen in Algemene zorg Medische Klompen Zorgpolo's Zorgshirts Zorgbroeken Zorgjassen Medische schoenen Zorgtunieken Laborant chevron-right chevron-left Laborant Alle artikelen in Laborant Veiligheidsbrillen laboratorium Labjassen Wegwerphandschoenen laboratorium Overschoenen laboratorium Haar- en baardnetjes EHBO en BHV chevron-right chevron-left EHBO en BHV Alle artikelen in EHBO en BHV EHBO Kleding EHBO broeken EHBO Jassen BHV hesjes Veiligheidsschoenen EHBO en BHV Verpleegkundige chevron-right chevron-left Verpleegkundige Alle artikelen in Verpleegkundige Verpleegkundige klompen Verpleegkundige schoenen Zorgjassen verpleegkundige Zorgbroeken verpleegkundige Shirts en polo's verpleegkundige Zorgtunieken verpleegkundige Schoonheidsspecialist chevron-right chevron-left Schoonheidsspecialist Alle artikelen in Schoonheidsspecialist Tunieken schoonheidsspecialist Jassen Schoonheidsspecialist Shirts en polo's schoonheidsspecialist Broeken Schoonheidsspecialist Werkschoenen schoonheidsspecialist Zorgmedewerker chevron-right chevron-left Zorgmedewerker Alle artikelen in Zorgmedewerker Zorgjassen zorgmedewerker Zorgbroeken zorgmedewerker Zorgtunieken zorgmedewerker Shirts en polo's zorgmedewerker Medische klompen Zorgschoenen Dokter chevron-right chevron-left Dokter Alle artikelen in Dokter Doktersjassen Medische klompen Shirts en polo's dokter Zorgbroeken dokter Zorgjassen dokter Zorgschoenen Zorgtunieken dokter Tandarts chevron-right chevron-left Tandarts Alle artikelen in Tandarts Tandartsjassen Medische klompen Shirts en polo's tandarts Tandartsbroeken Apothekers chevron-right chevron-left Apothekers Alle artikelen in Apothekers Apothekersjas Medische klompen Shirts en polo's apothekers Apothekersbroek Bouw en Infra chevron-right chevron-left Bouw en Infra Alle artikelen in Bouw en Infra Schilders en stukadoors chevron-right chevron-left Schilders en stukadoors Alle artikelen in Schilders en stukadoors Schilders en stukadoors overalls Schildersjassen Schilders en stukadoors truien en vesten Schilders en stukadoors shirts en polo's Schildersbroeken Stukadoors Schoenen Elektricien chevron-right chevron-left Elektricien Alle artikelen in Elektricien Werkhandschoenen elektricien Werkoveralls elektricien Werkjassen elektricien Werktruien en vesten elektricien Werkshirts en polo's elektricien Werkbroeken elektricien Werkschoenen elektricien Stratenmaker chevron-right chevron-left Stratenmaker Alle artikelen in Stratenmaker Kniebeschermers stratenmaker Werkhandschoenen stratenmaker Werkoveralls stratenmaker Werkjassen stratenmaker Werktruien en vesten stratenmaker Werkshirts en polo's stratenmaker Werkbroeken stratenmaker Werkschoenen stratenmaker Lasser chevron-right chevron-left Lasser Alle artikelen in Lasser Lasjassen Lasoveralls Lasbroeken Lashelmen Lasschoenen Lasbrillen Asbestsanering chevron-right chevron-left Asbestsanering Alle artikelen in Asbestsanering Wegwerpoveralls asbestsaneerder Werkhandschoenen asbestsaneerder Adembescherming asbestsaneerder Schoenovertrekken asbestsaneerder Dakdekker chevron-right chevron-left Dakdekker Alle artikelen in Dakdekker Werkjassen dakdekker Werktruien en vesten dakdekker Werkshirts en polo's dakdekker Werkbroeken dakdekker Werkschoenen dakdekker Timmerman chevron-right chevron-left Timmerman Alle artikelen in Timmerman Werkoveralls timmerman Werkjassen timmerman Werktruien en vesten timmerman Werkshirts en polo's timmerman Werkbroeken timmerman Werkschoenen timmerman Allround infra chevron-right chevron-left Allround infra Alle artikelen in Allround infra Veiligheidshelmen allround infra medewerker Werkoveralls allround infra medewerker Werkjassen allround infra medewerker Werkvesten en hesjes allround infra medewerker Werkshirts en polo's allround infra medewerker Werkbroeken allround infra medewerker Werkschoenen allround infra medewerker Sloopwerkzaamheden / Heavy Duty chevron-right chevron-left Sloopwerkzaamheden / Heavy Duty Alle artikelen in Sloopwerkzaamheden / Heavy Duty Veiligheidshelmen sloopwerkzaamheden Werkhandschoenen sloopwerkzaamheden Werkoveralls sloopwerkzaamheden Werkjassen sloopwerkzaamheden Werktruien en vesten sloopwerkzaamheden Werkshirts en polo's sloopwerkzaamheden Werkbroeken sloopwerkzaamheden Werkschoenen en laarzen sloopwerkzaamheden Hovenier chevron-right chevron-left Hovenier Alle artikelen in Hovenier Jassen hovenier Werkbroeken hovenier Werkschoenen hovenier Werklaarzen hovenier Shirts en polo's hovenier Werkvesten en truien hovenier Werkhandschoenen hovenier Zaagkleding hovenier Horeca en Hospitality chevron-right chevron-left Horeca en Hospitality Alle artikelen in Horeca en Hospitality Bedieningsmedewerker / Ober chevron-right chevron-left Bedieningsmedewerker / Ober Alle artikelen in Bedieningsmedewerker / Ober Overhemden en blouses bedieningsmedewerker Horeca Schorten Pantalons bedieningsmedewerker Horecaschoenen Kokskleding chevron-right chevron-left Kokskleding Alle artikelen in Kokskleding Hoofddeksels horeca Koksbuizen Horeca Sloven Koksbroeken Werkschoenen kok Afwashulp chevron-right chevron-left Afwashulp Alle artikelen in Afwashulp Werkshirts afwashulp Schorten afwashulp Broeken afwashulp Werkschoenen afwashulp Keukenhulp chevron-right chevron-left Keukenhulp Alle artikelen in Keukenhulp Hoofdbekleding keukenhulp Sloven en schorten keukenhulp Koksbuizen en koksjassen Koksbroeken Werkschoenen keukenhulp Front office chevron-right chevron-left Front office Alle artikelen in Front office Colberts en gilets front office Overhemden en blouses front office Werkbroeken, pantalons en rokken front office Werkschoenen front office Schoonmaakkleding chevron-right chevron-left Schoonmaakkleding Alle artikelen in Schoonmaakkleding Schoonmaakjassen Schoonmaakbroeken Overgooiers Instappers en werkschoenen Hospitality manager chevron-right chevron-left Hospitality manager Alle artikelen in Hospitality manager Colberts en gilets hospitality manager Overhemden en blouses hospitality manager Werkbroeken, pantalons en rokken hospitality manager Werkschoenen hospitality manager Logistiek en Transport chevron-right chevron-left Logistiek en Transport Alle artikelen in Logistiek en Transport Logistiek medewerker chevron-right chevron-left Logistiek medewerker Alle artikelen in Logistiek medewerker Magazijn schoenen Werkbroeken logistiek Werkshirts en polo's logistiek Werkjassen logistiek Werkvesten en truien logistiek Verkeersregelaar chevron-right chevron-left Verkeersregelaar Alle artikelen in Verkeersregelaar Verkeersregelaars kleding Verkeersregelaars jassen Verkeersregelaars broeken Reflecterende hesjes Veiligheidsschoenen verkeersregelaar Chauffeur chevron-right chevron-left Chauffeur Alle artikelen in Chauffeur Chauffeurs klompen Werkshirts en polo's chauffeur Werkjassen chauffeur Werkvesten en truien chauffeur Chauffeurs broeken Koerier chevron-right chevron-left Koerier Alle artikelen in Koerier Regenkleding koerier Werkshirts en polo's koerier Werkvesten en truien koerier Werkbroeken koerier Veiligheidsschoenen koerier Werkjassen koerier Persoonsvervoer chevron-right chevron-left Persoonsvervoer Alle artikelen in Persoonsvervoer Colberts en gilets persoonsvervoer Overhemden en blouses persoonsvervoer Pantalons persoonsvervoer Werkschoenen persoonsvervoer Agri en Natuur chevron-right chevron-left Agri en Natuur Alle artikelen in Agri en Natuur Hovenier chevron-right chevron-left Hovenier Alle artikelen in Hovenier Jassen hovenier Werkbroeken hovenier Werkschoenen hovenier Werklaarzen hovenier Shirts en polo's hovenier Werkvesten en truien hovenier Werkhandschoenen hovenier Zaagkleding hovenier Visserij chevron-right chevron-left Visserij Alle artikelen in Visserij Regen Overall / Waadpak visserij Waadbroek visserij Werklaarzen visserij Boerenkleding chevron-right chevron-left Boerenkleding Alle artikelen in Boerenkleding Boerenoveralls Boerenbroeken Werklaarzen boer Boerenjassen Boomverzorging chevron-right chevron-left Boomverzorging Alle artikelen in Boomverzorging Zaaghelmen Zaagoveralls Zaagjassen Zaagbroeken Zaaghandschoenen Facilitair en Beveiliging chevron-right chevron-left Facilitair en Beveiliging Alle artikelen in Facilitair en Beveiliging Beveiligingskleding chevron-right chevron-left Beveiligingskleding Alle artikelen in Beveiligingskleding Beveiligingsjassen Commandotruien Beveiligingsschoenen Beveiligingsbroeken Facilitaire dienstverlening chevron-right chevron-left Facilitaire dienstverlening Alle artikelen in Facilitaire dienstverlening Colberts en gilets facilitaire dienstverlening Overhemden en blouses facilitaire dienstverlening Pantalons facilitaire dienstverlening Werkschoenen facilitaire dienstverlening Wasserette chevron-right chevron-left Wasserette Alle artikelen in Wasserette Wegwerpoveralls wasserette Wegwerphandschoenen wasserette Promotiemedewerker chevron-right chevron-left Promotiemedewerker Alle artikelen in Promotiemedewerker Werkshirts en polo's promotiemedewerker Werktruien en vesten promotiemedewerker Werkjassen promotiemedewerker Werkbroeken promotiemedewerker Werkschoenen promotiemedewerker Afvalverwerking chevron-right chevron-left Afvalverwerking Alle artikelen in Afvalverwerking Veiligheidshelmen afvalverwerking Werkhandschoenen afvalverwerking Werkoveralls afvalverwerking Werkjassen afvalverwerking Werkvesten en hesjes afvalverwerking Werkshirts en polo's afvalverwerking Werkbroeken afvalverwerking Werkschoenen afvalverwerking Industrie en Techniek chevron-right chevron-left Industrie en Techniek Alle artikelen in Industrie en Techniek Monteurskleding chevron-right chevron-left Monteurskleding Alle artikelen in Monteurskleding Werkoveralls automonteur Werkjassen automonteur Werktruien en vesten automonteur Werkshirts en polo's automonteur Werkbroeken automonteur Werkschoenen automonteur Mechanisch chevron-right chevron-left Mechanisch Alle artikelen in Mechanisch Werkoveralls mechanisch Werkjassen mechanisch Werktruien en vesten mechanisch Werkshirts en polo's mechanisch Werkbroeken mechanisch Werkschoenen mechanisch Food industrie kleding chevron-right chevron-left Food industrie kleding Alle artikelen in Food industrie kleding Foodoveralls Foodjassen Foodshirts en polo's Foodbroeken Food werkschoenen en klompen Metaalbewerker chevron-right chevron-left Metaalbewerker Alle artikelen in Metaalbewerker Werkoveralls metaalbewerker Werkjassen metaalbewerker Werktruien en vesten metaalbewerker Werkshirts en polo's metaalbewerker Werkbroeken metaalbewerker Werkschoenen metaalbewerker Verfspuiterij chevron-right chevron-left Verfspuiterij Alle artikelen in Verfspuiterij Ademhalingsbescherming verfspuiterij Veiligheidsbrillen verfspuiterij Wegwerpoveralls verfspuiterij Werkschoenen verfspuiterij Representatief chevron-right chevron-left Representatief Alle artikelen in Representatief Algemeen Representatief chevron-right chevron-left Algemeen Representatief Alle artikelen in Algemeen Representatief Colberts en gilets algemeen representatief Overhemden en blouses algemeen representatief Werkbroeken, pantalons en rokken algemeen representatief Werkschoenen representatief Kantoormedewerker chevron-right chevron-left Kantoormedewerker Alle artikelen in Kantoormedewerker Colberts en gilets kantoormedewerker Overhemden en blouses kantoormedewerker Werkbroeken, pantalons en rokken kantoormedewerker Werkschoenen kantoormedewerker Front office chevron-right chevron-left Front office Alle artikelen in Front office Colberts en gilets front office Overhemden en blouses front office Werkbroeken, pantalons en rokken front office Werkschoenen front office Hospitality Manager chevron-right chevron-left Hospitality Manager Alle artikelen in Hospitality Manager Colberts en gilets hospitality manager Overhemden en blouses hospitality manager Werkbroeken, pantalons en rokken hospitality manager Werkschoenen hospitality manager Secretaresse chevron-right chevron-left Secretaresse Alle artikelen in Secretaresse Blazers secretaresse Blouses secretaresse Werkbroeken, pantalons en rokken secretaresse Werkschoenen secretaresse Merken Bedrukken chevron-right chevron-left Bedrukken Alle artikelen in Bedrukken Bedrukken chevron-right chevron-left Bedrukken Alle artikelen in Bedrukken Werkjassen Bedrukken Werktruien Bedrukken Werkvesten Bedrukken Werkbroeken Bedrukken Werkshirts Bedrukken Werkpolo's Bedrukken Werkoveralls Bedrukken Borduren chevron-right chevron-left Borduren Alle artikelen in Borduren Werkjassen Borduren Werktruien Borduren Werkvesten Borduren Werkbroeken Borduren Werkshirts Borduren Werkpolo's Borduren Werkoveralls Borduren Sale chevron-right chevron-left Sale Alle artikelen in Sale Werkkleding Werkschoenen Persoonlijke beschermingsmiddelen Complete outfits Mijn favorieten Zakelijk+ Klantenservice Toon prijzen inclusief BTW Klantenservice Inloggen Winkelwagen 10 of 0 products in cart displayed Winkelwagen is leeg Winkelwagen is leeg x excl. BTW incl. BTW , Levering x x Subtotaal excl. BTW: Subtotaal incl. BTW: Bekijk alles Doorgaan naar kassa loader Bezig met laden... Close panel Reken af met uw account E-mailadres Wachtwoord Inloggen Wachtwoord vergeten? Afrekenen als een nieuwe klant Het aanmaken van een account heeft vele voordelen: * Bekijk bestelling en verzendstatus * Bekijk bestelgeschiedenis * Reken sneller af Account aanmaken * Werkkleding Show submenu for Werkkleding category Lente & Zomerkleding * Softshell Werkjassen * Bodywarmers * Korte Werkbroeken * Verkoelende/bamboe Shirts en Polo's * Coolmax Sokken * Petten * Verkoelende Artikelen * Zomer Werkschoenen Werkbroeken * Lange Werkbroeken * Korte Werkbroeken * Driekwart Werkbroeken * Stretch Werkbroeken * Jeans Werkbroeken * Pantalons * Regenbroeken * Thermobroeken Werkjassen * Werkjacks * Softshell Jassen * Winterjassen * Doorwerkjassen * Pilotenjassen * Fleece Jassen * Stofjassen * Regenjassen Werktruien * Sweaters * Hoodies * Fleece Truien Werkvesten * Vesten * Fleece Vesten * Bodywarmers Werkshirts * T-shirts * Longsleeves * Overhemden * Blouses * Thermoshirts Werkpolo's * Poloshirts * Polosweaters Werkoveralls * Overalls * Amerikaanse Overalls * Bodybroeken * Winteroveralls * Kinderoveralls Accessoires voor Professionals * Gereedschapsgordel * Holsterzakken * Spijkerschort * Werkriemen * Gereedschapstas * Gereedschapskoffer * Kniebeschermers * Toebehoren Overige kleding * Petten * Werkmutsen * Onderbroeken * Riemen * Werksokken * Regenkleding * Thermokleding Topmerken: Tricorp Snickers Bläkläder Carhartt Santino Fristads Hydrowear Dassy HAVEP De Berkel Topproducten: Tricorp TWC2000 werkbroek Clique Basic T-shirt Gildan Hooded Sweater Tricorp TP2000 Polo HAVEP Werkbroek 8597 Advies over werkkleding * Werkschoenen Show submenu for Werkschoenen category Veiligheidsschoenen * Werkschoenen Heren * Werkschoenen Dames * Werkschoenen S3 * Werkschoenen S2 * Werkschoenen S1P * Werkschoenen S1 * Werkschoenen Onbeveiligd * Werkschoenen Sneakers * Werkschoenen Sportief * Werkschoenen Stalen Neus Werklaarzen * Werklaarzen Heren * Werklaarzen Dames * Werklaarzen S3 * Werklaarzen S4 * Werklaarzen S5 * Werklaarzen Onbeveiligd * Werklaarzen Gevoerd Klompen * Medische klompen * Zweedse klompen * Tuinklompen * Werkklompen Accessoires * Werksokken * Inlegzolen * Veters * Onderhoudsmiddelen * Overschoenen Topmerken: EMMA Redbrick Gerba Grisport Bata Buckbootz Atlas Puma Dunlop Solid Gear Topproducten: Grisport 803 S3 Redbrick ICE S3 Safety Jogger Bestrun S3 Emma Venus S2 Redbrick Onyx S3 Advies over werkschoenen Keuzehulp * Persoonlijke bescherming Show submenu for Persoonlijke bescherming category Werkhandschoenen * Allround Werkhandschoenen * Wegwerphandschoenen (Latex & Nitril) * Warme Werkhandschoenen * Waterdichte Werkhandschoenen * Tuinhandschoenen * Lashandschoenen * Chemisch Bestendige Handschoenen * Leren Werkhandschoenen * Nitril Handschoenen * Latex Handschoenen Oog & Gelaatsbescherming * Veiligheidsbrillen * Lasbrillen * Gelaatsschermen * Lashelmen * Lasschilden Gehoorbescherming * Vormbare Oordoppen * Gehoorbeugels * Voorgevormde Oordoppen * Gehoorkappen Hoofdbescherming * Veiligheidshelmen * Stootpetten Wegwerpkleding en PBM * Wegwerphandschoenen * Overschoenen * Wegwerpoveralls * Haarnetjes * Baardnetjes * Overige Wegwerpkleding Ademhalingsbescherming * Stofmaskers * Halfgelaatsmaskers * Volgelaatsmaskers * Filters * Mondkapjes Reflecterende Kleding * Reflecterende Poloshirts * Reflecterende Overalls * Reflecterende Werkbroeken * Reflecterende Hesjes * Reflecterende Shirts * Reflecterende Jassen * Reflecterende Truien * Reflecterende Vesten Brandvertragende Kleding * Brandvertragende Overalls * Brandvertragende Werkbroeken * Brandvertragende Jassen * Brandvertragende Shirts * Brandvertragende Overhemden EHBO * EHBO Koffers * Oogspoelflessen Valbeveiliging * Complete sets valbeveiliging * Harnassen * Vanglijnen * Valstopapparaten * Veiligheidshaken * Ankerpunten * Toebehoren en Accessoires Zaagkleding * Zaagbroeken * Zaaghelmen * Zaaglaarzen * Zaaghandschoenen * Zaagjassen * Zaagoveralls * Overige zaagbescherming * Branches Show submenu for Branches category Zorg en Beauty * Algemene zorg * Laborant * EHBO en BHV * Verpleegkundige * Schoonheidsspecialist * Zorgmedewerker * Dokter * Tandarts * Apothekers Bouw en Infra * Schilders en stukadoors * Elektricien * Stratenmaker * Lasser * Asbestsanering * Dakdekker * Timmerman * Allround infra * Sloopwerkzaamheden / Heavy Duty * Hovenier Horeca en Hospitality * Bedieningsmedewerker / Ober * Kokskleding * Afwashulp * Keukenhulp * Front office * Schoonmaakkleding * Hospitality manager Logistiek en Transport * Logistiek medewerker * Verkeersregelaar * Chauffeur * Koerier * Persoonsvervoer Agri en Natuur * Hovenier * Visserij * Boerenkleding * Boomverzorging Facilitair en Beveiliging * Beveiligingskleding * Facilitaire dienstverlening * Wasserette * Promotiemedewerker * Afvalverwerking Industrie en Techniek * Monteurskleding * Mechanisch * Food industrie kleding * Metaalbewerker * Verfspuiterij Representatief * Algemeen Representatief * Kantoormedewerker * Front office * Hospitality Manager * Secretaresse * Merken * Bedrukken Show submenu for Bedrukken category Bedrukken * Werkjassen Bedrukken * Werktruien Bedrukken * Werkvesten Bedrukken * Werkbroeken Bedrukken * Werkshirts Bedrukken * Werkpolo's Bedrukken * Werkoveralls Bedrukken Borduren * Werkjassen Borduren * Werktruien Borduren * Werkvesten Borduren * Werkbroeken Borduren * Werkshirts Borduren * Werkpolo's Borduren * Werkoveralls Borduren * Sale Show submenu for Sale category Werkkleding Werkschoenen Persoonlijke beschermingsmiddelen * Complete outfits Zakelijk+ Excl. BTW Incl. BTW Sale tot 25% korting Voorwaarden 25% korting op sale De korting is automatisch verrekent op de prijs. Shop sale 1. Proforto.nl Homepage Homepage – 2. → Werkkleding Werkkleding 3. → Werkjassen Werkjassen 4. → Softshell Jassen Softshell Jassen + 5. → Jobman 1201 Softshell Jacket Jobman 1201 Softshell Jacket Terug naar zoekresultaten JOBMAN 1201 SOFTSHELL JACKET 10/10 (3 reviews) - "Fantastisch!" Merk: Jobman Alles van Jobman -10% Zoom 2 / 31 | Video Zoom chevron-left View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image View larger image chevron-right PRODUCTOMSCHRIJVING Een winddicht en waterafstotend jack van drielaagse softshell gevoerd met fleece. De jas is voorzien van 2 steekzakken met rits, een borstzak met rits en een binnenzak. Verder is de jas professioneel afgewerkt met duimgaten, YKK rits aan de voorzijde en is verstelbaar bij de taille middels een trekkoord. Lees meer Kies je kleur Dit is een verplicht veld. Kies je kleur Dit is een verplicht veld. Rood Bosgroen Donkergrijs Kies je maat Bekijk maattabel Kies een optie... XSSMLXLXXLXXXL4XL Dit is een verplicht veld. XS S M L XL XXL XXXL 4XL Het model is 185 cm en draagt maat M. Bekijk maattabel TITLE Description Selecteer bestand Gecontroleerd -% TITLE Meer info Selecteer bestand Gecontroleerd -% TITLE Meer info Selecteer bestand Gecontroleerd -% BEDRUKKEN OF BORDUREN Meer info Meer info Bedrukken of borduren Het kostenoverzicht voor bedrukken of borduren bij grotere aantallen vind je op deze pagina. Bij Proforto heb je de mogelijkheid om kleding te personaliseren door middel van bedrukken of borduren. Beide opties hebben hun voordelen. In het overzicht hieronder vind je de belangrijkste verschillen. BEDRUKKEN * Bedrukken biedt meer mogelijkheden dan borduren, zo kan met bedrukken een full color afbeelding of veelkleurig logo toegepast worden. * Bedrukken kan een minder lange levensduur dan borduren hebben, afhankelijk van aantal wasbeurten en wastemperatuur. * Voor bedrukken gelden - in tegenstelling tot borduren - geen instelkosten. Hierdoor is dit prijstechnisch aantrekkelijker - zeker bij kleinere aantallen. BORDUREN * Heeft een chique uitstraling. * Hogere kwaliteit dan bedrukken, maar kostbaarder. * Beperkte mogelijkheden met afbeeldingen, vormen en kleuren. Selecteer bestand Gecontroleerd -% -% Geen Geen -% Bedrukken Bedrukken -% -20% Borduren Borduren -% -20% 1. Kies je positie(s) Opdruk Opdrukken Borduring Borduringen Het is mogelijk om meerdere posities te selecteren Dit is een verplicht veld. Selecteer bestand Gecontroleerd -% Bekijk de posities en uitleg in een overzicht Posities voor bedrukken of borduren 2. Upload je logo('s) We accepteren alle logo's en formaten, maar hoe hoger de kwaliteit hoe beter! Achteraf mijn logo aanleveren Nu uploaden BESTAND UPLOADEN VOOR: Description Dit is een verplicht veld. Selecteer bestand Gecontroleerd -% Kortingstabel Stuks Prijs Prijs Aantal - + In winkelmandje Final product price € 46,72 € 38,61 € 51,91 € 42,90 Incl. BTW Excl. BTW Incl. BTW Excl. BTW LEVERTIJD Verwachte bezorgdatum: Vóór 23u besteld, morgen in huis Vóór 23u besteld, morgen in huis Snelle levering Bij Proforto doen we er alles aan om jouw bestelling zo snel mogelijk af te leveren. Voor onze populaire producten geldt: vóór 23u besteld, de volgende werkdag in huis!* * voor 23u besteld, morgen in huis geldt alleen op werkdagen Algemene levertijd: Vóór 23u besteld, morgen in huis Vóór 23u besteld, morgen in huis Snelle levering Bij Proforto doen we er alles aan om jouw bestelling zo snel mogelijk af te leveren. Voor onze populaire producten geldt: vóór 23u besteld, de volgende werkdag in huis!* * voor 23u besteld, morgen in huis geldt alleen op werkdagen Selecteer eerst je kleur en/of maat * Gratis retourneren binnen 100 dagen Gratis retourneren binnen 100 dagen Terugsturen is bij ons gratis en werkt heel simpel. Je kunt jouw bestelling gratis retourneren binnen 100 dagen. * Snelle levering Snelle levering Bij Proforto doen we er alles aan om jouw bestelling zo snel mogelijk af te leveren. Voor onze populaire producten geldt: vóór 23u besteld, de volgende werkdag in huis!* * Voor 23 besteld, morgen in huis geldt alleen op werkdagen * Achteraf betalen Achteraf betalen Bij Proforto is het mogelijk om achteraf te betalen. Hiervoor werken wij samen met onze betaalpartner Billink. Tijdens het afrekenproces kies je voor de betaalmethode 'Achteraf betalen'. * Grootste assortiment Grootste assortiment Proforto is met 100+ merken de grootste leverancier van werkkleding en werkschoenen. * Klanten beoordelen Proforto met een 9.6 Klanten beoordelen Proforto met een 9.6 Mogen wij jou ook blij maken? Proforto krijgt een gemiddelde beoordeling van 9.6 uit meer dan 16.000 klantbeoordelingen! Veelgestelde vragen Wat zijn de retourvoorwaarden? Bij Proforto hanteren we een retourtermijn van 100 dagen. Je mag de producten thuis voelen, passen en bekijken zoals in een fysieke winkel, maar retourneer en verpak ze vervolgens netjes zoals je ze hebt ontvangen. De onderstaande voorwaarden zijn van toepassing: De producten zijn niet bedrukt of geborduurd; De producten zijn in originele staat en verpakking inclusief aangehechte kaartjes; Hygiëne artikelen zoals ondergoed waarvan de verzegeling na de levering is verbroken kunnen niet geretourneerd worden; Retourneren is gratis wanneer je ná aanmelding gebruik maakt van ons antwoordnummer. Mocht je de producten op eigen initiatief willen terugsturen is dit voor eigen rekening. Heb je een bestelling via Bol.com geplaatst? Doorloop dan het retourproces op Bol.com. Heb ik garantie op de bestelde producten? Wij leveren producten van goede kwaliteit van de beste merken. Het kan helaas wel eens voorkomen dat door een fabrieksfout een product eerder kapot gaat, dan je zou mogen verwachten. Om voor garantie in aanmerking te komen, meld je jouw product aan via het garantieformulier. Wat zijn de verzendkosten? * Bij bestellingen vanaf €75,-€90,75 profiteer je van gratis verzending. * Bij bestellingen onder de €75,-€90,75 betaal je €5,95€7,20 verzendkosten. Hoe kan ik producten laten bedrukken of borduren? Navigeer naar de productpagina van het product dat je wilt laten bedrukken of borduren. Selecteer de kleur en de maat van het product en geef aan dat je wilt ‘Bedrukken’ of ‘Borduren’ via de knop en doorloop de stappen. Let op: zie je de knoppen ‘Bedrukken’ en ‘Borduren’ niet? Dan is personaliseren van dit product niet mogelijk. Kan ik ook achteraf betalen? Achteraf betalen via Billink is mogelijk bij bestellingen tot €800,- excl BTW (particulier)€968,- incl. BTW(particulier) of €2500,- excl BTW€3025,- (zakelijk). Wij werken hierin samen met Billink. Als je kiest voor achteraf betalen, worden er €1,99 transactiekosten gerekend (voor zakelijke klanten). Billink verzorgt hierin het volledige proces. Billink stuurt de factuur met betaalspecificaties een aantal dagen na het versturen van de bestelling per e-mail naar je toe. Deze dient binnen twee weken na ontvangst van de bestelling te worden voldaan aan Billink. Er kan niet in termijnen worden betaald. Kies je voor Billink (achteraf betalen), dan kun je niet leveren op een PostNL punt. Ontvang je een foutmelding wanneer je kiest voor achteraf betalen? Neem dan contact op met Billink via 010 - 41 414 73 Op welke manieren kan ik betalen? Wij bieden de onderstaande betaalmogelijkheden aan: * iDeal * Paypal * Creditcard * Bancontact / Mister Cash * Bankoverschrijving * Achteraf betalen via Billink ✕ MAATTABEL JOBMAN Afmetingen zijn indicatief en in centimeters. Standaard matenBorstomtrekTailleomtrek XS 80-84 68-72 S 88-92 76-80 M 96-100 84-88 L 104-108 92-97 XL 112-116 102-108 XXL 120-124 114-120 3XL 128-132 126-132 4XL 136-140 134-138 5XL 144-148 143-147 Bekijk meetinstructies. Size Chart PRODUCTOMSCHRIJVING Een winddicht en waterafstotend jack van drielaagse softshell gevoerd met fleece. De jas is voorzien van 2 steekzakken met rits, een borstzak met rits en een binnenzak. Verder is de jas professioneel afgewerkt met duimgaten, YKK rits aan de voorzijde en is verstelbaar bij de taille middels een trekkoord. Pluspunten + Winddicht en waterafstotend + Voorzien van twee steekzakken met rits + Professioneel afgewerkt met duimgaten AANVULLENDE INFORMATIE SKU JOB-65120171 Merk Jobman Materiaal kleding 94% polyester, 6% elasthaan. Eigenschappen Waterafstotend, Winddicht Verkrijgbaar in de maten XS - 4XL Kwaliteit materiaal 250-299gr/m² Geslacht Unisex, Heren Wasvoorschriften machine wasbaar tot 40°C Personalisatie opties Bedrukken, Borduren BEOORDELINGEN Mogelijk gemaakt door 5.0 5.0 star rating 3 Beoordelingen 5 4 3 2 1 5.0 5.0 star rating 3 Beoordelingen 5 4 3 2 1 Schrijf Een Review Stel Een Vraag SCHRIJF EEN REVIEW * Geeft een verplicht veld aan * Score: * Titel: * Beoordeling: U bent verbonden als Verbinden met: -OF- * Gebruik uw naam: * E-mail: Titel en inhoud van de review kunnen niet leeg zijn Het veld van de vraag mag niet leeg zijn Geef een beoordeling met sterren voor deze review Veldnaam mag niet leeg zijn Ongeldige e-mail Uw review is al ingediend. Maximumlengte is overschreden Vul alle verplichte velden (*) in Een of meer van uw antwoorden voldoen niet aan de vereiste criteria Bedankt voor het plaatsen van een review! Wij waarderen uw bijdrage. Deel uw beoordeling, zodat iedereen er van kan genieten. delen delen delen Bedankt voor het plaatsen van een review! Uw mening is verzonden en staat in de wachtrij om door onze medewerkers gepubliceerd te worden. STEL EEN VRAAG * Geeft een verplicht veld aan * Vraag: Titel en inhoud van de review kunnen niet leeg zijn Het veld van de vraag mag niet leeg zijn Geef een beoordeling met sterren voor deze review Veldnaam mag niet leeg zijn Ongeldige e-mail Uw review is al ingediend. Maximumlengte is overschreden Vul alle verplichte velden (*) in Een of meer van uw antwoorden voldoen niet aan de vereiste criteria * Gebruik uw naam: * E-mail: Bedankt voor het plaatsen van een vraag! Klik op de link in de bevestigingsmail die we zojuist naar uw gestuurd hebben om uw vraag op te sturen. uw vraag zal op de website verschijnen zodra iemand hierop antwoord. * BEOORDELINGEN * VRAGEN Alles wissen Beoordelingen filteren Search Reviews Meer Filters Filters Alles wissen Beoordeling Scores filter Alle Score all 5.0 star rating Score 5 4.0 star rating Score 4 3.0 star rating Score 3 2.0 star rating Score 2 1.0 star rating Score 1 Beoordelingen Images filter Alle All reviews Met Afbeeldingen En Video's Images only Toon 3 Beoordelingen Beoordeling * Alle * 5.0 star rating * 4.0 star rating * 3.0 star rating * 2.0 star rating * 1.0 star rating Afbeeldingen En Video's * Alle * Met Afbeeldingen En Video's Alles wissen 3 Beoordelingen Resultaten bijwerken Geverifieerde Reviewer 0.0 star rating 11/06/24 Review by Anonymous User Op delen ' Share Review by Anonymous User facebook facebook Share Review by Anonymous User twitter twitter Share Review by Anonymous User LinkedIn linkedin Share Review by Anonymous User 11/06/24 Was deze review nuttig? 0 0 S Stefan W. Geverifieerde koper 5.0 star rating 09/06/24 Kwaliteit en perfect bedrukt Review by Stefan W. on 9 Jun 2024 review stating Kwaliteit en perfect bedrukt Ik heb meerdere fleece jassen maar dit is echt vanaf dag 1 mijn favoriet! De kleur is fantastisch waardoor de bedrukking extra tot zijn recht komt Op Jobman 1201 Softshell Jacket delen ' Share Review by Stefan W. on 9 Jun 2024 facebook facebook Share Review by Stefan W. on 9 Jun 2024 twitter twitter Share Review by Stefan W. on 9 Jun 2024 LinkedIn linkedin Share Review by Stefan W. on 9 Jun 2024 09/06/24 Was deze review nuttig? 0 0 D Dennis P. Geverifieerde koper 5.0 star rating 08/08/23 Fijne jas Review by Dennis P. on 8 Aug 2023 review stating Fijne jas Valt goed qua maat. Zit lekker, houdt wind goed tegen en blijft toch comfortabel om soepel in door te blijven werken. Op Jobman 1201 Softshell Jacket delen ' Share Review by Dennis P. on 8 Aug 2023 facebook facebook Share Review by Dennis P. on 8 Aug 2023 twitter twitter Share Review by Dennis P. on 8 Aug 2023 LinkedIn linkedin Share Review by Dennis P. on 8 Aug 2023 08/08/23 Was deze review nuttig? 0 0 P Piet S. Geverifieerde koper 5.0 star rating 15/04/23 Softshell jacket Review by Piet S. on 15 Apr 2023 review stating Softshell jacket Ben zeer trots op deze aankoop. Op Jobman 1201 Softshell Jacket delen ' Share Review by Piet S. on 15 Apr 2023 facebook facebook Share Review by Piet S. on 15 Apr 2023 twitter twitter Share Review by Piet S. on 15 Apr 2023 LinkedIn linkedin Share Review by Piet S. on 15 Apr 2023 15/04/23 Was deze review nuttig? 0 0 wees de eerste om een vraag te vragen Recent bekeken Deal € € Origineel: € € -% € NO DISCOUNT Snelle levering No fast delivery chevron-left chevron-right Toevoegen aan winkelmandje Dit is een verplicht veld. In winkelmandje Werk jij met je handen? Dan ben jij onze held Sluit je nu aan bij de Proforto-familie Als Proforto-lid geniet je van exclusieve voordelen en houden we je up-to-date met de nieuwste trends in werkkleding en veiligheidsuitrusting. Schrijf je in voor onze nieuwsbrief en ontvang direct 5% korting op je volgende bestelling. ZELF REGELEN * Retour aanmelden * Bestelling volgen * Bestelling annuleren * Garantie aanvragen * Nieuwsbrief aanmelden * Klantenservice OVER PROFORTO * Proforto sparen * Werken bij Proforto 10+ vacatures * Proforto.nl * Proforto.be * Bedrijfsgegevens * Mijn Proforto account SOCIALS * Instagram * Facebook * YouTube * LinkedIn * TikTok KLANTEN GEVEN ONS Een 9.6 op basis van 15046 beoordelingen. Onze partners Instagram Facebook YouTube LinkedIn TikTok Hulp nodig? We staan voor je klaar Maandag t/m donderdag 09:00 tot 22:00, vrijdag 09:00 tot 17:30 en zaterdag van 10:00 tot 17:00 Whatsapp +31 6 19 89 72 05 Antwoord ma t/m za binnen 24 uur klantenservice@proforto.nl Antwoord op werkdagen binnen 24 uur Chat met ons Antwoord op werkdagen binnen 24 uur Onze pakketten worden verstuurd met Je kan bij ons betalen met Vanaf €75,-€90,75 wordt je bestelling gratis verzonden. Daaronder betaal je verzendkosten. Aanbiedingen zijn geldig voor webshop klanten. Maximaal één keer te gebruiken per klant. Niet geldig op personalisaties en niet met elkaar te combineren, tenzij anders vermeld. © 2013 - 2024 Proforto.nl | Proforto.be | Jobs | Algemene voorwaarden | Privacy | Contactinformatie