www.papstar-shop.fr
Open in
urlscan Pro
2a00:f48:1008::214:114:10
Malicious Activity!
Public Scan
URL:
https://www.papstar-shop.fr/plateaux-carton-pure-12-cm-x-9-5-cm-x-62-cm-marron-pour-6-gobelets-87648.htm?gad_source=1&gclid=...
Submission: On January 31 via manual from FR — Scanned from FR
Submission: On January 31 via manual from FR — Scanned from FR
Form analysis
12 forms found in the DOMGET https://www.papstar-shop.fr/catalogsearch/result/
<form class="form minisearch w-full lg:w-10/12" x-data="initMiniSearchComponent()" @click.away="show = false" id="search_mini_form" action="https://www.papstar-shop.fr/catalogsearch/result/" method="get">
<div class="flex justify-end lg:pr-6 pt-3 lg:pt-0">
<div class="control w-full">
<label class="sr-only" for="search"> Rechercher... </label>
<input id="search" x-on:input.debounce="getSearchResults()" x-ref="searchInput" type="search" class="input-text h-12 w-full" autocapitalize="off" autocomplete="off" autocorrect="off" name="q" value="" placeholder="Rechercher..."
maxlength="128">
</div>
<button type="submit" title="Rechercher" class="action search btn btn-primary-square h-12 -ml-2">
<span class="hidden md:block">Rechercher</span>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="md:w-0 text-white h-6 w-6">
<circle cx="27" cy="27.4" fill="none" r="19.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M46 41.1 56.9 52c.8.8.8 2 0 2.8l-2.1 2.1c-.8.8-2 .8-2.8 0L41 46M17.6 36.8c-5.2-5.2-5.2-13.6 0-18.7" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"
class="stroke-2c3e50"></path>
</svg>
</button>
</div>
<div id="search_autocomplete" class="search-autocomplete flex justify-end relative w-inherit" x-show="show" style="display:none;">
<div class="absolute lg:max-h-screen-80 overflow-y-auto bg-white border border-solid border-black z-50 w-full flex flex-col">
<template x-if="isLoading">
<div class="absolute bg-white bg-opacity-60 z-10 h-full w-full flex items-center justify-center">
<div class="flex items-center">
<!-- loading icon -->
<svg class="animate-spin h-5 w-5 text-gray-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z">
</path>
</svg>
<!-- end loading icon -->
</div>
</div>
</template>
<div class="pap-autocomplete-overview">
<p class="font-bold m-0"> Recherches populaires </p>
<p class="m-0 mt-3">
<a class="block w-full" :href="`${searchPageUrl}?q=${searchTerm}`" href="https://www.papstar-shop.fr/catalogsearch/result/?q=">
<span class="pap-autocomplete-overview-term" x-text="searchTerm"></span>
<span class="pap-autocomplete-overview-total" x-text="`(${resultLength})`">(0)</span>
</a>
</p>
</div>
<p class="font-bold pl-4 pb-2 m-0">Produits</p>
<ul class="pap-autocomplete-results">
<template x-for="(result, index) in Object.values(results)" :key="result.uid">
<li>
<a class="pap-autocomplete-result" :href="result.url">
<picture class="pap-autocomplete-result-image">
<source type="image/webp" :srcset="result.image.url_webp">
<source type="" :srcset="result.image.url">
<img class="pap-autocomplete-result-image" :src="result.image.url" :alt="result.image.label" loading="lazy"></picture>
<div class="pap-autocomplete-result-meta">
<p class="pap-autocomplete-result-meta-name" x-text="result.name"></p>
<p class="pap-autocomplete-result-meta-sku">
Article N° <span x-text="result.sku"></span>
</p>
<template x-if="result.prices.final.gross">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price" :class="{'block': showPriceWithTax(result), 'hidden': !showPriceWithTax(result)}">
<span class="price-container price-final_price tax weee">
<template x-if="result.prices.hasOld">
<div class="old-price text-xs including-tax line-through">
<span class="price" x-text="hyva.formatPrice(result.prices.regular.gross)"></span>
</div>
</template>
<div class="price-wrapper price-including-tax finalPrice flex items-end leading-tight">
<span class="price font-bold" x-text="hyva.formatPrice(result.prices.final.gross)"></span>
<span class="text-xs"> TVA comprise</span>
</div>
</span>
</div>
<div class="base-price">
<span class="price-container price-final_price tax weee">
<template x-if="result.prices.hasOld">
<div class="old-price text-xs excluding-tax line-through">
<span class="price" x-text="hyva.formatPrice(result.prices.regular.net)"></span>
</div>
</template>
<div class="price-wrapper price-excluding-tax finalPrice flex items-end leading-tight">
<span class="price font-bold" x-text="hyva.formatPrice(result.prices.final.net)"></span>
<span class="text-xs"> hors TVA</span>
</div>
</span>
</div>
</div>
</template>
</div>
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in result.stars" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
</span>
</a>
</li>
</template>
</ul>
<p x-show="storyBlokPageData.length >= 1" class="font-bold pl-4 pb-2 m-0" style="display: none;">Pages</p>
<ul class="pap-autocomplete-results">
<template x-for="(result, index) in Object.values(storyBlokPageData)" :key="result.uuid">
<li x-show="index < 5">
<a class="pap-autocomplete-page-result" :href="'/' + result.url">
<div class="pap-autocomplete-result-meta">
<p class="pap-autocomplete-result-meta-name" x-text="result.name"></p>
</div>
</a>
</li>
</template>
</ul>
</div>
</div>
</form>
POST
<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="username">
<span>Adresse email</span>
</label>
<div class="control">
<input name="username" id="username" x-ref="customer-email" @change="errors = 0" type="email" required="" class="form-input input-text">
</div>
</div>
<div class="field password required">
<label for="password" class="label">
<span>Mot de passe</span>
</label>
<div class="control">
<input name="password" id="password" type="password" class="form-input input-text" required="" x-ref="customer-password" autocomplete="customer-password" @change="errors = 0">
</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"> S'inscrire </button>
<a href="https://www.papstar-shop.fr/customer/account/forgotpassword/">
Mot de passe oublié ? </a>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/87648/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/87648/"
id="product_addtocart_form">
<input type="hidden" name="product" value="87648">
<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="87648">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td">
<script>
function initConfigurableSwatchOptions_87648() {
const configurableOptionsComponent = initConfigurableOptions('87648', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["187648"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"187648": {
"baseOldPrice": {
"amount": 60
},
"oldPrice": {
"amount": 72.000001
},
"basePrice": {
"amount": 60
},
"finalPrice": {
"amount": 72.000001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "48,00\u00a0centimes \/ St\u00fcck",
"basePrice": "40,00\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 60
},
"oldPrice": {
"amount": 72.000001
},
"basePrice": {
"amount": 60
},
"finalPrice": {
"amount": 72.000001
}
},
"productId": "87648",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"187648": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["187648"]
}
},
"canDisplayShowOutOfStockStatus": true,
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"187648": "4002911447840"
},
"quantities": {
"187648": 100
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (5 x 30)",
"vpe": "150"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent);
}
</script>
<div x-data="initConfigurableSwatchOptions_87648()" x-init="init(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" class="relative mt-5 mb-2">
<div>
<div class="swatch-attribute min-h-14
order_unit">
<template x-if="showSwatches">
<div class="py-1 w-full border-gray-300">
<label class="w-full text-gray-700 product-option-label" for="attributeorder_unit">
<div class="font-semibold mb-2"> Unité de commande </div>
</label>
<div class="w-full text-left text-gray-900 product-option-values -ml-1">
<div class="swatch-attribute-options" role="radiogroup">
<div class="swatch-attribute-options-grid grid">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</div>
</div>
</div>
</template>
<div class="py-1 w-full border-gray-300">
<label class="w-full text-gray-700 product-option-label" for="attributeorder_unit">
<div class="font-semibold mb-2"> Unité de commande </div>
</label>
<div class="w-full text-left text-gray-900 product-option-values -ml-1">
<div class="swatch-attribute-options" role="radiogroup">
<div class="swatch-attribute-options-grid grid">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" x-on:change="changeOption(254, $event.target.value)"
x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id"
class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label bg-secondary border-container-lighter text-white" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)" for="attribute-option-swatch-input65ba7afcc0a852.9964885787648-7059" style="">
<input :id="'attribute-option-swatch-input65ba7afcc0a852.9964885787648-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()" x-on:change="changeOption(254, $event.target.value)"
x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0" id="attribute-option-swatch-input65ba7afcc0a852.9964885787648-7059" value="7059" required="required">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }">Carton</div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs">150 Piece (5 x 30)</div>
<!-- N98 custom attributes end-->
</label>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
</div>
<div class="pap-pdp-swatch-prices pb-5" @update-prices-87648.window="updatePrice($event.detail);" @update-stock-87648.window="updateStock($event.detail);" x-data="{
unitSavingsPrice: null,
productId: 87648,
currentStock: 0,
hasSpecialPrice: false,
showPriceWithTax: true,
basePrice: {
amount: 0.00
},
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
baseOldPrice: {
amount: 0.00
},
unitPriceBaseHtml: null,
unitPriceHtml: null,
UpdateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateShowPriceWithTax() {
this.showPriceWithTax = this.finalPrice.amount !== this.basePrice.amount;
},
updateBadge() {
const productTileBadge = document.querySelector('.product-detail__badges--discounted');
if (productTileBadge) {
if (this.finalPrice.amount < this.oldPrice.amount) {
const specialPricePercent = (this.oldPrice.amount - this.finalPrice.amount)
/ this.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
},
updatePrice(detail) {
this.unitPriceBaseHtml = detail.unitPrice.pricePerUnitHTML.basePrice;
this.unitPriceHtml = detail.unitPrice.pricePerUnitHTML.price;
this.baseOldPrice.amount = detail.baseOldPrice.amount;
this.oldPrice.amount = detail.oldPrice.amount;
this.basePrice.amount = detail.basePrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateBadge();
this.UpdateHasSpecialPrice();
this.updateShowPriceWithTax();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
updateStock(detail) {
this.currentStock = detail;
}
}">
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
<div class="prices">
<p class="price -with-tax block" :class="{'block': showPriceWithTax, 'hidden': !showPriceWithTax}">
<template x-if="hasSpecialPrice">
<span class="block old-price text-xs including-tax line-through" x-text="hyva.formatPrice(oldPrice.amount)"></span>
</template>
<span class="finalprice" x-text="hyva.formatPrice(finalPrice.amount)">72,00 €</span>
<span class="tax">TVA comprise</span>
<br>
<span class="unitPrice text-xs mt-2" x-text="unitPriceHtml">48,00 centimes / Stück</span>
</p>
<p class="price">
<template x-if="hasSpecialPrice">
<span class="old-price text-xs excluding-tax line-through block" x-text="hyva.formatPrice(baseOldPrice.amount)"></span>
</template>
<span class="baseprice" x-text="hyva.formatPrice(basePrice.amount)">60,00 €</span>
<span class="tax">hors TVA</span>
<br>
<span class="unitPrice text-xs mt-2" x-text="unitPriceBaseHtml">40,00 centimes / Stück</span>
</p>
</div>
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500 text-xs"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600 text-xs"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600 text-xs"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500 text-xs"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600 text-xs" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600 text-xs" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
<div class="product-options-wrapper" id="product-options-wrapper">
<div class="fieldset" tabindex="0">
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11161/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11161/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="11161">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afcc6a6f()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afcc6a6f() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-5-l-transparent-avec-trait-de-11161.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-11161.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/K/a/Kaltgetraenkebecher-PLA-pure-0-5-l-9-5-cm-16-2-cm-glasklar-mit-Schaumrand-11161_b_0_7.jpg" loading="lazy" width="200" height="200" alt="Gobelets pour boissons froides en P.L.A. "pure" 0,5 l transparent avec trait de mousse-idéal pour bière" title="Gobelets pour boissons froides en P.L.A. "pure" 0,5 l transparent avec trait de mousse-idéal pour bière">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-secondary font-semibold text-base"> PAPSTAR </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-5-l-transparent-avec-trait-de-11161.htm">
Gobelets pour boissons froides en P.L.A. "pure" 0,5 l transparent avec trait de mousse-idéal pour bière </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>11161
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_11161() {
const configurableOptionsComponent = initConfigurableOptions('11161', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7057",
"label": "Pack unique",
"products": ["211161"]
}, {
"id": "7059",
"label": "Carton",
"products": ["111161"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"211161": {
"baseOldPrice": {
"amount": 9.5
},
"oldPrice": {
"amount": 11.400001
},
"basePrice": {
"amount": 9.5
},
"finalPrice": {
"amount": 11.400001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "19,00\u00a0centimes \/ St\u00fcck",
"basePrice": "15,83\u00a0centimes \/ St\u00fcck"
}
}
},
"111161": {
"baseOldPrice": {
"amount": 144
},
"oldPrice": {
"amount": 172.800001
},
"basePrice": {
"amount": 144
},
"finalPrice": {
"amount": 172.800001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "18,00\u00a0centimes \/ St\u00fcck",
"basePrice": "15,00\u00a0centimes \/ St\u00fcck"
}
},
"unitSavings": "5.3% de rabais compar\u00e9 au Pack unique"
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 9.5
},
"oldPrice": {
"amount": 11.400001
},
"basePrice": {
"amount": 9.5
},
"finalPrice": {
"amount": 11.400001
}
},
"productId": "11161",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"211161": {
"254": "7057"
},
"111161": {
"254": "7059"
}
},
"salable": {
"254": {
"7057": ["211161"],
"7059": ["111161"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"211161": "4002911111611",
"111161": "4002911211618"
},
"quantities": {
"211161": 3838,
"111161": 239
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7057": {
"type": "0",
"value": null,
"label": "Pack unique",
"unit": "###VPE### Piece (1 x 60)",
"vpe": "60"
},
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 60)",
"vpe": "960"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_11161()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afcd12f81.3436920811161-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afcd12f81.3436920811161-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afcc672e() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afcc672e() {
return {
qty: 1,
input: document.getElementById('qty[11161_65ba7afcc672e]'),
addToCart: document.getElementById('add-to-cart[11161_65ba7afcc672e]'),
qtyAlert: document.getElementById('qty-alert[11161_65ba7afcc672e]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[11161_65ba7afcc672e]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[11161_65ba7afcc672e]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afcc672e()" @update-prices-11161.window="updatePrice($event.detail,11161);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-11161" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">11,40 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">19,00 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-11161" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">9,50 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">15,83 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-11161.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afcc672e()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[11161_65ba7afcc672e]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[11161_65ba7afcc672e]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-11161.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[11161_65ba7afcc672e]"
aria-label="Ajouter au panier_Gobelets pour boissons froides en P.L.A. "pure" 0,5 l transparent avec trait de mousse-idéal pour bière) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[11161_65ba7afcc672e]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11311/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11311/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="11311">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afcd2436()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afcd2436() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-3-l-9-5-cm-11-7-cm-transparent-11311.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-11311.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/T/r/Trinkbecher-Hurricane-PET-0-3-l-9-5-cm-11-7-cm-glasklar-11311_b_0_5.jpg" loading="lazy" width="200" height="200" alt="Gobelets "Hurricane", PET 0,3 l Ø 9,5 cm · 11,7 cm transparent" title="Gobelets "Hurricane", PET 0,3 l Ø 9,5 cm · 11,7 cm transparent">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-black font-semibold text-base"> Starpak </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-3-l-9-5-cm-11-7-cm-transparent-11311.htm">
Gobelets "Hurricane", PET 0,3 l Ø 9,5 cm · 11,7 cm transparent </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>11311
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_11311() {
const configurableOptionsComponent = initConfigurableOptions('11311', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["111311"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"111311": {
"baseOldPrice": {
"amount": 76
},
"oldPrice": {
"amount": 91.200001
},
"basePrice": {
"amount": 76
},
"finalPrice": {
"amount": 91.200001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "11,40\u00a0centimes \/ St\u00fcck",
"basePrice": "9,50\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 76
},
"oldPrice": {
"amount": 91.200001
},
"basePrice": {
"amount": 76
},
"finalPrice": {
"amount": 91.200001
}
},
"productId": "11311",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"111311": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["111311"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"111311": "4002911213117"
},
"quantities": {
"111311": 258
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 50)",
"vpe": "800"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_11311()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afcd97894.5894527011311-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afcd97894.5894527011311-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afcd22b1() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afcd22b1() {
return {
qty: 1,
input: document.getElementById('qty[11311_65ba7afcd22b1]'),
addToCart: document.getElementById('add-to-cart[11311_65ba7afcd22b1]'),
qtyAlert: document.getElementById('qty-alert[11311_65ba7afcd22b1]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[11311_65ba7afcd22b1]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[11311_65ba7afcd22b1]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afcd22b1()" @update-prices-11311.window="updatePrice($event.detail,11311);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-11311" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">91,20 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">11,40 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-11311" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">76,00 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">9,50 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-11311.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afcd22b1()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[11311_65ba7afcd22b1]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[11311_65ba7afcd22b1]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-11311.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[11311_65ba7afcd22b1]"
aria-label="Ajouter au panier_Gobelets "Hurricane", PET 0,3 l Ø 9,5 cm · 11,7 cm transparent) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[11311_65ba7afcd22b1]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11312/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11312/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="11312">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afcda6ae()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afcda6ae() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-4-l-9-5-cm-12-9-cm-transparent-11312.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-11312.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/T/r/Trinkbecher-Hurricane-PET-0-4-l-9-5-cm-12-9-cm-glasklar-11312_b_0_5.jpg" loading="lazy" width="200" height="200" alt="Gobelets "Hurricane", PET 0,4 l Ø 9,5 cm · 12,9 cm transparent" title="Gobelets "Hurricane", PET 0,4 l Ø 9,5 cm · 12,9 cm transparent">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-black font-semibold text-base"> Starpak </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-4-l-9-5-cm-12-9-cm-transparent-11312.htm">
Gobelets "Hurricane", PET 0,4 l Ø 9,5 cm · 12,9 cm transparent </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>11312
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_11312() {
const configurableOptionsComponent = initConfigurableOptions('11312', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["111312"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"111312": {
"baseOldPrice": {
"amount": 80
},
"oldPrice": {
"amount": 96.000001
},
"basePrice": {
"amount": 80
},
"finalPrice": {
"amount": 96.000001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "12,00\u00a0centimes \/ St\u00fcck",
"basePrice": "10,00\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 80
},
"oldPrice": {
"amount": 96.000001
},
"basePrice": {
"amount": 80
},
"finalPrice": {
"amount": 96.000001
}
},
"productId": "11312",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"111312": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["111312"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"111312": "4002911213124"
},
"quantities": {
"111312": 286
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 50)",
"vpe": "800"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_11312()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afce163a4.7743618711312-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afce163a4.7743618711312-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afcda54b() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afcda54b() {
return {
qty: 1,
input: document.getElementById('qty[11312_65ba7afcda54b]'),
addToCart: document.getElementById('add-to-cart[11312_65ba7afcda54b]'),
qtyAlert: document.getElementById('qty-alert[11312_65ba7afcda54b]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[11312_65ba7afcda54b]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[11312_65ba7afcda54b]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afcda54b()" @update-prices-11312.window="updatePrice($event.detail,11312);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-11312" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">96,00 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">12,00 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-11312" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">80,00 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">10,00 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-11312.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afcda54b()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[11312_65ba7afcda54b]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[11312_65ba7afcda54b]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-11312.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[11312_65ba7afcda54b]"
aria-label="Ajouter au panier_Gobelets "Hurricane", PET 0,4 l Ø 9,5 cm · 12,9 cm transparent) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[11312_65ba7afcda54b]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11313/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/11313/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="11313">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afce25c3()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afce25c3() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-5-l-9-5-cm-14-9-cm-transparent-11313.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-11313.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/T/r/Trinkbecher-Hurricane-PET-0-5-l-9-5-cm-14-9-cm-glasklar-11313_b_0_5.jpg" loading="lazy" width="200" height="200" alt="Gobelets "Hurricane", PET 0,5 l Ø 9,5 cm · 14,9 cm transparent" title="Gobelets "Hurricane", PET 0,5 l Ø 9,5 cm · 14,9 cm transparent">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-black font-semibold text-base"> Starpak </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-hurricane-pet-0-5-l-9-5-cm-14-9-cm-transparent-11313.htm">
Gobelets "Hurricane", PET 0,5 l Ø 9,5 cm · 14,9 cm transparent </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>11313
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_11313() {
const configurableOptionsComponent = initConfigurableOptions('11313', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["111313"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"111313": {
"baseOldPrice": {
"amount": 92
},
"oldPrice": {
"amount": 110.400001
},
"basePrice": {
"amount": 92
},
"finalPrice": {
"amount": 110.400001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "13,80\u00a0centimes \/ St\u00fcck",
"basePrice": "11,50\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 92
},
"oldPrice": {
"amount": 110.400001
},
"basePrice": {
"amount": 92
},
"finalPrice": {
"amount": 110.400001
}
},
"productId": "11313",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"111313": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["111313"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"111313": "4002911213131"
},
"quantities": {
"111313": 160
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 50)",
"vpe": "800"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_11313()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afce935a7.1583825311313-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afce935a7.1583825311313-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afce2469() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afce2469() {
return {
qty: 1,
input: document.getElementById('qty[11313_65ba7afce2469]'),
addToCart: document.getElementById('add-to-cart[11313_65ba7afce2469]'),
qtyAlert: document.getElementById('qty-alert[11313_65ba7afce2469]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[11313_65ba7afce2469]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[11313_65ba7afce2469]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afce2469()" @update-prices-11313.window="updatePrice($event.detail,11313);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-11313" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">110,40 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">13,80 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-11313" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">92,00 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">11,50 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-11313.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afce2469()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[11313_65ba7afce2469]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[11313_65ba7afce2469]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-11313.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[11313_65ba7afce2469]"
aria-label="Ajouter au panier_Gobelets "Hurricane", PET 0,5 l Ø 9,5 cm · 14,9 cm transparent) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[11313_65ba7afce2469]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/16174/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/16174/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="16174">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afcea259()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afcea259() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<ul class="product-tile__badges z-10">
<li class="product-tile__badges-item
badge-bestseller-"> Top des ventes </li>
<li class="product-tile__badges-item
badge-trend-"> Tendance </li>
</ul>
<a href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-3-l-transparent-ideal-pour-bie-16174.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-16174.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/K/a/Kaltgetraenkebecher-PLA-pure-0-3-l-9-5-cm-11-cm-glasklar-mit-Schaumrand-16174_b_0_2.jpg" loading="lazy" width="200" height="200" alt="Gobelets pour boissons froides en P.L.A. "pure" 0,3 l transparent idéal pour biere-avec trait de mousse" title="Gobelets pour boissons froides en P.L.A. "pure" 0,3 l transparent idéal pour biere-avec trait de mousse">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-secondary font-semibold text-base"> PAPSTAR </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-3-l-transparent-ideal-pour-bie-16174.htm">
Gobelets pour boissons froides en P.L.A. "pure" 0,3 l transparent idéal pour biere-avec trait de mousse </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>16174
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_16174() {
const configurableOptionsComponent = initConfigurableOptions('16174', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7057",
"label": "Pack unique",
"products": ["216174"]
}, {
"id": "7059",
"label": "Carton",
"products": ["116174"]
}, {
"id": "7061",
"label": "Palette",
"products": ["616174"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"116174": {
"baseOldPrice": {
"amount": 128
},
"oldPrice": {
"amount": 153.600001
},
"basePrice": {
"amount": 128
},
"finalPrice": {
"amount": 153.600001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "13,71\u00a0centimes \/ St\u00fcck",
"basePrice": "11,43\u00a0centimes \/ St\u00fcck"
}
},
"unitSavings": "5.9% de rabais compar\u00e9 au Pack unique"
},
"616174": {
"baseOldPrice": {
"amount": 2073.6
},
"oldPrice": {
"amount": 2488.320001
},
"basePrice": {
"amount": 2073.6
},
"finalPrice": {
"amount": 2488.320001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "12,34\u00a0centimes \/ St\u00fcck",
"basePrice": "10,29\u00a0centimes \/ St\u00fcck"
}
},
"unitSavings": "15.3% de rabais compar\u00e9 au Pack unique"
},
"216174": {
"baseOldPrice": {
"amount": 8.5
},
"oldPrice": {
"amount": 10.200001
},
"basePrice": {
"amount": 8.5
},
"finalPrice": {
"amount": 10.200001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "14,57\u00a0centimes \/ St\u00fcck",
"basePrice": "12,14\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 8.5
},
"oldPrice": {
"amount": 10.200001
},
"basePrice": {
"amount": 8.5
},
"finalPrice": {
"amount": 10.200001
}
},
"productId": "16174",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"116174": {
"254": "7059"
},
"616174": {
"254": "7061"
},
"216174": {
"254": "7057"
}
},
"salable": {
"254": {
"7059": ["116174"],
"7061": ["616174"],
"7057": ["216174"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"116174": "4002911261743",
"616174": "4049026147944",
"216174": "4002911161746"
},
"quantities": {
"116174": 299,
"616174": 16,
"216174": 4789
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7057": {
"type": "0",
"value": null,
"label": "Pack unique",
"unit": "###VPE### Piece (1 x 70)",
"vpe": "70"
},
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 70)",
"vpe": "1120"
},
"7061": {
"type": "0",
"value": null,
"label": "Palette",
"unit": "###VPE### Piece (288 x 70)",
"vpe": "20160"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_16174()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afd027d32.1458923016174-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afd027d32.1458923016174-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afcea0f8() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afcea0f8() {
return {
qty: 1,
input: document.getElementById('qty[16174_65ba7afcea0f8]'),
addToCart: document.getElementById('add-to-cart[16174_65ba7afcea0f8]'),
qtyAlert: document.getElementById('qty-alert[16174_65ba7afcea0f8]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[16174_65ba7afcea0f8]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[16174_65ba7afcea0f8]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afcea0f8()" @update-prices-16174.window="updatePrice($event.detail,16174);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-16174" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">10,20 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">14,57 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-16174" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">8,50 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">12,14 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-16174.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afcea0f8()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[16174_65ba7afcea0f8]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[16174_65ba7afcea0f8]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-16174.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[16174_65ba7afcea0f8]"
aria-label="Ajouter au panier_Gobelets pour boissons froides en P.L.A. "pure" 0,3 l transparent idéal pour biere-avec trait de mousse) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[16174_65ba7afcea0f8]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/16175/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/16175/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="16175">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afd038d4()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afd038d4() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-4-l-9-5-cm-13-2-cm-transpa-16175.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-16175.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/K/a/Kaltgetraenkebecher-PLA-pure-0-4-l-9-5-cm-13-2-cm-glasklar-mit-Schaumrand-16175_b_0_2.jpg" loading="lazy" width="200" height="200" alt="Gobelets pour boissons froides en P.L.A. "pure" 0,4 l Ø 9,5 cm · 13,2 cm transparent idéal pour biere" title="Gobelets pour boissons froides en P.L.A. "pure" 0,4 l Ø 9,5 cm · 13,2 cm transparent idéal pour biere">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-secondary font-semibold text-base"> PAPSTAR </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/gobelets-pour-boissons-froides-en-p-l-a-pure-0-4-l-9-5-cm-13-2-cm-transpa-16175.htm">
Gobelets pour boissons froides en P.L.A. "pure" 0,4 l Ø 9,5 cm · 13,2 cm transparent idéal pour biere </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>16175
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_16175() {
const configurableOptionsComponent = initConfigurableOptions('16175', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7057",
"label": "Pack unique",
"products": ["216175"]
}, {
"id": "7059",
"label": "Carton",
"products": ["116175"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"216175": {
"baseOldPrice": {
"amount": 9.25
},
"oldPrice": {
"amount": 11.100001
},
"basePrice": {
"amount": 9.25
},
"finalPrice": {
"amount": 11.100001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "15,86\u00a0centimes \/ St\u00fcck",
"basePrice": "13,21\u00a0centimes \/ St\u00fcck"
}
}
},
"116175": {
"baseOldPrice": {
"amount": 140
},
"oldPrice": {
"amount": 168.000001
},
"basePrice": {
"amount": 140
},
"finalPrice": {
"amount": 168.000001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "15,00\u00a0centimes \/ St\u00fcck",
"basePrice": "12,50\u00a0centimes \/ St\u00fcck"
}
},
"unitSavings": "5.4% de rabais compar\u00e9 au Pack unique"
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 9.25
},
"oldPrice": {
"amount": 11.100001
},
"basePrice": {
"amount": 9.25
},
"finalPrice": {
"amount": 11.100001
}
},
"productId": "16175",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"216175": {
"254": "7057"
},
"116175": {
"254": "7059"
}
},
"salable": {
"254": {
"7057": ["216175"],
"7059": ["116175"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"216175": "4002911161753",
"116175": "4002911261750"
},
"quantities": {
"216175": 13901,
"116175": 868
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7057": {
"type": "0",
"value": null,
"label": "Pack unique",
"unit": "###VPE### Piece (1 x 70)",
"vpe": "70"
},
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 70)",
"vpe": "1120"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_16175()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afd0d6755.1610337216175-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afd0d6755.1610337216175-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afd0375b() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afd0375b() {
return {
qty: 1,
input: document.getElementById('qty[16175_65ba7afd0375b]'),
addToCart: document.getElementById('add-to-cart[16175_65ba7afd0375b]'),
qtyAlert: document.getElementById('qty-alert[16175_65ba7afd0375b]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[16175_65ba7afd0375b]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[16175_65ba7afd0375b]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afd0375b()" @update-prices-16175.window="updatePrice($event.detail,16175);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-16175" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">11,10 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">15,86 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-16175" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">9,25 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">13,21 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-16175.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afd0375b()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[16175_65ba7afd0375b]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[16175_65ba7afd0375b]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-16175.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[16175_65ba7afd0375b]"
aria-label="Ajouter au panier_Gobelets pour boissons froides en P.L.A. "pure" 0,4 l Ø 9,5 cm · 13,2 cm transparent idéal pour biere) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[16175_65ba7afd0375b]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/86413/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/86413/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="86413">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afd0e5af()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afd0e5af() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/verres-a-biere-ps-gobelets-americains-0-4-l-9-5-cm-12-cm-rouge-blanc-86413.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-86413.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/B/i/Bierbecher-PS-0-4-l-9-5-cm-12-cm-rot-weiss-86413_b_0_1.jpg" loading="lazy" width="200" height="200" alt="Verres à bière, PS, gobelets américains 0,4 l Ø 9,5 cm · 12 cm rouge/blanc" title="Verres à bière, PS, gobelets américains 0,4 l Ø 9,5 cm · 12 cm rouge/blanc">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-black font-semibold text-base"> Starpak </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/verres-a-biere-ps-gobelets-americains-0-4-l-9-5-cm-12-cm-rouge-blanc-86413.htm">
Verres à bière, PS, gobelets américains 0,4 l Ø 9,5 cm · 12 cm rouge/blanc </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>86413
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_86413() {
const configurableOptionsComponent = initConfigurableOptions('86413', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["186413"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"186413": {
"baseOldPrice": {
"amount": 38.4
},
"oldPrice": {
"amount": 46.080001
},
"basePrice": {
"amount": 38.4
},
"finalPrice": {
"amount": 46.080001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "28,80\u00a0centimes \/ St\u00fcck",
"basePrice": "24,00\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 38.4
},
"oldPrice": {
"amount": 46.080001
},
"basePrice": {
"amount": 38.4
},
"finalPrice": {
"amount": 46.080001
}
},
"productId": "86413",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"186413": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["186413"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"186413": "4002911357637"
},
"quantities": {
"186413": 36
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 10)",
"vpe": "160"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_86413()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afd157300.0840427586413-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afd157300.0840427586413-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afd0e458() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afd0e458() {
return {
qty: 1,
input: document.getElementById('qty[86413_65ba7afd0e458]'),
addToCart: document.getElementById('add-to-cart[86413_65ba7afd0e458]'),
qtyAlert: document.getElementById('qty-alert[86413_65ba7afd0e458]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[86413_65ba7afd0e458]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[86413_65ba7afd0e458]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afd0e458()" @update-prices-86413.window="updatePrice($event.detail,86413);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-86413" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">46,08 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">28,80 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-86413" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">38,40 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">24,00 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-86413.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afd0e458()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[86413_65ba7afd0e458]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[86413_65ba7afd0e458]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-86413.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[86413_65ba7afd0e458]"
aria-label="Ajouter au panier_Verres à bière, PS, gobelets américains 0,4 l Ø 9,5 cm · 12 cm rouge/blanc) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[86413_65ba7afd0e458]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
POST https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/86806/
<form method="post"
action="https://www.papstar-shop.fr/checkout/cart/add/uenc/aHR0cHM6Ly93d3cucGFwc3Rhci1zaG9wLmZyL3BsYXRlYXV4LWNhcnRvbi1wdXJlLTEyLWNtLXgtOS01LWNtLXgtNjItY20tbWFycm9uLXBvdXItNi1nb2JlbGV0cy04NzY0OC5odG0_Z2FkX3NvdXJjZT0x/product/86806/"
class="item product product-item product_addtocart_form border rounded p-2.5 bg-container-white hover:shadow-lg flex flex-col w-full h-full">
<input name="form_key" type="hidden" value="QKJ4PzE8A2DcK1Td"> <input type="hidden" name="product" value="86806">
<div class="relative product photo product-item-photo block mb-3 ">
<a x-data="ReqBlind_65ba7afd16665()" href="https://www.papstar-shop.fr/customer/account/" title="Add to list" @click.prevent="open($event)" class="p-2 bg-transparent absolute right-0 hover:text-primary-darker bottom-0">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 85 85" xml:space="preserve" fill="currentColor" class="w-8 h-8 mx-auto"><path d="M23.895 23.457a8.424 8.424 0 0 0-2.896 1.895c-3.408 3.41-3.308 9.06.226 12.594" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path><path d="M68.801 42.971c6.287-6.289 6.389-16.478.224-22.645-6.165-6.164-16.354-6.063-22.644.225l-3.896 3.871-3.87-3.871c-6.287-6.288-16.477-6.389-22.641-.225-6.164 6.167-6.064 16.355.225 22.645l26.295 26.262 26.307-26.262z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2.5" class="stroke-394553"></path></svg>
<span class="sr-only">Add to list</span>
</a>
<script>
function ReqBlind_65ba7afd16665() {
return {
open: function(event) {
window.scrollTo(0, 0);
dispatchMessages([{
type: 'notice',
text: 'Vous devez vous connecter pour utiliser la fonction Liste de demandes'
}], 5000);
let href = event.currentTarget.href;
setTimeout(function() {
window.location = href;
}, 4000);
}
}
}
</script>
<a href="https://www.papstar-shop.fr/verres-hurricane-pet-0-28-l-9-5-cm-7-3-cm-transparent-86806.htm" tabindex="-1">
<img class="object-contain mx-auto py-3 product-image-photo" x-data="" @update-gallery-86806.window="$el.src = $event.detail" src="https://www.papstar-shop.fr/media/catalog/product/cache/8722e48eed7673f91cfbcfe5d0772d92/T/r/Trinkbecher-Hurricane-PET-0-28-l-9-5-cm-7-3-cm-glasklar-86806_b_0_2.jpg" loading="lazy" width="200" height="200" alt="Verres "Hurricane", PET 0,28 l Ø 9,5 cm · 7,3 cm transparent" title="Verres "Hurricane", PET 0,28 l Ø 9,5 cm · 7,3 cm transparent">
</a>
</div>
<div class="product-info flex flex-col flex-grow">
<div class="text-black font-semibold text-base"> Starpak </div>
<div class="mt-1 text-black font-semibold text-base sm:min-h-90px">
<a class="product-item-link " href="https://www.papstar-shop.fr/verres-hurricane-pet-0-28-l-9-5-cm-7-3-cm-transparent-86806.htm">
Verres "Hurricane", PET 0,28 l Ø 9,5 cm · 7,3 cm transparent </a>
</div>
<div class="flex mt-1 mb-1">
<div class="mt-auto sku text-sm">
<span>Article-Nr.: </span>86806
</div>
<div class="lg:w-auto ml-auto block ">
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;" viewBox="0 0 20 20" id="pap-rating-star">
<path d="M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371
1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54
1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1
1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" style="width: 0; height: 0;">
<defs>
<linearGradient id="pap-half-star" x1="0" x2="100%" y1="0" y2="0">
<stop offset="50%" stop-color="#f6e05e"></stop>
<stop offset="50%" stop-color="#cbd5e0"></stop>
</linearGradient>
</defs>
</svg>
<div x-data="initReviewStars()" class="rating-summary flex justify-end" title="Soyez le premier à commenter ce produit">
<span class="flex pap-autocomplete-result-rating">
<template x-for="(star, index) in calculateStars(0)" :key="index">
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star"></use>
</svg>
</template>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
<svg class="pap-rating-star" width="20" height="20" viewBox="0 0 20 20">
<use href="#pap-rating-star" x-bind:fill="star" fill="#cbd5e0"></use>
</svg>
</span>
</div>
<script>
function initReviewStars() {
"use strict";
return {
/**
* Calculate the number of filled, empty and half stars per logic
*
* Turn them into an array of strings that define the fill color/mask
*/
calculateStars: function(rating) {
if (!rating) {
rating = 0;
}
const steps = 5;
const filled = Math.floor(rating / 100 * steps);
const half = rating / 100 * steps - filled;
const empty = Math.floor(steps - filled - half);
const stars = [...Array.from({
length: filled
}, () => "#f6e05e"), ...(half ? ["url(#pap-half-star)"] : []), ...Array.from({
length: empty
}, () => "#cbd5e0")];
return stars;
},
}
}
</script>
</div>
</div>
<div class="h-full flex justify-between flex-col">
<script>
function initConfigurableSwatchOptions_86806() {
const configurableOptionsComponent = initConfigurableOptions('86806', {
"attributes": {
"254": {
"id": "254",
"code": "order_unit",
"label": "Unit\u00e9 de commande",
"options": [{
"id": "7059",
"label": "Carton",
"products": ["186806"]
}],
"position": "0"
}
},
"template": "<%- data.price %>\u00a0\u20ac",
"currencyFormat": "%s\u00a0\u20ac",
"optionPrices": {
"186806": {
"baseOldPrice": {
"amount": 68
},
"oldPrice": {
"amount": 81.600001
},
"basePrice": {
"amount": 68
},
"finalPrice": {
"amount": 81.600001
},
"tierPrices": [],
"msrpPrice": {
"amount": 0
},
"unitPrice": {
"pricePerUnitHTML": {
"price": "10,20\u00a0centimes \/ St\u00fcck",
"basePrice": "8,50\u00a0centimes \/ St\u00fcck"
}
}
}
},
"priceFormat": {
"pattern": "%s\u00a0\u20ac",
"precision": 2,
"requiredPrecision": 2,
"decimalSymbol": ",",
"groupSymbol": "\u202f",
"groupLength": 3,
"integerRequired": false
},
"prices": {
"baseOldPrice": {
"amount": 68
},
"oldPrice": {
"amount": 81.600001
},
"basePrice": {
"amount": 68
},
"finalPrice": {
"amount": 81.600001
}
},
"productId": "86806",
"chooseText": "Choisissez une option...",
"images": [],
"index": {
"186806": {
"254": "7059"
}
},
"salable": {
"254": {
"7059": ["186806"]
}
},
"canDisplayShowOutOfStockStatus": true,
"preSelectedGallery": [],
"channel": "website",
"salesChannelCode": "papstar_fr",
"sku": {
"186806": "4002911333945"
},
"quantities": {
"186806": 9
}
});
const swatchOptionsComponent = initSwatchOptions({
"254": {
"7059": {
"type": "0",
"value": null,
"label": "Carton",
"unit": "###VPE### Piece (16 x 50)",
"vpe": "800"
},
"additional_data": "{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"0\",\"use_product_image_for_swatch\":0}"
}
});
return Object.assign(configurableOptionsComponent, swatchOptionsComponent, {
mediaCallback: "https\u003A\u002F\u002Fwww.papstar\u002Dshop.fr\u002Fswatches\u002Fajax\u002Fmedia\u002F",
changeOption(optionId, value, skipUpdateGallery) {
this.selectedValues[optionId] = value;
this.findSimpleIndex();
this.findAllowedAttributeOptions();
this.updatePrices();
this.updateStock();
this.updateSavingPriceInfo();
},
unitSavingsPrice: null,
hasSpecialPrice: false,
finalPrice: {
amount: 0.00
},
oldPrice: {
amount: 0.00
},
updateHasSpecialPrice() {
this.hasSpecialPrice = this.finalPrice.amount < this.oldPrice.amount;
},
updateSavingPriceInfo() {
const detail = this.optionConfig.optionPrices[this.productIndex]
this.oldPrice.amount = detail.oldPrice.amount;
this.finalPrice.amount = detail.finalPrice.amount;
this.updateHasSpecialPrice();
if (!this.hasSpecialPrice) {
this.unitSavingsPrice = detail.unitSavings;
}
},
preselectQuerystringItems() {
let found = false;
// pre-select option like ?size=167
const urlQueryParams = new URLSearchParams(window.location.search.replace('?', ''));
Object.values(this.optionConfig.attributes).map(attribute => {
const skipUpdateGallery = true;
if (urlQueryParams.get(attribute.code) !== null) {
let optionId = urlQueryParams.get(attribute.code);
found = false;
Object.values(attribute.options).map(option => {
if (found === false && option.label === optionId) {
optionId = option.id;
found = true;
}
});
this.changeOption(attribute.id, optionId, skipUpdateGallery);
}
});
if (found === false) {
// pre-select first option
Object.values(this.optionConfig.attributes).map(attribute => {
if (attribute.code === 'order_unit') {
let optionId = 0;
Object.values(attribute.options).map(option => {
if (found === false && option.products.length > 0) {
optionId = option.id;
this.changeOption(attribute.id, optionId, true);
found = true;
}
});
}
});
}
},
mouseDown: false,
startX: 0,
maxScroll: 0,
scrollLeft: null,
slider: null,
scrollEvents: {
['@mousedown'](e) {
this.slider = e.target.closest('.snap');
if (!this.slider) {
return;
}
this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth;
this.startX = e.pageX - this.slider.offsetLeft;
this.scrollLeft = this.slider.scrollLeft;
this.mouseDown = true;
},
['@mouseout.self']() {
this.mouseDown = false;
},
['@mouseup']() {
this.mouseDown = false;
},
['@mousemove'](e) {
e.preventDefault();
if (!this.mouseDown) {
return;
}
const x = e.pageX - this.slider.offsetLeft;
const scroll = x - this.startX;
const scrollLeft = this.scrollLeft - scroll;
if (scrollLeft > this.maxScroll) {
this.slider.scrollLeft = this.maxScroll;
return
}
this.slider.scrollLeft = this.scrollLeft - scroll;
},
['@onselectstart']() {
return false;
}
},
resizeEvent() {
Array.from(this.$el.querySelectorAll('.snap')).forEach(slider => {
slider.scrollLeft = 0;
})
}
});
}
</script>
<div x-data="initConfigurableSwatchOptions_86806()" x-init="findAllowedAttributeOptions(); initShowSwatchesIntersect();" @private-content-loaded.window="onGetCartData($event.detail.data)" @resize.window="resizeEvent()"
class="relative md:w-full">
<div>
<div class="swatch-attribute order_unit">
<div class="w-full overflow-x-hidden swatch-attribute-options pt-2">
<template x-if="showSwatches">
<div class="w-full overflow-auto transition-all snap items-center min-h-14 product-listing-option-wrapper grid" role="radiogroup" x-spread="scrollEvents">
<template x-for="(item, index) in optionConfig.attributes[254].options" :key="item.id">
<div class="swatch-item">
<label :for="'attribute-option-swatch-input65ba7afd1d7ad2.6328723686806-'+item.id" class="swatch-option flex flex-col relative shadow-sm cursor-pointer select-none text-center product-option-value-label" :class="{
'bg-secondary border-container-lighter text-white' : (selectedValues[254] === item.id),
'bg-container-lighter' : (selectedValues[254] !== item.id),
'w-6 h-6' : !isTextSwatch(254, item.id),
'bg-secondary text-white' : focusedLabel === item.id
}" :style="getSwatchBackgroundStyle('254',item.id)">
<input :id="'attribute-option-swatch-input65ba7afd1d7ad2.6328723686806-'+item.id" :value="item.id" name="super_attribute[254]" type="radio"
class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" style="z-index:-1" x-on:focus="focusLabel(item.id)" x-on:blur="blurLabel()"
x-on:change="changeOption(254, $event.target.value)" x-model="selectedValues[254]" :required="getAllowedAttributeOptions(254).filter(
attributeOption => selectedValues[attributeOption]
).length === 0">
<div x-html="getSwatchText(254, item.id)" class="whitespace-nowrap text-sm font-bold" :class="{ 'sr-only' : !isTextSwatch(254, item.id) }"></div>
<!-- N98 custom attributes start-->
<div x-html="getSwatchUnitText(254, item.id)" class="text-xs"></div>
<!-- N98 custom attributes end-->
</label>
</div>
</template>
</div>
</template>
</div>
</div>
</div>
<template x-if="isTooltipVisible()">
<div class="absolute shadow-lg" :style="isLayeredSwatch == false && getTooltipPosition()">
<div class="absolute top-0 left-0 z-50 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">
<!--template x-if="isVisualSwatch(activeTooltipItem.attribute, activeTooltipItem.item)">
<div x-show="getSwatchType(activeTooltipItem.type) !== 'color'"
class="inline-block shadow-sm"
:style="getTooltipImageStyle(activeTooltipItem.attribute, activeTooltipItem.item)"
></div>
</template-->
<span class="mx-2 text-sm font-semibold whitespace-nowrap subtitle" x-html="getTooltipLabel()"></span>
</div>
<svg class="absolute z-50 w-8 h-8 text-white transform -translate-x-3
-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>
</template>
<template x-if="unitSavingsPrice">
<div class="unit-savings-price">
<span class="-info" x-html="unitSavingsPrice"></span>
</div>
</template>
</div>
<script>
function initPriceBox__65ba7afd16510() {
return {
updatePrice(priceData, productId) {
const regularPriceLabel = this.$el.querySelector('.normal-price .price-label');
const regularOldPriceElement = this.$el.querySelector('.normal-price .old-price');
const regularPriceElement = this.$el.querySelector('.normal-price .price-wrapper .price');
const regularPriceElementTax = this.$el.querySelector('.normal-price .price-container .tax');
const regularOldBasePriceElement = this.$el.querySelector('.base-price .old-price');
const regularBasePriceElement = this.$el.querySelector('.base-price .price-wrapper .price');
const regularBasePriceElementTax = this.$el.querySelector('.base-price .price-container .tax');
const unitPriceElement = this.$el.querySelector('.normal-price .unitPrice');
const unitBasePriceElement = this.$el.querySelector('.base-price .unitPrice');
const productTileBadge = document.querySelector('.badge-discounted-' + productId);
let specialPrice = false;
let specialPricePercent;
if (regularPriceLabel) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
regularPriceLabel.classList.remove('hidden');
} else {
regularPriceLabel.classList.add('hidden');
}
}
if (productTileBadge) {
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPricePercent = (priceData.oldPrice.amount - priceData.finalPrice.amount) / priceData.oldPrice.amount * 100;
productTileBadge.innerText = '-' + Math.round(specialPricePercent) + '%';
productTileBadge.classList.remove('hidden');
}
}
if (priceData.finalPrice.amount < priceData.oldPrice.amount) {
specialPrice = true;
} else {
specialPrice = false;
}
if (regularOldPriceElement && priceData.oldPrice.amount) {
if (specialPrice) {
regularOldPriceElement.innerText = hyva.formatPrice(priceData.oldPrice.amount);
} else {
regularOldPriceElement.innerText = '';
}
}
if (regularPriceElement) {
regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount);
regularPriceElementTax.style.display = 'block';
}
if (unitPriceElement) {
unitPriceElement.innerText = '';
}
if (unitPriceElement && priceData.unitPrice.pricePerUnitHTML.price) {
unitPriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.price;
}
if (regularOldBasePriceElement && priceData.baseOldPrice.amount) {
if (specialPrice) {
regularOldBasePriceElement.innerText = hyva.formatPrice(priceData.baseOldPrice.amount);
} else {
regularOldBasePriceElement.innerText = '';
}
}
if (regularBasePriceElement) {
regularBasePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount);
regularBasePriceElementTax.style.display = 'block';
}
if (unitBasePriceElement) {
unitBasePriceElement.innerText = '';
}
if (unitBasePriceElement && priceData.unitPrice.pricePerUnitHTML.basePrice) {
unitBasePriceElement.innerText = priceData.unitPrice.pricePerUnitHTML.basePrice;
}
if (priceData.finalPrice.amount === priceData.basePrice.amount) {
this.$el.querySelector('.normal-price').classList.add('hidden');
} else {
this.$el.querySelector('.normal-price').classList.remove('hidden');
}
}
}
}
function initQtyField__65ba7afd16510() {
return {
qty: 1,
input: document.getElementById('qty[86806_65ba7afd16510]'),
addToCart: document.getElementById('add-to-cart[86806_65ba7afd16510]'),
qtyAlert: document.getElementById('qty-alert[86806_65ba7afd16510]'),
validateQty(qty) {
let regex = /^\d+$/;
let pattern = regex.test(qty);
this.addToCart.disabled = qty === 0 || qty === null || qty > 10000 || !pattern || this.addToCart.classList.contains('not-available');
if (qty === 0 || qty === null || qty > 10000 || !pattern) {
this.qtyAlert.style.display = 'block';
} else {
this.qtyAlert.style.display = 'none';
}
},
stepUp() {
this.input.stepUp();
let qty = document.getElementById('qty[86806_65ba7afd16510]').value;
this.validateQty(qty);
},
stepDown() {
this.input.stepDown();
let qty = document.getElementById('qty[86806_65ba7afd16510]').value;
this.validateQty(qty);
}
};
}
</script>
<div class="relative price-block">
<div class="flex my-4 sm:min-h-42px w-full">
<div class="w-full" x-data="initPriceBox__65ba7afd16510()" @update-prices-86806.window="updatePrice($event.detail,86806);">
<div class="price-box mt-3 price-final_price flex flex-wrap justify-between" data-role="priceBox">
<div class="normal-price">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs including-tax line-through"></div>
<div id="price-including-tax-product-price-86806" data-price-type="finalPrice" class="price-wrapper price-including-tax finalPrice flex items-end">
<span class="price">81,60 €</span>
<span class="tax hidden" style="display: block;">TVA comprise</span>
</div>
<div class="unitPrice text-xs">10,20 centimes / Stück</div>
</span>
</div>
<div class="base-price ">
<span class="price-container price-final_price tax weee">
<div class="old-price text-xs excluding-tax line-through"></div>
<div id="price-excluding-tax-product-price-86806" data-price-type="finalPrice" class="price-wrapper price-excluding-tax finalPrice flex items-end">
<span class="price">68,00 €</span>
<span class="tax hidden" style="display: block;">hors TVA</span>
</div>
<div class="unitPrice text-xs">8,50 centimes / Stück</div>
</span>
</div>
</div>
</div>
</div>
<div x-data="{ currentStock: 0 }" @update-stock-86806.window="currentStock = $event.detail" class="flex flex-wrap mt-auto">
<div class="stock-status text-xs w-full mb-3 mt-auto basis-full">
<template x-if="currentStock">
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600"> Article temporairement indisponible </span>
</div>
</template>
<div>
<span x-show="currentStock > 0" class="text-green-500"> En stock. Livraison entre 2-4 jours ouvrés </span>
<span x-show="currentStock <= 0 && currentStock > -1000" class="text-yellow-600" style="display: none;"> Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés </span>
<span x-show="currentStock <= -1000" class="text-red-600" style="display: none;"> Article temporairement indisponible </span>
</div>
</div>
</div>
<div class="flex gap-4 mt-auto justify-end lg:justify-between">
<div class="w-1/2 flex" x-data="initQtyField__65ba7afd16510()">
<button class="qty-button -minus-button" type="button" title="Moins" x-on:click="stepDown()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="w-5 h-5" width="20" height="20">
<g id="Design_here">
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
<label for="qty[86806_65ba7afd16510]" class="sr-only"> Quantité </label>
<input name="qty" class="form-input rounded-none px-2 text-center invalid:ring-2 invalid:ring-red-500 w-11/12" id="qty[86806_65ba7afd16510]" type="number" inputmode="numeric" maxlength="5" min="1" max="10000" step="1" :value="qty"
x-model.number="qty" x-on:input.change="validateQty(qty);">
<button class="qty-button -plus-button" type="button" title="Plus" x-on:click="stepUp()">
<!--?xml version="1.0" encoding="utf-8"?-->
<!-- Generator: Adobe Illustrator 26.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Ebene_1" x="0px" y="0px" viewBox="0 0 24 24" fill="currentColor" style="enable-background:new 0 0 24 24;" xml:space="preserve"
class="text-white" width="20" height="20">
<g id="Design_here">
<g>
<path d="M12.7,0.3C13,0.4,13,0.5,13,0.6v22.8c0,0.3-0.4,0.5-1.1,0.5S11,23.7,11,23.5V0.7c0-0.3,0.4-0.5,1.1-0.5 C12.3,0.2,12.5,0.2,12.7,0.3z"></path>
</g>
<g>
<path d="M23.7,11.3c0.1,0.2,0.1,0.4,0.1,0.7c0,0.7-0.2,1.1-0.5,1.1H0.5c-0.3,0-0.4-0.4-0.4-0.9c0-0.7,0.2-1.1,0.5-1.1h22.8 C23.5,11.1,23.6,11.1,23.7,11.3z"></path>
</g>
</g>
<g id="Guide">
</g>
</svg>
</button>
</div>
<div class="w-1/2" x-data="{ currentStock: 0 }" @update-stock-86806.window="currentStock = $event.detail">
<button class="btn btn-add-to-cart w-full h-full px-2 py-0" :disabled="currentStock <= -1000 || false" :class="{'not-available': currentStock <= -1000 || false}" id="add-to-cart[86806_65ba7afd16510]"
aria-label="Ajouter au panier_Verres "Hurricane", PET 0,28 l Ø 9,5 cm · 7,3 cm transparent) ?>">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="w-5 h-5 mx-0 md:mx-auto lg:mx-0">
<circle cx="25" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<circle cx="47" cy="49.4" fill="none" r="4.5" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></circle>
<path d="M6 12h6c.8 0 1.5.6 1.8 1.3l10.7 25.4c.3.7 1 1.3 1.8 1.3H47c.8 0 1.5-.5 1.9-1.2L55.3 23c.5-1.3-.4-2.9-1.9-2.9H21" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10"
stroke-width="2" class="stroke-2c3e50"></path>
</svg>
<span class="sm:pl-1 md:hidden lg:block w-full text-center"> Ajouter au panier </span>
</button>
</div>
</div>
<div class="qty-alert hidden" id="qty-alert[86806_65ba7afd16510]">
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill="currentColor" viewBox="0 0 20 20" class="w-3 h-3 mr-1 text-energy inline-block align-text-top">
<path d="M19.64 16.36L11.53 2.3A1.85 1.85 0 0 0 10 1.21 1.85 1.85 0 0 0 8.48 2.3L.36 16.36C-.48 17.81.21 19 1.88 19h16.24c1.67 0 2.36-1.19 1.52-2.64zM11 16H9v-2h2zm0-4H9V6h2z"></path>
</svg>
<span>Ne saisissez que des chiffres entiers.</span>
</div>
</div>
</div>
</div>
</form>
<form class="pap-sticky-button lg:block">
<button class="contact-btn bg-contact" :class="{'bg-contactActive lg:h-auto': isExpanded, 'bg-contact': !isExpanded}" type="button" :aria-expanded="isExpanded" aria-controls="sticky-contact-information" @click="isExpanded = !isExpanded">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" xml:space="preserve" fill="currentColor" class="m-auto" width="48" height="48">
<path d="M9 40V14c0-2.2 1.8-4 4-4h38c2.2 0 4 1.8 4 4v26c0 2.2-1.8 4-4 4h-9v10l-9.3-10H13c-2.2 0-4-1.8-4-4z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"
class="stroke-2c3e50"></path>
<path d="M26.8 21.7s1-4 5.4-4c3.4 0 5.5 2.6 5.5 4.9 0 4-4.7 5.3-5.7 5.5V33" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2" class="stroke-2c3e50"></path>
<circle cx="32" cy="36" fill="currentColor" r="1" class="fill-dce9ee"></circle>
<path d="M32 35c-.6 0-1 .4-1 1s.4 1 1 1 1-.4 1-1-.4-1-1-1z" fill="currentColor" class="fill-2c3e50"></path>
</svg>
</button>
</form>
Text Content
Livraison gratuite à partir de 100 € d'achat HT / 120 € d'achat TVA incluse Livraison 2-4 jours ouvrés Pas de montant de commande minimum Rechercher... Rechercher Recherches populaires (0) Produits Article N° TVA comprise hors TVA Pages Mon Compte Listes de demandes 0 Mon Panier Tous les produits Tous les produits Retour Vaisselles biodégradables Vaisselles biodégradables Retour Assiettes & bols biodégradables Assiettes & bols biodégradables Retour Assiettes & bols en résidus agricoles Assiettes & bols en bambou Assiettes & bols en bois Assiettes & bols en carton Assiettes & bols en feuille de palmier Assiettes & bols en canne à sucre Gobelets biodégradables Gobelets biodégradables Retour Gobelets à café Gobelets en carton Gobelets en PLA Gobelets en canne à sucre Pailles biodégradables Pailles biodégradables Retour Pailles en bambou Pailles en carton Pailles en paille Couverts biodégradables Couverts biodégradables Retour Couverts en bambou Couverts en bois Couverts en carton Couverts en feuille de palmier Mises en bouche biodégradable Mises en bouche biodégradable Retour Assiettes & bols en bambou & palmier Assiettes & bols en bois Assiettes & bols en canne à sucre Piques & brochettes Emballages écologiques Emballages écologiques Retour Pots de glace Boîtes en carton Boîtes en canne à sucre Papiers emballages alimentaires Moules jetables Barquettes repas Boîtes à pizza Barquettes en carton Sacs à goûter Sacs en papier & PLA Plateaux traiteur & boîtes traiteurs Barquettes en PLA Vaisselles jetables de fête Cure-dents, piques et brochettes Assiettes & bols Assiettes & bols Retour Pots à dessert Pots à sauce Bols jetables Bols jetables Retour Bols en aluminium Bols en carton Bols en plastique Bols en bambou Bols en CPLA Bols en bois Bols en feuille de palmier Bols en canne à sucre Assiettes jetables Assiettes jetables Retour Assiettes en carton Assiettes en résidus agricoles Assiettes en bambou Assiettes en bois Assiettes en feuille de palmier Assiettes en canne à sucre Mises en bouche Mises en bouche Retour Assiettes & bols en bambou & palmier Assiettes & bols en bois Assiettes & bols en plastique Assiettes & bols en canne à sucre Bols à salade Pots à soupe Gobelets & verres Gobelets & verres Retour Accessoires de bar & boissons Accessoires de bar & boissons Retour Décorations pour cocktails Dessous de verre Agitateurs Couvercles Distributeurs de gobelets Plateaux porte-gobelets Verres jetables Verres jetables Retour Flûtes à champagne Gobelets boissons chaudes Gobelets boissons chaudes Retour Gobelets pour distributeur Gobelets à café Tasses à café Gobelets isothermes Gobelets en canne à sucre Gobelets boissons froides Gobelets boissons froides Retour Gobelets en PLA Gobelets en carton Gobelets à liqueur Gobelets coniques Gobelets en canne à sucre Gobelets réutilisables Pailles Pailles Retour Pailles en bambou & paille Pailles en carton Couverts Couverts Retour Couverts en bambou Pochettes à couverts Couverts jetables - jeux & individuels Cuillères à glace & piques frites Couverts & pipettes Couverts en bois Pics en bois Couverts réutilisables Couverts en carton Couverts en feuille de palmier Pics et brochettes Agitateurs Cure-dents Emballages jetables Emballages jetables Retour Matériel boulangerie Matériel boulangerie Retour Moules & caissettes en papier Dentelles ovales Dentelles pour plateaux Dentelles en papier Supports pour gâteaux en carton Boîtes à gateaux Emballages alimentaires Emballages alimentaires Retour Barquettes en aluminium Pots de glace Pots à sauce Boîtes repas & hamburgers Barquettes snacking Bols à salade Barquettes & films scellables Boîtes snacking Pots à soupe Boîtes & plateux traiteur Films & papiers alimentaires Films & papiers alimentaires Retour Papiers aluminiums Papiers sulfurisés Papiers ingraissables Films étirables Manchettes pour volailles Plateaux de service Sacs avec poignée Sacs & sachets Sacs & sachets Retour Sacs de congélation Sacs & sachets en papier Sacs & sachets en plastique Cornets de frites Poches à douilles Sacs sous vide Sacs isolants Conteneurs isothermes Vaisselle réutilisable Vaisselle réutilisable Retour Gobelets réutilisables Couverts réutilisables Emballages réutilisables Serviettes Serviettes Retour Pochettes à couverts Serviettes décorées Serviettes décorées Retour Serviettes décorées 25 x 25 cm Serviettes décorées 33 x 33 cm Serviettes décorées 40 x 40 cm Serviettes pour mariage Serviettes de Noël Serviettes "DAILY Collection" Serviettes "DAILY Collection" Retour Serviettes 24 x 24 cm Serviettes 32 x 32 cm Serviettes en tissu "Royal Collection" Serviettes en tissu "Royal Collection" Retour Serviettes décorées 40 x 40 cm Serviettes unies 25 x 25 cm Serviettes unies 33 x 33 cm Serviettes unies 40 x 40 cm Serviettes unies 48 x 48 cm Serviettes emballage en papier Serviettes unies Serviettes unies Retour Serviettes 1 couche Serviettes 2 couches Serviettes 3 couches Nappes & chemins Nappes & chemins Retour Surnappes de table Surnappes de table Retour Surnappes en non-tissé - enduite Surnappes en PV-tissu Surnappes en tissu Surnappes en non-tissé Nappes de table Nappes de table Retour Nappes en non-tissé - enduite Nappes en airlaid Nappes en plastique Nappes à motifs Nappes en papier Nappes en PV-tissue Nappes en tissu Nappes en non-tissé Chemins de table Chemins de table Retour Chemins en non-tissé - enduite Chemins en airlaid Chemins en jute Chemins en PV-tissu Chemins en tissu Chemins en tissu-airlaid Chemins en non-tissé Sets de table Sets de table Retour Sets de table en non-tissé - enduite Sets de table en papier Sets de table en PV-tissu Sets de table en tissu Sets de table en non-tissé Bougies Bougies Retour Bougies parfumées Bougies parfumées Retour Bougies parfumées en verre Huiles parfumées Bougies cylindriques parfumées Bougies chauffe-plat parfumées Cires parfumées Bougies pour cheminées & lanternes Bougies spéciales Bougies spéciales Retour Bougies en verre Bougies rondes Bougies par thèmes & occasions Bougies par thèmes & occasions Retour Bougies d'anniversaire Bougies funéraires Bougies de Noël Bougies rustiques Bougies de chandelier & bougies baton Bougies de stéarine Bougies pilier Bougies chauffe-plats Bougies de table Bougeoirs Produits d'hygiène & matériel médical Produits d'hygiène & matériel médical Retour Gants jetables Gants jetables Retour Gants en coton Système d'enfilage des gants "Clean Hands" Gants en latex Gants en nitrile Gants en PE Gants anti-coupures Gants en vinyl Matériel hôtellerie Sachets hygiéniques Produits d'hygiène en papier & tissu Produits d'hygiène en papier & tissu Retour Draps d'examens Tissus rafraîchissantes Essuie-touts Essuie-mains en papier Rouleaux de tissu de nettoyage Papiers toilettes Distributeurs de produits d'hygiène Vêtements jetables Vêtements jetables Retour Charlottes, calots & toques Blouses, tabliers & combinaisons Masques de protection Surchaussures Pansements auto-adhésifs Trousses de secours & premiers secours Ustensiles et produits de nettoyage Ustensiles et produits de nettoyage Retour Sacs poubelles Sacs poubelles Retour Sacs poubelles biodégradables Petits sacs poubelles Grands sacs poubelle Éponges Éponges Retour Éponges de nettoyage Éponges vaisselles & métalliques Chiffons & lingettes Chiffons & lingettes Retour Lingettes multi-usage Chiffons microfibres Fête & Déco Fête & Déco Retour Ballons Ballons Retour Ballons - unis Ballons - couleurs assorties Ballons pour anniversaire Ballons pour mariage Ballons avec formes Ballons avec motif Accessoires Ballons chiffres Déco murale & déco de salle Déco murale & déco de salle Retour Guirlandes Papiers crépons Confettis & serpentins Lampions & lanternes Boules & rosaces Sets d'articles de fête Sets d'articles de fête Retour Fête de la Bière Clown Licorne Fêtes Funny Monsters Football Graphic Leaves Anniversaires enfant Little Dancer Papillons Pastilles Pirates Princesse Poppy Super-héros Autres accessoires de fête Autres accessoires de fête Retour Cendriers jetables Gravillons de table Bougies d'anniversaire Papiers cadeaux Articles de jeux & cadeaux Décoration de dispersion Occasions, thèmes & saisons Occasions, thèmes & saisons Retour Décoration bavaroise & accessoires Déco de Carnaval & accessoires Déco de football & accessoires Déco de mariage & accessoires Déco de pays & accessoires Déco de pays & accessoires Retour Déco d'Allemagne Déco de France Déco d'Italie Déco de Pays-Bas Déco d'Autriche Déco de Suède Déco d'Espagne Déco des USA Déco de Pâques et printemps & accessoires Sets d'articles de fête Sets d'articles de fête Retour Fête de la Bière Clown Licorne Fêtes Funny Monsters Football Graphic Leaves Anniversaire d'enfants Little Dancer Papillons Pastilles Pirates Princesse Poppy Super-héros Déco de Nouvel An & accessoires Déco d'automne & accessoires Décorations de Noël & accessoires Décorations de Noël & accessoires Retour Assiettes & gobelets de Noël Papier cadeaux de Noël Bougies de Noël Serviettes pour Noël Nappes de Noël Sacs cadeaux de Noël Kit décorations "Chequers Tree" Kit décorations "Christmas Shine" Kit décorations "Golden Star" Kit décorations "Just Stars" Kit décorations "Rising Star" Kit décorations "Stardust" Kit décorations "Winterly" Déco de marché de Noël & accessoires Nouveautés Promos Remise Remise Inspirations Inspirations Durabilité * Vaisselles biodégradables Vaisselles biodégradables * Promesse environementable Promesse environementable Durabilité Durabilité Retour Vaisselles biodégradables Vaisselles biodégradables Promesse environementable Promesse environementable Onlineshops * www.papstar-shop.de www.papstar-shop.de * www.papstar-shop.at www.papstar-shop.at * www.papstar-shop.nl www.papstar-shop.nl * www.papstar-shop.se www.papstar-shop.se Onlineshops Onlineshops Retour www.papstar-shop.de www.papstar-shop.de www.papstar-shop.at www.papstar-shop.at www.papstar-shop.nl www.papstar-shop.nl www.papstar-shop.se www.papstar-shop.se * Tous les produits Vaisselles biodégradables Assiettes & bols biodégradables Assiettes & bols en résidus agricoles Assiettes & bols en bambou Assiettes & bols en bois Assiettes & bols en carton Assiettes & bols en feuille de palmier Assiettes & bols en canne à sucre Gobelets biodégradables Gobelets à café Gobelets en carton Gobelets en PLA Gobelets en canne à sucre Pailles biodégradables Pailles en bambou Pailles en carton Pailles en paille Couverts biodégradables Couverts en bambou Couverts en bois Couverts en carton Couverts en feuille de palmier Mises en bouche biodégradable Assiettes & bols en bambou & palmier Assiettes & bols en bois Assiettes & bols en canne à sucre Piques & brochettes Emballages écologiques Pots de glace Boîtes en carton Boîtes en canne à sucre Papiers emballages alimentaires Moules jetables Barquettes repas Boîtes à pizza Barquettes en carton Sacs à goûter Sacs en papier & PLA Plateaux traiteur & boîtes traiteurs Barquettes en PLA Vaisselles jetables de fête Cure-dents, piques et brochettes Assiettes & bols Pots à dessert Pots à sauce Bols jetables Bols en aluminium Bols en carton Bols en plastique Bols en bambou Bols en CPLA Bols en bois Bols en feuille de palmier Bols en canne à sucre Assiettes jetables Assiettes en carton Assiettes en résidus agricoles Assiettes en bambou Assiettes en bois Assiettes en feuille de palmier Assiettes en canne à sucre Mises en bouche Assiettes & bols en bambou & palmier Assiettes & bols en bois Assiettes & bols en plastique Assiettes & bols en canne à sucre Bols à salade Pots à soupe Gobelets & verres Accessoires de bar & boissons Décorations pour cocktails Dessous de verre Agitateurs Couvercles Distributeurs de gobelets Plateaux porte-gobelets Verres jetables Flûtes à champagne Gobelets boissons chaudes Gobelets pour distributeur Gobelets à café Tasses à café Gobelets isothermes Gobelets en canne à sucre Gobelets boissons froides Gobelets en PLA Gobelets en carton Gobelets à liqueur Gobelets coniques Gobelets en canne à sucre Gobelets réutilisables Pailles Pailles en bambou & paille Pailles en carton Couverts Couverts en bambou Pochettes à couverts Couverts jetables - jeux & individuels Cuillères à glace & piques frites Couverts & pipettes Couverts en bois Pics en bois Couverts réutilisables Couverts en carton Couverts en feuille de palmier Pics et brochettes Agitateurs Cure-dents Emballages jetables Matériel boulangerie Moules & caissettes en papier Dentelles ovales Dentelles pour plateaux Dentelles en papier Supports pour gâteaux en carton Boîtes à gateaux Emballages alimentaires Barquettes en aluminium Pots de glace Pots à sauce Boîtes repas & hamburgers Barquettes snacking Bols à salade Barquettes & films scellables Boîtes snacking Pots à soupe Boîtes & plateux traiteur Films & papiers alimentaires Papiers aluminiums Papiers sulfurisés Papiers ingraissables Films étirables Manchettes pour volailles Plateaux de service Sacs avec poignée Sacs & sachets Sacs de congélation Sacs & sachets en papier Sacs & sachets en plastique Cornets de frites Poches à douilles Sacs sous vide Sacs isolants Conteneurs isothermes Vaisselle réutilisable Gobelets réutilisables Couverts réutilisables Emballages réutilisables Serviettes Pochettes à couverts Serviettes décorées Serviettes décorées 25 x 25 cm Serviettes décorées 33 x 33 cm Serviettes décorées 40 x 40 cm Serviettes pour mariage Serviettes de Noël Serviettes "DAILY Collection" Serviettes 24 x 24 cm Serviettes 32 x 32 cm Serviettes en tissu "Royal Collection" Serviettes décorées 40 x 40 cm Serviettes unies 25 x 25 cm Serviettes unies 33 x 33 cm Serviettes unies 40 x 40 cm Serviettes unies 48 x 48 cm Serviettes emballage en papier Serviettes unies Serviettes 1 couche Serviettes 2 couches Serviettes 3 couches Nappes & chemins Surnappes de table Surnappes en non-tissé - enduite Surnappes en PV-tissu Surnappes en tissu Surnappes en non-tissé Nappes de table Nappes en non-tissé - enduite Nappes en airlaid Nappes en plastique Nappes à motifs Nappes en papier Nappes en PV-tissue Nappes en tissu Nappes en non-tissé Chemins de table Chemins en non-tissé - enduite Chemins en airlaid Chemins en jute Chemins en PV-tissu Chemins en tissu Chemins en tissu-airlaid Chemins en non-tissé Sets de table Sets de table en non-tissé - enduite Sets de table en papier Sets de table en PV-tissu Sets de table en tissu Sets de table en non-tissé Bougies Bougies parfumées Bougies parfumées en verre Huiles parfumées Bougies cylindriques parfumées Bougies chauffe-plat parfumées Cires parfumées Bougies pour cheminées & lanternes Bougies spéciales Bougies en verre Bougies rondes Bougies par thèmes & occasions Bougies d'anniversaire Bougies funéraires Bougies de Noël Bougies rustiques Bougies de chandelier & bougies baton Bougies de stéarine Bougies pilier Bougies chauffe-plats Bougies de table Bougeoirs Produits d'hygiène & matériel médical Gants jetables Gants en coton Système d'enfilage des gants "Clean Hands" Gants en latex Gants en nitrile Gants en PE Gants anti-coupures Gants en vinyl Matériel hôtellerie Sachets hygiéniques Produits d'hygiène en papier & tissu Draps d'examens Tissus rafraîchissantes Essuie-touts Essuie-mains en papier Rouleaux de tissu de nettoyage Papiers toilettes Distributeurs de produits d'hygiène Vêtements jetables Charlottes, calots & toques Blouses, tabliers & combinaisons Masques de protection Surchaussures Pansements auto-adhésifs Trousses de secours & premiers secours Ustensiles et produits de nettoyage Sacs poubelles Sacs poubelles biodégradables Petits sacs poubelles Grands sacs poubelle Éponges Éponges de nettoyage Éponges vaisselles & métalliques Chiffons & lingettes Lingettes multi-usage Chiffons microfibres Fête & Déco Ballons Ballons - unis Ballons - couleurs assorties Ballons pour anniversaire Ballons pour mariage Ballons avec formes Ballons avec motif Accessoires Ballons chiffres Déco murale & déco de salle Guirlandes Papiers crépons Confettis & serpentins Lampions & lanternes Boules & rosaces Sets d'articles de fête Fête de la Bière Clown Licorne Fêtes Funny Monsters Football Graphic Leaves Anniversaires enfant Little Dancer Papillons Pastilles Pirates Princesse Poppy Super-héros Autres accessoires de fête Cendriers jetables Gravillons de table Bougies d'anniversaire Papiers cadeaux Articles de jeux & cadeaux Décoration de dispersion Occasions, thèmes & saisons Décoration bavaroise & accessoires Déco de Carnaval & accessoires Déco de football & accessoires Déco de mariage & accessoires Déco de pays & accessoires Déco d'Allemagne Déco de France Déco d'Italie Déco de Pays-Bas Déco d'Autriche Déco de Suède Déco d'Espagne Déco des USA Déco de Pâques et printemps & accessoires Sets d'articles de fête Fête de la Bière Clown Licorne Fêtes Funny Monsters Football Graphic Leaves Anniversaire d'enfants Little Dancer Papillons Pastilles Pirates Princesse Poppy Super-héros Déco de Nouvel An & accessoires Déco d'automne & accessoires Décorations de Noël & accessoires Assiettes & gobelets de Noël Papier cadeaux de Noël Bougies de Noël Serviettes pour Noël Nappes de Noël Sacs cadeaux de Noël Kit décorations "Chequers Tree" Kit décorations "Christmas Shine" Kit décorations "Golden Star" Kit décorations "Just Stars" Kit décorations "Rising Star" Kit décorations "Stardust" Kit décorations "Winterly" Déco de marché de Noël & accessoires * Nouveautés * Promos * Remise Remise * Inspirations Inspirations * Durabilité * Vaisselles biodégradables Vaisselles biodégradables * Promesse environementable Promesse environementable Durabilité Durabilité Retour Vaisselles biodégradables Vaisselles biodégradables Promesse environementable Promesse environementable * Onlineshops * www.papstar-shop.de www.papstar-shop.de * www.papstar-shop.at www.papstar-shop.at * www.papstar-shop.nl www.papstar-shop.nl * www.papstar-shop.se www.papstar-shop.se Onlineshops Onlineshops Retour www.papstar-shop.de www.papstar-shop.de www.papstar-shop.at www.papstar-shop.at www.papstar-shop.nl www.papstar-shop.nl www.papstar-shop.se www.papstar-shop.se COMMANDER EN UTILISANT VOTRE COMPTE Adresse email Mot de passe S'inscrire Mot de passe oublié ? COMMANDER EN TANT QUE NOUVEAU CLIENT La création d’un compte possède de nombreux avantages : * Voir le statut de la commande et de l’expédition * Suivi de la commande * Commandez plus rapidement Créer un compte Allez au contenu 1. Retour | 2. Vous êtes ici : 3. Page d'accueil 4. Tous les produits 5. Vaisselles biodégradables 6. Gobelets biodégradables 7. Gobelets en PLA 8. Plateaux, carton "pure" 12 cm x 9,5 cm x 62 cm marron pour 6 gobelets PAPSTAR PLATEAUX, CARTON "PURE" 12 CM X 9,5 CM X 62 CM MARRON POUR 6 GOBELETS Article-Nr.: 87648 Porte-gobelets ou plateau de service pratique pour gobelets - Dimensions : 12 x 62 cm- pour 6 gobelets d'un diamètre supérieur... Toutes les informations sur l'article Unité de commande Unité de commande Carton 150 Piece (5 x 30) 72,00 € TVA comprise 48,00 centimes / Stück 60,00 € hors TVA 40,00 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité commandée : 150 Piece Quantité Ne saisissez que des chiffres entiers. À partir de: 72,00 € TVA comprise À partir de: TVA comprise À partir de: 72,00 € TVA comprise 48,00 centimes / Stück excl. frais de port Livraison offerte Livraison offerte Ajouter au panier Ajouter à ma liste Certifications du produit : PRODUITS APPARENTÉS Add to list PAPSTAR Gobelets pour boissons froides en P.L.A. "pure" 0,5 l transparent avec trait de mousse-idéal pour bière Article-Nr.: 11161 11,40 € TVA comprise 19,00 centimes / Stück 9,50 € hors TVA 15,83 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list Starpak Gobelets "Hurricane", PET 0,3 l Ø 9,5 cm · 11,7 cm transparent Article-Nr.: 11311 91,20 € TVA comprise 11,40 centimes / Stück 76,00 € hors TVA 9,50 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list Starpak Gobelets "Hurricane", PET 0,4 l Ø 9,5 cm · 12,9 cm transparent Article-Nr.: 11312 96,00 € TVA comprise 12,00 centimes / Stück 80,00 € hors TVA 10,00 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list Starpak Gobelets "Hurricane", PET 0,5 l Ø 9,5 cm · 14,9 cm transparent Article-Nr.: 11313 110,40 € TVA comprise 13,80 centimes / Stück 92,00 € hors TVA 11,50 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list * Top des ventes * Tendance PAPSTAR Gobelets pour boissons froides en P.L.A. "pure" 0,3 l transparent idéal pour biere-avec trait de mousse Article-Nr.: 16174 10,20 € TVA comprise 14,57 centimes / Stück 8,50 € hors TVA 12,14 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list PAPSTAR Gobelets pour boissons froides en P.L.A. "pure" 0,4 l Ø 9,5 cm · 13,2 cm transparent idéal pour biere Article-Nr.: 16175 11,10 € TVA comprise 15,86 centimes / Stück 9,25 € hors TVA 13,21 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list Starpak Verres à bière, PS, gobelets américains 0,4 l Ø 9,5 cm · 12 cm rouge/blanc Article-Nr.: 86413 46,08 € TVA comprise 28,80 centimes / Stück 38,40 € hors TVA 24,00 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. Add to list Starpak Verres "Hurricane", PET 0,28 l Ø 9,5 cm · 7,3 cm transparent Article-Nr.: 86806 81,60 € TVA comprise 10,20 centimes / Stück 68,00 € hors TVA 8,50 centimes / Stück En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible En stock. Livraison entre 2-4 jours ouvrés Article momentanément indisponible, délai de livraison: 5-10 jours ouvrés Article temporairement indisponible Quantité Ajouter au panier Ne saisissez que des chiffres entiers. * Description du produit * Fiche technique du produit * Avis Porte-gobelets ou plateau de service pratique pour gobelets - Dimensions : 12 x 62 cm - pour 6 gobelets d'un diamètre supérieur de 9,5 cm - Diamètre du creux : 8 cm - idéal pour une utilisation lors de festivals et lors de grands événements - Les gobelets présentés ne sont pas inclus PRODUIT STANDARD/CERTIFICATION: - Certifié FSC® Couleur marron Série pure Abréviation Plateaux, carton Largeur 9.5 Marque PAPSTAR No. d´article 87648 Product certifications fscmix Il n'y a pas encore d'avis sur ce produit Seul les utilisateurs enregistrés peuvent laisser un avis. Veuillez vous connecter ou créer un compte * Description du produit * Fiche technique du produit * Avis Porte-gobelets ou plateau de service pratique pour gobelets - Dimensions : 12 x 62 cm - pour 6 gobelets d'un diamètre supérieur de 9,5 cm - Diamètre du creux : 8 cm - idéal pour une utilisation lors de festivals et lors de grands événements - Les gobelets présentés ne sont pas inclus PRODUIT STANDARD/CERTIFICATION: - Certifié FSC® Couleur marron Série pure Abréviation Plateaux, carton Largeur 9.5 Marque PAPSTAR No. d´article 87648 Product certifications fscmix Il n'y a pas encore d'avis sur ce produit Seul les utilisateurs enregistrés peuvent laisser un avis. Veuillez vous connecter ou créer un compte DESCRIPTION DU PRODUIT Porte-gobelets ou plateau de service pratique pour gobelets - Dimensions : 12 x 62 cm - pour 6 gobelets d'un diamètre supérieur de 9,5 cm - Diamètre du creux : 8 cm - idéal pour une utilisation lors de festivals et lors de grands événements - Les gobelets présentés ne sont pas inclus PRODUIT STANDARD/CERTIFICATION: - Certifié FSC® FICHE TECHNIQUE DU PRODUIT Couleur marron Série pure Abréviation Plateaux, carton Largeur 9.5 Marque PAPSTAR No. d´article 87648 Product certifications fscmix AVIS Il n'y a pas encore d'avis sur ce produit Seul les utilisateurs enregistrés peuvent laisser un avis. Veuillez vous connecter ou créer un compte DERNIERS PRODUITS CONSULTÉS Voir le produit Obtenez un bon de 10 %! Abonnez-vous à notre lettre d’informations et économisez 10% sur votre prochaine commande. Avantages * Des réductions réservées uniquement aux abonnés * Des infos thématiques, les tendances et les événements saisonniers * Informations préliminaires sur les nouveaux produits de la gamme Se connecter Méthodes de paiement sécurisées * * * * * Commander en ligne en toute sécurité * * * Réseaux sociaux * * Support client E-Mail: shop@papstar.fr Téléphone: +33 372 602650 Lun-Vend. de 8h00 à 16h00 Autres options de contact Entreprise A propos de PAPSTAR Qualité et Environnement Catalogues Mentions légales Conditions générales de vente Réductions FAQs Juridique & Service Protection des données Informations sur la rétractation Frais d´expédition Paiement Contact Triman Vos avantages * Livraison gratuite à partir de 100 € d'achat HT / 120 € d'achat TVA incluse * Livraison en 2-4 jours ouvrables * Réductions supplémentaires à partir de 100 € d'achat net * Conditions spéciales et offres individuelles pour les commandes importantes * Plus de 4 000 articles de qualité * Une gamme élargie pour les utilisateurs professionnels de diverses branches * Expédition neutre sur le plan climatique avec DPD Contact PAPSTAR E-Commerce SARL 7 Place de la Gare FR 57200 Sarreguemines | France Questions, suggestions ou critiques? Notre équipe se tient avec plaisir à votre disposition ! * Service téléphone Nous sommes ouvert du: Lun-Vend. de 9h00 à 16h00 Téléphone: +33 372 602650 * Contact par courrier ou par e-mail PAPSTAR GmbH Daimlerstraße 4-8 DE 53925 Kall | Allemagne shop@papstar.fr * Foire aux questions - FAQ Vous y trouverez également des réponses à vos questions en dehors de nos heures d'ouverture MON PANIER x Article-Nr.: TVA comprise hors TVA Prix total Taxe Montant total Commander Voir le panier Chargement en cours... Protection acheteur 4,66 Très bien