Stylish Luxury Bags from Niven McCarthy

Individual &  stylish handmade Rattan Handbags in a variety of sizes and style.

  • See you at the NEC Birmingham February 1st to 4th 2026

    We hope you will be joining us at the NEC in Birmingham from Sunday  February 1st 2026 until  Wednesday February 4th 2026

    We are exhibiting in Hall 3 Stand F35 .

    RRP shown on this site.

    Business owners please register to gain access to trade site and prices.

    Jayne & Andrew looking forward to seeing you

     

  • Smaller Rattan All Occasions Bag Selection

    This category includes clutch bags, messenger bags, shoulder bags and evening bags

  • Rattan Round & Heart Shaped Shoulder Bags

    Made by local Balinese Artisans . Beautifully made Rattan round and heart shaped lined bags with leather straps and clasps.

    There are a variety of colours and come in two sizes.

     

  • Pandan Weave Tote Shoppers

    Pandan Weave Shoppers are available in 3 sizes small medium and large.

    Colours available are Blue , black and multi colour.

    View at NEC in February 2026

  • Premium Atta Rattan Handbags

    Handbags from North and East Bali that are exquisitely handcrafted Premium accessories. The intricacy and skills that are used to produce these bags is truly amazing  which can take as long as 10 days for several artisans to make including the use of a wood fired kiln and then drying process.

    The bags are then lined with delicate fabrics creating a beautiful finished product.

  • New Sumatra Black & Tan Palm Weave Tote Bag

    Our stunning Sumatra Palm Weave Tote bag  from Bali. Made from natural  palm fibres in a fabulous black  & tan weave . This bag feels modern but with the knowledge that it has been completely hand made by local craftsmen using totally natural and eco friendly methods.
    Beautiful gold lining and ties  with faux leather lack handles.

  • New Zuma Pandan Sling Bags

    Latest Fashion Accessory must have. All occasion Handmade Pandan Sling bags Available in two colours Beige & Brown. Lined with faux leather Straps

  • New Nara Fibre Weave Sling Bags

    Fantastic Casual and All Occasion Sling Shoulder Bag available in Beige & Brown. Lined with zipper and faux leather straps.

  • Ayu Large Weave Top Handle Tote Bag

    Ayu Large Weave Top Handle Tote Bag . Handwoven from Sea Grass with chequered weave of dark brown & beige. Lined and matching top handles.

  • Kaiya Pandan Straw Weave Shoppers 3 Sizes & 4 Colours Available

    Handmade Pandan & Straw Natural Fibre Shoppers.

    Available in Small, Medium & Large Sizes.

    4  Vibrant Colours available Blue, Green , Purple & Orange

    [Set of 3 Purchase available on the wholesale and trade platform only , please register.]

<script>
  /*Source: https://github.com/Krzysztof-Antosik/Two-direction-Sticky-Sidebar*/
  
  // Verificar el ancho de pantalla al cargar y redimensionar
  function checkScreenWidth() {
    if (window.innerWidth <= 767) {
      // Si la pantalla es menor o igual a 676px, no ejecutar el código
      return;
    }

    const stickyElement = document.querySelector('.fb-sidebar__aside');
    const startPosition = stickyElement.getBoundingClientRect().top;

    let endScroll = window.innerHeight - stickyElement.offsetHeight - 500;
    let currPos = window.scrollY;
    let screenHeight = window.innerHeight;
    let stickyElementHeight = stickyElement.offsetHeight;
    let topGap = 140;
    let bottomGap = 40;

    setTimeout(() => {
      if (stickyElement.hasAttribute('data-top-gap')) {
        const dataTopGap = stickyElement.getAttribute('data-top-gap');
        topGap = dataTopGap === 'auto' ? startPosition : parseInt(dataTopGap);
      }

      if (stickyElement.hasAttribute('data-bottom-gap')) {
        bottomGap = parseInt(stickyElement.getAttribute('data-bottom-gap'));
      }
    }, 100);

    stickyElement.style.position = 'sticky';
    stickyElement.style.top = `${topGap}px`;
    stickyElement.style.height = 'fit-content';

    function positionStickySidebar() {
      endScroll = window.innerHeight - stickyElement.offsetHeight - bottomGap;
      const stickyElementTop = parseInt(stickyElement.style.top.replace('px', ''));

      if (stickyElementHeight + topGap + bottomGap > screenHeight) {
        if (window.scrollY < currPos) {
          if (stickyElementTop < topGap) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop >= topGap && stickyElementTop !== topGap) {
            stickyElement.style.top = `${topGap}px`;
          }
        } else {
          if (stickyElementTop > endScroll) {
            stickyElement.style.top = `${stickyElementTop + currPos - window.scrollY}px`;
          } else if (stickyElementTop < endScroll && stickyElementTop !== endScroll) {
            stickyElement.style.top = `${endScroll}px`;
          }
        }
      } else {
        stickyElement.style.top = `${topGap}px`;
      }
      currPos = window.scrollY;
    }

    function stickyElementToMe() {
      stickyElement.style.top = `${topGap}px`;
    }

    function updateSticky() {
      screenHeight = window.innerHeight;
      stickyElementHeight = stickyElement.offsetHeight;
      positionStickySidebar();
    }

    setTimeout(() => {
      window.addEventListener('resize', () => {
        currPos = window.scrollY;
        updateSticky();
      });

      document.addEventListener('scroll', updateSticky, {
        capture: true,
        passive: true
      });
    }, 1000);
  }

  // Verificar el ancho de pantalla al cargar y redimensionar
  window.addEventListener('load', checkScreenWidth);
  window.addEventListener('resize', checkScreenWidth);
</script>