@best-bundles/bundle-ui 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode('._button_18rtl_1{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--bb-font-family, inherit);border:1px solid var(--bb-button-border, rgba(0, 0, 0, .12));background:var(--bb-button-bg, #111827);color:var(--bb-button-text, #ffffff);font:inherit;line-height:1;padding:10px 14px;border-radius:var(--bb-button-radius, 10px);cursor:pointer;transition:transform .12s ease,background .12s ease,border-color .12s ease,opacity .12s ease}._button_18rtl_1:hover{background:var(--bb-button-bg-hover, #0b1220)}._button_18rtl_1:active{transform:translateY(1px)}._button_18rtl_1:disabled{opacity:.6;cursor:not-allowed}._button_18rtl_1:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._backdrop_1ctfr_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--bb-backdrop-z-index, 9999);display:flex;justify-content:flex-end;background:var(--bb-backdrop-bg, rgba(0, 0, 0, .5));-webkit-backdrop-filter:blur(var(--bb-backdrop-blur, 2px));backdrop-filter:blur(var(--bb-backdrop-blur, 2px));padding:var(--bb-backdrop-padding, 12px);opacity:0;transition:opacity var(--bb-drawer-transition-duration, .22s) ease}._backdropOpen_1ctfr_14{opacity:1}._backdropClosed_1ctfr_18{opacity:0}._panel_1ctfr_22{width:440px;max-width:100%;height:100%;background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);font-family:var(--bb-font-family-body, "Cabin", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif);border-radius:var(--bb-panel-radius, 16px);box-shadow:0 20px 60px #00000059;display:grid;grid-template-rows:auto 1fr auto;overflow:hidden;outline:none;position:relative;top:unset;right:unset;bottom:unset;left:unset}._panelOpen_1ctfr_42{animation:_bbSlideInFromRight_1ctfr_1 var(--bb-drawer-transition-duration, .22s) ease forwards}._panelClosed_1ctfr_46{animation:_bbSlideOutToRight_1ctfr_1 var(--bb-drawer-transition-duration, .22s) ease forwards}@keyframes _bbSlideInFromRight_1ctfr_1{0%{transform:translate(110%)}to{transform:translate(0)}}@keyframes _bbSlideOutToRight_1ctfr_1{0%{transform:translate(0)}to{transform:translate(110%)}}@media(prefers-reduced-motion:reduce){._backdrop_1ctfr_1{transition:none}._panelOpen_1ctfr_42,._panelClosed_1ctfr_46{animation:none}}._header_1ctfr_81{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;column-gap:12px;padding:var(--bb-header-padding, 16px 16px 12px 16px);border-bottom:1px solid var(--bb-border-color, rgba(17, 24, 39, .08))}._headerCenter_1ctfr_90{position:relative;min-width:0;display:flex;justify-content:center;align-items:center}._title_1ctfr_98{font-size:24px;margin:0;line-height:1.2;font-family:var(--bb-font-family-title, "Bebas Neue", "Cabin", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif);letter-spacing:.02em;color:var(--bb-title-color, var(--bb-text-color, #111827))}._searchIconButton_1ctfr_107{width:36px;height:36px;border-radius:10px;border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}._searchIconButton_1ctfr_107:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._searchIconButton_1ctfr_107:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._headerTitleWrap_1ctfr_129{transition:opacity .18s ease,transform .22s ease}._headerSearchWrap_1ctfr_133{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transform:translateY(-2px);transition:opacity .18s ease,transform .22s ease}._headerSearchOpen_1ctfr_145 ._headerTitleWrap_1ctfr_129{opacity:0;transform:translateY(2px);pointer-events:none}._headerSearchOpen_1ctfr_145 ._headerSearchWrap_1ctfr_133{opacity:1;transform:translateY(0);pointer-events:auto}._searchBar_1ctfr_157{width:min(320px,100%);height:36px;display:flex;align-items:center;gap:8px;background:var(--bb-surface-bg, #ffffff);border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));border-radius:10px;padding:0 8px}._searchInput_1ctfr_169{width:100%;border:none;outline:none;background:transparent;font:inherit;font-size:14px;min-width:0;height:100%;line-height:36px;padding:0}._searchInput_1ctfr_169::-webkit-search-cancel-button,._searchInput_1ctfr_169::-webkit-search-decoration,._searchInput_1ctfr_169::-webkit-search-results-button,._searchInput_1ctfr_169::-webkit-search-results-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}._searchClearButton_1ctfr_190{border:none;background:transparent;color:var(--bb-text-color, #111827);font:inherit;font-size:13px;font-weight:700;cursor:pointer;padding:6px;border-radius:10px;line-height:1}._searchClearButton_1ctfr_190:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._searchClearButton_1ctfr_190:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._closeButton_1ctfr_212{border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);width:36px;height:36px;border-radius:10px;cursor:pointer;flex:0 0 auto}._closeButton_1ctfr_212:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._closeButton_1ctfr_212:disabled{opacity:.6;cursor:not-allowed}._closeButton_1ctfr_212:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}@media(prefers-reduced-motion:reduce){._headerTitleWrap_1ctfr_129,._headerSearchWrap_1ctfr_133{transition:none}}._body_1ctfr_245{padding:var(--bb-body-padding, 8px 16px);overflow:auto}._muted_1ctfr_250{color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));margin:0 0 12px}._error_1ctfr_255{color:var(--bb-error-color, #b91c1c);margin:0 0 12px}._variants_1ctfr_260{margin-top:4px}._variantList_1ctfr_264{list-style:none;padding:0;margin:0;display:grid;gap:10px}._variantRow_1ctfr_272{display:grid;grid-template-columns:1fr auto;gap:0px;align-items:stretch;padding:5px}._variantLeft_1ctfr_280{min-width:0;display:flex;gap:12px;align-items:center}._addToBundleButton_1ctfr_287{height:100%;align-self:stretch;border-radius:12px;border:none;background:var(--bb-cta-bg, #91aae5);color:var(--bb-cta-text, #ffffff);font:inherit;font-weight:800;padding:0 16px;cursor:pointer;white-space:nowrap}._addToBundleButton_1ctfr_287:hover{background:var(--bb-cta-bg-hover, #1d4ed8)}._addToBundleButton_1ctfr_287:disabled{opacity:.6;cursor:not-allowed}._addToBundleButton_1ctfr_287:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._variantThumb_1ctfr_315{width:60px;height:60px;border-radius:12px;overflow:hidden;border:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .02));flex:0 0 auto}._variantThumbImg_1ctfr_325{width:100%;height:100%;object-fit:cover;display:block}._variantThumbFallback_1ctfr_332{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--bb-text-color, #111827)}._variantInfo_1ctfr_342{min-width:0}._variantName_1ctfr_346{font-size:14px;font-weight:600;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._variantMeta_1ctfr_355{font-size:12px;color:var(--bb-muted-color, rgba(17, 24, 39, .6));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._variantPriceRow_1ctfr_363{display:flex;align-items:baseline;gap:8px;margin-top:4px}._variantCompareAt_1ctfr_370{font-size:12px;color:var(--bb-muted-color, rgba(17, 24, 39, .6));text-decoration:line-through}._variantPrice_1ctfr_363{font-size:13px;font-weight:800}._qtyControls_1ctfr_381{display:inline-flex;align-items:center;gap:6px}._qtyButton_1ctfr_387{width:34px;height:34px;border-radius:10px;border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);cursor:pointer;line-height:1;font-size:16px}._qtyButton_1ctfr_387:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._qtyButton_1ctfr_387:disabled{opacity:.6;cursor:not-allowed}._qtyButton_1ctfr_387:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._qtyValue_1ctfr_412{min-width:18px;text-align:center;font-variant-numeric:tabular-nums;font-weight:700}._footer_1ctfr_419{padding:var(--bb-footer-padding, 12px 16px 16px 16px);border-top:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-bg, #ffffff);position:relative}._boxSummaryWindow_1ctfr_426{margin-bottom:6px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;padding-bottom:6px;scrollbar-width:none;-ms-overflow-style:none}._boxSummaryWindow_1ctfr_426::-webkit-scrollbar{display:none}._boxSummaryRow_1ctfr_443{--bb-box-gap: 10px;display:flex;align-items:flex-start;gap:var(--bb-box-gap);width:100%}._boxSlot_1ctfr_451{flex:0 0 calc((100% - (4 * var(--bb-box-gap))) / 5);display:flex;flex-direction:column;align-items:stretch;gap:6px}._boxItem_1ctfr_459{width:100%;aspect-ratio:1 / 1;border-radius:12px;position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;box-sizing:border-box}._boxItemClickable_1ctfr_471{cursor:pointer}._boxItemClickable_1ctfr_471:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._boxThresholdLabel_1ctfr_480{font-size:11px;line-height:1.15;font-weight:700;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._boxItemPlaceholder_1ctfr_491{border:1px dashed var(--bb-border-strong-color, rgba(17, 24, 39, .18));background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .02));color:var(--bb-muted-color, rgba(17, 24, 39, .6))}._boxItemFilled_1ctfr_497{border:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-bg, #ffffff);overflow:hidden}._boxItemThreshold_1ctfr_503{border-style:solid;border-width:2px;border-color:var(--bb-tier-border, rgba(37, 99, 235, .55));background:linear-gradient(180deg,#2563eb1a,#2563eb08);color:var(--bb-tier-text, rgba(29, 78, 216, .95))}._boxItemDiscountText_1ctfr_511{font-size:12px;font-weight:800;text-align:center;line-height:1.1;padding:6px}._boxItemPlus_1ctfr_519{font-size:22px;font-weight:700;opacity:.5;line-height:1}._boxItemImage_1ctfr_526{width:100%;height:100%;object-fit:cover;display:block}._boxItemFallback_1ctfr_533{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .04));color:var(--bb-text-color, #111827);font-weight:800}._cta_1ctfr_544{width:100%;border:1px solid var(--bb-cta-border, rgba(0, 0, 0, .12));background:var(--bb-cta-bg, #2563eb);color:var(--bb-cta-text, #ffffff);font:inherit;font-weight:700;padding:12px 14px;border-radius:12px;cursor:pointer}._ctaTotals_1ctfr_556{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-variant-numeric:tabular-nums}._ctaDiscountBadge_1ctfr_564{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800;background:linear-gradient(180deg,#2563eb24,#2563eb0f);border:1px solid rgba(37,99,235,.3);color:#1d4ed8f2;white-space:nowrap}._ctaTotalsWrap_1ctfr_578{overflow:hidden;max-height:0;opacity:0;transform:translateY(4px);margin-bottom:0;transition:max-height .22s ease,opacity .16s ease,transform .22s ease,margin-bottom .22s ease}._ctaTotalsWrapVisible_1ctfr_591{max-height:40px;opacity:1;transform:translateY(0);margin-bottom:8px}._ctaTotalsStrike_1ctfr_598{opacity:.85;text-decoration:line-through;font-weight:700;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65))}._ctaTotalsPrice_1ctfr_605{font-weight:900;color:var(--bb-text-color, #111827)}@media(prefers-reduced-motion:reduce){._ctaTotalsWrap_1ctfr_578{transition:none}}._cta_1ctfr_544:hover{background:var(--bb-cta-bg-hover, #1d4ed8)}._cta_1ctfr_544:disabled{opacity:.6;cursor:not-allowed}._cta_1ctfr_544:focus-visible{outline:2px solid var(--bb-cta-focus-ring, var(--bb-text-color, #111827));outline-offset:2px}._helperText_1ctfr_630{margin-top:8px;font-size:12px;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));text-align:center}@media(max-width:767px){._backdrop_1ctfr_1{padding:0;justify-content:stretch}._panel_1ctfr_22{width:100%;height:100%;border-radius:0}}')),document.head.appendChild(r)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- import { jsx as r, jsxs as N, Fragment as Te } from "react/jsx-runtime";
3
- import { useState as F, useRef as Z, useEffect as G, useCallback as oe, useMemo as y, createContext as Ie, useContext as we, forwardRef as Be, createElement as ye } from "react";
4
- const _e = {
1
+ (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode('._button_18rtl_1{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--bb-font-family, inherit);border:1px solid var(--bb-button-border, rgba(0, 0, 0, .12));background:var(--bb-button-bg, #111827);color:var(--bb-button-text, #ffffff);font:inherit;line-height:1;padding:10px 14px;border-radius:var(--bb-button-radius, 10px);cursor:pointer;transition:transform .12s ease,background .12s ease,border-color .12s ease,opacity .12s ease}._button_18rtl_1:hover{background:var(--bb-button-bg-hover, #0b1220)}._button_18rtl_1:active{transform:translateY(1px)}._button_18rtl_1:disabled{opacity:.6;cursor:not-allowed}._button_18rtl_1:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._backdrop_jv9mc_1{position:fixed;top:0;right:0;bottom:0;left:0;z-index:var(--bb-backdrop-z-index, 9999);display:flex;justify-content:flex-end;background:var(--bb-backdrop-bg, rgba(0, 0, 0, .5));-webkit-backdrop-filter:blur(var(--bb-backdrop-blur, 2px));backdrop-filter:blur(var(--bb-backdrop-blur, 2px));padding:var(--bb-backdrop-padding, 12px);opacity:0;transition:opacity var(--bb-drawer-transition-duration, .22s) ease}._celebrationOverlay_jv9mc_14{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:none;z-index:50}._celebrationChip_jv9mc_23{font-family:var(--bb-font-family-body, "Cabin", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif);letter-spacing:.03em;font-size:18px;line-height:1;padding:12px 16px;border-radius:999px;color:#0b1b44;background:linear-gradient(180deg,#fff,#bae6fd);border:2px solid rgba(37,99,235,.28);box-shadow:0 18px 55px #0006,0 10px 28px #2563eb33,inset 0 1px #ffffffbf;transform-origin:50% 60%;will-change:transform,opacity,filter;animation:_bbCelebrationPop_jv9mc_1 2.8s cubic-bezier(.16,1,.3,1) forwards;filter:saturate(1.05)}@keyframes _bbCelebrationPop_jv9mc_1{0%{opacity:0;transform:translateY(10px) scale(.6);filter:blur(1px) saturate(1.1)}12%{opacity:1;transform:translateY(0) scale(1.12);filter:blur(0px) saturate(1.1)}22%{opacity:1;transform:translateY(0) scale(1)}80%{opacity:1;transform:translateY(0) scale(1)}to{opacity:0;transform:translateY(-10px) scale(.98)}}._backdropOpen_jv9mc_74{opacity:1}._backdropClosed_jv9mc_78{opacity:0}._panel_jv9mc_82{width:440px;max-width:100%;height:100%;background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);font-family:var(--bb-font-family-body, "Cabin", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif);border-radius:var(--bb-panel-radius, 16px);box-shadow:0 20px 60px #00000059;display:grid;grid-template-rows:auto 1fr auto;overflow:hidden;outline:none;position:relative;top:unset;right:unset;bottom:unset;left:unset}._panelOpen_jv9mc_102{animation:_bbSlideInFromRight_jv9mc_1 var(--bb-drawer-transition-duration, .22s) ease forwards}._panelClosed_jv9mc_106{animation:_bbSlideOutToRight_jv9mc_1 var(--bb-drawer-transition-duration, .22s) ease forwards}@keyframes _bbSlideInFromRight_jv9mc_1{0%{transform:translate(110%)}to{transform:translate(0)}}@keyframes _bbSlideOutToRight_jv9mc_1{0%{transform:translate(0)}to{transform:translate(110%)}}@media(prefers-reduced-motion:reduce){._backdrop_jv9mc_1{transition:none}._celebrationChip_jv9mc_23,._panelOpen_jv9mc_102,._panelClosed_jv9mc_106{animation:none}}._header_jv9mc_145{display:grid;grid-template-columns:36px 1fr 36px;align-items:center;column-gap:12px;padding:var(--bb-header-padding, 16px 16px 12px 16px);border-bottom:1px solid var(--bb-border-color, rgba(17, 24, 39, .08))}._headerCenter_jv9mc_154{position:relative;min-width:0;display:flex;justify-content:center;align-items:center}._title_jv9mc_162{font-size:24px;margin:0;line-height:1.2;font-family:var(--bb-font-family-title, "Bebas Neue", "Cabin", system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif);letter-spacing:.02em;color:var(--bb-title-color, var(--bb-text-color, #111827))}._searchIconButton_jv9mc_171{width:36px;height:36px;border-radius:10px;border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);cursor:pointer;display:inline-flex;align-items:center;justify-content:center}._searchIconButton_jv9mc_171:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._searchIconButton_jv9mc_171:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._headerTitleWrap_jv9mc_193{transition:opacity .18s ease,transform .22s ease}._headerSearchWrap_jv9mc_197{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;justify-content:center;align-items:center;pointer-events:none;opacity:0;transform:translateY(-2px);transition:opacity .18s ease,transform .22s ease}._headerSearchOpen_jv9mc_209 ._headerTitleWrap_jv9mc_193{opacity:0;transform:translateY(2px);pointer-events:none}._headerSearchOpen_jv9mc_209 ._headerSearchWrap_jv9mc_197{opacity:1;transform:translateY(0);pointer-events:auto}._searchBar_jv9mc_221{width:min(320px,100%);height:36px;display:flex;align-items:center;gap:8px;background:var(--bb-surface-bg, #ffffff);border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));border-radius:10px;padding:0 8px}._searchInput_jv9mc_233{width:100%;border:none;outline:none;background:transparent;font:inherit;font-size:14px;min-width:0;height:100%;line-height:36px;padding:0}._searchInput_jv9mc_233::-webkit-search-cancel-button,._searchInput_jv9mc_233::-webkit-search-decoration,._searchInput_jv9mc_233::-webkit-search-results-button,._searchInput_jv9mc_233::-webkit-search-results-decoration{-webkit-appearance:none;-moz-appearance:none;appearance:none}._searchClearButton_jv9mc_254{border:none;background:transparent;color:var(--bb-text-color, #111827);font:inherit;font-size:13px;font-weight:700;cursor:pointer;padding:6px;border-radius:10px;line-height:1}._searchClearButton_jv9mc_254:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._searchClearButton_jv9mc_254:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._closeButton_jv9mc_276{border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);color:var(--bb-text-color, #111827);width:36px;height:36px;border-radius:10px;cursor:pointer;flex:0 0 auto}._closeButton_jv9mc_276:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._closeButton_jv9mc_276:disabled{opacity:.6;cursor:not-allowed}._closeButton_jv9mc_276:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}@media(prefers-reduced-motion:reduce){._headerTitleWrap_jv9mc_193,._headerSearchWrap_jv9mc_197{transition:none}}._body_jv9mc_309{padding:var(--bb-body-padding, 8px 16px);overflow:auto}._muted_jv9mc_314{color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));margin:0 0 12px}._error_jv9mc_319{color:var(--bb-error-color, #b91c1c);margin:0 0 12px}._variants_jv9mc_324{margin-top:4px}._variantList_jv9mc_328{list-style:none;padding:0;margin:0;display:grid;gap:10px}._variantRow_jv9mc_336{display:grid;grid-template-columns:1fr auto;gap:0px;align-items:stretch;padding:5px}._variantLeft_jv9mc_344{min-width:0;display:flex;gap:12px;align-items:center}._addToBundleButton_jv9mc_351{height:100%;align-self:stretch;border-radius:12px;border:none;background:var(--bb-cta-bg, #91aae5);color:var(--bb-cta-text, #ffffff);font:inherit;font-weight:800;padding:0 16px;cursor:pointer;white-space:nowrap}._addToBundleButton_jv9mc_351:hover{background:var(--bb-cta-bg-hover, #1d4ed8)}._addToBundleButton_jv9mc_351:disabled{opacity:.6;cursor:not-allowed}._addToBundleButton_jv9mc_351:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._variantThumb_jv9mc_379{width:60px;height:60px;border-radius:12px;overflow:hidden;border:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .02));flex:0 0 auto}._variantThumbImg_jv9mc_389{width:100%;height:100%;object-fit:cover;display:block}._variantThumbFallback_jv9mc_396{width:100%;height:100%;display:flex;align-items:center;justify-content:center;font-weight:800;color:var(--bb-text-color, #111827)}._variantInfo_jv9mc_406{min-width:0}._variantName_jv9mc_410{font-size:14px;font-weight:600;margin-bottom:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._variantMeta_jv9mc_419{font-size:12px;color:var(--bb-muted-color, rgba(17, 24, 39, .6));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._variantPriceRow_jv9mc_427{display:flex;align-items:baseline;gap:8px;margin-top:4px}._variantCompareAt_jv9mc_434{font-size:12px;color:var(--bb-muted-color, rgba(17, 24, 39, .6));text-decoration:line-through}._variantPrice_jv9mc_427{font-size:13px;font-weight:800}._qtyControls_jv9mc_445{display:inline-flex;align-items:center;gap:6px}._qtyButton_jv9mc_451{width:34px;height:34px;border-radius:10px;border:1px solid var(--bb-border-strong-color, rgba(17, 24, 39, .12));background:var(--bb-surface-bg, #ffffff);cursor:pointer;line-height:1;font-size:16px}._qtyButton_jv9mc_451:hover{background:var(--bb-control-bg-hover, rgba(17, 24, 39, .04))}._qtyButton_jv9mc_451:disabled{opacity:.6;cursor:not-allowed}._qtyButton_jv9mc_451:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._qtyValue_jv9mc_476{min-width:18px;text-align:center;font-variant-numeric:tabular-nums;font-weight:700}._footer_jv9mc_483{padding:var(--bb-footer-padding, 12px 16px 16px 16px);border-top:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-bg, #ffffff);position:relative}._boxSummaryWindow_jv9mc_490{margin-bottom:6px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;padding-bottom:6px;scrollbar-width:none;-ms-overflow-style:none}._boxSummaryWindow_jv9mc_490::-webkit-scrollbar{display:none}._boxSummaryRow_jv9mc_507{--bb-box-gap: 10px;display:flex;align-items:flex-start;gap:var(--bb-box-gap);width:100%}._boxSlot_jv9mc_515{flex:0 0 calc((100% - (4 * var(--bb-box-gap))) / 5);display:flex;flex-direction:column;align-items:stretch;gap:6px}._boxItem_jv9mc_523{width:100%;aspect-ratio:1 / 1;border-radius:12px;position:relative;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;box-sizing:border-box}._boxItemClickable_jv9mc_535{cursor:pointer}._boxItemClickable_jv9mc_535:focus-visible{outline:2px solid var(--bb-focus-ring, #2563eb);outline-offset:2px}._boxThresholdLabel_jv9mc_544{font-size:11px;line-height:1.15;font-weight:700;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._boxItemPlaceholder_jv9mc_555{border:1px dashed var(--bb-border-strong-color, rgba(17, 24, 39, .18));background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .02));color:var(--bb-muted-color, rgba(17, 24, 39, .6))}._boxItemFilled_jv9mc_561{border:1px solid var(--bb-border-color, rgba(17, 24, 39, .08));background:var(--bb-surface-bg, #ffffff);overflow:hidden}._boxItemThreshold_jv9mc_567{border-style:solid;border-width:2px;border-color:var(--bb-tier-border, rgba(37, 99, 235, .55));background:linear-gradient(180deg,#2563eb1a,#2563eb08);color:var(--bb-tier-text, rgba(29, 78, 216, .95))}._boxItemDiscountText_jv9mc_575{font-size:12px;font-weight:800;text-align:center;line-height:1.1;padding:6px}._boxItemPlus_jv9mc_583{font-size:22px;font-weight:700;opacity:.5;line-height:1}._boxItemImage_jv9mc_590{width:100%;height:100%;object-fit:cover;display:block}._boxItemFallback_jv9mc_597{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background:var(--bb-surface-subtle-bg, rgba(17, 24, 39, .04));color:var(--bb-text-color, #111827);font-weight:800}._cta_jv9mc_608{width:100%;border:1px solid var(--bb-cta-border, rgba(0, 0, 0, .12));background:var(--bb-cta-bg, #2563eb);color:var(--bb-cta-text, #ffffff);font:inherit;font-weight:700;padding:12px 14px;border-radius:12px;cursor:pointer}._ctaTotals_jv9mc_620{display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-variant-numeric:tabular-nums}._ctaDiscountBadge_jv9mc_628{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;font-size:12px;font-weight:800;background:linear-gradient(180deg,#2563eb24,#2563eb0f);border:1px solid rgba(37,99,235,.3);color:#1d4ed8f2;white-space:nowrap}._ctaTotalsWrap_jv9mc_642{overflow:hidden;max-height:0;opacity:0;transform:translateY(4px);margin-bottom:0;transition:max-height .22s ease,opacity .16s ease,transform .22s ease,margin-bottom .22s ease}._ctaTotalsWrapVisible_jv9mc_655{max-height:40px;opacity:1;transform:translateY(0);margin-bottom:8px}._ctaTotalsStrike_jv9mc_662{opacity:.85;text-decoration:line-through;font-weight:700;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65))}._ctaTotalsPrice_jv9mc_669{font-weight:900;color:var(--bb-text-color, #111827)}@media(prefers-reduced-motion:reduce){._ctaTotalsWrap_jv9mc_642{transition:none}}._cta_jv9mc_608:hover{background:var(--bb-cta-bg-hover, #1d4ed8)}._cta_jv9mc_608:disabled{opacity:.6;cursor:not-allowed}._cta_jv9mc_608:focus-visible{outline:2px solid var(--bb-cta-focus-ring, var(--bb-text-color, #111827));outline-offset:2px}._helperText_jv9mc_694{margin-top:8px;font-size:12px;color:var(--bb-muted-strong-color, rgba(17, 24, 39, .65));text-align:center}@media(max-width:767px){._backdrop_jv9mc_1{padding:0;justify-content:stretch}._panel_jv9mc_82{width:100%;height:100%;border-radius:0}}')),document.head.appendChild(e)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
2
+ import { jsx as h, jsxs as P, Fragment as rt } from "react/jsx-runtime";
3
+ import Ie, { useState as I, useRef as A, useEffect as D, useCallback as le, useMemo as B, createContext as it, useContext as ot, forwardRef as Ge, createElement as Fe } from "react";
4
+ const Ce = {
5
5
  bundleId: "_bundle_id",
6
6
  bundleConfig: "_bundle_config",
7
7
  bundleSource: "_bundle_source",
8
8
  bundleTitle: "_bundle_title"
9
9
  };
10
- async function Se(o) {
11
- const l = new URL("/api/public/bundle-config", o.apiBaseUrl);
12
- l.searchParams.set("shop", o.shop);
13
- const m = await (await fetch(l, {
10
+ async function at(o) {
11
+ const e = new URL("/api/public/bundle-config", o.apiBaseUrl);
12
+ e.searchParams.set("shop", o.shop);
13
+ const i = await (await fetch(e, {
14
14
  method: "GET",
15
15
  signal: o.signal,
16
16
  headers: { "Content-Type": "application/json" }
17
17
  })).json().catch(() => null);
18
- return !m || typeof m != "object" ? { ok: !1, error: "Invalid response." } : m;
18
+ return !i || typeof i != "object" ? { ok: !1, error: "Invalid response." } : i;
19
19
  }
20
- const Ne = Ie(null);
21
- function ke() {
20
+ const Ke = it(null);
21
+ function st() {
22
22
  try {
23
23
  const o = globalThis.crypto;
24
24
  if (o != null && o.randomUUID) return o.randomUUID();
@@ -26,176 +26,517 @@ function ke() {
26
26
  }
27
27
  return `bb_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
28
28
  }
29
- function ge(o) {
29
+ function ze(o) {
30
30
  return Number.isFinite(o) ? Math.max(0, Math.floor(o)) : 0;
31
31
  }
32
- function Qt(o) {
32
+ function Wn(o) {
33
33
  const {
34
- apiBaseUrl: l,
35
- shop: _,
36
- cartAdapter: m,
37
- configHandle: I = "default",
38
- initialData: h,
39
- configFetcher: E,
40
- children: x
41
- } = o, [S, M] = F(!1), [q, J] = F(!h), [g, Q] = F(!1), [X, le] = F(null), [P, Y] = F((h == null ? void 0 : h.currencyCode) ?? null), [f, ee] = F((h == null ? void 0 : h.config) ?? null), [te, ne] = F(
42
- (h == null ? void 0 : h.eligibleVariants) ?? []
43
- ), [ce, me] = F(
34
+ apiBaseUrl: e,
35
+ shop: t,
36
+ cartAdapter: i,
37
+ configHandle: r = "default",
38
+ initialData: n,
39
+ configFetcher: c,
40
+ children: l
41
+ } = o, [m, T] = I(!1), [C, S] = I(!n), [w, E] = I(!1), [$, V] = I(null), [N, M] = I((n == null ? void 0 : n.currencyCode) ?? null), [v, z] = I((n == null ? void 0 : n.config) ?? null), [ie, ue] = I(
42
+ (n == null ? void 0 : n.eligibleVariants) ?? []
43
+ ), [de, Z] = I(
44
44
  () => ({ selections: {}, order: [] })
45
- ), he = Z(null);
46
- G(() => {
47
- var B;
48
- if (h) return;
49
- (B = he.current) == null || B.abort();
50
- const d = new AbortController();
51
- he.current = d;
52
- const C = E ?? Se;
53
- return J(!0), le(null), C({ apiBaseUrl: l, shop: _, signal: d.signal }).then((s) => {
54
- if (!s.ok) {
55
- le(s.error || "Failed to load bundle config."), ee(null), ne([]), Y(null);
45
+ ), ye = A(null);
46
+ D(() => {
47
+ var O;
48
+ if (n) return;
49
+ (O = ye.current) == null || O.abort();
50
+ const x = new AbortController();
51
+ ye.current = x;
52
+ const j = c ?? at;
53
+ return S(!0), V(null), j({ apiBaseUrl: e, shop: t, signal: x.signal }).then((b) => {
54
+ if (!b.ok) {
55
+ V(b.error || "Failed to load bundle config."), z(null), ue([]), M(null);
56
56
  return;
57
57
  }
58
- Y(s.currencyCode ?? null), ee(s.config), ne(s.eligibleVariants ?? []);
59
- }).catch((s) => {
60
- const T = s instanceof Error ? s.message : "Failed to load bundle config.";
61
- le(T), ee(null), ne([]), Y(null);
62
- }).finally(() => J(!1)), () => d.abort();
63
- }, [l, _, h, E]);
64
- const se = oe(() => M(!0), []), w = oe(() => M(!1), []), $ = oe(() => M((d) => !d), []), be = oe((d, C) => {
65
- const B = ge(C);
66
- me((s) => {
67
- const T = s.selections[d] ?? 0, j = B - T;
68
- let z;
69
- if (B <= 0) {
70
- const { [d]: re, ...U } = s.selections;
71
- z = U;
72
- } else T === B ? z = s.selections : z = { ...s.selections, [d]: B };
73
- let H = s.order;
74
- if (j > 0)
75
- H = [...s.order, ...Array.from({ length: j }, () => d)];
76
- else if (j < 0) {
77
- let re = -j;
78
- const U = [];
79
- for (let ae = s.order.length - 1; ae >= 0; ae--) {
80
- const ue = s.order[ae];
81
- if (ue === d && re > 0) {
82
- re--;
58
+ M(b.currencyCode ?? null), z(b.config), ue(b.eligibleVariants ?? []);
59
+ }).catch((b) => {
60
+ const F = b instanceof Error ? b.message : "Failed to load bundle config.";
61
+ V(F), z(null), ue([]), M(null);
62
+ }).finally(() => S(!1)), () => x.abort();
63
+ }, [e, t, n, c]);
64
+ const we = le(() => T(!0), []), oe = le(() => T(!1), []), he = le(() => T((x) => !x), []), ge = le((x, j) => {
65
+ const O = ze(j);
66
+ Z((b) => {
67
+ const F = b.selections[x] ?? 0, Y = O - F;
68
+ let K;
69
+ if (O <= 0) {
70
+ const { [x]: me, ...H } = b.selections;
71
+ K = H;
72
+ } else F === O ? K = b.selections : K = { ...b.selections, [x]: O };
73
+ let ce = b.order;
74
+ if (Y > 0)
75
+ ce = [...b.order, ...Array.from({ length: Y }, () => x)];
76
+ else if (Y < 0) {
77
+ let me = -Y;
78
+ const H = [];
79
+ for (let L = b.order.length - 1; L >= 0; L--) {
80
+ const X = b.order[L];
81
+ if (X === x && me > 0) {
82
+ me--;
83
83
  continue;
84
84
  }
85
- U.push(ue);
85
+ H.push(X);
86
86
  }
87
- U.reverse(), H = U;
87
+ H.reverse(), ce = H;
88
88
  }
89
- return z === s.selections && H === s.order ? s : { selections: z, order: H };
89
+ return K === b.selections && ce === b.order ? b : { selections: K, order: ce };
90
90
  });
91
- }, []), W = oe(() => me({ selections: {}, order: [] }), []), V = ce.selections, v = ce.order, R = y(() => Object.values(V).reduce((d, C) => d + (C || 0), 0), [V]), D = y(() => {
92
- const d = (f == null ? void 0 : f.rules) ?? [], C = d.length ? Math.min(...d.map((B) => B.minBundleSize)) : 2;
93
- return Number.isFinite(C) && C > 0 ? C : 2;
94
- }, [f]), k = y(() => !(q || g || X || !(f != null && f.isActive) || R < D), [R, f == null ? void 0 : f.isActive, X, q, D, g]), fe = oe(async () => {
95
- var s;
96
- if (!k || !f) return;
97
- const d = ke(), C = (f.title ?? "").trim().slice(0, 255), B = Object.entries(V).map(([T, j]) => ({ merchandiseId: T, quantity: ge(j) })).filter((T) => T.quantity > 0).map((T) => ({
98
- merchandiseId: T.merchandiseId,
99
- quantity: T.quantity,
91
+ }, []), ae = le(() => Z({ selections: {}, order: [] }), []), U = de.selections, Q = de.order, ee = B(() => Object.values(U).reduce((x, j) => x + (j || 0), 0), [U]), te = B(() => {
92
+ const x = (v == null ? void 0 : v.rules) ?? [], j = x.length ? Math.min(...x.map((O) => O.minBundleSize)) : 2;
93
+ return Number.isFinite(j) && j > 0 ? j : 2;
94
+ }, [v]), ne = B(() => !(C || w || $ || !(v != null && v.isActive) || ee < te), [ee, v == null ? void 0 : v.isActive, $, C, te, w]), xe = le(async () => {
95
+ var b;
96
+ if (!ne || !v) return;
97
+ const x = st(), j = (v.title ?? "").trim().slice(0, 255), O = Object.entries(U).map(([F, Y]) => ({ merchandiseId: F, quantity: ze(Y) })).filter((F) => F.quantity > 0).map((F) => ({
98
+ merchandiseId: F.merchandiseId,
99
+ quantity: F.quantity,
100
100
  attributes: [
101
- { key: _e.bundleId, value: d },
102
- { key: _e.bundleConfig, value: I },
103
- { key: _e.bundleSource, value: "bundle_builder" },
104
- ...C ? [{ key: _e.bundleTitle, value: C }] : []
101
+ { key: Ce.bundleId, value: x },
102
+ { key: Ce.bundleConfig, value: r },
103
+ { key: Ce.bundleSource, value: "bundle_builder" },
104
+ ...j ? [{ key: Ce.bundleTitle, value: j }] : []
105
105
  ]
106
106
  }));
107
- if (B.length) {
108
- Q(!0);
107
+ if (O.length) {
108
+ E(!0);
109
109
  try {
110
- await m.linesAdd(B), W(), w(), (s = m.openCartUI) == null || s.call(m);
110
+ await i.linesAdd(O), ae(), oe(), (b = i.openCartUI) == null || b.call(i);
111
111
  } finally {
112
- Q(!1);
112
+ E(!1);
113
113
  }
114
114
  }
115
- }, [k, m, W, w, f, I, V]), ie = y(
115
+ }, [ne, i, ae, oe, v, r, U]), se = B(
116
116
  () => ({
117
- isOpen: S,
118
- open: se,
119
- close: w,
120
- toggle: $,
121
- loading: q,
122
- submitting: g,
123
- error: X,
124
- currencyCode: P,
125
- config: f,
126
- eligibleVariants: te,
127
- selections: V,
128
- selectionOrder: v,
129
- setQuantity: be,
130
- clearSelections: W,
131
- bundleSize: R,
132
- minRequired: D,
133
- canSubmit: k,
134
- submit: fe
117
+ isOpen: m,
118
+ open: we,
119
+ close: oe,
120
+ toggle: he,
121
+ loading: C,
122
+ submitting: w,
123
+ error: $,
124
+ currencyCode: N,
125
+ config: v,
126
+ eligibleVariants: ie,
127
+ selections: U,
128
+ selectionOrder: Q,
129
+ setQuantity: ge,
130
+ clearSelections: ae,
131
+ bundleSize: ee,
132
+ minRequired: te,
133
+ canSubmit: ne,
134
+ submit: xe
135
135
  }),
136
136
  [
137
- S,
138
- se,
137
+ m,
138
+ we,
139
+ oe,
140
+ he,
141
+ C,
139
142
  w,
140
143
  $,
141
- q,
142
- g,
143
- X,
144
- P,
145
- f,
146
- te,
147
- V,
144
+ N,
148
145
  v,
149
- be,
150
- W,
151
- R,
152
- D,
153
- k,
154
- fe
146
+ ie,
147
+ U,
148
+ Q,
149
+ ge,
150
+ ae,
151
+ ee,
152
+ te,
153
+ ne,
154
+ xe
155
155
  ]
156
156
  );
157
- return /* @__PURE__ */ r(Ne.Provider, { value: ie, children: x });
157
+ return /* @__PURE__ */ h(Ke.Provider, { value: se, children: l });
158
158
  }
159
- function xe() {
160
- const o = we(Ne);
159
+ function Re() {
160
+ const o = ot(Ke);
161
161
  if (!o)
162
162
  throw new Error("useBundleBuilder must be used within <BundleProvider />");
163
163
  return o;
164
164
  }
165
- function Ht() {
166
- const { isOpen: o, open: l, close: _, toggle: m } = xe();
167
- return { isOpen: o, open: l, close: _, toggle: m };
165
+ function En() {
166
+ const { isOpen: o, open: e, close: t, toggle: i } = Re();
167
+ return { isOpen: o, open: e, close: t, toggle: i };
168
168
  }
169
- const Fe = "_button_18rtl_1", Pe = {
170
- button: Fe
169
+ const ct = "_button_18rtl_1", lt = {
170
+ button: ct
171
171
  };
172
- function Kt(o) {
173
- const { toggle: l } = xe();
174
- return /* @__PURE__ */ r(
172
+ function $n(o) {
173
+ const { toggle: e } = Re();
174
+ return /* @__PURE__ */ h(
175
175
  "button",
176
176
  {
177
177
  type: "button",
178
- onClick: l,
179
- className: [Pe.button, o.className].filter(Boolean).join(" "),
178
+ onClick: e,
179
+ className: [lt.button, o.className].filter(Boolean).join(" "),
180
180
  children: o.children ?? "Build a bundle"
181
181
  }
182
182
  );
183
183
  }
184
+ var Oe, Ue;
185
+ function ut() {
186
+ if (Ue) return Oe;
187
+ Ue = 1;
188
+ var o = {
189
+ linear: function(e, t, i, r) {
190
+ var n = i - t;
191
+ return n * e / r + t;
192
+ },
193
+ easeInQuad: function(e, t, i, r) {
194
+ var n = i - t;
195
+ return n * (e /= r) * e + t;
196
+ },
197
+ easeOutQuad: function(e, t, i, r) {
198
+ var n = i - t;
199
+ return -n * (e /= r) * (e - 2) + t;
200
+ },
201
+ easeInOutQuad: function(e, t, i, r) {
202
+ var n = i - t;
203
+ return (e /= r / 2) < 1 ? n / 2 * e * e + t : -n / 2 * (--e * (e - 2) - 1) + t;
204
+ },
205
+ easeInCubic: function(e, t, i, r) {
206
+ var n = i - t;
207
+ return n * (e /= r) * e * e + t;
208
+ },
209
+ easeOutCubic: function(e, t, i, r) {
210
+ var n = i - t;
211
+ return n * ((e = e / r - 1) * e * e + 1) + t;
212
+ },
213
+ easeInOutCubic: function(e, t, i, r) {
214
+ var n = i - t;
215
+ return (e /= r / 2) < 1 ? n / 2 * e * e * e + t : n / 2 * ((e -= 2) * e * e + 2) + t;
216
+ },
217
+ easeInQuart: function(e, t, i, r) {
218
+ var n = i - t;
219
+ return n * (e /= r) * e * e * e + t;
220
+ },
221
+ easeOutQuart: function(e, t, i, r) {
222
+ var n = i - t;
223
+ return -n * ((e = e / r - 1) * e * e * e - 1) + t;
224
+ },
225
+ easeInOutQuart: function(e, t, i, r) {
226
+ var n = i - t;
227
+ return (e /= r / 2) < 1 ? n / 2 * e * e * e * e + t : -n / 2 * ((e -= 2) * e * e * e - 2) + t;
228
+ },
229
+ easeInQuint: function(e, t, i, r) {
230
+ var n = i - t;
231
+ return n * (e /= r) * e * e * e * e + t;
232
+ },
233
+ easeOutQuint: function(e, t, i, r) {
234
+ var n = i - t;
235
+ return n * ((e = e / r - 1) * e * e * e * e + 1) + t;
236
+ },
237
+ easeInOutQuint: function(e, t, i, r) {
238
+ var n = i - t;
239
+ return (e /= r / 2) < 1 ? n / 2 * e * e * e * e * e + t : n / 2 * ((e -= 2) * e * e * e * e + 2) + t;
240
+ },
241
+ easeInSine: function(e, t, i, r) {
242
+ var n = i - t;
243
+ return -n * Math.cos(e / r * (Math.PI / 2)) + n + t;
244
+ },
245
+ easeOutSine: function(e, t, i, r) {
246
+ var n = i - t;
247
+ return n * Math.sin(e / r * (Math.PI / 2)) + t;
248
+ },
249
+ easeInOutSine: function(e, t, i, r) {
250
+ var n = i - t;
251
+ return -n / 2 * (Math.cos(Math.PI * e / r) - 1) + t;
252
+ },
253
+ easeInExpo: function(e, t, i, r) {
254
+ var n = i - t;
255
+ return e == 0 ? t : n * Math.pow(2, 10 * (e / r - 1)) + t;
256
+ },
257
+ easeOutExpo: function(e, t, i, r) {
258
+ var n = i - t;
259
+ return e == r ? t + n : n * (-Math.pow(2, -10 * e / r) + 1) + t;
260
+ },
261
+ easeInOutExpo: function(e, t, i, r) {
262
+ var n = i - t;
263
+ return e === 0 ? t : e === r ? t + n : (e /= r / 2) < 1 ? n / 2 * Math.pow(2, 10 * (e - 1)) + t : n / 2 * (-Math.pow(2, -10 * --e) + 2) + t;
264
+ },
265
+ easeInCirc: function(e, t, i, r) {
266
+ var n = i - t;
267
+ return -n * (Math.sqrt(1 - (e /= r) * e) - 1) + t;
268
+ },
269
+ easeOutCirc: function(e, t, i, r) {
270
+ var n = i - t;
271
+ return n * Math.sqrt(1 - (e = e / r - 1) * e) + t;
272
+ },
273
+ easeInOutCirc: function(e, t, i, r) {
274
+ var n = i - t;
275
+ return (e /= r / 2) < 1 ? -n / 2 * (Math.sqrt(1 - e * e) - 1) + t : n / 2 * (Math.sqrt(1 - (e -= 2) * e) + 1) + t;
276
+ },
277
+ easeInElastic: function(e, t, i, r) {
278
+ var n = i - t, c, l, m;
279
+ return m = 1.70158, l = 0, c = n, e === 0 ? t : (e /= r) === 1 ? t + n : (l || (l = r * 0.3), c < Math.abs(n) ? (c = n, m = l / 4) : m = l / (2 * Math.PI) * Math.asin(n / c), -(c * Math.pow(2, 10 * (e -= 1)) * Math.sin((e * r - m) * (2 * Math.PI) / l)) + t);
280
+ },
281
+ easeOutElastic: function(e, t, i, r) {
282
+ var n = i - t, c, l, m;
283
+ return m = 1.70158, l = 0, c = n, e === 0 ? t : (e /= r) === 1 ? t + n : (l || (l = r * 0.3), c < Math.abs(n) ? (c = n, m = l / 4) : m = l / (2 * Math.PI) * Math.asin(n / c), c * Math.pow(2, -10 * e) * Math.sin((e * r - m) * (2 * Math.PI) / l) + n + t);
284
+ },
285
+ easeInOutElastic: function(e, t, i, r) {
286
+ var n = i - t, c, l, m;
287
+ return m = 1.70158, l = 0, c = n, e === 0 ? t : (e /= r / 2) === 2 ? t + n : (l || (l = r * (0.3 * 1.5)), c < Math.abs(n) ? (c = n, m = l / 4) : m = l / (2 * Math.PI) * Math.asin(n / c), e < 1 ? -0.5 * (c * Math.pow(2, 10 * (e -= 1)) * Math.sin((e * r - m) * (2 * Math.PI) / l)) + t : c * Math.pow(2, -10 * (e -= 1)) * Math.sin((e * r - m) * (2 * Math.PI) / l) * 0.5 + n + t);
288
+ },
289
+ easeInBack: function(e, t, i, r, n) {
290
+ var c = i - t;
291
+ return n === void 0 && (n = 1.70158), c * (e /= r) * e * ((n + 1) * e - n) + t;
292
+ },
293
+ easeOutBack: function(e, t, i, r, n) {
294
+ var c = i - t;
295
+ return n === void 0 && (n = 1.70158), c * ((e = e / r - 1) * e * ((n + 1) * e + n) + 1) + t;
296
+ },
297
+ easeInOutBack: function(e, t, i, r, n) {
298
+ var c = i - t;
299
+ return n === void 0 && (n = 1.70158), (e /= r / 2) < 1 ? c / 2 * (e * e * (((n *= 1.525) + 1) * e - n)) + t : c / 2 * ((e -= 2) * e * (((n *= 1.525) + 1) * e + n) + 2) + t;
300
+ },
301
+ easeInBounce: function(e, t, i, r) {
302
+ var n = i - t, c;
303
+ return c = o.easeOutBounce(r - e, 0, n, r), n - c + t;
304
+ },
305
+ easeOutBounce: function(e, t, i, r) {
306
+ var n = i - t;
307
+ return (e /= r) < 1 / 2.75 ? n * (7.5625 * e * e) + t : e < 2 / 2.75 ? n * (7.5625 * (e -= 1.5 / 2.75) * e + 0.75) + t : e < 2.5 / 2.75 ? n * (7.5625 * (e -= 2.25 / 2.75) * e + 0.9375) + t : n * (7.5625 * (e -= 2.625 / 2.75) * e + 0.984375) + t;
308
+ },
309
+ easeInOutBounce: function(e, t, i, r) {
310
+ var n = i - t, c;
311
+ return e < r / 2 ? (c = o.easeInBounce(e * 2, 0, n, r), c * 0.5 + t) : (c = o.easeOutBounce(e * 2 - r, 0, n, r), c * 0.5 + n * 0.5 + t);
312
+ }
313
+ };
314
+ return Oe = o, Oe;
315
+ }
316
+ var dt = ut();
317
+ function ht(o) {
318
+ return o * Math.PI / 180;
319
+ }
320
+ function R(o, e) {
321
+ return o + Math.random() * (e - o);
322
+ }
323
+ function mt(o, e) {
324
+ return Math.floor(o + Math.random() * (e - o + 1));
325
+ }
326
+ var _e;
327
+ (function(o) {
328
+ o[o.Circle = 0] = "Circle", o[o.Square = 1] = "Square", o[o.Strip = 2] = "Strip";
329
+ })(_e || (_e = {}));
330
+ var J;
331
+ (function(o) {
332
+ o[o.Positive = 1] = "Positive", o[o.Negative = -1] = "Negative";
333
+ })(J || (J = {}));
334
+ const ft = 1e3 / 60;
335
+ class pt {
336
+ constructor(e, t, i, r) {
337
+ this.getOptions = t;
338
+ const { colors: n, initialVelocityX: c, initialVelocityY: l } = this.getOptions();
339
+ this.context = e, this.x = i, this.y = r, this.w = R(5, 20), this.h = R(5, 20), this.radius = R(5, 10), this.vx = typeof c == "number" ? R(-c, c) : R(c.min, c.max), this.vy = typeof l == "number" ? R(-l, 0) : R(l.min, l.max), this.shape = mt(0, 2), this.angle = ht(R(0, 360)), this.angularSpin = R(-0.2, 0.2), this.color = n[Math.floor(Math.random() * n.length)], this.rotateY = R(0, 1), this.rotationDirection = R(0, 1) ? J.Positive : J.Negative;
340
+ }
341
+ update(e) {
342
+ const { gravity: t, wind: i, friction: r, opacity: n, drawShape: c } = this.getOptions(), l = e / ft;
343
+ this.x += this.vx * l, this.y += this.vy * l, this.vy += t * l, this.vx += i * l, this.vx *= r ** l, this.vy *= r ** l, this.rotateY >= 1 && this.rotationDirection === J.Positive ? this.rotationDirection = J.Negative : this.rotateY <= -1 && this.rotationDirection === J.Negative && (this.rotationDirection = J.Positive);
344
+ const m = 0.1 * this.rotationDirection * l;
345
+ if (this.rotateY += m, this.angle += this.angularSpin, this.context.save(), this.context.translate(this.x, this.y), this.context.rotate(this.angle), this.context.scale(1, this.rotateY), this.context.rotate(this.angle), this.context.beginPath(), this.context.fillStyle = this.color, this.context.strokeStyle = this.color, this.context.globalAlpha = n, this.context.lineCap = "round", this.context.lineWidth = 2, c && typeof c == "function")
346
+ c.call(this, this.context);
347
+ else
348
+ switch (this.shape) {
349
+ case _e.Circle: {
350
+ this.context.beginPath(), this.context.arc(0, 0, this.radius, 0, 2 * Math.PI), this.context.fill();
351
+ break;
352
+ }
353
+ case _e.Square: {
354
+ this.context.fillRect(-this.w / 2, -this.h / 2, this.w, this.h);
355
+ break;
356
+ }
357
+ case _e.Strip: {
358
+ this.context.fillRect(-this.w / 6, -this.h / 2, this.w / 3, this.h);
359
+ break;
360
+ }
361
+ }
362
+ this.context.closePath(), this.context.restore();
363
+ }
364
+ }
365
+ class vt {
366
+ constructor(e, t) {
367
+ this.x = 0, this.y = 0, this.w = 0, this.h = 0, this.lastNumberOfPieces = 0, this.tweenProgress = 0, this.tweenFrom = 0, this.particles = [], this.particlesGenerated = 0, this.removeParticleAt = (r) => {
368
+ this.particles.splice(r, 1);
369
+ }, this.getParticle = () => {
370
+ const r = R(this.x, this.w + this.x), n = R(this.y, this.h + this.y);
371
+ return new pt(this.context, this.getOptions, r, n);
372
+ }, this.animate = (r) => {
373
+ const { canvas: n, context: c, particlesGenerated: l, lastNumberOfPieces: m } = this, { run: T, recycle: C, numberOfPieces: S, debug: w, tweenFunction: E, tweenDuration: $ } = this.getOptions();
374
+ if (!T)
375
+ return !1;
376
+ const V = this.particles.length, N = C ? V : l;
377
+ if (N < S) {
378
+ m !== S && (this.tweenProgress = 0, this.tweenFrom = N, this.lastNumberOfPieces = S), this.tweenProgress = Math.min($, Math.max(0, this.tweenProgress + r));
379
+ const M = E(this.tweenProgress, this.tweenFrom, S, $), v = Math.round(M - N);
380
+ for (let z = 0; z < v; z++)
381
+ this.particles.push(this.getParticle());
382
+ this.particlesGenerated += v;
383
+ }
384
+ w && (c.font = "12px sans-serif", c.fillStyle = "#333", c.textAlign = "right", c.fillText(`Particles: ${V}`, n.width - 10, n.height - 20));
385
+ for (let M = this.particles.length - 1; M >= 0; M--) {
386
+ const v = this.particles[M];
387
+ v.update(r), (v.y > n.height || v.y < -100 || v.x > n.width + 100 || v.x < -100) && (C && N <= S ? this.particles[M] = this.getParticle() : this.removeParticleAt(M));
388
+ }
389
+ return V > 0 || N < S;
390
+ }, this.canvas = e;
391
+ const i = this.canvas.getContext("2d");
392
+ if (!i)
393
+ throw new Error("Could not get canvas context");
394
+ this.context = i, this.getOptions = t;
395
+ }
396
+ }
397
+ const qe = {
398
+ width: typeof window < "u" ? window.innerWidth : 300,
399
+ height: typeof window < "u" ? window.innerHeight : 200,
400
+ numberOfPieces: 200,
401
+ friction: 0.99,
402
+ wind: 0,
403
+ gravity: 0.1,
404
+ initialVelocityX: 4,
405
+ initialVelocityY: 10,
406
+ colors: [
407
+ "#f44336",
408
+ "#e91e63",
409
+ "#9c27b0",
410
+ "#673ab7",
411
+ "#3f51b5",
412
+ "#2196f3",
413
+ "#03a9f4",
414
+ "#00bcd4",
415
+ "#009688",
416
+ "#4CAF50",
417
+ "#8BC34A",
418
+ "#CDDC39",
419
+ "#FFEB3B",
420
+ "#FFC107",
421
+ "#FF9800",
422
+ "#FF5722",
423
+ "#795548"
424
+ ],
425
+ opacity: 1,
426
+ debug: !1,
427
+ tweenFunction: dt.easeInOutQuad,
428
+ tweenDuration: 5e3,
429
+ recycle: !0,
430
+ run: !0
431
+ };
432
+ class bt {
433
+ constructor(e, t) {
434
+ this.lastFrameTime = 0, this.setOptionsWithDefaults = (r) => {
435
+ const n = {
436
+ confettiSource: {
437
+ x: 0,
438
+ y: 0,
439
+ w: this.canvas.width,
440
+ h: 0
441
+ }
442
+ };
443
+ this._options = {
444
+ ...n,
445
+ ...qe,
446
+ ...r
447
+ }, Object.assign(this, r.confettiSource);
448
+ }, this.update = (r = 0) => {
449
+ const { options: { run: n, onConfettiComplete: c, frameRate: l }, canvas: m, context: T } = this, C = Math.min(r - this.lastFrameTime, 50);
450
+ if (l && C < 1e3 / l) {
451
+ this.rafId = requestAnimationFrame(this.update);
452
+ return;
453
+ }
454
+ this.lastFrameTime = r - (l ? C % l : 0), n && (T.fillStyle = "white", T.clearRect(0, 0, m.width, m.height)), this.generator.animate(C) ? this.rafId = requestAnimationFrame(this.update) : (c && typeof c == "function" && this.generator.particlesGenerated > 0 && c.call(this, this), this._options.run = !1);
455
+ }, this.reset = () => {
456
+ this.generator && this.generator.particlesGenerated > 0 && (this.generator.particlesGenerated = 0, this.generator.particles = [], this.generator.lastNumberOfPieces = 0);
457
+ }, this.stop = () => {
458
+ this.options = { run: !1 }, this.rafId && (cancelAnimationFrame(this.rafId), this.rafId = void 0);
459
+ }, this.canvas = e;
460
+ const i = this.canvas.getContext("2d");
461
+ if (!i)
462
+ throw new Error("Could not get canvas context");
463
+ this.context = i, this.generator = new vt(this.canvas, () => this.options), this.options = t, this.update();
464
+ }
465
+ get options() {
466
+ return this._options;
467
+ }
468
+ set options(e) {
469
+ var r, n;
470
+ const t = (r = this._options) == null ? void 0 : r.run, i = (n = this._options) == null ? void 0 : n.recycle;
471
+ this.setOptionsWithDefaults(e), this.generator && (Object.assign(this.generator, this.options.confettiSource), typeof e.recycle == "boolean" && e.recycle && i === !1 && (this.generator.lastNumberOfPieces = this.generator.particles.length)), typeof e.run == "boolean" && e.run && t === !1 && this.update();
472
+ }
473
+ }
474
+ const _t = Ie.createRef();
475
+ class Ae extends Ie.Component {
476
+ constructor(e) {
477
+ super(e), this.canvas = Ie.createRef(), this.canvas = e.canvasRef || _t;
478
+ }
479
+ componentDidMount() {
480
+ if (this.canvas.current) {
481
+ const e = Me(this.props)[0];
482
+ this.confetti = new bt(this.canvas.current, e);
483
+ }
484
+ }
485
+ componentDidUpdate() {
486
+ const e = Me(this.props)[0];
487
+ this.confetti && (this.confetti.options = e);
488
+ }
489
+ componentWillUnmount() {
490
+ this.confetti && this.confetti.stop(), this.confetti = void 0;
491
+ }
492
+ render() {
493
+ const [e, t] = Me(this.props), i = {
494
+ zIndex: 2,
495
+ position: "absolute",
496
+ pointerEvents: "none",
497
+ top: 0,
498
+ left: 0,
499
+ bottom: 0,
500
+ right: 0,
501
+ ...t.style
502
+ };
503
+ return h("canvas", { width: e.width, height: e.height, ref: this.canvas, ...t, style: i });
504
+ }
505
+ }
506
+ Ae.defaultProps = {
507
+ ...qe
508
+ };
509
+ Ae.displayName = "ReactConfetti";
510
+ function Me(o) {
511
+ const e = {}, t = {}, i = {}, r = [
512
+ ...Object.keys(qe),
513
+ "confettiSource",
514
+ "drawShape",
515
+ "onConfettiComplete",
516
+ "frameRate"
517
+ ], n = ["canvasRef"];
518
+ for (const c in o) {
519
+ const l = o[c];
520
+ r.includes(c) ? e[c] = l : n.includes(c) ? n[c] = l : i[c] = l;
521
+ }
522
+ return [e, i, t];
523
+ }
524
+ const yt = Ie.forwardRef((o, e) => h(Ae, { canvasRef: e, ...o }));
184
525
  /**
185
526
  * @license lucide-react v0.515.0 - ISC
186
527
  *
187
528
  * This source code is licensed under the ISC license.
188
529
  * See the LICENSE file in the root directory of this source tree.
189
530
  */
190
- const Re = (o) => o.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), Oe = (o) => o.replace(
531
+ const wt = (o) => o.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), gt = (o) => o.replace(
191
532
  /^([A-Z])|[\s-_]+(\w)/g,
192
- (l, _, m) => m ? m.toUpperCase() : _.toLowerCase()
193
- ), ve = (o) => {
194
- const l = Oe(o);
195
- return l.charAt(0).toUpperCase() + l.slice(1);
196
- }, Ce = (...o) => o.filter((l, _, m) => !!l && l.trim() !== "" && m.indexOf(l) === _).join(" ").trim(), Le = (o) => {
197
- for (const l in o)
198
- if (l.startsWith("aria-") || l === "role" || l === "title")
533
+ (e, t, i) => i ? i.toUpperCase() : t.toLowerCase()
534
+ ), Qe = (o) => {
535
+ const e = gt(o);
536
+ return e.charAt(0).toUpperCase() + e.slice(1);
537
+ }, He = (...o) => o.filter((e, t, i) => !!e && e.trim() !== "" && i.indexOf(e) === t).join(" ").trim(), xt = (o) => {
538
+ for (const e in o)
539
+ if (e.startsWith("aria-") || e === "role" || e === "title")
199
540
  return !0;
200
541
  };
201
542
  /**
@@ -204,7 +545,7 @@ const Re = (o) => o.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), Oe = (
204
545
  * This source code is licensed under the ISC license.
205
546
  * See the LICENSE file in the root directory of this source tree.
206
547
  */
207
- var Me = {
548
+ var Ct = {
208
549
  xmlns: "http://www.w3.org/2000/svg",
209
550
  width: 24,
210
551
  height: 24,
@@ -221,32 +562,32 @@ var Me = {
221
562
  * This source code is licensed under the ISC license.
222
563
  * See the LICENSE file in the root directory of this source tree.
223
564
  */
224
- const qe = Be(
565
+ const It = Ge(
225
566
  ({
226
567
  color: o = "currentColor",
227
- size: l = 24,
228
- strokeWidth: _ = 2,
229
- absoluteStrokeWidth: m,
230
- className: I = "",
231
- children: h,
232
- iconNode: E,
233
- ...x
234
- }, S) => ye(
568
+ size: e = 24,
569
+ strokeWidth: t = 2,
570
+ absoluteStrokeWidth: i,
571
+ className: r = "",
572
+ children: n,
573
+ iconNode: c,
574
+ ...l
575
+ }, m) => Fe(
235
576
  "svg",
236
577
  {
237
- ref: S,
238
- ...Me,
239
- width: l,
240
- height: l,
578
+ ref: m,
579
+ ...Ct,
580
+ width: e,
581
+ height: e,
241
582
  stroke: o,
242
- strokeWidth: m ? Number(_) * 24 / Number(l) : _,
243
- className: Ce("lucide", I),
244
- ...!h && !Le(x) && { "aria-hidden": "true" },
245
- ...x
583
+ strokeWidth: i ? Number(t) * 24 / Number(e) : t,
584
+ className: He("lucide", r),
585
+ ...!n && !xt(l) && { "aria-hidden": "true" },
586
+ ...l
246
587
  },
247
588
  [
248
- ...E.map(([M, q]) => ye(M, q)),
249
- ...Array.isArray(h) ? h : [h]
589
+ ...c.map(([T, C]) => Fe(T, C)),
590
+ ...Array.isArray(n) ? n : [n]
250
591
  ]
251
592
  )
252
593
  );
@@ -256,20 +597,20 @@ const qe = Be(
256
597
  * This source code is licensed under the ISC license.
257
598
  * See the LICENSE file in the root directory of this source tree.
258
599
  */
259
- const Ae = (o, l) => {
260
- const _ = Be(
261
- ({ className: m, ...I }, h) => ye(qe, {
262
- ref: h,
263
- iconNode: l,
264
- className: Ce(
265
- `lucide-${Re(ve(o))}`,
600
+ const Tt = (o, e) => {
601
+ const t = Ge(
602
+ ({ className: i, ...r }, n) => Fe(It, {
603
+ ref: n,
604
+ iconNode: e,
605
+ className: He(
606
+ `lucide-${wt(Qe(o))}`,
266
607
  `lucide-${o}`,
267
- m
608
+ i
268
609
  ),
269
- ...I
610
+ ...r
270
611
  })
271
612
  );
272
- return _.displayName = ve(o), _;
613
+ return t.displayName = Qe(o), t;
273
614
  };
274
615
  /**
275
616
  * @license lucide-react v0.515.0 - ISC
@@ -277,413 +618,559 @@ const Ae = (o, l) => {
277
618
  * This source code is licensed under the ISC license.
278
619
  * See the LICENSE file in the root directory of this source tree.
279
620
  */
280
- const $e = [
621
+ const Bt = [
281
622
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
282
623
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
283
- ], We = Ae("search", $e), Ve = "_backdrop_1ctfr_1", De = "_backdropOpen_1ctfr_14", je = "_backdropClosed_1ctfr_18", ze = "_panel_1ctfr_22", Ue = "_panelOpen_1ctfr_42", Ee = "_panelClosed_1ctfr_46", Qe = "_header_1ctfr_81", He = "_headerCenter_1ctfr_90", Ke = "_title_1ctfr_98", Ze = "_searchIconButton_1ctfr_107", Ge = "_headerTitleWrap_1ctfr_129", Je = "_headerSearchWrap_1ctfr_133", Xe = "_headerSearchOpen_1ctfr_145", Ye = "_searchBar_1ctfr_157", et = "_searchInput_1ctfr_169", tt = "_searchClearButton_1ctfr_190", nt = "_closeButton_1ctfr_212", rt = "_body_1ctfr_245", at = "_muted_1ctfr_250", ot = "_error_1ctfr_255", lt = "_variants_1ctfr_260", ct = "_variantList_1ctfr_264", st = "_variantRow_1ctfr_272", it = "_variantLeft_1ctfr_280", ut = "_addToBundleButton_1ctfr_287", dt = "_variantThumb_1ctfr_315", mt = "_variantThumbImg_1ctfr_325", ht = "_variantThumbFallback_1ctfr_332", bt = "_variantInfo_1ctfr_342", ft = "_variantName_1ctfr_346", _t = "_variantMeta_1ctfr_355", pt = "_variantPriceRow_1ctfr_363", yt = "_variantCompareAt_1ctfr_370", xt = "_variantPrice_1ctfr_363", gt = "_qtyControls_1ctfr_381", vt = "_qtyButton_1ctfr_387", Bt = "_qtyValue_1ctfr_412", Nt = "_footer_1ctfr_419", Ct = "_boxSummaryWindow_1ctfr_426", Tt = "_boxSummaryRow_1ctfr_443", It = "_boxSlot_1ctfr_451", wt = "_boxItem_1ctfr_459", St = "_boxItemClickable_1ctfr_471", kt = "_boxThresholdLabel_1ctfr_480", Ft = "_boxItemPlaceholder_1ctfr_491", Pt = "_boxItemFilled_1ctfr_497", Rt = "_boxItemThreshold_1ctfr_503", Ot = "_boxItemDiscountText_1ctfr_511", Lt = "_boxItemPlus_1ctfr_519", Mt = "_boxItemImage_1ctfr_526", qt = "_boxItemFallback_1ctfr_533", At = "_cta_1ctfr_544", $t = "_ctaTotals_1ctfr_556", Wt = "_ctaDiscountBadge_1ctfr_564", Vt = "_ctaTotalsWrap_1ctfr_578", Dt = "_ctaTotalsWrapVisible_1ctfr_591", jt = "_ctaTotalsStrike_1ctfr_598", zt = "_ctaTotalsPrice_1ctfr_605", n = {
284
- backdrop: Ve,
285
- backdropOpen: De,
286
- backdropClosed: je,
287
- panel: ze,
288
- panelOpen: Ue,
289
- panelClosed: Ee,
290
- header: Qe,
291
- headerCenter: He,
292
- title: Ke,
293
- searchIconButton: Ze,
294
- headerTitleWrap: Ge,
295
- headerSearchWrap: Je,
296
- headerSearchOpen: Xe,
297
- searchBar: Ye,
298
- searchInput: et,
299
- searchClearButton: tt,
300
- closeButton: nt,
301
- body: rt,
302
- muted: at,
303
- error: ot,
304
- variants: lt,
305
- variantList: ct,
306
- variantRow: st,
307
- variantLeft: it,
308
- addToBundleButton: ut,
309
- variantThumb: dt,
310
- variantThumbImg: mt,
311
- variantThumbFallback: ht,
312
- variantInfo: bt,
313
- variantName: ft,
314
- variantMeta: _t,
315
- variantPriceRow: pt,
316
- variantCompareAt: yt,
317
- variantPrice: xt,
318
- qtyControls: gt,
319
- qtyButton: vt,
320
- qtyValue: Bt,
321
- footer: Nt,
322
- boxSummaryWindow: Ct,
323
- boxSummaryRow: Tt,
324
- boxSlot: It,
325
- boxItem: wt,
326
- boxItemClickable: St,
327
- boxThresholdLabel: kt,
328
- boxItemPlaceholder: Ft,
329
- boxItemFilled: Pt,
330
- boxItemThreshold: Rt,
331
- boxItemDiscountText: Ot,
332
- boxItemPlus: Lt,
333
- boxItemImage: Mt,
334
- boxItemFallback: qt,
335
- cta: At,
336
- ctaTotals: $t,
337
- ctaDiscountBadge: Wt,
338
- ctaTotalsWrap: Vt,
339
- ctaTotalsWrapVisible: Dt,
340
- ctaTotalsStrike: jt,
341
- ctaTotalsPrice: zt
624
+ ], St = Tt("search", Bt), Nt = "_backdrop_jv9mc_1", jt = "_celebrationOverlay_jv9mc_14", Pt = "_celebrationChip_jv9mc_23", Ot = "_backdropOpen_jv9mc_74", Mt = "_backdropClosed_jv9mc_78", kt = "_panel_jv9mc_82", Ft = "_panelOpen_jv9mc_102", Rt = "_panelClosed_jv9mc_106", qt = "_header_jv9mc_145", At = "_headerCenter_jv9mc_154", Dt = "_title_jv9mc_162", Lt = "_searchIconButton_jv9mc_171", Wt = "_headerTitleWrap_jv9mc_193", Et = "_headerSearchWrap_jv9mc_197", $t = "_headerSearchOpen_jv9mc_209", Vt = "_searchBar_jv9mc_221", zt = "_searchInput_jv9mc_233", Ut = "_searchClearButton_jv9mc_254", Qt = "_closeButton_jv9mc_276", Yt = "_body_jv9mc_309", Gt = "_muted_jv9mc_314", Kt = "_error_jv9mc_319", Ht = "_variants_jv9mc_324", Xt = "_variantList_jv9mc_328", Jt = "_variantRow_jv9mc_336", Zt = "_variantLeft_jv9mc_344", en = "_addToBundleButton_jv9mc_351", tn = "_variantThumb_jv9mc_379", nn = "_variantThumbImg_jv9mc_389", rn = "_variantThumbFallback_jv9mc_396", on = "_variantInfo_jv9mc_406", an = "_variantName_jv9mc_410", sn = "_variantMeta_jv9mc_419", cn = "_variantPriceRow_jv9mc_427", ln = "_variantCompareAt_jv9mc_434", un = "_variantPrice_jv9mc_427", dn = "_qtyControls_jv9mc_445", hn = "_qtyButton_jv9mc_451", mn = "_qtyValue_jv9mc_476", fn = "_footer_jv9mc_483", pn = "_boxSummaryWindow_jv9mc_490", vn = "_boxSummaryRow_jv9mc_507", bn = "_boxSlot_jv9mc_515", _n = "_boxItem_jv9mc_523", yn = "_boxItemClickable_jv9mc_535", wn = "_boxThresholdLabel_jv9mc_544", gn = "_boxItemPlaceholder_jv9mc_555", xn = "_boxItemFilled_jv9mc_561", Cn = "_boxItemThreshold_jv9mc_567", In = "_boxItemDiscountText_jv9mc_575", Tn = "_boxItemPlus_jv9mc_583", Bn = "_boxItemImage_jv9mc_590", Sn = "_boxItemFallback_jv9mc_597", Nn = "_cta_jv9mc_608", jn = "_ctaTotals_jv9mc_620", Pn = "_ctaDiscountBadge_jv9mc_628", On = "_ctaTotalsWrap_jv9mc_642", Mn = "_ctaTotalsWrapVisible_jv9mc_655", kn = "_ctaTotalsStrike_jv9mc_662", Fn = "_ctaTotalsPrice_jv9mc_669", u = {
625
+ backdrop: Nt,
626
+ celebrationOverlay: jt,
627
+ celebrationChip: Pt,
628
+ backdropOpen: Ot,
629
+ backdropClosed: Mt,
630
+ panel: kt,
631
+ panelOpen: Ft,
632
+ panelClosed: Rt,
633
+ header: qt,
634
+ headerCenter: At,
635
+ title: Dt,
636
+ searchIconButton: Lt,
637
+ headerTitleWrap: Wt,
638
+ headerSearchWrap: Et,
639
+ headerSearchOpen: $t,
640
+ searchBar: Vt,
641
+ searchInput: zt,
642
+ searchClearButton: Ut,
643
+ closeButton: Qt,
644
+ body: Yt,
645
+ muted: Gt,
646
+ error: Kt,
647
+ variants: Ht,
648
+ variantList: Xt,
649
+ variantRow: Jt,
650
+ variantLeft: Zt,
651
+ addToBundleButton: en,
652
+ variantThumb: tn,
653
+ variantThumbImg: nn,
654
+ variantThumbFallback: rn,
655
+ variantInfo: on,
656
+ variantName: an,
657
+ variantMeta: sn,
658
+ variantPriceRow: cn,
659
+ variantCompareAt: ln,
660
+ variantPrice: un,
661
+ qtyControls: dn,
662
+ qtyButton: hn,
663
+ qtyValue: mn,
664
+ footer: fn,
665
+ boxSummaryWindow: pn,
666
+ boxSummaryRow: vn,
667
+ boxSlot: bn,
668
+ boxItem: _n,
669
+ boxItemClickable: yn,
670
+ boxThresholdLabel: wn,
671
+ boxItemPlaceholder: gn,
672
+ boxItemFilled: xn,
673
+ boxItemThreshold: Cn,
674
+ boxItemDiscountText: In,
675
+ boxItemPlus: Tn,
676
+ boxItemImage: Bn,
677
+ boxItemFallback: Sn,
678
+ cta: Nn,
679
+ ctaTotals: jn,
680
+ ctaDiscountBadge: Pn,
681
+ ctaTotalsWrap: On,
682
+ ctaTotalsWrapVisible: Mn,
683
+ ctaTotalsStrike: kn,
684
+ ctaTotalsPrice: Fn
342
685
  };
343
- function Zt(o) {
344
- var ue;
686
+ function Vn(o) {
687
+ var Ve;
345
688
  const {
346
- isOpen: l,
347
- close: _,
348
- loading: m,
349
- submitting: I,
350
- error: h,
351
- currencyCode: E,
352
- config: x,
353
- eligibleVariants: S,
354
- selections: M,
355
- selectionOrder: q,
356
- setQuantity: J,
357
- bundleSize: g,
358
- minRequired: Q,
359
- canSubmit: X,
360
- submit: le
361
- } = xe(), [P, Y] = F(!1), [f, ee] = F(""), te = Z(null), ne = (e) => {
362
- const t = (e ?? []).filter((a) => {
363
- var b, u;
364
- const i = (b = a == null ? void 0 : a.name) == null ? void 0 : b.trim(), c = (u = a == null ? void 0 : a.value) == null ? void 0 : u.trim();
365
- return !(!i || !c || i.toLowerCase() === "title");
689
+ isOpen: e,
690
+ close: t,
691
+ loading: i,
692
+ submitting: r,
693
+ error: n,
694
+ currencyCode: c,
695
+ config: l,
696
+ eligibleVariants: m,
697
+ selections: T,
698
+ selectionOrder: C,
699
+ setQuantity: S,
700
+ bundleSize: w,
701
+ minRequired: E,
702
+ canSubmit: $,
703
+ submit: V
704
+ } = Re(), [N, M] = I(!1), [v, z] = I(""), ie = A(null), ue = A(null), de = A(null), [Z, ye] = I(() => typeof window > "u" ? { width: 0, height: 0 } : { width: window.innerWidth, height: window.innerHeight }), [we, oe] = I(0), [he, ge] = I(null), [ae, U] = I(!1), Q = A(null), ee = A(w), te = 7e3, [ne, xe] = I(0), [se, x] = I(null), [j, O] = I(!1), b = A(null), F = 2800, Y = (a) => {
705
+ const s = (a ?? []).filter((d) => {
706
+ var y, _;
707
+ const p = (y = d == null ? void 0 : d.name) == null ? void 0 : y.trim(), f = (_ = d == null ? void 0 : d.value) == null ? void 0 : _.trim();
708
+ return !(!p || !f || p.toLowerCase() === "title");
366
709
  });
367
- return t.length ? t.map((a) => `${a.name}: ${a.value}`).join(" · ") : null;
368
- }, ce = (e) => {
369
- var t;
370
- return ((t = e.product) == null ? void 0 : t.title) ?? e.displayName ?? e.title;
371
- }, me = (e) => {
372
- const t = ce(e), a = ne(e.selectedOptions);
373
- return [t, a].filter(Boolean).join(" — ");
374
- }, [he, se] = F(l), w = Z(null), $ = (e) => {
375
- const t = Number(e);
376
- if (!Number.isFinite(t)) return e;
377
- if (E)
710
+ return s.length ? s.map((d) => `${d.name}: ${d.value}`).join(" · ") : null;
711
+ }, K = (a) => {
712
+ var s;
713
+ return ((s = a.product) == null ? void 0 : s.title) ?? a.displayName ?? a.title;
714
+ }, ce = (a) => {
715
+ const s = K(a), d = Y(a.selectedOptions);
716
+ return [s, d].filter(Boolean).join(" — ");
717
+ }, [me, H] = I(e), L = A(null), X = (a) => {
718
+ const s = Number(a);
719
+ if (!Number.isFinite(s)) return a;
720
+ if (c)
378
721
  try {
379
- return new Intl.NumberFormat(void 0, { style: "currency", currency: E }).format(t);
722
+ return new Intl.NumberFormat(void 0, { style: "currency", currency: c }).format(s);
380
723
  } catch {
381
724
  }
382
- return `$${t.toFixed(2)}`;
383
- }, be = ((ue = x == null ? void 0 : x.title) == null ? void 0 : ue.trim()) || "Build your bundle", W = y(() => [...S].sort((e, t) => e.displayName.localeCompare(t.displayName)), [S]), V = y(() => {
384
- const e = f.trim().toLowerCase();
385
- if (!e) return W;
386
- const t = e.split(/\s+/).filter(Boolean), a = (i) => {
387
- var u;
388
- const c = [];
389
- c.push(i.displayName), (u = i.product) != null && u.title && c.push(i.product.title);
390
- for (const p of i.selectedOptions ?? [])
391
- c.push(p.name), c.push(p.value);
392
- const b = c.join(" ").toLowerCase();
393
- return t.every((p) => b.includes(p));
725
+ return `$${s.toFixed(2)}`;
726
+ }, Xe = ((Ve = l == null ? void 0 : l.title) == null ? void 0 : Ve.trim()) || "Build your bundle", Te = B(() => [...m].sort((a, s) => a.displayName.localeCompare(s.displayName)), [m]), Je = B(() => {
727
+ const a = v.trim().toLowerCase();
728
+ if (!a) return Te;
729
+ const s = a.split(/\s+/).filter(Boolean), d = (p) => {
730
+ var _;
731
+ const f = [];
732
+ f.push(p.displayName), (_ = p.product) != null && _.title && f.push(p.product.title);
733
+ for (const g of p.selectedOptions ?? [])
734
+ f.push(g.name), f.push(g.value);
735
+ const y = f.join(" ").toLowerCase();
736
+ return s.every((g) => y.includes(g));
394
737
  };
395
- return W.filter(a);
396
- }, [f, W]), v = y(() => [...(x == null ? void 0 : x.rules) ?? []].sort((e, t) => e.minBundleSize - t.minBundleSize), [x == null ? void 0 : x.rules]), R = y(() => Math.max(0, Q - g), [g, Q]), D = y(() => {
397
- let e = null;
398
- for (const t of v)
399
- g >= t.minBundleSize && (e = t);
400
- return e;
401
- }, [g, v]), k = y(() => {
402
- if (!D) return null;
403
- const e = Number.parseFloat(D.discountPercent);
404
- return !Number.isFinite(e) || e <= 0 ? null : e;
405
- }, [D]), fe = y(() => {
406
- const e = v[0];
407
- if (!e) return null;
408
- const t = Number.parseFloat(e.discountPercent);
409
- return !Number.isFinite(t) || t <= 0 ? null : t;
410
- }, [v]), ie = k ?? fe, d = y(() => {
411
- const e = new Map(S.map((a) => [a.id, a]));
412
- let t = 0;
413
- for (const [a, i] of Object.entries(M)) {
414
- const c = i ?? 0;
415
- if (c <= 0) continue;
416
- const b = e.get(a), u = Number(b == null ? void 0 : b.price);
417
- Number.isFinite(u) && (t += u * c);
738
+ return Te.filter(d);
739
+ }, [v, Te]), k = B(() => [...(l == null ? void 0 : l.rules) ?? []].sort((a, s) => a.minBundleSize - s.minBundleSize), [l == null ? void 0 : l.rules]), fe = B(() => Math.max(0, E - w), [w, E]), Be = B(() => {
740
+ let a = null;
741
+ for (const s of k)
742
+ w >= s.minBundleSize && (a = s);
743
+ return a;
744
+ }, [w, k]), pe = B(() => {
745
+ if (!Be) return null;
746
+ const a = Number.parseFloat(Be.discountPercent);
747
+ return !Number.isFinite(a) || a <= 0 ? null : a;
748
+ }, [Be]), Ze = B(() => {
749
+ const a = k[0];
750
+ if (!a) return null;
751
+ const s = Number.parseFloat(a.discountPercent);
752
+ return !Number.isFinite(s) || s <= 0 ? null : s;
753
+ }, [k]), Se = pe ?? Ze, ve = B(() => {
754
+ const a = new Map(m.map((d) => [d.id, d]));
755
+ let s = 0;
756
+ for (const [d, p] of Object.entries(T)) {
757
+ const f = p ?? 0;
758
+ if (f <= 0) continue;
759
+ const y = a.get(d), _ = Number(y == null ? void 0 : y.price);
760
+ Number.isFinite(_) && (s += _ * f);
418
761
  }
419
- return Math.round(t * 100) / 100;
420
- }, [S, M]), C = y(() => {
421
- if (!k) return d;
422
- const e = d * (1 - k / 100);
423
- return Math.round(e * 100) / 100;
424
- }, [k, d]), B = y(() => v.length ? Math.max(...v.map((e) => e.minBundleSize)) : 0, [v]), s = y(() => {
425
- const e = new Map(S.map((t) => [t.id, t]));
426
- return q.map((t) => e.get(t)).filter((t) => !!t);
427
- }, [S, q]), T = y(() => {
428
- var t;
429
- const e = /* @__PURE__ */ new Map();
430
- for (const a of v) {
431
- const i = Math.max(0, a.minBundleSize - 1);
432
- e.set(i, {
433
- discountPercent: a.discountPercent,
434
- minBundleSize: a.minBundleSize,
435
- label: ((t = a.label) == null ? void 0 : t.trim()) || `Buy ${a.minBundleSize}+`
762
+ return Math.round(s * 100) / 100;
763
+ }, [m, T]), et = B(() => {
764
+ if (!pe) return ve;
765
+ const a = ve * (1 - pe / 100);
766
+ return Math.round(a * 100) / 100;
767
+ }, [pe, ve]), De = B(() => k.length ? Math.max(...k.map((a) => a.minBundleSize)) : 0, [k]), Ne = B(() => {
768
+ const a = new Map(m.map((s) => [s.id, s]));
769
+ return C.map((s) => a.get(s)).filter((s) => !!s);
770
+ }, [m, C]), tt = B(() => {
771
+ var s;
772
+ const a = /* @__PURE__ */ new Map();
773
+ for (const d of k) {
774
+ const p = Math.max(0, d.minBundleSize - 1);
775
+ a.set(p, {
776
+ discountPercent: d.discountPercent,
777
+ minBundleSize: d.minBundleSize,
778
+ label: ((s = d.label) == null ? void 0 : s.trim()) || `Buy ${d.minBundleSize}+`
436
779
  });
437
780
  }
438
- return e;
439
- }, [v]), j = y(() => Math.max(B || Q, s.length), [s.length, B, Q]), z = Z(null), H = Z(null), re = Z(null), U = Z(g), ae = (e) => {
440
- const t = H.current;
441
- if (!t) return;
442
- const a = t.querySelector(`[data-variant-row="${e}"]`);
443
- if (!a) return;
444
- const i = t.getBoundingClientRect(), c = a.getBoundingClientRect(), b = 8;
445
- if (c.top >= i.top + b && c.bottom <= i.bottom - b) return;
446
- const p = Math.max(0, t.scrollHeight - t.clientHeight), O = c.top - i.top + c.height / 2, L = t.scrollTop + O - t.clientHeight / 2, A = Math.min(p, Math.max(0, L));
447
- t.scrollTo({ top: A, behavior: "smooth" });
781
+ return a;
782
+ }, [k]), nt = B(() => Math.max(De || E, Ne.length), [Ne.length, De, E]), je = A(null), Le = A(null), We = A(null), Ee = A(w), $e = (a) => {
783
+ const s = Le.current;
784
+ if (!s) return;
785
+ const d = s.querySelector(`[data-variant-row="${a}"]`);
786
+ if (!d) return;
787
+ const p = s.getBoundingClientRect(), f = d.getBoundingClientRect(), y = 8;
788
+ if (f.top >= p.top + y && f.bottom <= p.bottom - y) return;
789
+ const g = Math.max(0, s.scrollHeight - s.clientHeight), q = f.top - p.top + f.height / 2, W = s.scrollTop + q - s.clientHeight / 2, G = Math.min(g, Math.max(0, W));
790
+ s.scrollTo({ top: G, behavior: "smooth" });
448
791
  };
449
- return G(() => {
450
- if (!l) return;
451
- const e = (t) => {
452
- t.key === "Escape" && _();
792
+ return D(() => {
793
+ if (!e) return;
794
+ const a = (s) => {
795
+ s.key === "Escape" && t();
453
796
  };
454
- return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
455
- }, [_, l]), G(() => {
456
- if (w.current != null && (window.clearTimeout(w.current), w.current = null), l) {
457
- se(!0);
797
+ return window.addEventListener("keydown", a), () => window.removeEventListener("keydown", a);
798
+ }, [t, e]), D(() => {
799
+ if (typeof window > "u") return;
800
+ const a = () => ye({ width: window.innerWidth, height: window.innerHeight });
801
+ return a(), window.addEventListener("resize", a), () => window.removeEventListener("resize", a);
802
+ }, []), D(() => {
803
+ if (L.current != null && (window.clearTimeout(L.current), L.current = null), e) {
804
+ H(!0);
458
805
  return;
459
806
  }
460
- w.current = window.setTimeout(() => {
461
- se(!1), w.current = null;
807
+ L.current = window.setTimeout(() => {
808
+ H(!1), L.current = null;
462
809
  }, 220);
463
- }, [l]), G(() => () => {
464
- w.current != null && window.clearTimeout(w.current);
465
- }, []), G(() => {
466
- if (!l || !P) return;
467
- const e = requestAnimationFrame(() => {
468
- var t;
469
- return (t = te.current) == null ? void 0 : t.focus();
810
+ }, [e]), D(() => () => {
811
+ L.current != null && window.clearTimeout(L.current);
812
+ }, []), D(() => () => {
813
+ Q.current != null && window.clearTimeout(Q.current);
814
+ }, []), D(() => () => {
815
+ b.current != null && window.clearTimeout(b.current);
816
+ }, []), D(() => {
817
+ if (!e || !N) return;
818
+ const a = requestAnimationFrame(() => {
819
+ var s;
820
+ return (s = ie.current) == null ? void 0 : s.focus();
470
821
  });
471
- return () => cancelAnimationFrame(e);
472
- }, [l, P]), G(() => {
473
- const e = U.current;
474
- if (U.current = g, g <= e) return;
475
- const t = re.current;
476
- if (!t) return;
477
- const a = v.some((u) => u.minBundleSize === g), i = v.find((u) => u.minBundleSize > g), c = i && a ? i.minBundleSize - 1 : i ? null : g - 1;
478
- if (c == null || c < 0) return;
479
- const b = requestAnimationFrame(() => {
480
- const u = t.querySelector(`[data-box-slot="${c}"]`);
481
- if (!u) return;
482
- const p = t.getBoundingClientRect(), L = u.getBoundingClientRect().right - p.right;
483
- if (L <= 1) return;
484
- const A = Math.max(0, t.scrollWidth - t.clientWidth), K = Math.min(A, Math.max(0, t.scrollLeft + L));
485
- t.scrollTo({ left: K, behavior: "smooth" });
822
+ return () => cancelAnimationFrame(a);
823
+ }, [e, N]), D(() => {
824
+ const a = Ee.current;
825
+ if (Ee.current = w, w <= a) return;
826
+ const s = We.current;
827
+ if (!s) return;
828
+ const d = k.some((_) => _.minBundleSize === w), p = k.find((_) => _.minBundleSize > w), f = p && d ? p.minBundleSize - 1 : p ? null : w - 1;
829
+ if (f == null || f < 0) return;
830
+ const y = requestAnimationFrame(() => {
831
+ const _ = s.querySelector(`[data-box-slot="${f}"]`);
832
+ if (!_) return;
833
+ const g = s.getBoundingClientRect(), W = _.getBoundingClientRect().right - g.right;
834
+ if (W <= 1) return;
835
+ const G = Math.max(0, s.scrollWidth - s.clientWidth), re = Math.min(G, Math.max(0, s.scrollLeft + W));
836
+ s.scrollTo({ left: re, behavior: "smooth" });
486
837
  });
487
- return () => cancelAnimationFrame(b);
488
- }, [g, v]), G(() => {
489
- var e;
490
- l && ((e = z.current) == null || e.focus());
491
- }, [l]), he ? /* @__PURE__ */ r(
838
+ return () => cancelAnimationFrame(y);
839
+ }, [w, k]), D(() => {
840
+ if (!e) return;
841
+ const a = ee.current;
842
+ if (ee.current = w, w <= a) return;
843
+ const s = k.find((d) => d.minBundleSize === w);
844
+ s && (x(`You received a ${s.discountPercent}% discount!`), xe((d) => d + 1), O(!0), b.current != null && window.clearTimeout(b.current), b.current = window.setTimeout(() => {
845
+ O(!1), b.current = null;
846
+ }, F));
847
+ }, [w, e, k]), D(() => {
848
+ if (!e || !j || !se) return;
849
+ const a = requestAnimationFrame(() => {
850
+ var g;
851
+ const s = de.current, d = s == null ? void 0 : s.getBoundingClientRect(), p = (g = je.current) == null ? void 0 : g.getBoundingClientRect(), f = d ? d.left + d.width / 2 : p ? p.left + p.width / 2 : window.innerWidth / 2, y = d ? d.top + d.height / 2 : p ? p.top + p.height / 2 : window.innerHeight / 2, _ = {
852
+ x: f - 2,
853
+ y: y - 2,
854
+ w: 4,
855
+ h: 4
856
+ };
857
+ ge(_), oe((q) => q + 1), U(!0), Q.current != null && window.clearTimeout(Q.current), Q.current = window.setTimeout(() => {
858
+ U(!1), Q.current = null;
859
+ }, te);
860
+ });
861
+ return () => cancelAnimationFrame(a);
862
+ }, [ne, se, te, j, e]), D(() => {
863
+ var a;
864
+ e && ((a = je.current) == null || a.focus());
865
+ }, [e]), me ? /* @__PURE__ */ P(
492
866
  "div",
493
867
  {
494
868
  role: "dialog",
495
869
  "aria-modal": "true",
496
870
  "aria-label": "Bundle builder",
497
- className: [n.backdrop, l ? n.backdropOpen : n.backdropClosed, o.className].filter(Boolean).join(" "),
498
- onMouseDown: (e) => {
499
- e.target === e.currentTarget && _();
871
+ className: [u.backdrop, e ? u.backdropOpen : u.backdropClosed, o.className].filter(Boolean).join(" "),
872
+ onMouseDown: (a) => {
873
+ a.target === a.currentTarget && t();
500
874
  },
501
- children: /* @__PURE__ */ N("aside", { ref: z, className: [n.panel, l ? n.panelOpen : n.panelClosed].filter(Boolean).join(" "), tabIndex: -1, children: [
502
- /* @__PURE__ */ N("header", { className: [n.header, P ? n.headerSearchOpen : null].filter(Boolean).join(" "), children: [
503
- /* @__PURE__ */ r(
504
- "button",
505
- {
506
- type: "button",
507
- className: n.searchIconButton,
508
- "aria-label": P ? "Search (expanded)" : "Search",
509
- "aria-expanded": P,
510
- onClick: () => {
511
- Y(!0);
512
- },
513
- children: /* @__PURE__ */ r(We, { size: 18, "aria-hidden": "true" })
514
- }
515
- ),
516
- /* @__PURE__ */ N("div", { className: n.headerCenter, children: [
517
- /* @__PURE__ */ r("div", { className: n.headerTitleWrap, "aria-hidden": P, children: /* @__PURE__ */ r("h2", { className: n.title, children: be }) }),
518
- /* @__PURE__ */ r("div", { className: n.headerSearchWrap, "aria-hidden": !P, children: /* @__PURE__ */ N("div", { className: n.searchBar, children: [
519
- /* @__PURE__ */ r(
520
- "input",
521
- {
522
- ref: te,
523
- className: n.searchInput,
524
- type: "search",
525
- value: f,
526
- placeholder: "Search",
527
- onChange: (e) => ee(e.target.value),
528
- onBlur: () => {
529
- f.trim() === "" && Y(!1);
530
- }
531
- }
532
- ),
533
- f.trim() ? /* @__PURE__ */ r(
534
- "button",
535
- {
536
- type: "button",
537
- className: n.searchClearButton,
538
- onMouseDown: (e) => {
539
- e.preventDefault();
540
- },
541
- onClick: () => {
542
- var e;
543
- ee(""), (e = te.current) == null || e.focus();
544
- },
545
- "aria-label": "Clear search",
546
- children: "Clear"
547
- }
548
- ) : null
549
- ] }) })
550
- ] }),
551
- /* @__PURE__ */ r("button", { type: "button", onClick: _, disabled: I, className: n.closeButton, "aria-label": "Close", children: "×" })
552
- ] }),
553
- /* @__PURE__ */ N("div", { className: n.body, ref: H, children: [
554
- m ? /* @__PURE__ */ r("p", { className: n.muted, children: "Loading…" }) : null,
555
- h ? /* @__PURE__ */ r("p", { className: n.error, children: h }) : null,
556
- !m && x && !x.isActive ? /* @__PURE__ */ r("p", { className: n.error, children: "Bundles are not active." }) : null,
557
- /* @__PURE__ */ r("div", { className: n.variants, children: /* @__PURE__ */ r("ul", { className: n.variantList, children: V.map((e) => {
558
- var L, A, K, de;
559
- const t = M[e.id] ?? 0, a = ce(e), i = ne(e.selectedOptions), c = me(e), b = ie, u = Number(e.price), p = b != null && Number.isFinite(b) && b > 0 && Number.isFinite(u), O = p ? Math.round(u * (1 - b / 100) * 100) / 100 : null;
560
- return /* @__PURE__ */ N("li", { className: n.variantRow, "data-variant-row": e.id, children: [
561
- /* @__PURE__ */ N("div", { className: n.variantLeft, children: [
562
- /* @__PURE__ */ r("div", { className: n.variantThumb, "aria-hidden": "true", children: (L = e.image) != null && L.url ? /* @__PURE__ */ r(
563
- "img",
875
+ children: [
876
+ ae && he && Z.width > 0 && Z.height > 0 ? /* @__PURE__ */ h(
877
+ yt,
878
+ {
879
+ width: Z.width,
880
+ height: Z.height,
881
+ confettiSource: he,
882
+ colors: [
883
+ "#2563eb",
884
+ // blue-600
885
+ "#3b82f6",
886
+ // blue-500
887
+ "#60a5fa",
888
+ // blue-400
889
+ "#93c5fd",
890
+ // blue-300
891
+ "#bae6fd",
892
+ // blue-200
893
+ "#e0f2fe"
894
+ // blue-100
895
+ ],
896
+ recycle: !1,
897
+ numberOfPieces: 70,
898
+ tweenDuration: 100,
899
+ gravity: 0.45,
900
+ initialVelocityY: { min: -10, max: -30 },
901
+ initialVelocityX: { min: -6, max: 6 },
902
+ style: { position: "fixed", inset: 0, pointerEvents: "none", zIndex: 2147483646 }
903
+ },
904
+ we
905
+ ) : null,
906
+ /* @__PURE__ */ P("aside", { ref: je, className: [u.panel, e ? u.panelOpen : u.panelClosed].filter(Boolean).join(" "), tabIndex: -1, children: [
907
+ j && se ? /* @__PURE__ */ h("div", { className: u.celebrationOverlay, "aria-hidden": "true", children: /* @__PURE__ */ h("div", { ref: de, className: u.celebrationChip, children: se }, ne) }) : null,
908
+ /* @__PURE__ */ P("header", { className: [u.header, N ? u.headerSearchOpen : null].filter(Boolean).join(" "), children: [
909
+ /* @__PURE__ */ h(
910
+ "button",
911
+ {
912
+ type: "button",
913
+ className: u.searchIconButton,
914
+ "aria-label": N ? "Search (expanded)" : "Search",
915
+ "aria-expanded": N,
916
+ onClick: () => {
917
+ M(!0);
918
+ },
919
+ children: /* @__PURE__ */ h(St, { size: 18, "aria-hidden": "true" })
920
+ }
921
+ ),
922
+ /* @__PURE__ */ P("div", { className: u.headerCenter, children: [
923
+ /* @__PURE__ */ h("div", { className: u.headerTitleWrap, "aria-hidden": N, children: /* @__PURE__ */ h("h2", { className: u.title, children: Xe }) }),
924
+ /* @__PURE__ */ h("div", { className: u.headerSearchWrap, "aria-hidden": !N, children: /* @__PURE__ */ P("div", { className: u.searchBar, children: [
925
+ /* @__PURE__ */ h(
926
+ "input",
564
927
  {
565
- className: n.variantThumbImg,
566
- src: e.image.url,
567
- alt: e.image.altText ?? c,
568
- loading: "lazy"
569
- }
570
- ) : /* @__PURE__ */ r("div", { className: n.variantThumbFallback, children: ((de = (K = (A = e.product) == null ? void 0 : A.title) == null ? void 0 : K.slice(0, 1)) == null ? void 0 : de.toUpperCase()) ?? "•" }) }),
571
- /* @__PURE__ */ N("div", { className: n.variantInfo, children: [
572
- /* @__PURE__ */ r("div", { className: n.variantName, children: a }),
573
- i ? /* @__PURE__ */ r("div", { className: n.variantMeta, children: i }) : null,
574
- /* @__PURE__ */ N("div", { className: n.variantPriceRow, children: [
575
- p ? /* @__PURE__ */ r("span", { className: n.variantCompareAt, children: $(Number.isFinite(u) ? u.toFixed(2) : e.price) }) : null,
576
- /* @__PURE__ */ r("span", { className: n.variantPrice, children: $(
577
- O != null ? O.toFixed(2) : Number.isFinite(u) ? u.toFixed(2) : e.price
578
- ) })
579
- ] })
580
- ] })
581
- ] }),
582
- t <= 0 ? /* @__PURE__ */ r(
583
- "button",
584
- {
585
- type: "button",
586
- onClick: () => J(e.id, 1),
587
- disabled: I,
588
- className: n.addToBundleButton,
589
- "aria-label": `Add ${c} to bundle`,
590
- children: "Add"
591
- }
592
- ) : /* @__PURE__ */ N("div", { className: n.qtyControls, children: [
593
- /* @__PURE__ */ r(
594
- "button",
595
- {
596
- type: "button",
597
- onClick: () => J(e.id, t - 1),
598
- disabled: I || t <= 0,
599
- className: n.qtyButton,
600
- "aria-label": `Decrease ${c}`,
601
- children: "−"
928
+ ref: ie,
929
+ className: u.searchInput,
930
+ type: "search",
931
+ value: v,
932
+ placeholder: "Search",
933
+ onChange: (a) => z(a.target.value),
934
+ onBlur: () => {
935
+ v.trim() === "" && M(!1);
936
+ }
602
937
  }
603
938
  ),
604
- /* @__PURE__ */ r("span", { className: n.qtyValue, "aria-label": `Quantity ${t}`, children: t }),
605
- /* @__PURE__ */ r(
939
+ v.trim() ? /* @__PURE__ */ h(
606
940
  "button",
607
941
  {
608
942
  type: "button",
609
- onClick: () => J(e.id, t + 1),
610
- disabled: I,
611
- className: n.qtyButton,
612
- "aria-label": `Increase ${c}`,
613
- children: "+"
943
+ className: u.searchClearButton,
944
+ onMouseDown: (a) => {
945
+ a.preventDefault();
946
+ },
947
+ onClick: () => {
948
+ var a;
949
+ z(""), (a = ie.current) == null || a.focus();
950
+ },
951
+ "aria-label": "Clear search",
952
+ children: "Clear"
614
953
  }
615
- )
616
- ] })
617
- ] }, e.id);
618
- }) }) })
619
- ] }),
620
- /* @__PURE__ */ N("footer", { className: n.footer, children: [
621
- /* @__PURE__ */ r("div", { className: n.boxSummaryWindow, ref: re, children: /* @__PURE__ */ r("div", { className: n.boxSummaryRow, "aria-label": "Bundle box summary", children: Array.from({ length: j }).map((e, t) => {
622
- var L, A, K, de;
623
- const a = s[t], i = T.get(t), c = !!a, b = !!i, u = b && !c, p = i ? `${i.discountPercent}% off` : null, O = c ? a.displayName : `Slot ${t + 1}`;
624
- return /* @__PURE__ */ N("div", { "data-box-slot": t, className: n.boxSlot, children: [
625
- /* @__PURE__ */ r(
626
- "div",
627
- {
628
- className: [
629
- n.boxItem,
630
- c ? n.boxItemFilled : n.boxItemPlaceholder,
631
- b ? n.boxItemThreshold : null,
632
- c ? n.boxItemClickable : null
633
- ].filter(Boolean).join(" "),
634
- role: c ? "button" : void 0,
635
- tabIndex: c ? 0 : void 0,
636
- onClick: c ? () => ae(a.id) : void 0,
637
- onKeyDown: c ? (pe) => {
638
- (pe.key === "Enter" || pe.key === " ") && (pe.preventDefault(), ae(a.id));
639
- } : void 0,
640
- "aria-label": u && p ? `${O}. Unlocks ${p}.` : O,
641
- title: u && p ? `${O} • Unlocks ${p}` : O,
642
- children: c ? (L = a.image) != null && L.url ? /* @__PURE__ */ r(
954
+ ) : null
955
+ ] }) })
956
+ ] }),
957
+ /* @__PURE__ */ h("button", { type: "button", onClick: t, disabled: r, className: u.closeButton, "aria-label": "Close", children: "×" })
958
+ ] }),
959
+ /* @__PURE__ */ P("div", { className: u.body, ref: Le, children: [
960
+ i ? /* @__PURE__ */ h("p", { className: u.muted, children: "Loading…" }) : null,
961
+ n ? /* @__PURE__ */ h("p", { className: u.error, children: n }) : null,
962
+ !i && l && !l.isActive ? /* @__PURE__ */ h("p", { className: u.error, children: "Bundles are not active." }) : null,
963
+ /* @__PURE__ */ h("div", { className: u.variants, children: /* @__PURE__ */ h("ul", { className: u.variantList, children: Je.map((a) => {
964
+ var W, G, re, be;
965
+ const s = T[a.id] ?? 0, d = K(a), p = Y(a.selectedOptions), f = ce(a), y = Se, _ = Number(a.price), g = y != null && Number.isFinite(y) && y > 0 && Number.isFinite(_), q = g ? Math.round(_ * (1 - y / 100) * 100) / 100 : null;
966
+ return /* @__PURE__ */ P("li", { className: u.variantRow, "data-variant-row": a.id, children: [
967
+ /* @__PURE__ */ P("div", { className: u.variantLeft, children: [
968
+ /* @__PURE__ */ h("div", { className: u.variantThumb, "aria-hidden": "true", children: (W = a.image) != null && W.url ? /* @__PURE__ */ h(
643
969
  "img",
644
970
  {
645
- className: n.boxItemImage,
971
+ className: u.variantThumbImg,
646
972
  src: a.image.url,
647
- alt: a.image.altText ?? a.displayName,
973
+ alt: a.image.altText ?? f,
648
974
  loading: "lazy"
649
975
  }
650
- ) : /* @__PURE__ */ r("div", { className: n.boxItemFallback, "aria-hidden": "true", children: ((de = (K = (A = a.product) == null ? void 0 : A.title) == null ? void 0 : K.slice(0, 1)) == null ? void 0 : de.toUpperCase()) ?? "•" }) : u && p ? /* @__PURE__ */ r("div", { className: n.boxItemDiscountText, children: p }) : /* @__PURE__ */ r("div", { className: n.boxItemPlus, "aria-hidden": "true", children: "+" })
651
- }
652
- ),
653
- b ? /* @__PURE__ */ r("div", { className: n.boxThresholdLabel, children: i.label }) : null
654
- ] }, t);
655
- }) }) }),
656
- /* @__PURE__ */ r(
657
- "div",
658
- {
659
- className: [n.ctaTotalsWrap, R <= 0 ? n.ctaTotalsWrapVisible : null].filter(Boolean).join(" "),
660
- "aria-hidden": R > 0,
661
- children: /* @__PURE__ */ N("div", { className: n.ctaTotals, "aria-label": "Totals", children: [
662
- ie ? /* @__PURE__ */ N("span", { className: n.ctaDiscountBadge, children: [
663
- k ? "Unlocked " : "",
664
- ie,
665
- "% off"
666
- ] }) : /* @__PURE__ */ r("span", {}),
667
- /* @__PURE__ */ r("span", { children: k ? /* @__PURE__ */ N(Te, { children: [
668
- /* @__PURE__ */ r("span", { className: n.ctaTotalsStrike, children: $(d.toFixed(2)) }),
669
- " ",
670
- /* @__PURE__ */ r("span", { className: n.ctaTotalsPrice, children: $(C.toFixed(2)) })
671
- ] }) : /* @__PURE__ */ r("span", { className: n.ctaTotalsPrice, children: $(d.toFixed(2)) }) })
672
- ] })
673
- }
674
- ),
675
- /* @__PURE__ */ r("button", { type: "button", onClick: le, disabled: !X, className: n.cta, children: I ? "Adding…" : R > 0 ? `Add ${R} more product${R === 1 ? "" : "s"}` : "Add to Basket" })
976
+ ) : /* @__PURE__ */ h("div", { className: u.variantThumbFallback, children: ((be = (re = (G = a.product) == null ? void 0 : G.title) == null ? void 0 : re.slice(0, 1)) == null ? void 0 : be.toUpperCase()) ?? "•" }) }),
977
+ /* @__PURE__ */ P("div", { className: u.variantInfo, children: [
978
+ /* @__PURE__ */ h("div", { className: u.variantName, children: d }),
979
+ p ? /* @__PURE__ */ h("div", { className: u.variantMeta, children: p }) : null,
980
+ /* @__PURE__ */ P("div", { className: u.variantPriceRow, children: [
981
+ g ? /* @__PURE__ */ h("span", { className: u.variantCompareAt, children: X(Number.isFinite(_) ? _.toFixed(2) : a.price) }) : null,
982
+ /* @__PURE__ */ h("span", { className: u.variantPrice, children: X(
983
+ q != null ? q.toFixed(2) : Number.isFinite(_) ? _.toFixed(2) : a.price
984
+ ) })
985
+ ] })
986
+ ] })
987
+ ] }),
988
+ s <= 0 ? /* @__PURE__ */ h(
989
+ "button",
990
+ {
991
+ type: "button",
992
+ onClick: () => S(a.id, 1),
993
+ disabled: r,
994
+ className: u.addToBundleButton,
995
+ "aria-label": `Add ${f} to bundle`,
996
+ children: "Add"
997
+ }
998
+ ) : /* @__PURE__ */ P("div", { className: u.qtyControls, children: [
999
+ /* @__PURE__ */ h(
1000
+ "button",
1001
+ {
1002
+ type: "button",
1003
+ onClick: () => S(a.id, s - 1),
1004
+ disabled: r || s <= 0,
1005
+ className: u.qtyButton,
1006
+ "aria-label": `Decrease ${f}`,
1007
+ children: "−"
1008
+ }
1009
+ ),
1010
+ /* @__PURE__ */ h("span", { className: u.qtyValue, "aria-label": `Quantity ${s}`, children: s }),
1011
+ /* @__PURE__ */ h(
1012
+ "button",
1013
+ {
1014
+ type: "button",
1015
+ onClick: () => S(a.id, s + 1),
1016
+ disabled: r,
1017
+ className: u.qtyButton,
1018
+ "aria-label": `Increase ${f}`,
1019
+ children: "+"
1020
+ }
1021
+ )
1022
+ ] })
1023
+ ] }, a.id);
1024
+ }) }) })
1025
+ ] }),
1026
+ /* @__PURE__ */ P("footer", { className: u.footer, ref: ue, children: [
1027
+ /* @__PURE__ */ h("div", { className: u.boxSummaryWindow, ref: We, children: /* @__PURE__ */ h("div", { className: u.boxSummaryRow, "aria-label": "Bundle box summary", children: Array.from({ length: nt }).map((a, s) => {
1028
+ var W, G, re, be;
1029
+ const d = Ne[s], p = tt.get(s), f = !!d, y = !!p, _ = y && !f, g = p ? `${p.discountPercent}% off` : null, q = f ? d.displayName : `Slot ${s + 1}`;
1030
+ return /* @__PURE__ */ P("div", { "data-box-slot": s, className: u.boxSlot, children: [
1031
+ /* @__PURE__ */ h(
1032
+ "div",
1033
+ {
1034
+ className: [
1035
+ u.boxItem,
1036
+ f ? u.boxItemFilled : u.boxItemPlaceholder,
1037
+ y ? u.boxItemThreshold : null,
1038
+ f ? u.boxItemClickable : null
1039
+ ].filter(Boolean).join(" "),
1040
+ role: f ? "button" : void 0,
1041
+ tabIndex: f ? 0 : void 0,
1042
+ onClick: f ? () => $e(d.id) : void 0,
1043
+ onKeyDown: f ? (Pe) => {
1044
+ (Pe.key === "Enter" || Pe.key === " ") && (Pe.preventDefault(), $e(d.id));
1045
+ } : void 0,
1046
+ "aria-label": _ && g ? `${q}. Unlocks ${g}.` : q,
1047
+ title: _ && g ? `${q} • Unlocks ${g}` : q,
1048
+ children: f ? (W = d.image) != null && W.url ? /* @__PURE__ */ h(
1049
+ "img",
1050
+ {
1051
+ className: u.boxItemImage,
1052
+ src: d.image.url,
1053
+ alt: d.image.altText ?? d.displayName,
1054
+ loading: "lazy"
1055
+ }
1056
+ ) : /* @__PURE__ */ h("div", { className: u.boxItemFallback, "aria-hidden": "true", children: ((be = (re = (G = d.product) == null ? void 0 : G.title) == null ? void 0 : re.slice(0, 1)) == null ? void 0 : be.toUpperCase()) ?? "•" }) : _ && g ? /* @__PURE__ */ h("div", { className: u.boxItemDiscountText, children: g }) : /* @__PURE__ */ h("div", { className: u.boxItemPlus, "aria-hidden": "true", children: "+" })
1057
+ }
1058
+ ),
1059
+ y ? /* @__PURE__ */ h("div", { className: u.boxThresholdLabel, children: p.label }) : null
1060
+ ] }, s);
1061
+ }) }) }),
1062
+ /* @__PURE__ */ h(
1063
+ "div",
1064
+ {
1065
+ className: [u.ctaTotalsWrap, fe <= 0 ? u.ctaTotalsWrapVisible : null].filter(Boolean).join(" "),
1066
+ "aria-hidden": fe > 0,
1067
+ children: /* @__PURE__ */ P("div", { className: u.ctaTotals, "aria-label": "Totals", children: [
1068
+ Se ? /* @__PURE__ */ P("span", { className: u.ctaDiscountBadge, children: [
1069
+ Se,
1070
+ "% Discount"
1071
+ ] }) : /* @__PURE__ */ h("span", {}),
1072
+ /* @__PURE__ */ h("span", { children: pe ? /* @__PURE__ */ P(rt, { children: [
1073
+ /* @__PURE__ */ h("span", { className: u.ctaTotalsStrike, children: X(ve.toFixed(2)) }),
1074
+ " ",
1075
+ /* @__PURE__ */ h("span", { className: u.ctaTotalsPrice, children: X(et.toFixed(2)) })
1076
+ ] }) : /* @__PURE__ */ h("span", { className: u.ctaTotalsPrice, children: X(ve.toFixed(2)) }) })
1077
+ ] })
1078
+ }
1079
+ ),
1080
+ /* @__PURE__ */ h("button", { type: "button", onClick: V, disabled: !$, className: u.cta, children: r ? "Adding…" : fe > 0 ? `Add ${fe} more product${fe === 1 ? "" : "s"}` : "Add to Basket" })
1081
+ ] })
676
1082
  ] })
677
- ] })
1083
+ ]
678
1084
  }
679
1085
  ) : null;
680
1086
  }
1087
+ function Ye(o) {
1088
+ if (o != null && o.length)
1089
+ return o.reduce((e, t) => (t != null && t.key && (e[t.key] = t.value ?? ""), e), {});
1090
+ }
1091
+ function Rn(o) {
1092
+ const e = /\/(\d+)$/.exec(o);
1093
+ return e ? e[1] : o;
1094
+ }
1095
+ function qn() {
1096
+ var o;
1097
+ return ((o = window == null ? void 0 : window.routes) == null ? void 0 : o.cart_url) || "/cart";
1098
+ }
1099
+ async function An() {
1100
+ try {
1101
+ const o = qn(), e = encodeURIComponent("cart-drawer,cart-icon-bubble,cart-live-region-text"), t = await fetch(`${o}?sections=${e}`, { method: "GET" });
1102
+ if (!t.ok) return;
1103
+ const i = await t.json().catch(() => null);
1104
+ if (!i) return;
1105
+ const r = ["cart-drawer", "cart-icon-bubble", "cart-live-region-text"];
1106
+ for (const l of r) {
1107
+ const m = i[l];
1108
+ if (!m) continue;
1109
+ const T = new DOMParser().parseFromString(m, "text/html"), C = T.getElementById(l) || T.querySelector(l), S = document.getElementById(l) || document.querySelector(l);
1110
+ S && C && S.replaceWith(C);
1111
+ }
1112
+ const n = document.querySelector("cart-drawer");
1113
+ if (n && typeof n.open == "function") {
1114
+ n.open();
1115
+ return;
1116
+ }
1117
+ document.body.classList.add("overflow-hidden");
1118
+ const c = document.querySelector("cart-drawer") || document.querySelector("cart-notification");
1119
+ c && (c.classList.contains("is-empty") && c.classList.remove("is-empty"), c.classList.add("active"));
1120
+ } catch {
1121
+ }
1122
+ }
1123
+ async function ke(o, e) {
1124
+ const t = await fetch(o, {
1125
+ method: "POST",
1126
+ headers: {
1127
+ Accept: "application/json",
1128
+ "Content-Type": "application/json"
1129
+ },
1130
+ body: JSON.stringify(e)
1131
+ });
1132
+ if (!t.ok) {
1133
+ const i = await t.text().catch(() => "");
1134
+ throw new Error(i || `Cart request failed: ${t.status}`);
1135
+ }
1136
+ return t.json().catch(() => null);
1137
+ }
1138
+ function zn() {
1139
+ return {
1140
+ async linesAdd(o) {
1141
+ const e = o.map((t) => ({
1142
+ id: Rn(t.merchandiseId),
1143
+ quantity: t.quantity,
1144
+ properties: Ye(t.attributes)
1145
+ }));
1146
+ await ke("/cart/add.js", { items: e });
1147
+ },
1148
+ async linesUpdate(o) {
1149
+ for (const e of o)
1150
+ await ke("/cart/change.js", {
1151
+ id: e.id,
1152
+ quantity: e.quantity,
1153
+ properties: Ye(e.attributes)
1154
+ });
1155
+ },
1156
+ async linesRemove(o) {
1157
+ for (const e of o)
1158
+ await ke("/cart/change.js", { id: e, quantity: 0 });
1159
+ },
1160
+ openCartUI() {
1161
+ window.setTimeout(() => {
1162
+ An();
1163
+ }, 0);
1164
+ }
1165
+ };
1166
+ }
681
1167
  export {
682
- Zt as BundleBuilderDrawer,
683
- Kt as BundleButton,
684
- _e as BundleLineAttributeKeys,
685
- Qt as BundleProvider,
686
- xe as useBundleBuilder,
687
- Ht as useBundleBuilderDrawer
1168
+ Vn as BundleBuilderDrawer,
1169
+ $n as BundleButton,
1170
+ Ce as BundleLineAttributeKeys,
1171
+ Wn as BundleProvider,
1172
+ zn as createLiquidCartAdapter,
1173
+ Re as useBundleBuilder,
1174
+ En as useBundleBuilderDrawer
688
1175
  };
689
1176
  //# sourceMappingURL=index.js.map