Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Babeside ❤️ @scarsfordays | Special Gift for Special Love
Video Cover
@Scarsfordays
@Scarsfordays

Inspired by @scarsfordays, Lucy provides the sensory comfort and lifelike weight children with autism need. Not just a toy, but a soothing companion designed to bring peace and smiles.

Add To Cart
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids
Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids

Babeside Lucy 12"/16" Realistic Silicone Baby Inspired by @Scarsfordays – A Soothing Companion Loved by Moms & Kids

$139.99
$148.34
BUY NOW, PAY LATER
  • How it works?
  • Select one of the following as your payment method at checkout to pay in interest-free installments:

You must be over 18, a resident of the US, and meet the additional criteria to qualify. Late fees may apply. Loans to California residents made or arranged are pursuant to a California Finance Lenders Law license.

/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "fa941e8f-935d-4d16-a829-59083d7b0db8"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '8c5172b5-1cb7-4437-9e0b-61fb3b954968' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "8c5172b5-1cb7-4437-9e0b-61fb3b954968", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = 'fa941e8f-935d-4d16-a829-59083d7b0db8'; this.isRTL = SPZ.win.document.dir === 'rtl'; this.isAddingToCart_ = false; // 加购中状态 } static deferredMount() { return false; } buildCallback() { this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); this.setupAction_(); this.viewport_ = this.getViewport(); } mountCallback() { this.init(); // 监听事件 this.bindEvent_(); } async init() { this.handleFitTheme(); const data = await this.getDiscountList(); this.renderApiData_(data); } async getDiscountList() { const productId = '8c5172b5-1cb7-4437-9e0b-61fb3b954968'; const variantId = this.variant_id; const productType = 'default'; const reqBody = { product_id: productId, variant_id: variantId, discount_method: "DM_AUTOMATIC", customer: { customer_id: window.C_SETTINGS.customer.customer_id, email: window.C_SETTINGS.customer.customer_email }, product_type: productType } const url = `/api/storefront/promotion/display_setting/text/list`; const data = await this.xhr_.fetchJson(url, { method: "post", body: reqBody }).then(res => { return res; }).catch(err => { this.setContainerDisabled(false); }) return data; } async renderDiscountList() { this.setContainerDisabled(true); const data = await this.getDiscountList(); this.setContainerDisabled(false); // 重新渲染 抖动问题处理 this.renderApiData_(data); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } async renderApiData_(data) { const parentDiv = document.querySelector('.automatic_discount_container'); const newTplDom = await this.getRenderTemplate(data); if (parentDiv) { parentDiv.innerHTML = ''; parentDiv.appendChild(newTplDom); } else { console.log('automatic_discount_container is null'); } } doRender_(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); this.element.appendChild(el); }); } async getRenderTemplate(data) { const renderData = data || {}; return this.templates_ .findAndRenderTemplate(this.element, { ...renderData, isRTL: this.isRTL }) .then((el) => { this.clearDom(); return el; }); } setContainerDisabled(isDisable) { const automaticDiscountEl = document.querySelector('.automatic_discount_container_outer'); if(isDisable) { automaticDiscountEl.setAttribute('disabled', ''); } else { automaticDiscountEl.removeAttribute('disabled'); } } // 绑定事件 bindEvent_() { window.addEventListener('click', (e) => { let containerNodes = document.querySelectorAll(".automatic-container .panel"); let bool; Array.from(containerNodes).forEach((node) => { if(node.contains(e.target)){ bool = true; } }) // 是否popover面板点击范围 if (bool) { return; } if(e.target.classList.contains('drowdown-icon') || e.target.parentNode.classList.contains('drowdown-icon')){ return; } const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { node.classList.remove('open-dropdown'); }) // 兼容主题 this.toggleProductSticky(true); }) // 监听变体变化 document.addEventListener('dj.variantChange', async(event) => { // 重新渲染 const variant = event.detail.selected; if (variant.product_id == '8c5172b5-1cb7-4437-9e0b-61fb3b954968' && variant.id != this.variant_id) { this.variant_id = variant.id; this.renderDiscountList(); } }); } // 兼容主题 handleFitTheme() { // top 属性影响抖动 let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ productInfoEl.classList.add('force-top-auto'); } } // 兼容 wind/flash /hero 主题 (sticky属性影响 popover 层级展示, 会被其他元素覆盖) toggleProductSticky(isSticky) { let productInfoEl = null; if (window.SHOPLAZZA.theme.merchant_theme_name === 'Wind' || window.SHOPLAZZA.theme.merchant_theme_name === 'Flash') { productInfoEl = document.querySelector('.product-info-body .product-sticky-container'); } else if (window.SHOPLAZZA.theme.merchant_theme_name === 'Hero') { productInfoEl = document.querySelector('.product__info-wrapper .properties-content'); } if(productInfoEl){ if(isSticky) { // 还原该主题原有的sticky属性值 productInfoEl.classList.remove('force-position-static'); return; } productInfoEl.classList.toggle('force-position-static'); } } setupAction_() { this.registerAction('handleDropdown', (invocation) => { const discount_id = invocation.args.discount_id; const nodes = document.querySelectorAll('.automatic-container'); Array.from(nodes).forEach((node) => { if(node.getAttribute('id') != `automatic-${discount_id}`) { node.classList.remove('open-dropdown'); } }) const $discount_item = document.querySelector(`#automatic-${discount_id}`); $discount_item && $discount_item.classList.toggle('open-dropdown'); // 兼容主题 this.toggleProductSticky(); }); // 加购事件 this.registerAction('handleAddToCart', (invocation) => { // 阻止事件冒泡 const event = invocation.event; if (event) { event.stopPropagation(); event.preventDefault(); } // 如果正在加购中,直接返回 if (this.isAddingToCart_) { return; } const quantity = invocation.args.quantity || 1; this.addToCart(quantity); }); } // 加购方法 async addToCart(quantity) { // 设置加购中状态 this.isAddingToCart_ = true; const productId = '8c5172b5-1cb7-4437-9e0b-61fb3b954968'; const variantId = this.variant_id; const url = '/api/cart'; const reqBody = { product_id: productId, variant_id: variantId, quantity: quantity }; try { const data = await this.xhr_.fetchJson(url, { method: 'POST', body: reqBody }); // 触发加购成功提示 this.triggerAddToCartToast_(); return data; } catch (error) { error.then(err=>{ this.showToast_(err?.message || err?.errors?.[0] || 'Unknown error'); }) } finally { // 无论成功失败,都重置加购状态 this.isAddingToCart_ = false; } } showToast_(message) { const toastEl = document.querySelector("#apps-match-drawer-add_to_cart_toast"); if (toastEl) { SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast(message); }); } } // 触发加购成功提示 triggerAddToCartToast_() { // 如果主题有自己的加购提示,则不显示 const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy'); if (themeAddToCartToastEl) return; // 显示应用的加购成功提示 this.showToast_("Added successfully"); } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, `${ TAG }.${ name }`, data || {}); this.action_.trigger(this.element, name, event); } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } } SPZ.defineElement(TAG, SpzCustomProductAutomatic);
class SpzCustomDiscountBundle extends SPZ.BaseElement { constructor(element) { super(element); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } mountCallback() {} unmountCallback() {} setupAction_() { this.registerAction('showAddToCartToast', () => { const themeAddToCartToastEl = document.querySelector('#add-cart-event-proxy') if(themeAddToCartToastEl) return const toastEl = document.querySelector('#apps-match-drawer-add_to_cart_toast') SPZ.whenApiDefined(toastEl).then((apis) => { apis.showToast("Added successfully"); }); }); } buildCallback() { this.setupAction_(); }; } SPZ.defineElement('spz-custom-discount-toast', SpzCustomDiscountBundle);
class SpzCustomDiscountFlashsale extends SPZ.BaseElement { constructor(element) { super(element); this.xhr_ = SPZServices.xhrFor(this.win); this.getFlashSaleApi = "\/api\/storefront\/promotion\/flashsale\/display_setting\/product_setting"; this.timer = null; this.variantId = "fa941e8f-935d-4d16-a829-59083d7b0db8"; // 促销活动数据 this.flashsaleData = {} } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // 挂载bind函数 解决this指向问题 this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } mountCallback() { // 获取数据 this.getData(); this.element.onclick = (e) => { const cur = this.win.document.querySelector(".app_discount_flashsale_desc"); const setting = this.flashsaleData.product_setting; const landingUrl = `/promotions/discount-default/${this.flashsaleData.discount_info.id}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element) && e.target !== cur) { this.win.open(finalUrl, '_blank', 'noopener'); } } // 绑定 this.viewport_.onResize(this.resize); // 监听子款式切换,重新渲染 this.win.document.addEventListener('dj.variantChange', this.switchVariant); } unmountCallback() { // 解绑 this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { this.render(); }, 200) } switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == '8c5172b5-1cb7-4437-9e0b-61fb3b954968' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } getData() { const reqBody = { product_id: "8c5172b5-1cb7-4437-9e0b-61fb3b954968", product_type: "default", variant_id: this.variantId } this.flashsaleData = {}; this.win.fetch(this.getFlashSaleApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { this.flashsaleData = await response.json(); this.render(); } else { this.clearDom(); } }).catch(err => { this.clearDom(); }); } clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } render() { this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), inProductDetail: appDiscountUtils.inProductBody(this.element), flashsaleData: this.flashsaleData, image_domain: this.win.SHOPLAZZA.image_domain, }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) } } SPZ.defineElement('spz-custom-discount-flashsale', SpzCustomDiscountFlashsale);
The current produc does not participate any Rebate. Switch the participating product to check the design.
(This prompt will not be displayed on the client-side.)
var theme = window.C_SETTINGS && C_SETTINGS.theme && C_SETTINGS.theme.merchant_theme_name; var isFlash = /Flash/gi.test(theme); var isGeek = /Geek/gi.test(theme); var isNova23 = /Nova 2023/gi.test(theme); var isWind = /Wind/gi.test(theme); var isOnePage = /OnePage/gi.test(theme); var isHero = /Hero/gi.test(theme); var isBoost = /Boost/gi.test(theme); var isEva = /Eva/gi.test(theme); var isFarida = /Farida/gi.test(theme); var isPluto = /Pluto/gi.test(theme); var isLifeStyle = /Life Style/gi.test(theme); if(window.self === window.top) { (window.disabled_exts ||=[]).push('product_detail_rebate'); } class SpzRebateComponent extends SPZ.BaseElement { constructor(element) { super(element); } xhr_ = SPZServices.xhrFor(this.win); viewport_ = this.getViewport(); action_ = null; lang = document.documentElement.lang || 'en-US'; landPage = "\/promotions\/rebate\/"; pageType = 1; cart = []; initData = null; rebateInfo = null; renderData = null; footerImage = `${this.win.SHOPLAZZA["image_domain"]}oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg`; isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.initData = this.getProduct(); this.action_ = SPZServices.actionServiceForDoc(this.element); this.registerAction("triggerGetRenderData", () => { const event = SPZUtils.Event.create(this.win, "triggerGetRenderData", this.renderData); this.action_.trigger(this.element, "getRenderData", event); }); this.registerAction("bindPropagation", () => { document.querySelector(".product_detail_rebate_list").addEventListener("click", e => { e.stopPropagation(); this.win.sa && this.win.sa.track("plugin_rebate_promotion_click", { plugin_timestamp: Date.now(), plugin_location: "info", product_id: this.initData.product.id, discount_id: this.rebateInfo.discount_list.map((item) => item.discount_id)[0], }); }); }); } async mountCallback() { document.addEventListener("dj.variantChange", e => { const data = e.detail; if (document.querySelector("#product-select-modal.show")) return; this.initData = this.getProductJson(data); if (this.initData && this.initData.product && data.product && this.initData.product.id === data.product.id) { this.initRebate(this.initData, true); } else { this.getRebateInfo(); } }); document.addEventListener("dj.addToCart", e => { const v = e.detail; this.rebateInfo && this.win.sa && this.win.sa.track("plugin_rebate_atc", { variant_discount_id: this.getVariantDiscountId(v.variant_id).map(item => item.discount_id), discount_ids: this.rebateInfo.discount_list.map(item => item.discount_id), variant_id: v.variant_id, product_id: v.product_id, price: v.item_price, number: v.number, }); }); await this.getRebateInfo(); setTimeout(()=>{ if (document.querySelector(".plugin-container__bottom-fixed")) { this.showDiscountPopupsInfoBar(); } else { this.win.addEventListener("extloaded", () => { this.showDiscountPopupsInfoBar(); }); } },1000) } getProductJson = (mergeData = {}) => { const productJson = document.querySelector("#product-json"); let productJsonData = {}; if (productJson && productJson.textContent) { try { productJsonData = JSON.parse(productJson.textContent); } catch (e) {} } // 深度合并函数 const deepMerge = (target, source) => { if (source === null || source === undefined) { return target; } if (typeof source !== 'object' || Array.isArray(source)) { return source; } const result = { ...target }; for (const key in source) { if (source.hasOwnProperty(key)) { if ( typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key]) && typeof target[key] === 'object' && target[key] !== null && !Array.isArray(target[key]) ) { result[key] = deepMerge(target[key], source[key]); } else { result[key] = source[key]; } } } return result; }; return deepMerge(productJsonData, mergeData); } getProduct = (() => { document.addEventListener("dj.variantChange", e => { if (!e.detail || !e.detail.product) return; let productJsonData = getProductJson(e.detail); if (this.win.jQuery && this.win.jQuery.fn && this.win.jQuery(document).data("djproduct") && productJsonData) { this.win.jQuery(document).data("djproduct", productJsonData); } }); return () => { let productData = null; if (this.win.jQuery && this.win.jQuery.fn) { try { let product = this.win.jQuery(document).data("djproduct"); if (product) { productData = JSON.parse(JSON.stringify(product)); } else { productData = null; } } catch (error) { productData = null; } } if (!productData) { const productJson = document.querySelector("#product-json"); productData = (productJson && productJson.textContent && JSON.parse(productJson.textContent)) || null; } return productData; }; })(); clearRebateInfoDom = () => { // 1. 清除 apis.render 渲染的 DOM (app_rebate_section) const rebateSection = document.getElementById('app_rebate_section'); if (rebateSection) { const rebateRuleSection = rebateSection.querySelector('.rebate_rule_section'); if (rebateRuleSection) { rebateRuleSection.remove(); } } // 2. 清除 templates_.renderTemplate 渲染的 DOM (app_rebate_block) const rebateBlock = document.getElementById('app_rebate_block'); if (rebateBlock) { const appRebateList = rebateBlock.querySelector('.app_rebate_list'); if (appRebateList) { appRebateList.remove(); } } // 3. 清除 insertProductDetailRebateTag 插入的 DOM // 清除所有 rebate-tag 元素 document.querySelectorAll('.slider-discount-tag.dj_skin_product_title.rebate-tag').forEach(tag => { tag.remove(); }); // 移除 data-rebate-tag 属性 const productContainer = document.querySelector('.product-details, .product-details, .page_container, .product-images, [data-section-type="product"]'); if (productContainer && productContainer.hasAttribute('data-rebate-tag')) { productContainer.removeAttribute('data-rebate-tag'); } }; initRebate = this.win.SPZCore.Types.debounce( this.win, (async (data) => { let discount_list = Object.assign([], this.rebateInfo?.discount_list); /* 按子商品的多少对优惠信息进行排序 */ discount_list && discount_list.sort((a, b) => { return b.variant_ids.length - a.variant_ids.length; }); /* 选中子商品时 筛选子商品的优惠信息 */ if (data.selected && data.selected.id) { discount_list = this.getVariantDiscountId(data.selected.id); } /* 无满减信息 */ if (!(discount_list && discount_list.length)) { this.clearRebateInfoDom(); return; } const isSection = !!document.querySelector( `div[data-section-type^="shoplazza://apps/publicapp/blocks/rebate"] #rebate_custom_component` ); if ( (this.rebateInfo.rebate_type == "sku" && data && data.selected && data.selected.id) || this.rebateInfo.rebate_type == "spu" ) { let nowLandpage = this.landPage; if (discount_list[0]) { nowLandpage = this.landPage + discount_list[0].discount_id || ""; } const info = { rebate: discount_list[0], maxShowCount: this.win.innerWidth > 768 ? 3 : 1, landPage: nowLandpage, modalFooterImg: `url(${`${this.win.SHOPLAZZA["image_domain"]}oss/operation/e8ebb03dbb710457ca3b4b6a70898ab2.svg`})`, }; this.renderData = info; if(isSection) { SPZ.whenApiDefined( document.getElementById("app_rebate_section") ).then(apis => { apis.render(info, true); }); } else { // 重新渲染 抖动问题处理 this.templates_ = SPZServices.templatesForDoc(); const newTplDom = await this.templates_.renderTemplate(document.querySelector('#appRebateBlockTpl'), info) const parentDiv = document.querySelector('#app_rebate_block'); const oldDom = parentDiv.querySelector('.app_rebate_list'); if(oldDom){ parentDiv.replaceChild(newTplDom, oldDom); } else { parentDiv.appendChild(newTplDom); } } } this.insertProductDetailRebateTag(this.rebateInfo.tag); var pluginCurrencyEvent = new CustomEvent("plugin_currency_update"); document.dispatchEvent(pluginCurrencyEvent); }).bind(this), 10 ); getRebateInfo = async () => { if (this.initData && this.initData.product && this.initData.product.id) { var variant_ids = this.initData.product.variants.map(variant => variant.id); const res = await this.xhr_.fetchJson( "\/api\/discount-rebate\/product-discount", { method: "POST", body: { product_id: this.initData.product.id, product_type: this.initData.product.product_type, variant_ids: variant_ids, }, } ); if (!SPZCore.Types.isEmptyObject(res.rebate_info)) { res.rebate_info.tag = res.tag; res.rebate_info.rebate_type = res.rebate_type; this.rebateInfo = res.rebate_info; this.initRebate(this.initData); } else { if (this.win.top !== this.win.self) { const noActivity = document.getElementById("no-rebate-activity"); noActivity && (noActivity["style"].display = "block"); } } } }; getVariantDiscountId = (variant_id) => { if (!variant_id || !this.rebateInfo) return []; var rebateId = this.rebateInfo.variant_discount_map[variant_id]; return this.rebateInfo.discount_list.filter(item => item.discount_id == rebateId) || []; }; insertProductDetailRebateTag = (tag) => { if (!tag) return // 旧判断逻辑 const productSelectModal = document.querySelector('#product-select-modal'); if (productSelectModal && productSelectModal.classList.contains('show')) { return; } setTimeout(() => { var $tag_container = []; if (isNova23) { $tag_container = document.querySelectorAll('.product-details .product-images-container'); } else if (isFlash) { $tag_container = document.querySelectorAll('.product-detail .product-images .product-main-images-container'); } else if (isGeek) { $tag_container = document.querySelectorAll('.product-images #product-images-inner-container spz-carousel .i-spzhtml-slide-item'); } else if (isWind) { $tag_container = document.querySelectorAll('.product-detail .product-images-container .i-spzhtml-slides-container'); } else if (isOnePage) { $tag_container = document.querySelectorAll('.product-details .product-main-images'); } else if (isHero) { $tag_container = document.querySelectorAll('.product-detail #product-images-container #product-images-carousel .spz-carousel-slide'); } else if (isBoost) { $tag_container = document.querySelectorAll('.boost-product-detail .product-image__layout-list .slides .slides-item .product-info__slide .slider-zoom'); } else if (isEva) { $tag_container = document.querySelectorAll('.page_container [data-section-type="product"] .support-slick'); } else if (isFarida) { $tag_container = document.querySelectorAll('.product-details .product-images-container'); } else if (isLifeStyle) { $tag_container = document.querySelectorAll('.page_container [data-section-type="product_detail"] .sep-slider,.support-slick'); } else if (isPluto) { $tag_container = document.querySelectorAll('.page_container [data-section-type="product_detail"] .sep-slider,.support-slick'); } if($tag_container.length === 0) return; // 给商祥页添加满送插件的标识属性 const $product_container = document.querySelector('.product-details, .product-details, .page_container, .product-images, [data-section-type="product"]') if($product_container) { $product_container.setAttribute('data-rebate-tag', 'true'); } // 部分主题需要调整样式 if (isWind) { Array.from($tag_container).forEach(container => { container.style.position = 'relative'; }); } document.querySelectorAll('.slider-discount-tag.dj_skin_product_title.rebate-tag').forEach(tag => tag.remove()); // 遍历所有容器并插入标签 Array.from($tag_container).forEach(container => { container.insertAdjacentHTML('beforeend', `<div class="slider-discount-tag dj_skin_product_title rebate-tag">${tag}</div>`); }); }, 1000) }; fetchInfoBar = async () => { let discount_ids = []; if (this.pageType === 1) { discount_ids = this.rebateInfo && this.rebateInfo.discount_list.map(item => item.discount_id); } else if (this.pageType === 38) { discount_ids = [this.win.rebateObj.rebateCollection_id] || []; } const productObj = this.getProduct(); const { cart } = await this.xhr_.fetchJson('/api/cart') return this.xhr_.fetchJson("\/api\/discount-rebate\/global-text", { method: "POST", body: { product_type: productObj && productObj.product && productObj.product.product_type, line_items: (cart?.line_items || []).map(item => ({ variant_id: item.variant_id, product_id: item.product_id, quantity: item.quantity, price: item.price, selected: !item.unchecked, })), discount_ids: discount_ids, }, }); }; renderBottomBanner = res => { if (!res.tips) return; document.querySelector(".discount__info-bar")?.remove(); var bar_style = `background:linear-gradient(90deg,${res.config.background_color_start},${res.config.background_color_end}); color:${res.config.color};`; let data = { tips: res.tips, landPage: this.landPage + res.id, bar_style }; const html = SPZCore.Dom.htmlFor(this.element); const banner = html([ `<a impr="1" imprevt="1" id="rebate_bottom_bar" href=${data.landPage} class="discount__info-bar text-truncate" data-activity-type="rebate" style="${data.bar_style}">${data.tips}</a>`, ]); document.querySelector(".plugin-container__bottom-fixed").appendChild(banner); const pluginCurrencyEvent = new CustomEvent("plugin_currency_update"); document.dispatchEvent(pluginCurrencyEvent); if (res.id) { var trackParams = { page: this.pageType, discount_id: res.id, product_id: this.getProduct()?.product.id, }; banner.addEventListener("click", () => { this.win.sa && this.win.sa.track("plugin_rebate_promotion_click", { plugin_timestamp: Date.now(), plugin_location: "bottom_bar", product_id: trackParams.product_id, discount_id: trackParams.discount_id, }); }); this.win.sa && this.win.sa.track("plugin_rebate_banner_pv", trackParams); } }; showDiscountPopupsInfoBar = () => { if ([13, 14, 19, 30, 31].includes(this.pageType)) return; if (document.querySelector(".plugin-container__bottom-fixed .discount__info-bar")) return; this.fetchInfoBar().then(this.renderBottomBanner); document.addEventListener("dj.cartChange", () => { this.fetchInfoBar().then(this.renderBottomBanner); }); }; } SPZ.defineElement("spz-custom-rebate", SpzRebateComponent);
(function () { try { const getProduct = () => { const productJson = document.querySelector('#product-json'); if (productJson?.textContent) { return JSON.parse(productJson.textContent); } if (window.jQuery) { const $product = window.jQuery?.(document)?.data('djproduct'); const productData = JSON.parse(JSON.stringify($product || {})); return productData || {}; } return {}; }; const blockDomId = 'pm-block-afterpay-message-1539149753700-7' const placeholderDomId = 'pm-block-afterpay-message-placeholder-1539149753700-7' const badgeTheme = "black-on-mint"; const size = "md"; const shopCurrencyCode = "USD"; const productDetail = getProduct(); let productPrice = productDetail?.selected?.price || 139.99; let settingConfig; const req = { ROOT_URL: (C_SETTINGS && C_SETTINGS.routes && C_SETTINGS.routes.root) || '', post: async (url, data = {}) => { try { const response = await fetch(req.ROOT_URL + url, { method: 'POST', headers: { 'Content-Type': 'application/json', }, ...data, body: JSON.stringify(data.body), }); const result = await response.json(); return result } catch (error) { throw new Error('post request error' + error); } }, get: async (url, data = {}) => { try { const response = await fetch(req.ROOT_URL + url); const result = await response.json(); return result } catch (error) { throw new Error('get request error' + error); } } } const supportLocaleMap = { AU: 'en-AU', NZ: 'en-NZ', US: 'en-US', CA: 'en-CA', GB: 'en-GB', FR: 'fr-FR', IT: 'it-IT', ES: 'es-ES', DE: 'de-DE', } const getPayLaterSetting = () => { return req.post('/api/payment/pay-later-setting', {body: {payment_channel: 'afterpay'}}).then(res => { const result = { ...res, afterpay_currency_locale: supportLocaleMap?.[res?.afterpay_support_country?.[0]] || supportLocaleMap?.US || 'en-US' } return result; }); } const getBlockDom = () => { const blockDOM = document.getElementById(blockDomId); if (!blockDOM) { return; } return blockDOM } function errorHandler() { const blockDOM = getBlockDom(); if (blockDOM) { blockDOM.style.display = 'none'; } } function hasAfterpayMessage() { // 获取目标元素 const targetElement = document.getElementById(placeholderDomId); // 判断目标元素是否有兄弟元素节点 const siblings = Array.from(targetElement.parentNode.children).filter(function (node) { return node.nodeType === Node.ELEMENT_NODE; }); return siblings.length > 1 } function renderAfterpay(data = {}) { const blockDOM = getBlockDom(); if (!blockDOM) { return; } blockDOM.innerHTML = null; const placeholderDOM = document.createElement('div'); placeholderDOM.id = placeholderDomId; placeholderDOM.className = 'pm-display-none' blockDOM.appendChild(placeholderDOM); blockDOM.style.display = 'block'; if (window.Afterpay && typeof Afterpay?.createPlacements === 'function' && !hasAfterpayMessage()) { try { Afterpay.createPlacements({ targetSelector: `#${placeholderDomId}`, attributes: { locale: data.afterpay_currency_locale, currency: data.afterpay_currency, amount: data.productPrice, size: size, badgeTheme: badgeTheme, } }); } catch (e) { console.error('payment-sdk:', e); } } } async function init(data = {}) { const blockDOM = getBlockDom(); if (!blockDOM) { return; } if (!settingConfig) { settingConfig = await getPayLaterSetting(); } if(data?.detail?.selected?.price){ productPrice = data?.detail?.selected?.price; } if ( !settingConfig || !settingConfig.afterpay_promo_msg_enabled || !settingConfig.afterpay_max_amount || !settingConfig.afterpay_min_amount || !settingConfig.afterpay_support_country || shopCurrencyCode !== settingConfig.afterpay_currency || Number(productPrice) <= Number(settingConfig.afterpay_min_amount) || Number(productPrice) > Number(settingConfig.afterpay_max_amount) ) { errorHandler(); return; } const scriptDOM = document.getElementById('pm-afterpay-sdk'); if (!scriptDOM) { window.addEventListener('Afterpay.ready', () => renderAfterpay({ ...settingConfig, productPrice })); const afterpaySDK = document.createElement('script'); afterpaySDK.id = 'pm-afterpay-sdk' afterpaySDK.src = 'https://js.afterpay.com/afterpay-1.x.js'; afterpaySDK.setAttribute('data-analytics-enabled', ''); afterpaySDK.setAttribute('data-min', settingConfig.afterpay_min_amount); afterpaySDK.setAttribute('data-max', settingConfig.afterpay_max_amount); afterpaySDK.async = true; afterpaySDK.onerror = errorHandler; document.body.appendChild(afterpaySDK); } else { renderAfterpay({...settingConfig, productPrice}); } } document.addEventListener('dj.variantChange', init); init(); } catch (e) { console.error('payment-sdk-afterpaymessage:', e) } })()
Style-Scarsfordays's Choice
Please select a style
Size-12 Inches
Please select a size
Gender-Girl
Please select a gender
Quantity

All sculptures, and photographs are owned by Babeside brand and protected by Federal copyrights, and we vigorously defend them!

Fast Shipping
30 Day Returns Warranty
Artist Made
Secure Payments

Every Detail Made to Feel Special

Ultra-soft silicone with a skin-like touch—smooth, flexible, and gently responsive for a natural feel.
Ultra-soft silicone with a skin-like touch—smooth, flexible, and gently responsive for a natural feel.
Hand-painted lifelike details, real baby skin feel.
Hand-painted lifelike details, real baby skin feel.
Hand-painted hair with fine, realistic detail
Hand-painted hair with fine, realistic detail
Ultra NaturalSimulated
Eyelash
Ultra NaturalSimulated
Eyelash

Loved by Gift Givers and Doll Collectors

Review Image
★★★★★
Emmanuelle

Adorable baby Lucy. I'm very happy with this sweet and cute doll. I waited 2 weeks for the delivey. The baby has a sont silicone body, her face is adorable. It's not sophistication reborn doll (they cost Munich more). I just have pb fixing the right size for the clothes.

Review Image
★★★★★
Nina

12 inch baby comes in a nice box can use it as a crib. Outfit, diaper cloth, bottle, socks, beanie, headband, birth tag, birth certificate and care instructions. Flexible silicone.

Review Image
★★★★★
Niki

Absolutely love this doll! It’s exactly what my daughter wanted! She’s very life like and great quality! I’m sure we will be ordering more!

Review Image
★★★★★
Tess

This baby is so freaking cute!!! Looks and feels so real. 10/10! Daughter is in absolute heaven!

Review Image
★★★★★
Raschel

I am very pleased with the quality of the baby I ordered. She is so pretty and looks like a real baby. My daughter is going to love her!

Review Image
★★★★★
Simone

She’s so beautiful, I’m so thrilled she is very life like beautiful Lucy hopefully my daughter will love her as much as I do

Review Image
★★★★★
Lucy

What a beautiful little doll! Ordered it for my daughters 4th birthday and we both adore it! So glad I went for the full silicone too, so realistic. Love that she comes with an outfit, bottle, nappy and rattle too!

A Gift of Love, Handled with Care

Gift-Ready From The Moment It Arrives

Gift-Ready From The Moment It Arrives

Tracked Shipping on Every Order

Tracked Shipping on Every Order

Easy Returns for Peace of Mind

Easy Returns for Peace of Mind

Safe & Heartfelt Checkout

Safe & Heartfelt Checkout

FAQ

Everything You Need to Know

What size and weight is the doll?

We offer Lucy in three realistic sizes to suit different needs. Our 16-inch version is the most popular choice (as seen on @scarsfordays!):

12" (30 cm): Approx. 1.5kg (3.3 lbs) — Perfect for smaller hands.

16" (40 cm): Approx. 2.5 kg (5.5 lbs) — The most realistic newborn feel.

What comes in the box?

12" Set Includes:

Doll, swaddle + hat, bottle, birth certificate, instruction card, wristband

16" Set Includes:

Doll, swaddle blanket, bottle, plush toy, diaper, birth certificate, instruction card, wristband

🎁 Gift-ready packaging included

Is this a good gift choice?

Absolutely! This lifelike reborn baby doll is a heartwarming gift for kids, collectors, and anyone seeking comfort and companionship.

With its realistic details and gift-ready packaging, it’s perfect for birthdays, holidays, and special moments. 💗

How long does shipping take?

United States: 5–7 business days

United Kingdom: 7–10 business days

Other regions: 10–15 business days

Delivery times may vary slightly depending on your location. Please refer to the shipping details shown at checkout for the most accurate estimate.

What makes the silicone material special?

Our doll is crafted from carefully selected, high-quality platinum-grade silicone, known for its softness, durability, and lifelike feel.

The raw materials are sourced from trusted global suppliers in regions renowned for premium silicone standards, ensuring consistent quality and safety.

The material is non-toxic, odor-free, and eco-friendly. Each doll undergoes multiple quality checks to ensure a smooth finish, realistic texture, and a safe, comforting experience.

Can I return it if it’s not the right fit?

Yes, absolutely. We offer a 30-day return guarantee for your peace of mind.

If the doll isn’t the right fit, or if you experience any quality issues, you’re welcome to contact us for a return or support. Please reach out to our customer service team before returning: support@babeside.com

We’re always here to help with any questions before or after your purchase. 💗

See More FAQs
Exclusive Deal for @scarsfordays Fans
Baby Doll in Gingham Baby Doll in Gingham
Soft Weighted Body for Real Baby Feel
Safe, Odor-Free Premium Silicone
A Comforting Companion Loved by Families