๐ŸŽ‰๐ŸŽ„Beginner-Friendly DIY Quilted Christmas Gnome Shelf Sitter Kit | Complete Kit with Coordinated Fabrics, Filling & Step-by-Step Guide Included ๐Ÿ’•

$29.99 $39.19 Save $9.20
/** * ไผ˜ๆƒ ็ ็ป„ไปถๆจกๅž‹็ฑป * ๅค„็†ไผ˜ๆƒ ็ ็š„ๆ˜พ็คบๅ’Œไบคไบ’้€ป่พ‘ */ 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 = "368192f0-fcea-4dfe-85eb-8f1fc527c0e1"; // 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 == '02127976-4dec-4247-9e01-664c57734a06' && 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: "02127976-4dec-4247-9e01-664c57734a06", 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);
Style๐ŸŽBuy 3— Save 15% Off & Free Shipping:  Christmas Poinsettia Gnome
Quantity
Share the love
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description

Stitch a Whimsical Christmas Character You’ll Love Displaying

Bring a little handmade magic home for the holidays with a soft, dimensional Christmas gnome created by you. โœจ

Each design combines coordinated patchwork fabrics, quilted textures, dangling striped legs, oversized curled hats, and festive embellishments to create a shelf sitter full of personality.

Choose from candy-inspired, woodland reindeer, traditional poinsettia, winter snowflake, or angel-blessing themes, then proudly display your finished gnome on a mantel, bookshelf, entryway table, or beside the Christmas tree.

This is a DIY craft kit, not a finished gnome.
preview


โค๏ธ Why You’ll Love It

๐Ÿงต Rich Patchwork Character

Mixed Christmas prints, soft filling, textured trims, and layered decorative details give every finished gnome a warm handmade appearance.

โœ” Coordinated patchwork fabrics
โœ” Soft dimensional construction
โœ” Long dangling legs
โœ” Oversized curled hat
โœ” Festive appliqué and embellishments
โœ” Charming from every angle
preview


๐ŸŽจ Five Holiday Personalities

Choose the Christmas style that best matches your home:

๐Ÿฌ Candy-Inspired — Playful sugarplum colors and sweet festive accents
๐ŸฆŒ Woodland Reindeer — Rustic textures with cozy forest charm
๐ŸŒบ Traditional Poinsettia — Classic red-and-green Christmas beauty
โ„๏ธ Winter Snowflake — Cool seasonal tones and snowy details
๐Ÿชฝ Angel Blessing — Soft, peaceful accents with graceful holiday charm

Each design includes its own coordinated fabrics and decorative details.


๐Ÿง˜ A Relaxing Holiday Craft

Slow down during the busy Christmas season and enjoy watching individual fabric pieces gradually become an adorable gnome.

Perfect for:

๐ŸŒ™ Quiet winter evenings
๐ŸŽ„ Christmas craft nights
๐Ÿ‘ญ Creative time with friends
๐Ÿก Cozy weekend projects
๐Ÿงต Sewing and quilting lovers
โœจ Screen-free relaxation
preview

โœ‚๏ธ Create It in Four Simple Steps

  1. Arrange the fabrics for the body, hat, arms, and legs
  2. Stitch and fill the main sections to create the soft shape
  3. Add the nose, hat, legs, and festive embellishments
  4. Finish the details and place your handmade gnome on display

Follow the included instructions and work comfortably at your own pace.


๐Ÿก Made for Cozy Christmas Displays

Place your finished gnome on a:

๐Ÿ”ฅ Mantel
๐Ÿ“š Bookshelf
๐ŸŽ„ Christmas-tree display
๐Ÿšช Entryway table
๐Ÿ›‹๏ธ Living-room shelf
๐Ÿช Kitchen counter
๐Ÿงต Craft-room table
๐ŸŽ Gift-display area

Its dangling legs make it especially charming when seated along the edge of a shelf or mantel.
preview


๐ŸŽ A Thoughtful Gift for Craft Lovers

Give the unopened kit as a creative Christmas experience, or finish the gnome yourself as a one-of-a-kind handmade gift.

Perfect for:

๐Ÿ‘ฉ Mothers and grandmothers
๐Ÿงต Sewing and quilting enthusiasts
๐ŸŽ„ Christmas décor collectors
๐ŸŽจ DIY craft lovers
๐Ÿ‘ญ Creative friends
๐ŸŽ Secret Santa exchanges
๐Ÿก Holiday hosts
โค๏ธ Gnome collectors

The recipient gets both a relaxing project and a keepsake they can display every Christmas.
preview


โ™ป๏ธ A Keepsake to Bring Back Every Year

Once completed, your gnome can become part of your family’s holiday traditions.

Store it carefully in a clean, dry container without heavily compressing the hat, body, legs, or decorative details, then bring it back each Christmas.


๐Ÿ“ Product Details

Product Name: DIY Quilted Christmas Gnome Kit
Product Type: DIY patchwork gnome craft kit
Quantity: Makes 1 gnome in the selected design
Available Themes: Candy-Inspired / Woodland Reindeer / Poinsettia / Snowflake / Angel Blessing
Display Style: Freestanding shelf sitter with dangling legs
Main Materials: Coordinated textiles, soft filling, trims, and decorative embellishments
Craft Method: Hand sewing and decorative assembly; fabric glue may be useful for selected details
Skill Level: Beginner-friendly to intermediate
Recommended Age: Adults and supervised older teens
Recommended Use: Indoor Christmas decoration

Because every gnome is handmade, the finished shape, stitching, fabric placement, and decorative arrangement may vary slightly.
preview


๐ŸŽ๐Ÿ“ฆ What’s Included

Each selected kit may include:

โœ… Pre-coordinated patchwork fabric pieces
โœ… Hat, body, arm, and leg materials
โœ… Soft trim and textured details
โœ… Style-specific flowers, buttons, bells, or appliqué accents
โœ… Filling material
โœ… Essential assembly components
โœ… Step-by-step instructions

Each order includes materials to create 1 gnome in the selected design. The finished gnome is not included.

preview

 


โ“ Frequently Asked Questions

Q1: Is this a finished gnome?

No. This is a DIY craft kit for creating one dimensional Christmas gnome yourself.

Q2: Is it suitable for beginners?

Yes. The project is completed section by section with included instructions. Some basic hand-sewing familiarity may be helpful.

Q3: Are all five designs included?

No. Each standard order includes one kit in the design selected at checkout unless a multi-style option is offered.

Q4: What is included?

Coordinated fabrics, filling, decorative elements, and assembly guidance for the selected gnome are included.

Q5: Where can the finished gnome be displayed?

It looks beautiful on mantels, shelves, entryway tables, bookcases, craft-room displays, or beside the Christmas tree.

Q6: Can it be reused every Christmas?

Yes. Store it carefully without crushing the padded sections or decorative details, then bring it back year after year.

Q7: Is it a good gift?

Yes. It is a fun choice for gnome lovers, crafters, sewing enthusiasts, mothers, grandmothers, and anyone who enjoys handmade Christmas décor.


๐ŸŽ„ Create a Little Christmas Character by Hand

Arrange the fabrics.
Stitch and fill each section.
Add the festive personality.
Display your handmade gnome with pride.

Create a cozy Christmas keepsake filled with texture, charm, and handmade warmth.