Looking for a custom kit or quote? Email us at [email protected]

AFLS Vocational Skills Assessment Protocol

CentralReach  |  SKU: DRB 491
816.00 L

The Assessment of Functional Living Skills (AFLS) is an assessment, skills tracking system, and curriculum guide for the development of essential skills for achieving independence. It can be used to demonstrate a learner's current functional skill repertoire and provide tracking information for the progressive development of these skills throughout the lifespan. The AFLS vocational skills protocol for autism contains task analyses of many of the skills essential for participation in a wide range of family, community, and work environments and can be used simultaneously with the ABLLS®-R.

The AFLS Vocational Skills Assessment Protocol includes:

  • Job Search
  • Interview
  • Basic Skills
  • Coworker Relations
  • Workplace Safety
  • Fixed Activity Skills
  • Custodial & Cleaning
  • Laundry
  • Retail
  • Support Personnel
  • Office Skills
  • Computer Skills
  • Restaurant Skills
  • Restaurant Kitchen
  • Warehouse
  • Tools
  • Trades & Construction
  • Landscaping

By Dr. James Partington, BCBA-D, and Dr. Michael Mueller, BCBA-D.

BULK DISCOUNTS AVAILABLE!

  • If you purchase 10-19 AFLS Protocols, simply apply the code AFLS10 at checkout and receive 10% off your order!
  • If you purchase 20-29 AFLS Protocols, simply apply the code AFLS20 at checkout and receive 20% off your order!
  • If you purchase 30 or more AFLS Protocols, simply apply the code AFLS30 at checkout and receive 30% off your order!

 


'; const targetWrapper = getBundleRenderTarget(); if(targetWrapper){ targetWrapper.innerHTML = ""; targetWrapper.appendChild(bundleWrapperDiv); }else{ document.body.appendChild(bundleWrapperDiv); } }catch(err){ debugConsole("error in buildDummyProductHtmlForBundles", err); } } async function getBundleDataFromS3() { try { const parentProductsData = window?.shopifyLiquidValuesApp4Ext?.product?.bundleProductConfiguration; if(!parentProductsData?.bundleId) return null; const shopName = window.Shopify.shop; const s3Url = `https://gift-box-builder-app4.s3.us-east-2.amazonaws.com/public/backup-config/${shopName}/${parentProductsData?.bundleId}.json` const fetchResponse = await fetch(s3Url); const data = await fetchResponse.json(); return data || null; } catch (error) { debugConsole("Error in getBundleDataFromS3:", error); return null; } } // { errorMsg } sentinel: written when a metafield exceeds ~1.8 MB. function isOverflowed(value) { if ( value !== null && typeof value === 'object' && !Array.isArray(value) && value.errorMsg !== undefined && value.errorMsg !== null ) { return true; } return false; } function isForceCdn(){ try { return new URLSearchParams(location.search).get('gbbForceCdn') === 'true' || localStorage.getItem('gbbForceCdn') === 'true'; } catch(_){ return false; } } // R2-first, 3s timeout; failure memoized so later loads skip R2; null when both fail. async function fetchOverflowedDataFromCDN(s3Key, memoKey){ const shouldSkipR2 = (function(){ try { return localStorage.getItem('gbbSdk.' + memoKey) === 'true'; } catch(_){ return false; } })(); const buster = '?nocache=' + Date.now(); const r2Url = 'https://giftbox.giftkartcdn.app/' + s3Key + buster; const s3Url = 'https://gift-box-builder-app4.s3.us-east-2.amazonaws.com/' + s3Key + buster; if (!shouldSkipR2) { try { const r2Resp = await Promise.race([ fetch(r2Url), new Promise(function(_, rej){ setTimeout(function(){ rej(new Error('r2-timeout')); }, 3000); }) ]); if (r2Resp.ok) { const data = await r2Resp.json(); if (data) return data; } } catch (e) { debugConsole('R2 fetch failed for ' + memoKey + ', falling back to S3:', e); try { localStorage.setItem('gbbSdk.' + memoKey, 'true'); } catch(_){} } } try { const s3Resp = await fetch(s3Url); if (!s3Resp.ok) return null; return (await s3Resp.json()) || null; } catch (e) { debugConsole('S3 fetch failed for ' + memoKey + ':', e); return null; } } async function getSdkBundleDataFromCDN(offerId){ if (!offerId) return null; const shopName = window.Shopify.shop; return fetchOverflowedDataFromCDN('public/backup-config/' + shopName + '/' + offerId + '.json', 'useS3ForBundleConfig'); } async function getUpsellIndexFromCDN(){ const shopName = window.Shopify.shop; return fetchOverflowedDataFromCDN('public/sdk-bundle-upsell-index/' + shopName + '.json', 'useS3ForUpsellIndex'); } function initializeShopifyValues() { const productDetails = getProductData() window.shopifyLiquidValuesApp4Ext = { product: productDetails, cartData: {"note":null,"attributes":{},"original_total_price":0,"total_price":0,"total_discount":0,"total_weight":0.0,"item_count":0,"items":[],"requires_shipping":false,"currency":"MDL","items_subtotal_price":0,"cart_level_discount_applications":[],"checkout_charge_amount":0}, selected_or_first_available_variant: productDetails.selected_or_first_available_variant }; let ext_data = {"userData":{"shopName":"different-roads.myshopify.com","countryCode":"US","countryName":"United States","currency":"USD","currencyInfo":{"code":"USD","symbol":"$","thousandsSeparator":",","decimalSeparator":".","symbolOnLeft":true,"spaceBetweenAmountAndSymbol":false,"decimalDigits":2},"customSettings":{"initialModalPopupCnt":0,"disableCartSettings":false,"addToCartBtnSelectors":null,"checkoutBtnSelectors":null,"customStyle":null,"addAfterAddTocartBtn":false,"addAftercheckoutBtn":false,"disableApp":false,"loadingGif":"https:\/\/gift-box-builder-app4.s3.us-east-2.amazonaws.com\/public\/icons\/loadingGif.gif","stackDiscounts":true,"showOnlyAdminSelectedVariants":true,"overWriteCheckoutBtn":false,"addGiftMessageToNote":true},"bundleSettings":{"allowMultipleBoxesFromSameBundle":true,"showCompareAtPrice":true,"dontIndexGiftboxBuilderPages_onGoogle":false,"isValidateInventoryEnabled":false,"calculateAutomaticDiscountInPercentage":true},"isAppLevelMetafieldCreated":true,"storefrontAccessToken":"30dc3effe0240e23be727396cda72a9b","createdAt":"2023-08-09T15:47:16.712Z","multipleCurrenciesInfo":{"USD":{"code":"USD","symbol":"$","thousandsSeparator":",","decimalSeparator":".","symbolOnLeft":true,"spaceBetweenAmountAndSymbol":false,"decimalDigits":2}}},"languageData":{"_id":"64d3b505dd2fb15e39c866d7","shopName":"different-roads.myshopify.com","__v":0,"createdAt":"2023-08-09T15:47:17.009Z","en":{"landingPage":{"bannerText":{"id":"bannerText","label":"Banner Text","type":"text","value":"Build your own Bundle in just a few clicks!"},"bannerSubtext":{"id":"bannerSubtext","label":"Banner Subtext","type":"text","value":"Send a custom bundle to your loved one in just a few steps"},"bannerButtonText":{"id":"bannerButtonText","label":"Banner Button Text","type":"text","value":"Start Building your Bundle"},"selectPreCuratedBoxLabel":{"id":"selectPreCuratedBoxLabel","label":"Select Pre-Curated Box Label","type":"text","value":"Or select from a range of pre-curated Gift Boxes"}},"navigationSteps":{"productPageStepText":{"id":"productPageStepText","label":"Product Page Step Text","type":"text","value":"Add Products"},"giftBoxStepText":{"id":"giftBoxStepText","label":"Bundle Step Text","type":"text","value":"Add Gift Box"},"personalizeStepText":{"id":"personalizeStepText","label":"Personalize Step Text","type":"text","value":"Personalize"},"multipleCategoriesStepText":{"id":"multipleCategoriesStepText","label":"Multiple Categories Step Text","type":"text","value":"Multiple Categories"}},"productPage":{"selectProductsLabel":{"id":"selectProductsLabel","label":"Select Products Label","type":"text","value":"Select Products"},"productPageSubtext":{"id":"productPageSubtext","label":"Product Page Subtext","type":"text","value":""}},"giftBoxPage":{"selectGiftBoxLabel":{"id":"selectGiftBoxLabel","label":"Select Bundle Label","type":"text","value":"Select a Bundle Box"},"giftBoxPageSubtext":{"id":"giftBoxPageSubtext","label":"Gift Box Page Subtext","type":"text","value":""}},"videoMessage":{"permissionDenied":{"id":"permissionDenied","label":"Permission Denied","type":"text","value":"Permission Denied"},"uploadConfirmation":{"id":"uploadConfirmation","label":"Upload Confirmation","type":"text","value":"Your video has been successfully uploaded!"},"pressToRecord":{"id":"pressToRecord","label":"Press to record","type":"text","value":"Press to record"},"recording":{"id":"recording","label":"Recording","type":"text","value":"Recording...."},"errorMessage":{"id":"errorMessage","label":"Error Message","type":"text","value":"An error occured, Please try again!"},"loading":{"id":"loading","label":"Loading","type":"text","value":"Loading...."},"uploading":{"id":"uploading","label":"Uploading","type":"text","value":"Uploading...."},"sendVideoMessageText":{"id":"sendVideoMessageText","label":"Send Video Message Text","type":"text","value":"Send Video Message"},"giftMessageDeliveryInfo":{"id":"giftMessageDeliveryInfo","label":"Message Delivery Info","type":"text","value":"The message will be sent to the recipient via email as soon as the order is placed"},"saveVideoText":{"id":"saveVideoText","label":"Save Video Text","type":"text","value":"Save Video"},"reRecordVideoText":{"id":"reRecordVideoText","label":"Re-Record Video Text","type":"text","value":"Re-Record Video"}},"personalizePage":{"selectGreetingCardLabel":{"id":"selectGreetingCardLabel","label":"Select Greeting Card Label","type":"text","value":"Select A Greeting Card"},"clearSelectionButton":{"id":"clearSelectionButton","label":"Clear Selection label","type":"text","value":"Clear Selection"},"noImagesAvailable":{"id":"noImagesAvailable","label":"No Images Available label","type":"text","value":"No Images Available"},"messageLabel":{"id":"messageLabel","label":"Message Label","type":"text","value":"Message"},"senderNamePlaceholder":{"id":"senderNamePlaceholder","label":"Sender Name Placeholder","type":"text","value":"From"},"recipientNamePlaceholder":{"id":"recipientNamePlaceholder","label":"Recipient Name Placeholder","type":"text","value":"To"},"messagePlaceholder":{"id":"messagePlaceholder","label":"Message Placeholder","type":"text","value":"Enter a message here..."},"emailAddressLabel":{"id":"emailAddressLabel","label":"Recipient Email Address Label","type":"text","value":"Recipient Email Address"},"emailAddressPlaceholder":{"id":"emailAddressPlaceholder","label":"Recipient Email Address Placeholder","type":"text","value":"Enter a recipient email address here..."},"emailValidationMessage":{"id":"emailValidationMessage","label":"Email Validation Message","type":"text","value":"Please enter a valid email address"},"sendNow":{"id":"sendNow","label":"Send Now Label","type":"text","value":"Send Now"},"sendLater":{"id":"sendLater","label":"Send Later Label","type":"text","value":"Send Later"},"personalizePageSubtext":{"id":"personalizePageSubtext","label":"Personalize Page Subtext","type":"text","value":""},"messageIsRequiredError":{"id":"messageIsRequiredError","label":"Message is required warning","type":"text","value":"Please enter a message"}},"reviewPage":{"reviewPageBannerText":{"id":"reviewPageBannerText","label":"Review Page Banner Text","type":"text","value":"You’ve made the Right Choice!"},"reviewPageBannerSubtext":{"id":"reviewPageBannerSubtext","label":"Review Page Banner Subtext","type":"text","value":"Review your bundle and proceed to checkout"},"addOnsLabel":{"id":"addOnsLabel","label":"Add Ons Label","type":"text","value":"Add Ons"},"totalValueLabel":{"id":"totalValueLabel","label":"Total Value Label","type":"text","value":"Total Value"},"totalLabel":{"id":"totalLabel","label":"Total Label","type":"text","value":"Total"},"productLabel":{"id":"productLabel","label":"Product Header Label","type":"text","value":"Product"},"priceLabel":{"id":"priceLabel","label":"Price Header Text","type":"text","value":"Price"},"quantityLabel":{"id":"quantityLabel","label":"Quantity Header Text","type":"text","value":"Quantity"},"deliveryDateLabel":{"id":"deliveryDateLabel","label":"Delivery Date Label","type":"text","value":"Delivery Date"},"productsLabelText":{"id":"productsLabelText","label":"Products Label Text","type":"text","value":"Products"},"messagesLabelText":{"id":"messagesLabelText","label":"Messages Label Text","type":"text","value":"Messages"},"discountAppliedLabel":{"id":"discountAppliedLabel","label":"Discount Applied Label","type":"text","value":"Discount"},"subtotalLabel":{"id":"subtotalLabel","label":"Sub Total Label","type":"text","value":"Subtotal"},"orderDetailsLabel":{"id":"orderDetailsLabel","label":"Order Details Label","type":"text","value":"Order Details"},"itemsLabel":{"id":"itemsLabel","label":"No. of Items Label","type":"text","value":"Item(s)"},"oneTimePurchaseLabel":{"id":"oneTimePurchaseLabel","label":"One-Time Purchase label","type":"text","value":"One-Time Purchase"},"subscribeAndSaveLabel":{"id":"subscribeAndSaveLabel","label":"Subscribe and Save label","type":"text","value":"Subscribe and Save"},"noSubscriptionFoundLabel":{"id":"noSubscriptionFoundLabel","label":"No Subscription plans found label","type":"text","value":"Oops! No Subscription plans were found"},"deliveryFrequencyLabel":{"id":"deliveryFrequencyLabel","label":"Delivery Frequency Label","type":"text","value":"Delivery Frequency"},"createNewBoxLabel":{"id":"createNewBoxLabel","label":"Create New Box Label","type":"text","value":"Create new Box"},"editButtonText":{"id":"editButtonText","label":"Edit Label","type":"text","value":"Edit"},"deliverySchedulerPlaceholderText":{"id":"deliverySchedulerPlaceholderText","label":"Delivery Scheduler Placeholder Text","type":"text","value":"Select a date"}},"general":{"noProductsAvailable":{"id":"noProductsAvailable","label":"No Products Available label","type":"text","value":"No Products Available"},"filtersLabel":{"id":"filtersLabel","label":"Filters Label","type":"text","value":"Filters"},"clearSelection":{"id":"clearSelection","label":"Clear Filters Selection","type":"text","value":"Clear Selection"},"searchLabel":{"id":"searchLabel","label":"Search Label","type":"text","value":"Search"},"addToBoxButtonText":{"id":"addToBoxButtonText","label":"Add To Box Button","type":"text","value":"Add To Box"},"chooseOptionsButtonText":{"id":"chooseOptionsButtonText","label":"Choose Options Button","type":"text","value":"Choose Options"},"loadMoreProductsButtonText":{"id":"loadMoreProductsButtonText","label":"Load More Products Button","type":"text","value":"Load More Products"},"loadingCheckoutButtonText":{"id":"loadingCheckoutButtonText","label":"Loading Checkout Button","type":"text","value":"Loading Checkout..."},"addedText":{"id":"addedText","label":"Added Label","type":"text","value":"Added"},"addButtonText":{"id":"addButtonText","label":"Add Button Text","type":"text","value":"Add"},"nextButtonText":{"id":"nextButtonText","label":"Next Button Text","type":"text","value":"Next"},"addToCartButtonText":{"id":"addToCartButtonText","label":"Add To Cart Button Text","type":"text","value":"Add To Cart"},"backButtonText":{"id":"backButtonText","label":"Back Button Text","type":"text","value":"Back"},"checkoutButtonText":{"id":"checkoutButtonText","label":"Checkout Button Text","type":"text","value":"Checkout"},"removeButtonText":{"id":"removeButtonText","label":"Remove Button Text","type":"text","value":"Remove"},"reviewButtonText":{"id":"reviewButtonText","label":"Review Button Text","type":"text","value":"Review"},"combinationNotAvailable":{"id":"combinationNotAvailable","label":"Combination Not Available","type":"text","value":"Combination Not Available"},"quantity":{"id":"quantity","label":"Quantity Label","type":"text","value":"Quantity"},"viewCartProductsLabel":{"id":"viewCartProductsLabel","label":"View Cart Products Label","type":"text","value":"View Selected Products"},"selectedProductsLabel":{"id":"selectedProductsLabel","label":"Selected Products Label","type":"text","value":"Selected Products"},"selectBundleProductsText":{"id":"selectBundleProductsText","label":"Select Bundle Products label","type":"text","value":"Select Bundle Products"},"redirectingText":{"id":"redirectingText","label":"Redirecting label","type":"text","value":"Redirecting..."},"preparingBundleText":{"id":"preparingBundleText","label":"Preparing Bundle Label","type":"text","value":"Preparing Bundle..."},"productsNotAvailableText":{"id":"productsNotAvailableText","label":"Products Not Available Label","type":"text","value":"Oops! Some Products are not available"},"discountsMayNotApplyText":{"id":"discountsMayNotApplyText","label":"Discounts may not be applied Label","type":"text","value":"discounts may not be applied"},"removeAllBoxProducts":{"id":"removeAllBoxProducts","label":"Remove all Box Products Label (Cart Page Popup)","type":"text","value":"This is a Box Product. Removing this will remove all the products from box"},"cartPageCheckoutButtonLoadingText":{"id":"cartPageCheckoutButtonLoadingText","label":"Cart Page Checkout Button Loading Text","type":"text","value":"Loading Checkout..."},"inventoryInStockText":{"id":"inventoryInStockText","label":"Inventory in Stock Label","type":"text","value":"in Stock"},"inventoryLimitReachedText":{"id":"inventoryLimitReachedText","label":"Inventory Limit Reached Label","type":"text","value":"No More Stock"},"productAddedBtnText":{"id":"productAddedBtnText","label":"Product Added label","type":"text","value":"Added"},"boxSelectionEligibilityToast":{"id":"boxSelectionEligibilityToast","label":"Box Selection Eligibility Toast","type":"text","value":"Remove {{boxSelectionDifference}} item(s) to select this box"},"discountRibbonSuffix":{"id":"discountRibbonSuffix","label":"Discount Badge Suffix","type":"text","value":"off"},"itemsInCartLabel":{"id":"itemsInCartLabel","label":"Cart Inclusion Title","type":"text","value":"item(s)"},"removeFooterProductFrom":{"id":"removeFooterProductFrom","label":"Remove Product from Footer Text","type":"text","value":"Remove This Product From {{stepName}}"},"selectSubscriptionPlanButtonText":{"id":"selectSubscriptionPlanButtonText","label":"Subscription Selection Label","type":"text","value":"Select Subscription Plan"}},"discountRules":{"rule1":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule2":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule3":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule4":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule5":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}}},"sortBy":{"sortLabel":{"id":"sortLabel","label":"Sort Label","type":"text","value":"Sort"},"alphabeticalAToZ":{"id":"alphabeticalAToZ","label":"Alphabetical, A-Z Label","value":"Alphabetical, A-Z"},"alphabeticalZToA":{"id":"alphabeticalZToA","label":"Alphabetical, Z-A Label","value":"Alphabetical, Z-A"},"priceHighToLow":{"id":"priceHighToLow","label":"Price, High to Low Label","value":"Price, High to Low"},"priceLowToHigh":{"id":"priceLowToHigh","label":"Price, Low to High Label","value":"Price, Low to High"},"featured":{"id":"featured","label":"Featured Label","type":"text","value":"Featured"}},"conditions":{"amount":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products worth at least {{conditionAmount}} on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products worth maximum of {{conditionAmount}} on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products worth {{conditionAmount}} on this step"}},"quantity":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add at least {{conditionQuantity}} products on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add a maximum of {{conditionQuantity}} products to continue"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add exactly {{conditionQuantity}} products on this step"}},"weight":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products weighing at least {{conditionWeight}} on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products weighing maximum of {{conditionWeight}} on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products weighing {{conditionWeight}} on this step"}}},"multipleCategoriesPage":{"multipleCategoriesSubtext":{"id":"multipleCategoriesSubtext","label":"Multiple Categories Page Subtext","type":"text","value":""}},"multipleCategories":{},"addons":{"maxAddonProductsAllowed":{"id":"maxAddonProductsAllowed","label":"Max Addon Products Allowed message","type":"text","value":" add maximum {{maxAllowedAddons}} products to continue"},"addonProductsMandatory":{"id":"addonProductsMandatory","label":"Addon Products Mandatory message","type":"text","value":"Please add atleast one product"},"firstBundleInteraction":{"id":"firstBundleInteraction","label":"Mobile Add On Notification","type":"text","value":"Additional offers to be unlocked"}},"modals":{"clearCart":{"cancelButtonText":{"id":"cancelButtonText","label":"Modal - Cancel Button Text","type":"text","value":"Cancel"},"confirmButtonText":{"id":"confirmButtonText","label":"Modal - Confirm Button Text","type":"text","value":"Clear Cart"},"description":{"id":"description","label":"Modal - Description","type":"text","value":"Are you sure you want to clear all items from your cart? This action cannot be undone..."},"title":{"id":"title","label":"Modal - Title","type":"text","value":"Are you sure?"},"triggerButtonText":{"id":"triggerButtonText","label":"Clear Cart Button Text","type":"text","value":"Clear"}}}},"languageMode":"SINGLE","updatedAt":"2026-06-29T08:44:28.980Z","mixAndMatchTextData":{"en":{"conditions":{"amount":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products worth at least {{conditionAmount}} on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products worth maximum of {{conditionAmount}} on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products worth {{conditionAmount}} on this step"}},"quantity":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add at least {{conditionQuantity}} products on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add a maximum of {{conditionQuantity}} products to continue"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add exactly {{conditionQuantity}} products on this step"}},"weight":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products weighing at least {{conditionWeight}} on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products weighing maximum of {{conditionWeight}} on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products weighing {{conditionWeight}} on this step"}}},"general":{"noProductsAvailable":{"id":"noProductsAvailable","label":"No Products Available label","type":"text","value":"No Products Available"},"addBundleToCartBtnText":{"id":"addBundleToCartBtnText","label":"Add Bundle Cart label","type":"text","value":"Add Bundle to Cart"},"addBundleToCartLoadingBtnText":{"id":"addBundleToCartLoadingBtnText","label":"Add Bundle Loading label","type":"text","value":"Adding Bundle..."},"inventoryLimitReachedText":{"id":"inventoryLimitReachedText","label":"Inventory Limit Reached Label","type":"text","value":"No More Stock"},"emptyCardText":{"id":"emptyCardText","label":"Add Product Card Text","type":"text","value":"Add Product"},"boxSelectionEligibilityToast_inPage":{"id":"boxSelectionEligibilityToast_inPage","label":"Box Selection Eligibility Toast","type":"text","value":"Remove {{boxSelectionDifference}} item(s) to select this box"},"subtotalLabelText_inPage":{"id":"subtotalLabelText_inPage","label":"Subtotal Text","type":"text","value":"Subtotal"},"boxConditionInitialText_inPage":{"id":"boxConditionInitialText_inPage","label":"Inline Add To Cart Button - Quantity Selection message","type":"text","value":"Select {{quantityDifference}} Items"},"stepsDrawerPillText":{"id":"stepsDrawerPillText","label":"Steps Drawer Pill Text","type":"text","value":"Show all steps"}},"footer":{"footerPrevBtnText":{"id":"footerPrevBtnText","label":"Footer Previous Button","type":"text","value":"Prev"},"footerNextBtnText":{"id":"footerNextBtnText","label":"Footer Next Button","type":"text","value":"Next"},"footerFinishBtnText":{"id":"footerFinishBtnText","label":"Footer Finish Button","type":"text","value":"Done"}},"productCard":{"productCardAddBtnText":{"id":"productCardAddBtnText","label":"Product Add to Cart Button","type":"text","value":"Add to Cart"},"productVariantLabelText":{"id":"productVariantLabelText","label":"Product Variant Label","type":"text","value":"Select variant"},"productCardAddBtnText_inPage":{"id":"productCardAddBtnText_inPage","label":"Inline Product - Add Button Text","type":"text","value":"Add +"}}}},"productBundle":{"en":{"general":{"title":{"id":"title","label":"Title","type":"text","value":"Bundle"},"subTitle":{"id":"subTitle","label":"Sub Title","type":"text","value":"Select the products you want to add to your bundle"},"unSelectedOptionLabel":{"id":"unSelectedOptionLabel","label":"Unselected Option Label","type":"text","value":"Select {{option_name}}"}},"validation":{"unselectedOption":{"id":"unselectedOption","label":"Unselected Option","type":"text","value":"{{option_name}} selection required"},"outOfStockOption":{"id":"outOfStockOption","label":"Out Of Stock Option","type":"text","value":"currently not available"}},"footer":{"atcButtonText":{"id":"atcButtonText","label":"Add to Cart Button Text","type":"text","value":"Add to Cart"},"atcButtonOutOfStockText":{"id":"atcButtonOutOfStockText","label":"Add to Cart Out of Stock Text","type":"text","value":"Out of Stock"},"priceLabel":{"id":"priceLabel","label":"Price Label","type":"text","value":"Total Price"},"savingsBadgeText":{"id":"savingsBadgeText","label":"Savings Badge Text","type":"text","value":"You save {{amount_saved}}"}}}}},"pageCustomizationData":{"_id":"64d3b505dd2fb15e39c866d6","shopName":"different-roads.myshopify.com","__v":0,"banners":{"landingPageImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/landing_page_bannerv2.png","pageBannerImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/page_banner_temp.png","productReviewImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/landing_page_bannerv2.png"},"cartFooter":{"cartFooterBgColor":"#f1f2f3","cartFooterTextColor":"#000000","cartFooterNextButtonColor":"#000000","cartFooterNextButtonTextColor":"#ffffff","cartFooterBackButtonColor":"#6d7175","cartFooterBackButtonTextColor":"#ffffff","cartFooterDiscountTextColor":"#000000"},"colors":{"disabledColor":"gray","primaryColor":"blue","productBox":"blue","secondaryColor":"aqua","textColor":"black"},"createdAt":"2023-08-09T15:47:17.009Z","landingPage":{"landingPageTextColor":"#000000","landingPageButtonBgColor":"#C8102E","landingPageButtonTextColor":"#ffffff"},"navigationBanner":{"navigationBannerTitleColor":"#ffffff","navigationBannerTextColor":"#ffffff","navigationBannerStepCompletionColor":"#E0C6AD","navigationBannerStepDoneColor":"#ffffff","navigationBannerStepTextColor":"#C8102E"},"previewPage":{"bannerTextColor":"#ffffff"},"primaryFont":"","productCard":{"productCardBgColor":"#F2F2F2","productCardTextColor":"#252525","productCardButtonColor":"#470A68","productCardButtonTextColor":"#ffffff"},"quickSettings":{"isQuickSettingsEnabled":false,"colors":{"primaryColor":"#000000","buttonBgColor":"#000000","buttonTextColor":"#ffffff"}},"summaryBlock":{"summaryBlockAddToCartButtonColor":"#C8102E","summaryBlockAddToCartButtonTextColor":"#ffffff"},"updatedAt":"2026-06-29T08:44:32.683Z","categoryBlock":{"categoryBgColor":"#FFFFFF"},"generalSettings":{"scrollBar":{"scrollBarColor":"#000000"},"conditionToast":{"conditionToastBgColor":"#000000","conditionToastTextColor":"#ffffff"},"icon":{"iconBgColor":"#000000","iconTextColor":"#ffffff"},"productPage":{"productPageTitleColor":"#000000"}},"productBundle":{"designSettings":{},"globalSettings":{"general":{"autoShiftToAvailableVariant":true,"hideOutOfStockOptions":false,"unselectOptionsByDefault":true,"showProductCardImageBorder":true,"footerSavingPillPosition":"BEFORE_PRICE","metafieldNameSpaceAndKeys":[],"isB2BCatalogPricingEnabled":false,"allowPartialLocaleMatching":false,"productImageTransformConfig":{"isEnabled":true,"options":"{ maxHeight: 400, maxWidth: 400, scale: 1 }"},"customCss":"","customJs":""},"devMode":{"useNativeCartRefresh":true,"useWidgetATCButton":true,"useShadowRoot":false,"useAcceleratedCheckoutUrlRedirect":true,"useFormOnlyCartAdd":false},"selectorConfig":{"productFormSubmitSelector":null,"customVariantPickerSelectors":null,"quantityBtnSelectors":null,"addToCartBtnSelectors":null,"checkoutBtnSelector":null,"nativeDiscountedPriceSelector":null,"nativeOriginalPriceSelector":null,"nativePriceBadgeSelector":null},"postDecisionAddToCartConfig":{"executeDefaultSideCartUpdate":false,"redirectToCheckoutEnabled":true,"redirectToCartEnabled":false,"executeScriptAfterAddToCart":""}}}},"bundleLinkData":[{"_id":"64d3b6c6dd2fb15e39c8d4dd","bundleId":"1","bundleName":"Build an ABA Bundle","createdAt":"2023-08-09T15:54:46.390Z","bundleImg":"https:\/\/d3ks0ngva6go34.cloudfront.net\/giftBox\/different-roads.myshopify.com\/1692645014784.png","productsForBundleLink":[{"productId":"8566704865574","graphqlId":"gid:\/\/shopify\/Product\/8566704865574","handle":"different-roads-build-an-aba-bundle","variants":[{"variantId":"46258956599590","variantGraphqlId":"gid:\/\/shopify\/ProductVariant\/46258956599590"}],"hasOnlyDefaultVariant":true,"images":[{"originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/1788\/7187\/files\/DRK403VB-MappStartUpSetCropped.png?v=1692645654"},{"originalSrc":"https:\/\/cdn.shopify.com\/s\/files\/1\/1788\/7187\/files\/DRB034AWorkinProgressTheCurriculumAssessmentandDatasheets_94d68767-64c8-4246-b9c8-3ef5681356bc.png?v=1692645654"}],"title":"Different Roads Build an ABA Bundle","order":0}]}],"bundleUpsellData":{},"mixAndMatchData":[]}; if (ext_data && !ext_data?.errorMsg) { window.easybundles_ext_data = ext_data; } let sdk_bundle_upsell_index = []; window.__gbbOverflow = window.__gbbOverflow || {}; window.__gbbOverflow.upsellIndexRaw = sdk_bundle_upsell_index; if (window.easybundles_ext_data && Array.isArray(sdk_bundle_upsell_index)) { window.easybundles_ext_data.sdkBundleUpsellIndex = sdk_bundle_upsell_index; const matchedRaw = JSON.parse("{}") || {}; const matchedSdkUpsells = {}; for (const offerId of Object.keys(matchedRaw)) { const { entry, bundleData } = matchedRaw[offerId]; matchedSdkUpsells[offerId] = bundleData ? { ...entry, bundleData } : entry; } window.easybundles_ext_data.matchedSdkUpsells = matchedSdkUpsells; } let full_page_ext_data = {"userData":{"_id":"64d3b504dd2fb15e39c866bc","shopName":"different-roads.myshopify.com","brandName":"Different Roads","bundleSettings":{"allowMultipleBoxesFromSameBundle":true,"showCompareAtPrice":true,"dontIndexGiftboxBuilderPages_onGoogle":false,"isValidateInventoryEnabled":false,"calculateAutomaticDiscountInPercentage":true},"counters":{"reviewModal":100,"themeExtensionModal":5,"instructionsModalCnt":1,"viewBundleModalCnt":0,"createBundleModalCnt":0},"countryCode":"US","countryName":"United States","createdAt":"2023-08-09T15:47:16.712Z","currency":"USD","currencyInfo":{"code":"USD","symbol":"$","thousandsSeparator":",","decimalSeparator":".","symbolOnLeft":true,"spaceBetweenAmountAndSymbol":false,"decimalDigits":2},"customSettings":{"initialModalPopupCnt":0,"disableCartSettings":false,"addToCartBtnSelectors":null,"checkoutBtnSelectors":null,"customStyle":null,"addAfterAddTocartBtn":false,"addAftercheckoutBtn":false,"disableApp":false,"loadingGif":"https:\/\/gift-box-builder-app4.s3.us-east-2.amazonaws.com\/public\/icons\/loadingGif.gif","stackDiscounts":true,"showOnlyAdminSelectedVariants":true,"overWriteCheckoutBtn":false,"addGiftMessageToNote":true},"isAppFree":false,"isSubscription":{"id":30174970150,"name":"Monthly-Starter-July23","price":"19.00","billing_on":"2023-08-30","status":"active","created_at":"2023-08-09T11:47:53-04:00","updated_at":"2023-08-09T11:48:02-04:00","activated_on":"2023-08-09","return_url":"https:\/\/different-roads.myshopify.com\/admin\/apps\/10b4272bede142b02924feec498b4009","test":false,"cancelled_on":null,"trial_days":21,"trial_ends_on":"2023-08-30","api_client_id":3918921729,"decorated_return_url":"https:\/\/different-roads.myshopify.com\/admin\/apps\/10b4272bede142b02924feec498b4009?charge_id=30174970150","capped_amount":"199.00","balance_used":0,"balance_remaining":199,"risk_level":0.009460937499999999,"currency":"USD"},"multipleCurrenciesInfo":{"USD":{"code":"USD","symbol":"$","thousandsSeparator":",","decimalSeparator":".","symbolOnLeft":true,"spaceBetweenAmountAndSymbol":false,"decimalDigits":2}},"otherInfo":[],"planId":"","status":"1","timezone":"America\/New_York","updatedAt":"2026-07-16T14:49:33.914Z","isOnBoardingCompleted":true,"lastVisitTime":"2026-07-16T14:49:33.910Z","totalBundleRevenue":14609.499999999998,"totalOrdersCount":15,"reviewData":{"lastShownAt":"2024-10-23T19:42:06.452Z"},"shopDomain":"difflearn.com","mantleApiToken":"4cbb27f3-5125-49e1-8209-25f9c14f5522","storefrontAccessToken":"30dc3effe0240e23be727396cda72a9b","loginData":{"lastLoggedInAt":"2026-07-16T14:49:33.912Z"},"isAppLevelMetafieldCreated":true,"trackEvents":{"OB Welcome page visited":true,"OB Welcome page button click":true},"pageId":"cf709d2c-c1a1-46e9-a397-d9c8c7dda26d","isAppLevelMetafieldForFullPageBundlesCreated":true,"crispCustomerUrl":"https:\/\/app.crisp.chat\/website\/b3910a47-66c1-43ab-b044-8b97762f4a6b\/inbox\/session_998d0a62-913c-4a03-b80b-c5bd80b7aadf","mantleCustomerData":{"id":"a362c566-4237-47a0-b30b-a01156b00863","customerId":"e20269b1-8905-418e-9a88-1b9fd6b070e1","name":"Different Roads","test":false,"preferredCurrency":"USD","shopify":{"id":"17887187","myshopifyDomain":"different-roads.myshopify.com","planName":"Advanced"},"apiId":"84f442a1-2d4a-4012-85da-b4a4b38fc795","profileUrl":"https:\/\/app.heymantle.com\/apps\/84f442a1-2d4a-4012-85da-b4a4b38fc795\/customers\/e20269b1-8905-418e-9a88-1b9fd6b070e1"},"orderSummary":{"last30Days":{"totalOrderValue":0,"totalOrderValueUSD":0,"totalBundlesValue":0,"totalBundlesValueUSD":0,"totalBundlesSold":0,"totalOrderCount":0,"dateRange":{"from":"2026-06-16T00:00:00.000Z","to":"2026-07-16T00:00:00.000Z"},"lastUpdatedAt":"2026-07-16T14:49:33.755Z"},"shopOrderDataBeforeInstall":{"previousMonthRevenue":null,"previousMonthRevenueUSD":0,"previousMonthOrderCount":0}},"cancelledOrderWebhookRegistered":"success","webhooksCount":5,"webhooksLastAttempted":"2025-10-04T09:51:54.852Z","webhooksRegistered":["orders\/cancelled","app\/uninstalled","orders\/create","app\/uninstalled","themes\/publish"],"reRegisterCron":"success","webhooksLastUpdated":"2025-10-04T12:42:30.995Z","SERVER_URL":"https:\/\/prod.backend.giftbox.giftkart.app"},"languageData":{"_id":"64d3b505dd2fb15e39c866d7","shopName":"different-roads.myshopify.com","__v":0,"createdAt":"2023-08-09T15:47:17.009Z","en":{"landingPage":{"bannerText":{"id":"bannerText","label":"Banner Text","type":"text","value":"Build your own Bundle in just a few clicks!"},"bannerSubtext":{"id":"bannerSubtext","label":"Banner Subtext","type":"text","value":"Send a custom bundle to your loved one in just a few steps"},"bannerButtonText":{"id":"bannerButtonText","label":"Banner Button Text","type":"text","value":"Start Building your Bundle"},"selectPreCuratedBoxLabel":{"id":"selectPreCuratedBoxLabel","label":"Select Pre-Curated Box Label","type":"text","value":"Or select from a range of pre-curated Gift Boxes"}},"navigationSteps":{"productPageStepText":{"id":"productPageStepText","label":"Product Page Step Text","type":"text","value":"Add Products"},"giftBoxStepText":{"id":"giftBoxStepText","label":"Bundle Step Text","type":"text","value":"Add Gift Box"},"personalizeStepText":{"id":"personalizeStepText","label":"Personalize Step Text","type":"text","value":"Personalize"},"multipleCategoriesStepText":{"id":"multipleCategoriesStepText","label":"Multiple Categories Step Text","type":"text","value":"Multiple Categories"}},"productPage":{"selectProductsLabel":{"id":"selectProductsLabel","label":"Select Products Label","type":"text","value":"Select Products"},"productPageSubtext":{"id":"productPageSubtext","label":"Product Page Subtext","type":"text","value":""}},"giftBoxPage":{"selectGiftBoxLabel":{"id":"selectGiftBoxLabel","label":"Select Bundle Label","type":"text","value":"Select a Bundle Box"},"giftBoxPageSubtext":{"id":"giftBoxPageSubtext","label":"Gift Box Page Subtext","type":"text","value":""}},"videoMessage":{"permissionDenied":{"id":"permissionDenied","label":"Permission Denied","type":"text","value":"Permission Denied"},"uploadConfirmation":{"id":"uploadConfirmation","label":"Upload Confirmation","type":"text","value":"Your video has been successfully uploaded!"},"pressToRecord":{"id":"pressToRecord","label":"Press to record","type":"text","value":"Press to record"},"recording":{"id":"recording","label":"Recording","type":"text","value":"Recording...."},"errorMessage":{"id":"errorMessage","label":"Error Message","type":"text","value":"An error occured, Please try again!"},"loading":{"id":"loading","label":"Loading","type":"text","value":"Loading...."},"uploading":{"id":"uploading","label":"Uploading","type":"text","value":"Uploading...."},"sendVideoMessageText":{"id":"sendVideoMessageText","label":"Send Video Message Text","type":"text","value":"Send Video Message"},"giftMessageDeliveryInfo":{"id":"giftMessageDeliveryInfo","label":"Message Delivery Info","type":"text","value":"The message will be sent to the recipient via email as soon as the order is placed"},"saveVideoText":{"id":"saveVideoText","label":"Save Video Text","type":"text","value":"Save Video"},"reRecordVideoText":{"id":"reRecordVideoText","label":"Re-Record Video Text","type":"text","value":"Re-Record Video"}},"personalizePage":{"selectGreetingCardLabel":{"id":"selectGreetingCardLabel","label":"Select Greeting Card Label","type":"text","value":"Select A Greeting Card"},"clearSelectionButton":{"id":"clearSelectionButton","label":"Clear Selection label","type":"text","value":"Clear Selection"},"noImagesAvailable":{"id":"noImagesAvailable","label":"No Images Available label","type":"text","value":"No Images Available"},"messageLabel":{"id":"messageLabel","label":"Message Label","type":"text","value":"Message"},"senderNamePlaceholder":{"id":"senderNamePlaceholder","label":"Sender Name Placeholder","type":"text","value":"From"},"recipientNamePlaceholder":{"id":"recipientNamePlaceholder","label":"Recipient Name Placeholder","type":"text","value":"To"},"messagePlaceholder":{"id":"messagePlaceholder","label":"Message Placeholder","type":"text","value":"Enter a message here..."},"emailAddressLabel":{"id":"emailAddressLabel","label":"Recipient Email Address Label","type":"text","value":"Recipient Email Address"},"emailAddressPlaceholder":{"id":"emailAddressPlaceholder","label":"Recipient Email Address Placeholder","type":"text","value":"Enter a recipient email address here..."},"emailValidationMessage":{"id":"emailValidationMessage","label":"Email Validation Message","type":"text","value":"Please enter a valid email address"},"sendNow":{"id":"sendNow","label":"Send Now Label","type":"text","value":"Send Now"},"sendLater":{"id":"sendLater","label":"Send Later Label","type":"text","value":"Send Later"},"personalizePageSubtext":{"id":"personalizePageSubtext","label":"Personalize Page Subtext","type":"text","value":""},"messageIsRequiredError":{"id":"messageIsRequiredError","label":"Message is required warning","type":"text","value":"Please enter a message"}},"reviewPage":{"reviewPageBannerText":{"id":"reviewPageBannerText","label":"Review Page Banner Text","type":"text","value":"You’ve made the Right Choice!"},"reviewPageBannerSubtext":{"id":"reviewPageBannerSubtext","label":"Review Page Banner Subtext","type":"text","value":"Review your bundle and proceed to checkout"},"addOnsLabel":{"id":"addOnsLabel","label":"Add Ons Label","type":"text","value":"Add Ons"},"totalValueLabel":{"id":"totalValueLabel","label":"Total Value Label","type":"text","value":"Total Value"},"totalLabel":{"id":"totalLabel","label":"Total Label","type":"text","value":"Total"},"productLabel":{"id":"productLabel","label":"Product Header Label","type":"text","value":"Product"},"priceLabel":{"id":"priceLabel","label":"Price Header Text","type":"text","value":"Price"},"quantityLabel":{"id":"quantityLabel","label":"Quantity Header Text","type":"text","value":"Quantity"},"deliveryDateLabel":{"id":"deliveryDateLabel","label":"Delivery Date Label","type":"text","value":"Delivery Date"},"productsLabelText":{"id":"productsLabelText","label":"Products Label Text","type":"text","value":"Products"},"messagesLabelText":{"id":"messagesLabelText","label":"Messages Label Text","type":"text","value":"Messages"},"discountAppliedLabel":{"id":"discountAppliedLabel","label":"Discount Applied Label","type":"text","value":"Discount"},"subtotalLabel":{"id":"subtotalLabel","label":"Sub Total Label","type":"text","value":"Subtotal"},"orderDetailsLabel":{"id":"orderDetailsLabel","label":"Order Details Label","type":"text","value":"Order Details"},"itemsLabel":{"id":"itemsLabel","label":"No. of Items Label","type":"text","value":"Item(s)"},"oneTimePurchaseLabel":{"id":"oneTimePurchaseLabel","label":"One-Time Purchase label","type":"text","value":"One-Time Purchase"},"subscribeAndSaveLabel":{"id":"subscribeAndSaveLabel","label":"Subscribe and Save label","type":"text","value":"Subscribe and Save"},"noSubscriptionFoundLabel":{"id":"noSubscriptionFoundLabel","label":"No Subscription plans found label","type":"text","value":"Oops! No Subscription plans were found"},"deliveryFrequencyLabel":{"id":"deliveryFrequencyLabel","label":"Delivery Frequency Label","type":"text","value":"Delivery Frequency"},"createNewBoxLabel":{"id":"createNewBoxLabel","label":"Create New Box Label","type":"text","value":"Create new Box"},"editButtonText":{"id":"editButtonText","label":"Edit Label","type":"text","value":"Edit"},"deliverySchedulerPlaceholderText":{"id":"deliverySchedulerPlaceholderText","label":"Delivery Scheduler Placeholder Text","type":"text","value":"Select a date"}},"general":{"noProductsAvailable":{"id":"noProductsAvailable","label":"No Products Available label","type":"text","value":"No Products Available"},"filtersLabel":{"id":"filtersLabel","label":"Filters Label","type":"text","value":"Filters"},"clearSelection":{"id":"clearSelection","label":"Clear Filters Selection","type":"text","value":"Clear Selection"},"searchLabel":{"id":"searchLabel","label":"Search Label","type":"text","value":"Search"},"addToBoxButtonText":{"id":"addToBoxButtonText","label":"Add To Box Button","type":"text","value":"Add To Box"},"chooseOptionsButtonText":{"id":"chooseOptionsButtonText","label":"Choose Options Button","type":"text","value":"Choose Options"},"loadMoreProductsButtonText":{"id":"loadMoreProductsButtonText","label":"Load More Products Button","type":"text","value":"Load More Products"},"loadingCheckoutButtonText":{"id":"loadingCheckoutButtonText","label":"Loading Checkout Button","type":"text","value":"Loading Checkout..."},"addedText":{"id":"addedText","label":"Added Label","type":"text","value":"Added"},"addButtonText":{"id":"addButtonText","label":"Add Button Text","type":"text","value":"Add"},"nextButtonText":{"id":"nextButtonText","label":"Next Button Text","type":"text","value":"Next"},"addToCartButtonText":{"id":"addToCartButtonText","label":"Add To Cart Button Text","type":"text","value":"Add To Cart"},"backButtonText":{"id":"backButtonText","label":"Back Button Text","type":"text","value":"Back"},"checkoutButtonText":{"id":"checkoutButtonText","label":"Checkout Button Text","type":"text","value":"Checkout"},"removeButtonText":{"id":"removeButtonText","label":"Remove Button Text","type":"text","value":"Remove"},"reviewButtonText":{"id":"reviewButtonText","label":"Review Button Text","type":"text","value":"Review"},"combinationNotAvailable":{"id":"combinationNotAvailable","label":"Combination Not Available","type":"text","value":"Combination Not Available"},"quantity":{"id":"quantity","label":"Quantity Label","type":"text","value":"Quantity"},"viewCartProductsLabel":{"id":"viewCartProductsLabel","label":"View Cart Products Label","type":"text","value":"View Selected Products"},"selectedProductsLabel":{"id":"selectedProductsLabel","label":"Selected Products Label","type":"text","value":"Selected Products"},"selectBundleProductsText":{"id":"selectBundleProductsText","label":"Select Bundle Products label","type":"text","value":"Select Bundle Products"},"redirectingText":{"id":"redirectingText","label":"Redirecting label","type":"text","value":"Redirecting..."},"preparingBundleText":{"id":"preparingBundleText","label":"Preparing Bundle Label","type":"text","value":"Preparing Bundle..."},"productsNotAvailableText":{"id":"productsNotAvailableText","label":"Products Not Available Label","type":"text","value":"Oops! Some Products are not available"},"discountsMayNotApplyText":{"id":"discountsMayNotApplyText","label":"Discounts may not be applied Label","type":"text","value":"discounts may not be applied"},"removeAllBoxProducts":{"id":"removeAllBoxProducts","label":"Remove all Box Products Label (Cart Page Popup)","type":"text","value":"This is a Box Product. Removing this will remove all the products from box"},"cartPageCheckoutButtonLoadingText":{"id":"cartPageCheckoutButtonLoadingText","label":"Cart Page Checkout Button Loading Text","type":"text","value":"Loading Checkout..."},"inventoryInStockText":{"id":"inventoryInStockText","label":"Inventory in Stock Label","type":"text","value":"in Stock"},"inventoryLimitReachedText":{"id":"inventoryLimitReachedText","label":"Inventory Limit Reached Label","type":"text","value":"No More Stock"},"productAddedBtnText":{"id":"productAddedBtnText","label":"Product Added label","type":"text","value":"Added"},"boxSelectionEligibilityToast":{"id":"boxSelectionEligibilityToast","label":"Box Selection Eligibility Toast","type":"text","value":"Remove ##boxSelectionDifference## item(s) to select this box"},"discountRibbonSuffix":{"id":"discountRibbonSuffix","label":"Discount Badge Suffix","type":"text","value":"off"},"itemsInCartLabel":{"id":"itemsInCartLabel","label":"Cart Inclusion Title","type":"text","value":"item(s)"},"removeFooterProductFrom":{"id":"removeFooterProductFrom","label":"Remove Product from Footer Text","type":"text","value":"Remove This Product From ##stepName##"},"selectSubscriptionPlanButtonText":{"id":"selectSubscriptionPlanButtonText","label":"Subscription Selection Label","type":"text","value":"Select Subscription Plan"}},"discountRules":{"rule1":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule2":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule3":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule4":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}},"rule5":{"amount":{"id":"amount","label":"Amount","type":"text","value":""},"text":{"id":"text","label":"Text","type":"text","value":""}}},"sortBy":{"sortLabel":{"id":"sortLabel","label":"Sort Label","type":"text","value":"Sort"},"alphabeticalAToZ":{"id":"alphabeticalAToZ","label":"Alphabetical, A-Z Label","value":"Alphabetical, A-Z"},"alphabeticalZToA":{"id":"alphabeticalZToA","label":"Alphabetical, Z-A Label","value":"Alphabetical, Z-A"},"priceHighToLow":{"id":"priceHighToLow","label":"Price, High to Low Label","value":"Price, High to Low"},"priceLowToHigh":{"id":"priceLowToHigh","label":"Price, Low to High Label","value":"Price, Low to High"},"featured":{"id":"featured","label":"Featured Label","type":"text","value":"Featured"}},"conditions":{"amount":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products worth at least ##conditionAmount## on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products worth maximum of ##conditionAmount## on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products worth ##conditionAmount## on this step"}},"quantity":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add at least ##conditionQuantity## products on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add a maximum of ##conditionQuantity## products to continue"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add exactly ##conditionQuantity## products on this step"}},"weight":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products weighing at least ##conditionWeight## on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products weighing maximum of ##conditionWeight## on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products weighing ##conditionWeight## on this step"}}},"multipleCategoriesPage":{"multipleCategoriesSubtext":{"id":"multipleCategoriesSubtext","label":"Multiple Categories Page Subtext","type":"text","value":""}},"multipleCategories":{},"addons":{"maxAddonProductsAllowed":{"id":"maxAddonProductsAllowed","label":"Max Addon Products Allowed message","type":"text","value":" add maximum ##maxAllowedAddons## products to continue"},"addonProductsMandatory":{"id":"addonProductsMandatory","label":"Addon Products Mandatory message","type":"text","value":"Please add atleast one product"},"firstBundleInteraction":{"id":"firstBundleInteraction","label":"Mobile Add On Notification","type":"text","value":"Additional offers to be unlocked"}},"modals":{"clearCart":{"cancelButtonText":{"id":"cancelButtonText","label":"Modal - Cancel Button Text","type":"text","value":"Cancel"},"confirmButtonText":{"id":"confirmButtonText","label":"Modal - Confirm Button Text","type":"text","value":"Clear Cart"},"description":{"id":"description","label":"Modal - Description","type":"text","value":"Are you sure you want to clear all items from your cart? This action cannot be undone..."},"title":{"id":"title","label":"Modal - Title","type":"text","value":"Are you sure?"},"triggerButtonText":{"id":"triggerButtonText","label":"Clear Cart Button Text","type":"text","value":"Clear"}}}},"languageMode":"SINGLE","updatedAt":"2026-06-29T08:44:28.980Z","mixAndMatchTextData":{"en":{"conditions":{"amount":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products worth at least ##conditionAmount## on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products worth maximum of ##conditionAmount## on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products worth ##conditionAmount## on this step"}},"quantity":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add at least ##conditionQuantity## products on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add a maximum of ##conditionQuantity## products to continue"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add exactly ##conditionQuantity## products on this step"}},"weight":{"greaterThanOrEqualTo":{"id":"greaterThanOrEqualTo","label":"Greater than condition message","type":"text","value":"Add products weighing at least ##conditionWeight## on this step"},"lessThanOrEqualTo":{"id":"lessThanOrEqualTo","label":"Less than condition message","type":"text","value":"Add products weighing maximum of ##conditionWeight## on this step"},"equalTo":{"id":"equalTo","label":"Equal to condition message","type":"text","value":"Add products weighing ##conditionWeight## on this step"}}},"general":{"noProductsAvailable":{"id":"noProductsAvailable","label":"No Products Available label","type":"text","value":"No Products Available"},"addBundleToCartBtnText":{"id":"addBundleToCartBtnText","label":"Add Bundle Cart label","type":"text","value":"Add Bundle to Cart"},"addBundleToCartLoadingBtnText":{"id":"addBundleToCartLoadingBtnText","label":"Add Bundle Loading label","type":"text","value":"Adding Bundle..."},"inventoryLimitReachedText":{"id":"inventoryLimitReachedText","label":"Inventory Limit Reached Label","type":"text","value":"No More Stock"},"emptyCardText":{"id":"emptyCardText","label":"Add Product Card Text","type":"text","value":"Add Product"},"boxSelectionEligibilityToast_inPage":{"id":"boxSelectionEligibilityToast_inPage","label":"Box Selection Eligibility Toast","type":"text","value":"Remove ##boxSelectionDifference## item(s) to select this box"},"subtotalLabelText_inPage":{"id":"subtotalLabelText_inPage","label":"Subtotal Text","type":"text","value":"Subtotal"},"boxConditionInitialText_inPage":{"id":"boxConditionInitialText_inPage","label":"Inline Add To Cart Button - Quantity Selection message","type":"text","value":"Select {{quantityDifference}} Items"},"stepsDrawerPillText":{"id":"stepsDrawerPillText","label":"Steps Drawer Pill Text","type":"text","value":"Show all steps"}},"footer":{"footerPrevBtnText":{"id":"footerPrevBtnText","label":"Footer Previous Button","type":"text","value":"Prev"},"footerNextBtnText":{"id":"footerNextBtnText","label":"Footer Next Button","type":"text","value":"Next"},"footerFinishBtnText":{"id":"footerFinishBtnText","label":"Footer Finish Button","type":"text","value":"Done"}},"productCard":{"productCardAddBtnText":{"id":"productCardAddBtnText","label":"Product Add to Cart Button","type":"text","value":"Add to Cart"},"productVariantLabelText":{"id":"productVariantLabelText","label":"Product Variant Label","type":"text","value":"Select variant"},"productCardAddBtnText_inPage":{"id":"productCardAddBtnText_inPage","label":"Inline Product - Add Button Text","type":"text","value":"Add +"}}}},"productBundle":{"en":{"general":{"title":{"id":"title","label":"Title","type":"text","value":"Bundle"},"subTitle":{"id":"subTitle","label":"Sub Title","type":"text","value":"Select the products you want to add to your bundle"},"unSelectedOptionLabel":{"id":"unSelectedOptionLabel","label":"Unselected Option Label","type":"text","value":"Select {{option_name}}"}},"validation":{"unselectedOption":{"id":"unselectedOption","label":"Unselected Option","type":"text","value":"{{option_name}} selection required"},"outOfStockOption":{"id":"outOfStockOption","label":"Out Of Stock Option","type":"text","value":"currently not available"}},"footer":{"atcButtonText":{"id":"atcButtonText","label":"Add to Cart Button Text","type":"text","value":"Add to Cart"},"atcButtonOutOfStockText":{"id":"atcButtonOutOfStockText","label":"Add to Cart Out of Stock Text","type":"text","value":"Out of Stock"},"priceLabel":{"id":"priceLabel","label":"Price Label","type":"text","value":"Total Price"},"savingsBadgeText":{"id":"savingsBadgeText","label":"Savings Badge Text","type":"text","value":"You save {{amount_saved}}"}}}}},"pageCustomizationData":{"_id":"64d3b505dd2fb15e39c866d6","shopName":"different-roads.myshopify.com","__v":0,"banners":{"landingPageImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/landing_page_bannerv2.png","pageBannerImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/page_banner_temp.png","productReviewImageSrc":"https:\/\/d3ks0ngva6go34.cloudfront.net\/public\/banners\/landing_page_bannerv2.png"},"cartFooter":{"cartFooterBgColor":"#f1f2f3","cartFooterTextColor":"#000000","cartFooterNextButtonColor":"#000000","cartFooterNextButtonTextColor":"#ffffff","cartFooterBackButtonColor":"#6d7175","cartFooterBackButtonTextColor":"#ffffff","cartFooterDiscountTextColor":"#000000"},"colors":{"disabledColor":"gray","primaryColor":"blue","productBox":"blue","secondaryColor":"aqua","textColor":"black"},"createdAt":"2023-08-09T15:47:17.009Z","landingPage":{"landingPageTextColor":"#000000","landingPageButtonBgColor":"#C8102E","landingPageButtonTextColor":"#ffffff"},"navigationBanner":{"navigationBannerTitleColor":"#ffffff","navigationBannerTextColor":"#ffffff","navigationBannerStepCompletionColor":"#E0C6AD","navigationBannerStepDoneColor":"#ffffff","navigationBannerStepTextColor":"#C8102E"},"previewPage":{"bannerTextColor":"#ffffff"},"primaryFont":"","productCard":{"productCardBgColor":"#F2F2F2","productCardTextColor":"#252525","productCardButtonColor":"#470A68","productCardButtonTextColor":"#ffffff"},"quickSettings":{"isQuickSettingsEnabled":false,"colors":{"primaryColor":"#000000","buttonBgColor":"#000000","buttonTextColor":"#ffffff"}},"summaryBlock":{"summaryBlockAddToCartButtonColor":"#C8102E","summaryBlockAddToCartButtonTextColor":"#ffffff"},"updatedAt":"2026-06-29T08:44:32.683Z","categoryBlock":{"categoryBgColor":"#FFFFFF"},"generalSettings":{"scrollBar":{"scrollBarColor":"#000000"},"conditionToast":{"conditionToastBgColor":"#000000","conditionToastTextColor":"#ffffff"},"icon":{"iconBgColor":"#000000","iconTextColor":"#ffffff"},"productPage":{"productPageTitleColor":"#000000"}},"productBundle":{"designSettings":{},"globalSettings":{"general":{"autoShiftToAvailableVariant":true,"hideOutOfStockOptions":false,"unselectOptionsByDefault":true,"showProductCardImageBorder":true,"footerSavingPillPosition":"BEFORE_PRICE","metafieldNameSpaceAndKeys":[],"isB2BCatalogPricingEnabled":false,"allowPartialLocaleMatching":false,"productImageTransformConfig":{"isEnabled":true,"options":"{ maxHeight: 400, maxWidth: 400, scale: 1 }"},"customCss":"","customJs":""},"devMode":{"useNativeCartRefresh":true,"useWidgetATCButton":true,"useShadowRoot":false,"useAcceleratedCheckoutUrlRedirect":true,"useFormOnlyCartAdd":false},"selectorConfig":{"productFormSubmitSelector":null,"customVariantPickerSelectors":null,"quantityBtnSelectors":null,"addToCartBtnSelectors":null,"checkoutBtnSelector":null,"nativeDiscountedPriceSelector":null,"nativeOriginalPriceSelector":null,"nativePriceBadgeSelector":null},"postDecisionAddToCartConfig":{"executeDefaultSideCartUpdate":false,"redirectToCheckoutEnabled":true,"redirectToCartEnabled":false,"executeScriptAfterAddToCart":""}}}}}; let parent_product_data = null; if(full_page_ext_data && !full_page_ext_data?.errorMsg) { window.easybundle_user_ext_data = full_page_ext_data.userData || {} } if (parent_product_data && !parent_product_data?.errorMsg) { window.shopifyLiquidValuesApp4Ext.product.bundleProductConfiguration = parent_product_data; const isAutoPlaceFullPageBundleEnabled = full_page_ext_data?.userData?.customSettings?.isAutoPlaceFullPageBundleEnabled ?? true let bundle_data = null; const keys = ["SDK", "PB"]; const keyPrefix = parent_product_data.appLevelMetafieldKey?.split('-')[0]; const isSdkBundle = keys.includes(keyPrefix); const bundleDesignTemplate = parent_product_data.bundleDesignTemplate || ''; const isPdpBundleBuilder = bundleDesignTemplate.startsWith('PDP_') || bundleDesignTemplate === 'CUSTOM_TEMPLATE'; const isPbBundleBuilder = bundleDesignTemplate.startsWith('PB_'); const isQbBundleBuilder = bundleDesignTemplate.startsWith('QB_'); const isPdpBundle = isPdpBundleBuilder || isPbBundleBuilder || isQbBundleBuilder; if(full_page_ext_data && bundle_data){ if (!isPdpBundle){ isAutoPlaceFullPageBundleEnabled && removeProductHtmlForBundles(); isAutoPlaceFullPageBundleEnabled && buildDummyProductHtmlForBundles(); } const discountsConfiguration = bundle_data?.discountsData; delete bundle_data.discountsData; let active_bundle_data = { ...full_page_ext_data, stepsConfigurationData: bundle_data, discountsData: discountsConfiguration || {}, } if (isSdkBundle) { active_bundle_data.bundleType = parent_product_data.bundleType, active_bundle_data.bundleDesignTemplate = parent_product_data.bundleDesignTemplate, active_bundle_data._preResolvedBundle = true, active_bundle_data._bundleData = bundle_data, delete active_bundle_data.stepsConfigurationData; } // easybundle_full_page_ext_data is a legacy alias. window.easybundle_active_bundle_data = active_bundle_data; window.easybundle_full_page_ext_data = active_bundle_data; } } } function checkIfShouldImportMixAndMatchAssets(allMixAndMatchBundles) { try{ const currentProductId = window.shopifyLiquidValuesApp4Ext?.product?.productData?.id; if(!currentProductId || allMixAndMatchBundles?.length <= 0){ return false; } const isThisParentProductPage = allMixAndMatchBundles.some(bundle => bundle.parentProductShopifyData?.id == currentProductId); if(isThisParentProductPage) return true; const currentProductCollections = window.shopifyLiquidValuesApp4Ext?.product?.collections?.map(collection => collection.id); for(let bundle of allMixAndMatchBundles){ const bundleUpsellConfig = bundle.bundleUpsellConfig; const isBundleUpsellEmbedEnabled = bundleUpsellConfig?.upsellConfiguration?.isEnabled; const isBundleUpsellWidgetEnabled = bundleUpsellConfig?.widgetConfiguration?.isEnabled; if(!isBundleUpsellEmbedEnabled && !isBundleUpsellWidgetEnabled) continue; const widgetDisplayConfig = bundleUpsellConfig?.widgetConfiguration?.displayConfiguration; const upsellDisplayConfig = bundleUpsellConfig?.upsellConfiguration?.displayConfiguration; let showOnAllBundleProducts = false; let productIdsToCheck = []; let collectionIdsToCheck = []; if(isBundleUpsellEmbedEnabled){ showOnAllBundleProducts = upsellDisplayConfig?.showOnAllBundleProducts; productIdsToCheck = upsellDisplayConfig?.showOnSpecificProductPages?.map(product => product?.productId) || [] collectionIdsToCheck = upsellDisplayConfig?.showOnSpecificCollectionPages?.map(collection => collection?.collectionId) || [] } if(isBundleUpsellWidgetEnabled){ showOnAllBundleProducts = showOnAllBundleProducts || widgetDisplayConfig?.showOnAllBundleProducts; const productIds = widgetDisplayConfig?.showOnSpecificProductPages?.map(product => product?.productId) || []; const collectionIds = widgetDisplayConfig?.showOnSpecificCollectionPages?.map(collection => collection?.collectionId) || []; productIdsToCheck = [ ...productIdsToCheck, ...productIds ]; collectionIdsToCheck = [ ...collectionIdsToCheck, ...collectionIds ]; } if(showOnAllBundleProducts){ Object.keys(bundle ?? {}).filter(key => key?.startsWith('productsData')).forEach(stepKey => { const stepData = bundle?.[stepKey]; Object.values(stepData?.categories ?? {}).forEach(category => { const productIds = category?.products?.map(product => product.productId) || []; const collectionIds = category?.collectionsSelectedData?.map(collection => collection.id?.replace("gid://shopify/Collection/", "")) || []; productIdsToCheck = [ ...productIdsToCheck, ...productIds ]; collectionIdsToCheck = [ ...collectionIdsToCheck, ...collectionIds ]; }) }) } const isThisProductRelevant = productIdsToCheck?.some(productId => productId == currentProductId); const isThisProductCollectionsRelevant = collectionIdsToCheck?.some(collectionId => currentProductCollections?.includes(collectionId)); if(isThisProductRelevant || isThisProductCollectionsRelevant) return true; } return false; }catch(err){ debugConsole("error in checkIfShouldImportMixAndMatchAssets",err) return false; } } window.gbbExtEmbed.f.checkIfShouldImportMixAndMatchAssets = checkIfShouldImportMixAndMatchAssets; // Fallback only; the primary match runs server-side in sdk-upsell-matches.liquid. // Two blocks declare two products, but the page-wide globals hold one (seeded with ??=). function getMatchContexts(){ const contexts = []; const pageProduct = window.shopifyLiquidValuesApp4Ext?.product; if(pageProduct?.productData?.id){ contexts.push({ productId: pageProduct.productData.id, collectionIds: pageProduct.collections?.map(c => c.id) ?? [], }); } for(const block of document.querySelectorAll('.gbbPbProductBundleWrapper[data-block-product-id]')){ contexts.push({ productId: block.dataset.blockProductId, collectionIds: block.dataset.blockCollectionIds ? block.dataset.blockCollectionIds.split(',') : [], }); } return contexts; } function checkIfShouldImportSDKAssets(allSdkBundles){ try{ const matched = []; const contexts = getMatchContexts(); if(!contexts.length || !Array.isArray(allSdkBundles) || allSdkBundles.length <= 0){ return matched; } const matchesSurface = (surface, ctx) => { if((surface?.productIds ?? []).some(id => id == ctx.productId)){ return true; } if((surface?.collectionIds ?? []).some(cid => ctx.collectionIds.includes(cid))){ return true; } return false; }; const matchesContext = (bundle, ctx) => { if(bundle?.productId && bundle.productId == ctx.productId) return true; const cfg = bundle?.bundleUpsellConfig; if(!cfg) return false; return matchesSurface(cfg?.upsellConfiguration?.showOn, ctx) || matchesSurface(cfg?.widgetConfiguration?.showOn, ctx); }; for(const bundle of allSdkBundles){ if(bundle?.bundleStatus && bundle.bundleStatus !== 'ACTIVE') continue; if(contexts.some(ctx => matchesContext(bundle, ctx))) matched.push(bundle); } return matched; }catch(err){ debugConsole("error in checkIfShouldImportSDKAssets", err); return []; } } window.gbbExtEmbed.f.checkIfShouldImportSDKAssets = checkIfShouldImportSDKAssets; function loadAssetFiles(assets){ try{ assets.forEach(({ id, tag, attrs, onload }) => { if (!document.getElementById(id)) { const el = Object.assign(document.createElement(tag), { id, ...attrs }); const rewriteAssetUrl = window.__ebAssetUrlRewriter; // preview-only hook; undefined in prod → no-op if (rewriteAssetUrl) { if (el.src) el.src = rewriteAssetUrl(el.src); if (el.href) el.href = rewriteAssetUrl(el.href); } if (onload) el.onload = () => onload(el); document.head.appendChild(el); } }); }catch(err){ debugConsole("error in loadAssetFiles",err) } } // Theme assets hold only .min; unminified ships to S3/CloudFront. const STOREFRONT_CDN = 'https://d1712zxri13o2p.cloudfront.net'; const CDN_ENV = new URLSearchParams(location.search).get('env') === 'staging' ? 'staging' : 'production'; // All three SDKs nest under sdk//; keep in step with storefrontAssets.registry.js. const cdn = (dir, file) => `${STOREFRONT_CDN}/${dir}/${CDN_ENV}/active/${file}`; async function importAppEmbedAssets (loadUnminifiedFiles){ try{ const jsBaseUrl = loadUnminifiedFiles ? `${STOREFRONT_CDN}/app-embed/${CDN_ENV}/active/giftBoxLogicv1.js` : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-min.js'; const cssBaseUrl = loadUnminifiedFiles ? `${STOREFRONT_CDN}/app-embed/${CDN_ENV}/active/giftBoxv1.css` : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-min.css'; const assets = [ { id: 'gbbExt-bundle-embed-css', tag: 'link', attrs: { href: cssBaseUrl, rel: 'stylesheet', media: 'all' }, onload: (el) => el.media = 'all' }, { id: 'gbbExt-bundle-embed-js', tag: 'script', attrs: { src: jsBaseUrl, async: false } } ]; loadAssetFiles(assets); }catch(err){ debugConsole("error in importAppEmbedAssets",err) } } async function importMixAndMatchAssets (loadUnminifiedFiles){ try{ const customSettings = window.easybundles_ext_data?.userData?.customSettings ?? window.easybundle_user_ext_data?.customSettings ?? {}; const isAutoPlacementEnabled = customSettings?.isLoadMixAndMatchAssetsFromS3Enabled ?? false; if(!isAutoPlacementEnabled) return; const allMixAndMatchBundles = window.easybundles_ext_data?.mixAndMatchData ?? []; const shouldImportMixAndMatchAssets = checkIfShouldImportMixAndMatchAssets(allMixAndMatchBundles); if(!shouldImportMixAndMatchAssets) return; const baseURL = loadUnminifiedFiles ? `${STOREFRONT_CDN}/product-page-bundle/${CDN_ENV}/active/mixAndMatchBundle` : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-product-page-min'; const assets = [ { id: 'gbbMix-bundle-embed-css', tag: 'link', attrs: { href: baseURL + '.css', rel: 'stylesheet', media: 'all' }, onload: (el) => el.media = 'all' }, { id: 'gbbMix-bundle-embed-js', tag: 'script', attrs: { src: baseURL + '.js', async: false } } ]; loadAssetFiles(assets); }catch(err){ debugConsole("error in checkAndImportMixAndMatchScript",err) } } async function importFullPageAssets (loadUnminifiedFiles){ try{ const activeBundleData = window.easybundle_active_bundle_data ?? window.easybundle_full_page_ext_data; const customSettings = activeBundleData?.userData?.customSettings ?? window.easybundle_user_ext_data?.customSettings ?? {}; const isAutoPlaceFullPageBundleEnabled = customSettings && (customSettings?.isAutoPlaceFullPageBundleEnabled ?? true); if(!isAutoPlaceFullPageBundleEnabled) return; const forceCdn = isForceCdn(); if(forceCdn || !activeBundleData?.stepsConfigurationData || activeBundleData?.stepsConfigurationData?.errorMsg){ debugConsole(forceCdn ? "importFullPageAssets => gbbForceCdn flag set, fetching from backup S3" : "importFullPageAssets => bundleData metafield limit exceeded, fetching from backup S3"); const data = await getBundleDataFromS3(); if(!data || !data?.stepsConfigurationData){ debugConsole("error in importFullPageAssets => Failed to load the backup bundle data from s3."); return; } activeBundleData.stepsConfigurationData = data?.stepsConfigurationData; activeBundleData.discountsData = data?.discountsData; } // giftboxbuilderLogic self-loads jQuery (gbbUtils.f.loadJquery:137), so no prepend needed. const baseURL = loadUnminifiedFiles ? `${STOREFRONT_CDN}/full-page-bundle/${CDN_ENV}/active/giftboxbuilderLogic` : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-full-page-min'; const assets = [ { id: 'gbb-bundle-embed-css', tag: 'link', attrs: { href: baseURL + '.css', rel: 'stylesheet', media: 'all' }, onload: (el) => el.media = 'all' }, { id: 'gbb-bundle-embed-js', tag: 'script', attrs: { src: baseURL + '.js', async: false } } ]; loadAssetFiles(assets); }catch(err){ debugConsole("error in importFullPageAssets",err) } } const SDK_TEMPLATE_URLS = { PDP_INPAGE: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/inline-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/inline-bundle.min.css', js: cdn('product-page-templates/inline', 'inline-bundle.js'), css: cdn('product-page-templates/inline', 'inline-bundle.css') }, PDP_MODAL: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/expandable-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/expandable-bundle.min.css', js: cdn('product-page-templates/expandable', 'expandable-bundle.js'), css: cdn('product-page-templates/expandable', 'expandable-bundle.css') }, PDP_OVERLAY: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/overlay-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/overlay-bundle.min.css', js: cdn('product-page-templates/overlay', 'overlay-bundle.js'), css: cdn('product-page-templates/overlay', 'overlay-bundle.css') }, PDP_QUICK_SELECT: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/quick-select-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/quick-select-bundle.min.css', js: cdn('product-page-templates/quick-select', 'quick-select-bundle.js'), css: cdn('product-page-templates/quick-select', 'quick-select-bundle.css') }, FBP_SIDE_FOOTER: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/side-footer-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/side-footer-bundle.min.css', js: cdn('full-page-templates/sideFooter', 'side-footer-bundle.js'), css: cdn('full-page-templates/sideFooter', 'side-footer-bundle.css') }, PB_CLASSIC_INLINE: { jsMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/inset-bundle.min.js', cssMin: 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/inset-bundle.min.css', js: cdn('product-bundle-templates/inset', 'inset-bundle.js'), css: cdn('product-bundle-templates/inset', 'inset-bundle.css') }, CUSTOM_TEMPLATE: { jsMin: `https://d1712zxri13o2p.cloudfront.net/customTemplates/${window.Shopify.shop}/###TEMPLATE_ID###/bundle.js`, cssMin: `https://d1712zxri13o2p.cloudfront.net/customTemplates/${window.Shopify.shop}/###TEMPLATE_ID###/bundle.css`, js: `https://d1712zxri13o2p.cloudfront.net/customTemplates/${window.Shopify.shop}/###TEMPLATE_ID###/bundle.js`, css: `https://d1712zxri13o2p.cloudfront.net/customTemplates/${window.Shopify.shop}/###TEMPLATE_ID###/bundle.css` } }; window.SDK_TEMPLATE_URLS = {...(window.SDK_TEMPLATE_URLS ?? {}), ...SDK_TEMPLATE_URLS}; // async:false preserves SDK-before-template order; template-keyed ids let types coexist. async function importSDKAssets(bundleContext, loadUnminifiedFiles){ try{ const parentProductData = window.shopifyLiquidValuesApp4Ext?.product?.bundleProductConfiguration; const offerId = bundleContext?.offerId ?? parentProductData?.offerId; const bundleDesignTemplate = bundleContext?.bundleDesignTemplate ?? parentProductData?.bundleDesignTemplate; const templateId = bundleContext?.templateId ?? parentProductData?.templateId; const bundleType = bundleContext?.bundleType ?? parentProductData?.bundleType; if(!offerId){ debugConsole("importSDKAssets: no offerId found in product metafield"); return; } const templateConfig = SDK_TEMPLATE_URLS[bundleDesignTemplate]; if(!templateConfig){ debugConsole("importSDKAssets: no template registered for bundleDesignTemplate", bundleDesignTemplate); return; } let templateJs = loadUnminifiedFiles ? templateConfig.js : templateConfig.jsMin; let templateCss = loadUnminifiedFiles ? templateConfig.css : templateConfig.cssMin; if (bundleDesignTemplate === 'CUSTOM_TEMPLATE') { if (!templateId) { debugConsole("importSDKAssets: CUSTOM_TEMPLATE selected but no templateId in product metafield"); return; } templateJs = templateJs.replace('###TEMPLATE_ID###', templateId); templateCss = templateCss.replace('###TEMPLATE_ID###', templateId); } // First matching rule wins; last is the default (mix SDK). const SDK_RUNTIME_RULES = [ { match: (type) => (type || '').includes('PRODUCT_BUNDLE'), id: 'gbb-precurated-sdk-js', url: loadUnminifiedFiles ? cdn('sdk/pb-sdk', 'easy-bundle-pb-sdk.js') : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-pb-sdk.min.js' }, { match: () => true, id: 'gbb-sdk-js', url: loadUnminifiedFiles ? cdn('sdk/eb-sdk', 'easy-bundle-sdk.js') : 'https://cdn.shopify.com/extensions/01a11b87-4cd9-7cba-9aaf-08089f280707/gift-box-builder-1-478/assets/easy-bundle-sdk.min.js' } ]; const sdkRuntime = SDK_RUNTIME_RULES.find((rule) => rule.match(bundleType)); const assets = [ { id: 'gbb-sdk-template-css-' + bundleDesignTemplate, tag: 'link', attrs: { href: templateCss, rel: 'stylesheet', media: 'all', className: 'gbb-sdk-template-css' }, onload: (el) => el.media = 'all' }, { id: sdkRuntime.id, tag: 'script', attrs: { src: sdkRuntime.url, async: false } }, { id: 'gbb-sdk-template-js-' + bundleDesignTemplate, tag: 'script', attrs: { src: templateJs, async: false } } ]; loadAssetFiles(assets); }catch(err){ debugConsole("error in importSDKAssets",err) } } window.gbbExtEmbed.f.importSDKAssets = importSDKAssets; function importAssets(isDevMode){ const customSettings = window.easybundles_ext_data?.userData?.customSettings ?? window.easybundle_active_bundle_data?.userData?.customSettings ?? {}; const loadUnminifiedFiles = isDevMode || (customSettings.loadUnminifiedStorefrontFiles ?? false); const bundleConfig = window.shopifyLiquidValuesApp4Ext?.product?.bundleProductConfiguration; const bundleKey = bundleConfig?.appLevelMetafieldKey || ''; const keyPrefix = bundleKey.split('-')[0]; const seenTemplates = new Set(); if (keyPrefix === 'SDK') { importSDKAssets(undefined, loadUnminifiedFiles); if (bundleConfig?.bundleDesignTemplate) { seenTemplates.add(bundleConfig.bundleDesignTemplate); } } else if(keyPrefix === 'PB'){ importSDKAssets(undefined, loadUnminifiedFiles); if (bundleConfig?.bundleDesignTemplate) { seenTemplates.add(bundleConfig.bundleDesignTemplate); } } else { importMixAndMatchAssets(loadUnminifiedFiles); importFullPageAssets(loadUnminifiedFiles); } // The SDK runtime is a singleton; per-offer state lives on gbbSdkTemplate.bundles. const matchedSdkUpsells = window.easybundles_ext_data?.matchedSdkUpsells ?? {}; for(const entry of Object.values(matchedSdkUpsells)){ if(!entry?.bundleDesignTemplate) continue; if(seenTemplates.has(entry.bundleDesignTemplate)) continue; seenTemplates.add(entry.bundleDesignTemplate); importSDKAssets(entry, loadUnminifiedFiles); } // Block-seeded bundles: routing is in the seeded data, so no DOM marker is needed. const blockBundles = window.easybundle_pb_block_bundles ?? {}; for (const [offerId, bundleData] of Object.entries(blockBundles)) { const bundleDesignTemplate = bundleData?.bundleDesignTemplate; if (!bundleDesignTemplate || seenTemplates.has(bundleDesignTemplate)) continue; seenTemplates.add(bundleDesignTemplate); importSDKAssets({ offerId: offerId, bundleType: 'PRODUCT_BUNDLE', bundleDesignTemplate: bundleDesignTemplate, templateId: bundleData?.bundleDesignTemplateData?.templateId, }, loadUnminifiedFiles); } importAppEmbedAssets(loadUnminifiedFiles); } // Must write recovered globals BEFORE importAssets loads the JS that reads them. async function resolveOverflows(){ const bundleConfig = window.shopifyLiquidValuesApp4Ext?.product?.bundleProductConfiguration; const recomputedFromCDN = await resolveUpsellIndexAndMatches(bundleConfig); const fetches = []; queueParentSdkConfigFetchIfOverflowed(fetches, bundleConfig); queueMatchedUpsellBundleDataFetches(fetches, recomputedFromCDN); queueBlockBundleDataFetches(fetches); if (fetches.length === 0) return; debugConsole("resolveOverflows => " + fetches.length + " parallel fetch(es)"); await Promise.all(fetches); } async function resolveUpsellIndexAndMatches(bundleConfig){ const upsellIndexRaw = window.__gbbOverflow?.upsellIndexRaw; const forceCdn = isForceCdn(); let upsellIndex = null; if (forceCdn || isOverflowed(upsellIndexRaw)) { debugConsole(forceCdn ? "resolveOverflows => gbbForceCdn flag set, fetching upsell index from CDN" : "resolveOverflows => upsell index overflowed, fetching from CDN"); upsellIndex = await getUpsellIndexFromCDN(); } else if (Array.isArray(upsellIndexRaw) && !window.easybundles_ext_data?.matchedSdkUpsells) { debugConsole("resolveOverflows => matchedSdkUpsells missing (likely ext_data overflow), recomputing from inline index"); upsellIndex = upsellIndexRaw; } if (!Array.isArray(upsellIndex)) return false; // Empty shell survives ext_data overflow: getSettings recovery Object.assigns onto it. window.easybundles_ext_data = window.easybundles_ext_data || {}; window.easybundles_ext_data.sdkBundleUpsellIndex = upsellIndex; const parentOfferId = bundleConfig?.offerId; const matchedMap = {}; for (const bundle of checkIfShouldImportSDKAssets(upsellIndex)) { if (!bundle?.offerId) continue; if (bundle.offerId === parentOfferId) continue; matchedMap[bundle.offerId] = bundle; } window.easybundles_ext_data.matchedSdkUpsells = matchedMap; return true; } function queueParentSdkConfigFetchIfOverflowed(fetches, bundleConfig){ const keyPrefix = (bundleConfig?.appLevelMetafieldKey || '').split('-')[0]; const keys = ["SDK", "PB"]; if (!keys.includes(keyPrefix)) return; if (!isForceCdn() && !isOverflowed(window.easybundle_active_bundle_data?._bundleData)) return; fetches.push( getSdkBundleDataFromCDN(bundleConfig?.offerId).then(function(fresh){ if (fresh && window.easybundle_active_bundle_data) { window.easybundle_active_bundle_data._bundleData = fresh; } }) ); } // Overflowed block bundles land as an { errorMsg } sentinel; same CDN recovery. function queueBlockBundleDataFetches(fetches){ const blockBundles = window.easybundle_pb_block_bundles ?? {}; const forceCdn = isForceCdn(); for (const [offerId, bundleData] of Object.entries(blockBundles)) { if (!isOverflowed(bundleData) && !forceCdn) continue; fetches.push( getSdkBundleDataFromCDN(offerId).then(function(fresh){ if (!fresh) return; // matchedForProductId is stamped on the seeded blob, not the CDN document; carry it across. window.easybundle_pb_block_bundles[offerId] = bundleData?.matchedForProductId != null ? Object.assign(fresh, { matchedForProductId: bundleData.matchedForProductId }) : fresh; }) ); } } function queueMatchedUpsellBundleDataFetches(fetches, recomputedFromCDN){ const matchedSdkUpsells = window.easybundles_ext_data?.matchedSdkUpsells ?? {}; const shouldHaveBundleData = window.easybundles_ext_data?.userFlags?.shouldGetBundleDataForWidgets !== false; const forceCdn = isForceCdn(); for (const [offerId, entry] of Object.entries(matchedSdkUpsells)) { const isSentinel = isOverflowed(entry?.bundleData); const isMissingAfterRecompute = recomputedFromCDN && shouldHaveBundleData && !entry?.bundleData; if (!isSentinel && !isMissingAfterRecompute && !forceCdn) continue; fetches.push( getSdkBundleDataFromCDN(offerId).then(function(fresh){ if (fresh) matchedSdkUpsells[offerId].bundleData = fresh; }) ); } } async function armPreviewIfRequested(urlParams){ const previewToken = urlParams.get('ebPreview'); if (!previewToken || !/^pr-\d+-[a-f0-9]{12}$/.test(previewToken)) return; let abortTimeout; try { const abortController = new AbortController(); abortTimeout = setTimeout(function(){ abortController.abort(); }, 5000); const bootUrl = 'https://d1712zxri13o2p.cloudfront.net/previews/preview-boot.min.js'; const response = await fetch(bootUrl, { signal: abortController.signal }); if (response.ok) await new Function('previewToken', await response.text())(previewToken); } catch (err) { debugConsole("preview boot failed", err); } finally { if (abortTimeout) clearTimeout(abortTimeout); } } // Phase order: initializeShopifyValues → resolveOverflows → importAssets. async function initialize(){ const urlParams = new URLSearchParams(window.location.search); const isDevMode = urlParams.get('dev') == 'true'; const isDebugMode = urlParams.get('debug') == 'true'; if (isDebugMode) { debugger; } initializeShopifyValues(); await resolveOverflows(); importAssets(isDevMode); } initialize(); })();