🐱Mystic Patchwork Animal Sewing Kit – DIY Plush Craft Kit with Starry Fabric, Moon Charm

$26.98 $45.98 Save $19.00
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ 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 = "8f3b115d-fed4-4b86-a54b-9bf1f8ac9210"; // 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 == 'f8d1ed95-80d9-42f1-8c31-ae7fba245788' && 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: "f8d1ed95-80d9-42f1-8c31-ae7fba245788", 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 2 Free Shipping:  Star Cat
Quantity
Share the love
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description

🦉 Mystic Patchwork Animal Sewing Kit

Sew your own one-of-a-kind magical plush companion with our Mystic Patchwork Animal Sewing Kit, where dreamy starry fabric and celestial details bring whimsical fantasy creatures to life. Featuring five enchanting designs including Star Cat, Galaxy Dragon, Crescent Wolf, Witch Bat and Mystic Owl, each handmade plush boasts gorgeous patchwork stitching, golden star embellishments and an elegant crescent moon charm to deliver a mystical dark purple and black celestial aesthetic.
This beginner-friendly DIY craft set lets you slow down and enjoy relaxing weekend sewing time, creating a stunning decorative plush perfect for bedroom shelf styling, craft room display and festive Halloween home decor. It also makes a deeply thoughtful personalized handmade gift for sewing hobbyists, fantasy enthusiasts and teens who love unique collectible crafts.

🌙 Reasons to Love This Celestial Sewing Kit

✨ Create Your Exclusive Magical Plush Companion

Every animal design is uniquely crafted with layered patchwork fabric, delicate embroidered detailing, shimmering star ornaments and a signature crescent moon charm. You will own an irreplaceable handmade decorative piece full of your creative personality after finishing your sewing project.

🧵 Perfect for Sewing Beginners

Equipped with clear step-by-step illustrated instructions, this sewing kit is friendly to new crafters. You can easily learn basic patchwork and plush making skills while enjoying stress-relieving creative leisure time, no advanced sewing experience required.

🏡 Stunning Decor for Multiple Spaces

Your finished celestial plush works wonderfully as a decorative ornament displayed on desks, bedside tables, living room shelves and craft rooms, perfectly matching gothic, fantasy, celestial and Halloween-themed home interior styles.

🎨 Collectible Fantasy Themed Series

Choose your favorite magical creature from five distinctive styles, or collect the entire animal set to build your exclusive mystical plush collection and create a breathtaking themed display at home.

🎁 Ideal Handmade Gift Choice

A heartfelt present for teen and adult sewing lovers, fantasy fans, cat, dragon, wolf, bat and owl enthusiasts for birthdays, holidays, Halloween and housewarming occasions, far more memorable than ordinary store-bought gifts.

preview

📦 What’s Included in Each Kit

This all-in-one themed packaging box contains all supplies needed to craft one patchwork animal plush:
 
✅ Pre-cut coordinated starry printed fabric pieces
 
✅ Soft premium plush stuffing material
 
✅ Matching sewing threads, needles and essential sewing accessories
 
✅ Decorative star ornaments & signature crescent moon charm
 
✅ Character decorative detail parts
 
✅ Easy-to-follow step-by-step illustrated instruction manual
 
✅ Exquisite mystical themed gift packaging box
💡 Friendly Reminder: Sewing scissors are not included in the package, please prepare scissors separately for your DIY project. This decorative handmade piece is not suitable as a toy for young small children.

preview

📝 Simple Step-by-Step Sewing Guide

  1. Sort out all fabric pieces, sewing tools and decorative accessories following the detailed instruction manual
  2. Sew fabric parts together to form the animal’s body, then fill with soft stuffing and shape your plush perfectly
  3. Stitch all decorative details onto the plush surface
  4. Attach star accents and the exclusive crescent moon charm to finish your magical celestial animal
  5. Display your handmade plush on shelves, desks or gift it to your loved ones as a special keepsake

preview

🎯 Perfect Occasions & Ideal Users

• Beginner-friendly weekend DIY sewing projects
 
• Gothic, celestial & Halloween home decorative display
 
• Bedroom, study room and craft room interior styling
 
• Birthday, holiday and Halloween handmade gift preparation
 
• Fantasy animal lovers, teen & adult craft enthusiasts
 
• Unique collectible plush collection building

preview

📋 Product Specifications

  • Craft Type: Hand Sewing, Patchwork, Plush Making & DIY Decoration
  • Available Styles: Star Cat, Galaxy Dragon, Crescent Wolf, Witch Bat, Mystic Owl
  • Skill Level: Beginner Friendly (young crafters need adult supervision)
  • Material: Fabric, Polyester Stuffing, Thread, Metal & Resin Decorative Accessories
  • Usage: Indoor decorative display only, not a children’s play toy
  • Care Instruction: Gently spot clean only

Finished Product Dimensions

  • Star Cat: 9.5 in / 24 cm tall
  • Galaxy Dragon: 9.5 in / 24 cm tall
  • Crescent Wolf: 10 in / 25 cm tall
  • Witch Bat: 8 in / 20 cm wingspan × 5 in / 13 cm tall
  • Mystic Owl: 10 in / 25 cm tall

preview

💫 Closing Pitch

Pick your favorite mystical creature and start your relaxing sewing journey with our Mystic Patchwork Animal Sewing Kit today ✨. Stitch stars and weave magic to create a sentimental handmade plush treasure, either to adorn your own home or send warm creative blessings to your beloved family and friends.

❤️Thank you very much for visiting our store. Have a nice shopping day❤️