Bolder — Components Reference
Auto-generated on 2026-07-07 · 70 modules · 47 components · JS API guide
Cart
Requires the customer to check a terms-and-conditions checkbox before the cart submit button is enabled.
Options
termsUrl | URL to the terms page |
message | Introductory label text |
linkText | Anchor text for the terms link |
container | CSS selector for the cart container |
Example
Bootic.load('AcceptTerms', {
termsUrl: '/pages/terminos',
container: '.bootic_cart'
})
Manages the dynamic add-to-cart button state, including quantity increase/decrease controls, stock limit enforcement, volume discount notices, and quote flow support.
Options
productId | ID of the product to manage |
formSelector | CSS selector for add_to_cart forms (default: `.add_to_cart`) |
Example
Bootic.load('AddToCartButton', {
formSelector: '.add_to_cart'
})
add_to_cart_loader auto
Scans the page for product forms marked with `data-add-to-cart` and initialises the appropriate add-to-cart component (button, dynamic variant selector, or options panel) based on each form's data attributes.
Options
container | Root element to scan (default: `document.body`) |
productItemSelector | CSS selector for individual product items |
Example
Bootic.load('AddToCartLoader', {
container: '.products'
})
Shows a slide-out drawer or inline panel for products that require variant selection before adding to cart (e.g. products with size or color options). Loads the product form dynamically and handles variant selection and quantity.
Options
productUrl | URL to fetch the product options form from |
container | CSS selector or element to render the options panel into |
Smoothly animates a numeric counter from its current value to a new target value with an easing effect. This module is called programmatically via `Bootic.call` rather than configured with options.
Example
Bootic.require('AnimateNumber', function(err, anim) {
anim.to(el, 42)
})
Displays a cart preview modal or slide-out panel when a product is added to the cart. Renders the live cart contents including line items, totals, and a checkout link.
Options
showOnAdd | Open the modal automatically after adding a product (default: true) |
triggerSelector | CSS selector for elements that open the cart modal on click |
Presents a contact form modal so a customer can request a formal quote for the current cart contents instead of placing a direct order.
Options
formUrl | URL of the quote request endpoint |
triggerSelector | CSS selector for the button that opens the quote form |
Example
Bootic.load('CartQuote', {
formUrl: '/orders/quote',
triggerSelector: '.request-quote'
})
Exposes shop-configured order requirements to other modules that need to look one up directly — currently just AddToCartButton, which caps a product's quantity stepper against a matching max_units_per_product requirement before it's ever added to the cart. Cart-page validation (disabling checkout, showing which requirements aren't met) is no longer done here: it's now declarative, computed by cart-decorator.js/cart-rules.js (the shared core module) inside cart-table-v3's beforeUpdate() and dynamic_cart_table.js's renderCart(), and rendered directly by the cart-table templates — see cart_action_buttons in cart-table-v3/template.qiq and cart-table/template.qiq.
Options
requirements | Shop's configured order requirements (widgets.cart_requirements) |
Example
Bootic.load('CartRules', { requirements: [...] })
Sends cart event data (add, remove, checkout) to the Bootic tracking endpoint for analytics and remarketing purposes. No user-facing options required.
Example
Bootic.load('CartTracking', {
})
Updates item quantities in the cart in real time via AJAX without a page reload. Attaches increment/decrement controls to quantity inputs and syncs with the cart API. Emits cart update events that other modules (CartModal, CartBadge) can listen to.
Upgrades static add-to-cart forms to dynamic AJAX buttons that add items without a page reload, updating button state to reflect in-cart status.
Options
formSelector | CSS selector for cart forms (default: `.add_to_cart`) |
requireDeliverySetup | Prompt for delivery address before adding (default: false) |
Example
Bootic.load('DynamicCartButtons', {
formSelector: '.add_to_cart'
})
Renders and keeps the cart table in sync with live cart state. Handles quantity changes, item removal, promo codes, shipping estimates, and related product suggestions.
Options
containerId | ID of the cart table wrapper (default: `dynamic-cart-table`) |
showRelated | Show related product suggestions (default: false) |
Example
Bootic.load('DynamicCartTable', {
containerId: 'dynamic-cart-table'
})
Updates displayed prices, comparison prices, and stock status in real time when variant or quantity selections change. Also handles volume discount tier displays.
Options
productContainer | CSS selector wrapping each product (default: `.product`) |
showComparisonPrice | Show strikethrough comparison price (default: true) |
Example
Bootic.load('DynamicPrices', {
productContainer: '.product'
})
Adds increase/decrease quantity controls to in-cart item rows, updating totals live via the Cart API without a page reload.
Options
formSelector | CSS selector for cart item forms (default: `.add_to_cart`) |
Example
Bootic.load('DynamicQuantityButtons', {
})
Products
Updates price, availability status, and images in real time when a customer selects a product variant (size, color, etc.). Reads variant data from the product JSON endpoint and applies changes to the surrounding product form without a page reload.
Options
productId | The product ID to load variant data for |
variantSelector | CSS selector for the variant option inputs |
priceSelector | CSS selector for the price display element |
updateImages | Swap to the variant's image on selection (default: true) |
Lets customers save products to a favourites list, storing them locally or server-side when logged in, and toggles heart/star icons on product cards accordingly. When a logged-in session starts, locally-stored favourites are synced to the server automatically.
Options
mainContainer | Products wrapper selector whose children are scanned for product cards (default: `.products`) |
requireLogin | Show a login prompt before saving a favourite when the customer is not logged in (default: true) |
Example
Bootic.load('Favorites', {
mainContainer: '.products',
requireLogin: false
})
Initialises a touch-friendly image slideshow (powered by Siema) for product image lists. Supports auto-play, previous/next controls, optional dot navigation, and add-to-cart integration.
Options
container | The gallery element to activate |
autoplay | Auto-advance slides (default: false) |
autoplayInterval | Milliseconds between auto-advance steps (default: 7000) |
minItems | Minimum number of slides required before activating the gallery (default: 1) |
Example
Bootic.load('ImageGallery', {
selector: '.product-images',
autoplay: true
})
Adds a CSS zoom effect to a product image on hover or touch, loading a higher-resolution version. An optional magnifier mode (WebGL) can be enabled via the `mode` option.
Options
imageElement | The img element to make zoomable |
bigImage | URL of the high-resolution image to display when zooming (defaults to the parent anchor's href) |
Example
Bootic.load('ImageZoom', {
imageElement: document.getElementById('main-img'),
bigImage: '{{ product.image | resize: "1000x" }}'
})
Shows a modal form where customers can subscribe to receive an email notification when an out-of-stock product is restocked. Optionally fetches and displays the product's variant list in the form.
Options
linkSelector | CSS selector for the trigger button(s) that open the modal (default: `[data-notify-restocked]`) |
includeVariants | Fetch and display a variant selector inside the subscription form (default: false) |
Example
Bootic.load('NotifyRestocked', {
linkSelector: '.notify-btn',
includeVariants: true
})
Lets customers select 2–4 products to compare side by side, rendering a checkbox on each product card and navigating to the comparison page once enough products are chosen. Products of different types cannot be mixed in the same comparison.
Options
mainContainer | Products wrapper selector (default: `.products`) |
maxComparable | Maximum number of products that can be selected for comparison (default: 4) |
Example
Bootic.load('ProductComparisonPicker', {
mainContainer: '.products',
maxComparable: 3
})
Handles faceted product filtering: listens for changes on filter form inputs and selects, then submits the form via AJAX and replaces the product list without a full page reload, optionally updating the browser URL.
Options
formSelector | CSS selector for the filter form element |
resultsContainer | CSS selector for the element where AJAX results are injected |
Example
Bootic.load('ProductFilters', {
formSelector: '#product-filters',
resultsContainer: '#search-results'
})
Manages the main product image viewer: clicking a thumbnail swaps the main image with a fade/spinner transition, and optionally activates zoom on the displayed image.
Options
mainContainer | Wrapper selector that contains both the main image and thumbnails (default: `.product-images`) |
bigImageContainer | Selector for the main image anchor element (default: `.main-image`) |
thumbSelector | Selector for thumbnail link elements (default: `.product-image`) |
enableZoom | Enable image zoom; pass `'magnifier'` for WebGL magnifier mode (default: false) |
Example
<div class="product-images">
<!-- main-image's href will be the image used for zooming -->
<!-- nested img's src is the "small" one that is shown without zoom -->
{% for image in product.images limit:1 %}
<a class="main-image" href="{{ image | resize: '1000x' }}">
<img src="{{ image | resize: '690x' }}" alt="{{ product.model }}" />
</a>
{% endfor %}
{% if product.image_count > 1 %}
<ul class="image-thumbs">
{% for image in product.images %}
<li>
<a class="product-image{% for v in image.variants %} image-for-variant-{{ v.id }}{% endfor %}" title="{{ product.model }}"
href="{{ image | resize: '1000x' }}" data-show-img="{{ image | resize: '690x' }}">
<img src="{{ image.thumbnail }}" alt="{{ product.model }}" />
</a>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
Bootic.load('ProductImages', {
mainContainer: '.product-images',
bigImageContainer: '.main-image',
thumbSelector: '.product-image',
enableZoom: true
})
// and optionally, we can load the VariantImages module
// we need to make sure the thumbSelector in both modules
// match, and that those nodes contain the 'image-for-variant-xxx' class
Bootic.load('VariantImages', {
imageSelector: '.product-image' // should match the one above
})
Opens a product detail page inside a modal overlay when a product link is clicked, keeping the customer on the listing page and setting a URL hash for shareability.
Options
selector | CSS selector for product links that trigger the modal (default: `.product-link`) |
container | Parent selector used to scope link event delegation (default: document.body) |
Example
Bootic.load('ProductModal', {
selector: '.product-link',
container: '.products'
})
Fetches and displays active promotion details (discount conditions, savings amount, and related product groups) for the products currently in view, updating dynamically as the cart changes.
Options
container | Element containing the promotion card markup to scan and initialise |
Example
Bootic.load('ProductPromotions', {
container: document.querySelector('.product')
})
Opens a modal listing products that qualify for a volume discount or matching bundle, letting customers browse and add items directly from the overlay.
Options
selector | CSS selector for the trigger elements |
matchMethod | Method used to match products (required) |
Example
Bootic.load('ProductsListModal', {
selector: '.view-bundle-products',
matchMethod: 'volume_discount'
})
Switches the displayed product images when the customer selects a different variant (size, colour, etc.), highlighting images tagged with the chosen variant's ID. Also triggers a click on the matching thumbnail so the main image viewer updates when ProductImages is active.
Options
container | Root element to scan for variant inputs and images (default: document.body) |
variantsContainer | CSS selector for the variant inputs wrapper (default: `.cart_variants`) |
imageSelector | CSS selector for product image elements (default: `.product-image`) |
Example
Bootic.load('VariantImages', {
container: '.product',
imageSelector: '.product-image'
})
Checkout
Enhances an address text input with Google Places-powered autocomplete suggestions, auto-filling region and locality fields on selection.
Options
input | The address input element |
country | ISO country code to bias results, e.g. `"CL"` |
onChange | Callback receiving the parsed address components |
Example
Bootic.load('AddressAutocomplete', {
input: document.querySelector('#address'),
country: 'CL'
})
Populates region and locality `<select>` fields from the delivery API based on the selected country code.
Options
regionSelect | The region select element |
localitySelect | The locality select element |
countryCode | ISO country code (default: `"CL"`) |
Example
Bootic.load('AddressFields', {
regionSelect: document.querySelector('#region'),
localitySelect: document.querySelector('#locality')
})
Combines customer authentication and delivery address selection into a single unified flow component, mounting automatically into a managed container.
Example
Bootic.load('AuthDelivery', {})
Shows a modal listing available store locations so the customer can select a branch for pickup or delivery.
Options
triggerSelector | CSS selector for the trigger button |
changeBranchMessage | Heading text inside the modal |
Example
Bootic.load('ChooseBranchModal', {
triggerSelector: '.choose-branch'
})
Opens a modal that guides the customer through selecting their delivery method (shipping or pickup) and address before adding items to the cart.
Options
showAutomatically | Open on first visit (default: false) |
triggerSelector | CSS selector for manual trigger links |
Example
Bootic.load('DeliverySetup', {
showAutomatically: true
})
Formats and validates Chilean RUT (tax ID) inputs in real time as the customer types, automatically applying dots and a dash in the correct positions.
Options
inputSelector | CSS selector for RUT input fields (default: input[data-rut]) |
Example
Bootic.load('RutFormatter', { inputSelector: 'input.rut-field' })
Opens the shipping calculator component in a modal so the customer can estimate shipping costs before checkout.
Options
triggerSelector | CSS selector for the "calculate shipping" link |
country | Default country code |
Example
Bootic.load('ShippingCosts', {
triggerSelector: '.shipping-costs-link'
})
Search
Live product search with autocomplete and instant results. Displays matching products, collections, and tags as the user types. Can show product images, prices, SKUs, and inline add-to-cart buttons.
Options
withImages | Show product thumbnail in results (default: false) |
withPrices | Show product price in results (default: false) |
withSkus | Show variant SKU in results (default: false) |
withAddToCart | Show add-to-cart button in results (default: false) |
showAutocomplete | Enable autocomplete suggestion above results (default: false) |
inputSelector | CSS selector for the search input element |
container | Where to render the results list |
UI
beta_mode auto
Manages beta user mode in the storefront. - Injects a dismissible "Beta" ribbon badge in the top-left corner when beta mode is active. - Wires `data-toggle-beta` elements for toggling beta mode on/off via AJAX. - Shows toast notifications confirming the change.
Example
<a href="/beta/toggle" data-toggle-beta>Toggle Beta</a>
Detects exit-intent behaviour (mouse leaving the viewport towards the top) and invokes a callback, useful for triggering a last-chance offer or modal.
Options
callback | Function to call when exit intent is detected |
sensitivity | Vertical pixel threshold for detection (default: 20) |
delay | Milliseconds to wait before activating the listener (default: 0) |
cookieDays | Days to suppress the callback after first trigger (default: 7) |
Example
Bootic.load('Bounce', {
callback: function() { Bootic.load('WelcomeModal', { always_show: true }) },
delay: 3000,
cookieDays: 3
})
Displays a live countdown to a target date/time, updating days, hours, minutes, and seconds every second. Optionally shows a "finished" message when the countdown reaches zero.
Options
selector | CSS selector for countdown elements (default: `.countdown`) |
container | Root element to scope selector |
time | ISO date string for the target time, overrides `data-time` attribute |
Example
Bootic.load('CountdownTimer', {
selector: '.countdown',
container: '#content'
})
Shows a floating product-card preview when the customer hovers over a product link, fetching and rendering the product component inline.
Options
container | Root element to scan for links |
selector | CSS selector for product links |
Example
Bootic.load('LinkPreview', {
container: '.products',
selector: '.product-link'
})
Loads and plays Lottie JSON animations on page elements, supporting event-triggered playback (hover, click, scroll).
Options
selector | CSS selector for animation containers (default: `[data-animation]`) |
animateOn | Trigger event: `"hover"`, `"click"`, or `"scroll"` |
Example
Bootic.load('LottieAnimations', {
selector: '.lottie'
})
Map integration — embed Leaflet or Google Maps for address input and delivery zone display. Access via: Bootic.call('Map', 'init', opts, callback)
Modal dialogs — create and manage overlay popups. Access via: Bootic.call('Modal', 'methodName', args, callback)
Top-of-page notification bar — display and listen for page-level notices. Access via: Bootic.call('Notice', 'methodName', args, callback)
Intercepts clicks on internal page links (collections, pages, tags) and loads the target page inside a modal overlay instead of navigating away.
Options
linkSelector | CSS selector for intercepted links (default: `[data-page-modal]`) |
Example
Bootic.load('PageModal', {
linkSelector: '[data-page-modal]'
})
promo_notice auto
Displays an inline promotion notice (applied discounts and free shipping status) in a designated banner element whenever the cart is updated.
Options
templateId | ID of the Liquid template used to render the notice (default: bootic-top-promo-template) |
Example
Bootic.load('PromoNotice', {})
promo_toasts auto
Shows toast notifications when promotions are applied to or removed from the cart, displaying the discount name and amount saved.
Example
Bootic.load('PromoToasts', {})
Renders a styled price-range slider input for filter forms.
Options
inputSelector | CSS selector for the range input elements |
min | Minimum value |
max | Maximum value |
Example
Bootic.load('RangeSlider', {
inputSelector: 'input[type=range]'
})
Renders a spin-the-wheel prize game with configurable prize tiers, probabilities, and coupon code rewards.
Options
items | Prize items, each with `label`, `probability`, and optional `coupon_code` and `coupon_label` |
triggerSelector | CSS selector for the spin trigger button |
Example
Bootic.load('SpinWheel', {
items: [{ probability: 30, label: '10% OFF', coupon_code: '10OFF' }, { probability: 70, label: 'Mejor suerte la próxima' }]
})
Cycles through a list of text messages in a container, fading each in and out on a configurable interval.
Options
container | CSS selector for the ticker element |
messages | List of strings to cycle through |
wait | Seconds between messages (default: 6) |
includeEmpty | Include a pause with empty text (default: false) |
Example
Bootic.load('Ticker', {
container: '.news-ticker',
messages: ['Free shipping on orders over $50!', 'New arrivals every week']
})
Toast notifications — brief, auto-dismissing alerts in a corner of the page. Access via: Bootic.call('Toasts', 'show', opts)
Fetches an arbitrary internal URL and renders its content inside a modal overlay.
Options
linkSelector | CSS selector for trigger links (default: `.show-promos-link`) |
url | URL to load inside the modal |
Example
Bootic.load('ViewModal', {
linkSelector: '.show-promos-link'
})
Shows a welcome pop-up modal on first visit (using a cookie to avoid repeat displays), optionally including a newsletter subscribe form or promotional image and message.
Options
show_subscribe_form | Show a newsletter subscription form in the modal (default: false) |
subscribe_form_tag | Liquid form tag name to render inside the modal |
delay | Seconds to wait before showing the modal (default: 3) |
always_show | Show on every visit regardless of cookie (default: false) |
Example
Bootic.load('WelcomeModal', {
show_subscribe_form: true,
subscribe_form_tag: 'subscribe_form',
delay: 5
})
User
Renders a customer registration / sign-in form component inside a specified container, handling submission, validation errors, and post-login redirects.
Options
formContainer | CSS selector for the container to render the form into |
formUrl | URL to submit the registration form to |
Example
Bootic.load('UserSignup', {
formContainer: '#signup-container',
formUrl: '/customer/register'
})
Misc
Loads the next page of products or blog posts via AJAX and appends them to the current page without a full reload. Works with both numbered pagination and "load more" style buttons.
Options
container | CSS selector for the element to append results into |
paginationSelector | CSS selector for the pagination links wrapper |
async_partial auto
Fetches a Liquid template partial asynchronously via AJAX and injects its HTML into a target element, with optional timezone-aware scheduling and query-param forwarding.
Options
name | Name of the partial template to fetch |
target | CSS selector for the container to inject content into |
params | Query parameters to pass to the partial endpoint |
currentParams | Forward the current page's query string to the partial (default: false) |
Example
Bootic.load('AsyncPartial', {
name: 'promotions',
target: '#promo-container'
})
Provides a consolidated API for the Buyer/Customer Console UI
Renders a floating contact widget with links to WhatsApp, email, phone, Telegram, Twitter, and other configured channels.
Options
twitter | Twitter handle |
facebook | Facebook page ID |
telegram | Telegram username |
email | Contact email address |
sms | SMS phone number |
call | Click-to-call phone number |
Example
Bootic.load('ContactWidget', {
email: 'hola@tienda.com',
call: '+56912345678',
telegram: 'mitienda'
})
Loads and displays customer comments and a feedback form for the current page, connecting to the Bootic comments service.
Options
container | CSS selector for the feedback container |
templateId | ID of the Liquid template used to render comments (default: `feedback-template`) |
Example
Bootic.load('Feedback', {
container: '#comments'
})
lazyload auto
Defers loading of images and iframes until they scroll near the viewport, replacing `data-src` with `src` using IntersectionObserver.
Options
selector | CSS selector for lazy elements (default: `.lazy`) |
container | Root container (default: `document`) |
rootMargin | IntersectionObserver root margin (default: `"0px"`) |
Example
Bootic.load('Lazyload', {
selector: '.lazy'
})
native_client auto
Bridges the web storefront with Bootic's native mobile app WebView by detecting the Capacitor runtime and adding platform-specific CSS classes to the body element.
Example
Bootic.load('NativeClient', {})
Embeds a PDF file viewer inside the page using a PDF.js-based renderer. Sets minimum dimensions on the container if needed.
Options
pdfUrl | URL of the PDF file to display |
container | CSS selector for the viewer container element |
Example
Bootic.load('PdfViewer', {
pdfUrl: '/assets/catalogue.pdf',
container: '#pdf-viewer'
})
Renders an interactive Google Map with markers for each store branch location. Requires branches to have latitude/longitude coordinates set.
Options
container | CSS selector for the map container element |
places | Array of branch objects with address.latlong coordinates |
Example
Bootic.load('PlacesMap', {
container: '#store-map',
places: {{ shop.branches | json }}
})
Sends an anonymous shop-visit beacon to Bootic analytics on every page load. No configuration required.
Example
Bootic.load('ShopVisits', {})
Initialises embedded video players supporting direct video files and HLS (.m3u8) streams found in page content.
Options
selector | CSS selector for video elements to initialise (default: 'video') |
container | CSS selector or element scoping the search for video elements |
Example
Bootic.load('StreamingVideos', { container: '.product-description' })
Components
Custom Elements and Vue components. base components are bundled. on demand components load only when their element appears in the page.
add-to-cart-qiq base
Renders the add-to-cart form with variant selectors and quantity controls using a QiQ template. Supports product bundles, modifiers, subscription fees, volume discounts, and dynamic variant selection.
Options
product_id | ID of the product to render the form for |
button_type | Visual style of the add-to-cart button (e.g. 'normal', 'icon') |
with_variants | Whether to display variant selectors (default: false) |
available_variant_id | ID of the pre-selected available variant |
Example
Bootic.components.render('add-to-cart', containerEl, {
product_id: 123,
button_type: 'normal',
with_variants: true,
available_variant_id: 456
}, function(node) { ... })
age-verification on demand
Renders a full-screen age verification gate that requires visitors to confirm they are of legal age before accessing the store. On confirmation the gate fades out after a brief success message; on denial it displays a rejection message with a redirect button.
Options
logoUrl | URL of the store logo displayed on the gate (default: '') |
logoAlt | Alt text for the store logo (default: 'Logo') |
question | Age-check question shown to the visitor (default: '¿Eres mayor de edad?') |
yesButtonText | Label for the confirm/yes button (default: 'Sí') |
noButtonText | Label for the deny/no button (default: 'No') |
bottomText | Fine-print text shown beneath the buttons (default: 'Para ingresar a nuestro sitio...') |
termsText | Clickable terms-and-conditions link text (default: 'términos y condiciones') |
termsLink | URL for the terms-and-conditions page (default: undefined) |
primaryColor | Accent colour used for buttons and highlights (default: '#ff4000') |
darkMode | Enable dark colour scheme (default: false) |
successTitle | Heading shown after the visitor confirms their age (default: '¡Perfecto!') |
successMessage | Body text shown after confirmation (default: 'Bienvenido a nuestra tienda...') |
successDelay | Milliseconds to display the success screen before dismissing the gate (default: 1800) |
rejectionTitle | Heading shown when the visitor denies their age (default: '¡Ups! Eres muy joven aún') |
rejectionMessage | Body text shown on denial (default: 'Vuelve cuando seas mayor de edad...') |
redirectUrl | URL the visitor is sent to when they click the redirect button after denial (default: 'https://www.disney.com') |
redirectButtonText | Label for the redirect button shown on denial (default: 'Ir a Disney') |
onVerify | Callback invoked after the gate is dismissed; receives no arguments (default: no-op) |
Example
Bootic.components.render('age-verification', containerEl, {
logoUrl: 'https://myshop.com/logo.png',
logoAlt: 'My Shop',
primaryColor: '#c00000',
successDelay: 2000
}, function(node) { ... })
auth-delivery base
Renders the combined authentication and delivery address selection flow. Guides customers through login/account creation and then delivery method and address setup in a modal.
Options
welcomeTitle | Title displayed on the welcome/login step |
api | API methods for authentication and delivery (auth + delivery methods) |
validProviders | Names of OAuth providers to enable (e.g. ['google', 'facebook']) |
Example
Bootic.components.render('auth-delivery', containerEl, {
welcomeTitle: 'Welcome back!',
api: authAndDeliveryApi,
validProviders: ['google']
}, function(node) { ... })
biggy-slider on demand
Renders a full-width hero image/content slider using Swiper with autoplay, navigation arrows, and pagination dots support.
Options
autoplay | Auto-advance slides (default: false) |
interval | Milliseconds between slide transitions (default: 4000) |
loop | Loop from the last slide back to the first (default: true) |
Example
Bootic.components.render('biggy-slider', el, { autoplay: true, interval: 5000 })
Renders a product bundle option selector letting customers choose components or variants for each bundle slot. Validates that all required slots are filled and syncs selections back to the add-to-cart form.
Options
productId | ID of the bundle product |
options | Array of bundle option objects describing each slot and its available items |
Example
Bootic.components.render('bundle-option-configurator', containerEl, {
productId: 123,
options: bundleOptions
}, function(node) { ... })
cart-promos base
Renders available promotion codes and discount summaries within the cart. Displays an optional promo code input field and shows applied discounts.
Options
showApplyPromo | Show the promo code input field (default: true) |
Example
Bootic.components.render('cart-promos', containerEl, {
showApplyPromo: true
}, function(node) { ... })
cart-table base
Renders the full cart table with line items, quantity controls, item removal, subtotals, and a checkout button. Supports an optional progress gauge showing how far a customer is from a free-shipping threshold.
Options
show_cart_gauge | Show the free-shipping progress gauge (default: false) |
cart_gauge_limit | Cart total threshold for the free-shipping gauge |
hide_footer | Hide the cart footer with totals and checkout button (default: false) |
Example
Bootic.components.render('cart-table', containerEl, {
show_cart_gauge: true,
cart_gauge_limit: 50000,
hide_footer: false
}, function(node) { ... })
cart-table-v3 base
Renders an updated cart table layout (v3) with redesigned line items, optional cart gauge progress bar, and bundle/volume-discount action hints. Purely a renderer — doesn't wire its own clicks. Hosted themes wire it via DynamicCartTable; headless callers (e.g. ShoppingBeacon) wire it themselves after mounting.
Options
show_cart_gauge | Show a progress gauge towards a cart goal (default: false) |
cart_gauge_limit | Cart total amount that fills the gauge |
Example
Bootic.components.render('cart-table-v3', el, { show_cart_gauge: true, cart_gauge_limit: 50000 })
cart-table-view on demand
Renders a full standalone cart page view with all cart table functionality, suitable for embedding on a dedicated cart or checkout page.
Options
show_cart_gauge | Show a progress gauge towards a free-shipping goal (default: false) |
cart_gauge_limit | Cart subtotal amount that completes the gauge |
Example
Bootic.components.render('cart-table-view', el, { show_cart_gauge: true, cart_gauge_limit: 50000 })
cart-totals base
Renders the cart summary panel showing item subtotal, discounts, taxes, shipping costs, and the grand total, with an optional related-product suggestion row.
Options
show_suggestions | Show related product suggestions below the totals (default: false) |
Example
Bootic.components.render('cart-totals', el, { show_suggestions: true }, function(node) {})
contact-widget base
Renders a floating multi-channel contact widget with configurable links to WhatsApp, email, phone, Telegram, Twitter, and other channels.
Options
email | Contact email address |
call | Click-to-call phone number |
sms | SMS phone number |
telegram | Telegram username |
twitter | Twitter handle |
facebook | Facebook page ID |
Example
Bootic.components.render('contact-widget', el, {
email: 'hola@tienda.com',
call: '+56912345678'
})
cookie-consent on demand
Renders a cookie consent banner with accept and decline controls, storing the customer's choice in a cookie to avoid repeat displays.
Options
message | Consent message text |
acceptLabel | Label for the accept button (default: 'Accept') |
declineLabel | Label for the decline button (default: 'Decline') |
privacyUrl | URL of the privacy policy page |
Example
Bootic.components.render('cookie-consent', el, {
message: 'We use cookies to improve your experience.',
privacyUrl: '/pages/privacy'
})
countdown-timer base
Renders a live countdown clock displaying days, hours, minutes, and seconds until a target date/time, with a configurable finished message.
Options
startTime | ISO date string for the countdown target |
finishedMessage | Text to display when the countdown reaches zero |
Example
Bootic.components.render('countdown-timer', el, {
startTime: '2025-12-31T23:59:59',
finishedMessage: '¡Ya llegó!'
})
country-phone-input on demand
Renders a phone number input with an international country-code selector, auto-formatting the number based on the selected country's format rules.
Options
defaultCountry | ISO alpha-2 country code to pre-select (default: 'CL') |
value | Initial phone number value |
Example
Bootic.components.render('country-phone-input', el, { defaultCountry: 'MX' })
customer-console on demand
Renders a developer console panel for inspecting customer account data, cart state, and order history (intended for store admin or debugging use).
Example
Bootic.components.render('customer-console', el, {})
delivery-setup base
Renders the delivery method and address selection flow, supporting both shipping and pickup options with locality search and optional map display.
Options
delivery | Delivery API object with getShippingOptions and related methods |
showMap | Show a map for pickup branch selection (default: false) |
Example
Bootic.components.render('delivery-setup', el, { delivery: deliveryApi })
delivery-setup-v2 base
Headless delivery-setup modal. Mounts DeliverySetup inside a managed overlay and exposes open()/close(). Each open() call creates a fresh modal; close() or backdrop-click dismisses it.
Example
var deliverySetup = DeliverySetupV2Factory({}, shared)
deliverySetup.open()
faceted-search on demand
Renders a full faceted search interface with filter checkboxes by tag, type, vendor, and price range, fetching updated results via AJAX on each filter change.
Options
formAction | Search endpoint URL (default: '/search') |
filters | Initial filter state object |
resultsContainer | CSS selector where results are injected |
Example
Bootic.components.render('faceted-search', el, {
formAction: '/search',
resultsContainer: '#search-results'
})
feedback-button base
Renders a floating feedback/help button that opens the Help Scout Beacon or a custom feedback form when clicked. Headless-safe: form field definitions and submissions go through `shared.forms` (storefront.forms) when available, falling back to the legacy `Forms` AMD module (registered by register-amd.js) in hosted themes.
Options
label | Button label text (default: from theme settings) |
Example
Bootic.components.render('feedback-button', el, {})
feedback-comments base
Renders a list of customer comments/reviews with ratings for the current page.
Options
no_comments_message | Message shown when there are no comments yet |
Example
Bootic.components.render('feedback-comments', el, {
no_comments_message: 'Be the first to comment!'
})
fulfillment-info base
Renders estimated delivery date, pickup availability, and branch stock information for a product, updating when the selected variant changes.
Options
store | Store/branch identifier |
productId | Product ID to show fulfillment info for |
variantId | Initially selected variant ID |
Example
Bootic.components.render('fulfillment-info', el, {
productId: {{ product.id }},
variantId: {{ product.variants.first.id }}
})
fullpage-slider on demand
Renders a full-viewport vertical scroll slider where each section occupies the entire screen height, with keyboard and swipe navigation.
Options
loop | Loop from last section back to first (default: false) |
speed | Transition speed in milliseconds (default: 600) |
Example
Bootic.components.render('fullpage-slider', el, { loop: true })
image-hotspots on demand
Renders an image with interactive hotspot markers that reveal product cards or tooltip details on click or hover.
Options
image | URL of the background image |
hotspots | Array of hotspot objects with x, y (percentage) and productId |
Example
Bootic.components.render('image-hotspots', el, {
image: '/img/lookbook.jpg',
hotspots: [{ x: 30, y: 45, productId: 123 }]
})
infobar base
Renders a dismissible announcement bar at the top of the page with configurable background colour, text colour, and message.
Options
message | HTML message to display in the bar |
bg_color | Background colour (default: '#111') |
text_color | Text colour (default: 'white') |
max_width | Maximum bar content width (default: '1170px') |
Example
Bootic.components.render('infobar', el, {
message: 'Free shipping on orders over $50!',
bg_color: '#e63946'
})
Renders a UI for selecting matching products to build a bundle (e.g. "complete the look"), showing compatible items and letting the customer add them as a set.
Options
productId | The anchor product ID |
bundles | Array of bundle option objects to display |
Example
Bootic.components.render('matching-bundle-selector', el, {
productId: {{ product.id }}
})
notification-list base
Renders a list of customer notifications (order updates, restock alerts, messages) with read/unread state management.
Options
emptyMessage | Message shown when there are no notifications |
Example
Bootic.components.render('notification-list', el, {})
notify-restocked base
Renders the restock notification subscription form, letting a customer submit their email to be alerted when an out-of-stock product becomes available again.
Options
form_url | URL of the notify-restocked POST endpoint (required) |
variants | Array of variant objects to show in the variant selector |
submit_css | CSS class for the submit button (default: 'primary') |
Example
Bootic.components.render('notify-restocked', el, {
form_url: '/products/my-product/notify_restocked'
})
order-tracking on demand
Renders an order status tracking form where customers can enter their order number or email address to view real-time fulfilment and shipping status.
Options
inModal | Render in a condensed modal-friendly layout (default: false) |
Example
Bootic.components.render('order-tracking', el, {})
product-detail on demand
product-list base
Renders a mini product list (e.g. for "you may also like" or cart cross-sell suggestions) with product images, titles, prices, and inline add-to-cart buttons.
Options
title | Section heading (default: '¡Que no se te olviden!') |
products | Array of product objects to display |
Example
Bootic.components.render('product-list', el, {
title: 'You may also like',
products: relatedProducts
})
product-option-selector on demand
Renders a product option/variant picker with visual swatches or buttons, designed for embedding in listing pages or quick-buy modals.
Options
title | Product title |
options | Variant option definitions (name, values) |
selectedVariantId | Initially selected variant ID |
Example
Bootic.components.render('product-option-selector', el, {
title: '{{ product.name }}',
options: {{ product.variants | json }}
})
product-preview base
Renders a compact product preview card with image, title, price, and a quick-add button for use in hover cards or inline listings.
Options
productSlug | Product slug used to fetch product data |
productId | Product ID |
Example
Bootic.components.render('product-preview', el, {
productSlug: '{{ product.slug }}'
})
product-variant-selector on demand
Renders a full variant selection UI with add-to-cart integration, showing available options as buttons and updating price and stock status on selection.
Options
title | Product title |
selectedVariantId | Initially selected variant ID |
variants | Array of variant objects with id, options, price, and available |
Example
Bootic.components.render('product-variant-selector', el, {
title: '{{ product.name }}',
variants: {{ product.variants | json }}
})
promo-notice base
Renders a dismissible promotional notice banner inside the page layout, showing active discounts or free shipping status from the cart.
Options
message | Promotional message to display |
Example
Bootic.components.render('promo-notice', el, { message: '10% off your first order!' })
Renders the push notification permission prompt with a subscribe button, asking the customer to allow browser push notifications.
Options
prompt | Prompt message text (default: from theme settings) |
Example
Bootic.components.render('push-notifications-prompt', el, {
prompt: 'Get notified about new arrivals and promotions!'
})
quick-stats on demand
Renders a dashboard-style panel with key shop metrics including order counts, revenue totals, and top products, for admin preview or store-owner contexts.
Example
Bootic.components.render('quick-stats', el, {})
salesbot on demand
search-popover base
Renders a search input with a floating results popover that shows matching products, collections, and tags as the customer types, with optional images, prices, and autocomplete.
Options
withImages | Show product thumbnails in results (default: false) |
withPrices | Show product prices in results (default: false) |
showAutocomplete | Enable search-term autocomplete suggestion (default: false) |
Example
Bootic.components.render('search-popover', el, {
withImages: true,
withPrices: true
})
shipping-calculator base
Renders the shipping cost calculator form where customers enter their address to receive a real-time shipping estimate before checkout.
Options
delivery | Delivery API object with getShippingOptions method |
country | Default country code for the address form |
Example
Bootic.components.render('shipping-calculator', el, {
delivery: deliveryApi,
country: 'CL'
})
shopping-beacon base
Floating cart launcher with search, account menu, and a delivery-setup trigger, mounted as a persistent corner widget. Headless-safe by default: the cart badge, the cart slideout (Slideout + CartTable), and the delivery-setup trigger (Slideout + DeliverySetup) are wired directly from `shared.cart`/`shared.delivery` and work in any environment, hosted or headless. Search (`show_search`) and the account menu (`show_user_menu`) still depend on legacy-only globals (SearchIndex, search-popover, UserMenu) that don't exist in a headless/npm-only page — when the `Bootic` global isn't present those two sections are hidden automatically. Pass `show_search:false`/`show_user_menu:false` explicitly to hide them in a hosted theme too.
Options
show_search | default true (forced off if legacy `Bootic` global is unavailable) |
show_user_menu | default true (forced off if legacy `Bootic` global is unavailable) |
show_cart | default true (badge + cart slideout) |
show_delivery_setup | default true (location indicator opens DeliverySetup) |
delivery_text | text shown next to the location indicator (default: "Elige tu forma de entrega") |
position | 'bottom-right' (default), 'bottom-left', 'top-right', 'top-left' |
signup-form on demand
Renders a customer registration form with configurable fields for name, email, password, phone, and address, handling submission and displaying validation errors.
Options
title | Form heading text (default: 'Crea tu cuenta') |
showPhone | Include a phone number field (default: false) |
showAddress | Include address fields (default: false) |
submitLabel | Submit button label (default: 'Crear cuenta') |
Example
Bootic.components.render('signup-form', el, {
title: 'Create your account',
showPhone: true
})
slideout base
Renders a slide-out drawer panel that overlays content from the right side of the screen, supporting multiple sequential steps and a programmatic open/close API.
Options
width | Drawer width (default: '440px') |
onClose | Callback invoked when the drawer is closed |
Example
Bootic.components.render('slideout', el, { width: '480px', onClose: onSlideoutClosed }, function(slideout) {
slideout.addStep('cart', {}, function(step) { step.innerHTML = cartHtml })
slideout.toggle()
})
welcome-modal on demand
Renders a configurable welcome pop-up modal for first-time visitors with optional subscribe form and promotional image. Loaded via modules/ui/welcome_modal.js, which maps the (snake_case) widget settings onto this component's camelCase props.
Options
title | Heading text |
text | Body text |
imageUrl | Promotional image URL |
imageLink | URL the image links to |
linkText | Call-to-action link text (default: "Ver más") |
linkUrl | Call-to-action link URL |
showSubscribeForm | Include a newsletter subscription form (default: false) |
subscribeFormTag | Liquid form tag name to apply to subscribers |
buttonColor | Subscribe button color (default: #18181b) |
modalPosition | center, top-left, top-right, bottom-left, or bottom-right (default: center) |
darkMode | Use dark modal styling (default: false) |
showCloseButton | Show the close (x) button (default: true) |
closeOnOverlayClick | Close when clicking outside the modal (default: false) |
Example
Bootic.components.render('welcome-modal', el, {
showSubscribeForm: true,
subscribeFormTag: 'subscribe_form'
})