Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him
Paint by Numbers Kit -  Santa and Elf - Unique Gifts for Her/Him

Paint by Numbers Kit - Santa and Elf - Unique Gifts for Her/Him

$19.85
$19.85
Size: 16x20 Inch / 40x50 cm
Please select a size
Frame: No Frame
Please select a frame
const TAG = "spz-custom-product-automatic"; class SpzCustomProductAutomatic extends SPZ.BaseElement { constructor(element) { super(element); this.variant_id = '50507d91-48c8-41af-8c86-149fe6cca79f'; 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 = '3d11e4b6-6506-451a-983c-648a52498fca'; const variantId = this.variant_id; const productType = ''; 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 == '3d11e4b6-6506-451a-983c-648a52498fca' && 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 = '3d11e4b6-6506-451a-983c-648a52498fca'; 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() { // 同一页可能有多个 block 各自渲染本 snippet,导致逻辑元素 spz-custom-discount-toast(#appsAddCartToastFunc) 重复。 // 仅保留 DOM 中第一个实例,其余重复实例移除自身,保证逻辑元素及其 action 引用(appsAddCartToastFunc)唯一。 const funcs = document.querySelectorAll('#appsAddCartToastFunc'); if (funcs.length > 1 && this.element !== funcs[0]) { this.element.remove(); return; } // 全局折扣 toast 的弹出点分散在多个模板/组件里(含声明式 @atcError),无法逐一在弹出前前置, // 故挂载时幂等地去重并挂到 body;加购 toast 改为弹出前按需去重(见 showAddToCartToast) this.ensureSingleToastInBody_('cart_match_discount_toast_wrap'); } unmountCallback() {} // 同一页面可能有多个 block 各自渲染本 toast snippet(如商详的 discount_automatic + 购物车抽屉里的折扣横幅), // 导致 toast 外层出现重复 id。重复 id 下 getElementById/querySelector 及 SPZ 动作引用都只命中第一个, // 且被关进抽屉的那份会被抽屉的 transform/overflow 裁剪/错位。这里在挂载时幂等去重: // 只保留一份、移除多余的,并把保留的挂到 body(body 是 position:fixed 最安全的落点,避免被任何祖先裁剪)。可反复调用。 ensureSingleToastInBody_(id) { const els = Array.from(document.querySelectorAll('#' + id)); if (!els.length) return; els.slice(1).forEach((el) => el.remove()); const keep = els[0]; if (keep.parentNode !== document.body) { document.body.appendChild(keep); } } // 主题购物车抽屉是否打开 isInCartDrawer_() { return !!document.querySelector('[data-section-type="cart_drawer"] spz-sidebar[open]'); } setupAction_() { this.registerAction('showAddToCartToast', () => { // 抽屉内加购:主题本就不会有加购效果,统一弹插件自己的 toast // 非抽屉:主题有加购代理则沿用主题加购效果,否则插件兜底 const proxyEl = document.getElementById('add-cart-event-proxy'); const inDrawer = this.isInCartDrawer_(); if (!inDrawer && proxyEl) { return; } // 弹出前按需去重并挂到 body(幂等),避免重复 id 命中错对象或被抽屉裁剪/错位 this.ensureSingleToastInBody_('apps_add_cart_toast_wrap'); 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);
Quantity
Shipping
/** @private {string} */ class SpzCustomAnchorScroll extends SPZ.BaseElement { static deferredMount() { return false; } constructor(element) { super(element); /** @private {Element} */ this.scrollableContainer_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { this.viewport_ = this.getViewport(); this.initActions_(); } setTarget(containerId, targetId) { this.containerId = '#' + containerId; this.targetId = '#' + targetId; } scrollToTarget() { const container = document.querySelector(this.containerId); const target = container.querySelector(this.targetId); const {scrollTop} = container; const eleOffsetTop = this.getOffsetTop_(target, container); this.viewport_ .interpolateScrollIntoView_( container, scrollTop, scrollTop + eleOffsetTop ); } initActions_() { this.registerAction( 'scrollToTarget', (invocation) => this.scrollToTarget(invocation?.caller) ); this.registerAction( 'setTarget', (invocation) => this.setTarget(invocation?.args?.containerId, invocation?.args?.targetId) ); } /** * @param {Element} element * @param {Element} container * @return {number} * @private */ getOffsetTop_(element, container) { if (!element./*OK*/ getClientRects().length) { return 0; } const rect = element./*OK*/ getBoundingClientRect(); if (rect.width || rect.height) { return rect.top - container./*OK*/ getBoundingClientRect().top; } return rect.top; } } SPZ.defineElement('spz-custom-anchor-scroll', SpzCustomAnchorScroll); const STRENGTHEN_TRUST_URL = "/api/strengthen_trust/settings"; class SpzCustomStrengthenTrust extends SPZ.BaseElement { constructor(element) { super(element); this.renderElement_ = null; } isLayoutSupported(layout) { return layout == SPZCore.Layout.CONTAINER; } buildCallback() { this.xhr_ = SPZServices.xhrFor(this.win); const renderId = this.element.getAttribute('render-id'); SPZCore.Dom.waitForChild( document.body, () => !!document.getElementById(renderId), () => { this.renderElement_ = SPZCore.Dom.scopedQuerySelector( document.body, `#${renderId}` ); if (this.renderElement_) { this.render_(); } this.registerAction('track', (invocation) => { this.track_(invocation.args); }); } ); } render_() { this.fetchData_().then((data) => { if (!data) { return; } SPZ.whenApiDefined(this.renderElement_).then((apis) => { apis?.render(data); document.querySelector('#strengthen-trust-render-1539149753700').addEventListener('click',(event)=>{ if(event.target.nodeName == 'A'){ this.track_({type: 'trust_content_click'}); } }) }); }); } track_(data = {}) { const track = window.sa && window.sa.track; if (!track) { return; } track('trust_enhancement_event', data); } parseJSON_(string) { let result = {}; try { result = JSON.parse(string); } catch (e) {} return result; } fetchData_() { return this.xhr_ .fetchJson(STRENGTHEN_TRUST_URL) .then((responseData) => { if (!responseData || !responseData.data) { return null; } const data = responseData.data; const moduleSettings = (data.module_settings || []).reduce((result, moduleSetting) => { return result.concat(Object.assign(moduleSetting, { logos: (moduleSetting.logos || []).map((item) => { return moduleSetting.logos_type == 'custom' ? this.parseJSON_(item) : item; }) })); }, []); return Object.assign(data, { module_settings: moduleSettings, isEditor: window.self !== window.top, }); }); } } SPZ.defineElement('spz-custom-strengthen-trust', SpzCustomStrengthenTrust);

Personalization FAQs

Enter the requested text and/or upload your photo in the fields above. For the best print quality, use the original, highest-resolution image available and avoid screenshots, blurry photos, or social-media downloads. Images may be cropped slightly to fit the selected product size, so keep faces, text, and important details away from the edges. Please double-check all information before adding the item to your cart.

A digital proof is not provided automatically. To request one, leave a note at checkout or email us immediately after ordering with your order number. We will send the proof within 2 business days and begin production after your approval. Requesting a proof may extend the estimated delivery date, so please respond promptly.

Please contact us within 24 hours of placing your order. We will do our best to accommodate changes or cancellations, but they are only possible before production begins and cannot be guaranteed once your item has entered production.

Each item is made especially for you. Production normally takes 1–3 business days. The estimated delivery date shown on this page includes both production and shipping time. Tracking information will be emailed once your order ships. Orders requiring a proof or additional clarification may take longer.

If your item arrives damaged, defective, or different from the personalization details you submitted, please contact us as soon as possible with your order number and clear photos. Once confirmed, we will arrange a free replacement or another appropriate resolution. Because personalized items are made specifically for you, correctly produced items cannot be returned for change of mind, an incorrect size selection, or errors in customer-submitted details.

Paint by Number Kits

Santa Claus

Special Offer Today!

🎁 Use code PBN10 for an extra 10% OFF

✈️ Free Shipping on orders over $69

💝 Free Christmas Gift Bag for Orders over $49

What's in the Package

This paint by numbers kit contains all the necessary materials to create your work:

-1x numbered acrylic-based paint set
-1x pre-printed numbered high-quality canvas
-1x set of 3x paint brushes (Varying bristles - 1x small, 1x medium, 1x large)
-1x hanging kit, including 2x screws and 2x non-track hooks
-1x set of easy-to-follow instructions for use

Size:16x20 Inch / 40x50 cm

Packaging: Securely wrapped Packaging

Why you should order

Unleash your creativity with EASY, FUN, BEAUTIFUL DIY paint-by-numbers kits for adults. Spend a relaxing night in and create your own awesome wall art.

1 -Best Home Decoration- Paint your own wall art, even if you have zero artistic ability.

2 -Perfect Gift Idea- Whether it's for a birthday or Mother's Day, give a gift they'll love.

3 -Relax Take your mind off the anxieties of the workday.

More Details

High-Quality Canvas Material:

  • Strong durable material that can withstand the test of time

  • Colors printed on Canvas material always come out vibrant and stunning

  • Dense fabric that doesn’t tear easily

  • Numbers marked so it’s easy to follow

Premium Synthetic Brushes:

  • Our brushes are very easy to clean and don’t retain filth like most paint brushes

  • Highly moisture absorbent bristles that allow you to paint with ease

Stunning Watercolor Paints:

  • The color from the paints is naturally glossy and always stands out

  • Completely non-toxic and safe for the environment

Tips:

  • Use the paint directly and do not add any water.
  • If you fill in the wrong color, you can wait for the paint to get dry and then cover the wrong part with the correct color on the surface.
  • Please cover the lid of paint well when you do not use it, in case the paint gets dry.
  • The figures on the canvas may not be covered entirely, hope you do not mind.
  • The paint we offer is enough for normal use, please do not waste it in case of the paint shortage.

100% Satisfaction Guarantee

Customer Happiness is our No.1 priority. If you're unhappy with your purchase for any reason at all, let us know!

Production, Shipping & Returns

Please allow us to process your order within 1-3 business days.

  • US Standard Shipping 7-15 business days (DHL / USPS / FedEx)
  • UK/EUR Standard Shipping 7-12 business days (DHL / 4PX)
  • See our Return Policy

Support Team

Email us: support@BlingPainting.com

Bulk order: info@BlingPainting.com

Message us: ‪(302) 315-0808

We want you to be satisfied with the products you buy from us. 

We have 24/7/365 ticket and email support. Please contact us at support@BlingPainting.com if you need any assistance.