UrCustomHUB - Floral Alphabet Embroidered Canvas Tote Bag: Personalize Your Style

people are viewing this right now
$32.99
1 sold
Tax included. Shipping calculated at checkout.
Option : A
Colour : White
Quantity
Worldwide shipping
Sustainably made
Secure payments
Description

For more embroidery options, please visit our DIY Embroidery Collection

For more Canvas Tote options, please visit our Canvas Embroidery Tote Bag

🌸 UrCustomHUB - Floral Alphabet Embroidered Canvas Tote Bag: Personalize Your Style

Dive into the creative world of DIY embroidery with UrCustomHUB’s Floral Alphabet Canvas Tote. This stunning canvas bag features elegant floral designs intertwined with letters, making it a perfect accessory for daily outings or a unique piece of personalized art. Whether you’re a novice or an expert, this kit invites everyone to explore their crafting journey.

Crafted for All Skill Levels:

Designed for both beginners and seasoned embroiderers, our kit includes straightforward instructions to ensure a delightful crafting experience. Each kit comes with all the essentials you need, allowing you to immerse yourself in the joy of creation.

Charming Floral Alphabet Designs:

The unique combination of letters and floral patterns adds a whimsical touch to your tote, making it a statement piece for any occasion. This DIY project lets you create a personal masterpiece, transforming a functional item into a beautiful work of art.

Quality Craftsmanship Materials:

  • Canvas Bag Dimensions: 34 cm x 40 cm with a handle length of 26 cm, providing ample space to showcase your embroidered designs.
  • Kit Includes:
    • 1 printed canvas tote bag
    • 1 floral alphabet embroidery pattern
    • 1 embroidery needle
    • Vibrant threads
    • 20 cm x 20 cm faux bamboo embroidery hoop for stability and ease of stitching.

Eco-Friendly Crafting:

At UrCustomHUB, we prioritize sustainability, ensuring our products are made from eco-friendly materials for a guilt-free crafting experience. Each kit is carefully packaged with multiple layers of protection to guarantee safe delivery in perfect condition.

A Thoughtful Personalized Gift:

Handcrafted items carry a unique charm, making this floral alphabet tote an ideal gift for loved ones or a special treat for yourself.

Embroidery is more than a craft; it’s an enriching experience that adds beauty to everyday life. Unleash your creativity and enjoy the satisfaction of making something truly yours.

🌼 Begin Your Crafting Adventure with UrCustomHUB Today!

For inquiries or more information, contact us at service@urcustomhub.com. At UrCustomHUB, we’re passionate about infusing creativity into your life!

Customer Reviews

Here are what our customers say.

Write a Review
Customer Reviews
Wow you reached the bottom
Newest
Most liked
Highest ratings
Lowest ratings
×
class SpzCustomFileUpload extends SPZ.BaseElement { constructor(element) { super(element); this.uploadCount_ = 0; this.fileList_ = []; } buildCallback() { this.action = SPZServices.actionServiceForDoc(this.element); this.registerAction('upload', (data) => { this.handleFileUpload_(data.event?.detail?.data || []); }); this.registerAction('delete', (data) => { this.handleFileDelete_(data?.args?.data); }); this.registerAction('preview', (data) => { this.handleFilePreview_(data?.args?.data); }); this.registerAction('limit', (data) => { this.handleFileLimit_(); }); this.registerAction('sizeLimit', (data) => { this.handleFileSizeLimit_(); }); } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } setData_(count, file) { this.uploadCount_ = count; this.fileList_ = file; } handleFileUpload_(data) { data.forEach(i => { if(this.fileList_.some(j => j.url === i.url)) return; this.fileList_.push(i); }) this.uploadCount_++; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileUpload", { count: this.uploadCount_, files: this.fileList_}); if(this.fileList_.length >= 5){ document.querySelector('#review_upload').style.display = 'none'; } if(this.fileList_.length > 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '8px'; } } handleFileDelete_(index) { this.fileList_.splice(index, 1); this.uploadCount_--; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleFileDelete", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; if(this.fileList_?.length === 0){ document.querySelector('.apps-reviews-write-anonymous-box').style.marginTop = '132px'; } } handleFilePreview_(index) { const finalPreviewData = this.fileList_[index]; const filePreviewModal = document.getElementById('filePreviewModal'); const fullScreenVideo = document.getElementById('fullScreenVideo'); const fullScreenImage = document.getElementById('fullScreenImage'); const previewModalClose = document.getElementById('previewModalClose'); const previewLoading = document.getElementById('previewLoading'); filePreviewModal.style.display = 'block'; previewLoading.style.display = 'flex'; if(finalPreviewData?.type === 'video'){ const media = this.mediaParse_(this.fileList_[index]?.url); fullScreenVideo.addEventListener('canplaythrough', function() { previewLoading.style.display = 'none'; }); fullScreenImage.src = ''; fullScreenImage.style.display = 'none'; fullScreenVideo.style.display = 'block'; fullScreenVideo.src = media.mp4 || ''; } else { fullScreenImage.onload = function() { previewLoading.style.display = 'none'; }; fullScreenVideo.src = ''; fullScreenVideo.style.display = 'none'; fullScreenImage.style.display = 'block'; fullScreenImage.src = finalPreviewData.url; } previewModalClose.addEventListener('click', function() { filePreviewModal.style.display = 'none'; }); } handleFileLimit_() { alert(window.AppReviewsLocale.comment_file_limit || 'please do not upload files more than 5'); this.triggerEvent_("handleFileLimit"); } handleFileSizeLimit_() { alert(window.AppReviewsLocale.comment_file_size_limit || 'File size does not exceed 10M'); } clear(){ this.fileList_ = []; this.uploadCount_ = 0; sessionStorage.setItem('fileList', JSON.stringify(this.fileList_)); this.triggerEvent_("handleClear", { count: this.uploadCount_, files: this.fileList_}); document.querySelector('#review_upload').style.display = 'block'; } mediaParse_(url) { var result = {}; try { url.replace(/[?&]+([^=&]+)=([^&]*)/gi, function (str, key, value) { try { result[key] = decodeURIComponent(value); } catch (e) { result[key] = value; } }); result.preview_image = url.split('?')[0]; } catch (e) {}; return result; } triggerEvent_(name, data) { const event = SPZUtils.Event.create(this.win, name, data); this.action.trigger(this.element, name, event); } } SPZ.defineElement('spz-custom-file-upload', SpzCustomFileUpload);
The review would not show in product details on storefront since it does not support to.