1<!doctype html> 2<!--[if lt IE 7]><html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--> 3<!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]--> 4<!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> 5<!--[if IE 9 ]><html class="ie9 no-js"> <![endif]--> 6<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js"> <!--<![endif]--> 7<head> 8 9 <!-- Basic page needs ================================================== --> 10 <meta charset="utf-8"> 11 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 12 13 14 <link rel="icon" href="https://cdn.store-assets.com/s/897/f/16275011.png" /> 15 16 17 <!-- Title and description ================================================== --> 18 <title> 19 Login – Sayangku Handcraft 20 </title> 21 22 23 24 <!-- Social meta ================================================== --> 25 26 27 <meta property="og:type" content="website"> 28 <meta property="og:title" content="Login"> 29 <meta property="og:url" content="https://sayangku.com.my/account/login"> 30 31 <meta property="og:image" content="https://cdn.store-assets.com/s/897/f/16275011.png"> 32 <meta property="og:image:secure_url" content="https://cdn.store-assets.com/s/897/f/16275011.png"> 33 34 35 36<meta property="og:description" content="Welcome to Sayangku Handcraft. As a premier supplier of high-quality crafting and event essentials, we specialize in wedding accessories, handmade gifts, artificial florals, and bespoke decorations. Whether you are an event planner, a DIY enthusiast, or a bride-to-be, we provide the finest materials and tailoring products at the most competitive prices. Discover endless inspiration and exceptional value with every purchase."> 37<meta property="og:site_name" content="Sayangku Handcraft"> 38 39 40 41 <meta name="twitter:card" content="summary"> 42 43 44 45 <meta name="twitter:site" content="@"> 46 47 48 49 50 51 <!-- Helpers ================================================== --> 52 <link rel="canonical" href="https://sayangku.com.my/account/login"> 53 <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"> 54 <meta name="theme-color" content="#000000"> 55 56
56<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" type="text/javascript" ></script>
56 57 58 <!-- Header hook for plugins ================================================== --> 59 60<!-- ScriptTags -->
61<script>window.__st={p: "customers",cid: null,cem: null,cph: null,cfn: null,cln: null,cge: null,cdb: null,ccc: null};</script>
61<script src='/assets/events.js'></script>
61<script>(function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(d.getElementById(id))return;js=d.createElement(s);js.id=id;js.src='https://connect.facebook.net/en_US/sdk/xfbml.customerchat.js#xfbml=1&version=v6.0&autoLogAppEvents=1';fjs.parentNode.insertBefore(js,fjs);}(document,'script','facebook-jssdk'));</script>
61<script>(function(){function asyncLoad(){var urls=['/assets/facebook-pixel.js?v=1.2.1784105893','/assets/traffic.js?v=1','https://apps.easystore.co/facebook-login/script.js?shop=sayangku.easy.co&t=1765260065','https://apps.easystore.co/google-analytics-4/script.js?shop=sayangku.easy.co&t=1784699177'];for(var i=0;i<urls.length;i++){var s=document.createElement('script');s.type='text/javascript';s.async=true;s.src=urls[i];var x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);}}window.attachEvent ? window.attachEvent('onload', asyncLoad) : window.addEventListener('load', asyncLoad, false);})();</script>
61 62<!-- /ScriptTags --> 63 64 65 66
66<script src="https://store-themes.easystore.co/897/themes/181882/assets/global.js?t=1787072409" defer="defer"></script>
66 67 68 69 70
70<script src="/assets/shop_common.js" type="text/javascript" ></script>
70 71
71<script src="/assets/customer_area.js" type="text/javascript" ></script>
71 72 73
73<script> 74 (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 75 (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 76 m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 77 })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 78 79 ga('create', '', 'auto','myTracker'); 80 ga('myTracker.send', 'pageview'); 81 82 </script>
82 83 84
84<script src="/assets/storefront.js?id=1d419de2011a5572c98b" type="text/javascript" ></script>
84 85 86 87 <!-- CSS ================================================== --> 88 <style> 89 @font-face { 90 font-family: 'Alata'; 91 font-style: normal; 92 font-weight: regular; 93 src: local('Alata regular'), local('Alata-regular'), url(https://fonts.gstatic.com/s/alata/v2/PbytFmztEwbIofe6xKcRQEOX.ttf) format('truetype'); 94 } 95 96 @font-face { 97 font-family: 'Alata'; 98 font-style: normal; 99 font-weight: regular; 100 src: local('Alata regular'), local('Alata-regular'), url(https://fonts.gstatic.com/s/alata/v2/PbytFmztEwbIofe6xKcRQEOX.ttf) format('truetype'); 101 } 102 103 :root { 104 --font-body-family: 'Alata', sans-serif; 105 --font-body-style: normal; 106 --font-body-weight: 500; 107 108 --font-heading-family: 'Alata', sans-serif; 109 --font-heading-style: normal; 110 --font-heading-weight: 700; 111 112 --color-heading-text: 0,0,0; 113 --color-base-text: 0,0,0; 114 --color-base-background-1: 255,255,255; 115 --color-base-background-2: 255,255,255; 116 117 --color-base-solid-button-labels: 255,255,255; 118 --color-base-outline-button-labels: 5,28,98; 119 120 --color-base-accent-1: 0,0,0; 121 --color-base-accent-2: 0,0,0; 122 --payment-terms-background-color: 255,255,255; 123 124 --gradient-base-background-1: 255,255,255; 125 --gradient-base-background-2: 255,255,255; 126 --gradient-base-accent-1: 0,0,0; 127 --gradient-base-accent-2: 0,0,0; 128 129 --page-width: 145rem; 130 } 131 132 *, 133 *::before, 134 *::after { 135 box-sizing: inherit; 136 } 137 138 html { 139 box-sizing: border-box; 140 font-size: 62.5%; 141 height: 100%; 142 } 143 144 body { 145 display: grid; 146 grid-template-rows: auto auto 1fr auto; 147 grid-template-columns: 100%; 148 min-height: 100%; 149 margin: 0; 150 font-size: 1.5rem; 151 letter-spacing: 0.06rem; 152 line-height: 1.8; 153 font-family: var(--font-body-family); 154 font-style: var(--font-body-style); 155 font-weight: var(--font-body-weight); 156 157 } 158 159 @media screen and (min-width: 750px) { 160 body { 161 font-size: 1.6rem; 162 } 163 } 164 </style> 165 166 <link href="https://store-themes.easystore.co/897/themes/181882/assets/base.css?t=1787072409" rel="stylesheet" type="text/css" media="screen" /> 167 168 169 170<!-- Snippet:global/head: Insert Code --> 171 172<!--Google Ads Campaign 100226 --> 173<!-- Google tag (gtag.js) -->
vendor: 65 bytes, lines 173-174
173 174<script async src="https://www.googletagmanager.com/gtag/js?id=
174AW-17793275573
vendor: 15 bytes, lines 174-175
174"> 175</script>
176<script> 177
vendor: 138 bytes, lines 177-181
177window.dataLayer = window.dataLayer || []; 178 function gtag(){dataLayer.push(arguments);} 179 gtag('js', new Date()); 180 181 gtag('config', '
181AW-17793275573
vendor: 5 bytes, line 181
181');
182</script>
182 183<!--Meta Business Suite 210726 --> 184<meta name="facebook-domain-verification" content="3shy9bfbqugv67c4bm56jj7amw9lxe" /> 185<!--Google Search Console 220726 --> 186<meta name="google-site-verification" content="1qQ2vbWMYnutPwtk89ozav1ph7HG-hnr9Qm1Sdzndho" /> 187<!-- /Snippet --> 188 189<!-- Snippet:global/head: Site Verification --> 190<meta name="google-site-verification" content="SkUbMuGRLOlOoxG0CqkwNqyK3Gpl7mYiKMenOqJTL_c" /> 191<!-- /Snippet --> 192 193 194
194<script>document.documentElement.className = document.documentElement.className.replace('no-js', 'js');</script>
194 195</head> 196 197<body id="login" class="template-customers" > 198 199 200<!-- Snippet:global/body_start: Announcement Bar --> 201<link rel="stylesheet" href="https://apps.easystore.co/assets/css/annoucement-bar/marquee.css?v1.04"> 202 203<div id="announcement-bar" name="announcement-bar" style=" 204 border: unset; 205 padding: 6px 0px; 206 margin: 0px; 207 z-index:2999; 208 background:rgb(233, 69, 69); 209 color:rgb(255, 255, 255); 210 position: -webkit-sticky; position: sticky; top: 0; 211"> 212 213 <input type="hidden" id="total_announcement_left" name="total_announcement_left" value="2"> 214 <input type="hidden" id="locale" name="locale" value="en_US"> 215 216 <div class="app_marquee-wrapper" style=" 217 padding: 0px 0px; 218 border-top: 0px; 219 border-bottom: 0px; 220 border-color: transparent; 221 "> 222 <div class="app_marquee-container"> 223 <div id="announcement_bar_0" class="announcement_bar_0 announcement_bar-content"> 224 <span class="marquee-msg">FREE SHIPPING (First Time Buyer)</span> 225 <input type="hidden" id="expired_at_0" name="expired_at_0" value=""> 226 </div> 227 <div id="announcement_bar_1" class="announcement_bar_1 announcement_bar-content"> 228 <span class="marquee-msg">BUY 1 FREE 1 (Cekak Merdeka & Cermin Mata Merdeka)</span> 229 <a class="announcement-bar-button" href="/products/cekak-sanggul-lintang-merdeka-buy1free1" style="color: rgb(233, 69, 69); background: rgb(255, 255, 255);">Shop Now</a> 230 <input type="hidden" id="expired_at_1" name="expired_at_1" value="2026-07-22 00:00"> 231 </div> 232 </div> 233 234 </div> 235</div> 236 237 238
239<script> 240 var is_top_enabled = 1; 241 if (is_top_enabled) { 242 // Prevent announcement bar block header 243 setTimeout(() => { 244 let header = document.querySelector('#easystore-section-header'); 245 let topbar = document.querySelector('.sticky-topbar'); 246 let announcementBar = document.querySelector('#announcement-bar'); 247 248 if (announcementBar) { 249 let height = announcementBar.offsetHeight + 'px'; 250 if (header) header.style.top = height; 251 if (topbar) topbar.style.top = height; 252 } 253 }, 2000); 254 } 255 256 setInterval(function () { 257 let total_announcement = parseInt("2", 10); 258 let total_announcement_left = parseInt(document.querySelector("#total_announcement_left").value, 10); 259 260 for (let i = 0; i <= total_announcement; i++) { 261 let startDate = new Date(); 262 let endDateStr = document.querySelector(`#expired_at_${i}`)?.value; 263 let endDate = endDateStr ? new Date(endDateStr.replace(/-/g, "/")) : new Date(); 264 let seconds = (endDate.getTime() - startDate.getTime()) / 1000; 265 266 let days = Math.floor(seconds / 86400); 267 let hours = Math.floor((seconds % 86400) / 3600); 268 let mins = Math.floor((seconds % 3600) / 60); 269 let secs = Math.floor(seconds % 60); 270 271 function translate(key, locale, values = 1) { 272 if (locale === "zh_TW") { 273 let translations = { 274 day: "天", 275 hour: "å°æ", 276 min: "åé", 277 sec: "ç§" 278 }; 279 return translations[key] || key; 280 } else { 281 let singularPlural = { day: "Day", hour: "Hour", min: "Min", sec: "Sec" }; 282 let plural = { day: "Days", hour: "Hours", min: "Mins", sec: "Secs" }; 283 if (key in singularPlural) { 284 return values > 1 ? plural[key] : singularPlural[key]; 285 } 286 return key; 287 } 288 } 289 290 291 let countdownElement = document.querySelector(`#announcementBar_countdown_${i}`); 292 if (countdownElement && seconds > 0) { 293 let locale = document.querySelector("#locale")?.value || "en"; 294 let countdownItems = document.querySelectorAll(`.announcementBar_countdown_${i}`); 295 countdownItems.forEach(item => { 296 item.style.display = ''; 297 item.innerHTML = ` 298 <div> 299 <span>${days}</span> <small>${translate('day', locale, days)}</small> 300 </div> 301 <div> 302 <span>${hours}</span> <small>${translate('hour', locale, hours)}</small> 303 </div> 304 <div> 305 <span>${mins}</span> <small>${translate('min', locale, mins)}</small> 306 </div> 307 <div> 308 <span>${secs}</span> <small>${translate('sec', locale, secs)}</small> 309 </div> 310 `; 311 }); 312 } else if (countdownElement && seconds <= 0) { 313 let bar = document.querySelector(`#announcement_bar_${i}`); 314 if (bar) bar.remove(); 315 total_announcement_left -= 1; 316 document.querySelector("#total_announcement_left").value = total_announcement_left; 317 } 318 } 319 320 showOrHide(total_announcement_left); 321 }, 1000); 322 323 function showOrHide(total_announcement_left) { 324 let prevButton = document.querySelector("#previous-announcement-bar-button"); 325 let nextButton = document.querySelector("#next-announcement-bar-button"); 326 let closeButton = document.querySelector("#announcement-close-button"); 327 let announcementBar = document.querySelector("#announcement-bar"); 328 let announcementBarTop = document.querySelector("#announcement-bar-top"); 329 let header = document.querySelector("#easystore-section-header"); 330 let topbar = document.querySelector(".sticky-topbar"); 331 332 if (total_announcement_left <= 1) { 333 if (prevButton) prevButton.style.display = 'none'; 334 if (nextButton) nextButton.style.display = 'none'; 335 } else { 336 if (prevButton) prevButton.style.display = 'block'; 337 if (nextButton) nextButton.style.display = 'block'; 338 } 339 340 if (total_announcement_left === 0) { 341 if (closeButton) closeButton.style.display = 'none'; 342 if (announcementBar) announcementBar.style.display = 'none'; 343 if (announcementBarTop) announcementBarTop.style.display = 'none'; 344 if (header) header.style.top = '0px'; 345 if (topbar) topbar.style.top = '0px'; 346 } 347 } 348 349 let closeButton = document.querySelector("#announcement-close-button"); 350 if (closeButton) { 351 closeButton.addEventListener('click', () => { 352 let announcementBar = document.querySelector("#announcement-bar"); 353 let announcementBarTop = document.querySelector("#announcement-bar-top"); 354 let header = document.querySelector("#easystore-section-header"); 355 let topbar = document.querySelector(".sticky-topbar"); 356 357 if (announcementBar) announcementBar.style.display = 'none'; 358 if (announcementBarTop) announcementBarTop.style.display = 'none'; 359 if (header) header.style.top = ''; 360 if (topbar) topbar.style.top = ''; 361 }); 362 } 363 364</script>
364 365 366
367<script> 368 (function initializeMarquee() { 369 const marqueeWrapper = document.querySelector(`#announcement-bar .app_marquee-wrapper`); 370 const marqueeContainer = document.querySelector(`#announcement-bar .app_marquee-container`); 371 372 if (!marqueeWrapper || !marqueeContainer) return; 373 374 const children = Array.from(marqueeContainer.children); 375 376 // Calculate the total width of children 377 let totalWidth = children.reduce((acc, child) => acc + child.offsetWidth, 0); 378 const screenWidth = window.innerWidth; 379 380 // Clone children until the total width exceeds the screen width 381 if(totalWidth > 5){ 382 while (totalWidth < screenWidth * 3) { 383 children.forEach(child => { 384 const clone = child.cloneNode(true); 385 marqueeContainer.appendChild(clone); 386 totalWidth += clone.offsetWidth; 387 }); 388 } 389 } 390 391 // Clone the marquee container 392 const clonedContainer = marqueeContainer.cloneNode(true); 393 marqueeWrapper.appendChild(clonedContainer); 394 })(); 395</script>
395 396 397<!-- /Snippet --> 398 399<!-- Snippet:global/body_start: Console Extension --> 400<div id='es_console' style='display: none;'>897</div> 401<!-- /Snippet --> 402 403 404 <style> 405 header { 406 --logo-width: 150px; 407 } 408 .header-wrapper, 409 .header-wrapper .list-menu--disclosure, 410 .header-wrapper .search-modal{ 411 background-color: #FFFFFF; 412 } 413 .header-wrapper .search-modal .field__input{ 414 background-color: rgb(var(--color-background)); 415 } 416 .header-wrapper summary .icon-caret, 417 .header-wrapper .header__menu-item a, 418 .header-wrapper .list-menu__item, 419 .header-wrapper .link--text{ 420 color: #000000; 421 } 422 423 .search-modal__form{ 424 position: relative; 425 } 426 427 .dropdown { 428 display: none; 429 position: absolute; 430 top: 100%; 431 left: 0; 432 width: 100%; 433 padding: 5px 0; 434 background-color: #fff; 435 color:#000; 436 z-index: 1000; 437 border-bottom-left-radius: 15px; 438 border-bottom-right-radius: 15px; 439 border: 1px solid rgba(var(--color-foreground), 1); 440 border-top: none; 441 overflow-x: hidden; 442 overflow-y: auto; 443 max-height: 350px; 444 } 445 446 .dropdown-item { 447 padding: 0.4rem 2rem; 448 cursor: pointer; 449 line-height: 1.4; 450 overflow: hidden; 451 text-overflow: ellipsis; 452 white-space: nowrap; 453 } 454 455 .dropdown-item:hover{ 456 background-color: #f3f3f3; 457 } 458 459 .search__input.is-focus{ 460 border-radius: 15px; 461 border-bottom-left-radius: 0; 462 border-bottom-right-radius: 0; 463 border: 1px solid rgba(var(--color-foreground), 1); 464 border-bottom: none; 465 box-shadow: none; 466 } 467 468 .clear-all { 469 text-align: right; 470 padding: 0 2rem 0.2rem; 471 line-height: 1; 472 font-size: 70%; 473 margin-bottom: -2px; 474 } 475 476 .clear-all:hover{ 477 background-color: #fff; 478 } 479 480 .search-input-focus .easystore-section-header-hidden{ 481 transform: none; 482 } 483 .referral-notification { 484 position: absolute; 485 top: 100%; 486 right: 0; 487 background: white; 488 border: 1px solid #e0e0e0; 489 border-radius: 8px; 490 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 491 width: 280px; 492 z-index: 1000; 493 padding: 16px; 494 margin-top: 8px; 495 font-size: 14px; 496 line-height: 1.4; 497 } 498 499 .referral-notification::before { 500 content: ''; 501 position: absolute; 502 top: -8px; 503 right: 20px; 504 width: 0; 505 height: 0; 506 border-left: 8px solid transparent; 507 border-right: 8px solid transparent; 508 border-bottom: 8px solid white; 509 } 510 511 .referral-notification::after { 512 content: ''; 513 position: absolute; 514 top: -9px; 515 right: 20px; 516 width: 0; 517 height: 0; 518 border-left: 8px solid transparent; 519 border-right: 8px solid transparent; 520 border-bottom: 8px solid #e0e0e0; 521 } 522 523 .referral-notification h4 { 524 margin: 0 0 8px 0; 525 color: #2196F3; 526 font-size: 16px; 527 font-weight: 600; 528 } 529 530 .referral-notification p { 531 margin: 0 0 12px 0; 532 color: #666; 533 } 534 535 .referral-notification .referral-code { 536 background: #f5f5f5; 537 padding: 8px; 538 border-radius: 4px; 539 font-family: monospace; 540 font-size: 13px; 541 text-align: center; 542 margin: 8px 0; 543 border: 1px solid #ddd; 544 } 545 546 .referral-notification .close-btn { 547 position: absolute; 548 top: 8px; 549 right: 8px; 550 background: none; 551 border: none; 552 font-size: 18px; 553 color: #999; 554 cursor: pointer; 555 padding: 0; 556 width: 20px; 557 height: 20px; 558 line-height: 1; 559 } 560 561 .referral-notification .close-btn:hover { 562 color: #333; 563 } 564 565 .referral-notification .action-btn { 566 background: #2196F3; 567 color: white; 568 border: none; 569 padding: 8px 16px; 570 border-radius: 4px; 571 cursor: pointer; 572 font-size: 12px; 573 margin-right: 8px; 574 margin-top: 8px; 575 } 576 577 .referral-notification .action-btn:hover { 578 background: #1976D2; 579 } 580 581 .referral-notification .dismiss-btn { 582 background: transparent; 583 color: #666; 584 border: 1px solid #ddd; 585 padding: 8px 16px; 586 border-radius: 4px; 587 cursor: pointer; 588 font-size: 12px; 589 margin-top: 8px; 590 } 591 592 .referral-notification .dismiss-btn:hover { 593 background: #f5f5f5; 594 } 595 .referral-modal__dialog { 596 transform: translate(-50%, 0); 597 transition: transform var(--duration-default) ease, visibility 0s; 598 z-index: 10000; 599 position: fixed; 600 top: 20vh; 601 left: 50%; 602 width: 100%; 603 max-width: 350px; 604 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); 605 border-radius: 12px; 606 background-color: #fff; 607 color: #000; 608 padding: 20px; 609 text-align: center; 610 } 611 612 .modal-overlay.referral-modal-overlay { 613 position: fixed; 614 top: 0; 615 left: 0; 616 width: 100%; 617 height: 100%; 618 background-color: rgba(0, 0, 0, 0.7); 619 z-index: 2001; 620 display: block; 621 opacity: 1;
622 transition: opacity var(--duration-default) ease, visibility 0s; 623 } 624</style> 625 626<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/section-header.css?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 627<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/component-list-menu.css?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 628<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/component-menu-drawer.css?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 629<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/component-cart-notification.css?v1.1?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 630
631<script src="https://store-themes.easystore.co/897/themes/181882/assets/cart-notification.js?t=1787072409" defer="defer"></script>
vendor: 2 bytes, line 631
631
632<script src="https://store-themes.easystore.co/897/themes/181882/assets/details-modal.js?t=1787072409" defer="defer"></script>
632 633 634<svg xmlns="http://www.w3.org/2000/svg" class="hidden"> 635 <symbol id="icon-search" viewbox="0 0 18 19" fill="none"> 636 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z" fill="currentColor"/> 637 </symbol> 638 639 <symbol id="icon-close" class="icon icon-close" fill="none" viewBox="0 0 18 17"> 640 <path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor"> 641 </symbol> 642</svg> 643 644 645<div id="easystore-section-header"> 646 <sticky-header class="header-wrapper header-wrapper--border-bottom"> 647 <header class="header header--middle-left page-width header--has-menu" itemscope itemtype="http://schema.org/Organization"> 648 <header-drawer data-breakpoint="tablet"> 649 <details class="menu-drawer-container menu-opening"> 650 <summary class="header__icon header__icon--menu header__icon--summary link link--text focus-inset" aria-label="Menu" role="button" aria-expanded="true" aria-controls="menu-drawer"> 651 <span> 652 653 654 655 <svg class="icon icon-hamburger " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M32.5,65h535a25,25,0,0,0,0-50H32.5a25,25,0,0,0,0,50Z" fill="currentColor"/><path d="M567.5,275H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/><path d="M567.5,535H32.5a25,25,0,0,0,0,50h535a25,25,0,0,0,0-50Z" fill="currentColor"/></svg> 656 657 658 659 660 661 662 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 663 664 665 666 </span> 667 </summary> 668 <div id="menu-drawer" class="menu-drawer motion-reduce" tabindex="-1"> 669 <div class="menu-drawer__inner-container"> 670 <div class="menu-drawer__navigation-container"> 671 <nav class="menu-drawer__navigation"> 672 <ul class="menu-drawer__menu list-menu" role="list"> 673 674 675 676 <li> 677 <a href="/" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 678 HOME 679 </a> 680 </li> 681 682 683 684 685 686 <li> 687 <details> 688 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 689 <a href="https://www.sayangku.com.my/" class="link--text list-menu__item menu-drawer__menu-item"> 690 IDEAS & INSPIRATION 691 </a> 692 693 694 695 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 696 697 698 699 700 701 702 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 703 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 704 </svg> 705 706 707 708 </summary> 709 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 710 <div class="menu-drawer__inner-submenu"> 711 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 712 713 714 715 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 716 717 718 719 IDEAS & INSPIRATION 720 </button> 721 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 722 723 724 725 <li> 726 <a href="/pages/weekly-special" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 727 W30620 728 </a> 729 </li> 730 731 732 733 734 <li> 735 <a href="/pages/weekly-special-w40620" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 736 W40620 737 </a> 738 </li> 739 740 741 742 743 <li> 744 <a href="/pages/weekly-special-w50620" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 745 W50620 746 </a> 747 </li> 748 749 750 751 752 <li> 753 <a href="/pages/weekly-special-w10720" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 754 W10720 755 </a> 756 </li> 757 758 759 760 761 <li> 762 <a href="/pages/weekly-special-w20720" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 763 W20720 764 </a> 765 </li> 766 767 768 769 770 <li> 771 <a href="/pages/weekly-special-w30720" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 772 W30720 773 </a> 774 </li> 775 776 777 778 779 <li> 780 <a href="/pages/weekly-special-w040720" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 781 W40720 782 </a> 783 </li> 784 785 786 787 788 <li> 789 <a href="/pages/weekly-special-w010820" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 790 W10820 791 </a> 792 </li> 793 794 795 796 797 <li> 798 <a href="/pages/weekly-special-w020820" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 799 W20820 800 </a> 801 </li> 802 803 804 805 806 <li> 807 <a href="/pages/weekly-special-w030820" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 808 W30820 809 </a> 810 </li> 811 812 813 814 815 <li> 816 <a href="/pages/weekly-special-w040820" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 817 W40820 818 </a> 819 </li> 820 821 822 823 </ul> 824 </div> 825 </div> 826 </details> 827 </li> 828 829 830 831 832 833 <li> 834 <details> 835 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 836 <a href="/collections/all" class="link--text list-menu__item menu-drawer__menu-item"> 837 PRODUCT CATEGORY 838 </a> 839 840 841 842 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 843 844 845 846 847 848 849 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 850 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 851 </svg> 852 853 854 855 </summary> 856 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 857 <div class="menu-drawer__inner-submenu"> 858 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 859 860 861 862 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 863 864 865 866 PRODUCT CATEGORY 867 </button> 868 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 869 870 871 872 <li> 873 <a href="/collections/colourful-chenille-stems" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 874 Colourful Chenille Stems 875 </a> 876 </li> 877 878 879 880 881 882 <li> 883 <details> 884 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 885 <a href="/collections/accessorie-material" class="link--text list-menu__item menu-drawer__menu-item"> 886 ACCESSORIE / HANDCRAFT MATERIAL 887 </a> 888 889 890 891 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 892 893 894 895 896 897 898 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 899 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 900 </svg> 901 902 903 904 </summary> 905 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 906 <div class="menu-drawer__inner-submenu"> 907 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 908 909 910 911 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 912 913 914 915 ACCESSORIE / HANDCRAFT MATERIAL 916 </button> 917 <ul class="menu-drawer__menu list-menu" role="list
917" tabindex="-1"> 918 919 920 921 <li> 922 <a href="/collections/deco---handcraft-material" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 923 DECO / HANDCRAFT MATERIAL 924 </a> 925 </li> 926 927 928 929 930 <li> 931 <a href="/collections/poly-foam" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 932 POLY FOAM 933 </a> 934 </li> 935 936 937 938 939 <li> 940 <a href="/collections/tisu-paper" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 941 TISU PAPER 942 </a> 943 </li> 944 945 946 947 948 <li> 949 <a href="/collections/paper-doyleys" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 950 PAPER DOYLEYS 951 </a> 952 </li> 953 954 955 956 957 <li> 958 <a href="/collections/wrapping-paper" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 959 WRAPPING PAPER 960 </a> 961 </li> 962 963 964 965 </ul> 966 </div> 967 </div> 968 </details> 969 </li> 970 971 972 973 974 975 <li> 976 <details> 977 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 978 <a href="/collections/basket---stand---tray" class="link--text list-menu__item menu-drawer__menu-item"> 979 BASKET / STAND / TRAY 980 </a> 981 982 983 984 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 985 986 987 988 989 990 991 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 992 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 993 </svg> 994 995 996 997 </summary> 998 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 999 <div class="menu-drawer__inner-submenu"> 1000 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1001 1002 1003 1004 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1005 1006 1007 1008 BASKET / STAND / TRAY 1009 </button> 1010 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1011 1012 1013 1014 <li> 1015 <a href="/collections/basket---bakul" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1016 BASKET / BAKUL 1017 </a> 1018 </li> 1019 1020 1021 1022 1023 <li> 1024 <a href="/collections/cage---sangkar" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1025 CAGE / SANGKAR 1026 </a> 1027 </li> 1028 1029 1030 1031 1032 <li> 1033 <a href="/collections/dulang---tray" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1034 DULANG / TRAY 1035 </a> 1036 </li> 1037 1038 1039 1040 1041 <li> 1042 <a href="/collections/dowry-tray---gubahan-hantaran" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1043 DOWRY TRAY / GUBAHAN HANTARAN 1044 </a> 1045 </li> 1046 1047 1048 1049 1050 <li> 1051 <a href="/collections/flower-stand---pahar-bunga-telur" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1052 FLOWER STAND / PAHAR BUNGA TELUR 1053 </a> 1054 </li> 1055 1056 1057 1058 1059 <li> 1060 <a href="/collections/quran-holder-book-stand" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1061 QURAN HOLDER BOOK STAND 1062 </a> 1063 </li> 1064 1065 1066 1067 </ul> 1068 </div> 1069 </div> 1070 </details> 1071 </li> 1072 1073 1074 1075 1076 1077 <li> 1078 <details> 1079 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1080 <a href="/collections/bag---box" class="link--text list-menu__item menu-drawer__menu-item"> 1081 BAG / BOX 1082 </a> 1083 1084 1085 1086 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1087 1088 1089 1090 1091 1092 1093 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1094 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1095 </svg> 1096 1097 1098 1099 </summary> 1100 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1101 <div class="menu-drawer__inner-submenu"> 1102 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1103 1104 1105 1106 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1107 1108 1109 1110 BAG / BOX 1111 </button> 1112 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1113 1114 1115 1116 <li> 1117 <a href="/collections/jute-bag" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1118 JUTE BAG 1119 </a> 1120 </li> 1121 1122 1123 1124 1125 <li> 1126 <a href="/collections/organza-bag---pouch" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1127 ORGANZA BAG / POUCH 1128 </a> 1129 </li> 1130 1131 1132 1133 1134 <li> 1135 <a href="/collections/paper-bag" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1136 PAPER BAG 1137 </a> 1138 </li> 1139 1140 1141 1142 1143 <li> 1144 <a href="/collections/plastic-bag" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1145 PLASTIC BAG 1146
1146 </a> 1147 </li> 1148 1149 1150 1151 1152 <li> 1153 <a href="/collections/woven-bag" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1154 WOVEN BAG 1155 </a> 1156 </li> 1157 1158 1159 1160 1161 <li> 1162 <a href="/collections/jewellery-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1163 JEWELLERY BOX 1164 </a> 1165 </li> 1166 1167 1168 1169 1170 <li> 1171 <a href="/collections/metal-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1172 METAL BOX 1173 </a> 1174 </li> 1175 1176 1177 1178 1179 <li> 1180 <a href="/collections/paper-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1181 PAPER BOX 1182 </a> 1183 </li> 1184 1185 1186 1187 1188 <li> 1189 <a href="/collections/plastic-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1190 PLASTIC BOX 1191 </a> 1192 </li> 1193 1194 1195 1196 1197 <li> 1198 <a href="/collections/wood-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1199 WOOD BOX 1200 </a> 1201 </li> 1202 1203 1204 1205 1206 <li> 1207 <a href="/collections/glass-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1208 GLASS BOX 1209 </a> 1210 </li> 1211 1212 1213 1214 </ul> 1215 </div> 1216 </div> 1217 </details> 1218 </li> 1219 1220 1221 1222 1223 <li> 1224 <a href="/collections/beads" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1225 BEADS 1226 </a> 1227 </li> 1228 1229 1230 1231 1232 1233 <li> 1234 <details> 1235 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1236 <a href="/collections/cloth---mat" class="link--text list-menu__item menu-drawer__menu-item"> 1237 CLOTH / MAT 1238 </a> 1239 1240 1241 1242 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1243 1244 1245 1246 1247 1248 1249 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1250 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1251 </svg> 1252 1253 1254 1255 </summary> 1256 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1257 <div class="menu-drawer__inner-submenu"> 1258 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1259 1260 1261 1262 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1263 1264 1265 1266 CLOTH / MAT 1267 </button> 1268 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1269 1270 1271 1272 <li> 1273 <a href="/collections/alas-dulang-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1274 ALAS DULANG CLOTH 1275 </a> 1276 </li> 1277 1278 1279 1280 1281 <li> 1282 <a href="/collections/dokoh-iron-on---iron-pat
1282ch" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1283 DOKOH IRON ON / IRON PATCH 1284 </a> 1285 </li> 1286 1287 1288 1289 1290 <li> 1291 <a href="/collections/feather-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1292 FEATHER CLOTH 1293 </a> 1294 </li> 1295 1296 1297 1298 1299 <li> 1300 <a href="/collections/felt-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1301 FELT CLOTH 1302 </a> 1303 </li> 1304 1305 1306 1307 1308 <li> 1309 <a href="/collections/net-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1310 NET CLOTH 1311 </a> 1312 </li> 1313 1314 1315 1316 1317 <li> 1318 <a href="/collections/organza-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1319 ORGANZA CLOTH 1320 </a> 1321 </li> 1322 1323 1324 1325 1326 <li> 1327 <a href="/collections/satin-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1328 SATIN CLOTH 1329 </a> 1330 </li> 1331 1332 1333 1334 1335 <li> 1336 <a href="/collections/stocking-cloth" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1337 STOCKING CLOTH 1338 </a> 1339 </li> 1340 1341 1342 1343 1344 <li> 1345 <a href="/collections/sequin-net" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1346 SEQUIN NET 1347 </a> 1348 </li> 1349 1350 1351 1352 </ul> 1353 </div> 1354 </div> 1355 </details> 1356 </li> 1357 1358 1359 1360 1361 1362 <li> 1363 <details> 1364 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1365 <a href="/collections/deco---events---party" class="link--text list-menu__item menu-drawer__menu-item"> 1366 DECO / EVENTS / PARTY 1367 </a> 1368 1369 1370 1371 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1372 1373 1374 1375 1376 1377 1378 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1379 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1380 </svg> 1381 1382 1383 1384 </summary> 1385 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1386 <div class="menu-drawer__inner-submenu"> 1387 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1388 1389 1390 1391 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1392 1393 1394 1395 DECO / EVENTS / PARTY 1396 </button> 1397 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1398 1399 1400 1401 <li> 1402 <a href="/collections/birthday" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1403 BIRTHDAY 1404 </a> 1405 </li> 1406 1407 1408 1409 1410 <li> 1411 <a href="/collections/christmas" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1412 CHRISTMAS 1413 </a> 1414 </li> 1415 1416 1417 1418 1419 <li> 1420 <a href="/collections/chinese-new-year" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1421 CHINESE NEW YEAR 1422 </a> 1423 </li> 1424 1425 1426 1427 1428 <li> 1429 <a href="/collections/hari-raya-aidilfitri" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1430 HARI RAYA AIDILFITRI 1431 </a> 1432 </li> 1433 1434 1435 1436 1437 <li> 1438 <a href="/collections/special-decoration-item" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1439 SPECIAL DECORATION ITEM 1440 </a> 1441 </li> 1442 1443 1444 1445 1446 <li> 1447 <a href="/collections/wedding" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1448 WEDDING 1449 </a> 1450 </li> 1451 1452 1453 1454 1455 <li> 1456 <a href="/collections/grand-opening-ceremory-celebration" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1457 GRAND OPENING / CEREMORY / CELEBRATION 1458 </a> 1459 </li> 1460 1461 1462 1463 </ul> 1464 </div> 1465 </div> 1466 </details> 1467 </li> 1468 1469 1470 1471 1472 1473 <li> 1474 <details> 1475 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1476 <a href="/collections/fresh-flower-floral-design" class="link--text list-menu__item menu-drawer__menu-item"> 1477 FRESH FLOWER / ARTIFICIAL FLORAL SIRIH JUNJUNG 1478 </a> 1479 1480 1481 1482 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1483 1484 1485 1486 1487 1488 1489 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1490 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1491 </svg> 1492 1493 1494 1495 </summary> 1496 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1497 <div class="menu-drawer__inner-submenu"> 1498 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1499 1500 1501 1502 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1503 1504 1505 1506 FRESH FLOWER / ARTIFICIAL FLORAL SIRIH JUNJUNG 1507 </button> 1508 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1509 1510 1511
1511 1512 <li> 1513 <a href="/collections/fresh-flower-boutonniere-corsage" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1514 FRESH FLOWER BOUTONNIERE & CORSAGE 1515 </a> 1516 </li> 1517 1518 1519 1520 1521 <li> 1522 <a href="/collections/fresh-rose-bridal-bouquet" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1523 FRESH FLOWER BRIDAL BOUQUET 1524 </a> 1525 </li> 1526 1527 1528 1529 1530 <li> 1531 <a href="/collections/sirih-junjung" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1532 SIRIH JUNJUNG 1533 </a> 1534 </li> 1535 1536 1537 1538 </ul> 1539 </div> 1540 </div> 1541 </details> 1542 </li> 1543 1544 1545 1546 1547 1548 <li> 1549 <details> 1550 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1551 <a href="/collections/floral---flower" class="link--text list-menu__item menu-drawer__menu-item"> 1552 FLORAL / FLOWER 1553 </a> 1554 1555 1556 1557 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1558 1559 1560 1561 1562 1563 1564 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1565 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1566 </svg> 1567 1568 1569 1570 </summary> 1571 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1572 <div class="menu-drawer__inner-submenu"> 1573 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1574 1575 1576 1577 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1578 1579 1580 1581 FLORAL / FLOWER 1582 </button> 1583 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1584 1585 1586 1587 <li> 1588 <a href="/collections/artificial---deco-flower" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1589 ARTIFICIAL / DECO FLOWER 1590 </a> 1591 </li> 1592 1593 1594 1595 1596 <li> 1597 <a href="/collections/artificial---deco-leaf" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1598 ARTIFICIAL / DECO LEAF 1599 </a> 1600 </li> 1601 1602 1603 1604 1605 <li> 1606 <a href="/collections/bridal-bouquet" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1607 BRIDAL BOUQUET 1608 </a> 1609 </li> 1610 1611 1612 1613 1614 <li> 1615 <a href="/collections/bunga-gubahan---flower-decoration" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1616 BUNGA GUBAHAN / FLOWER DECORATION 1617 </a> 1618 </li> 1619 1620 1621 1622 1623 <li> 1624 <a href="/collections/bunga-telur----wedding-flower" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1625 BUNGA TELUR / WEDDING FLOWER 1626 </a> 1627 </li> 1628 1629 1630 1631 1632 <li> 1633 <a href="/collections/bunga-kabur-pinang-gambir" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1634 BUNGA KABUR PINANG GAMBIR 1635 </a> 1636 </li> 1637 1638 1639 1640 1641 <li> 1642 <a href="/collections/bunga-penanggah" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1643 BUNGA PENANGGAH 1644 </a> 1645 </li> 1646 1647 1648 1649 1650 <li> 1651 <a href="/collections/satin-flower" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1652 SATIN FLOWER 1653 </a> 1654 </li> 1655 1656 1657 1658 1659 <li> 1660 <a href="/collections/hand-bouquet-flower-bouquet" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1661 HAND BOUQUET / FLOWER BOUQUET 1662 </a> 1663 </li> 1664 1665 1666 1667 1668 <li> 1669 <a href="/collections/sponge-flower" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1670 SPONGE FLOWER 1671 </a> 1672 </li> 1673 1674 1675 1676 1677 <li> 1678 <a href="/collections/hand-flower" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1679 WRIST BOUQUET 1680 </a> 1681 </li> 1682 1683 1684 1685 </ul> 1686 </div> 1687 </div> 1688 </details> 1689 </li> 1690 1691 1692 1693 1694 1695 <li> 1696 <details> 1697 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1698 <a href="/collections/gift---souvenir" class="link--text list-menu__item menu-drawer__menu-item"> 1699 GIFT / SOUVENIR 1700 </a> 1701 1702 1703 1704 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1705 1706 1707 1708 1709 1710 1711 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1712 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1713 </svg> 1714 1715 1716 1717 </summary> 1718 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1719 <div class="menu-drawer__inner-submenu"> 1720 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1721 1722 1723 1724 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1725 1726 1727 1728 GIFT / SOUVENIR 1729 </button> 1730 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1731 1732 1733 1734 <li> 1735 <a href="/collections/album---frame" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1736 ALBUM / FRAME 1737
1737 </a> 1738 </li> 1739 1740 1741 1742 1743 <li> 1744 <a href="/collections/candle---candy-container" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1745 CANDLE / CANDY CONTAINER 1746 </a> 1747 </li> 1748 1749 1750 1751 1752 <li> 1753 <a href="/collections/crystal-glass-jar" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1754 CRYSTAL GLASS JAR 1755 </a> 1756 </li> 1757 1758 1759 1760 1761 <li> 1762 <a href="/collections/egg-holder---bekas-telur" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1763 EGG HOLDER / BEKAS TELUR 1764 </a> 1765 </li> 1766 1767 1768 1769 1770 <li> 1771 <a href="/collections/gift---present" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1772 GIFT / PRESENT 1773 </a> 1774 </li> 1775 1776 1777 1778 1779 <li> 1780 <a href="/collections/glass---mug" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1781 GLASS / MUG 1782 </a> 1783 </li> 1784 1785 1786 1787 </ul> 1788 </div> 1789 </div> 1790 </details> 1791 </li> 1792 1793 1794 1795 1796 <li> 1797 <a href="/collections/lace" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1798 LACE 1799 </a> 1800 </li> 1801 1802 1803 1804 1805 1806 <li> 1807 <details> 1808 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1809 <a href="/collections/pine-wood" class="link--text list-menu__item menu-drawer__menu-item"> 1810 PINE WOOD 1811 </a> 1812 1813 1814 1815 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1816 1817 1818 1819 1820 1821 1822 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1823 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1824 </svg> 1825 1826 1827 1828 </summary> 1829 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1830 <div class="menu-drawer__inner-submenu"> 1831 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1832 1833 1834 1835 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1836 1837 1838 1839 PINE WOOD 1840 </button> 1841 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1842 1843 1844 1845 <li> 1846 <a href="/collections/pine-wood-tray" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1847 PINE WOOD TRAY 1848 </a> 1849 </li> 1850 1851 1852 1853 1854 <li> 1855 <a href="/collections/pine-wood-box" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1856 PINE WOOD BOX / BASKET 1857 </a> 1858 </li> 1859 1860 1861 1862 1863 <li> 1864 <a href="/collections/pine-wood-stand" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1865 PINE WOOD STAND 1866 </a> 1867 </li> 1868 1869 1870 1871 1872 <li> 1873 <a href="/collections/pine-wood-rack" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1874 PINE WOOD RACK / CABINET 1875 </a> 1876 </li> 1877 1878 1879 1880 1881 <li> 1882 <a href="/collections/pine-wood-pallet" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1883 PINE WOOD PALLET 1884 </a> 1885 </li> 1886 1887 1888 1889 1890 <li> 1891 <a href="/collections/pine-wood-board" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1892 PINE WOOD BOARD 1893 </a> 1894 </li> 1895 1896 1897 1898 </ul> 1899 </div> 1900 </div> 1901 </details> 1902 </li> 1903 1904 1905 1906 1907 1908 <li> 1909 <details> 1910 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 1911 <a href="/collections/ribbon---ribbon-tape" class="link--text list-menu__item menu-drawer__menu-item"> 1912 RIBBON / RIBBON TAPE 1913 </a> 1914 1915 1916 1917 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1918 1919 1920 1921 1922 1923 1924 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 1925 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 1926 </svg> 1927 1928 1929 1930 </summary> 1931 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 1932 <div class="menu-drawer__inner-submenu"> 1933 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 1934 1935 1936 1937 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 1938 1939 1940 1941 RIBBON / RIBBON TAPE 1942 </button> 1943 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 1944 1945 1946 1947 <li> 1948 <a href="/collections/jute-rope-guni-ribbon" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1949 JUTE ROPE / GUNI RIBBON 1950 </a> 1951 </li> 1952 1953 1954 1955 1956 <li> 1957 <a href="/collections/organza-ribbon" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1958 ORGANZA RIBBON 1959 </a> 1960 </li> 1961 1962 1963 1964 1965 <li> 1966 <a href="/collections/polypropylene-pp-ribbon" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1967 POLYPROPYLENE " PP " RIBBON 1968
1968 </a> 1969 </li> 1970 1971 1972 1973 1974 <li> 1975 <a href="/collections/satin-ribbon" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1976 SATIN RIBBON 1977 </a> 1978 </li> 1979 1980 1981 1982 1983 <li> 1984 <a href="/collections/pull-ribbon" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1985 PULL RIBBON 1986 </a> 1987 </li> 1988 1989 1990 1991 1992 <li> 1993 <a href="/collections/ribbon-ball" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 1994 RIBBON BALL 1995 </a> 1996 </li> 1997 1998 1999 2000 </ul> 2001 </div> 2002 </div> 2003 </details> 2004 </li> 2005 2006 2007 2008 2009 2010 <li> 2011 <details> 2012 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 2013 <a href="/collections/sewing---tailoring" class="link--text list-menu__item menu-drawer__menu-item"> 2014 SEWING / TAILORING 2015 </a> 2016 2017 2018 2019 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2020 2021 2022 2023 2024 2025 2026 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2027 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2028 </svg> 2029 2030 2031 2032 </summary> 2033 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 2034 <div class="menu-drawer__inner-submenu"> 2035 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2036 2037 2038 2039 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2040 2041 2042 2043 SEWING / TAILORING 2044 </button> 2045 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 2046 2047 2048 2049 <li> 2050 <a href="/collections/button" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2051 BUTTON 2052 </a> 2053 </li> 2054 2055 2056 2057 2058 <li> 2059 <a href="/collections/elastic---tape" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2060 ELASTIC / TAPE 2061 </a> 2062 </li> 2063 2064 2065 2066 2067 <li> 2068 <a href="/collections/diamond-iron-accessories" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2069 DIAMOND IRON ACCESSORIES 2070 </a> 2071 </li> 2072 2073 2074 2075 2076 <li> 2077 <a href="/collections/machine-oil---belt" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2078 MACHINE OIL / BELT 2079 </a> 2080 </li> 2081 2082 2083 2084 2085 <li> 2086 <a href="/collections/measuring-tape" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2087 MEASURING TAPE 2088 </a> 2089 </li> 2090 2091 2092 2093 2094 <li> 2095 <a href="/collections/needles-accessories" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2096 NEEDLES ACCESSORIES 2097 </a> 2098 </li> 2099 2100 2101 2102 2103 <li> 2104 <a href="/collections/safety-pin" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2105 SAFETY PIN 2106 </a> 2107 </li> 2108 2109 2110 2111 2112 <li> 2113 <a href="/collections/scissor" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2114 SCISSOR 2115 </a> 2116 </li> 2117 2118 2119 2120 2121 <li> 2122 <a href="/collections/sewing-marker" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2123 SEWING MARKER 2124 </a> 2125 </li> 2126 2127 2128 2129 2130 <li> 2131 <a href="/collections/sewing-ruler" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2132 SEWING RULER 2133 </a> 2134 </li> 2135 2136 2137 2138 2139 <li> 2140 <a href="/collections/sewing-tailoring-accessories" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2141 SEWING / TAILORING ACCESSORIES 2142 </a> 2143 </li> 2144 2145 2146 2147 2148 <li> 2149 <a href="/collections/tailor--39s-chalk" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2150 TAILOR&#39S CHALK 2151 </a> 2152 </li> 2153 2154 2155 2156 2157 2158 <li> 2159 <details> 2160 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 2161 <a href="/collections/thread" class="link--text list-menu__item menu-drawer__menu-item"> 2162 THREAD / YARN 2163 </a> 2164 2165 2166 2167 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2168 2169 2170 2171 2172 2173 2174 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2175 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2176 </svg> 2177 2178 2179 2180 </summary> 2181 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 2182 <div class="menu-drawer__inner-submenu"> 2183 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2184 2185 2186 2187 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2188 2189 2190 2191 THREAD / YARN 2192 </button> 2193
2193 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 2194 2195 <li> 2196 <a href="/collections/minlon-poly-crochet-yarn" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 2197 MINLON POLY CROCHET YARN 2198 </a> 2199 </li> 2200 2201 <li> 2202 <a href="/collections/minlon-knitting-yarn-crochet-yarn" class="link--text list-menu__item menu-drawer__menu-item focus-inset"> 2203 MINLON KNITTING YARN / CROCHET YARN 2204 </a> 2205 </li> 2206 2207 </ul> 2208 </div> 2209 </div> 2210 </details> 2211 </li> 2212 2213 2214 2215 2216 <li> 2217 <a href="/collections/tracing-wheel" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2218 TRACING WHEEL 2219 </a> 2220 </li> 2221 2222 2223 2224 </ul> 2225 </div> 2226 </div> 2227 </details> 2228 </li> 2229 2230 2231 2232 2233 <li> 2234 <a href="/collections/vase" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2235 VASE 2236 </a> 2237 </li> 2238 2239 2240 2241 2242 2243 <li> 2244 <details> 2245 <summary class="menu-drawer__menu-item list-menu__item link link--text focus-inset" role="button" aria-expanded="false" aria-controls="link-Bags"> 2246 <a href="/collections/wholesale-product" class="link--text list-menu__item menu-drawer__menu-item"> 2247 WHOLESALE PRODUCT 2248 </a> 2249 2250 2251 2252 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2253 2254 2255 2256 2257 2258 2259 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2260 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2261 </svg> 2262 2263 2264 2265 </summary> 2266 <div class="menu-drawer__submenu motion-reduce" tabindex="-1"> 2267 <div class="menu-drawer__inner-submenu"> 2268 <button class="menu-drawer__close-button link link--text focus-inset" aria-expanded="true"> 2269 2270 2271 2272 <svg class="icon icon-arrow " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 339.56"><path d="M31.06,196.67H504l-88.56,88.56a26.89,26.89,0,1,0,38,38L588,188.79a26.89,26.89,0,0,0,0-38L453.49,16.29a26.89,26.89,0,0,0-38,38L504,142.88H31.06a26.9,26.9,0,0,0,0,53.79Z" fill="currentColor"/></svg> 2273 2274 2275 2276 WHOLESALE PRODUCT 2277 </button> 2278 <ul class="menu-drawer__menu list-menu" role="list" tabindex="-1"> 2279 2280 2281 2282 <li> 2283 <a href="/collections/plastic-container" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2284 PLASTIC CONTAINER 2285 </a> 2286 </li> 2287 2288 2289 2290 2291 <li> 2292 <a href="/collections/glassware" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2293 GLASSWARE 2294 </a> 2295 </li> 2296 2297 2298 2299 2300 <li> 2301 <a href="/collections/plastic-bottle" class="menu-drawer__menu-item link link--text list-menu__item focus-inset"> 2302 PLASTIC BOTTLE 2303 </a> 2304 </li> 2305 2306 2307 2308 </ul> 2309 </div> 2310 </div> 2311 </details> 2312 </li> 2313 2314 2315 2316 </ul> 2317 </div> 2318 </div> 2319 </details> 2320 </li> 2321 2322 2323 2324 2325 <li> 2326 <a href="/pages/wedding-car" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 2327 WEDDING CAR 2328 </a> 2329 </li> 2330 2331 2332 2333 2334 <li> 2335 <a href="/pages/shipping-policy" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 2336 SHIPPING POLICY 2337 </a> 2338 </li> 2339 2340 2341 2342 2343 <li> 2344 <a href="/pages/contact-us" class="menu-drawer__menu-item list-menu__item link link--text focus-inset"> 2345 CONTACT US 2346 </a> 2347 </li> 2348 2349 2350 </ul> 2351 </nav> 2352 2353 <div class="menu-drawer__utility-links"> 2354 2355 2356 2357 2358 2359 2360 2361 2362 <a href="/account/login" class="menu-drawer__account link link--text focus-inset h5"> 2363 2364 2365 2366 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 2367 2368 2369 2370 2371 Log in 2372 </a> 2373 2374 <a href="/account/register" class="menu-drawer__account link link--text focus-inset h5"> 2375 2376 2377 2378 2379 <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" role="presentation" class="icon icon-plus " fill="none" viewBox="0 0 10 10"> 2380 <path fill-rule="evenodd" clip-rule="evenodd" d="M1 4.51a.5.5 0 000 1h3.5l.01 3.5a.5.5 0 001-.01V5.5l3.5-.01a.5.5 0 00-.01-1H5.5L5.49.99a.5.5 0 00-1 .01v3.5l-3.5.01H1z" fill="currentColor"></path> 2381 </svg> 2382 2383 2384 2385 Create account 2386 </a> 2387 2388 2389 2390 </div> 2391 </div> 2392 </div> 2393 </div> 2394 </details> 2395 </header-drawer> 2396 2397 2398 <a href="/" class="header__heading-link link link--text focus-inset" itemprop="url"> 2399 <img src="https://cdn.store-assets.com/s/897/f/16275011.png" class="header__heading-logo" alt="Sayangku Handcraft" loading="lazy" itemprop="logo"> 2400 </a> 2401 2402 2403 2404 <div class="header__search-input" tabindex="-1"> 2405 <form action="/search" method="get" role="search" class="search search-modal__form"> 2406 <div class="field"> 2407 <input class="search__input field__input" 2408 id="Search-In-Modal" 2409 type="search" 2410 name="q" 2411 value="" 2412 placeholder="Search" 2413 autocomplete="off" 2414 > 2415 <label class="field__label" for="Search-In-Modal">Search</label> 2416 <div class="dropdown" id="searchDropdown"></div> 2417 <input type="hidden" name="search_history" class="hidden_search_history"> 2418 <input type="hidden" name="options[prefix]" value="last"> 2419 <button class="search__button field__button" aria-label="Search"> 2420 <svg class="icon icon-search" aria-hidden="true" focusable="false" role="presentation"> 2421 <use href="#icon-search"> 2422 </svg> 2423 </button> 2424 </div> 2425 </form> 2426 </div> 2427 2428 2429 <nav class="header__inline-menu"> 2430 <ul class="list-menu list-menu--inline" role="list"> 2431 2432 2433 2434 <li> 2435 <a href="/" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 2436 HOME 2437 </a> 2438 </li> 2439 2440 2441 2442 2443 2444 <li> 2445 <details-disclosure> 2446 <details> 2447 <summary class="header__menu-item list-menu__item link focus-inset"> 2448 <a href="https://www.sayangku.com.my/" >IDEAS & INSPIRATION</a> 2449 2450 2451 2452 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2453 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2454 </svg> 2455 2456 2457 2458 </summary> 2459 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 2460 2461 2462 2463 2464 2465 <li> 2466 <a href="/pages/weekly-special" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2467 W30620 2468 </a> 2469 </li> 2470 2471 2472 2473 2474 2475 <li> 2476 <a href="/pages/weekly-special-w40620" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2477 W40620 2478 </a> 2479 </li> 2480 2481 2482 2483 2484 2485 <li> 2486 <a href="/pages/weekly-special-w50620" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2487 W50620 2488 </a> 2489 </li> 2490 2491 2492 2493 2494 2495 <li> 2496 <a href="/pages/weekly-special-w10720" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2497 W10720 2498 </a> 2499 </li> 2500 2501 2502 2503 2504 2505 <li> 2506 <a
2506 href="/pages/weekly-special-w20720" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2507 W20720 2508 </a> 2509 </li> 2510 2511 2512 2513 2514 2515 <li> 2516 <a href="/pages/weekly-special-w30720" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2517 W30720 2518 </a> 2519 </li> 2520 2521 2522 2523 2524 2525 <li> 2526 <a href="/pages/weekly-special-w040720" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2527 W40720 2528 </a> 2529 </li> 2530 2531 2532 2533 2534 2535 <li> 2536 <a href="/pages/weekly-special-w010820" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2537 W10820 2538 </a> 2539 </li> 2540 2541 2542 2543 2544 2545 <li> 2546 <a href="/pages/weekly-special-w020820" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2547 W20820 2548 </a> 2549 </li> 2550 2551 2552 2553 2554 2555 <li> 2556 <a href="/pages/weekly-special-w030820" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2557 W30820 2558 </a> 2559 </li> 2560 2561 2562 2563 2564 2565 <li> 2566 <a href="/pages/weekly-special-w040820" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2567 W40820 2568 </a> 2569 </li> 2570 2571 2572 </ul> 2573 </details> 2574 </details-disclosure> 2575 </li> 2576 2577 2578 2579 2580 2581 <li> 2582 <details-disclosure> 2583 <details> 2584 <summary class="header__menu-item list-menu__item link focus-inset"> 2585 <a href="/collections/all" >PRODUCT CATEGORY</a> 2586 2587 2588 2589 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret " viewBox="0 0 10 6"> 2590 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2591 </svg> 2592 2593 2594 2595 </summary> 2596 <ul class="header__submenu list-menu list-menu--disclosure caption-large motion-reduce" role="list" tabindex="-1"> 2597 2598 2599 2600 2601 2602 <li> 2603 <a href="/collections/colourful-chenille-stems" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2604 Colourful Chenille Stems 2605 </a> 2606 </li> 2607 2608 2609 2610 2611 2612 <li> 2613 <details-disclosure> 2614 <details> 2615 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 2616 <a href="/collections/accessorie-material" >ACCESSORIE / HANDCRAFT MATERIAL</a> 2617 2618 2619 2620 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 2621 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2622 </svg> 2623 2624 2625 2626 </summary> 2627 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 2628 2629 2630 2631 <li> 2632 <a href="/collections/deco---handcraft-material" class="header__menu-item list-menu__item link link--text focus-inset caption-large">DECO / HANDCRAFT MATERIAL</a> 2633 </li> 2634 2635 2636 2637 2638 <li> 2639 <a href="/collections/poly-foam" class="header__menu-item list-menu__item link link--text focus-inset caption-large">POLY FOAM</a> 2640 </li> 2641 2642 2643 2644 2645 <li> 2646 <a href="/collections/tisu-paper" class="header__menu-item list-menu__item link link--text focus-inset caption-large">TISU PAPER</a> 2647 </li> 2648 2649 2650 2651 2652 <li> 2653 <a href="/collections/paper-doyleys" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PAPER DOYLEYS</a> 2654 </li> 2655 2656 2657 2658 2659 <li> 2660 <a href="/collections/wrapping-paper" class="header__menu-item list-menu__item link link--text focus-inset caption-large">WRAPPING PAPER</a> 2661 </li> 2662 2663 2664 </ul> 2665 </details> 2666 </details-disclosure> 2667 </li> 2668 2669 2670 2671 2672 2673 2674 <li> 2675 <details-disclosure> 2676 <details> 2677 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 2678 <a href="/collections/basket---stand---tray" >BASKET / STAND / TRAY</a> 2679 2680 2681 2682 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 2683 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2684 </svg> 2685 2686 2687 2688 </summary> 2689 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 2690 2691 2692 2693 <li> 2694 <a href="/collections/basket---bakul" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BASKET / BAKUL</a> 2695 </li> 2696 2697 2698 2699 2700 <li> 2701 <a href="/collections/cage---sangkar" class="header__menu-item list-menu__item link link--text focus-inset caption-large">CAGE / SANGKAR</a> 2702 </li> 2703 2704 2705 2706 2707 <li> 2708 <a href="/collections/dulang---tray" class="header__menu-item list-menu__item link link--text focus-inset caption-large">DULANG / TRAY</a> 2709 </li> 2710 2711 2712 2713 2714 <li> 2715 <a href="/collections/dowry-tray---gubahan-hantaran" class="header__menu-item list-menu__item link link--text focus-inset caption-large">DOWRY TRAY / GUBAHAN HANTARAN</a> 2716 </li> 2717 2718 2719 2720 2721 <li> 2722 <a href="/collections/flower-stand---pahar-bunga-telur" class="header__menu-item list-menu__item link link--text focus-inset caption-large">FLOWER STAND / PAHAR BUNGA TELUR</a> 2723 </li> 2724 2725 2726 2727 2728 <li> 2729 <a href="/collections/quran-holder-book-stand" class="header__menu-item list-menu__item link link--text focus-inset caption-large">QURAN HOLDER BOOK STAND</a> 2730 </li> 2731 2732 2733 </ul> 2734 </details> 2735 </details-disclosure> 2736 </li> 2737 2738 2739 2740 2741 2742 2743 <li> 2744 <details-disclosure> 2745 <details> 2746 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 2747 <a href="/collections/bag---box" >BAG / BOX</a> 2748 2749 2750 2751 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 2752 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2753 </svg> 2754 2755 2756 2757 </summary> 2758 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 2759 2760 2761 2762 <li> 2763 <a href="/collections/jute-bag" class="header__menu-item list-menu__item link link--text focus-inset caption-large">JUTE BAG</a> 2764 </li> 2765 2766 2767 2768 2769 <li> 2770 <a href="/collections/organza-bag---pouch" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ORGANZA BAG / POUCH</a> 2771 </li> 2772 2773 2774 2775 2776 <li> 2777 <a href="/collections/paper-bag" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PAPER BAG</a> 2778 </li> 2779 2780 2781 2782 2783 <li> 2784 <a href="/collections/plastic-bag" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PLASTIC BAG</a> 2785 </li> 2786 2787 2788 2789 2790 <li> 2791 <a href="/collections/woven-bag" class="header__menu-item list-menu__item link link--text focus-inset caption-large">WOVEN BAG</a> 2792 </li> 2793 2794 2795 2796 2797 <li> 2798 <a href="/collections/jewellery-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">
2798JEWELLERY BOX</a> 2799 </li> 2800 2801 2802 2803 2804 <li> 2805 <a href="/collections/metal-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">METAL BOX</a> 2806 </li> 2807 2808 2809 2810 2811 <li> 2812 <a href="/collections/paper-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PAPER BOX</a> 2813 </li> 2814 2815 2816 2817 2818 <li> 2819 <a href="/collections/plastic-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PLASTIC BOX</a> 2820 </li> 2821 2822 2823 2824 2825 <li> 2826 <a href="/collections/wood-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">WOOD BOX</a> 2827 </li> 2828 2829 2830 2831 2832 <li> 2833 <a href="/collections/glass-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">GLASS BOX</a> 2834 </li> 2835 2836 2837 </ul> 2838 </details> 2839 </details-disclosure> 2840 </li> 2841 2842 2843 2844 2845 2846 2847 <li> 2848 <a href="/collections/beads" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 2849 BEADS 2850 </a> 2851 </li> 2852 2853 2854 2855 2856 2857 <li> 2858 <details-disclosure> 2859 <details> 2860 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 2861 <a href="/collections/cloth---mat" >CLOTH / MAT</a> 2862 2863 2864 2865 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 2866 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2867 </svg> 2868 2869 2870 2871 </summary> 2872 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 2873 2874 2875 2876 <li> 2877 <a href="/collections/alas-dulang-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">
2877ALAS DULANG CLOTH</a> 2878 </li> 2879 2880 2881 2882 2883 <li> 2884 <a href="/collections/dokoh-iron-on---iron-patch" class="header__menu-item list-menu__item link link--text focus-inset caption-large">DOKOH IRON ON / IRON PATCH</a> 2885 </li> 2886 2887 2888 2889 2890 <li> 2891 <a href="/collections/feather-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">FEATHER CLOTH</a> 2892 </li> 2893 2894 2895 2896 2897 <li> 2898 <a href="/collections/felt-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">FELT CLOTH</a> 2899 </li> 2900 2901 2902 2903 2904 <li> 2905 <a href="/collections/net-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">NET CLOTH</a> 2906 </li> 2907 2908 2909 2910 2911 <li> 2912 <a href="/collections/organza-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ORGANZA CLOTH</a> 2913 </li> 2914 2915 2916 2917 2918 <li> 2919 <a href="/collections/satin-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SATIN CLOTH</a> 2920 </li> 2921 2922 2923 2924 2925 <li> 2926 <a href="/collections/stocking-cloth" class="header__menu-item list-menu__item link link--text focus-inset caption-large">STOCKING CLOTH</a> 2927 </li> 2928 2929 2930 2931 2932 <li> 2933 <a href="/collections/sequin-net" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SEQUIN NET</a> 2934 </li> 2935 2936 2937 </ul> 2938 </details> 2939 </details-disclosure> 2940 </li> 2941 2942 2943 2944 2945 2946 2947 <li> 2948 <details-disclosure> 2949 <details> 2950 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 2951 <a href="/collections/deco---events---party" >DECO / EVENTS / PARTY</a> 2952 2953 2954 2955 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 2956 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 2957 </svg> 2958 2959 2960 2961 </summary> 2962 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 2963 2964 2965 2966 <li> 2967 <a href="/collections/birthday" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BIRTHDAY</a> 2968 </li> 2969 2970 2971 2972 2973 <li> 2974 <a href="/collections/christmas" class="header__menu-item list-menu__item link link--text focus-inset caption-large">CHRISTMAS</a> 2975 </li> 2976 2977 2978 2979 2980 <li> 2981 <a href="/collections/chinese-new-year" class="header__menu-item list-menu__item link link--text focus-inset caption-large">CHINESE NEW YEAR</a> 2982 </li> 2983 2984 2985 2986 2987 <li> 2988 <a href="/collections/hari-raya-aidilfitri" class="header__menu-item list-menu__item link link--text focus-inset caption-large">HARI RAYA AIDILFITRI</a> 2989 </li> 2990 2991 2992 2993 2994 <li> 2995 <a href="/collections/special-decoration-item" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SPECIAL DECORATION ITEM</a> 2996 </li> 2997 2998 2999 3000 3001 <li> 3002 <a href="/collections/wedding" class="header__menu-item list-menu__item link link--text focus-inset caption-large">WEDDING</a> 3003 </li> 3004 3005 3006 3007 3008 <li> 3009 <a href="/collections/grand-opening-ceremory-celebration" class="header__menu-item list-menu__item link link--text focus-inset caption-large">GRAND OPENING / CEREMORY / CELEBRATION</a> 3010 </li> 3011 3012 3013 </ul> 3014 </details> 3015 </details-disclosure> 3016 </li> 3017 3018 3019 3020 3021 3022 3023 <li> 3024 <details-disclosure> 3025 <details> 3026 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3027 <a href="/collections/fresh-flower-floral-design" >FRESH FLOWER / ARTIFICIAL FLORAL SIRIH JUNJUNG</a> 3028 3029 3030 3031 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3032 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3033 </svg> 3034 3035 3036 3037 </summary> 3038 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3039 3040 3041 3042 <li> 3043 <a href="/collections/fresh-flower-boutonniere-corsage" class="header__menu-item list-menu__item link link--text focus-inset caption-large">FRESH FLOWER BOUTONNIERE & CORSAGE</a> 3044 </li> 3045 3046 3047 3048 3049 <li> 3050 <a href="/collections/fresh-rose-bridal-bouquet" class="header__menu-item list-menu__item link link--text focus-inset caption-large">FRESH FLOWER BRIDAL BOUQUET</a> 3051 </li> 3052 3053 3054 3055 3056 <li> 3057 <a href="/collections/sirih-junjung" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SIRIH JUNJUNG</a> 3058 </li> 3059 3060 3061 </ul> 3062 </details> 3063 </details-disclosure> 3064 </li> 3065 3066 3067 3068 3069 3070 3071 <li> 3072 <details-disclosure> 3073 <details> 3074 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3075 <a href="/collections/floral---flower" >FLORAL / FLOWER</a> 3076 3077 3078 3079 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3080 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3081 </svg> 3082 3083 3084 3085 </summary> 3086 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3087 3088 3089 3090 <li> 3091 <a href="/collections/artificial---deco-flower" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ARTIFICIAL / DECO FLOWER</a> 3092 </li> 3093 3094 3095 3096 3097 <li> 3098 <a href="/collections/artificial---deco-leaf" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ARTIFICIAL / DECO LEAF</a> 3099 </li> 3100 3101 3102 3103 3104 <li> 3105 <a href="/collections/bridal-bouquet" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BRIDAL BOUQUET</a> 3106 </li> 3107 3108 3109 3110 3111 <li> 3112 <a href="/collections/bunga-gubahan---flower-decoration" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BUNGA GUBAHAN / FLOWER DECORATION</a> 3113 </li> 3114 3115 3116 3117 3118 <li> 3119 <a href="/collections/bunga-telur----wedding-flower" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BUNGA TELUR / WEDDING FLOWER</a> 3120 </li> 3121 3122 3123 3124 3125 <li> 3126 <a href="/collections/bunga-kabur-pinang-gambir" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BUNGA KABUR PINANG GAMBIR</a> 3127 </li> 3128 3129 3130 3131 3132 <li> 3133 <a href="/collections/bunga-penanggah" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BUNGA PENANGGAH</a> 3134 </li> 3135 3136 3137 3138 3139 <li> 3140 <a href="/collections/satin-flower" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SATIN FLOWER</a> 3141 </li> 3142 3143 3144 3145 3146 <li> 3147 <a href="/collections/hand-bouquet-flower-bouquet" class="header__menu-item list-menu__item link link--text focus-inset caption-large">HAND BOUQUET / FLOWER BOUQUET</a> 3148 </li> 3149 3150 3151 3152 3153 <li> 3154 <a href="/collections/sponge-flower" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SPONGE FLOWER</a> 3155 </li> 3156
3157 3158 3159 3160 <li> 3161 <a href="/collections/hand-flower" class="header__menu-item list-menu__item link link--text focus-inset caption-large">WRIST BOUQUET</a> 3162 </li> 3163 3164 3165 </ul> 3166 </details> 3167 </details-disclosure> 3168 </li> 3169 3170 3171 3172 3173 3174 3175 <li> 3176 <details-disclosure> 3177 <details> 3178 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3179 <a href="/collections/gift---souvenir" >GIFT / SOUVENIR</a> 3180 3181 3182 3183 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3184 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3185 </svg> 3186 3187 3188 3189 </summary> 3190 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3191 3192 3193 3194 <li> 3195 <a href="/collections/album---frame" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ALBUM / FRAME</a> 3196 </li> 3197 3198 3199 3200 3201 <li> 3202 <a href="/collections/candle---candy-container" class="header__menu-item list-menu__item link link--text focus-inset caption-large">CANDLE / CANDY CONTAINER</a> 3203 </li> 3204 3205 3206 3207 3208 <li> 3209 <a href="/collections/crystal-glass-jar" class="header__menu-item list-menu__item link link--text focus-inset caption-large">CRYSTAL GLASS JAR</a> 3210 </li> 3211 3212 3213 3214 3215 <li> 3216 <a href="/collections/egg-holder---bekas-telur" class="header__menu-item list-menu__item link link--text focus-inset caption-large">EGG HOLDER / BEKAS TELUR</a> 3217 </li> 3218 3219 3220 3221 3222 <li> 3223 <a href="/collections/gift---present" class="header__menu-item list-menu__item link link--text focus-inset caption-large">GIFT / PRESENT</a> 3224 </li> 3225 3226 3227 3228 3229 <li> 3230 <a href="/collections/glass---mug" class="header__menu-item list-menu__item link link--text focus-inset caption-large">GLASS / MUG</a> 3231 </li> 3232 3233 3234 </ul> 3235 </details> 3236 </details-disclosure> 3237 </li> 3238 3239 3240 3241 3242 3243 3244 <li> 3245 <a href="/collections/lace" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 3246 LACE 3247 </a> 3248 </li> 3249 3250 3251 3252 3253 3254 <li> 3255 <details-disclosure> 3256 <details> 3257 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3258 <a href="/collections/pine-wood" >PINE WOOD</a> 3259 3260 3261 3262 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3263 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3264 </svg> 3265 3266 3267 3268 </summary> 3269 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3270 3271 3272 3273 <li> 3274 <a href="/collections/pine-wood-tray" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD TRAY</a> 3275 </li> 3276 3277 3278 3279 3280 <li> 3281 <a href="/collections/pine-wood-box" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD BOX / BASKET</a> 3282 </li> 3283 3284 3285 3286 3287 <li> 3288 <a href="/collections/pine-wood-stand" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD STAND</a> 3289 </li> 3290 3291 3292 3293 3294 <li> 3295 <a href="/collections/pine-wood-rack" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD RACK / CABINET</a> 3296 </li> 3297 3298 3299 3300 3301 <li> 3302 <a href="/collections/pine-wood-pallet" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD PALLET</a> 3303 </li> 3304 3305 3306 3307 3308 <li> 3309 <a href="/collections/pine-wood-board" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PINE WOOD BOARD</a> 3310 </li> 3311 3312 3313 </ul> 3314 </details> 3315 </details-disclosure> 3316 </li> 3317 3318 3319 3320 3321 3322 3323 <li> 3324 <details-disclosure> 3325 <details> 3326 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3327 <a href="/collections/ribbon---ribbon-tape" >RIBBON / RIBBON TAPE</a> 3328 3329 3330 3331 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3332 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3333 </svg> 3334 3335 3336 3337 </summary> 3338 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3339 3340 3341 3342 <li> 3343 <a href="/collections/jute-rope-guni-ribbon" class="header__menu-item list-menu__item link link--text focus-inset caption-large">JUTE ROPE / GUNI RIBBON</a> 3344 </li> 3345 3346 3347 3348 3349 <li> 3350 <a href="/collections/organza-ribbon" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ORGANZA RIBBON</a> 3351 </li> 3352 3353 3354 3355 3356 <li> 3357 <a href="/collections/polypropylene-pp-ribbon" class="header__menu-item list-menu__item link link--text focus-inset caption-large">POLYPROPYLENE " PP " RIBBON</a> 3358 </li> 3359 3360 3361 3362 3363 <li> 3364 <a href="/collections/satin-ribbon" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SATIN RIBBON</a> 3365 </li> 3366 3367 3368 3369 3370 <li> 3371 <a href="/collections/pull-ribbon" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PULL RIBBON</a> 3372 </li> 3373 3374 3375 3376 3377 <li> 3378 <a href="/collections/ribbon-ball" class="header__menu-item list-menu__item link link--text focus-inset caption-large">RIBBON BALL</a> 3379 </li> 3380 3381 3382 </ul> 3383 </details> 3384 </details-disclosure> 3385 </li> 3386 3387 3388 3389 3390 3391 3392 <li> 3393 <details-disclosure> 3394 <details> 3395 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3396 <a href="/collections/sewing---tailoring" >SEWING / TAILORING</a> 3397 3398 3399 3400 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3401 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3402 </svg> 3403 3404 3405 3406 </summary> 3407 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3408 3409 3410 3411 <li> 3412 <a href="/collections/button" class="header__menu-item list-menu__item link link--text focus-inset caption-large">BUTTON</a> 3413 </li> 3414 3415 3416 3417 3418 <li> 3419 <a href="/collections/elastic---tape" class="header__menu-item list-menu__item link link--text focus-inset caption-large">ELASTIC / TAPE</a> 3420 </li> 3421 3422 3423 3424 3425 <li> 3426 <a href="/collections/diamond-iron-accessories" class="header__menu-item list-menu__item link link--text focus-inset caption-large">DIAMOND IRON ACCESSORIES</a> 3427 </li> 3428 3429 3430 3431 3432 <li> 3433 <a href="/collections/machine-oil---belt" class="header__menu-item list-menu__item link link--text focus-inset caption-large">MACHINE OIL / BELT</a> 3434 </li> 3435 3436 3437 3438 3439 <li> 3440 <a href="/collections/measuring-tape" class="header__menu-item list-menu__item link link--text focus-inset caption-large">MEASURING TAPE</a> 3441 </li> 3442 3443 3444 3445 3446 <li> 3447 <a href="/collections/needles-accessories" class="header__menu-item list-menu__item link link--text focus-inset caption-large">NEEDLES ACCESSORIES</a> 3448
3448 </li> 3449 3450 3451 3452 3453 <li> 3454 <a href="/collections/safety-pin" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SAFETY PIN</a> 3455 </li> 3456 3457 3458 3459 3460 <li> 3461 <a href="/collections/scissor" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SCISSOR</a> 3462 </li> 3463 3464 3465 3466 3467 <li> 3468 <a href="/collections/sewing-marker" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SEWING MARKER</a> 3469 </li> 3470 3471 3472 3473 3474 <li> 3475 <a href="/collections/sewing-ruler" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SEWING RULER</a> 3476 </li> 3477 3478 3479 3480 3481 <li> 3482 <a href="/collections/sewing-tailoring-accessories" class="header__menu-item list-menu__item link link--text focus-inset caption-large">SEWING / TAILORING ACCESSORIES</a> 3483 </li> 3484 3485 3486 3487 3488 <li> 3489 <a href="/collections/tailor--39s-chalk" class="header__menu-item list-menu__item link link--text focus-inset caption-large">TAILOR&#39S CHALK</a> 3490 </li> 3491 3492 3493 3494 3495 3496 <li> 3497 <details-disclosure> 3498 <details> 3499 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3500 <a href="/collections/thread" > 3501 THREAD / YARN 3502 </a> 3503 3504 3505 3506 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3507 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3508 </svg> 3509 3510 3511 3512 </summary> 3513 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3514 3515 <li> 3516 <a href="/collections/minlon-poly-crochet-yarn" class="header__menu-item list-menu__item link link--text focus-inset caption-large">MINLON POLY CROCHET YARN</a> 3517 </li> 3518 3519 <li> 3520 <a href="/collections/minlon-knitting-yarn-crochet-yarn" class="header__menu-item list-menu__item link link--text focus-inset caption-large">MINLON KNITTING YARN / CROCHET YARN</a> 3521 </li> 3522 3523 </ul> 3524 </details> 3525 </details-disclosure> 3526 </li> 3527 3528 3529 3530 3531 <li> 3532 <a href="/collections/tracing-wheel" class="header__menu-item list-menu__item link link--text focus-inset caption-large">TRACING WHEEL</a> 3533 </li> 3534 3535 3536 </ul> 3537 </details> 3538 </details-disclosure> 3539 </li> 3540 3541 3542 3543 3544 3545 3546 <li> 3547 <a href="/collections/vase" class="header__menu-item list-menu__item link link--text focus-inset caption-large"> 3548 VASE 3549 </a> 3550 </li> 3551 3552 3553 3554 3555 3556 <li> 3557 <details-disclosure> 3558 <details> 3559 <summary class="header__menu-item link link--text list-menu__item focus-inset caption-large"> 3560 <a href="/collections/wholesale-product" >WHOLESALE PRODUCT</a> 3561 3562 3563 3564 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-caret rotate-90" viewBox="0 0 10 6"> 3565 <path fill-rule="evenodd" clip-rule="evenodd" d="M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4-4a.5.5 0 000-.708z" fill="currentColor"></path> 3566 </svg> 3567 3568 3569 3570 </summary> 3571 <ul class="header__submenu list-menu list-menu--disclosure motion-reduce"> 3572 3573 3574 3575 <li> 3576 <a href="/collections/plastic-container" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PLASTIC CONTAINER</a> 3577 </li> 3578 3579 3580 3581 3582 <li> 3583 <a href="/collections/glassware" class="header__menu-item list-menu__item link link--text focus-inset caption-large">GLASSWARE</a> 3584 </li> 3585 3586 3587 3588 3589 <li> 3590 <a href="/collections/plastic-bottle" class="header__menu-item list-menu__item link link--text focus-inset caption-large">PLASTIC BOTTLE</a> 3591 </li> 3592 3593 3594 </ul> 3595 </details> 3596 </details-disclosure> 3597 </li> 3598 3599 3600 3601 </ul> 3602 </details> 3603 </details-disclosure> 3604 </li> 3605 3606 3607 3608 3609 <li> 3610 <a href="/pages/wedding-car" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 3611 WEDDING CAR 3612 </a> 3613 </li> 3614 3615 3616 3617 3618 <li> 3619 <a href="/pages/shipping-policy" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 3620 SHIPPING POLICY 3621 </a> 3622 </li> 3623 3624 3625 3626 3627 <li> 3628 <a href="/pages/contact-us" class="header__menu-item header__menu-item list-menu__item link link--text focus-inset"> 3629 CONTACT US 3630 </a> 3631 </li> 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 </ul> 3645 </nav> 3646 <div class="header__icons"> 3647 3648 3649 3650 <div class="header__icon header__icon--account link link--text focus-inset small-hide medium-hide" style="position: relative;"> 3651 <a href="/account/login" class="header__icon link link--text focus-inset p-2"> 3652 3653 3654 3655 <svg class="icon icon-account " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M300,296.19c-70.7,0-137.11,28.74-187,80.93-49.59,51.87-76.9,120.77-76.9,194v25H563.89v-25c0-73.22-27.31-142.12-76.9-194C437.11,324.93,370.7,296.19,300,296.19ZM87.42,546.11C99.29,433.81,190.1,346.19,300,346.19s200.71,87.62,212.58,199.92Z" fill="currentColor"/><path d="M300,285.34c77.6,0,140.73-63.13,140.73-140.73S377.6,3.89,300,3.89,159.27,67,159.27,144.61,222.4,285.34,300,285.34Zm0-231.45a90.73,90.73,0,1,1-90.73,90.72A90.82,90.82,0,0,1,300,53.89Z" fill="currentColor"/></svg> 3656 3657 3658
3659 <span id="my-account" class="header__link-label">Login</span> 3660 </a> 3661 3662 <!-- Referral Notification Popup for Desktop --> 3663 <div id="referralNotification" class="referral-notification" style="display: none;"> 3664 <button class="close-btn" onclick="dismissReferralNotification()">×</button> 3665 <div style="text-align: center; margin-bottom: 16px;"> 3666 <div style="width: 100px; height: 100px; margin: 0 auto;"> 3667 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg"> 3668 </div> 3669 </div> 3670 <p id="referralSignupMessage" style="text-align: center; font-size: 14px; color: #666; margin: 0 0 20px 0;"> 3671 Your friend gifted you credit! Sign up now to redeem. 3672 </p> 3673 <div style="text-align: center;"> 3674 <button class="btn" onclick="goToSignupPage()" style="width: 100%;"> 3675 Sign Up 3676 </button> 3677 </div> 3678 </div> 3679 </div> 3680 3681 3682 3683 <a href="/cart" class="header__icon link link--text focus-inset" id="cart-icon-bubble"> 3684 <span class="header__icon--cart"> 3685 3686 3687 3688 <svg class="icon icon-cart-empty " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496.56 600"><path d="M453.52,128.63a25,25,0,0,0-24.91-22.8H364.72a117.48,117.48,0,0,0-232.89,0H67.94A25,25,0,0,0,43,128.63L8.8,515.21a72.11,72.11,0,0,0,19.05,55.6,79,79,0,0,0,58.22,25.3H410.49a79,79,0,0,0,58.22-25.3,72.11,72.11,0,0,0,19.05-55.6ZM248.28,53.89a67.58,67.58,0,0,1,65.65,51.94H182.63A67.57,67.57,0,0,1,248.28,53.89ZM431.83,537.05a28.85,28.85,0,0,1-21.34,9.06H86.07a28.85,28.85,0,0,1-21.34-9.06,22.69,22.69,0,0,1-6.13-17.43L90.82,155.83h40v51.23a25,25,0,0,0,50,0V155.83h135v51.23a25,25,0,0,0,50,0V155.83h40L438,519.62A22.68,22.68,0,0,1,431.83,537.05Z" fill="currentColor"/></svg> 3689 3690 3691 3692 <div class="cart-count-bubble hidden"> 3693 <span aria-hidden="true" class="js-content-cart-count">0</span> 3694 </div> 3695 </span> 3696 <span class="header__link-label medium-hide small-hide"> 3697 Cart 3698 </span> 3699 </a> 3700 3701 3702 3703 <!-- Referral Notification Modal for Mobile --> 3704 <details-modal class="referral-modal" id="referralMobileModal"> 3705 <details> 3706 <summary class="referral-modal__toggle" aria-haspopup="dialog" aria-label="Open referral modal" style="display: none;"> 3707 </summary> 3708 <div class="modal-overlay referral-modal-overlay"></div> 3709 <div class="referral-modal__dialog" role="dialog" aria-modal="true" aria-label="Referral notification"> 3710 <div class="referral-modal__content"> 3711 <button type="button" class="modal__close-button" aria-label="Close" onclick="closeMobileReferralModal()" style="position: absolute; top: 16px; right: 16px; background: none; border: none; font-size: 24px; cursor: pointer;"> 3712 × 3713 </button> 3714 3715 <div style="margin-bottom: 24px;"> 3716 <div style="width: 120px; height: 120px; margin: 0 auto 20px;"> 3717 <img src="https://resources.easystore.co/storefront/icons/channels/vector_referral_program.svg" style="width: 100%; height: 100%;"> 3718 </div> 3719 </div> 3720 3721 <p id="referralSignupMessageMobile" style="font-size: 16px; color: #333; margin: 0 0 30px 0; line-height: 1.5;"> 3722 Your friend gifted you credit! Sign up now to redeem. 3723 </p> 3724 3725 <button type="button" class="btn" onclick="goToSignupPageFromMobile()" style="width: 100%;"> 3726 Sign Up 3727 </button> 3728 </div> 3729 </div> 3730 </details> 3731 </details-modal> 3732 3733 3734 3735 </div> 3736 </header> 3737 </sticky-header> 3738 3739<cart-notification> 3740 <div class="cart-notification-wrapper page-width color-background-1"> 3741 <div id="cart-notification" class="cart-notification focus-inset" aria-modal="true" aria-label="Added to cart" role="dialog" tabindex="-1"> 3742 <div class="cart-notification__header"> 3743 <h2 class="cart-notification__heading caption-large"> 3744 3745 3746 <svg class="icon icon-checkmark color-foreground-text " aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 9" fill="none"> 3747 <path fill-rule="evenodd" clip-rule="evenodd" d="M11.35.643a.5.5 0 01.006.707l-6.77 6.886a.5.5 0 01-.719-.006L.638 4.845a.5.5 0 11.724-.69l2.872 3.011 6.41-6.517a.5.5 0 01.707-.006h-.001z" fill="currentColor"></path> 3748 </svg> 3749 3750 3751 Added to cart</h2> 3752 <button type="button" class="cart-notification__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 3753 3754 3755 3756 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 3757 3758 3759 3760 </button> 3761 </div> 3762 <div id="cart-notification-product" class="cart-notification-product"></div> 3763 <div class="cart-notification__links"> 3764 <a href="/cart" id="cart-notification-button" class="button button--secondary button--full-width">View cart (<span class="js-content-cart-count">0</span>)</a> 3765 <form action="/cart" method="post" id="cart-notification-form"> 3766 <input type="hidden" name="_token" value="6ACg3v4Z9PKGOSGgTuHxAuJodSFgKkMIYgDZNlY7"> 3767 <input type="hidden" name="current_currency" value=""> 3768 <button class="button button--primary button--full-width" name="checkout" value="true">Checkout</button> 3769 </form> 3770 <button type="button" class="link button-label">Continue shopping</button> 3771 </div> 3772 </div> 3773 </div> 3774</cart-notification> 3775<style> 3776 .cart-notification { 3777 display: none; 3778 } 3779</style>
3780<script> 3781document.getElementById('cart-notification-form').addEventListener('submit',(event)=>{ 3782 if(event.submitter) event.submitter.classList.add('loading'); 3783}) 3784 3785</script>
3785 3786 3787</div> 3788 3789
3790<script> 3791 3792 class StickyHeader extends HTMLElement { 3793 constructor() { 3794 super(); 3795 } 3796 3797 connectedCallback() { 3798 this.header = document.getElementById('easystore-section-header'); 3799 this.headerBounds = {}; 3800 this.currentScrollTop = 0; 3801 this.preventReveal = false; 3802 3803 this.onScrollHandler = this.onScroll.bind(this); 3804 this.hideHeaderOnScrollUp = () => this.preventReveal = true; 3805 3806 this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 3807 window.addEventListener('scroll', this.onScrollHandler, false); 3808 3809 this.createObserver(); 3810 } 3811 3812 disconnectedCallback() { 3813 this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp); 3814 window.removeEventListener('scroll', this.onScrollHandler); 3815 } 3816 3817 createObserver() { 3818 let observer = new IntersectionObserver((entries, observer) => { 3819 this.headerBounds = entries[0].intersectionRect; 3820 observer.disconnect(); 3821 }); 3822 3823 observer.observe(this.header); 3824 } 3825 3826 onScroll() { 3827 const scrollTop = window.pageYOffset || document.documentElement.scrollTop; 3828 3829 if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 3830 requestAnimationFrame(this.hide.bind(this)); 3831 } else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) { 3832 if (!this.preventReveal) { 3833 requestAnimationFrame(this.reveal.bind(this)); 3834 } else { 3835 window.clearTimeout(this.isScrolling); 3836 3837 this.isScrolling = setTimeout(() => { 3838 this.preventReveal = false; 3839 }, 66); 3840 3841 requestAnimationFrame(this.hide.bind(this)); 3842 } 3843 } else if (scrollTop <= this.headerBounds.top) { 3844 requestAnimationFrame(this.reset.bind(this)); 3845 } 3846 3847 3848 this.currentScrollTop = scrollTop; 3849 } 3850 3851 hide() { 3852 this.header.classList.add('easystore-section-header-hidden', 'easystore-section-header-sticky'); 3853 this.closeMenuDisclosure(); 3854 // this.closeSearchModal(); 3855 } 3856 3857 reveal() { 3858 this.header.classList.add('easystore-section-header-sticky', 'animate'); 3859 this.header.classList.remove('easystore-section-header-hidden'); 3860 } 3861 3862 reset() { 3863 this.header.classList.remove('easystore-section-header-hidden', 'easystore-section-header-sticky', 'animate'); 3864 } 3865 3866 closeMenuDisclosure() { 3867 this.disclosures = this.disclosures || this.header.querySelectorAll('details-disclosure'); 3868 this.disclosures.forEach(disclosure => disclosure.close()); 3869 } 3870 3871 // closeSearchModal() { 3872 // this.searchModal = this.searchModal || this.header.querySelector('details-modal'); 3873 // this.searchModal.close(false); 3874 // } 3875 } 3876 3877 customElements.define('sticky-header', StickyHeader); 3878 3879 3880 class DetailsDisclosure extends HTMLElement{ 3881 constructor() { 3882 super(); 3883 this.mainDetailsToggle = this.querySelector('details'); 3884 // this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this)); 3885 this.mainDetailsToggle.addEventListener('mouseover', this.open.bind(this)); 3886 this.mainDetailsToggle.addEventListener('mouseleave', this.close.bind(this)); 3887 } 3888 3889 onFocusOut() { 3890 setTimeout(() => { 3891 if (!this.contains(document.activeElement)) this.close(); 3892 }) 3893 } 3894 3895 open() { 3896 this.mainDetailsToggle.setAttribute('open',1) 3897 } 3898 3899 close() { 3900 this.mainDetailsToggle.removeAttribute('open') 3901 } 3902 } 3903 3904 customElements.define('details-disclosure', DetailsDisclosure); 3905 3906 function clearAll() { 3907 localStorage.removeItem('searchHistory'); 3908 3909 var customer = ""; 3910 if(customer) { 3911 // Your logic to clear all data or call an endpoint 3912 fetch('/account/search_histories', { 3913 method: 'DELETE', 3914 headers: { 3915 "Content-Type": "application/json", 3916 "X-Requested-With": "XMLHttpRequest" 3917 }, 3918 body: JSON.stringify({ 3919 _token: "6ACg3v4Z9PKGOSGgTuHxAuJodSFgKkMIYgDZNlY7" 3920 }), 3921 }) 3922 .then(response => response.json()) 3923 } 3924 } 3925 // End - delete search history from local storage 3926 3927 // search history dropdown 3928 var searchInputs = document.querySelectorAll('.search__input'); 3929 3930 if(searchInputs.length > 0) { 3931
3932 searchInputs.forEach((searchInput)=> { 3933 3934 searchInput.addEventListener('focus', function() { 3935 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 3936 searchDropdown.innerHTML = ''; // Clear existing items 3937 3938 // retrieve data from local storage 3939 var searchHistoryData = JSON.parse(localStorage.getItem('searchHistory')) || []; 3940 3941 // Convert JSON to string 3942 var search_history_json = JSON.stringify(searchHistoryData); 3943 3944 // Set the value of the hidden input 3945 searchInput.closest('form').querySelector(".hidden_search_history").value = search_history_json; 3946 3947 // create dropdown items 3948 var clearAllItem = document.createElement('div'); 3949 clearAllItem.className = 'dropdown-item clear-all'; 3950 clearAllItem.textContent = 'Clear'; 3951 clearAllItem.addEventListener('click', function() { 3952 clearAll(); 3953 searchDropdown.style.display = 'none'; 3954 searchInput.classList.remove('is-focus'); 3955 }); 3956 searchDropdown.appendChild(clearAllItem); 3957 3958 // create dropdown items 3959 searchHistoryData.forEach(function(item) { 3960 var dropdownItem = document.createElement('div'); 3961 dropdownItem.className = 'dropdown-item'; 3962 dropdownItem.textContent = item.term; 3963 dropdownItem.addEventListener('click', function() { 3964 searchInput.value = item.term; 3965 searchInput.closest('form').submit(); 3966 searchDropdown.style.display = 'none'; 3967 }); 3968 searchDropdown.appendChild(dropdownItem); 3969 }); 3970 3971 if(searchHistoryData.length > 0){ 3972 // display the dropdown 3973 searchInput.classList.add('is-focus'); 3974 document.body.classList.add('search-input-focus'); 3975 searchDropdown.style.display = 'block'; 3976 } 3977 }); 3978 3979 searchInput.addEventListener("focusout", (event) => { 3980 var searchDropdown = searchInput.closest('form').querySelector('#searchDropdown'); 3981 searchInput.classList.remove('is-focus'); 3982 searchDropdown.classList.add('transparent'); 3983 setTimeout(()=>{ 3984 searchDropdown.style.display = 'none'; 3985 searchDropdown.classList.remove('transparent'); 3986 document.body.classList.remove('search-input-focus'); 3987 }, 400); 3988 }); 3989 }) 3990 } 3991 // End - search history dropdown 3992 3993 // referral notification popup 3994 const referralMessageTemplate = 'Your friend gifted you __CURRENCY_CODE__ __CREDIT_AMOUNT__ credit! Sign up now to redeem.'; 3995 const shopCurrency = 'RM '; 3996 3997 function getCookie(name) { 3998 const value = `; ${document.cookie}`; 3999 const parts = value.split(`; ${name}=`); 4000 if (parts.length === 2) return parts.pop().split(';').shift(); 4001 return null; 4002 } 4003 4004 function removeCookie(name) { 4005 document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`; 4006 } 4007 4008 function showReferralNotification() { 4009 const referralCode = getCookie('customer_referral_code'); 4010 4011 4012 const customerReferralCode = null; 4013 4014 4015 const activeReferralCode = referralCode || customerReferralCode; 4016 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 4017 4018 if (referralData.timestamp && referralData.expirationDays) { 4019 const expirationTime = referralData.timestamp + (referralData.expirationDays * 24 * 60 * 60 * 1000); 4020 if (Date.now() > expirationTime) { 4021 localStorage.removeItem('referral_notification_data'); 4022 return; 4023 } 4024 } 4025 4026 if (referralData.dismissed) return; 4027 4028 if (activeReferralCode) { 4029 if (referralData.creditAmount) { 4030 displayReferralNotification(referralData.creditAmount); 4031 } else { 4032 fetchReferralCampaignData(activeReferralCode); 4033 } 4034 } 4035 } 4036 4037 function fetchReferralCampaignData(referralCode) { 4038 fetch(`/customer/referral_program/campaigns/${referralCode}`) 4039 .then(response => { 4040 if (!response.ok) { 4041 throw new Error('Network response was not ok'); 4042 } 4043 return response.json(); 4044 }) 4045 .then(data => { 4046 let refereeCreditAmount = null; 4047 if (data.data.campaign && data.data.campaign.referral_rules) { 4048 const refereeRule = data.data.campaign.referral_rules.find(rule => 4049 rule.target_type === 'referee' && 4050 rule.event_name === 'customer/create' && 4051 rule.entitlement && 4052 rule.entitlement.type === 'credit' 4053 ); 4054 4055 if (refereeRule) { 4056 refereeCreditAmount = refereeRule.entitlement.amount; 4057 } 4058 } 4059 4060 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 4061 referralData.creditAmount = refereeCreditAmount; 4062 referralData.dismissed = referralData.dismissed || false; 4063 referralData.timestamp = Date.now(); 4064 referralData.expirationDays = 3; 4065 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 4066 4067 displayReferralNotification(refereeCreditAmount); 4068 }) 4069 .catch(error => { 4070 removeCookie('customer_referral_code'); 4071 }); 4072 } 4073 4074 function displayReferralNotification(creditAmount = null) { 4075 const isMobile = innerWidth <= 749; 4076 4077 if (isMobile) { 4078 const mobileModal = document.querySelector('#referralMobileModal details'); 4079 const mobileMessageElement = document.getElementById('referralSignupMessageMobile'); 4080 4081 if (mobileModal && mobileMessageElement) { 4082 if (creditAmount) {
4083 const finalMessage = referralMessageTemplate 4084 .replace('__CREDIT_AMOUNT__', creditAmount) 4085 .replace('__CURRENCY_CODE__', shopCurrency); 4086 4087 mobileMessageElement.textContent = finalMessage; 4088 } 4089 4090 mobileModal.setAttribute('open', ''); 4091 } 4092 } else { 4093 const notification = document.getElementById('referralNotification'); 4094 4095 if (notification) { 4096 if (creditAmount) { 4097 const messageElement = document.getElementById('referralSignupMessage'); 4098 if (messageElement) { 4099 const finalMessage = referralMessageTemplate 4100 .replace('__CREDIT_AMOUNT__', creditAmount) 4101 .replace('__CURRENCY_CODE__', shopCurrency); 4102 4103 messageElement.textContent = finalMessage; 4104 } 4105 } 4106 4107 notification.style.display = 'block'; 4108 } 4109 } 4110 } 4111 4112 showReferralNotification(); 4113 4114 addEventListener('beforeunload', function() { 4115 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 4116 4117 if (referralData.creditAmount !== undefined) { 4118 referralData.creditAmount = null; 4119 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 4120 } 4121 }); 4122 4123 function closeReferralNotification() { 4124 const notification = document.getElementById('referralNotification'); 4125 if (notification) { 4126 notification.style.display = 'none'; 4127 } 4128 } 4129 4130 function dismissReferralNotification() { 4131 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 4132 4133 referralData.dismissed = true; 4134 referralData.timestamp = referralData.timestamp || Date.now(); 4135 referralData.expirationDays = referralData.expirationDays || 3; 4136 4137 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 4138 4139 closeReferralNotification(); 4140 } 4141 4142 function goToSignupPage() { 4143 location.href = '/account/register'; 4144 dismissReferralNotification(); 4145 } 4146 4147 function closeMobileReferralModal() { 4148 const mobileModal = document.querySelector('#referralMobileModal details'); 4149 if (mobileModal) { 4150 mobileModal.removeAttribute('open'); 4151 } 4152 4153 const referralData = JSON.parse(localStorage.getItem('referral_notification_data')) || {}; 4154 referralData.dismissed = true; 4155 referralData.timestamp = referralData.timestamp || Date.now(); 4156 referralData.expirationDays = referralData.expirationDays || 3; 4157 localStorage.setItem('referral_notification_data', JSON.stringify(referralData)); 4158 } 4159 4160 function goToSignupPageFromMobile() { 4161 location.href = '/account/register'; 4162 closeMobileReferralModal(); 4163 } 4164 // End - referral notification popup 4165</script>
4165 4166 4167 4168 4169 <main id="MainContent" class="content-for-layout focus-none" role="main" tabindex="-1">
vendor: 81 bytes, lines 4169-4172
4169 4170 4171 4172<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=
41726LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF
vendor: 12 bytes, line 4172
4172"></script>
4173<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/customer.css?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 4174<style> 4175 main.main-content .field > label{ 4176 display: none; 4177 } 4178 .h3{ 4179 font-size: 18px; 4180 } 4181 .button--full-width{ 4182 width: 100%; 4183 } 4184 .tab-wrapper{ 4185 display: inline-flex; 4186 justify-content: center; 4187 align-items: center; 4188 margin: 10px auto 20px; 4189 background-color: #eaeaea; 4190 border-radius: 200px; 4191 padding: 5px; 4192 gap: 10px; 4193 } 4194 .tab-wrapper .tab-label { 4195 display: inline-block; 4196 min-width: 130px; 4197 padding: 8px 15px; 4198 border-radius: 100px; 4199 cursor: pointer; 4200 font-size: 17px; 4201 line-height: 1.1; 4202 user-select: none; 4203 margin: 0; 4204 color: #000; 4205 } 4206 #register-tos a { 4207 display: inline; 4208 } 4209 @media screen and (max-width: 400px){ 4210 .tab-wrapper .tab-label { 4211 min-width: 110px; 4212 } 4213 } 4214 .tab-wrapper input[type='radio']:checked + .tab-label { 4215 background-color: #fff; 4216 box-shadow: 2px 2px 25px -10px #333; 4217 } 4218 4219 @media screen and (min-width: 500px){ 4220 .large--five-twelfths{ 4221 min-width: 420px; 4222 } 4223 } 4224</style> 4225 4226 4227 4228 4229<div class="customer login section-width-control small-width large--five-twelfths text-center wrapper"> 4230 <div class="card"> 4231 <h1 id="login" tabindex="-1" class="mb-0"> 4232 Welcome 4233 </h1> 4234 <p class="h3 mt-0"> 4235 4236 Sign up or log in to continue 4237 4238 </p> 4239 <div> 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 <div class="tab-wrapper"> 4258 <div> 4259 <input type="radio" name="type" id="tab-register" class="hide hidden" checked> 4260 <label for="tab-register" class="tab-label"> 4261 Sign up 4262 </label> 4263 </div> 4264 <div> 4265 <input type="radio" name="type" id="tab-login" class="hide hidden"> 4266 <label for="tab-login" class="tab-label"> 4267 Login 4268 </label> 4269 </div> 4270 </div> 4271 4272 4273 <form id="form-login" action="/account/auth" method="post" class="mt-2"> 4274 <input type="hidden" name="_token" value="6ACg3v4Z9PKGOSGgTuHxAuJodSFgKkMIYgDZNlY7"> 4275 <input type="hidden" name="location_id" value=""> 4276 <input type="hidden" name="staff_id" value=""> 4277 <input type="hidden" id="recaptchaResponse" name="g-recaptcha-response"> 4278 4279 4280 <div id="error-content"></div> 4281 4282 <div class="field"> 4283 <input 4284 type="text" 4285 name="customer[email_or_phone]" 4286 id="CustomerDetail" 4287 autocorrect="off" 4288 autocapitalize="off" 4289 placeholder="Email" 4290 required 4291 > 4292 <label for="CustomerDetail"> 4293 Email 4294 </label> 4295 </div> 4296 4297 <button 4298 type="submit" 4299 form="form-login" 4300 class="btn button--full-width g-recaptcha"> 4301 Continue 4302 </button> 4303 4304 <div class="button-snippet"> 4305 4306<!-- Snippet:login/button: Facebook Login --> 4307 <style> 4308 #fb-login-btn.btn{ 4309 background-color: #fff; 4310 color: #000; 4311 padding: 0; 4312 overflow: hidden; 4313 display: flex; 4314 justify-content: center; 4315 align-items: center; 4316 width: 100%; 4317 margin: 15px auto; 4318 font-size: 14px; 4319 border: 1px solid currentColor; 4320 box-shadow: none; 4321 } 4322 #fb-login-btn.btn:hover{ 4323 background-color: #fff; 4324 } 4325 #fb-login-btn.btn svg{ 4326 width: 45px; 4327 vertical-align: middle; 4328 padding: 5px; 4329 } 4330 #fb-login-btn.btn .fb-login-text{ 4331 padding: 13px 75px 13px 30px; 4332 display: inline-block; 4333 width: calc(100% - 52px); 4334 } 4335 4336 #fb-login-btn.btn--loading{ 4337 color: transparent !important; 4338 pointer-events: none; 4339 background: #fff !important; 4340 border-color: #000; 4341 } 4342 4343 #fb-login-btn.btn--loading:after { 4344 animation: loading 500ms infinite linear; 4345 border: 0.3em solid rgba(0, 0, 0, 0.4); 4346 border-left: 0.3em solid rgb(0, 0, 0); 4347 border-radius: 100%; 4348 box-sizing: content-box; 4349 content: ''; 4350 display: block; 4351 height: 1em; 4352 position: absolute; 4353 width: 1em; 4354 } 4355 4356 @keyframes loading { 4357 0% { 4358 transform: rotate(0deg); 4359 } 4360 100% { 4361 transform: rotate(360deg); 4362 } 4363 } 4364 @media screen and (max-width: 500px) { 4365 #fb-login-btn.btn .fb-login-text{ 4366 padding: 13px 25px 13px 8px; 4367 font-size: 13px; 4368 } 4369 } 4370 </style> 4371 <button id="fb-login-btn" type="button" class="btn" onclick="fb_login()" style="background-color: #fff; color: #000; font-weight: normal;"> 4372 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 700 700"><g><path d="M650,350C650,184.32,515.68,50,350,50S50,184.32,50,350c0,140.69,96.86,258.74,227.53,291.17V441.68H215.66V350h61.87V310.5c0-102.11,46.2-149.44,146.4-149.44,19,0,51.81,3.72,65.22,7.45V251.6c-7.08-.74-19.38-1.12-34.65-1.12-49.2,0-68.2,18.64-68.2,67.08V350h98.1l-16.8,91.68H386.35V647.8C534.88,629.86,650,503.38,650,350Z" fill="#0866ff"/><path d="M467.5,441.68,484.4,350h-98V317.6c0-48.44,19-67.08,68.19-67.08,15.28,0,27.6.37,34.66,1.12V168.51c-13.42-3.73-46.21-7.45-65.22-7.45-100.25,0-146.4,47.33-146.4,149.44V350H2
437215.66v91.68h61.87V641.17a301.61,301.61,0,0,0,108.82,6.63V441.68Z" fill="#fff"/></g></svg> 4373 <span class="fb-login-text">Continue with Facebook</span> 4374 </button> 4375 4376
4376<script> 4377 function fb_login(){ 4378 location.href = 'https://apps.easystore.co/facebook-login/run?domain='+window.location.protocol+'//'+window.location.hostname+'&shop=sayangku.easy.co'; 4379 } 4380 document.querySelector('#fb-login-btn').addEventListener('click',()=>{ 4381 document.querySelector('#fb-login-btn').classList.add('btn--loading') 4382 }) 4383 </script>
4383 4384<!-- /Snippet --> 4385 4386 </div> 4387 4388 4389 4390 <div id="register-tos"> 4391 By signing up, I agree to the Sayangku Handcraft's <a target="_blank" href="/legal/terms-of-service">Terms of Service</a> and <a target="_blank" href="/legal/privacy-policy">Privacy Policy</a>. 4392 </div> 4393 4394 </form> 4395 </div> 4396 </div> 4397 4398</div> 4399 4400 4401
4402<script> 4403 const register_tab = document.querySelector('#tab-register'); 4404 const login_tab = document.querySelector('#tab-login'); 4405 const register_tos = document.querySelector('#register-tos'); 4406 const isRegistrationEnabled = "1"; 4407 4408 if (register_tab) { 4409 register_tab.addEventListener('click', function() { 4410 if (register_tos) { 4411 register_tos.style.display = 'block'; 4412 } 4413 }); 4414 } 4415 if (login_tab) { 4416 login_tab.addEventListener('click', function() { 4417 if (register_tos) { 4418 register_tos.style.display = 'none'; 4419 } 4420 }); 4421 } 4422 4423 const methodSwitchBtn = document.getElementById('phone-login-btn'); 4424 if (methodSwitchBtn) { 4425 methodSwitchBtn.onclick = function () { 4426 var type = (register_tab && register_tab.checked) ? 'register' : 'login'; 4427 window.location.href = '/account/login?method=phone&type=' + type; 4428 }; 4429 } 4430 4431 let lastPathSegment = window.location.pathname.split('/').filter(segment => segment.length > 0).pop(); 4432 4433 // Redirect to login if trying to access register when self registration is disabled 4434 if (!isRegistrationEnabled) { 4435 if (lastPathSegment === 'register') { 4436 window.location.href = '/account/login'; 4437 } else if (lastPathSegment === 'login' || lastPathSegment === 'auth') { 4438 if (register_tos) { 4439 register_tos.style.display = 'none'; 4440 } 4441 } 4442 } else { 4443 // Only proceed with tab logic if not redirecting 4444 if(lastPathSegment === 'login') { 4445 if (login_tab) { 4446 login_tab.checked = true; 4447 } 4448 if (register_tos) { 4449 register_tos.style.display = 'none'; 4450 } 4451 } else { 4452 if (register_tos) { 4453 register_tos.style.display = 'block'; 4454 } 4455 } 4456 } 4457 4458 const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; 4459 const phonePattern = /^(?:\+?\d{1,3}[\s-]?)?(?:\d{1,14}[\s-]?){1,5}$/; 4460 4461 let form = document.querySelector('#form-login'), 4462 input = document.querySelector('#CustomerDetail'), 4463 error_content = document.querySelector('#error-content'); 4464 4465 4466 // One attempt at a time: the reCAPTCHA wait below is async, so without 4467 // this a double-click starts two continuations and posts the form twice. 4468 var submitting = false; 4469 4470 form.addEventListener('submit', async function (event) { 4471 // preventDefault FIRST: a re-entrant submit must still be cancelled, or the 4472 // browser performs a native post with no captcha token. 4473 event.preventDefault(); 4474 if (submitting) return; 4475 4476 let input_value = input.value 4477 error_content.innerHTML = ''; 4478 if (!input_value.match(emailPattern) && !input_value.match(phonePattern)) { 4479 error_content.innerHTML = `<div class="errors note">Invalid Email or Phone</div>`; 4480 return false; 4481 } 4482 4483 submitting = true; 4484 document.querySelector('#form-login .btn').classList.add('btn--loading','loading'); 4485 4486 // reCAPTCHA is unreachable from some regions (google.com is blocked in 4487 // mainland China). Fail open the same way checkout and forgot-password do: 4488 // submit without a token rather than leave the button spinning forever. 4489 try { 4490 if (window.grecaptcha && typeof window.grecaptcha.enterprise === 'object') { 4491 // The loader defines a stub {ready} synchronously and fetches the real 4492 // implementation asynchronously, so execute() may not exist yet. 4493 // ready() queues until it does; the timeout stops a bundle that never 4494 // arrives from hanging the button. 4495 await new Promise(function (resolve) { 4496 setTimeout(resolve, 3000); 4497 try { grecaptcha.enterprise.ready(resolve); } catch (e) { resolve(); } 4498 }); 4499 4500 const token = await grecaptcha.enterprise.execute('6LdMNdIqAAAAALegJp7y4weVcCIlnwmIN8TWseEF', { action: 'LOGIN' }); 4501 document.getElementById('recaptchaResponse').value = token; 4502 } 4503 } catch (e) { /* fail open */ } 4504 4505 document.getElementById('form-login').submit(); 4506 }); 4507 4508 4509</script>
4509 4510 4511 4512 </main> 4513 <style> 4514 .footer{ 4515 background-color: #2D2D2D; 4516 color: #FEFEFE; 4517 --color-foreground: 254,254,254; 4518 } 4519 .footer .link--text, 4520 .footer .list-menu__item--link, 4521 .footer .footer-block__details-content .list-menu__item--link{ 4522 color: #FEFEFE; 4523 } 4524 .footer-block__heading{ 4525 color: #FFFFFF; 4526 } 4527 .rounded{ 4528 border-radius: 10px; 4529 } 4530 .shopping-app-border{ 4531 border: 1px #ECECEC solid; 4532 margin-right: 3px; 4533 } 4534 .app-download-badge{ 4535 display: inline-block; 4536 margin-right: 3px; 4537 } 4538</style> 4539 4540<link rel="preload" href="https://store-themes.easystore.co/897/themes/181882/assets/section-footer.css?t=1787072409" as="style" onload="this.onload=null;this.rel='stylesheet'"> 4541 4542<footer class="footer color-background-1"> 4543 <div class="footer__content-top page-width"> 4544 <div class="grid grid--1-col grid--4-col-tablet "> 4545 4546 4547 4548 <div class="grid__item"> 4549 4550 <h2 class="footer-block__heading">Follow us</h2> 4551 <ul class="footer__list-social list-unstyled list-social footer-block__details-content" role="list"> 4552 4553 4554 <li class="list-social__item"> 4555 <a href="https://www.facebook.com/sayangku9818?rdid=yAEQRcdOeS9W621r&share_url=https%3A%2F%2Fwww.facebook.com%2Fshare%2F1BjAzpZoEN%2F#" class="link link--text list-social__link"> 4556 4557 4558 4559 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-facebook " 4560 viewBox="0 0 18 18"> 4561 <path fill="currentColor" 4562 d="M16.42.61c.27 0 .5.1.69.28.19.2.28.42.28.7v15.44c0 .27-.1.5-.28.69a.94.94 0 01-.7.28h-4.39v-6.7h2.25l.31-2.65h-2.56v-1.7c0-.4.1-.72.28-.93.18-.2.5-.32 1-.32h1.37V3.35c-.6-.06-1.27-.1-2.01-.1-1.01 0-1.83.3-2.45.9-.62.6-.93 1.44-.93 2.53v1.97H7.04v2.65h2.24V18H.98c-.28 0-.5-.1-.7-.28a.94.94 0 01-.28-.7V1.59c0-.27.1-.5.28-.69a.94.94 0 01.7-.28h15.44z"> 4563 </path> 4564 </svg> 4565 4566 4567 4568 </a> 4569 </li> 4570 4571 4572 <li class="list-social__item"> 4573 <a href="https://www.instagram.com/sayangku9818/?hl=en" class="link link--text list-social__link"> 4574 4575 4576 4577 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-instagram " 4578 viewBox="0 0 18 18"> 4579 <path fill="currentColor" 4580 d="M8.77 1.58c2.34 0 2.62.01 3.54.05.86.04 1.32.18 1.63.3.41.17.7.35 1.01.66.3.3.5.6.65 1 .12.32.27.78.3 1.64.05.92.06 1.2.06 3.54s-.01 2.62-.05 3.54a4.79 4.79 0 01-.3 1.63c-.17.41-.35.7-.66 1.01-.3.3-.6.5-1.01.66-.31.12-.77.26-1.63.3-.92.04-1.2.05-3.54.05s-2.62 0-3.55-.05a4.79 4.79 0 01-1.62-.3c-.42-.16-.7-.35-1.01-.66-.31-.3-.5-.6-.66-1a4.87 4.87 0 01-.3-1.64c-.04-.92-.05-1.2-.05-3.54s0-2.62.05-3.54c.04-.86.18-1.32.3-1.63.16-.41.35-.7.66-1.01.3-.3.6-.5 1-.65.32-.12.78-.27 1.63-.3.93-.05 1.2-.06 3.55-.06zm0-1.58C6.39 0 6.09.01 5.15.05c-.93.04-1.57.2-2.13.4-.57.23-1.06.54-1.55 1.02C1 1.96.7 2.45.46 3.02c-.22.56-.37 1.2-.4 2.13C0 6.1 0 6.4 0 8.77s.01 2.68.05 3.61c.04.94.2 1.57.4 2.13.23.58.54 1.07 1.02 1.56.49.48.98.78 1.55 1.01.56.22 1.2.37 2.13.4.94.05 1.24.06 3.62.06 2.39 0 2.68-.01 3.62-.05.93-.04 1.57-.2 2.13-.41a4.27 4.27 0 001.55-1.01c.49-.49.79-.98 1.01-1.56.22-.55.37-1.19.41-2.13.04-.93.05-1.23.05-3.61 0-2.39 0-2.68-.05-3.62a6.47 6.47 0 00-.4-2.13 4.27 4.27 0 00-1.02-1.55A4.35 4.35 0 0014.52.46a6.43 6.43 0 00-2.13-.41A69 69 0 008.77 0z"> 4581 </path> 4582 <path fill="currentColor" 4583 d="M8.8 4a4.5 4.5 0 100 9 4.5 4.5 0 000-9zm0 7.43a2.92 2.92 0 110-5.85 2.92 2.92 0 010 5.85zM13.43 5a1.05 1.05 0 100-2.1 1.05 1.05 0 000 2.1z"> 4584 </path> 4585 </svg> 4586 4587 4588 4589 </a> 4590 </li> 4591 4592 4593 <li class="list-social__item"> 4594 <a href="https://www.tiktok.com/@sayangkuhandcraft?_r=1&_t=ZS-924Mr0SYWAv" class="link link--text list-social__link"> 4595 4596 4597 4598 <svg aria-hidden="true" focusable="false" role="presentation" class="icon icon-tiktok " width="16" 4599 height="18" fill="none" xmlns="http://www.w3.org/2000/svg"> 4600 <path 4601 d="M8.02 0H11s-.17 3.82 4.13 4.1v2.95s-2.3.14-4.13-1.26l.03 6.1a5.52 5.52 0 11-5.51-5.52h.77V9.4a2.5 2.5 0 101.76 2.4L8.02 0z" 4602 fill="currentColor"> 4603 </path> 4604 </svg> 4605 4606 4607 4608 </a> 4609 </li> 4610 4611 4612 <li class="list-social__item">
4613 <a href="https://api.whatsapp.com/send?phone=%2B60192221899&fbclid=IwVERTSAOkjz9leHRuA2FlbQIxMABzcnRjBmFwcF9pZAwzNTA2ODU1MzE3MjgAAR7x5TGXnAlCvLwZq4jHkMagiZaB41Eku0X0mnGBabrFQMISa8MY_Rxqqf3mQQ_aem_AsEXONntM8OrDXviKnVe3w" class="link link--text list-social__link"> 4614 4615 4616 4617 <svg class="icon icon-whatsapp " fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 750"><path d="M703.5,195.64A371,371,0,0,0,572,56C523.89,26,471.51,8.4,415.21,2.51A370.48,370.48,0,0,0,316.5,5.42,364,364,0,0,0,215.23,37.47a369,369,0,0,0-132.68,108Q17.36,230.17,7,336.63A370.11,370.11,0,0,0,53.42,554.94a7.23,7.23,0,0,1,.61,4.9Q36.48,624.6,18.7,689.27C13.24,709.19,7.75,729.1,2.14,749.5c1.23-.26,1.93-.36,2.61-.55q95.75-25.11,191.54-50.2a8.43,8.43,0,0,1,5.19.61c12.79,5.8,25.28,12.34,38.29,17.59A370.28,370.28,0,0,0,666.09,604q69.06-86.36,80-196.47A370.36,370.36,0,0,0,743,311.86,361,361,0,0,0,703.5,195.64ZM684.64,388c-3.6,65.27-25.48,123.75-66.06,174.9-44.89,56.63-102.85,93.24-173.19,109.84a297.41,297.41,0,0,1-91.27,7A305.68,305.68,0,0,1,215.31,635a17.54,17.54,0,0,0-15.2-2.14c-35.5,9.58-71.1,18.74-106.66,28-.49.13-1,.21-2.14.45,1.72-6.37,3.29-12.22,4.89-18Q109,596.7,121.66,550.07a7.12,7.12,0,0,0-1-5.07c-12.37-19.32-23.31-39.25-31.6-60.64A309,309,0,0,1,70.4,410.63c-6.11-49.35-.93-97.44,16.1-144.15,57.86-160.1,234.55-243,394.65-185.11a308.31,308.31,0,0,1,120.2,79.18c34.9,37.19,59.32,80.31,72.81,129.53A304.75,304.75,0,0,1,684.64,388Z"/><path d="M556,454.42c-13.84-6.52-27.43-13.55-41.24-20.12-11.47-5.46-23-10.89-34.73-15.69-9.1-3.73-13.09-1.72-19.12,6.06-9.39,12.09-19.09,23.95-28.89,35.71-4.7,5.63-9.47,6.79-16.1,3.8-12.32-5.56-24.82-10.9-36.58-17.51-39.6-22.29-69.59-54.3-92.67-93.11-4.87-8.2-4.3-12.16,2.14-19.13,9.07-9.9,18.4-19.63,24.09-32.12a17.42,17.42,0,0,0,.47-14.67c-9.55-23-19-46-28.75-68.92a75.82,75.82,0,0,0-7-12.7c-2.56-3.82-6.6-5.49-11.28-5.36H255.78v-.56c-5.48.29-11,.11-16.39,1-8.66,1.37-15,6.75-20.95,12.94-25.46,26.48-34.58,57.89-28.66,93.83a145.64,145.64,0,0,0,20.75,53.75C220.48,377.5,231.32,393,242.65,408a435.09,435.09,0,0,0,70.53,73.19c31.48,26,67,44.54,105.56,57.58,16.1,5.44,32.08,11.08,49.36,11.42,11.52.22,23,.08,34.16-3.22a110.77,110.77,0,0,0,42.1-23.61c5.48-4.81,10.48-10.18,13.19-17a110.56,110.56,0,0,0,7.57-37.2C565.27,461.93,562.42,457.42,556,454.42Z"/></svg> 4618 4619 4620 4621 </a> 4622 </li> 4623 4624 4625 4626 4627 4628 </ul> 4629 4630 </div> 4631 4632 4633 4634 <div class="grid__item"> 4635 4636 <h2 class="footer-block__heading">We accept</h2> 4637 <div class="footer-block__details-content footer__payment"> 4638 <ul class="list list-payment" role="list"> 4639 4640 <li class="list-payment__item"> 4641 4642 4643 4644 <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" 4645 width="38" height="24" aria-labelledby="pi-visa"> 4646 <path opacity=".07" 4647 d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 4648 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"> 4649 </path> 4650 <path 4651 d="M28.3 10.1H28c-.4 1-.7 1.5-1 3h1.9c-.3-1.5-.3-2.2-.6-3zm2.9 5.9h-1.7c-.1 0-.1 0-.2-.1l-.2-.9-.1-.2h-2.4c-.1 0-.2 0-.2.2l-.3.9c0 .1-.1.1-.1.1h-2.1l.2-.5L27 8.7c0-.5.3-.7.8-.7h1.5c.1 0 .2 0 .2.2l1.4 6.5c.1.4.2.7.2 1.1.1.1.1.1.1.2zm-13.4-.3l.4-1.8c.1 0 .2.1.2.1.7.3 1.4.5 2.1.4.2 0 .5-.1.7-.2.5-.2.5-.7.1-1.1-.2-.2-.5-.3-.8-.5-.4-.2-.8-.4-1.1-.7-1.2-1-.8-2.4-.1-3.1.6-.4.9-.8 1.7-.8 1.2 0 2.5 0 3.1.2h.1c-.1.6-.2 1.1-.4 1.7-.5-.2-1-.4-1.5-.4-.3 0-.6 0-.9.1-.2 0-.3.1-.4.2-.2.2-.2.5 0 .7l.5.4c.4.2.8.4 1.1.6.5.3 1 .8 1.1 1.4.2.9-.1 1.7-.9 2.3-.5.4-.7.6-1.4.6-1.4 0-2.5.1-3.4-.2-.1.2-.1.2-.2.1zm-3.5.3c.1-.7.1-.7.2-1 .5-2.2 1-4.5 1.4-6.7.1-.2.1-.3.3-.3H18c-.2 1.2-.4 2.1-.7 3.2-.3 1.5-.6 3-1 4.5 0 .2-.1.2-.3.2M5 8.2c0-.1.2-.2.3-.2h3.4c.5 0 .9.3 1 .8l.9 4.4c0 .1 0 .1.1.2 0-.1.1-.1.1-.1l2.1-5.1c-.1-.1 0-.2.1-.2h2.1c0 .1 0 .1-.1.2l-3.1 7.3c-.1.2-.1.3-.2.4-.1.1-.3 0-.5 0H9.7c-.1 0-.2
46510-.2-.2L7.9 9.5c-.2-.2-.5-.5-.9-.6-.6-.3-1.7-.5-1.9-.5L5 8.2z" 4652 fill="#142688"></path> 4653 </svg> 4654 4655 4656 4657 </li> 4658 4659 4660 <li class="list-payment__item"> 4661 4662 4663 4664 <svg class="icon icon--full-color " viewBox="0 0 38 24" xmlns="http://www.w3.org/2000/svg" role="img" 4665 width="38" height="24" aria-labelledby="pi-master"> 4666 <path opacity=".07" 4667 d="M35 0H3C1.3 0 0 1.3 0 3v18c0 1.7 1.4 3 3 3h32c1.7 0 3-1.3 3-3V3c0-1.7-1.4-3-3-3z"></path> 4668 <path fill="#fff" d="M35 1c1.1 0 2 .9 2 2v18c0 1.1-.9 2-2 2H3c-1.1 0-2-.9-2-2V3c0-1.1.9-2 2-2h32"> 4669 </path> 4670 <circle fill="#EB001B" cx="15" cy="12" r="7"></circle> 4671 <circle fill="#F79E1B" cx="23" cy="12" r="7"></circle> 4672 <path fill="#FF5F00" 4673 d="M22 12c0-2.4-1.2-4.5-3-5.7-1.8 1.3-3 3.4-3 5.7s1.2 4.5 3 5.7c1.8-1.2 3-3.3 3-5.7z"></path> 4674 </svg> 4675 4676 4677 4678 </li> 4679 4680 4681 4682 4683 4684 4685 4686 <li class="list-payment__item"> 4687 <img src="https://s3.dualstack.ap-southeast-1.amazonaws.com/eesb.public/images/payment/payments_razerms.svg" alt="payment_razerms" loading="lazy" width="85px"> 4688 </li> 4689 4690 4691 </div> 4692 <br> 4693 4694 </div> 4695 4696 4697 4698 <div class="grid__item"> 4699 4700 <h2 class="footer-block__heading"></h2> 4701 <div class="footer-block__details-content"> 4702 <p></p> 4703 </div> 4704 4705 </div> 4706 4707 </div> 4708 </div> 4709 <div class="footer__content-bottom"> 4710 <div class="footer__content-bottom-wrapper page-width"> 4711 <div class="footer__column footer__column--info"> 4712 4713 4714 4715 4716 4717 <div class="footer__copyright caption"> 4718 <div class="copyright__content">Copyright © {2026} Sayang Ku Handcraft Sdn Bhd</div> 4719 </div> 4720 4721 <div class="footer__copyright caption"> 4722 4723 <div> 4724 4725 4726 4727 <a href="/legal/terms-of-service">Terms of Service</a> 4728 4729 4730 4731 4732 | <a href="/legal/privacy-policy">Privacy Policy</a> 4733 4734 4735 4736 </div> 4737 4738 </div> 4739 4740 </div> 4741 </div> 4742 </div> 4743</footer> 4744 4745 4746 4747 4748 4749 4750
4750<script> 4751 EasyStore.Currencies.init([{"name":"Malaysian Ringgit","code":"MYR","rate":"1.0","format_prefix":"RM ","format_suffix":"","format_decimals":2,"thousand_separator":",","is_primary":true}], 1) 4752</script>
4752 4753 4754 4755 4756
4756<script> 4757 let page_template = 'customers'; 4758 4759 if(document.querySelector('.currency-picker')) { 4760 EasyStore.Currencies.change(document.querySelector('.currency-picker').value) 4761 EasyStore.Currencies.convertAll() 4762 } 4763 4764 document.querySelectorAll('.currency-picker').forEach((el)=>{ 4765 el.addEventListener('change',(event)=>{ 4766 EasyStore.Currencies.change(event.target.value) 4767 4768 4769 if (page_template == 'cart') { 4770 const params = new URLSearchParams(window.location.search); 4771 params.set('delete_cache', 1); 4772 window.location.search = params; 4773 } else { 4774 window.location.reload(); 4775 } 4776 4777 return 4778 4779 4780 document.querySelectorAll('[name=currencies],[name=current_currency]').forEach((el)=>{ 4781 el.value = event.target.value 4782 }) 4783 4784 if(page_template == 'cart') location.reload(); 4785 }) 4786 }) 4787 </script>
4787 4788 4789 4790 4791 4792
4792<script> 4793 4794 window.variantStrings = { 4795 addToCart: `Add to Cart`, 4796 updateCart: `Update Cart`, 4797 soldOut: `Sold Out`, 4798 unavailable: `Unavailable`, 4799 } 4800 4801 window.accessibilityStrings = { 4802 shareSuccess: `Link copied to clipboard`, 4803 } 4804 4805 window.promotionStrings = { 4806 title: `Promotions`, 4807 } 4808 4809 window.productSettings = { 4810 variantOptionsDisplay: `radio`, 4811 } 4812 </script>
4812 4813 4814 <link href="https://store-themes.easystore.co/897/themes/181882/assets/section-main-product.css?t=1787072409" rel="stylesheet" type="text/css" media="screen" /> 4815<link href="https://store-themes.easystore.co/897/themes/181882/assets/component-loading-overlay.css?t=1787072409" rel="stylesheet" type="text/css" media="screen" /> 4816<link href="https://store-themes.easystore.co/897/themes/181882/assets/product-quickview.css?t=1787072409" rel="stylesheet" type="text/css" media="screen" /> 4817 4818<product-quickview-modal> 4819 <div id="product-quickview-modal" class="product-quickview-modal-wrapper focus-inset" aria-modal="true" role="dialog" tabindex="-1"> 4820 <button type="button" class="product-quickview-modal__close modal__close-button link link--text focus-inset" aria-label="accessibility.close"> 4821 4822 4823 4824 <svg class="icon icon-close " data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 600"><path d="M335.36,300,581.87,53.48a25,25,0,0,0-35.35-35.35L300,264.64,53.48,18.13A25,25,0,0,0,18.13,53.48L264.64,300,18.13,546.52a25,25,0,0,0,35.35,35.35L300,335.36,546.52,581.87a25,25,0,0,0,35.35-35.35Z" fill="currentColor"/></svg> 4825 4826 4827 4828 </button> 4829 4830 <div class="loading-overlay"> 4831 <div class="loading-overlay__spinner"> 4832 <svg aria-hidden="true" focusable="false" role="presentation" class="spinner" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg"> 4833 <circle class="path" fill="none" stroke-width="6" cx="33" cy="33" r="30"></circle> 4834 </svg> 4835 </div> 4836 </div> 4837 4838 <div class="product-quickview-modal__body" style="display: none;"></div> 4839 </div> 4840 <div class="product-quickview-modal-backdrop"></div> 4841</product-quickview-modal> 4842
4843<script src="https://store-themes.easystore.co/897/themes/181882/assets/product-form.js?t=1787072409" type="text/javascript" ></script>
vendor: 1 bytes, line 4843
4843
4844<script src="https://store-themes.easystore.co/897/themes/181882/assets/product-quickview.js?t=1787072409" type="text/javascript" ></script>
4844 4845
4845<script> 4846 4847 /* 4848 4849 ------ 4850 Events 4851 ------ 4852 4853 pages/viewed 4854 4855 customers/signup 4856 4857 customers/login 4858 4859 products/searched 4860 4861 collections/viewed 4862 4863 products/viewed 4864 4865 products/shared 4866 4867 wishlists/item_added 4868 4869 carts/items_added 4870 4871 carts/viewed 4872 4873 carts/item_removed 4874 4875 checkouts/initiated 4876 4877 checkouts/shipping_info_added 4878 4879 checkouts/payment_info_added 4880 4881 checkouts/completed 4882 4883 orders/placed 4884 4885 orders/purchased 4886 4887 payments/captured 4888 4889 payments/failed 4890 4891 */ 4892 4893 window.__latest_cart = window.__latest_cart || null; 4894 4895 const _selector = document.querySelector.bind(document), 4896 _selectorAll = document.querySelectorAll.bind(document) 4897 4898 document.addEventListener('DOMContentLoaded', (event) => { 4899 4900 const default_currency = getCookie("currency") 4901 const customer_id = window.__st.cid 4902 const template = window.__st.p 4903 4904 onPageView() 4905 4906 //-----------------------// 4907 // Configs // 4908 //-----------------------// 4909 4910 window.dataLayer = window.dataLayer || [] 4911 4912 Array.prototype.last = Array.prototype.last || function() { 4913 return this[this.length - 1] || null 4914 } 4915 4916 Array.prototype.first = Array.prototype.first || function() { 4917 return this[0] || null 4918 } 4919 4920 //----------------------// 4921 // Triggers // 4922 //----------------------// 4923 4924 const XHR = window.XMLHttpRequest 4925 4926 function xhr() { 4927 4928 const xhr = new XHR() 4929 4930 xhr.addEventListener("readystatechange", function() { 4931 4932 if(xhr.readyState != 4) return 4933 4934 try { 4935 4936 const response_url = xhr.responseURL 4937 4938 if (response_url.includes("cart/add")) { 4939 4940 window.__latest_cart = JSON.parse(xhr.response) 4941 4942 onCartItemsAdded() // ok 4943 4944 } 4945 4946 if (response_url.includes("cart/remove_item_quantity")) { 4947 4948 window.__latest_cart = JSON.parse(xhr.response) 4949 4950 onCartItemRemoved() // ok 4951 4952 } 4953 4954 if (response_url.includes("new_cart?retrieve=true")) { 4955 4956 result = JSON.parse(xhr.response) 4957 4958 if (result.cart) { 4959 window.__latest_cart = result.cart 4960 } 4961 4962 } 4963 4964 } catch(e) { 4965 4966 console.error(e) 4967 4968 } 4969 4970 }, false); 4971 4972 return xhr 4973 4974 } 4975 4976 window.XMLHttpRequest = xhr 4977 4978 switch(template) { 4979 4980 case 'cart': onCartView() // ok 4981 break 4982 case 'product': onProductView() // ok 4983 break 4984 case 'collection': onCollectionView() // ok 4985 break 4986 case 'blog': onBlogView() 4987 break 4988 case 'article': onArticleView() 4989 break 4990 case 'payment_completed': onOrderPlace() 4991 break 4992 case 'payment_fail': onPaymentFail() 4993 break 4994 4995 } 4996 4997 // _selector('form[action="/checkout/payments"]').addEventListener("submit", onPaymentInfoAdded(_selector('form[action="/checkout/payments"]'))) 4998 if (_selector('form[action="/checkout/detail"]')) _selector('form[action="/checkout/detail"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/detail"]'))}) // ok 4999 if (_selector('form[action="/checkout/shipping"]')) _selector('form[action="/checkout/shipping"]').addEventListener("submit", ()=>{onShippingInfoAdded(_selector('form[action="/checkout/shipping"]'))}) // ok 5000 if (_selector('form[action="/account/register"]')) _selector('form[action="/account/register"]').addEventListener("submit", onSignUp) // ok 5001 if (_selector('form[action="/account/login"]')) _selector('form[action="/account/login"]').addEventListener("submit", onLogin) // ok 5002 if (_selector('form[action="/search"]')) _selector('form[action="/search"]').addEventListener("submit", onProductSearch()) // ok 5003 if (_selector('#line-login-btn')) _selector('#line-login-btn').addEventListener('click', onLineLogin) // ok 5004 if (_selector('#PlaceOrder')) _selector('#PlaceOrder').addEventListener("click", ()=>{onCheckoutComplete(_selector('form[action="/checkout/payments"]'))}); // ok 5005 if (_selector('#add_wishlist')) _selector('#add_wishlist').addEventListener("click", onWishlistItemAdded) // ok 5006 if (_selectorAll('a[href="/account/logout"]')) _selectorAll('a[href="/account/logout"]').forEach(logoutButton => logoutButton.addEventListener("click", onLogout)) // ok 5007 if (_selector('.CartDrawerTrigger.cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link').addEventListener("click", onCartView) // ok 5008 if (_selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link')) _selector('.CartDrawerTrigger.cart-page-link.mobile-cart-page-link').addEventListener("click", onCartView) // ok 5009 if (_selectorAll('a[class^="share-"]')) _selectorAll('a[class^="share-"]').forEach(shareButton => shareButton.addEventListener("click", ()=>{onProductShare(shareButton)}) ) // ok 5010 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 5011 5012 // For append elements 5013 const bodyMutationObserver = new MutationObserver(() => { 5014 if (_selector('#form__spc #PlaceOrder')) _selector('#form__spc #PlaceOrder').addEventListener("click", onSinglePageCheckout) // ok 5015 if (_selectorAll('[name$="checkout"]')) _selectorAll('[name$="checkout"]').forEach(checkoutButton => checkoutButton.addEventListener("click", onCheckoutInitiate)) 5016 }); 5017 bodyMutationObserver.observe(_selector("body"), {subtree: true, childList: true}); 5018 5019 //------------------------------// 5020 // Event handlers // 5021 //------------------------------// 5022 5023 function onPageView() { 5024 5025 EasyStore.Event.dispatch('pages/viewed', { 5026 page: { 5027 type: template, 5028 title: document.title, 5029 description: _selector('meta[name=description]') ? _selector('meta[name=description]').getAttribute('content') : null, 5030 url: location.href, 5031 } 5032 }) 5033 5034 } 5035 5036 function onSignUp() { 5037 5038 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 5039 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 5040 5041 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 5042 5043 let data = {} 5044 5045 if (email_regex.test(email_or_phone)) { 5046 data.method = 'email' 5047 data.email = email_or_phone 5048 } 5049 5050 if (phone_regex.test(email_or_phone)) { 5051 data.method = "phone" 5052 data.phone = email_or_phone 5053 } 5054 5055 if (!data.method) return 5056 5057 EasyStore.Event.dispatch('customers/signup', data) 5058 5059 } 5060 5061 function onLogin() { 5062 5063 const email_regex = new RegExp(/^[a-zA-Z0-9.!#$%&"*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/) 5064 const phone_regex = new RegExp(/^(\+?6?01)[0-46-9]-*[0-9]{7,8}$/) 5065 5066 const email_or_phone = _selector(`input[name="customer[email_or_phone]"]`).value.replace("+", "").replace(/\s+/, "") 5067 5068 let data = {} 5069 5070 if (email_regex.test(email_or_phone)) { 5071 data.method = 'email' 5072 data.email = email_or_phone 5073 } 5074 5075 if (phone_regex.test(email_or_phone)) { 5076 data.method = "phone" 5077 data.phone = email_or_phone 5078 } 5079 5080 if (!data.method) return 5081 5082 EasyStore.Event.dispatch('customers/login', data) 5083 5084 } 5085 5086 function onLineLogin() { 5087 5088 EasyStore.Event.dispatch('customers/login', { method: 'line' }) 5089 5090 } 5091 5092 function onLogout() { 5093 5094 EasyStore.Event.dispatch('customers/logout', { customer_id }) 5095 5096 } 5097 5098 function onBlogView() { 5099 5100 const blog = "" 5101 5102 EasyStore.Event.dispatch('blogs/viewed', { blog }) 5103 5104 } 5105 5106 function onArticleView() { 5107 5108 const article = "" 5109 5110 EasyStore.Event.dispatch('articles/viewed', { article }) 5111 5112 } 5113 5114 function onProductSearch() { 5115 5116 const query = _selector('input[name=q]').value 5117 5118 if (!query) return 5119 5120 EasyStore.Event.dispatch('products/searched', { query }) 5121 5122 } 5123 5124 function onCollectionView() { 5125 5126 const collection = "" 5127 5128 EasyStore.Event.dispatch('collections/viewed', { collection }) 5129 5130 } 5131 5132 function onProductView() { 5133 5134 const product = "" 5135 5136 EasyStore.Event.dispatch("products/viewed", { product }) 5137 5138 } 5139 5140 function onProductShare(el) { 5141 5142 const product = "" 5143 5144 const channel = el.getAttribute("class").split("-").last() 5145 5146 EasyStore.Event.dispatch('products/shared', { product, channel }) 5147 5148 } 5149 5150 function onWishlistItemAdded() { 5151 5152 let product = "" 5153 const quantity = _selector("#Quantity").value 5154 5155 EasyStore.Event.dispatch('wishlists/item_added', { product }) 5156 5157 } 5158 5159 async function onCartItemsAdded() { 5160 5161 const cart = await getCart() 5162 5163 if(cart && cart.items != undefined && cart.items.length > 0) { 5164 5165 EasyStore.Event.dispatch('carts/item_added', { cart }) 5166 5167 } 5168 5169 } 5170 5171 async function onCartView() { 5172 5173 const cart = await getCart() 5174 5175 EasyStore.Event.dispatch('carts/viewed', { cart }) 5176 5177 } 5178 5179 async function onCartItemRemoved() { 5180 5181 const cart = await getCart() 5182 5183 cart.items = [] 5184 5185 if(cart) { 5186 5187 EasyStore.Event.dispatch('carts/item_removed', { cart }) 5188 5189 } 5190 5191 } 5192 5193 async function onCheckoutInitiate() { 5194 5195 const cart = await getCart() 5196 5197 EasyStore.Event.dispatch('checkouts/initiated', { cart }) 5198 5199 } 5200 5201 async function onShippingInfoAdded(form) { 5202 let checkout = getCheckout() 5203 5204 let form_data = {} 5205 new FormData(form).forEach((value, key) => form_data[key] = value) 5206 5207 let shipping_tier = null 5208 5209 if (form_data.type && form_data.type.startsWith("r_pickup")) { 5210 shipping_tier = `Pickup - ${form_data.pick_location}` 5211 } 5212 5213 if (form_data.s_id) {
5214 shipping_tier = _selector(`input[id='`+form_data.s_id+`']`).getAttribute("data-shipping-name") 5215 } 5216 5217 if (!shipping_tier) return 5218 5219 EasyStore.Event.dispatch('checkouts/shipping_info_added', { checkout, shipping_tier }) 5220 5221 } 5222 5223 async function onPaymentInfoAdded(form) { 5224 5225 let checkout = getCheckout() 5226 5227 let payment_type = new FormData(form).get('payment_method') 5228 5229 EasyStore.Event.dispatch("checkouts/payment_info_added", { checkout, payment_type }) 5230 5231 } 5232 5233 async function onOrderPlace() { 5234 5235 let cart_token = getCookie("cart_js") 5236 let previous_cart_token = getCookie("previous_cart_ga4_js") 5237 5238 if (previous_cart_token && previous_cart_token == cart_token) { 5239 // Prevent duplicate purchase tracking 5240 return 5241 } 5242 5243 let order = getOrder() 5244 5245 EasyStore.Event.dispatch('orders/placed', { order }) 5246 5247 if(order.is_manual_payment) { 5248 5249 EasyStore.Event.dispatch('orders/purchased', { order }) 5250 5251 } 5252 5253 const last_transaction = order.transactions.last() 5254 5255 if (last_transaction.status) { 5256 5257 EasyStore.Event.dispatch('orders/purchased', { order }) 5258 EasyStore.Event.dispatch('payments/captured', { order }) 5259 5260 } 5261 5262 } 5263 5264 async function onPaymentFail() { 5265 5266 const order = getOrder() 5267 5268 EasyStore.Event.dispatch('payments/failed', { order }) 5269 5270 } 5271 5272 async function onCheckoutComplete(form) { 5273 5274 onPaymentInfoAdded(form) 5275 5276 const checkout = getCheckout() 5277 5278 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 5279 5280 } 5281 5282 async function onSinglePageCheckout() { 5283 5284 // let checkout = $("[data-app-checkout]").data("app-checkout") 5285 5286 let checkout = getCheckout() 5287 5288 // const payment_type = _selector("#app_spc_payment_method").find(`[class*="label-content"]`).first().find("b").first().text() 5289 const payment_type = _selector("#app_spc_payment_method").getElementsByClassName('label-content')[0].getElementsByTagName('b')[0].innerHTML 5290 5291 const shipping_method = _selector("#delivery_method").value 5292 5293 let shipping_tier = null 5294 let app_spc_customer_info_label = _selector("#app_spc_customer_info").getElementsByClassName('label-content') 5295 if (shipping_method == "shipping") { 5296 shipping_tier = app_spc_customer_info_label[app_spc_customer_info_label.length - 1].getElementsByTagName('b')[0].innerHTML 5297 } 5298 5299 if (shipping_method == "pickup") { 5300 shipping_tier = app_spc_customer_info_label[0].innerHTML 5301 } 5302 5303 if (shipping_tier) { 5304 5305 EasyStore.Event.dispatch('checkouts/shipping_info_added', { 5306 checkout, 5307 shipping_tier, 5308 }) 5309 5310 } 5311 5312 if (payment_type) { 5313 5314 EasyStore.Event.dispatch('checkouts/payment_info_added', { 5315 checkout, 5316 payment_type, 5317 }) 5318 5319 } 5320 5321 EasyStore.Event.dispatch('checkouts/completed', { checkout }) 5322 5323 } 5324 5325 }) 5326 5327 5328 //-----------------------// 5329 // Functions // 5330 //-----------------------// 5331 5332 function getCookie(name) { 5333 5334 name += "=" 5335 5336 decodedCookie = decodeURIComponent(document.cookie) 5337 5338 ca = decodedCookie.split(";") 5339 5340 for(i = 0; i < ca.length; i++) { 5341 c = ca[i] 5342 while (c.charAt(0) == " ") { 5343 c = c.substring(1) 5344 } 5345 if (c.indexOf(name) == 0) { 5346 return c.substring(name.length, c.length) 5347 } 5348 } 5349 5350 return "" 5351 5352 } 5353 5354 const parsePrice = price => { 5355 if(typeof price === 'string') { 5356 return parseFloat(price.split(',').join('')) 5357 } 5358 5359 return price 5360 } 5361 5362 const requestCart = async (method, data) => { 5363 5364 let response = await fetch('/cart.json', {method: 'GET',headers: {'Content-Type': 'application/json'}}) 5365 result = await response.json() 5366 5367 return result.cart 5368 5369 } 5370 const getCart = async (latest = false) => { 5371 5372 let cart = window.__latest_cart 5373 5374 const cart_invalid = !cart || !cart.items || (cart.total_price > 0 && !cart.items.length) 5375 5376 if(latest || cart_invalid) { 5377 cart = await requestCart() 5378 } 5379 5380 cart.items = cart.items || [] 5381 5382 return mapCart(cart) 5383 5384 } 5385 5386 const getCheckout = async () => { 5387 mapCheckout(window.__latest_cart || await requestCart()) 5388 } 5389 5390 const getOrder = async () => { 5391 mapOrder(window.__latest_cart || await requestCart()) 5392 } 5393 5394 //-----------------------// 5395 // Mappers // 5396 //-----------------------// 5397 5398 const fallbackAttribute = (object, attribute) => { 5399 5400 if(!Array.isArray(attribute)) { 5401 attribute = [attribute] 5402 } 5403 5404 let final_value = null 5405 5406 do { 5407 5408 final_value = object[attribute.shift()] 5409 5410 } while(!final_value && attribute.length) 5411 5412 return final_value 5413 5414 } 5415 5416 const map = (object, mapper) => { 5417 5418 const newObject = {} 5419 5420 for(const key in mapper) { 5421 5422 // Handle different keys between new and old format
5423 newObject[key] = fallbackAttribute(object, mapper[key]) 5424 5425 // Cast price to float 5426 if(newObject[key] && ['price', 'amount', 'discount', 'discounts'].some(x => key.endsWith(x))) { 5427 newObject[key] = parsePrice(newObject[key]) 5428 } 5429 5430 if(newObject[key] === undefined) { 5431 delete newObject[key] 5432 } 5433 5434 } 5435 5436 return newObject 5437 5438 } 5439 5440 const mapCart = cart => { 5441 5442 const oldCart = cart 5443 5444 const mapper = { 5445 id: 'id', 5446 currency: 'currency', 5447 item_count: 'item_count', 5448 items: 'items', 5449 total_price: 'total_price', 5450 latest_items: 'latest_items' 5451 } 5452 5453 cart = map(cart, mapper) 5454 5455 const discounts = (oldCart.storewide_discounts || []).concat((oldCart.voucher_discounts || [])) 5456 5457 cart.discount_applications = discounts.map(discount => ({ 5458 title: discount.voucher_code || null, 5459 value: parsePrice(discount.amount), 5460 })) 5461 5462 cart.original_total_price = cart.items.length 5463 ? cart.items 5464 .map(item => item.original_price) 5465 .reduce((sum, price) => sum + price) 5466 : 0 5467 5468 cart.total_discount = cart.discount_applications.length 5469 ? cart.discount_applications 5470 .map(discount => parsePrice(discount.value)) 5471 .reduce((sum, value) => sum + value) 5472 : 0 5473 5474 cart.items = cart.items.map(item => mapLineItem(item)) 5475 5476 return cart 5477 5478 } 5479 5480 const mapCheckout = checkout => { 5481 5482 const mapper = { 5483 note: 'note', 5484 attributes: 'note_attributes', 5485 billing_address: 'billing_address', 5486 currency: 'currency', 5487 customer_id: 'customer_id', 5488 discounts_amount: 'total_discount', 5489 id: 'id', 5490 line_items: 'order_item', 5491 order_number: 'order_number', 5492 shipping_address: 'shipping_address', 5493 shipping_price: 'shipping_tax', 5494 shipping_method: 'shipping_method_name', 5495 tax_price: 'total_tax', 5496 } 5497 5498 checkout = map(checkout, mapper) 5499 5500 checkout.requires_shipping = checkout.line_items.some(item => item.shipping_required) 5501 5502 checkout.line_items = checkout.line_items.map(item => mapLineItem(item)) 5503 5504 return checkout 5505 5506 } 5507 5508 const mapOrder = order => { 5509 5510 const mapper = { 5511 attributes: 'note_attributes', 5512 billing_address: 'billing_address', 5513 cancelled: 'is_cancelled', 5514 cancelled_at: 'cancelled_at', 5515 created_at: 'created_at', 5516 customer_id: 'customer_id', 5517 // discount_applications: 'discount_applications', 5518 email: 'email', 5519 financial_status: 'financial_status', 5520 fulfillment_status: 'fulfillment_status', 5521 line_items: 'order_item', 5522 note: 'note', 5523 order_number: 'order_number', 5524 phone: 'phone', 5525 shipping_address: 'shipping_address', 5526 shipping_methods: 'shipping_methods', 5527 shipping_price: 'total_shipping', 5528 subtotal_price: 'subtotal_price', 5529 // tax_lines: 'tax_lines', 5530 tax_price: 'total_tax', 5531 total_discounts: 'total_discount', 5532 total_net_amount: 'total_amount_include_transaction', 5533 total_price: 'total_price', 5534 transactions: 'transaction_records', 5535 is_manual_payment: 'is_manual_payment', 5536 } 5537 5538 order.email = order.billing_address.email 5539 order.phone = order.billing_address.phone 5540 order.shipping_method = order.shipping_method_name 5541 5542 order = map(order, mapper) 5543 5544 order.line_items = order.line_items.map(item => mapLineItem(item)) 5545 order.transactions = order.transactions.map(transaction => mapTransaction(transaction)) 5546 5547 return order 5548 5549 } 5550 5551 const mapLineItem = line_item => { 5552 5553 const old_line_item = line_item 5554 5555 const mapper = { 5556 final_price: 'price', 5557 image: 'img_url', 5558 message: 'message', 5559 original_line_price: 'original_line_price', 5560 original_price: 'original_price', 5561 properties: 'properties', 5562 quantity: 'quantity', 5563 requires_shipping: 'shipping_required', 5564 sku: 'sku', 5565 taxable: 'taxable', 5566 title: 'product_name', 5567 product_name: 'product_name', 5568 url: 'url', 5569 product_id: 'product_id', 5570 variant_id: 'variant_id', 5571 id: ['id', 'i_id'], 5572 } 5573 5574 line_item = map(line_item, mapper) 5575 5576 line_item.product_id = line_item.product_id || (old_line_item.product && old_line_item.product.id) || null 5577 line_item.variant_id = line_item.variant_id || (old_line_item.variant && old_line_item.variant.id) || null 5578 line_item.image = line_item.image || (old_line_item.image && old_line_item.image.url) || null 5579 5580 return line_item 5581 5582 } 5583 5584 const mapTransaction = transaction => { 5585 5586 const mapper = { 5587 amount: 'amount', 5588 created_at: 'created_at', 5589 gateway: 'gateway_type', 5590 id: 'id', 5591 status: 'status', 5592 } 5593 5594 transaction = map(transaction, mapper) 5595 5596 return transaction 5597 5598 } 5599 5600 5601</script>
5601 5602 5603</body> 5604</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.