🧚‍♀️🌸 Premium Fairy Patchwork DIY Kit | High-Quality Layered Fabric with Floral Wings DIY Handmade Fantasy Wall Decor ✨

$29.99  - $119.99
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ 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 = "7bc1fd84-3ce5-4341-b408-81f292308671"; // 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 == '1e6992a0-1a97-4b08-9078-895b6c260beb' && 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: "1e6992a0-1a97-4b08-9078-895b6c260beb", 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);
Color🎁Buy 3— Save 15% OFF & Free Shipping:  Flower Color
Quantity
Free worldwide shipping
Free returns
Sustainably made
Secure payments

Description

SHIPPING WORLDWIDE. 
💯Payments Via PayPal® and CreditCard.
⭐Fast refund Guarantee>> Partial or full refund depends on the situation.

🎁Don't forget to buy some for your family or friends as it's a unique gift idea.❤️❤️❤️



🧚‍♀️🌸✨ Turn beautiful fabric scraps into an enchanting fairy filled with layered wings, flowing textures, and delicate floral details. Each piece adds depth and personality, creating a relaxing DIY experience and a breathtaking handmade artwork you’ll be proud to display. Perfect for fairy lovers, creative crafters, and anyone drawn to a little everyday magic. 💜🧵🌿

Create Your Own Handmade Fabric Fairy Wall Decor

Bring a little magic, softness, and handmade beauty into your home with this Color Fairy Patchwork DIY Kit.
Layer by layer, each floral fabric piece becomes a flowing dress, delicate wings, soft hair, and a dreamy fairy full of personality.

This is not just a craft project. It is a peaceful creative moment, a beautiful handmade decoration, and a meaningful gift for anyone who loves florals, fantasy, sewing, and cozy handmade art.

 🌟 Why This Fairy Patchwork DIY Kit Is Worth It

🧚‍♀️ Build A Fairy One Layer At A Time

Coordinated fabric pieces gradually form the fairy’s flowing dress, wings, hair, flowers, and decorative details.

As each layer is added, the design develops more texture, depth, and handmade personality.

🌸 Real Fabric Creates Beautiful Dimension

Unlike a flat printed picture, the overlapping fabric pieces create soft folds and petal-like layers.

The finished fairy looks detailed from different angles, with a rich textile appearance that invites a closer look.

🪟 Display It As A Hanging Ornament

Once completed, the fairy can be displayed as a decorative hanging piece instead of remaining flat on a table.

Hang it near a window, on a wall hook, in a bedroom, craft room, nursery, reading corner, or seasonal display.

No traditional picture frame is needed.

🎨 Choose Your Favorite Color Story

Select the fairy design that best matches your home or personality:

  • Multicolor Floral
  • Yellow
  • Purple
  • Red
  • Pink
  • White
  • Green
  • Blue
  • Deep Purple

Each style uses a different combination of coordinated colors and patterned fabrics.

🧘 A Relaxing Screen-Free Project

Arranging and securing each fabric piece creates a calm, satisfying crafting rhythm.

Enjoy it during a quiet evening, weekend craft session, family activity, or whenever you want a peaceful break from screens.

🎁 A Meaningful Gift For Creative Souls

Give the unopened kit as a relaxing creative experience, or complete the fairy yourself as a handmade keepsake.

It is a thoughtful gift for mothers, grandmothers, daughters, friends, crafters, fairy collectors, and cottagecore décor lovers.


🎁📦 Package Includes

1 × Fairy Patchwork DIY Kit

Each kit includes the coordinated materials needed to create your selected fairy design.


📏 Product Details

Product Name: Fairy Patchwork DIY Kit

Theme: Fairy / Floral / Fantasy / Handmade Fabric Art

Style: DIY patchwork fabric décor kit

Color Options: Blush Pink / Lavender Purple / Blue Sky / Woodland Green / Sunflower / Christmas Fairy

Finished Look: Layered handmade-style fairy wall décor with flowing fabric texture

Use Scene: Bedroom / nursery / craft room / reading corner / seasonal display / handmade gift

Skill Level: Beginner-friendly


FAQ

Q1: Is this kit suitable for beginners?
A: Yes. The kit is designed to be relaxing and easy to enjoy, even if you are new to fabric crafts.

Q2: Can the finished fairy be displayed?
A: Yes. Once completed, it becomes a beautiful handmade-style decoration for bedrooms, craft rooms, nurseries, reading corners, or seasonal displays.

Q3: What styles can I choose from?
A: Available styles include Blush Pink, Lavender Purple, Blue Sky, Woodland Green, Sunflower, and Christmas Fairy.

Q4: Is this a good gift?
A: Absolutely. It’s a thoughtful gift for fairy lovers, craft lovers, moms, daughters, friends, and anyone who enjoys handmade décor.


💬 Customer Reviews

⭐⭐⭐⭐⭐ “The fabric layers make the wings look beautiful.”

I chose the deep purple design, and the different floral patterns gave the wings and dress much more texture than I expected.

— Lauren M., Colorado

⭐⭐⭐⭐⭐ “I love that the finished fairy can be hung up.”

After completing it, I placed it near the window in my craft room. It looks much more special than an ordinary flat decoration.

— Susan R., Pennsylvania

⭐⭐⭐⭐⭐ “A peaceful project for quiet evenings.”

I worked on it a little at a time while listening to music. Watching the dress and wings slowly take shape was very relaxing.

— Amanda K., Oregon

⭐⭐⭐⭐⭐ “A lovely gift for my mother.”

My mother enjoys fabric crafts and fantasy décor, so this felt very personal. She especially loved choosing her favorite color.

— Jessica T., Texas


🧚‍♀️ Create A Little Handmade Magic

A little flower.
A little fantasy.
A little handmade joy.

Choose your favorite fairy and create a beautiful fabric artwork filled with charm, color, and imagination. 🌸✨


🎁Don't forget to buy some for your family or friends as it's a unique gift idea.❤️❤️❤️

WHY US?

  • We work directly with manufacturers all over the world to ensure the best quality of our products. We have Quality Control department which help us to keep our promise!
  • Price is always competitive.
  • Awesome Customer Service
  • Amazing products along with High Quality
  • Read reviews from our lovely customers

⚡️Stock Sells Fast!⚡️

Click On "ADD TO CART" To Get Yours Now!

Certification

WHY US?

  • We work directly with manufacturers all over the world to ensure the best quality of our products. We have Quality Control department which help us to keep our promise!
  • Price is always competitive.
  • Awesome Customer Service
  • Amazing products along with High Quality
  • Read reviews from our lovely customers

OUR GUARANTEE

📦 Insured Worldwide Shipping: Each order includes real-time tracking details and insurance coverage in the unlikely event that a package gets lost or stolen in transit.

💰 Money-Back Guarantee: If your items arrive damaged within 90 days of normal usage, we will gladly issue out a replacement or refund.

✉️ 24/7 Customer Support: We have a team of live reps ready to help and answer any questions you have within a 24-hour time frame, 7 days a week.

🔒 Safe & Secure Checkouts: We use state-of-the-art SSL Secure encryption to keep your personal and financial information 100% protected.

🔒 100% Risk-Free Purchase: If you bought it and felt that it is not for you, don't worry. Just hit the Contact us button and send us a message, and we will make it right by offering you a replacement or refund. 100% Simple & Risk-Free process.