{"version":3,"file":"js/store_v2-f757f86e46b440f9d24f.js","mappings":"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","sources":["webpack://booqable/./webpack/shared/cookie_notice.js","webpack://booqable/./webpack/shared/image_focus.js","webpack://booqable/./webpack/shared/user_framework.js","webpack://booqable/./webpack/store/v2/application.js","webpack://booqable/./webpack/store/v2/globals.js","webpack://booqable/./webpack/shared/utils/get_fingerprint.js","webpack://booqable/./webpack/store/v2/redux/actions/locale.js","webpack://booqable/./webpack/store/v2/api.js","webpack://booqable/./webpack/shared/utils/cart.js","webpack://booqable/./webpack/store/v2/redux/actions/cart.js","webpack://booqable/./webpack/shared/utils/getBrandingColor.js","webpack://booqable/./webpack/store/v2/redux/actions/client.js","webpack://booqable/./webpack/store/v2/redux/actions/item.js","webpack://booqable/./webpack/store/v2/redux/actions/bundle.js","webpack://booqable/./webpack/store/v2/redux/actions/product_group.js","webpack://booqable/./webpack/store/v2/get_provider.js","webpack://booqable/./webpack/shared/utils/userFrameworkEvents.js","webpack://booqable/./webpack/store/v2/react/blocks/Period/styles.js","webpack://booqable/./webpack/store/v2/react/blocks/Period/index.js","webpack://booqable/./webpack/store/v2/react/scenes/cart/period.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/line.jsx","webpack://booqable/./webpack/store/v2/react/components/delay.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Logo.jsx","webpack://booqable/./webpack/shop-components/components/PoweredBy/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/lines.jsx","webpack://booqable/./webpack/store/v2/react/components/product_price.jsx","webpack://booqable/./webpack/store/blocks/Services/styles.js","webpack://booqable/./webpack/store/blocks/Services/index.js","webpack://booqable/./webpack/store/components/Services/Service.jsx","webpack://booqable/./webpack/store/components/Services/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/blocks/Overdue/index.js","webpack://booqable/./webpack/store/v2/react/scenes/cart/components/Overdue/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart/components/FloatingCart/index.jsx","webpack://booqable/./webpack/store/blocks/Modal/index.js","webpack://booqable/./webpack/store/components/Modal.jsx","webpack://booqable/./webpack/shared/utils/useLockScroll.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/UserAddressesSelect.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/DeliveryFulfillmentForm.jsx","webpack://booqable/./webpack/shared/utils/useCachedQuery.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/requests.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Provider.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/hooks.js","webpack://booqable/./webpack/shared/utils/useSearchParam.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/FulfillmentType.jsx","webpack://booqable/./webpack/store/components/ReadOnlyModeDisabledComponent/index.jsx","webpack://booqable/./webpack/store/v2/redux/actions/availability.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Picker.jsx","webpack://booqable/./webpack/store/blocks/CartPicker/index.js","webpack://booqable/./webpack/store/blocks/CartPicker/styles.js","webpack://booqable/./webpack/store/modules/cart/CartPicker/Modal.jsx","webpack://booqable/./webpack/store/modules/cart/FloatingCart/components/CartPicker.jsx","webpack://booqable/./webpack/store/modules/cart/FloatingCart/components/Launcher.jsx","webpack://booqable/./webpack/store/v2/react/components/cart.jsx","webpack://booqable/./webpack/store/v2/react/blocks/Themed/index.js","webpack://booqable/./webpack/store/v2/react/blocks/Themed/styles.js","webpack://booqable/./webpack/ui/themes/public.js","webpack://booqable/./webpack/store/v2/react/components/Themed.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart.jsx","webpack://booqable/./webpack/store/v2/redux/selectors/item.js","webpack://booqable/./webpack/store/v2/react/id_finder.jsx","webpack://booqable/./webpack/store/v2/redux/actions/quickview.js","webpack://booqable/./webpack/store/v2/react/components/product.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_group.jsx","webpack://booqable/./webpack/store/v2/react/components/pagination.jsx","webpack://booqable/./webpack/store/v2/redux/actions/filter.js","webpack://booqable/./webpack/store/v2/react/components/product_search.jsx","webpack://booqable/./webpack/store/modules/product/blocks/CollectionList/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/CollectionList/index.js","webpack://booqable/./webpack/store/v2/redux/actions/collection.js","webpack://booqable/./webpack/store/modules/product/components/CollectionList/index.jsx","webpack://booqable/./webpack/store/v2/react/components/product_list.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_list.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductButton/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductButton/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductButton/BundleItems.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductAvailabilityCalendar/TimeTable.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductAvailabilityCalendar/index.js","webpack://booqable/./webpack/store/modules/product/components/ProductAvailabilityCalendar/index.jsx","webpack://booqable/./webpack/store/v2/redux/selectors/product.js","webpack://booqable/./webpack/store/v2/redux/actions/line.js","webpack://booqable/./webpack/store/modules/product/components/ProductButton/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_button.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ProductImage/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ProductImage/index.js","webpack://booqable/./webpack/store/modules/product/blocks/ImageMagnify/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ImageMagnify/index.js","webpack://booqable/./webpack/store/modules/product/components/ImageMagnify/ImageRenderer.jsx","webpack://booqable/./webpack/store/modules/product/components/ImageMagnify/index.jsx","webpack://booqable/./webpack/store/modules/product/blocks/ModalGallery/styles.js","webpack://booqable/./webpack/store/modules/product/blocks/ModalGallery/index.js","webpack://booqable/./webpack/store/modules/product/components/ModalGallery/index.jsx","webpack://booqable/./webpack/store/modules/product/components/ProductImage/index.jsx","webpack://booqable/./webpack/store/v2/react/components/product_detail.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_detail.jsx","webpack://booqable/./webpack/store/v2/react/scenes/quickview.jsx","webpack://booqable/./webpack/store/v2/react/scenes/product_search.jsx","webpack://booqable/./webpack/store/v2/react/components/separate_date_picker/Base.styles.jsx","webpack://booqable/./webpack/store/v2/react/components/separate_date_picker/Base.jsx","webpack://booqable/./webpack/store/v2/react/scenes/separate_date_picker.jsx","webpack://booqable/./webpack/store/v2/react/scenes/collection_list.jsx","webpack://booqable/./webpack/store/modules/product/components/SortingSelect/index.jsx","webpack://booqable/./webpack/store/modules/product/components/FilterSelect/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/filter_bar.jsx","webpack://booqable/./webpack/store/v2/react/scenes/sorting_select.jsx","webpack://booqable/./webpack/store/modules/cart/CartPicker/Inline.jsx","webpack://booqable/./webpack/store/v2/react/scenes/sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Line.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/LineContainer.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/LinesContainer.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Lines.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Errors.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Totals.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/Line.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/Lines.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/Mobile/index.jsx","webpack://booqable/./webpack/store/modules/cart/EmbeddableCart/index.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart_lines.jsx","webpack://booqable/./webpack/store/v2/react/scenes/embeddable_cart_sidebar.jsx","webpack://booqable/./webpack/store/modules/cart/CartButton.jsx","webpack://booqable/./webpack/store/v2/react/components/cart_button.jsx","webpack://booqable/./webpack/store/v2/react/scenes/cart_button.jsx","webpack://booqable/./webpack/shop-components/components/ProductAvailability/styles.js","webpack://booqable/./webpack/shop-components/utils/withStore.js","webpack://booqable/./webpack/shop-components/utils/withTheme.js","webpack://booqable/./webpack/shop-components/utils/registerCustomElement.js","webpack://booqable/./webpack/shop-components/api/index.js","webpack://booqable/./webpack/shop-components/api/availability.js","webpack://booqable/./webpack/shop-components/redux/actions/availability.js","webpack://booqable/./webpack/shop-components/components/ProductAvailability/index.jsx","webpack://booqable/./webpack/shop-components/redux/actions/price.js","webpack://booqable/./webpack/shop-components/api/price.js","webpack://booqable/./webpack/shop-components/components/ProductPrice/Price.jsx","webpack://booqable/./webpack/shop-components/components/ProductPrice/Label.jsx","webpack://booqable/./webpack/shop-components/components/ProductVariationsSelect/styles.js","webpack://booqable/./webpack/shop-components/components/ProductVariationsSelect/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductAvailabilityCalendar/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductButton/styles.js","webpack://booqable/./webpack/shop-components/components/ProductButton/Button.jsx","webpack://booqable/./webpack/shop-components/api/items.js","webpack://booqable/./webpack/shop-components/redux/actions/item.js","webpack://booqable/./webpack/shop-components/components/ProductButton/index.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/styles.js","webpack://booqable/./webpack/shop-components/components/DatePicker/hooks.js","webpack://booqable/./webpack/shop-components/components/DatePicker/Button.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/styles-next.js","webpack://booqable/./webpack/shop-components/components/DatePicker/ButtonNext.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/index.jsx","webpack://booqable/./webpack/shop-components/components/DatePicker/Modal.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/index.js","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Line.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/BundleItem.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/BundleContents.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Line.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Lines.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Period.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Period.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/styles/Services.js","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Service.jsx","webpack://booqable/./webpack/shop-components/components/MiniCart/components/Services.jsx","webpack://booqable/./webpack/shop-components/utils/useCart.js","webpack://booqable/./webpack/shop-components/components/MiniCart/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductGallery/components/OptimizedImage/index.jsx","webpack://booqable/./webpack/shop-components/components/ProductGallery/styles.js","webpack://booqable/./webpack/shop-components/api/photo.js","webpack://booqable/./webpack/shop-components/redux/actions/photo.js","webpack://booqable/./webpack/shop-components/components/ProductGallery/index.jsx","webpack://booqable/./webpack/shop-components/components/BundleItems/styles.js","webpack://booqable/./webpack/shop-components/components/BundleItems/Item.jsx","webpack://booqable/./webpack/shop-components/components/BundleItems/index.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/styles.js","webpack://booqable/./webpack/shop-components/components/CartLines/BundleContents/styles.js","webpack://booqable/./webpack/shop-components/components/CartLines/BundleContents/index.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/Line.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/LineSkeleton.jsx","webpack://booqable/./webpack/shop-components/components/CartLines/index.jsx","webpack://booqable/./webpack/shop-components/components/CartServices/styles.js","webpack://booqable/./webpack/shop-components/components/CartServices/Service.jsx","webpack://booqable/./webpack/shop-components/components/CartServices/index.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/styles.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Errors.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/styles.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/Checkout.jsx","webpack://booqable/./webpack/shop-components/utils/navigation.js","webpack://booqable/./webpack/shop-components/components/CartTotals/Buttons/BackToStore.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/Discounts.jsx","webpack://booqable/./webpack/shop-components/components/CartTotals/index.jsx","webpack://booqable/./webpack/shop-components/components/MiniCartLauncher/styles.js","webpack://booqable/./webpack/shop-components/components/MiniCartLauncher/index.jsx","webpack://booqable/./webpack/shop-components/components/MiniCartButton/styles.js","webpack://booqable/./webpack/shop-components/components/MiniCartButton/index.jsx","webpack://booqable/./webpack/store/v2/react/initializer.js","webpack://booqable/./webpack/store/v2/redux/models.js","webpack://booqable/./webpack/store/v2/redux/reducers/client.js","webpack://booqable/./webpack/store/v2/redux/reducers/filter.js","webpack://booqable/./webpack/shop-components/redux/reducers/items.js","webpack://booqable/./webpack/store/v2/redux/reducers/index.js","webpack://booqable/./webpack/store/v2/redux/store.js","webpack://booqable/./webpack/ui/blocks/ActionGroup/styles.js","webpack://booqable/./webpack/ui/elements/Img.js"],"sourcesContent":["/* global Booqable, CookieConsent */\nconst CookieNotice = {\n  // PUBLIC\n\n  init (config, translations = { en: {} }) {\n    CookieConsent.run(this._settings(config, translations))\n  },\n\n  showPreferencesModal () {\n    CookieConsent.showPreferences()\n  },\n\n  servicesTable () {\n    const services = []\n\n    Booqable._apps.marketing.forEach(function (app) {\n      if (services.find((service) => service.name === app.name)) {\n        return\n      }\n\n      services.push({\n        name: app.name,\n        domain: app.domain,\n        desc: app.description\n      })\n    })\n\n    return services\n  },\n\n  // PRIVATE\n\n  _services () {\n    // These will be listed in the cookie consent modal\n    // and the user can then choose to accept or deny\n    // cookies on a per-app basis.\n    return Booqable._apps.marketing.map(function (app) {\n      if (!app.name) {\n        return null\n      }\n\n      return { name: app.name, label: app.name }\n    }).filter(function (app) { return app })\n      .reduce(function (acc, app) { return { ...acc, [app.name]: app } }, {})\n  },\n\n  _refreshAppConsent (cookie) {\n    // Every time the user changes his cookie preferences\n    // we need to refresh the apps to reflect the new state.\n    Booqable._apps.marketing.forEach(function (app) {\n      if (cookie.services.tracking.includes(app.name)) {\n        app.onConsent()\n      } else {\n        app.onDeny()\n      }\n    })\n  },\n\n  _settings (config, translations = { en: {} }) {\n    const self = this\n    const defaults = {\n      hideFromBots: !navigator.webdriver,\n      autoShow: false,\n      categories: {\n        necessary: {\n          enabled: true,\n          readOnly: true\n        },\n        tracking: {\n          services: this._services()\n        }\n      },\n      language: {\n        default: 'en',\n        translations\n      },\n      onConsent: function ({ cookie }) { self._refreshAppConsent(cookie) },\n      onChange: function ({ cookie }) { self._refreshAppConsent(cookie) }\n    }\n\n    return Object.assign({}, defaults, config)\n  }\n}\n\nif (window.CookieNotice === undefined) {\n  window.CookieNotice = CookieNotice\n}\n","window.imageFocus = require('image-focus').FocusedImage\n","/* eslint-disable */\n\n// WARNING: This file needs to be written in Vanilla JS\n\nvar Booqable = {\n  get location() {\n    return window.location.pathname;\n  },\n  set origin(value) {\n    localStorage.setItem('origin', value);\n  },\n  get origin() {\n    return localStorage.getItem('origin');\n  }\n}\n\nif (window.Booqable === undefined) {\n  window.Booqable = Booqable;\n\n  /////////////////////////////////////////////////\n  // Delegate initializer\n  /////////////////////////////////////////////////\n\n  Booqable.init = function () {\n    initBooqableComponents();\n  };\n\n  /////////////////////////////////////////////////\n  // Set cart data\n  /////////////////////////////////////////////////\n\n  Booqable.setCartData = function (data) {\n    Booqable.cartData = data;\n  };\n\n  /////////////////////////////////////////////////\n  // Events\n  /////////////////////////////////////////////////\n\n  Booqable._events = {};\n\n  Booqable.on = function (event, callback, context) {\n    if (!Booqable._events.hasOwnProperty(event)) {\n      Booqable._events[event] = [];\n    }\n\n    Booqable._events[event].push([callback, context]);\n  };\n\n  Booqable._trigger = function (event) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    var callbacks = Booqable._events[event] || [];\n\n    for (var i = 0; i < callbacks.length; i++) {\n      var callback = callbacks[i][0];\n      var context = callbacks[i][1] || Booqable;\n      callback.apply(context, args);\n    }\n  };\n\n  // Removes an event listener by filtering out the specified callback from the event's array.\n  window.Booqable.off = function (event, callback) {\n    if (!Booqable._events.hasOwnProperty(event)) {\n      return;\n    }\n\n    Booqable._events[event] = Booqable._events[event].filter(function (listener) {\n      return listener[0] !== callback;\n    });\n  };\n\n  /////////////////////////////////////////////////\n  // Script, tag & asset loading\n  /////////////////////////////////////////////////\n\n  Booqable.loadScript = function (src) {\n    if (Booqable._isScriptLoaded(src)) { return; }\n\n    var tag = document.createElement('script');\n    tag.async = false;\n    tag.src = src;\n\n    document.getElementsByTagName('head')[0].appendChild(tag);\n  };\n\n  Booqable.unloadScript = function (src) {\n    if (!Booqable._isScriptLoaded(src)) { return; }\n\n    var tag = Booqable._findScript(src);\n\n    document.getElementsByTagName('head')[0].removeChild(tag);\n  };\n\n  /////////////////////////////////////////////////\n  // jQuery\n  /////////////////////////////////////////////////\n  Booqable.jQuery = function (callback) {\n    Booqable.loadScript('https://code.jquery.com/jquery-3.3.1.min.js');\n\n    Booqable._defer(function () { return window.$; }, callback);\n  };\n\n  /////////////////////////////////////////////////\n  // Utilities\n  /////////////////////////////////////////////////\n\n  Booqable._isScriptLoaded = function (src) {\n    return Booqable._findScript(src) ? true : false;\n  };\n\n  Booqable._findScript = function (src) {\n    return document.querySelector('script[src=\"' + src + '\"]');\n  }\n\n  Booqable._once = function (func) {\n    let didRun = false;\n\n    if (typeof func != 'function') {\n      throw new TypeError('Expected a function');\n    }\n\n    return function() {\n      if (!didRun) {\n        didRun = true;\n        return func.apply(this, arguments);\n      } else {\n        func = undefined;\n      }\n    };\n  };\n\n  Booqable._defer = function (condition, method, attempt) {\n    if (!attempt) {\n      attempt = 1;\n    }\n\n    if (attempt === 200) {\n      return;\n    }\n\n    if (condition()) {\n      method();\n    } else {\n      setTimeout(function () { Booqable._defer(condition, method, attempt + 1) }, 50);\n    }\n  };\n\n  Booqable._prependChild = function (parentElement, element) {\n    parentElement.insertBefore(element, parentElement.firstChild);\n  };\n\n  /////////////////////////////////////////////////\n  // App support\n  /////////////////////////////////////////////////\n  Booqable._apps = {\n    marketing: [],\n    essential: [],\n  };\n\n  Booqable._initApps = Booqable._once(function () {\n    Object.entries(Booqable._apps).forEach(([_, apps]) => {\n      apps.forEach((app) => {\n        app.init()\n      })\n    })\n  })\n\n  Booqable._consentToAllApps = Booqable._once(function () {\n    Object.entries(Booqable._apps).forEach(([_, apps]) => {\n      apps.forEach((app) => {\n        app.onConsent()\n      })\n    })\n  })\n\n  // Add app to a category.\n  Booqable.registerApp = function (category, appConfig) {\n    if (!Booqable._apps.hasOwnProperty(category)) {\n      throw new Error('Invalid app category \\'' + category + \"'\");\n    }\n\n    // We expect apps to define their callbacks, but none\n    // are required.\n    // name -> name of the app (shown on the cookie notice preferences)\n    // init() -> called on window load event\n    // onConsent() -> called on window load and when user consents to cookies\n    // onDeny() -> called when user denies cookies\n    var defaultConfig = {\n      name: null,\n      init: function () {},\n      onConsent: function () {},\n      onDeny: function () {}\n    }\n\n    Booqable._apps[category].push(Object.assign({}, defaultConfig, appConfig));\n  }\n\n  /////////////////////////////////////////////////\n  // Google Analytics\n  /////////////////////////////////////////////////\n\n  Booqable._gtag = function (type, event, data) {\n    if (typeof window.gtag === 'function') {\n      window.gtag(type, event, data);\n    }\n  }\n\n  Booqable._prepare_gtag_event_data = function (data) {\n    if (!data.value || !data.currency || !data.items || data.items.length == 0) {\n      return null\n    }\n\n    return {\n      value: data.value,\n      currency: data.currency,\n      items: data.items.map((item) => ({\n        item_id: item.item_id,\n        item_name: item.item_name,\n        ...(item.quantity && { quantity: item.quantity }),\n        price: item.price\n      }))\n    }\n  }\n\n  setupGoogleAnalytics = function (trackingId, defaultPageTracking = true, defaultEvents = false, options = {}) {\n    if (!trackingId || trackingId == '') {\n      return\n    }\n\n    if (typeof options !== 'object') {\n      options = {}\n    }\n\n    options.linker = { accept_incoming: true }\n\n    Booqable.loadScript('https://www.googletagmanager.com/gtag/js?id=' + trackingId);\n\n    window.dataLayer = window.dataLayer || [];\n    window.gtag = function () { dataLayer.push(arguments); }\n    window.gtag('js', new Date());\n    window.gtag('config', trackingId, options);\n\n    if (defaultPageTracking) {\n      Booqable._setupGoogleAnalyticsDefaultPageTracking(trackingId);\n    }\n\n    if (defaultEvents) {\n      Booqable._setupGoogleAnalyticsDefaultEvents();\n    }\n  };\n\n  Booqable.setupGoogleAnalytics = Booqable._once(setupGoogleAnalytics)\n\n  _setupGoogleAnalyticsDefaultPageTracking = function (trackingId) {\n    Booqable.on('viewCart', function () {\n      Booqable._gtag('event', 'page_view', {\n        page_title: 'Cart',\n        send_to: trackingId\n      });\n\n      Booqable._gtag('event', 'view_cart', {\n        'currency': Booqable.cartData.currency,\n        'value':  Booqable.cartData.grandTotalWithTax,\n        'items': Booqable.cartData.items\n      });\n    });\n\n    Booqable.on('information', function () {\n      Booqable._gtag('event', 'page_view', {\n        page_title: 'Checkout Information',\n        send_to: trackingId\n      });\n    });\n\n    Booqable.on('payment', function () {\n      Booqable._gtag('event', 'page_view', {\n        page_title: 'Checkout Payment',\n        send_to: trackingId\n      });\n    });\n\n    Booqable.on('completed', function () {\n      Booqable._gtag('event', 'page_view', {\n        page_title: 'Checkout Completed',\n        send_to: trackingId\n      });\n    });\n  };\n\n  Booqable._setupGoogleAnalyticsDefaultPageTracking = Booqable._once(_setupGoogleAnalyticsDefaultPageTracking)\n\n  _setupGoogleAnalyticsDefaultEvents = function () {\n    // Shop Events\n    Booqable.on('viewProduct', function (data) {\n      const event_data = Booqable._prepare_gtag_event_data(data)\n\n      Booqable._gtag('event', 'view_item', event_data);\n    });\n\n    Booqable.on('addToCart', function (data) {\n      const event_data = Booqable._prepare_gtag_event_data(data)\n\n      Booqable._gtag('event', 'add_to_cart', event_data);\n    });\n\n    Booqable.on('removeFromCart', function (data) {\n      const event_data = Booqable._prepare_gtag_event_data(data)\n\n      Booqable._gtag('event', 'remove_from_cart', event_data);\n    });\n\n    // Checkout events\n    Booqable.on('information', function () {\n      // Regular event\n      Booqable._gtag('event', 'Checkout', {\n        'event_category': 'Information',\n        'event_label': 'Information'\n      });\n\n      // Ecommerce event\n      Booqable._gtag('event', 'begin_checkout', {\n        'currency': Booqable.cartData.currency,\n        'value':  Booqable.cartData.grandTotalWithTax,\n        'coupon': Booqable.cartData.coupon,\n        'items': Booqable.cartData.items\n      });\n    });\n\n    Booqable.on('payment', function () {\n      // Regular event\n      Booqable._gtag('event', 'Checkout', {\n        'event_category': 'Payment',\n        'event_label': 'Payment'\n      });\n    });\n\n    Booqable.on('completed', function () {\n      // Regular event\n      Booqable._gtag('event', 'Checkout', {\n        'event_category': 'Completed',\n        'event_label': 'Completed'\n      });\n\n      // Ecommerce event\n      Booqable._gtag('event', 'purchase', {\n        \"transaction_id\": Booqable.cartData.cartId,\n        \"value\": Booqable.cartData.grandTotalWithTax,\n        \"currency\": Booqable.cartData.currency,\n        \"tax\": Booqable.cartData.tax,\n        \"items\": Booqable.cartData.items,\n        \"coupon\": Booqable.cartData.coupon\n      });\n    });\n  }\n\n  Booqable._setupGoogleAnalyticsDefaultEvents = Booqable._once(_setupGoogleAnalyticsDefaultEvents)\n\n  /////////////////////////////////////////////////\n  // Facebook\n  /////////////////////////////////////////////////\n\n  Booqable._fbq = function (type, event, data) {\n    if (typeof window.fbq === 'function') {\n      window.fbq(type, event, data);\n    }\n  }\n\n  Booqable._prepare_fbq_event_data = function (data) {\n    const item = data.items[0]\n\n    if (!data.currency || !item) {\n      return null\n    }\n\n    return {\n      contents: [{\n        id: item.item_id,\n        quantity: item.quantity\n      }],\n      content_name: item.item_name,\n      currency: data.currency,\n      value: item.price\n    }\n  }\n\n  setupFacebook = function (fbId, defaultEvents = true) {\n    if (!fbId || fbId == '') { return ; }\n\n    (function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n      n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\n      n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\n      t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\n      document,'script','https://connect.facebook.net/en_US/fbevents.js'));\n\n    fbq('init', fbId);\n\n    if (defaultEvents) {\n      Booqable._setupFacebookDefaultEvents();\n    }\n  };\n\n  Booqable.setupFacebook = Booqable._once(setupFacebook)\n\n  _setupFacebookDefaultEvents = function () {\n    Booqable.on('information', function () {\n      Booqable._fbq('track', 'InitiateCheckout', {\n        value: Booqable.cartData.grandTotalWithTax,\n        currency: Booqable.cartData.currency\n      });\n    });\n\n    Booqable.on('payment', function () {\n      Booqable._fbq('track', 'AddPaymentInfo');\n    });\n\n    Booqable.on('completed', function () {\n      Booqable._fbq('track', 'Purchase', {\n        value: Booqable.cartData.grandTotalWithTax,\n        currency: Booqable.cartData.currency\n      });\n    });\n\n    Booqable.on('page-change', function () {\n      Booqable._fbq('track', 'PageView')\n    });\n\n    Booqable.on('viewProduct', function (data) {\n      const event_data = Booqable._prepare_fbq_event_data(data)\n\n      Booqable._fbq('track', 'ViewContent', event_data);\n    });\n\n    Booqable.on('addToCart', function (data) {\n      const event_data = Booqable._prepare_fbq_event_data(data)\n\n      Booqable._fbq('track', 'AddToCart', event_data);\n    });\n\n    Booqable.on('removeFromCart', function (data) {\n      const event_data = Booqable._prepare_fbq_event_data(data)\n\n      Booqable._fbq('trackCustom', 'RemoveFromCart', event_data);\n    });\n  };\n\n  Booqable._setupFacebookDefaultEvents = Booqable._once(_setupFacebookDefaultEvents)\n\n  /////////////////////////////////////////////////\n  // Intercom\n  /////////////////////////////////////////////////\n\n  Booqable.setupIntercom = function (appId) {\n    window.intercomSettings = {\n      app_id: appId\n    };\n\n    (function(){var w=window;var ic=w.Intercom;if(typeof ic===\"function\"){ic('reattach_activator');\n    ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];\n    i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');\n    s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/frrez76q';\n    var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}\n    if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}\n    Booqable._loadIntercom=l;}})()\n\n    Booqable._once(Booqable._loadIntercom)();\n  };\n\n  /////////////////////////////////////////////////\n  // Properties & Property updaters\n  /////////////////////////////////////////////////\n\n  Booqable.decorateLinkForTracking = function (link) {\n    // https://developers.google.com/analytics/devguides/collection/gtagjs/cross-domain\n    if (window.ga) {\n      var trackers = window.ga.getAll && window.ga.getAll()\n      var tracker = trackers && trackers[0]\n\n      if (tracker && window.gaplugins && window.gaplugins.Linker) {\n        var linker = new window.gaplugins.Linker(tracker)\n\n        link = linker.decorate(link)\n      }\n    }\n\n    return link\n  }\n\n  /////////////////////////////////////////////////\n  // Button utilities\n  /////////////////////////////////////////////////\n\n  document.querySelectorAll('form').forEach((form) => {\n    form.addEventListener('submit', function (e) {\n      const button = e.submitter\n      if (button?.classList.contains('button--with-loading') || button?.classList.contains('button--disable-on-submit')) {\n        button.setAttribute('disabled', 'disabled')\n      }\n    })\n  })\n}\n","require('./globals')\n\n// Initialize Redux\nwindow.booqableStore = require('./redux/store').default\n\nwindow.booqableGetStore = function () {\n  return window.booqableStore\n}\n\n// Intialize App\nrequire('./react/initializer')\nrequire('shared/user_framework')\nrequire('shared/cookie_notice')\n","// Polyfills for older and crappy browsers\nimport 'core-js'\n\nimport elementDataset from 'element-dataset'\n\n// Localization\nimport 'shared/utils/i18n'\n\nimport Bluebird from 'bluebird'\nimport Model from './redux/models'\nimport accounting from 'accounting'\nimport cuid from 'cuid'\n\nelementDataset()\n\nwindow.Promise = Bluebird\nwindow.Model = Model\n\n// Booqable currently relies on accounting to be global\n// for setting correct currency settings\nwindow.accounting = accounting\nwindow.cuid = cuid\n\n// Bluebird config\nwindow.Promise.config({\n  warnings: false\n})\n\nwindow.Promise.onPossiblyUnhandledRejection((error) => {\n  if (error && error?.message !== 'requestError') {\n    throw error\n  }\n})\n","import Fingerprint2 from 'fingerprintjs2'\n\nconst fingerPrintOptions = {\n  excludes: {\n    fonts: true,\n    screenResolution: true,\n    availableScreenResolution: true\n  }\n}\n\nexport default (callback) => {\n  try {\n    Fingerprint2.getV18(fingerPrintOptions, (fingerprint) => {\n      callback(fingerprint)\n    })\n  } catch {\n    // Something went wrong, return an undefined fingerprint\n    callback(undefined)\n  }\n}\n","import moment from 'shared/lib/moment'\n\nconst store = window.booqableStore\n\nexport default {\n\n  set: (locale) => {\n    const debug = false\n\n    const setLocale = (locale) => {\n      window.booqableOptions.locale = locale.split('-')[0]\n      moment.locale(locale)\n    }\n\n    const loadLocale = (locale) => {\n      return import('moment/locale/' + locale).then(() => {\n        debug && console.log('    - Locale found and loaded', locale)\n\n        setLocale(locale)\n        store.dispatch({ type: 'LOCALE_SET', payload: { locale } })\n      })\n    }\n\n    const tryLoadLocales = (locales, i = 0) => {\n      if (locales[i]) {\n        debug && console.log('  - Attempting to load locale', locales[i])\n\n        loadLocale(locales[i]).catch(() => {\n          debug && console.log('    - Locale not found', locales[i])\n\n          tryLoadLocales(locales, i + 1)\n        })\n      } else {\n        debug && console.log('    - Locales not found', locales)\n      }\n    }\n\n    // Use en as default while we load the proper locale\n    setLocale('en')\n\n    const [language, substring] = locale.toLowerCase().split('-')\n    const locales = []\n\n    // Some of the locales that we construct from language and substring are not present\n    // in the moment locale folder https://github.com/moment/moment/tree/develop/locale\n    // An error will occur when we try to import those\n    const notSupported = ['nb-no']\n\n    if (substring && language !== substring) {\n      const localeWithSubstring = [language, substring].join('-')\n\n      if (!notSupported.includes(localeWithSubstring)) {\n        locales.push(localeWithSubstring)\n      }\n    }\n\n    locales.push(language)\n\n    debug && console.log('Detected browser locale', locale)\n\n    // No need to load the default locale\n    if (locales.length === 0 || (locales.length === 1 && locales[0] === 'en')) {\n      debug && console.log('  - Locale is default en. No need to load any locale')\n\n      return\n    }\n\n    debug && console.log('  - Loading locales in order:', locales)\n\n    tryLoadLocales(locales)\n  }\n\n}\n","import API from 'shared/lib/api'\n\nAPI.prefix = window.booqableOptions.apiURL + '/api'\n\nexport default API\n","import moment from 'shared/lib/moment'\nimport OperatinRuleUtils from 'shared/utils/operating_rules'\n\nexport const isOverdue = (cart) => {\n  // If there is no cart (yet) we return.\n  if (!cart) return false\n\n  if (!cart.starts_at) return false\n\n  // We get the start date from the cart.\n  const startsAt = moment(cart.starts_at)\n\n  // Check if this time is selectable\n  return !OperatinRuleUtils.isTimeSelectable(startsAt)\n}\n\nexport const getLocalCartId = () => {\n  return window.booqableOptions?.cart?.id || localStorage.bqCartId\n}\n\nexport default {\n  isOverdue\n}\n","import API from 'store/v2/api'\nimport Model from '../models'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nModel.Cart.createAction('FETCH', (params) => {\n  if (params == null) {\n    params = {}\n  }\n\n  const cartId = getLocalCartId()\n  const provider = window.booqableOptions.storeProvider\n  const pathName = document.location.pathname\n\n  if (provider) {\n    params.provider = provider\n  }\n\n  if (pathName.startsWith('/preview') || pathName.startsWith('/shop/preview')) {\n    params.previewing = true\n  }\n\n  if (cartId !== 'null') {\n    params.id = cartId\n  }\n\n  return API.get('cart', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('UPDATE', (params) => {\n  if (params == null) {\n    params = {}\n  }\n\n  params.id = getLocalCartId()\n\n  return API.put('cart', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('BOOK', (params) => {\n  if (params == null) {\n    params = {}\n  }\n\n  params.id = getLocalCartId()\n\n  return API.createResource('cart/book', { ...params, apiVersion: 1 })\n})\n\nModel.Cart.createAction('CLEAR', () => {\n  const params = {\n    id: getLocalCartId()\n  }\n\n  return API.createResource('cart/clear', { ...params, apiVersion: 1 })\n})\n\nexport default Model.Cart.actions\n","import SettingUtils from 'shared/utils/settings'\n\nexport default function getBrandingColor () {\n  const options = window.booqableOptions\n\n  return options?.primaryColor?.length ? options.primaryColor : SettingUtils.get('store.brand_color')\n}\n","import cartActions from 'store/v2/redux/actions/cart'\nimport brandingUtils from 'ui/themes/utils'\nimport TimeUtils from 'shared/utils/time'\nimport Model from 'store/v2/redux/models'\nimport cartUtils from 'shared/utils/cart'\nimport OperatingRuleUtils from 'shared/utils/operating_rules'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\n\nconst initializeDefaultTimes = (store) => {\n  const defaultStartTime = TimeUtils.defaultStartTime()\n\n  const defaultStopTime = TimeUtils.defaultStopTime({\n    defaultStartTime\n  })\n\n  // If we don't use times and have a fixed start time\n  // we use this as the first selectable date, it would\n  // not pass validation anyway\n  const state = store.getState()\n  const startType = state.settings.get('orders.start_type')\n  const useTimes = state.settings.get('store.period_type') === 'timeslot_fixed' ?\n    true :\n    state.settings.get('store.use_times')\n\n  let firstTimeSelectable\n\n  if (startType === 'fixed' && !useTimes) {\n    firstTimeSelectable = defaultStartTime\n  } else {\n    firstTimeSelectable = OperatingRuleUtils.firstTimeSelectable()\n  }\n\n  store.dispatch({\n    type: 'DEFAULT_TIMES_INITIALIZED',\n    payload: {\n      defaultStartTime,\n      defaultStopTime,\n      firstTimeSelectable\n    }\n  })\n}\n\nconst clientActions = {\n  initialize () {\n    const store = window.booqableGetStore()\n\n    return cartActions.fetch({\n      source: 'store',\n      embeddable_cart_elements: window.booqableOptions?.embeddableCartElements,\n      apiVersion: 1\n    }).then(function (action) {\n      store.dispatch({ type: 'SETTINGS_INITIALIZED', payload: { settings: action.payload.response.meta.settings } })\n\n      // Operating rules\n      Model.OperatingRule.hydrate({ operating_rules: action.payload.response.meta.operating_rules })\n\n      // Locations\n      Model.Location.hydrate({ locations: action.payload.response.meta.locations })\n\n      // Overdue cart check\n      clientActions.evaluateCartOverdue()\n\n      // Get branding color from theme or from settings\n      const brandingColor = getBrandingColor()\n\n      brandingUtils.insertCSS(brandingColor)\n\n      // Do this async to speed up initialization\n      new Promise((resolve, _reject) => {\n        initializeDefaultTimes(store) && resolve()\n      })\n\n      return store.dispatch({ type: 'TRANSLATIONS_INITIALIZED' })\n    })\n  },\n\n  setFloatingCart () {\n    const store = window.booqableGetStore()\n\n    return store.dispatch({\n      type: 'SET_FLOATING_CART',\n      payload: {\n        floatingCart: true\n      }\n    })\n  },\n\n  toggleCart (open) {\n    const store = window.booqableGetStore()\n\n    return store.dispatch({\n      type: 'TOGGLE_CART',\n      payload: {\n        cartOpen: open\n      }\n    })\n  },\n\n  toggleModalPicker (open) {\n    const store = window.booqableGetStore()\n\n    // Legacy picker support\n    store.dispatch({\n      type: 'TOGGLE_PICKER',\n      payload: {\n        modalPickerOpen: open\n      }\n    })\n\n    return store.dispatch({\n      type: open ? 'CART_OPEN' : 'CART_CLOSE'\n    })\n  },\n\n  setCartScroll (pixels) {\n    const store = window.booqableGetStore()\n\n    return store.dispatch({\n      type: 'SET_CART_SCROLL',\n      payload: {\n        cartScroll: pixels\n      }\n    })\n  },\n\n  setCheckingOut () {\n    const store = window.booqableGetStore()\n    const state = store.getState()\n\n    store.dispatch({\n      type: 'SET_CHECKING_OUT'\n    })\n\n    const cartId = state.client.get('cartId')\n    const cart = state.orm.carts.getById(cartId)\n\n    let checkoutURL = cart?.checkout_url\n    const booqableOptions = window.booqableOptions\n\n    if (checkoutURL && booqableOptions.checkoutDomain) {\n      // Make sure we enforce SSL\n      const domain = checkoutURL.match(/(https|http):\\/\\/(.*)\\/checkout/)[2]\n\n      checkoutURL = checkoutURL.replace(domain, booqableOptions.checkoutDomain)\n    }\n\n    const checkoutURLwithSearch = window.Booqable.decorateLinkForTracking(`${checkoutURL}${window.location.search}`)\n\n    store.dispatch({\n      type: 'SET_CHECKING_OUT',\n      payload: false\n    })\n\n    window.location = checkoutURLwithSearch\n  },\n\n  setCartId (id) {\n    const store = window.booqableGetStore()\n\n    return store.dispatch({\n      type: 'SET_CART_ID',\n      payload: {\n        cartId: id\n      }\n    })\n  },\n\n  evaluateCartOverdue () {\n    const store = window.booqableGetStore()\n    const state = store.getState()\n\n    const cartId = state.client.get('cartId')\n    const cart = state.orm.carts.getById(cartId)\n\n    const overdue = cartUtils.isOverdue(cart)\n\n    store.dispatch({ type: 'SET_CART_OVERDUE', payload: overdue })\n\n    return overdue\n  }\n}\n\nexport default clientActions\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Item.actions.fetchAllOnPage = function (cartId) {\n  let id\n\n  let products = document.getElementsByClassName('booqable-product')\n\n  const itemIds = []\n  const specificIds = []\n\n  for (const node of Array.from(products)) {\n    ({ id } = node.dataset)\n    itemIds.push(id)\n  }\n\n  products = document.getElementsByClassName('booqable-product-button')\n\n  for (const node of Array.from(products)) {\n    ({ id } = node.dataset)\n    specificIds.push(id)\n  }\n\n  products = document.getElementsByClassName('booqable-product-detail')\n\n  for (const node of Array.from(products)) {\n    ({ id } = node.dataset)\n    specificIds.push(id)\n  }\n\n  if (specificIds.length > 0) {\n    Model.Bundle.actions.fetchAll({ ids: specificIds, cart_id: cartId, apiVersion: 3 })\n    Model.ProductGroup.actions.fetchAll({ ids: specificIds, cart_id: cartId, apiVersion: 3, include: 'products' })\n  }\n\n  if (itemIds.length > 0) {\n    Model.Item.actions.fetchAll({ ids: itemIds, cart_id: cartId, apiVersion: 3 })\n  }\n}\n\nModel.Item.createAction('FETCH_ALL', (options) => {\n  if (options == null) {\n    options = {}\n  }\n\n  return API.post('items', options)\n})\n\nexport default Model.Item.actions\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Bundle.createAction('FETCH_ALL', (options) => {\n  if (options == null) {\n    options = {}\n  }\n\n  return API.post('bundles', options)\n})\n\nModel.Bundle.createAction('CONFIGURATION_AVAILABILITY', (options) => {\n  return API.get(`bundles/${options.id}/configuration`, options)\n})\n\nexport default Model.Bundle.actions\n","import Model from '../models'\nimport API from '../../api'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nModel.ProductGroup.actions.fetchAllOnPage = function () {\n  let id\n  let products = document.getElementsByClassName('booqable-product')\n  const productIds = []\n\n  for (const node of Array.from(products)) {\n    // Get product group id\n    ({ id } = node.dataset)\n    productIds.push(id)\n  }\n\n  products = document.getElementsByClassName('booqable-product-button')\n\n  for (const node of Array.from(products)) {\n    // Get product group id\n    ({ id } = node.dataset)\n    productIds.push(id)\n  }\n\n  products = document.getElementsByClassName('booqable-product-detail')\n\n  for (const node of Array.from(products)) {\n    // Get product group id\n    ({ id } = node.dataset)\n    productIds.push(id)\n  }\n\n  const cartId = getLocalCartId()\n\n  return Model.ProductGroup.actions.fetchAll({ ids: productIds, cart_id: cartId })\n}\n\nModel.ProductGroup.createAction('FETCH_ALL', (options) => {\n  if (options == null) {\n    options = {}\n  }\n\n  return API.post('product_groups', options)\n})\n\nModel.ProductGroup.createAction('FETCH_SERVICES', (options) => {\n  return API.post('product_groups/services', { ...options, apiVersion: 1 })\n})\n\nexport default Model.ProductGroup.actions\n","export default {\n  isSquarespace: () => {\n    const iterator = document.createNodeIterator(document.head, NodeFilter.SHOW_COMMENT, filterNone, false)\n    let curNode = iterator.nextNode()\n\n    while (curNode) {\n      if (curNode.nodeValue === ' This is Squarespace. ') {\n        return true\n      }\n      curNode = iterator.nextNode()\n    }\n  },\n  isWix: () => {\n    const metaNode = document.querySelector('meta[name=\"generator\"]')\n\n    if (metaNode) {\n      return metaNode.content === 'Wix.com Website Builder'\n    }\n  },\n  isWeebly: () => {\n    if (window._W) {\n      return true\n    }\n  },\n  isShopify: () => {\n    if (window.Shopify) {\n      return true\n    }\n  }\n}\n\nconst filterNone = () => {\n  return NodeFilter.FILTER_ACCEPT\n}\n","import SettingUtils from 'shared/utils/settings'\n\nexport function triggerUserFrameworkBookEvent (productId, quantity) {\n  const _store = window.store || window.booqableStore\n  const state = _store && _store.getState()\n\n  if (quantity === 0) {\n    return\n  }\n\n  const settings = state.client || state.session\n  const currencySettings = settings.get('currency')\n  const currency = currencySettings.name || currencySettings.get('name')\n\n  const line = state.orm.lines.filter((line) => {\n    return line.item_id === productId\n  }).first()\n  const event = quantity > 0 ? 'addToCart' : 'removeFromCart'\n  const data = {\n    value: line.price_each_in_cents / 100,\n    currency,\n    items: [{\n      item_id: line.product.id,\n      item_name: line.product.name,\n      quantity: Math.abs(quantity),\n      price: line.price_each_in_cents / 100\n    }]\n  }\n\n  window.Booqable._trigger(event, data)\n}\n\nexport function triggerUserFrameworkViewProductEvent (product) {\n  const _store = window.store || window.booqableStore\n  const state = _store && _store.getState()\n  const settings = state.client || state.session\n\n  const currencySettings = settings.get('currency')\n  const currency = currencySettings.iso_code || currencySettings.get('iso_code')\n\n  window.Booqable._trigger('viewProduct', {\n    value: product.price_in_cents / 100,\n    currency,\n    items: [{\n      item_id: product.id,\n      item_name: product.name,\n      quantity: 1,\n      price: product.price_each_in_cents / 100\n    }]\n  })\n}\n\nexport function setUserFrameworkCartData () {\n  const _store = window.store || window.booqableStore\n  const state = _store && _store.getState()\n\n  const cart = state.orm.carts.getById(state.client?.cartId) || state.orm.carts.first()\n  const coupon = cart && cart.coupon_id && state.orm.coupons.getById(cart.coupon_id)\n  const settings = state.client || state.session\n\n  const currencySettings = settings.get('currency')\n  const currency = currencySettings.name || currencySettings.get('name')\n\n  if (cart) {\n    const data = {\n      cartId: cart.id,\n      orderId: cart.order_id,\n      deposit: cart.deposit_in_cents / 100,\n      couponDiscount: cart.coupon_discount_in_cents / 100,\n      toBePaid: cart.to_be_paid_in_cents / 100,\n      totalDueLater: cart.total_due_later_in_cents / 100,\n      grandtotal: cart.grand_total_in_cents / 100,\n      grandTotalWithTax: cart.grand_total_with_tax_in_cents / 100,\n      tax: cart.tax_values.map((taxValue) => taxValue.value_in_cents / 100)\n        .reduce((prev, current) => prev + current, 0),\n      coupon: coupon && coupon.identifier,\n      items: cart.lines.map((line) => {\n        line = typeof line === 'string' ? state.orm.lines.getById(line) : line\n\n        return {\n          item_id: line.item_id,\n          item_name: line.title,\n          quantity: line.quantity,\n          price: line.price_each_in_cents / 100\n        }\n      }),\n      currency: currency || 'USD'\n    }\n\n    window.Booqable.setCartData(data)\n  }\n}\n\nexport function initShopTracking () {\n  const Booqable = window.Booqable\n\n  const googleAnalytics = SettingUtils.get('store.google_analytics_id')\n  const facebookPixel = SettingUtils.get('store.facebook_pixel_id')\n\n  if (googleAnalytics) {\n    Booqable._setupGoogleAnalyticsDefaultEvents()\n  }\n\n  if (facebookPixel) {\n    Booqable._setupFacebookDefaultEvents()\n  }\n\n  setUserFrameworkCartData()\n}\n","import styled from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\n\nexport const Period = styled.div`\n  cursor: pointer;\n\n  ${Icon} {\n    font-size: 12px;\n    margin: 0 ${size('margin', 'xs')};\n\n    &:last-child {\n      margin-right: 0;\n    }\n  }\n`\n\nexport const Details = styled.div`\n  display: flex;\n  flex-flow: row nowrap;\n\n  justify-content: space-between;\n  align-items: center;\n\n  font-size: 14px;\n  text-align: left;\n`\n\nexport const Detail = styled.div``\n\nexport const Location = styled.p`\n  font-size: 13px !important;\n  font-weight: 500 !important;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`\n\nexport const DateTime = styled.p`\n  font-size: 12px !important;\n  font-weight: 300 !important;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  &:first-letter {\n    text-transform: uppercase;\n  }\n`\n\nexport const ChoosePeriod = styled.p`\n  width: 100%;\n  text-align: center;\n  font-size: 14px !important;\n`\n\nconst DatesBase = styled.div`\n  position: relative;\n\n  display: flex;\n  align-items: center;\n\n  padding: ${size('padding', 'sm')} ${size('padding', 'md')} !important;\n`\n\nexport const WithDates = styled(DatesBase)`\n  ${Details} {\n    width: calc(100% - 12px - (1.5 * ${size('padding', 'md')}));\n  }\n\n  ${Icon} {\n    &:last-child {\n      position: absolute;\n\n      top: 50%;\n      right: ${size('padding', 'md')};\n\n      transform: translateY(-50%);\n    }\n  }\n`\n\nexport const NoDates = styled(DatesBase)`\n  ${Icon} {\n    &:last-child {\n      position: absolute;\n\n      top: 50%;\n      right: ${size('padding', 'md')};\n\n      transform: translateY(-50%);\n    }\n  }\n`\n\nexport const Placeholder = styled.p`\n  font-size: 14px !important;\n`\n","import {\n  Period,\n  Details,\n  Detail,\n  Location,\n  DateTime,\n  NoDates,\n  WithDates,\n  ChoosePeriod,\n  Placeholder\n} from './styles'\n\nPeriod.Details = Details\nPeriod.Detail = Detail\nPeriod.Location = Location\nPeriod.DateTime = DateTime\nPeriod.NoDates = NoDates\nPeriod.WithDates = WithDates\nPeriod.ChoosePeriod = ChoosePeriod\nPeriod.Placeholder = Placeholder\n\nexport default Period\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport BPeriod from '../../blocks/Period'\nimport Icon from 'ui/components/Icon'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport class Period extends Component {\n  static displayName = 'Period'\n\n  static propTypes = {\n    cart: PropTypes.any,\n    hasDates: PropTypes.bool,\n    useTimes: PropTypes.bool,\n    timeFormat: PropTypes.any,\n    locations: PropTypes.object,\n    autoOpenedModal: PropTypes.bool,\n    onAutoModal: PropTypes.func,\n    open: PropTypes.bool,\n    modalOpen: PropTypes.bool,\n    togglePicker: PropTypes.func,\n    t: PropTypes.func\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { autoOpenedModal, onAutoModal, hasDates, open, modalOpen } = this.props\n\n    if (!autoOpenedModal && !prevProps.open && open && !hasDates && !modalOpen) {\n      onAutoModal(() => {\n        this.props.togglePicker(true)\n      })\n    }\n  }\n\n  handleOpenModal = () => {\n    this.props.togglePicker(true)\n  }\n\n  render () {\n    const { cart, locations, useTimes, hasDates, t } = this.props\n    const hasLocations = locations.size() > 1\n\n    return (\n      <BPeriod data-tid=\"Select dates\" className=\"bq-branded\" onClick={this.handleOpenModal}>\n        {hasDates ?\n          (\n            <BPeriod.WithDates className=\"bq-selected-dates\">\n              <BPeriod.Details>\n                <BPeriod.Detail>\n                  {hasLocations && (\n                    <BPeriod.Location className=\"bq-branded\">\n          {cart && cart.start_location_id ? locations.getById(cart.start_location_id)?.name : null}\n        </BPeriod.Location>\n                  )}\n                  <BPeriod.DateTime className=\"bq-branded\">\n                    {`${Format.date(\n                      cart ? cart.starts_at : undefined,\n                      'date'\n                    )}${useTimes ?\n                      `, ${Format.date(\n                        cart ? cart.starts_at : undefined,\n                        this.props.timeFormat\n                      )}` :\n                      ''}`}\n                  </BPeriod.DateTime>\n                </BPeriod.Detail>\n                <Icon icon=\"arrow-right\" />\n                <BPeriod.Detail>\n                  {hasLocations && (\n                    <BPeriod.Location className=\"bq-branded\">\n          {cart && cart.stop_location_id ? locations.getById(cart.stop_location_id)?.name : null}\n        </BPeriod.Location>\n                  )}\n                  <BPeriod.DateTime className=\"bq-branded\">\n                    {`${Format.date(\n                      cart ? cart.stops_at : undefined,\n                      'date'\n                    )}${useTimes ?\n                      `, ${Format.date(\n                        cart ? cart.stops_at : undefined,\n                        this.props.timeFormat\n                      )}` :\n                      ''}`}\n                  </BPeriod.DateTime>\n                </BPeriod.Detail>\n              </BPeriod.Details>\n              <Icon icon=\"sliders-v\" />\n            </BPeriod.WithDates>\n          ) :\n          (\n            <BPeriod.NoDates className=\"bq-branded-border\">\n              <BPeriod.ChoosePeriod>{t('user.store.select_a_period')}</BPeriod.ChoosePeriod>\n              <Icon icon=\"sliders-v\" />\n            </BPeriod.NoDates>\n          )}\n      </BPeriod>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  let timeFormat\n\n  if (state.settings.get('dates.use_am_pm')) {\n    timeFormat = 'hh:mm A'\n  } else {\n    timeFormat = 'HH:mm'\n  }\n\n  return {\n    locale: state.client.locale,\n    timeFormat,\n    useTimes: state.settings.get('store.use_times'),\n    open: state.client.cartOpen,\n    modalOpen: state.client.modalPickerOpen\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    togglePicker: ClientActions.toggleModalPicker\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(Period)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport uiConnect from 'shared/redux/interface'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport cartActions from 'store/v2/redux/actions/cart'\nimport Format from 'shared/utils/format'\n\nclass Line extends React.Component {\n  static displayName = 'Line'\n\n  static propTypes = {\n    updateUI: PropTypes.func,\n    line: PropTypes.any,\n    useAvailability: PropTypes.bool,\n    hasDates: PropTypes.any,\n    decreaseQty: PropTypes.func,\n    increaseQty: PropTypes.func,\n    currency: PropTypes.any,\n    showPrices: PropTypes.any,\n    hideProductAvailabilityQuantities: PropTypes.bool,\n    remove: PropTypes.func,\n    ui: PropTypes.shape({\n      quantity: PropTypes.number,\n      deleting: PropTypes.bool\n    }),\n    style: PropTypes.shape({\n      opacity: PropTypes.number,\n      transform: PropTypes.string\n    }),\n    t: PropTypes.func\n  }\n\n  componentDidMount = () => {\n    const { line, updateUI } = this.props\n\n    updateUI({ quantity: line.quantity })\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { line, updateUI } = this.props\n\n    if (line && prevProps.line && line.quantity !== prevProps.line.quantity) {\n      updateUI({ quantity: line.quantity })\n    }\n  }\n\n  render () {\n    const {\n      style,\n      line,\n      currency,\n      hasDates,\n      useAvailability,\n      hideProductAvailabilityQuantities,\n      showPrices,\n      decreaseQty,\n      remove,\n      increaseQty,\n      ui,\n      t\n    } = this.props\n\n    const available = line.available_quantity >= ui.quantity\n    const statusClass = available ? 'bq-available' : 'bq-unavailable'\n    const titleClass = useAvailability ? 'bq-small' : 'bq-large'\n\n    if (line.product_type === 'service') return null\n\n    return (\n      <div\n        key={line.title}\n        style={style}\n        className=\"bq-list-item\"\n      >\n        {line?.photo_url && <img className=\"bq-product-image\" src={line.photo_url} />}\n        {!line?.photo_url && (\n          <span className=\"bq-no-photo\">\n            <i className=\"bq-no-photo bq-icon-image fas fa-image\" />\n          </span>\n        )}\n        <div className=\"bq-cart-line\">\n          <div className={`bq-product-name ${titleClass}`}>{line.title}</div>\n          {hasDates && useAvailability && (\n            <span className={`bq-status-indicator ${statusClass}`}>\n              {!hideProductAvailabilityQuantities && (\n                <Fragment>\n                  <span className=\"bq-status-quantity\">\n                    {line.available_quantity}\n                    {' '}\n                  </span>\n                  {t('user.store.available')}\n                </Fragment>\n              )}\n              {hideProductAvailabilityQuantities &&\n                t(available ? 'user.store.available' : 'user.store.unavailable')}\n            </span>\n          )}\n          <div className={`bq-quantity ${ui.deleting ? 'disabled' : 'enabled'}`}>\n            <button className=\"bq-quantity-toggle\" onClick={decreaseQty}>\n              -\n            </button>\n            <span className=\"bq-quantity\">{ui.quantity}</span>\n            <button className=\"bq-quantity-toggle\" onClick={increaseQty}>\n              +\n            </button>\n          </div>\n        </div>\n        <div className=\"bq-line-footer\">\n          {showPrices && !line.discountable && (\n            <p className=\"bq-product-discountable-hint\">\n              <i className=\"bq-icon-tag fas fa-tag\" />\n              {t('user.store.not_discountable_hint')}\n            </p>\n          )}\n          {showPrices && line.display_price_in_cents > 0 && (\n            <p className=\"bq-price\">{Format.money(line.display_price_in_cents, currency)}</p>\n          )}\n        </div>\n        <button className=\"bq-remove-product\" onClick={ui.deleting ? undefined : remove}>\n          <i className=\"bq-icon-cross fas fa-times\" />\n        </button>\n      </div>\n    )\n  }\n}\n\nconst uiToProps = {\n  persist: true,\n  state: {\n    quantity: 0,\n    deleting: false\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  return {\n    currency: state.client.currency.toJS(),\n    useAvailability: state.settings.get('store.use_availability') && props.line.tracking_type !== 'none',\n    hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities'),\n    showPrices: state.settings.get('store.use_prices')\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n  const book = function (quantity) {\n    if (quantity === 0) {\n      props.updateUI({ deleting: true })\n    }\n\n    if (quantity === -1) {\n      return\n    }\n\n    props.updateUI({ quantity })\n\n    return cartActions\n      .book({\n        item_id: props.line.item_id,\n        line_id: props.line.id,\n        quantity,\n        type: 'set',\n        apiVersion: 1\n      })\n      .then(() => {\n        const quantityChange = quantity - props.line.quantity\n\n        triggerUserFrameworkBookEvent(props.line.item_id, quantityChange)\n      })\n  }\n\n  return {\n    increaseQty: () => {\n      const newQuantity = props.ui.quantity + 1\n\n      return book(newQuantity)\n    },\n    decreaseQty: () => {\n      const newQuantity = props.ui.quantity - 1\n\n      return book(newQuantity)\n    },\n    remove: () => book(0)\n  }\n}\n\nexport default compose(\n  withTranslation('user'),\n  uiConnect('Line', uiToProps),\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Line)\n","import React from 'react'\nimport PropTypes from 'prop-types'\n\nexport default class Delay extends React.Component {\n  static displayName = 'Delay'\n\n  static propTypes = {\n    initial: PropTypes.number,\n    children: PropTypes.any,\n    value: PropTypes.number,\n    period: PropTypes.number\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      value: this.props.initial\n    }\n  }\n\n  static getDerivedStateFromProps (props, state) {\n    return (props.value === state.value) ? null : { value: props.value }\n  }\n\n  componentDidMount = () => {\n    const setProps = () => this.setState((prevState, props) => {\n      const { value } = props\n\n      // update state only if the value has changed\n      return (prevState.value === value) ? null : { value }\n    })\n\n    return setTimeout(setProps, this.props.period)\n  }\n\n  render = () => {\n    return this.props.children(this.state.value)\n  }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\nconst Logo = ({ width = '52px', height = '28px' }) => (\n  <svg width={width} height={height} viewBox=\"0 0 52 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\">\n    <g stroke=\"none\" strokeWidth=\"1\" fill=\"none\" fillRule=\"evenodd\">\n      <g id=\"icon\" transform=\"translate(0.000000, -6.000000)\">\n        <g transform=\"translate(-0.000000, 6.000000)\">\n          <path d=\"M48.6616,24.8061 C47.6936,25.8961 45.8576,25.5991 42.7846,23.9021 C41.0086,22.9331 39.0666,21.6181 37.0126,20.2281 L36.2236,19.6991 C34.9676,18.8551 33.6686,17.9831 32.4216,17.2181 C32.0956,17.0221 31.7686,16.8271 31.4676,16.6551 L30.8326,16.3041 C30.1396,15.9201 29.5406,15.6241 29.0396,15.4141 C28.9376,15.3671 28.8366,15.3231 28.7126,15.2711 L28.7126,15.2701 C28.5206,15.1861 28.3276,15.1041 28.1346,15.0251 L28.0256,14.9601 L27.9756,14.9601 C24.6466,13.6181 21.1286,12.9381 17.5076,12.9381 C14.5526,12.9381 11.6856,13.3961 8.9366,14.2821 C13.8786,9.7021 20.1486,5.4451 22.3716,4.1521 C23.3316,3.5921 24.5176,3.2961 25.8016,3.2961 C27.0916,3.2961 28.3386,3.6021 29.3126,4.1581 C34.6586,7.2061 48.2086,17.5781 49.0916,22.9811 L49.0926,22.9891 C49.2196,23.7421 49.0786,24.3361 48.6616,24.8061 M4.4186,25.3681 C3.8016,25.3681 3.3536,25.1891 3.0146,24.8081 C2.5706,24.3061 2.4156,23.6741 2.5426,22.8721 C2.5916,22.5571 2.6906,22.2121 2.8396,21.8401 C2.8496,21.8121 2.8656,21.7821 2.8776,21.7551 C2.9436,21.5951 3.0136,21.4321 3.0976,21.2631 C3.1296,21.1981 3.1706,21.1291 3.2046,21.0631 C3.2766,20.9251 3.3466,20.7891 3.4286,20.6461 L3.5066,20.5181 C3.5126,20.5081 3.5206,20.4971 3.5266,20.4871 C4.1376,19.4661 5.0966,18.6151 6.3016,18.0241 C9.8016,16.3081 13.5716,15.4381 17.5076,15.4381 C18.9326,15.4381 20.3396,15.5531 21.7226,15.7841 C21.6666,15.8101 21.6096,15.8421 21.5536,15.8691 C21.3746,15.9571 21.1936,16.0481 21.0106,16.1431 C20.9126,16.1941 20.8146,16.2451 20.7146,16.2981 C20.5296,16.3981 20.3416,16.5011 20.1536,16.6061 C20.0606,16.6581 19.9696,16.7081 19.8766,16.7611 C19.6306,16.9021 19.3826,17.0471 19.1336,17.1961 C19.0806,17.2271 19.0286,17.2581 18.9756,17.2901 C18.7156,17.4461 18.4536,17.6071 18.1906,17.7711 C18.0726,17.8451 17.9536,17.9211 17.8346,17.9961 C17.6636,18.1041 17.4926,18.2121 17.3206,18.3231 C17.1876,18.4081 17.0536,18.4951 16.9196,18.5811 C16.7596,18.6861 16.5986,18.7901 16.4376,18.8961 C16.3016,18.9851 16.1666,19.0731 16.0306,19.1631 C15.8656,19.2721 15.6996,19.3821 15.5346,19.4921 C15.4006,19.5811 15.2656,19.6701 15.1316,19.7591 C14.8606,19.9401 14.5896,20.1211 14.3196,20.3021 C10.5766,22.7931 6.7066,25.3681 4.4186,25.3681 M51.5576,22.5751 C50.3896,15.4541 34.6696,4.3351 30.5506,1.9861 C29.2046,1.2191 27.5186,0.7961 25.8016,0.7961 C24.0766,0.7961 22.4546,1.2091 21.1146,1.9911 C17.9316,3.8421 7.6646,10.8931 2.7376,17.2401 C2.2336,17.8891 1.7976,18.5151 1.4386,19.1051 L1.3486,19.2491 C0.6436,20.4401 0.2256,21.4981 0.0726,22.4861 C-0.1704,24.0231 0.1996,25.3991 1.1446,26.4681 C1.9616,27.3841 3.0936,27.8691 4.4186,27.8691 C7.4626,27.8691 11.4656,25.2041 15.7696,22.3401 C19.2656,20.0021 23.6156,17.0921 25.8366,17.0921 C26.1866,17.0921 26.6346,17.1831 27.1686,17.3631 L27.3076,17.4111 C27.4266,17.4521 27.5466,17.4981 27.6686,17.5461 L28.0316,17.7021 C28.4876,17.8931 29.0086,18.1521 29.6736,18.5201 C29.7506,18.5631 29.8306,18.6071 29.8536,18.6171 C29.9016,18.6441 29.9496,18.6681 30.0066,18.6961 L30.2096,18.8151 C30.5126,18.9891 30.8226,19.1741 31.1236,19.3561 C32.3186,20.0871 33.5946,20.9451 34.8296,21.7741 L35.6106,22.2981 C37.7166,23.7241 39.7056,25.0711 41.5826,26.0941 C43.8556,27.3491 45.6136,27.9331 47.1146,27.9331 C48.5166,27.9331 49.6666,27.4401 50.5306,26.4661 C51.4566,25.4231 51.8106,24.0781 51.5576,22.5751\" />\n        </g>\n      </g>\n    </g>\n  </svg>\n)\n\nLogo.propTypes = {\n  width: PropTypes.string,\n  height: PropTypes.string\n}\n\nexport default Logo\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\n\n// Components\nimport Logo from 'shop-components/components/MiniCart/components/Logo'\n\n// Shared\nimport { featureEnabled, FeatureFlags } from 'shared/utils/features'\n\nexport const PoweredBy = ({ logoWidth }) => {\n  const { t } = useTranslation('user')\n\n  let title = t('user.powered_by_short')\n  let href = 'https://booqable.com/?source=Shop&campaign=Cart'\n\n  if (featureEnabled(FeatureFlags.EQUIPMENT_RENTAL_SOFTWARE_LINK)) {\n    title = t('user.powered_by_equipment_rental_long')\n    href = 'https://booqable.com/equipment-rental-software/?source=Shop&campaign=Cart'\n  }\n\n  return (\n    <a href={href} target=\"_blank\" title={title} rel=\"noreferrer\">\n      <Logo width={logoWidth} />\n      {t('user.powered_by_short')}\n    </a>\n  )\n}\n\nPoweredBy.propTypes = {\n  logoWidth: PropTypes.string\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Line from './line'\nimport Delay from 'store/v2/react/components/delay'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { Motion, spring } from 'react-motion'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport clientActions from 'store/v2/redux/actions/client'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\n\nconst easing = { stiffness: 150, damping: 15 }\n\nclass Lines extends React.Component {\n  static displayName = 'Lines'\n\n  static propTypes = {\n    className: PropTypes.string,\n    hasDates: PropTypes.bool,\n    cannotCheckout: PropTypes.bool,\n    lines: PropTypes.object,\n    toggleCart: PropTypes.func,\n    nonServiceCartLinesCount: PropTypes.number,\n    showPoweredBy: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  componentWillUnmount () {\n    return clientActions.setCartScroll(0)\n  }\n\n  render () {\n    const { lines, hasDates, cannotCheckout, className, toggleCart, nonServiceCartLinesCount, showPoweredBy, t } = this.props\n\n    return (\n      <div id=\"booqable-sidebar-lines\" className={className}>\n        <ReactCSSTransitionGroup transitionName=\"fade\" transitionEnterTimeout={100} transitionLeaveTimeout={100}>\n          {hasDates && cannotCheckout && (\n            <div className=\"bq-notice\">\n              <i className=\"bq-icon-warning fas fa-exclamation-triangle\" />\n              {t('user.store.not_all_products_available')}\n            </div>\n          )}\n        </ReactCSSTransitionGroup>\n        {!!nonServiceCartLinesCount && (\n          <ul className=\"bq-list\">\n            <ReactCSSTransitionGroup\n              transitionName=\"booqable-sidebar-line\"\n              transitionAppear={false}\n              transitionEnter={false}\n              transitionLeaveTimeout={300}\n              component=\"li\"\n            >\n              {lines.map((line, i) => (\n                <Delay key={line.id} initial={0} value={1} period={i * 80}>\n                  {(delayed) => (\n                    <Motion key={line.id} defaultStyle={{ v: 0 }} style={{ v: spring(delayed, easing) }}>\n                      {(value) => (\n                        <Line\n                          uiKey={line.id}\n                          key={line.id}\n                          line={line}\n                          hasDates={hasDates}\n                          style={{\n                            opacity: value.v,\n                            transform: !window.testMode && `scale(${value.v})`\n                          }}\n                        />\n                      )}\n                    </Motion>\n                  )}\n                </Delay>\n              ))}\n            </ReactCSSTransitionGroup>\n          </ul>\n        )}\n        {!nonServiceCartLinesCount && (\n          <div className=\"bq-cleanstate\">\n            {t('user.store.cart_empty')}\n            <button className=\"bq-link\" onClick={toggleCart.bind(null, false)}>\n              {t('user.store.continue_shopping')}\n            </button>\n          </div>\n        )}\n        {!nonServiceCartLinesCount && showPoweredBy && (\n          <div className=\"bq-poweredby\">\n            <PoweredBy logoWidth=\"16px\" />\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const lines = state.orm.lines.getAll({ id: props.cart != null ? props.cart.lines : undefined })\n  const nonServiceCartLinesCount = lines.pluck('product_type').filter((type) => type !== 'service').length\n  const showPoweredBy = state.settings.get('store.show_powered_by')\n\n  return {\n    cartOpen: state.client.cartOpen,\n    lines,\n    nonServiceCartLinesCount,\n    className: 'active',\n    showPoweredBy\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(Lines)\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nimport FormatUtils from 'shared/utils/format'\n\nexport class ProductPrice extends Component {\n  static displayName = 'ProductPrice'\n\n  static propTypes = {\n    chargeLabel: PropTypes.string,\n    priceInCents: PropTypes.number,\n    currency: PropTypes.object,\n    show: PropTypes.bool,\n    productType: PropTypes.string,\n    priceType: PropTypes.string,\n    t: PropTypes.func\n  }\n\n  static defaultProps = {\n    productType: 'rental'\n  }\n\n  render = () => {\n    const { priceInCents, chargeLabel, productType, priceType, t } = this.props\n\n    if (this.props.show) {\n      return (\n        <span className=\"bq-price-details\">\n          {(priceType !== 'fixed' || productType !== 'rental') && (\n            <span className=\"bq-duration\">\n              {(productType === 'rental' || productType === 'bundle') && chargeLabel}\n              {productType === 'consumable' && <b>{t('user.store.buy')}</b>}\n            </span>\n          )}\n          <span className=\"bq-price\">\n            {FormatUtils.money(priceInCents, this.props.currency)}\n          </span>\n        </span>\n      )\n    } else {\n      return false\n    }\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const usePrices = state.settings.get('store.use_prices')\n  const hasPrice = props.priceInCents != null && props.priceInCents >= 0\n\n  return {\n    currency: state.client.currency && state.client.currency.toJS(),\n    show: usePrices && hasPrice\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {}\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(ProductPrice)\n\nexport default withTranslation('user')(reduxComponent)\n","import styled, { css } from 'styled-components'\nimport { fontSize, fontWeight, size } from 'ui/themes/utils'\n\nexport const Services = styled.div`\n  &&& {\n    max-height: 180px;\n    overflow-y: auto;\n    padding-top: 16px;\n\n    /* So scroll bar lines up with products scroll bar */\n    margin-right: -15px;\n    padding-right: 15px;\n\n    /* Shadows to indiciate scroll */\n    background: linear-gradient(#ffffff 33%, rgba(255, 255, 255, 0)),\n      linear-gradient(rgba(255, 255, 255, 0), #ffffff 66%) 0 100%,\n      radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)),\n      radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0)) 0 100%;\n    background-color: #ffffff;\n    background-repeat: no-repeat;\n    background-attachment: local, local, scroll, scroll;\n    background-size: 100% 30px, 100% 30px, 100% 10px, 100% 10px;\n  }\n`\n\nexport const Service = styled.div`\n  &&& {\n    display: flex;\n    justify-content: space-between;\n    padding-top: 8px;\n\n    ${({ disabled }) => disabled && css`\n      opacity: 0.7;\n    `}\n  }\n`\n\nexport const Label = styled.span`\n  &&& {\n    font-size: ${fontSize('md')};\n    font-weight: ${fontWeight('lighter')};\n\n    margin-right: ${size('margin', 'xs')};\n  }\n`\n","import { Services, Service, Label } from './styles'\n\nServices.Service = Service\nServices.Label = Label\n\nexport default Services\n","// React\nimport React, { useCallback, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport ProductPrice from 'store/v2/react/components/product_price'\nimport Switch from 'ui/components/Switch'\nimport BServices from 'store/blocks/Services'\n\n// Shared\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst Service = ({ index, line, service, inCart, hasPrice, toggleService }) => {\n  const [loading, setLoading] = useState(false)\n  const [checked, setChecked] = useState(inCart)\n\n  const handleChangeService = useCallback(() => {\n    const value = !checked\n\n    setLoading(true)\n    toggleService(value).then(() => {\n      if (checked !== value) {\n        setChecked(value)\n      }\n    }).catch((error) => {\n      console.error(error)\n    }).finally(() => {\n      setLoading(false)\n    })\n  }, [checked])\n\n  return (\n    <BServices.Service data-tid={`Service #${index + 1}`} disabled={!checked}>\n      <BServices.Label className=\"service-label\">\n        {service.name}\n        {' '}\n        {hasPrice && SettingsUtils.get('store.use_prices') && (\n          <span>\n            (\n            <ProductPrice\n              chargeLabel={(line || service).charge_label}\n              priceInCents={line?.display_price_in_cents || service?.price_in_cents}\n              priceType={(line || service).price_type}\n              productType={(line || service).product_type}\n            />\n            )\n          </span>\n        )}\n      </BServices.Label>\n      <Switch\n        className=\"service-toggle\"\n        field={{ value: checked, onChange: handleChangeService }}\n        disabled={loading}\n        withActiveEffect={false}\n        relative\n        block\n      />\n    </BServices.Service>\n  )\n}\n\nService.displayName = 'Service'\n\nService.propTypes = {\n  index: PropTypes.number,\n  line: PropTypes.object,\n  service: PropTypes.object,\n  inCart: PropTypes.bool,\n  hasPrice: PropTypes.bool,\n  toggleService: PropTypes.func\n}\n\nconst mapStateToProps = (_state, props) => {\n  const hasPrice =\n    props.service?.price_in_cents >= 0 &&\n    props.service?.price_in_cents !== null &&\n    props.service?.price_type !== 'none' &&\n    props.service?.price_type !== null\n\n  return {\n    line: props.lines\n      .getAll({ item_id: props.service.id })\n      .reverse()\n      .first(),\n    checked: props.inCart,\n    hasPrice\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n  const book = (quantity) => {\n    return CartActions.book({\n      item_id: props.service.id,\n      quantity,\n      type: 'set',\n      apiVersion: 1\n    }).then(() => {\n      const quantityChange = quantity === 0 ? -1 : 1\n\n      triggerUserFrameworkBookEvent(props.service.id, quantityChange)\n    })\n  }\n\n  return {\n    toggleService: (value) => {\n      if (value) {\n        return book(1)\n      } else {\n        return book(0)\n      }\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport Service from './Service'\nimport BServices from 'store/blocks/Services'\n\n// Shared\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nconst Services = ({ cart, lines, services, items, fetchServices }) => {\n  useEffect(() => {\n    if (cart) {\n      fetchServices(cart.id)\n    }\n  }, [cart?.id, cart?.starts_at, cart?.stops_at])\n\n  const isServiceInCart = useCallback(\n    (serviceId) => {\n      return items.includes(serviceId)\n    },\n    [items]\n  )\n\n  return (\n    <BServices className=\"bq-service-lines\">\n      {services.map((service, index) => {\n        const inCart = isServiceInCart(service.id)\n\n        return <Service key={service.id} index={index} lines={lines} service={service} inCart={inCart} />\n      })}\n    </BServices>\n  )\n}\n\nServices.displayName = 'Services'\n\nServices.propTypes = {\n  cart: PropTypes.object,\n  lines: PropTypes.object,\n  services: PropTypes.object,\n  items: PropTypes.object,\n  fetchServices: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const lines = state.orm.lines.getAll({ id: props.cart != null ? props.cart.lines : undefined })\n  const items = lines.map((line) => line.item_id)\n  const enabledServices = state.orm.product_groups.getAll({ product_type: 'service', show_in_store: true })\n  const services =\n    state.orm.products\n      .getAll({ product_type: 'service', product_group_id: enabledServices.pluck('id') })\n      .sortBy((product) => enabledServices.getById(product.product_group_id)?.sorting_weight)\n\n  return {\n    lines,\n    services,\n    items\n  }\n}\n\nconst mapDispatchToProps = (_dispatch) => ({\n  fetchServices: (cartId) => ProductGroupActions.fetchServices({ cart_id: cartId })\n})\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Services)\n","import styled from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nconst Overdue = styled.div`\n  margin-top: 15px !important;\n  color: ${color('Accent6/Base')};\n  line-height: 1.2rem;\n  i {\n    margin-right: 5px;\n  }\n`\n\nexport default Overdue\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport BOverdue from 'store/v2/react/scenes/cart/blocks/Overdue'\n\n// Shared\n\n/**\n * Overdue notification\n *\n * @example\n *   <Overdue show={Boolean} websiteURL={String} />\n */\n\nexport class Overdue extends Component {\n  static displayName = 'Overdue'\n\n  static propTypes = {\n    show: PropTypes.bool\n  }\n\n  render = () => {\n    return this.props.show && (\n      <BOverdue>\n        <i className=\"fas fa-exclamation-triangle\" />\n        {this.props.t('user.checkout.dates_in_past')}\n      </BOverdue>\n    )\n  }\n}\n\nexport default withTranslation('user')(Overdue)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Period from 'store/v2/react/scenes/cart/period'\nimport Lines from 'store/v2/react/scenes/cart/lines'\nimport Services from 'store/components/Services'\nimport Overdue from 'store/v2/react/scenes/cart/components/Overdue'\nimport Tooltip from 'ui/components/Tooltip'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { StyleSheetManager } from 'styled-components'\n\n// Shared\nimport ClientActions from 'store/v2/redux/actions/client'\nimport Format from 'shared/utils/format'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport previewUrlComposer from 'shared/utils/previewUrlComposer'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nclass FloatingCart extends Component {\n  static displayName = 'FloatingCart'\n\n  static propTypes = {\n    cartOpen: PropTypes.bool,\n    toggleCart: PropTypes.func,\n    cart: PropTypes.object,\n    locations: PropTypes.object,\n    hasDates: PropTypes.bool,\n    cannotCheckout: PropTypes.bool,\n    showPrices: PropTypes.bool,\n    showPoweredBy: PropTypes.bool,\n    totalPriceAttribute: PropTypes.string,\n    currency: PropTypes.object,\n    checkingOut: PropTypes.bool,\n    setCheckingOut: PropTypes.func,\n    viewCartHref: PropTypes.string,\n    checkoutButtonValid: PropTypes.bool,\n    cartOverdue: PropTypes.bool,\n    inPortal: PropTypes.bool,\n    nonServiceCartLinesCount: PropTypes.number,\n    t: PropTypes.func\n  }\n\n  state = {\n    autoOpenedModal: false\n  }\n\n  onAutoModal = (callback) => {\n    // Needs to live in parent state as Period gets unmounted\n    // on some transitions losing state\n    this.setState({ autoOpenedModal: true }, callback)\n  }\n\n  renderCheckoutButton = () => {\n    const { checkoutButtonValid, hasDates, cannotCheckout, setCheckingOut, viewCartHref, t } = this.props\n    const checkoutButtonClass = checkoutButtonValid ? 'bq-enabled' : 'bq-disabled'\n\n    const checkoutButton = (\n      <button onClick={setCheckingOut} className={`bq-branded bq-button ${checkoutButtonClass}`}>\n        {t('user.store.checkout')}\n      </button>\n    )\n\n    let tooltipContent = t('user.store.select_a_period')\n\n    if (hasDates && cannotCheckout) {\n      tooltipContent = t('user.store.not_all_products_available')\n    }\n\n    return (\n      <div className=\"button-group\">\n        {viewCartHref && (\n          <a href={window.Booqable.decorateLinkForTracking(viewCartHref)} className=\"bq-branded bq-button\">\n            {t('user.store.view_cart')}\n          </a>\n        )}\n        {checkoutButtonValid && (\n          checkoutButton\n        )}\n        {!checkoutButtonValid && (\n          <Tooltip direction=\"bottom\" content={tooltipContent}>\n            {checkoutButton}\n          </Tooltip>\n        )}\n      </div>\n    )\n  }\n\n  render () {\n    const { autoOpenedModal } = this.state\n    const {\n      cart,\n      cartOpen,\n      toggleCart,\n      cartOverdue,\n      cannotCheckout,\n      checkingOut,\n      hasDates,\n      showPrices,\n      showPoweredBy,\n      currency,\n      totalPriceAttribute,\n      inPortal,\n      locations,\n      nonServiceCartLinesCount,\n      t\n    } = this.props\n    const floatingCartClasses = []\n\n    floatingCartClasses.push(cartOpen ? 'open' : 'closed')\n\n    if (inPortal) {\n      floatingCartClasses.push('portal')\n    }\n\n    return (\n      <ReactCSSTransitionGroup\n        transitionName=\"booqable-sidebar\"\n        transitionEnterTimeout={100}\n        transitionLeaveTimeout={100}\n      >\n        <div\n          id=\"booqable-sidebar-inner\"\n          key={`booqable-sidebar-${cartOpen}`}\n          data-tid=\"Mini cart\"\n          className={floatingCartClasses.join(' ')}\n        >\n          <div className=\"bq-sidebar-head\">\n            <button className=\"bq-branded bq-close\" onClick={toggleCart.bind(null, false)}>\n              <i className=\"bq-icon-cross fas fa-times\" />\n            </button>\n            <div className=\"bq-branded bq-title\">{t('user.store.my_order')}</div>\n            <StyleSheetManager target={document.body} shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n              <Period\n                cart={cart}\n                hasDates={hasDates}\n                locations={locations}\n                autoOpenedModal={autoOpenedModal}\n                onAutoModal={this.onAutoModal}\n              />\n            </StyleSheetManager>\n          </div>\n          <Lines toggleCart={toggleCart} cart={cart} cannotCheckout={cannotCheckout} hasDates={hasDates} />\n          <ReactCSSTransitionGroup\n            transitionName=\"booqable-sidebar-summary\"\n            transitionEnterTimeout={150}\n            transitionLeaveTimeout={150}\n            component=\"div\"\n          >\n            {nonServiceCartLinesCount > 0 && (\n              <div id=\"booqable-sidebar-summary\">\n                {cart && (\n                  <StyleSheetManager target={document.body} shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n                    <Services cart={cart} />\n                  </StyleSheetManager>\n                )}\n                {showPrices && (\n                  <div>\n                    <div className=\"bq-detail bq-strong\">\n                      <span>{t('user.store.subtotal')}</span>\n                      <span className=\"bq-amount\">{Format.money(cart?.get(totalPriceAttribute), currency)}</span>\n                    </div>\n\n                    {cart !== null && cart.get('deposit_in_cents') !== 0 && (\n                      <div className=\"bq-detail\">\n                        <span>{t('user.store.security_deposit')}</span>\n                        <span className=\"bq-amount\">{Format.money(cart.get('deposit_in_cents'), currency)}</span>\n                      </div>\n                    )}\n\n                    <Overdue show={cartOverdue} />\n                  </div>\n                )}\n                {checkingOut && (\n                  <div className=\"bq-loading-wrapper\">\n                    <div className=\"bq-loader\" />\n                  </div>\n                )}\n                {!checkingOut && this.renderCheckoutButton()}\n                {showPoweredBy && (\n                  <div className=\"bq-poweredby\">\n                    <PoweredBy logoWidth=\"16px\" />\n                  </div>\n                )}\n              </div>\n            )}\n          </ReactCSSTransitionGroup>\n        </div>\n      </ReactCSSTransitionGroup>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  let cannotCheckout, totalPriceAttribute\n\n  const slug = state.client.getIn(['company', 'slug'])\n  const cart = state.orm.carts.getById(state.client.cartId)\n\n  const cartLines = state.orm.lines.getById(cart.lines)\n  const nonServiceCartLinesCount = cartLines.pluck('product_type').filter((type) => type !== 'service').length\n\n  const cartOverdue = state.client.cartOverdue\n\n  const searchParams = new URLSearchParams(window.location.search)\n  const href = window.booqableOptions.preview ?\n    previewUrlComposer({ slug, themeId: searchParams.get('theme_id'), key: 'templates/cart.json' }) :\n    props.href || cart?.cart_url\n\n  if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n    totalPriceAttribute = 'grand_total_with_tax_in_cents'\n  } else {\n    totalPriceAttribute = 'grand_total_in_cents'\n  }\n\n  const hasDates = !!(cart?.starts_at && cart?.stops_at)\n  const useAvailability = state.settings.get('store.use_availability')\n\n  // Check if we need to calculate if use can checkout\n  if (useAvailability) {\n    cannotCheckout =\n      state.orm.lines\n        .getAll({\n          id: cart?.lines,\n          can_checkout: false\n        })\n        .size() > 0\n  } else {\n    cannotCheckout = false\n  }\n\n  // Make sure to typecast to boolean\n  const checkoutButtonValid = !!(nonServiceCartLinesCount && hasDates && !cannotCheckout && !cartOverdue)\n\n  return {\n    cart,\n    nonServiceCartLinesCount,\n    cartOpen: state.client.cartOpen,\n    cartScroll: state.client.cartScroll,\n    currency: state.client.currency?.toJS(),\n    totalPriceAttribute,\n    checkoutButtonValid,\n    hasDates,\n    checkingOut: state.client.checkingOut,\n    cannotCheckout,\n    showPrices: state.settings.get('store.use_prices'),\n    showPoweredBy: state.settings.get('store.show_powered_by'),\n    cartOverdue,\n    locations: state.orm.locations.getAll().sort('name'),\n    viewCartHref: href\n  }\n}\n\nconst mapDispatchToProps = () => {\n  return {\n    toggleCart: (cartOpen) => {\n      return ClientActions.toggleCart(cartOpen)\n    },\n    setCheckingOut: (e) => {\n      e.preventDefault()\n\n      if (ClientActions.evaluateCartOverdue()) return\n\n      ClientActions.setCheckingOut()\n    }\n  }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(FloatingCart)\n","import styled, { css } from 'styled-components'\nimport { color, size, fontSize, fontWeight } from 'ui/themes/utils'\n\nimport Div from 'ui/elements/Div'\nimport Button from 'ui/elements/Button'\n\nexport const Backdrop = styled(Div)`\n  position: fixed;\n\n  display: flex;\n  justify-content: center;\n\n  top: 0;\n  left: 0;\n\n  width: 100vw;\n  height: 100%;\n\n  /* 99 = 0.6 opacity */\n  background: ${color('Accent2/Controlvariant1')}99;\n\n  opacity: ${({ state }) => (state === 'entered' ? 1 : 0)};\n\n  padding: ${size('padding', 'lg')};\n\n  font-family: ${(props) => props.theme.font.body};\n\n  transition: 0.25s all;\n\n  z-index: 10000000;\n\n  box-sizing: border-box;\n`\n\nexport const Body = styled(Div)`\n  padding: ${size('padding', 'md')};\n\n  @media screen and (max-height: 562px) {\n    max-height: none;\n  }\n`\n\nexport const Header = styled(Div)`\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n\n  padding: ${size('padding', 'md')};\n\n  &:empty {\n    padding: 0;\n  }\n`\n\nexport const Footer = styled(Div)`\n  display: flex;\n\n  padding: ${size('padding', 'md')};\n\n  background-color: ${color('white')};\n\n  box-shadow: 0 -4px 10px 0 rgba(0, 0, 0, 0.18);\n\n  z-index: 100;\n\n  position: sticky;\n  bottom: 0;\n  left: 0;\n  right: 0;\n`\n\nexport const Container = styled(Div)`\n  max-width: 825px;\n  max-height: 100%;\n  width: 100%;\n\n  background: ${color('white')};\n\n  box-shadow: 0 7px 10px 0 rgba(0, 0, 0, 0.18);\n\n  border-radius: ${size('borderRadius')};\n\n  margin: auto 0;\n\n  opacity: 0;\n\n  transform: translateY(15%);\n\n  position: relative;\n\n  ${({ state }) => state === 'entered' && css`\n    opacity: 1;\n    transform: translateY(0);\n  `}\n\n  overflow-y: auto;\n  transition: all 0.25s ease;\n`\n\nexport const Close = styled(Button)`\n  appearance: none;\n\n  background: transparent;\n\n  border: none;\n\n  position: absolute;\n\n  top: ${size('padding', 'sm')};\n  right: ${size('padding', 'sm')};\n\n  opacity: 0.6;\n\n  padding: 0;\n\n  font-weight: ${fontWeight('bold')};\n  font-size: ${fontSize('lg')};\n\n  cursor: pointer;\n\n  z-index: 99;\n\n  transition: opacity 0.3s ease-in;\n\n  &:hover, &:focus {\n    opacity: 1;\n  }\n`\n","/**\n * @fileoverview A customizable Modal component with header, body, and footer subcomponents.\n * @module Modal\n */\n\n// React\nimport React, { useRef, forwardRef } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Transition, config } from 'react-transition-group'\n\n// Hooks\nimport { useLockScroll } from 'shared/utils/useLockScroll'\n\n// Components\nimport PortalWrapper from 'ui/components/PortalWrapper'\nimport Icon from 'ui/components/Icon'\nimport H3 from 'ui/elements/H3'\nimport { Backdrop, Body, Container, Header, Footer, Close } from 'store/blocks/Modal'\n\n/**\n * @typedef {Object} ModalModifiers\n * @property {string} [backdrop] - Custom CSS class for the backdrop.\n * @property {string} [container] - Custom CSS class for the container.\n */\n\n/**\n * A customizable Modal component that can be opened and closed.\n * It uses react-transition-group for enter/exit animations\n * and custom hooks for handling outside clicks and locking the body scroll.\n *\n * @component\n * @param {Object} props - The properties that define the Modal's behavior and content.\n * @param {boolean} props.open - Determines whether the modal is visible.\n * @param {Function} [props.onClose] - Callback function to be called when the modal should be closed.\n * @param {ModalModifiers} [props.modifiers] - Custom CSS classes for styling different parts of the modal.\n * @param {React.ReactNode} props.children - The content to be rendered inside the modal.\n *\n * @example\n * // Named import\n * import { Modal, ModalHeader, ModalBody, ModalFooter } from 'ui/components/Modal'\n *\n * <Modal\n *   open={isOpen}\n *   onClose={handleClose}\n *   modifiers={{ backdrop: 'custom-backdrop', container: 'custom-container' }}\n *  >\n *   <ModalHeader>Modal Title</ModalHeader>\n *   <ModalBody>Modal Content</ModalBody>\n *   <ModalFooter>\n *     <button onClick={handleClose}>Close</button>\n *   </ModalFooter>\n * </Modal>\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Root\n *   open={isOpen}\n *   onClose={handleClose}\n *   modifiers={{ backdrop: 'custom-backdrop', container: 'custom-container' }}\n *  >\n *   <Modal.Header>Modal Title</Modal.Header>\n *   <Modal.Body>Modal Content</Modal.Body>\n *   <Modal.Footer>\n *     <button onClick={handleClose}>Close</button>\n *   </Modal.Footer>\n * </Modal.Root>\n */\nexport const Modal = ({ open, onClose, modifiers, children }) => {\n  // disables animations when in test mode\n  config.disabled = !!window.testMode\n\n  const nodeRef = useRef(null)\n\n  useLockScroll(open)\n\n  const handleBackdropClick = (event) => {\n    if (event.target === event.currentTarget) {\n      onClose?.()\n    }\n  }\n\n  return (\n    <Transition nodeRef={nodeRef} in={open} timeout={{ enter: 0, exit: 250 }}>\n      {(state) => (\n        <PortalWrapper open={open || state === 'exiting' || state === 'entered'}>\n          <Backdrop onClick={handleBackdropClick} state={state} modifiers={modifiers?.backdrop}>\n            <Container data-tid=\"Modal\" state={state} modifiers={modifiers?.container}>\n              {children}\n            </Container>\n          </Backdrop>\n        </PortalWrapper>\n      )}\n    </Transition>\n  )\n}\n\nModal.propTypes = {\n  open: PropTypes.bool.isRequired,\n  onClose: PropTypes.func,\n  modifiers: PropTypes.shape({\n    backdrop: PropTypes.string,\n    container: PropTypes.string\n  }),\n  children: PropTypes.node\n}\n\n/**\n * The close button for the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalClose.\n * @param {Function} props.onClose - Callback function to be called when the close button is clicked.\n *\n * @example\n * // Named import\n * import { ModalClose } from 'ui/components/Modal'\n *\n * <ModalClose onClose={handleClose} />\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Close onClose={handleClose} />\n */\nexport const ModalClose = forwardRef(({ onClose }, ref) => (\n  <Close ref={ref} onClick={onClose} data-tid=\"Close icon\">\n    <Icon icon=\"times\" />\n  </Close>\n))\n\nModalClose.displayName = 'ModalClose'\n\nModalClose.propTypes = {\n  onClose: PropTypes.func\n}\n\n/**\n * The header section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalHeader.\n * @param {React.ReactNode} props.children - The content to be rendered inside the header.\n * @param {string} [props.modifiers] - Custom CSS class for styling the header.\n *\n * @example\n * // Named import\n * import { ModalHeader } from 'ui/components/Modal'\n *\n * <ModalHeader modifiers=\"custom-header-class\">Modal Title</ModalHeader>\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Header modifiers=\"custom-header-class\">Modal Title</Modal.Header>\n */\nexport const ModalHeader = forwardRef(({ children, ...props }, ref) => (\n  <Header ref={ref} {...props}>\n    {children}\n  </Header>\n))\n\nModalHeader.displayName = 'ModalHeader'\n\nModalHeader.propTypes = {\n  children: PropTypes.node\n}\n\n/**\n * The title component for the Modal header.\n *\n * @component\n * @param {Object} props - The properties for the ModalTitle.\n * @param {React.ReactNode} props.children - The content to be rendered as the modal title.\n *\n * @example\n * // Named import\n * import { ModalTitle } from 'ui/components/Modal'\n *\n * <ModalTitle>Welcome to Our Application</ModalTitle>\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Title>Welcome to Our Application</Modal.Title>\n */\nexport const ModalTitle = ({ children, ...props }) => <H3 {...props}>{children}</H3>\n\nModalTitle.propTypes = {\n  children: PropTypes.node\n}\n\n/**\n * The body section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalBody.\n * @param {React.ReactNode} props.children - The content to be rendered inside the body.\n * @param {string} [props.modifiers] - Custom CSS class for styling the body.\n *\n * @example\n * // Named import\n * import { ModalBody } from 'ui/components/Modal'\n *\n * <ModalBody modifiers=\"custom-body-class\">\n *   <p>This is the main content of the modal.</p>\n * </ModalBody>\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Body modifiers=\"custom-body-class\">\n *   <p>This is the main content of the modal.</p>\n * </Modal.Body>\n */\nexport const ModalBody = forwardRef(({ children, ...props }, ref) => (\n  <Body ref={ref} {...props}>\n    {children}\n  </Body>\n))\n\nModalBody.displayName = 'ModalBody'\n\nModalBody.propTypes = {\n  children: PropTypes.node\n}\n\n/**\n * The footer section of the Modal.\n *\n * @component\n * @param {Object} props - The properties for the ModalFooter.\n * @param {React.ReactNode} props.children - The content to be rendered inside the footer.\n * @param {string} [props.modifiers] - Custom CSS class for styling the footer.\n *\n * @example\n * // Named import\n * import { ModalFooter } from 'ui/components/Modal'\n *\n * <ModalFooter modifiers=\"custom-footer-class\">\n *   <button onClick={handleClose}>Close</button>\n *   <button onClick={handleSave}>Save</button>\n * </ModalFooter>\n *\n * @example\n * // Namespace import\n * import * as Modal from 'ui/components/Modal'\n *\n * <Modal.Footer modifiers=\"custom-footer-class\">\n *   <button onClick={handleClose}>Close</button>\n *   <button onClick={handleSave}>Save</button>\n * </Modal.Footer>\n */\nexport const ModalFooter = forwardRef(({ children, ...props }, ref) => (\n  <Footer ref={ref} data-tid=\"Modal actions\" {...props}>\n    {children}\n  </Footer>\n))\n\nModalFooter.displayName = 'ModalFooter'\n\nModalFooter.propTypes = {\n  children: PropTypes.node\n}\n","import { useLayoutEffect } from 'react'\n\nexport const useLockScroll = (open) => {\n  useLayoutEffect(() => {\n    const originalStyle = window.getComputedStyle(document.body).overflow\n\n    if (open) {\n      document.body.style.overflow = 'hidden'\n    }\n\n    return () => {\n      document.body.style.overflow = originalStyle\n    }\n  }, [open])\n}\n","// React\nimport React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { pick } from 'lodash'\n\n// Components\nimport Select from 'ui/components/Select'\n\n// Hooks\nimport { useFormikContext } from 'formik'\n\nexport const UserAddressesSelect = ({ addresses }) => {\n  const [selectedAddress, setSelectedAddress] = useState(null)\n\n  const form = useFormikContext()\n\n  useEffect(() => {\n    if (!addresses?.length) return\n\n    // Select expecting it's own shape as value\n    setSelectedAddress({\n      value: addresses[0].id,\n      label: addresses[0].value\n    })\n  }, [addresses])\n\n  const options = addresses.map((address) => ({\n    value: address.id,\n    label: address.value\n  }))\n\n  const handleUserAddressSelect = (id) => {\n    const option = options.find((option) => option.value === id)\n\n    if (!option) return\n\n    setSelectedAddress(option)\n\n    const address = addresses.find((address) => address.id === id)\n\n    if (!address) return\n\n    form.setValues({\n      ...form.values,\n      data: {\n        ...form.values.data,\n        delivery_address_property_id: id\n      },\n      delivery_address: pick(address, [\n        'address1',\n        'address2',\n        'zipcode',\n        'city',\n        'region',\n        'province',\n        'country',\n        'country_id'\n      ])\n    })\n  }\n\n  return (\n    <Select\n      value={selectedAddress}\n      options={options}\n      onChange={handleUserAddressSelect}\n      data-tid=\"User addresses select\"\n      forceValue\n      forceOnChange\n    />\n  )\n}\n\nUserAddressesSelect.propTypes = {\n  addresses: PropTypes.array\n}\n","// React\nimport React, { useEffect, useState, Fragment } from 'react'\n\n// Components\nimport AddressFields from 'back_office/modules/addresses/components/AddressFields'\nimport { UserAddressesSelect } from './UserAddressesSelect'\nimport Span from 'ui/elements/Span'\nimport A from 'ui/elements/A'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\n\n// Libraries\nimport axios from 'axios'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useFormikContext } from 'formik'\nimport { useSelector } from 'react-redux'\nimport { useSettings } from 'shared/utils/useSettings'\n\n// Shared\nimport { addressFieldsOrder } from 'back_office/modules/addresses/components/addressFieldsOrder'\nimport { fetchCountriesAndProvinces } from 'back_office/modules/addresses/components/fetchCountriesAndProvinces'\nimport { featureDisabled, FeatureFlags } from 'shared/utils/features'\n\nexport const DeliveryFulfillmentForm = () => {\n  const [userAddresses, setUserAddresses] = useState([])\n  const [isUserAuthenticated, setIsUserAuthenticated] = useState(undefined)\n\n  const form = useFormikContext()\n  const { t, tOrEmptyString, Trans } = useTranslation('user')\n\n  const cartId = useSelector((state) => state.client.cartId)\n\n  const cart = useOrm('carts', (carts) => carts.getById(cartId || window.booqableOptions.cart?.id))\n  const countries = useOrm('countries', (countries) => {\n    return countries.getAll().toArray()\n  })\n  const provinces = useOrm('provinces', (provinces) => {\n    return provinces.getAll().toArray()\n  })\n\n  const isAuthEnabled = useSettings('user.auth_enabled')\n\n  const authUriBase = cart?.user_login_url ?? '/customers/login'\n  const authRedirectUriParamValue = `${window.location.origin}?${encodeURIComponent(\n    'open-picker=true&fulfillment-tab=delivery'\n  )}`\n  const authUri = `${authUriBase}?redirect_uri=${authRedirectUriParamValue}`\n\n  useEffect(() => {\n    if (!cart) return\n    if (!isAuthEnabled) return\n\n    const userAddressesUrl = window.booqableOptions?.apiURL ?\n      `${window.booqableOptions?.apiURL}/user_addresses` :\n      '/user_addresses'\n\n    axios\n      .get(userAddressesUrl)\n      .then(({ data }) => {\n        setIsUserAuthenticated(true)\n        setUserAddresses(data.properties)\n      })\n      .catch(() => {\n        setIsUserAuthenticated(false)\n      })\n  }, [cart?.id, isAuthEnabled])\n\n  useEffect(() => {\n    if (!countries.length || !provinces.length) {\n      fetchCountriesAndProvinces()\n    }\n  }, [])\n\n  return (\n    <Fragment>\n      {isUserAuthenticated && userAddresses.length > 0 && (\n        <Div modifiers=\"margin-bottom-md\">\n          <Label modifiers=\"margin-bottom-xs\">{t('user.deliveries.choose_saved_address')}</Label>\n          <UserAddressesSelect addresses={userAddresses} />\n        </Div>\n      )}\n      <AddressFields\n        defaultFormLayout={addressFieldsOrder()}\n        skipValidation={featureDisabled(FeatureFlags.NEW_ADDRESS_VALIDATION)}\n        invalidExistingAddressWarning={t('user.deliveries.invalid_existing_address_warning')}\n        fieldTranslationPrefix=\"user.deliveries\"\n        errorKey=\"user.public_errors.invalid\"\n        selectPlaceholder={tOrEmptyString('user.checkout.select_placeholder')}\n        initialValues={form.initialValues}\n        countries={countries}\n        provinces={provinces}\n        addressIdentifier=\"delivery_address\"\n        fieldDebounce={750}\n      />\n      {isUserAuthenticated === false && isAuthEnabled && (\n        <Span modifiers=\"display-inline-block font-size-md margin-top-md\">\n          <Trans\n            i18nKey=\"user.deliveries.login\"\n            components={{\n              Link: <A modifiers=\"font-weight-bold font-size-md text-blue text-decoration-none\" href={authUri} />\n            }}\n          />\n        </Span>\n      )}\n    </Fragment>\n  )\n}\n","// React\nimport { useState, useEffect, useCallback, useRef } from 'react'\n\nexport const useCachedQuery = (queryFn, options = {}) => {\n  const [isLoading, setIsLoading] = useState(false)\n\n  // Cache to store results for different keys\n  const cache = useRef(new Map())\n  const previousKey = useRef(options.key)\n\n  useEffect(() => {\n    if (previousKey.current !== options.key) {\n      // If we have cached data for the new key, use it\n      if (options.key !== undefined && cache.current.has(options.key)) {\n        options.onSuccess?.(cache.current.get(options.key))\n      }\n\n      previousKey.current = options.key\n    }\n  }, [options.key])\n\n  const perform = useCallback(\n    async (...args) => {\n      // If key is undefined, always fetch\n      // If key has changed from the previous fetch, fetch again\n      // If key exists but no cached data, fetch\n      const shouldFetch = options.key === undefined || !cache.current.has(options.key)\n\n      if (!shouldFetch) {\n        const cached = cache.current.get(options.key)\n\n        options.onSuccess?.(cached)\n\n        return cached\n      }\n\n      setIsLoading(true)\n\n      options.onLoading?.()\n\n      try {\n        const result = await queryFn(...args)\n\n        options.onSuccess?.(result)\n\n        // Cache the result if we have a key\n        if (options.key !== undefined) {\n          cache.current.set(options.key, result)\n        }\n\n        return result\n      } catch (err) {\n        options.onError?.(err)\n\n        throw new Error(options.errorKey || 'fetch_error')\n      } finally {\n        setIsLoading(false)\n      }\n    },\n    [queryFn, options.key]\n  )\n\n  return {\n    isLoading,\n    perform\n  }\n}\n","import axios from 'axios'\n\nexport const fetchDeliveryOptionsRequest = ({ cartId, deliveryAddress }) => {\n  return axios.post(`${window.booqableOptions?.apiUrl ?? ''}/delivery_options`, {\n    cart_id: cartId,\n    delivery: {\n      address: deliveryAddress\n    },\n    skip_checkout_validation: true,\n    skip_shortage_validation: true\n  })\n}\n","// React\nimport React, { createContext, useState, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { usePrevious } from 'shared/utils/usePrevious'\n\n// Actions\nimport ClientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport CartActions from 'store/v2/redux/actions/cart'\n\n// Shared\nimport moment from 'shared/lib/moment'\nimport { featureEnabled, FeatureFlags } from 'back_office/v2/utils/utils'\n\nexport const CartPickerContext = createContext({\n  cart: null,\n  onSave: async () => {},\n  onChange: () => {},\n  onValidate: () => {},\n  isValid: false,\n  isLoading: false,\n  setLoading: () => {}\n})\n\nexport const CartPickerProvider = ({ children, cart, onSave }) => {\n  const [values, setValues] = useState(null)\n\n  const [isValid, setIsValid] = useState(false)\n  const [isLoading, setIsLoading] = useState(false)\n\n  const previousCart = usePrevious(cart)\n\n  const behavior = useSettings('store.behaviors.location_picker', 'start_stop')\n  const defaultStartLocationId = useSettings('defaults.shop_start_location_id')\n  const defaultStopLocationId = useSettings('defaults.shop_stop_location_id')\n\n  useEffect(() => {\n    if ((!previousCart && cart) || (!previousCart?.starts_at && cart?.starts_at)) {\n      setValues({\n        start_location_id: cart.start_location_id,\n        starts_at: cart.starts_at,\n        stop_location_id: cart.stop_location_id,\n        stops_at: cart.stops_at\n      })\n    }\n\n    const shouldUpdateValues =\n      previousCart?.starts_at !== cart?.starts_at ||\n      previousCart?.stops_at !== cart?.stops_at ||\n      previousCart?.start_location_id !== cart?.start_location_id ||\n      previousCart?.stop_location_id !== cart?.stop_location_id\n\n    if (shouldUpdateValues) {\n      setValues({\n        start_location_id: cart.start_location_id,\n        starts_at: cart.starts_at,\n        stop_location_id: cart.stop_location_id,\n        stops_at: cart.stops_at\n      })\n    }\n  }, [cart, previousCart])\n\n  const handleChange = useCallback((newValues) => {\n    setValues(newValues)\n  }, [])\n\n  const handleValidate = useCallback((valid) => {\n    setIsValid(valid)\n  }, [])\n\n  const handleSave = useCallback(\n    async (payload) => {\n      const nextValues = { ...(payload || values) }\n\n      switch (behavior) {\n        case 'start':\n          nextValues.stop_location_id = nextValues.start_location_id\n          break\n        case 'auto':\n          nextValues.start_location_id = defaultStartLocationId\n          nextValues.stop_location_id = defaultStopLocationId\n          break\n        default:\n          break\n      }\n\n      if (featureEnabled(FeatureFlags.DELIVERIES) && nextValues.data.fulfillment_type === 'delivery') {\n        nextValues.data.delivery_address = nextValues.delivery_address\n\n        delete nextValues.delivery_address\n      }\n\n      setIsLoading(true)\n\n      try {\n        const response = await CartActions.update({\n          ...nextValues,\n          starts_at: moment(nextValues.starts_at),\n          stops_at: moment(nextValues.stops_at)\n        })\n\n        onSave?.()\n\n        const cartId = response.payload.response.cart.id\n\n        await ItemActions.fetchAllOnPage(cartId)\n\n        ClientActions.evaluateCartOverdue()\n\n        setIsLoading(false)\n\n        return response\n      } catch (error) {\n        console.error('Error saving cart', error)\n\n        throw error\n      } finally {\n        setIsLoading(false)\n      }\n    },\n    [values, behavior, defaultStartLocationId, defaultStopLocationId]\n  )\n\n  return (\n    <CartPickerContext.Provider\n      value={{\n        cart,\n        onChange: handleChange,\n        onValidate: handleValidate,\n        onSave: handleSave,\n        isValid: isValid && !!values?.starts_at && !!values?.stops_at,\n        isLoading,\n        setLoading: setIsLoading\n      }}\n    >\n      {children}\n    </CartPickerContext.Provider>\n  )\n}\n\nCartPickerProvider.propTypes = {\n  children: PropTypes.node,\n  cart: PropTypes.object,\n  onSave: PropTypes.func\n}\n","// React\nimport { useEffect, useMemo, useRef, useContext } from 'react'\n\n// Libraries\nimport { isEqual, isEmpty } from 'lodash'\n\n// Hooks\nimport { useFormikContext } from 'formik'\nimport { useCachedQuery } from 'shared/utils/useCachedQuery'\n\n// Shared\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { fetchDeliveryOptionsRequest } from './requests'\nimport { CartPickerContext } from './Provider'\n\nexport const useCartPicker = () => {\n  const context = useContext(CartPickerContext)\n\n  if (!context) {\n    throw Error('\"useCartPicker\" should be used within \"CartPickerProvider\"')\n  }\n\n  return context\n}\n\nexport const useDeliveryOptions = ({ cart, fetchAvailability, onError, resetError }) => {\n  const isFirstMount = useRef(true)\n\n  const form = useFormikContext()\n\n  const formattedDeliveryAddress = useMemo(() => {\n    if (!form.values.delivery_address) return\n\n    return FormatUtils.address(form.values.delivery_address)\n  }, [form.values.delivery_address])\n\n  const { setLoading, onSave } = useCartPicker()\n\n  const { perform: fetchDeliveryOptions, isLoading } = useCachedQuery(fetchDeliveryOptionsRequest, {\n    key: formattedDeliveryAddress,\n    errorKey: 'fetch_delivery_options_error',\n    onSuccess: async ({ data }) => {\n      setLoading(false)\n      resetError()\n\n      if (data.rates.length === 0) {\n        onError('delivery_unavailable_error')\n      }\n    },\n    onError: () => {\n      setLoading(false)\n\n      onError('delivery_unavailable_error')\n    },\n    onLoading: () => {\n      setLoading(true)\n      resetError()\n    }\n  })\n\n  const isDelivery = form.values.data?.fulfillment_type === 'delivery'\n\n  useEffect(() => {\n    const request = async () => {\n      try {\n        const { payload } = await onSave(form.values)\n\n        await Promise.all([\n          fetchDeliveryOptions({\n            cartId: payload.response.cart.id,\n            deliveryAddress: form.values.data.delivery_address\n          }),\n          fetchAvailability({ type: 'start', values: form.values })\n        ])\n      } catch (error) {\n        if (error instanceof Error) {\n          switch (error.message) {\n            case 'fetch_delivery_options_error':\n              onError('delivery_unavailable_error')\n              break\n            case 'fetch_availability_error':\n              console.error('Error fetching availability', error)\n              break\n          }\n        }\n      }\n    }\n\n    if (!cart?.id) return\n    if (!isDelivery) return\n    if (isEmpty(form.values.delivery_address)) return\n\n    // The following fields are always required despite the selected country,\n    // do not fetch the closest location if they are not set\n    if (\n      !form.values.delivery_address?.country ||\n      !form.values.delivery_address?.address1 ||\n      !form.values.delivery_address?.zipcode ||\n      !form.values.delivery_address?.city\n    )\n      return\n\n    // Check if the delivery address fields have no errors\n    if (Object.keys(form.errors?.delivery_address ?? {}).length) return\n\n    // Check if it's the first mount or if values have changed\n    const valuesAreEqual =\n      isEqual(form.values.delivery_address, form.initialValues.delivery_address) &&\n      isEqual(form.values.start_location_id, form.initialValues.start_location_id) &&\n      isEqual(form.values.stop_location_id, form.initialValues.stop_location_id)\n\n    if (isFirstMount.current || !valuesAreEqual) {\n      request()\n    }\n\n    isFirstMount.current = false\n  }, [cart?.id, form.values, form.initialValues, form.errors, isDelivery, onSave])\n\n  return { isLoading }\n}\n","import { useState, useEffect } from 'react'\n\n/**\n * A custom React hook that returns the value of a specific URL search parameter\n * @param {string} paramName - The name of the search parameter to retrieve\n * @returns {string|null} The value of the search parameter or null if not found\n */\nexport const useSearchParam = (paramName) => {\n  const [paramValue, setParamValue] = useState(() => {\n    const searchParams = new URLSearchParams(window.location.search)\n    return searchParams.get(paramName)\n  })\n\n  useEffect(() => {\n    const handleUrlChange = () => {\n      const searchParams = new URLSearchParams(window.location.search)\n      setParamValue(searchParams.get(paramName))\n    }\n\n    window.addEventListener('popstate', handleUrlChange)\n    return () => window.removeEventListener('popstate', handleUrlChange)\n  }, [paramName])\n\n  return paramValue\n}\n","// React\nimport React, { useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport BCartPicker from 'ui/blocks/Picker/types/cart'\nimport { LocationPicker } from 'ui/components/Picker/LocationPicker'\nimport { DeliveryFulfillmentForm } from './DeliveryFulfillmentForm'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\nimport Span from 'ui/elements/Span'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTriangleExclamation as farTriangleExclamation } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useFormikContext } from 'formik'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useDeliveryOptions } from './hooks'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useSearchParam } from 'shared/utils/useSearchParam'\n\n// Shared\nimport { Field } from 'shared/form'\n\nexport const FulfillmentType = ({ cart, fetchAvailability }) => {\n  const [deliveryError, setDeliveryError] = useState(null)\n\n  const form = useFormikContext()\n  const fulfillmentTab = useSearchParam('fulfillment-tab')\n  const { tOrEmptyString, t } = useTranslation('user')\n\n  const pickupLocations = useOrm('locations', (locations) => {\n    return locations\n      .getAll({ archived_at: [null, undefined] })\n      .filter((location) => location.fulfillment_capabilities.includes('pickup'))\n  })\n  const deliveryLocations = useOrm('locations', (locations) => {\n    return locations\n      .getAll({ archived_at: [null, undefined] })\n      .filter((location) => location.fulfillment_capabilities.includes('delivery'))\n  })\n\n  useDeliveryOptions({ cart, fetchAvailability, onError: setDeliveryError, resetError: () => setDeliveryError(null) })\n\n  const showFulfillmentTypeSelect = !!pickupLocations.size() && !!deliveryLocations.size()\n  const isPickup = form.values.data.fulfillment_type === 'pickup'\n  const isDelivery = form.values.data.fulfillment_type === 'delivery'\n\n  useEffect(() => {\n    if (fulfillmentTab === 'delivery') {\n      form.setFieldValue('data.fulfillment_type', 'delivery')\n    }\n  }, [])\n\n  useEffect(() => {\n    const fulfillmentType = form.values.data.fulfillment_type\n\n    if (fulfillmentType === 'delivery' && !form.values.delivery_address?.country && !form.values.delivery_address?.country_id) {\n      form.setFieldError(\n        'delivery_address.country',\n        `${tOrEmptyString('user.deliveries.address_fields.country')} ${tOrEmptyString('user.public_errors.invalid')}`\n      )\n    }\n\n    if (fulfillmentType === 'pickup') {\n      const errors = { ...form.errors }\n\n      delete errors.delivery_address\n\n      form.setErrors(errors)\n    }\n  }, [form.values.data.fulfillment_type, form.values.delivery_address, form.errors])\n\n  const handleLocationChange = ({ start_location_id: id }) => {\n    const values = {\n      ...form.values,\n      start_location_id: id\n    }\n\n    fetchAvailability({ type: 'start', values })\n  }\n\n  if (isPickup && pickupLocations.size() === 1 && !deliveryLocations.size()) return null\n\n  return (\n    <BCartPicker.Section>\n      <Div modifiers=\"display-flex flex-column gap-5.5 width-100p\">\n        {!!deliveryError && (\n          <BCartPicker.Error>\n            <FontAwesomeIcon icon={farTriangleExclamation} />\n            <Span modifiers=\"font-size-md color-Warning/Foreground1 font-weight-semibold\">\n              {t(`user.deliveries.${deliveryError}`)}\n            </Span>\n          </BCartPicker.Error>\n        )}\n        {showFulfillmentTypeSelect && (\n          <BCartPicker.FulfillmentTypeSelect>\n            <Field\n              name=\"data.fulfillment_type\"\n              type=\"radioGroup\"\n              options={[\n                {\n                  label: t('user.deliveries.pickup'),\n                  value: 'pickup'\n                },\n                {\n                  label: t('user.deliveries.delivery'),\n                  value: 'delivery'\n                }\n              ]}\n              modifiers={{\n                inputModifiers: {\n                  radioGroup: 'no-padding border-radius-md',\n                  radioGroupIcon: 'margin-left-md margin-top-sm',\n                  radioGroupLabel: 'padding-sm padding-left-xxl'\n                }\n              }}\n              data-tid=\"Fulfillment type select\"\n            />\n          </BCartPicker.FulfillmentTypeSelect>\n        )}\n        {isPickup && pickupLocations.size() > 1 && (\n          <Div data-tid=\"Pickup fulfillment type form\">\n            <Label>{t('user.store.start_and_stop_location')}</Label>\n            <BCartPicker.Section disableStyling>\n              <LocationPicker type=\"cart\" locations={pickupLocations} onChange={handleLocationChange} />\n            </BCartPicker.Section>\n          </Div>\n        )}\n        {isDelivery && (\n          <Div data-tid=\"Delivery fulfillment type form\">\n            <DeliveryFulfillmentForm />\n          </Div>\n        )}\n      </Div>\n    </BCartPicker.Section>\n  )\n}\n\nFulfillmentType.propTypes = {\n  cart: PropTypes.object.isRequired,\n  fetchAvailability: PropTypes.func.isRequired\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport Tooltip from 'ui/components/Tooltip'\n\nexport class ReadOnlyModeDisabledComponent extends Component {\n  static displayName = 'ReadOnlyModeDisabledComponent'\n\n  static propTypes = {\n    readOnlyMode: PropTypes.bool\n  }\n\n  render () {\n    const { readOnlyMode, children } = this.props\n\n    if (readOnlyMode) {\n      return (\n        <Tooltip\n          direction=\"top\"\n          maxWidth={500}\n          content=\"Briefly unavailable for scheduled maintenance.\"\n        >\n          <div style={{ pointerEvents: 'none', opacity: 0.6 }}>\n            {children}\n          </div>\n        </Tooltip>\n      )\n    } else {\n      return children\n    }\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  return {\n    readOnlyMode: state.client.readOnlyMode\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(ReadOnlyModeDisabledComponent)\n","import Model from '../models'\nimport API from '../../api'\n\nModel.Availability.createAction('FETCH_ITEM_AVAILABILITY', (options) => {\n  return API.get('item_availabilities', options)\n})\n\nModel.Availability.createAction('FETCH_CALENDAR_AVAILABILITY', (options) => {\n  return API.get('cart_availabilities', options)\n})\n\nexport default Model.Availability.actions\n","// React\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport { CartFlowPicker } from 'ui/components/Picker'\nimport { PickerProvider } from 'ui/components/Picker/Provider'\nimport { LocationPicker } from 'ui/components/Picker/LocationPicker'\nimport { FulfillmentType } from './FulfillmentType'\nimport BCartPicker from 'ui/blocks/Picker/types/cart'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useCartPicker } from './hooks'\n\n// Shared\nimport { featureEnabled, FeatureFlags } from 'back_office/v2/utils/utils'\nimport AvailabilityActions from 'store/v2/redux/actions/availability'\nimport moment from 'shared/lib/moment'\nimport promiseDebounce from 'shared/utils/promiseDebounce'\nimport { useTranslation } from 'react-i18next'\n\n/**\n * CartPicker Component\n *\n * This component renders a CartFlowPicker with additional functionality for handling\n * availability fetching and duration changes.\n *\n * @component\n * @param {Object} props - The component props\n * @param {string} props.mode - The mode of the picker ('freely', 'timeslot_duration', 'timeslot_fixed')\n * @param {Function} props.onChange - Callback function when selection changes\n * @param {string} props.format - The date format to use\n * @param {boolean} props.useTimes - Whether to use times in the picker\n * @param {Object} props.cart - The cart object\n * @param {Object} props.durations - Object of available durations\n * @param {Object} props.timeslots - Object of available timeslots\n * @param {Object} props.initialValues - Initial values for the picker\n * @param {boolean} props.useAMOrPM - Whether to use AM/PM format\n * @param {Object} props.minDate - The minimum selectable date\n * @param {boolean} [props.disabled] - Whether the picker is disabled\n * @param {Object} props.availabilities - Object of availability data\n * @param {boolean} props.availabilityLoading - Whether availability data is currently loading\n * @param {number} props.lineCount - The number of lines in the cart\n * @param {boolean} props.showAvailability - Whether to show availability\n * @param {Function} props.fetchAvailability - Function to fetch availability data\n *\n * @returns {React.Component} A wrapped CartFlowPicker component with additional functionality\n */\nconst CartPicker = ({ cart, availabilities, initialValues, minDate, ...props }) => {\n  const [duration, setDuration] = useState(null)\n\n  const openingHours = useOpeningHours()\n  const { onChange, onValidate } = useCartPicker()\n\n  const locations = useOrm('locations', (locations) => {\n    return locations.getAll({ archived_at: [null, undefined] })\n  })\n  const intervalInMinutes = useSettings('store.time_increment', {\n    default: 15,\n    transformer: (value) => parseInt(value)\n  })\n\n  const { t } = useTranslation('user')\n\n  const handleMonthChange = (options, date) => {\n    // Fetch availability on month change if setting enabled\n    if (!props.showAvailability || !props.lineCount) return\n\n    try {\n      props.fetchAvailability(cart, {\n        year: date.getFullYear(),\n        month: date.getMonth() + 1,\n        type: options.type,\n        starts_at: options.values?.starts_at,\n        durationData: duration\n      })\n    } catch {\n      throw new Error('fetch_availability_error')\n    }\n  }\n\n  const debouncedHandleMonthChange = () => {\n    if (window.testMode) {\n      return handleMonthChange\n    } else {\n      return promiseDebounce(handleMonthChange, 500)\n    }\n  }\n\n  const handleAvailabilityFetch = (options, day) => {\n    let date\n\n    day = options?.day || day\n\n    if (day) {\n      date = day.toDate?.().getDate() ?? day\n    }\n\n    if (!props.showAvailability || !props.lineCount) return\n\n    try {\n      props.fetchAvailability(cart, {\n        type: options.type,\n        day: date,\n        starts_at: options.values?.starts_at,\n        month: options.values?.starts_at ? new Date(options.values?.starts_at).getMonth() + 1 : undefined,\n        year: options.values?.starts_at ? new Date(options.values?.starts_at).getFullYear() : undefined,\n        durationData: duration,\n        location_id: options.values?.start_location_id\n      })\n    } catch {\n      throw new Error('fetch_availability_error')\n    }\n  }\n\n  const handleChangeDuration = (_duration, durationData) => {\n    setDuration(durationData)\n  }\n\n  return (\n    <ReadOnlyModeDisabledComponent>\n      <PickerProvider\n        initialValues={initialValues}\n        minDate={minDate}\n        onChange={props.onChange || onChange}\n        onValidate={onValidate}\n        openingHours={openingHours}\n        type=\"cart\"\n        validateOnBlur\n      >\n        <BCartPicker>\n          {featureEnabled(FeatureFlags.DELIVERIES) && (\n            <FulfillmentType cart={cart} fetchAvailability={handleAvailabilityFetch} />\n          )}\n          {!featureEnabled(FeatureFlags.DELIVERIES) && (\n            <LocationPicker\n              type=\"cart\"\n              locations={locations}\n              WrapperComponent={BCartPicker.Section}\n              label={t('user.store.start_and_stop_location')}\n              startLocationLabel={t('user.store.start_location')}\n              stopLocationLabel={t('user.store.stop_location')}\n            />\n          )}\n          <CartFlowPicker\n            {...props}\n            availabilities={availabilities}\n            onMonthChange={debouncedHandleMonthChange()}\n            onOpen={handleAvailabilityFetch}\n            intervalInMinutes={intervalInMinutes}\n            onDurationChange={handleChangeDuration}\n          />\n        </BCartPicker>\n      </PickerProvider>\n    </ReadOnlyModeDisabledComponent>\n  )\n}\n\nCartPicker.propTypes = {\n  cart: PropTypes.object,\n  locations: PropTypes.object,\n  availabilities: PropTypes.object,\n  initialValues: PropTypes.object,\n  lineCount: PropTypes.number,\n  showAvailability: PropTypes.bool,\n  fetchAvailability: PropTypes.func,\n  minDate: PropTypes.object,\n  onChange: PropTypes.func,\n  onValidate: PropTypes.func,\n  setLoading: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = props.cart || state.orm.carts.getById(state.client.cartId)\n\n  const locations = state.orm.locations.getAll({ archived_at: [null, undefined] })\n  const pickupLocations = locations.filter((location) => location.fulfillment_capabilities.includes('pickup'))\n  const deliveryLocations = locations.filter((location) => location.fulfillment_capabilities.includes('delivery'))\n\n  const companyCountry = state.settings.get('main_address_attributes.country')\n  const companyCountryId = state.settings.get('main_address_attributes.country_id')\n\n  const initialValues = {\n    starts_at: null,\n    stops_at: null,\n    start_location_id: null,\n    stop_location_id: null,\n    delivery_address: {\n      address1: '',\n      address2: '',\n      city: '',\n      country: companyCountry || '',\n      country_id: companyCountryId || '',\n      first_name: '',\n      last_name: '',\n      region: '',\n      province_id: '',\n      zipcode: ''\n    },\n    data: {}\n  }\n\n  if (cart) {\n    Object.assign(initialValues, {\n      starts_at: cart.starts_at ? moment(cart.starts_at) : null,\n      stops_at: cart.stops_at ? moment(cart.stops_at) : null,\n      start_location_id: cart.start_location_id || null,\n      stop_location_id: cart.stop_location_id || null,\n      data: {\n        fulfillment_type: cart.data?.fulfillment_type\n      },\n      delivery_address: cart.data?.delivery_address || initialValues.delivery_address\n    })\n  }\n\n  if (!initialValues.data.fulfillment_type) {\n    if (pickupLocations.size()) {\n      initialValues.data.fulfillment_type = 'pickup'\n    } else if (deliveryLocations.size()) {\n      initialValues.data.fulfillment_type = 'delivery'\n    }\n  }\n\n  return {\n    initialValues,\n    mode: state.settings.get('store.period_type'),\n    useTimes: state.settings.get('store.use_times'),\n    format: state.settings.get('dates.format'),\n    useAMOrPM: state.settings.get('dates.use_am_pm'),\n    minDate: state.client.firstTimeSelectable,\n    cart,\n    availabilities: state.orm.shop_availabilities.getAll(),\n    showAvailability:\n      state.settings.get('store.use_availability') && state.settings.get('store.show_cart_availability'),\n    availabilityLoading: state.orm.pendingRequests.includes('SHOP_AVAILABILITIES_FETCH_CALENDAR_AVAILABILITY'),\n    lineCount: cart?.lines.length\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    fetchAvailability: (cart, params) => {\n      // No cart - can't check availability\n      if (!cart?.created_at) return\n\n      // Do not send moment objects in a request (it will serialise and cause a CORS error)\n      if (params.starts_at?._isAMomentObject) {\n        params.starts_at = params.starts_at.toDate()\n      }\n\n      const date = new Date(params?.type === 'start' ? cart.starts_at || Date() : cart.stops_at || Date())\n      const filter = {\n        cart_id: cart.id,\n        year: params?.year || date.getFullYear(),\n        month: params?.month || date.getMonth() + 1,\n        day: params?.day,\n        // Always set to start, since we want \"simple, stateless\" availability for now\n        // copied from back_office/modules/orders/components/OrderPicker/hooks.js:78\n        type: 'start',\n        duration_period: params?.durationData?.data?.period,\n        start_location_id: params?.location_id\n      }\n\n      if (params?.starts_at) {\n        Object.assign(filter, { starts_at: params?.starts_at })\n      }\n\n      AvailabilityActions.fetchCalendarAvailability({\n        filter,\n        apiVersion: 3\n      })\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(CartPicker)\n","import { CartPicker } from './styles'\n\nexport default CartPicker\n","import styled from 'styled-components'\n\nexport const CartPicker = styled.div`\n  [class*='Period']:has([class^='Portal']:not(:empty)), [class^='Portal']:not(:empty) {\n    max-height: 100%;\n    height: 100%;\n\n    overflow-y: auto;\n  }\n\n  [class^='Period'] {\n    overflow-y: auto;\n  }\n\n  @media screen and (max-width: 576px) {\n    .DayPicker-NavBar {\n      display: none;\n    }\n  }\n\n  @media screen and (min-width: 576px) {\n    .DayPicker {\n      min-height: 350px;\n    }\n  }\n`\n","// React\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { clsx } from 'clsx'\n\n// Components\nimport { Modal, ModalBody, ModalTitle, ModalClose, ModalFooter } from 'store/components/Modal'\nimport Button from 'ui/components/Button'\nimport Div from 'ui/elements/Div'\nimport ActionGroup from 'ui/blocks/ActionGroup'\nimport CartPicker from './Picker'\nimport BCartPicker from 'store/blocks/CartPicker'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useIsMobile } from 'shared/utils/useIsMobile'\nimport { useCartPicker } from './hooks'\nimport { CartPickerProvider } from './Provider'\n\nconst CartPickerInner = ({ open, onSaveCallback, onClose, brandingColor, title, productId, withBranding }) => {\n  const [promise, setPromise] = useState(null)\n\n  const { cart, onSave, isValid, isLoading } = useCartPicker()\n\n  const { t } = useTranslation('user')\n  const isMobile = useIsMobile()\n\n  const handleSave = () => {\n    const promise = onSave?.().then(() => {\n      if (onSaveCallback) {\n        return onSaveCallback()\n      }\n\n      onClose()\n    })\n\n    setPromise(promise)\n  }\n\n  return (\n    <Modal\n      open={open}\n      onClose={onClose}\n      modifiers={{\n        backdrop: clsx(isMobile && 'no-padding'),\n        container: clsx(\n          'background-color-Secondary/Background1',\n          isMobile && 'height-100vh max-width-100p width-100p no-border-radius'\n        )\n      }}\n    >\n      <ModalBody modifiers=\"height-100p no-padding\">\n        <Div modifiers=\"min-height-100p padding-md\">\n          <Div modifiers=\"padding-bottom-md\">\n            <ModalTitle>{title}</ModalTitle>\n            {onClose && <ModalClose onClose={onClose} />}\n          </Div>\n          <BCartPicker>\n            <CartPicker cart={cart} />\n          </BCartPicker>\n        </Div>\n        <ModalFooter>\n          <ActionGroup modifiers={clsx('width-100p', isMobile && 'display-flex align-center no-margin no-padding')}>\n            <Button\n              color={brandingColor || 'primary'}\n              onClick={handleSave}\n              disabled={!isValid || isLoading}\n              promise={promise}\n              modifiers={clsx(isMobile && 'width-100p')}\n              withBranding={withBranding}\n            >\n              {(productId && t('user.store.book')) || t('user.store.apply') || 'Apply'}\n            </Button>\n          </ActionGroup>\n        </ModalFooter>\n      </ModalBody>\n    </Modal>\n  )\n}\n\nCartPickerInner.propTypes = {\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  brandingColor: PropTypes.string,\n  title: PropTypes.any,\n  productId: PropTypes.string,\n  onSaveCallback: PropTypes.func,\n  withBranding: PropTypes.bool\n}\n\nexport const ModalCartPicker = ({ cart, onSave, ...props }) => (\n  <CartPickerProvider cart={cart} onSave={onSave}>\n    <CartPickerInner {...props} />\n  </CartPickerProvider>\n)\n\nModalCartPicker.propTypes = {\n  cart: PropTypes.object,\n  onSave: PropTypes.func\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\n\n// Libraries\n\n// Shared\nimport ClientActions from 'store/v2/redux/actions/client'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nclass CartPickerContainer extends Component {\n  static displayName = 'CartPickerContainer'\n\n  static propTypes = {\n    cart: PropTypes.object,\n    modalOpen: PropTypes.bool,\n    brandingColor: PropTypes.string,\n    togglePicker: PropTypes.func,\n    clearCart: PropTypes.func,\n    t: PropTypes.func\n  }\n\n  componentDidMount = () => {\n    this.mobile = window.innerWidth <= 800\n  }\n\n  handleClearAndClose = () => {\n    this.props.clearCart().then(() => this.props.togglePicker(false))\n  }\n\n  handleClose = () => {\n    this.props.togglePicker(false)\n  }\n\n  render () {\n    const { cart, modalOpen, brandingColor, t } = this.props\n\n    return (\n      <ModalCartPicker\n        cart={cart}\n        open={modalOpen}\n        onClose={this.handleClose}\n        brandingColor={brandingColor}\n        direction={this.mobile ? 'vertical' : 'horizontal'}\n        title={t('user.store.cart_title')}\n      />\n    )\n  }\n}\n\nconst mapStateToProps = (state, _props) => {\n  return {\n    cart: state.orm.carts.getById(state.client.cartId),\n    modalOpen: state.client.modalPickerOpen,\n    brandingColor: getBrandingColor()\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    togglePicker: ClientActions.toggleModalPicker,\n    clearCart: () => {\n      CartActions.clear({\n        apiVersion: 1\n      })\n    }\n  }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(CartPickerContainer)\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\n\n// Components\n\n// Shared\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport Format from 'shared/utils/format'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport clientActions from 'store/v2/redux/actions/client'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class Launcher extends React.Component {\n  static displayName = 'Launcher'\n\n  static propTypes = {\n    itemCount: PropTypes.number,\n    cartOpen: PropTypes.bool,\n    toggleCart: PropTypes.func,\n    cart: PropTypes.object,\n    useTimes: PropTypes.bool,\n    usePrices: PropTypes.bool,\n    timeFormat: PropTypes.string,\n    floating: PropTypes.bool,\n    totalPriceAttribute: PropTypes.string,\n    currency: PropTypes.object,\n    t: PropTypes.func\n  }\n\n  componentDidUpdate = () => {\n    setUserFrameworkCartData()\n  }\n\n  get style () {\n    const { floating } = this.props\n\n    if (floating) {\n      return {\n        position: 'fixed',\n        bottom: 15,\n        right: 15\n      }\n    } else {\n      return {}\n    }\n  }\n\n  get countLabel () {\n    const { itemCount, t } = this.props\n\n    if (itemCount === 1) {\n      return `${itemCount} ${t('user.store.item')}`\n    }\n\n    return `${itemCount} ${t('user.store.items')}`\n  }\n\n  render () {\n    const launcherClassNames = []\n    const { cart, cartOpen, toggleCart, useTimes, usePrices, timeFormat, itemCount, currency, totalPriceAttribute, t } = this.props\n\n    launcherClassNames.push(cartOpen ? 'open' : 'closed')\n\n    return (\n      <ReactCSSTransitionGroup\n        transitionName=\"booqable-launcher\"\n        transitionEnterTimeout={300}\n        transitionLeaveTimeout={100}\n      >\n        <div\n          key={`booqable-launcher-${cartOpen}`}\n          id=\"booqable-launcher\"\n          className={launcherClassNames.join(' ')}\n          style={this.style}\n          onClick={toggleCart.bind(null, !cartOpen)}\n        >\n          <div className=\"bq-branded\" id=\"booqable-launcher-icon\">\n            <i className=\"bq-branded bq-icon-cart fas fa-shopping-cart\" aria-hidden=\"true\" />\n          </div>\n          <div id=\"booqable-launcher-summary\">\n            <div className=\"bq-dates\">\n              {cart && cart.starts_at ?\n                (\n                  <span>\n                    <strong>{Format.date(cart.starts_at, 'shortDate')} </strong>\n                    <small>{useTimes && Format.date(cart.starts_at, timeFormat)}</small>\n                    {' - '}\n                    <strong>{Format.date(cart.stops_at, 'shortDate')} </strong>\n                    <small>{useTimes && Format.date(cart.stops_at, timeFormat)}</small>\n                  </span>\n                ) :\n                (<span>{t('user.store.select_a_period')}</span>)}\n            </div>\n            <hr />\n            <div className=\"bq-summary\">\n              {cart && itemCount ?\n                (\n                  <div>\n                    <span>\n                      <strong>{this.countLabel}</strong>\n                    </span>\n                    {usePrices && (\n                      <span className=\"bq-total\">\n                        <strong>\n                          {Format.money(cart != null ? cart.get(totalPriceAttribute) : undefined, currency)}\n                        </strong>\n                      </span>\n                    )}\n                  </div>\n                ) :\n                (<span>{t('user.store.cart_empty')}</span>)}\n            </div>\n          </div>\n        </div>\n      </ReactCSSTransitionGroup>\n    )\n  }\n}\n\nconst mapStateToProps = (state) => {\n  let timeFormat, totalPriceAttribute\n\n  if (state.settings.get('dates.use_am_pm')) {\n    timeFormat = 'hh:mm A'\n  } else {\n    timeFormat = 'HH:mm'\n  }\n\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const lines = state.orm.lines.getAll({\n    id: cart != null ? cart.lines : undefined,\n    product_type: ['consumable', 'rental', 'bundle']\n  })\n\n  const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n  if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n    totalPriceAttribute = 'grand_total_with_tax_in_cents'\n  } else {\n    totalPriceAttribute = 'grand_total_in_cents'\n  }\n\n  return {\n    floating: state.client.floatingCart,\n    cartOpen: state.client.cartOpen,\n    cart,\n    currency: state.client.currency.toJS(),\n    totalPriceAttribute,\n    timeFormat,\n    useTimes: state.settings.get('store.use_times'),\n    usePrices: state.settings.get('store.use_prices'),\n    itemCount\n  }\n}\n\nconst mapDispatchToProps = () => {\n  return {\n    toggleCart: (cartOpen) => {\n      return clientActions.toggleCart(cartOpen)\n    }\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Launcher)\n","// React\nimport React, { Fragment, useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport FloatingCart from 'store/v2/react/scenes/cart/components/FloatingCart'\nimport CartPicker from 'store/modules/cart/FloatingCart/components/CartPicker'\nimport Launcher from 'store/modules/cart/FloatingCart/components/Launcher'\n\nconst Cart = ({ isShowCartBehavior }) => {\n  const [showPicker, setShowPicker] = useState(true)\n\n  useEffect(() => {\n    if (document.querySelector('bq-date-picker-modal')) {\n      setShowPicker(false)\n    }\n  }, [])\n\n  return (\n    <div className=\"booqable-component\">\n      {isShowCartBehavior && (\n        <Fragment>\n          <div id=\"booqable-sidebar\">\n            <FloatingCart />\n          </div>\n          <Launcher />\n        </Fragment>\n      )}\n      {showPicker && <CartPicker />}\n    </div>\n  )\n}\n\nCart.propTypes = {\n  isShowCartBehavior: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n  const isShowCartBehavior = state.settings.get('store.behaviors.add_button') === 'show_cart'\n\n  return {\n    isShowCartBehavior\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(Cart)\n","import { Themed } from './styles'\n\nexport default Themed\n","import styled from 'styled-components'\n\nexport const Themed = styled.div`\n  * {\n    &:not(i) {\n      font-family: ${(props) => props.theme.font.body};\n    }\n  }\n`\n","\n\n/**\n * Theme for being used in the checkout and store integration.\n */\n\nimport { colors, palette } from 'ui/themes/colors'\n\n// DO NOT USE THESE COLORS! THEY ARE DEPRECATED AND WILL BE REMOVED IN THE FUTURE\nconst deprecatedColors = (brandingColor) => {\n  return {\n    primary: brandingColor,\n    secondary: colors['Text/Secondary'],\n    success: colors['Success/Base'],\n    info: colors['Accent1/Base'],\n    warning: colors['Warning/Base'],\n    danger: colors['Danger/Base'],\n\n    light: palette.grey[20],\n    dark: colors['Text/Primary'],\n\n    borderHover: palette.grey[40]\n  }\n}\n\nconst color = (brandingColor) => {\n  return {\n    black: palette.black,\n    white: palette.white,\n    transparent: 'transparent',\n    branding: brandingColor,\n\n    // Ease of use colors, corresponding to the Base color of the palette.\n    // e.g. blue =~ colors['Primary/Base']\n    blue: palette.blue[60],\n    green: palette.green[50],\n    orange: palette.orange[50],\n    red: palette.red[60],\n    purple: palette.purple[60],\n    grey: palette.grey[30],\n\n    ...colors,\n    ...deprecatedColors(brandingColor)\n  }\n}\n\n/**\n * We use a 4px grid system for spacing. This function calculates the pixel value for a given grid unit.\n * 0.5 grid units = 2px\n * 1 grid unit = 4px\n * 2 grid units = 8px\n * 3 grid units = 12px\n * 4 grid units = 16px\n * 5 grid units = 20px\n * 6 grid units = 24px\n * 7 grid units = 28px\n * 8 grid units = 32px\n * 9 grid units = 36px\n * 10 grid units = 40px\n * 11 grid units = 44px\n * 12 grid units = 48px\n * 16 grid units = 64px\n */\nconst grid = (unit) => {\n  if (!Number.isInteger(unit) && unit !== 0.5) {\n    throw new Error('Grid units must be integers or 0.5')\n  }\n  return `${unit * 4}px`\n}\n\nconst units = {\n  0.5: grid(0.5),\n  1: grid(1),\n  2: grid(2),\n  3: grid(3),\n  4: grid(4),\n  5: grid(5),\n  6: grid(6),\n  7: grid(7),\n  8: grid(8),\n  9: grid(9),\n  10: grid(10),\n  11: grid(11),\n  12: grid(12),\n  13: grid(13),\n  14: grid(14),\n  15: grid(15),\n  16: grid(16)\n}\n\nconst font = {\n  base: 'Roboto',\n  fallback: 'sans-serif',\n  mono: 'Monospace',\n  fontAwesomeStyle: 'far',\n  size: {\n    body: '20px',\n    xs: '13px !important',\n    sm: '13px',\n    md: '14px',\n    lg: '18px',\n    lgplus: '22px',\n    xl: '34px',\n    xxl: '50px',\n    xxxl: '66px'\n  },\n  weight: {\n    light: '300',\n    lighter: '400',\n    normal: '500',\n    semibold: '600',\n    bold: '700'\n  }\n}\n\nfont.body = `${font.base}, ${font.fallback}`\n\nconst size = {\n  borderRadius: {\n    xs: '2px',\n    sm: '6px',\n    md: '6px',\n    lg: '6px',\n    lgplus: '8px',\n    xl: '13px'\n  },\n  borderWidth: {\n    xs: '1px',\n    sm: '1px',\n    md: '1px',\n    lg: '1px'\n  },\n  controlHeight: {\n    xs: '26px',\n    sm: '36px',\n    md: '42px',\n    lg: '50px'\n  },\n  margin: {\n    xs: grid(1),\n    sm: grid(3),\n    md: grid(4),\n    lg: grid(6)\n  },\n  padding: {\n    xs: grid(1),\n    sm: grid(3),\n    md: grid(4),\n    mdplus: grid(5),\n    lg: grid(6),\n    lgplus: grid(7),\n    xl: grid(8),\n    xlplus: grid(11),\n    xxl: grid(12),\n    xxxl: grid(16)\n  },\n  shadow: {\n    sm: 'rgba(0, 0, 0, 0.2) 0px 1px 2px 0px',\n    smplus: 'rgba(0, 0, 0, 0.1) 0px 4px 12px 0px',\n    md: 'rgba(0, 0, 0, 0.1) 0 6px 14px 0',\n    lg: 'rgba(0, 0, 0, 0.1) 0 6px 14px 0'\n  },\n  screenSizes: {\n    xs: '0px',\n    sm: '768px',\n    md: '992px',\n    lg: '1200px',\n    xl: '1800px'\n  }\n}\n\nconst opacity = {\n  disabled: 0.6,\n  destroying: 0.4\n}\n\nconst zIndex = [\n  1,\n  100,\n  200,\n  300,\n  400\n]\n\nexport default (brandingColor = '#8fcc40') => {\n  return {\n    color: color(brandingColor),\n    font,\n    opacity,\n    size,\n    zIndex,\n    units\n  }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { ThemeProvider, StyleSheetManager } from 'styled-components'\n\n// Components\nimport BThemed from '../blocks/Themed'\n\n// Shared\nimport theme from 'ui/themes/public'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nclass Themed extends Component {\n  static displayName = 'Themed'\n\n  static propTypes = {\n    children: PropTypes.node,\n    brandingColor: PropTypes.string\n  }\n\n  render () {\n    const { children, brandingColor } = this.props\n\n    return (\n      <ThemeProvider theme={theme(brandingColor)}>\n        <StyleSheetManager shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n          <BThemed>\n            {children}\n          </BThemed>\n        </StyleSheetManager>\n      </ThemeProvider>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  return {\n    brandingColor: getBrandingColor()\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(Themed)\n","// React\nimport React from 'react'\nimport { Provider } from 'react-redux'\n\n// Components\nimport Cart from 'store/v2/react/components/cart'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class CartScene extends React.Component {\n  static displayName = 'CartScene'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <Cart />\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","export default {\n  findByIdOrSlug (collection, id) {\n    let item\n\n    if ((item = collection.getById(id))) {\n      return item\n    } else if ((item = collection.getAll({ slug: id }).first())) {\n      return item\n    } else {\n      return collection.getAll({ legacy_id: parseInt(id) }).first()\n    }\n  }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\nimport itemSelectors from 'store/v2/redux/selectors/item'\n\nclass IdFinder extends React.Component {\n  static displayName = 'IdFinder'\n\n  static propTypes = {\n    children: PropTypes.object,\n    hideOnLoad: PropTypes.bool\n  }\n\n  shouldComponentUpdate = (nextProps) => {\n    if (this.props.item && nextProps.uiKey === this.props.uiKey) {\n      return false\n    } else {\n      return true\n    }\n  }\n\n  render = () => {\n    const { item, hideOnLoad } = this.props\n\n    if (!item && hideOnLoad) {\n      return null\n    } else {\n      return this.props.children && React.cloneElement(this.props.children, this.props)\n    }\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const item = itemSelectors.findByIdOrSlug(state.orm.product_groups, props.id) ||\n    itemSelectors.findByIdOrSlug(state.orm.bundles, props.id) ||\n    itemSelectors.findByIdOrSlug(state.orm.items, props.id)\n\n  return {\n    id: item && item.id,\n    item,\n    uiKey: props.id\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(IdFinder)\n","import { updateUI } from 'shared/redux/interface'\nconst store = window.booqableStore\n\nexport default {\n  setItem (id) {\n    const action = updateUI('Quickview', { itemId: id })\n\n    return store.dispatch(action)\n  },\n\n  unsetItem () {\n    const action = updateUI('Quickview', { itemId: null })\n\n    return store.dispatch(action)\n  }\n}\n","// React\nimport React from 'react'\nimport { findDOMNode } from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport ProductPrice from './product_price'\n\n// Libraries\nimport _capitalize from 'lodash/capitalize'\nimport _get from 'lodash/get'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\n\nexport class Product extends React.Component {\n  static displayName = 'Product'\n\n  static propTypes = {\n    loading: PropTypes.bool,\n    id: PropTypes.string,\n    item: PropTypes.object,\n    photo: PropTypes.object,\n    useAvailability: PropTypes.bool,\n    hideProductAvailabilityQuantities: PropTypes.bool,\n    hasDates: PropTypes.string,\n    hasPrices: PropTypes.any,\n    onClick: PropTypes.func,\n    openQuickview: PropTypes.func,\n    t: PropTypes.func\n  }\n\n  componentDidMount = () => {\n    this.setWidth()\n\n    window.addEventListener('resize', this.setWidth, false)\n  }\n\n  componentWillUnmount = () => {\n    window.removeEventListener('resize', this.setWidth)\n  }\n\n  findAncestor = (el, cls) => {\n    while ((el = el.parentElement) && !el.classList.contains(cls));\n\n    return el\n  }\n\n  setWidth = () => {\n    // eslint-disable-next-line react/no-find-dom-node\n    const node = this.findAncestor(findDOMNode(this), 'booqable-product')\n    const container = node?.parentNode\n\n    if (!node || !container) return\n\n    const width = container.offsetWidth\n    let maxPerRow = Math.floor(width / 280)\n\n    // Max of 6 per row\n    maxPerRow = Math.max(1, Math.min(maxPerRow, 6))\n\n    return (node.style.width = 100 / maxPerRow + '%')\n  }\n\n  renderLoading = () => {\n    const { t } = this.props\n\n    return (\n      <div className=\"booqable-product-wrapper\">\n        <div className=\"booqable-product-inner\">\n          <ReactCSSTransitionGroup transitionName=\"fade\" transitionEnterTimeout={100} transitionLeaveTimeout={100}>\n            <span className=\"bq-no-photo\">\n              <i className=\"bq-no-photo bq-icon-image fas fa-image\" />\n            </span>\n          </ReactCSSTransitionGroup>\n          <div className=\"bq-details\">\n            <div className=\"bq-product-title-wrapper bq-has-no-prices\">\n              <div className=\"bq-product-name\">\n                <span className=\"fake-text\">{t('user.store.product_placeholder')}</span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderContent = () => {\n    const { id, item, photo, onClick, openQuickview, useAvailability, hideProductAvailabilityQuantities, hasDates, hasPrices, t } = this.props\n\n    const preview = _get(photo, 'preview')\n    const imageSrc = _get(photo, 'large_url') || item.photo_url\n    const imageCoordinates = _get(photo, 'coordinates')\n\n    return (\n      <div className=\"booqable-product-wrapper\">\n        <div className=\"booqable-product-inner\" onClick={onClick.bind(null, id)}>\n          <ReactCSSTransitionGroup transitionName=\"fade\" transitionEnterTimeout={100} transitionLeaveTimeout={100}>\n            {imageSrc && (\n              <FocalImage\n                height=\"250px\"\n                preview={preview}\n                url={imageSrc}\n                coordinates={imageCoordinates}\n                maintainAspect\n              />\n            )}\n            {!imageSrc && (\n              <span className=\"bq-no-photo\">\n                <i className=\"bq-no-photo bq-icon-image fas fa-image\" />\n              </span>\n            )}\n          </ReactCSSTransitionGroup>\n          <div className=\"bq-details\">\n            {useAvailability && hasDates && (\n              <ReactCSSTransitionGroup transitionName=\"fade\" transitionEnterTimeout={100} transitionLeaveTimeout={100}>\n                {item.available_quantity === null && (\n                  <span className=\"bq-branded bq-status bq-available\">{_capitalize(t('user.store.available'))}</span>\n                )}\n                {item.available_quantity === 0 && (\n                  <span className=\"bq-status bq-unavailable\">{_capitalize(t('user.store.unavailable'))}</span>\n                )}\n                {item.available_quantity > 0 && (\n                  hideProductAvailabilityQuantities ?\n                    (\n                      <span className=\"bq-branded bq-status bq-available\">\n                        {_capitalize(t('user.store.available'))}\n                      </span>\n                    ) :\n                    (\n                      <span className=\"bq-branded bq-status bq-available\">\n                        <span className=\"bq-status-quantity\">{item.available_quantity} </span>\n                        {t('user.store.available')}\n                      </span>\n                    )\n                )}\n              </ReactCSSTransitionGroup>\n            )}\n            <button\n              className=\"bq-button bq-branded\"\n              data-link=\"true\"\n              onClick={openQuickview.bind(null, id)}\n              style={{ display: 'none' }}\n            >\n              <i data-link=\"true\" className=\"bq-icon-cart fas fa-shopping-cart bq-link bq-branded-font-color\" />\n            </button>\n            <div\n              className={`bq-product-title-wrapper ${\n                hasPrices || typeof hasPrices === 'number' ? 'bq-has-prices' : 'bq-has-no-prices'\n              }`}\n            >\n              <div title={item.name} className=\"bq-product-name\">\n                {item.name}\n              </div>\n            </div>\n            {item && (\n              <ProductPrice\n                chargeLabel={item.charge_label}\n                priceInCents={item.price_each_in_cents}\n                priceType={item.price_type}\n                productType={item.product_type}\n              />\n            )}\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  render () {\n    const { loading } = this.props\n\n    return loading ? this.renderLoading() : this.renderContent()\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const showPrices = state.settings.get('store.use_prices')\n  const item = state.orm.items.getById(props.id)\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const photo = item && state.orm.photos.getById(item.photo_id)\n\n  return {\n    loading: !item,\n    translations: state.client.get('translations').toJS(),\n    item,\n    photo,\n    useAvailability: state.settings.get('store.use_availability'),\n    hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities'),\n    hasDates: cart?.starts_at && cart?.stops_at,\n    hasPrices: showPrices && item?.price_each_in_cents\n  }\n}\n\nconst mapDispatchToProps = (_, props) => {\n  const openQuickview = (id) => quickviewActions.setItem(id)\n\n  return {\n    openQuickview,\n    onClick: (id, e) => {\n      if (props.link && !e.target.getAttribute('data-link')) {\n        return (window.location = props.link)\n      } else {\n        return openQuickview(id)\n      }\n    }\n  }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps), withTranslation('user'))(Product)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport Product from '../components/product'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class ProductGroup extends React.Component {\n  static displayName = 'ProductGroupContainer'\n\n  render = () => {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <IdFinder {...this.props}>\n              <Product />\n            </IdFinder>\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React from 'react'\nimport { connect as reduxConnect } from 'react-redux'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport _range from 'lodash/range'\n\nclass Pagination extends React.Component {\n  static displayName = 'Pagination'\n\n  static propTypes = {\n    page: PropTypes.any,\n    pages: PropTypes.any,\n    padding: PropTypes.number,\n    showPrev: PropTypes.bool,\n    showNext: PropTypes.bool,\n    handlePage: PropTypes.func,\n    handleNextPage: PropTypes.func,\n    handlePrevPage: PropTypes.func\n  }\n\n  renderPages = () => {\n    const allPages = _range(1, (this.props.pages + 1))\n\n    const padding = this.props.padding || 2\n    const show = padding * 2 + 1\n    let till = Math.min(this.props.pages, this.props.page + padding)\n    const from = Math.max(0, till - show)\n\n    till = from + show\n\n    return allPages.slice(from, till).map((page) => {\n      const classNames = []\n\n      if (page === this.props.page) {\n        classNames.push('bq-pagination-current bq-branded')\n      }\n\n      return (\n        <span key={`page-${page}`} className={`bq-pagination-page ${classNames.join(' ')}`}>\n          {(page !== this.props.page) && <button onClick={this.props.handlePage.bind(null, page)}>{page}</button>}\n          {(page === this.props.page) && page}\n        </span>\n      )\n    })\n  }\n\n  render () {\n    if (this.props.pages <= 1) {\n      return null\n    }\n\n    return (\n      <div className=\"booqable-pagination\">\n        <div className=\"bq-pagination-inner\">\n          {this.props.showPrev && (\n            <span className=\"bq-pagination-page bq-pagination-prev\">\n              <button onClick={this.props.handlePrevPage}>\n                <i className=\"bq-icon-arrow-left2 fas fa-angle-left\" />\n              </button>\n            </span>\n          )}\n          {this.renderPages()}\n          {this.props.showNext && (\n            <span className=\"bq-pagination-page bq-pagination-next\">\n              <button onClick={this.props.handleNextPage}>\n                <i className=\"bq-icon-arrow-right2 fas fa-angle-right\" />\n              </button>\n            </span>\n          )}\n        </div>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const pages = Math.ceil(props.total / props.per)\n\n  return {\n    pages,\n    showPrev: props.page !== 1,\n    showNext: props.page !== pages\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  const handlePageChange = (page) => {\n    const pages = Math.ceil(props.total / props.per)\n\n    if (page >= 1 && page <= pages) {\n      return props.onChange(page)\n    }\n  }\n\n  return {\n    handlePage (page) {\n      return handlePageChange(page)\n    },\n    handlePrevPage () {\n      return handlePageChange(props.page - 1)\n    },\n    handleNextPage () {\n      return handlePageChange(props.page + 1)\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Pagination)\n","const store = window.booqableStore\n\nexport const setFilterSearchQuery = (value, key = 'global') => {\n  store.dispatch({\n    type: 'SET_FILTER_SEARCH_QUERY',\n    payload: {\n      key,\n      value\n    }\n  })\n}\n\nexport const setFilterCollection = (value, key = 'global') => {\n  store.dispatch({\n    type: 'SET_FILTER_COLLECTION',\n    payload: {\n      key,\n      value\n    }\n  })\n}\n\nexport const setFilterSortBy = (value, key = 'global') => {\n  store.dispatch({\n    type: 'SET_FILTER_SORT_BY',\n    payload: {\n      key,\n      value\n    }\n  })\n}\n\nexport const setFilterFilterBy = (value, key = 'global') => {\n  store.dispatch({\n    type: 'SET_FILTER_FILTER_BY',\n    payload: {\n      key,\n      value\n    }\n  })\n}\n\nexport default {\n  setFilterSearchQuery,\n  setFilterSortBy,\n  setFilterFilterBy\n}\n","// React\nimport React, { useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { setFilterSearchQuery } from 'store/v2/redux/actions/filter'\nimport useIsMobile from 'shared/utils/useIsMobile'\n\nconst ProductSearch = ({ t, filterKey = 'global' }) => {\n  const ref = useRef()\n\n  const [value, setValue] = useState('')\n\n  const isMobile = useIsMobile()\n\n  const handleInputChange = (e) => {\n    setValue(e.target.value)\n\n    // Search was cleared manually\n    if (e.target.value === '') {\n      setFilterSearchQuery('', filterKey)\n    }\n  }\n\n  const handleInputKeyUp = (e) => {\n    if (e.key === 'Enter') {\n      setFilterSearchQuery(value, filterKey)\n\n      if (isMobile) {\n        ref.current?.blur()\n      }\n    }\n  }\n\n  const handleClearClick = () => {\n    setValue('')\n\n    setFilterSearchQuery('', filterKey)\n\n    ref.current?.focus()\n  }\n\n  return (\n    <div className=\"bq-product-search-component\">\n      <div className=\"bq-button bq-branded bq-product-search-icon\">\n        <i className=\"bq-icon-search fas fa-search bq-branded-font-color\" />\n      </div>\n      <input\n        type=\"search\"\n        className=\"bq-product-search-input bq-branded-focus\"\n        placeholder={t('user.store.search_products')}\n        ref={ref}\n        value={value}\n        onChange={handleInputChange}\n        onKeyUp={handleInputKeyUp}\n      />\n      {value && (\n        <div className=\"bq-product-search-clear\" onClick={handleClearClick}>\n          <i className=\"bq-icon-cross fas fa-times\" />\n        </div>\n      )}\n    </div>\n  )\n}\n\nProductSearch.displayName = 'ProductSearch'\n\nProductSearch.propTypes = {\n  t: PropTypes.func,\n  filterKey: PropTypes.string\n}\n\nconst mapStateToProps = (state, props) => {\n  return {\n    filterKey: props.searchKey || props.filterKey\n  }\n}\n\nconst decoratedComponent = reduxConnect(mapStateToProps)(ProductSearch)\n\nexport default withTranslation('user')(decoratedComponent)\n","import styled, { css } from 'styled-components'\n\nimport { fontWeight, color, size } from 'ui/themes/utils'\n\nimport I from 'ui/elements/I'\n\nexport const Collection = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  font-size: 14px !important;\n  line-height: 32px !important;\n  font-family: \"Roboto\", sans-serif;\n\n  cursor: pointer;\n\n  font-weight: ${fontWeight('normal')} !important;\n\n  clear: both;\n\n  ${({ active }) => active && css`\n    font-weight: ${fontWeight('bold')} !important;\n  `}\n\n  > div {\n    flex-grow: 1;\n    text-align: left;\n  }\n\n  > span {\n    color: ${color('Text/Secondary')};\n    font-weight: ${fontWeight('normal')} !important;\n  }\n\n  > ${I} {\n    padding-right: ${size('padding', 'md')};\n  }\n`\n\nexport const CollectionList = styled.ul`\n  ${({ noPadding }) => !noPadding && css`\n    > li {\n      padding-left: 10px;\n    }\n  `}\n`\n","import { CollectionList, Collection } from './styles'\n\nCollectionList.Collection = Collection\n\nexport default CollectionList\n","import Model from '../models'\n\nexport default Model.Collection.actions\n","// React\nimport React, { useState, Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport _get from 'lodash/get'\n\n// Components\nimport BCollectionList from 'store/modules/product/blocks/CollectionList'\nimport Icon from 'ui/components/Icon'\n\n// Shared\nimport { useTranslation } from 'react-i18next'\nimport { setFilterCollection } from 'store/v2/redux/actions/filter'\nimport CollectionActions from 'store/v2/redux/actions/collection'\n\nconst CollectionList = ({\n  collections,\n  rootCollections,\n  active,\n  fetchCollections,\n  filterKey = 'global',\n  brandColor,\n  horizontalRule\n}) => {\n  const [open, setOpen] = useState({})\n  const { t } = useTranslation('user')\n\n  useEffect(() => {\n    fetchCollections()\n  }, [])\n\n  const handleToggleCollection = (collectionId, e) => {\n    e?.stopPropagation()\n\n    setOpen((prevOpen) => ({\n      ...prevOpen,\n      [collectionId]: !prevOpen[collectionId]\n    }))\n  }\n\n  const handleFilterByCollection = (collectionId, e) => {\n    // If collection is closed open it\n    if (!open[collectionId]) {\n      handleToggleCollection(collectionId)\n    }\n\n    e?.nativeEvent.stopImmediatePropagation()\n    setFilterCollection(collectionId, filterKey)\n  }\n\n  const renderCollection = (collection) => {\n    const children = collections.getAll({ parent_id: collection.id })\n    const isOpen = !!open[collection.id]\n    const hasChildren = children.size() > 0\n\n    return (\n      <li key={collection.id}>\n        <BCollectionList.Collection\n          onClick={(e) => handleFilterByCollection(collection.id, e)}\n          bold={hasChildren}\n          active={collection.id === active}\n          brandingColor={brandColor}\n        >\n          {hasChildren && (\n            <Icon icon={isOpen ? 'minus' : 'plus'} onClick={(e) => handleToggleCollection(collection.id, e)} />\n          )}\n          <div>{collection.name}</div>\n          {' '}\n          <span>{collection.item_count}</span>\n        </BCollectionList.Collection>\n\n        {hasChildren && isOpen && <BCollectionList>{children.map(renderCollection)}</BCollectionList>}\n      </li>\n    )\n  }\n\n  if (rootCollections.size() === 0) return null\n\n  return (\n    <Fragment>\n      {horizontalRule && <hr />}\n      <BCollectionList noPadding className=\"bq-sidebar-component\">\n        <li>\n          <BCollectionList.Collection active={active === null} onClick={(e) => handleFilterByCollection(null, e)}>\n            {t('user.store.all_collections')}\n          </BCollectionList.Collection>\n          <BCollectionList noPadding>{rootCollections.map(renderCollection)}</BCollectionList>\n        </li>\n      </BCollectionList>\n    </Fragment>\n  )\n}\n\nCollectionList.propTypes = {\n  collections: PropTypes.object,\n  rootCollections: PropTypes.object,\n  active: PropTypes.string,\n  fetchCollections: PropTypes.func,\n  filterKey: PropTypes.string,\n  horizontalRule: PropTypes.bool,\n  brandColor: PropTypes.string\n}\n\nconst mapStateToProps = (state, props) => {\n  const filter = state.filter.get(props.filterKey || 'global')\n  const collections = state.orm.collections.getAll()\n  const rootCollections = collections.getAll({ parent_id: null })\n  const brandColor = state.settings.get('store.brand_color')\n\n  return {\n    active: filter?.get('collection_id'),\n    collections,\n    rootCollections,\n    brandColor\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    fetchCollections: () =>\n      CollectionActions.fetchAll({\n        sort: '-system,depth,position',\n        page: {\n          size: 1000\n        }\n      })\n  }\n}\n\nexport default compose(reduxConnect(mapStateToProps, mapDispatchToProps))(CollectionList)\n","/* eslint-disable react/no-find-dom-node */\n/* eslint-disable react/jsx-no-target-blank */\n\n// React\nimport React, { Component, Fragment } from 'react'\nimport { findDOMNode } from 'react-dom'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport range from 'lodash/range'\nimport _map from 'lodash/map'\nimport _isEmpty from 'lodash/isEmpty'\nimport { Map } from 'immutable'\nimport { withTranslation, Trans } from 'react-i18next'\n\n// Components\nimport Product from './product'\nimport Pagination from './pagination'\nimport ProductSearch from './product_search'\nimport CollectionList from 'store/modules/product/components/CollectionList'\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\n\n// Shared\nimport ItemActions from 'store/v2/redux/actions/item'\nimport isMobile from 'shared/utils/isMobile'\nimport { getLocalCartId } from 'shared/utils/cart'\n\nexport class ProductList extends Component {\n  static displayName = 'ProductList'\n\n  static propTypes = {\n    items: PropTypes.object,\n    hasItems: PropTypes.bool,\n    hasDates: PropTypes.any,\n    searchVisible: PropTypes.bool,\n    collectionsVisible: PropTypes.bool,\n    filterKey: PropTypes.string,\n    filter: PropTypes.instanceOf(Map),\n    per: PropTypes.any,\n    loadingItems: PropTypes.number,\n    wrapClass: PropTypes.string,\n    limit: PropTypes.any,\n    tags: PropTypes.string,\n    categories: PropTypes.string,\n    collections: PropTypes.string,\n    searchValue: PropTypes.string,\n    cart: PropTypes.object,\n    brandingColor: PropTypes.string,\n    t: PropTypes.func\n  }\n\n  state = {\n    ids: [],\n    loading: true,\n    loadingItems: 4,\n    total: null,\n    page: 1,\n    per: this.props.per || 24,\n    cartModalOpen: false,\n    initialLoaded: false\n  }\n\n  componentDidMount = () => {\n    return this.fetchItems()\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { filter } = this.props\n\n    if (filter && !filter.equals(prevProps.filter)) {\n      this.resetFilter()\n    }\n  }\n\n  resetFilter = () => {\n    const { filter } = this.props\n\n    this.setState({ page: 1 })\n\n    return this.fetchItems({ ...filter.toJS(), page: 1 })\n  }\n\n  fetchItems = (options) => {\n    let limit = 0\n    const { tags, categories, collections } = this.props\n    const { per, page } = this.state\n\n    if (options == null) {\n      options = {}\n    }\n\n    this.setState({ loading: true })\n\n    const cartId = getLocalCartId()\n\n    const params = {\n      cart_id: cartId,\n      page: {\n        number: page,\n        per\n      }\n    }\n\n    const filter = {}\n\n    if (tags) {\n      filter.tag = tags.split(',')\n    }\n\n    if (categories) {\n      filter.category = categories.split(',')\n    }\n\n    if (collections) {\n      filter.collection = collections.split(',')\n    }\n\n    if (options.page) {\n      params.page.number = options.page\n    }\n    if (per) {\n      params.page.per = parseInt(per)\n    }\n    if (options.q) {\n      filter.q = options.q\n    }\n\n    if (options.category_id) {\n      filter.category_id = options.category_id\n    }\n\n    if (options.collection_id) {\n      filter.collection_id = options.collection_id\n      // Remove collection filter to avoid conflicts\n      filter.collection = []\n    }\n\n    if (options.filter_by === 'available') {\n      filter.available = true\n    }\n\n    if (this.props.limit) {\n      limit = parseInt(this.props.limit)\n\n      if (!this.props.per) {\n        params.page.number = 1\n        params.page.per = limit\n      }\n    }\n\n    return ItemActions.fetchAll({\n      include: 'photo',\n      filter: !_isEmpty(filter) ? filter : undefined,\n      sort: options.sort_by,\n      apiVersion: 3,\n      ...params\n    }).then((response) => {\n      this.setState({\n        ids: _map(response.payload.normalizedResponse.entities.items, 'id'),\n        total: limit || response.payload.response.meta.total_count,\n        loading: false,\n        initialLoaded: true,\n        loadingItems: Math.min(limit || response.payload.response.meta.total_count, params.per)\n      })\n    })\n  }\n\n  handlePageChange = (page) => {\n    this.fetchItems({ page, ...this.props.filter.toJS() })\n    this.setState({ page })\n\n    const node = findDOMNode(this)\n\n    if (node.scrollIntoView != null) {\n      return node.scrollIntoView()\n    } else {\n      return window.scrollTo(0, 0)\n    }\n  }\n\n  handleModalOpen = () => {\n    this.setState({ cartModalOpen: true })\n  }\n\n  handleModalClose = () => {\n    this.setState({ cartModalOpen: false })\n  }\n\n  renderList = () => {\n    const { t } = this.props\n    const items = this.props.items.getById(this.state.ids)\n\n    if (items.size()) {\n      return items.map((item) => {\n        return (\n          <div className={`booqable-product ${this.props.wrapClass || ''}`} key={item.id} data-id={item.id}>\n            <Product id={item.id} />\n          </div>\n        )\n      })\n    } else if (this.state.loading) {\n      return range(1, this.props.loadingItems || this.state.loadingItems + 1).map((i) => (\n        <div key={i} className=\"booqable-product\">\n          <Product />\n        </div>\n      ))\n    } else if (this.props.searchValue !== '' || (this.props.hasItems && items.size() === 0)) {\n      return <div className=\"booqable-product-list-notice\">{t('user.store.no_products_found_try_filters')}</div>\n    } else {\n      return (\n        <div className=\"cleanstate\">\n          {t('user.store.no_products_found')}\n          <Trans\n            i18nKey=\"user.store.login_to_add_products_or_use_tags\"\n            ns=\"user\"\n            components={{ Link: <a href=\"https://login.booqable.com\" target=\"_blank\" className=\"bq-branded-font\" /> }}\n          />\n        </div>\n      )\n    }\n  }\n\n  render () {\n    const { cart, brandingColor, t } = this.props\n    const { cartModalOpen } = this.state\n\n    const mobile = isMobile()\n\n    return (\n      <Fragment>\n        <div\n          className={`booqable-product-list-wrapper ${\n            this.props.collectionsVisible ? 'booqable-product-list-wrapper-with-sidebar' : undefined\n          }`}\n        >\n          {this.props.searchVisible && <ProductSearch filterKey={this.props.filterKey} />}\n          {!this.props.hasDates && (\n            <div className=\"booqable-product-list-notice clickable\" onClick={this.handleModalOpen}>\n              {t('user.store.no_dates_set')}\n            </div>\n          )}\n          {this.renderList()}\n          {this.state.initialLoaded && this.state.total > 0 && (\n            <Pagination\n              total={this.state.total}\n              page={this.state.page}\n              per={this.state.per}\n              onChange={this.handlePageChange}\n            />\n          )}\n          {this.props.collectionsVisible && <CollectionList filterKey={this.props.filterKey} />}\n        </div>\n        <ModalCartPicker\n          cart={cart}\n          open={cartModalOpen}\n          onClose={this.handleModalClose}\n          brandingColor={brandingColor}\n          direction={mobile ? 'vertical' : 'horizontal'}\n          title={t('user.store.cart_title')}\n        />\n      </Fragment>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const searchVisible = props.showSearch === 'true'\n  const collectionsVisible = props.showCollections === 'true' || props.showCategories === 'true'\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const filterKey = props.filterKey || 'global'\n  const brandingColor = state.settings.get('store.brand_color')\n\n  return {\n    hasDates: cart && cart.starts_at && cart.stops_at,\n    hasItems: state.orm.items.size() > 0,\n    items: state.orm.items.getAll(),\n    loadingItems: parseInt(props.loadingItems) || parseInt(props.limit),\n    searchVisible,\n    collectionsVisible,\n    filterKey,\n    filter: state.filter.get(filterKey),\n    cart,\n    brandingColor\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(ProductList)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\n\nimport ProductList from '../components/product_list'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class List extends React.Component {\n  static displayName = 'ListContainer'\n\n  static propTypes = {\n    searchKey: PropTypes.string\n  }\n\n  render = () => {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <ProductList {...this.props} filterKey={this.props.searchKey} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import styled, { css } from 'styled-components'\n\nexport const ProductButton = styled.div`\n`\n\nexport const BundleItems = styled.div`\n  max-height: 175px;\n  overflow-y: auto;\n\n  display: grid;\n  grid-template-columns: 50px max-content 1fr;\n\n  margin-bottom: 12px !important;\n\n  background:\n  /* Shadow covers */\n    linear-gradient(white 30%, rgba(255,255,255,0)),\n    linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,\n\n    /* Shadows */\n    radial-gradient(50% 0, farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)),\n    radial-gradient(50% 100%,farthest-side, rgba(0,0,0,.2), rgba(0,0,0,0)) 0 100%;\n  background:\n    /* Shadow covers */\n    linear-gradient(white 30%, rgba(255,255,255,0)),\n    linear-gradient(rgba(255,255,255,0), white 70%) 0 100%,\n\n    /* Shadows */\n    radial-gradient(farthest-side at 50% 0, rgba(0,0,0,.15), rgba(0,0,0,0)),\n    radial-gradient(farthest-side at 50% 100%, rgba(0,0,0,.15), rgba(0,0,0,0)) 0 100%;\n  background-repeat: no-repeat;\n  background-color: white;\n  background-size: 100% 40px, 100% 40px, 100% 14px, 100% 14px;\n  background-attachment: local, local, scroll, scroll;\n`\n\nexport const BundleItemRow = styled.div`\n  display: contents;\n`\n\nexport const BundleItemCell = styled.div`\n  display: flex;\n  align-items: center;\n\n  padding: 5px !important;\n\n  font-size: 14px !important;\n\n  ${({ disabled }) => disabled && css`\n    opacity: 0.6;\n  `}\n\n  /* Need to specificity hack here ;< */\n  &&&&&&&{\n    select.bq-variation {\n      font-size: 14px !important;\n      margin-bottom: 0 !important;\n    }\n  }\n`\n","import { ProductButton, BundleItems, BundleItemRow, BundleItemCell } from './styles'\n\nProductButton.BundleItems = BundleItems\nProductButton.BundleItemRow = BundleItemRow\nProductButton.BundleItemCell = BundleItemCell\n\nexport default ProductButton\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport clone from 'lodash/clone'\nimport isEmpty from 'lodash/isEmpty'\nimport isEqual from 'lodash/isEqual'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport Icon from 'ui/components/Icon'\nimport BProductButton from 'store/modules/product/blocks/ProductButton'\n\n// Shared\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nexport class BundleItems extends Component {\n  static displayName = 'ProductButtonBundleItems'\n\n  static propTypes = {\n    bundleItems: PropTypes.object,\n    products: PropTypes.object,\n    productGroups: PropTypes.object,\n    photos: PropTypes.object,\n    configuration: PropTypes.object,\n    setBundleConfiguration: PropTypes.func\n  }\n\n  componentDidMount = () => {\n    this.chooseInitialConfiguration()\n  }\n\n  chooseInitialConfiguration = () => {\n    const { bundleItems, products, configuration } = this.props\n    const newConfiguration = clone(configuration)\n\n    bundleItems.forEach((bundleItem) => {\n      if (bundleItem.product_id) {\n        // Specified BundleItem => Use preconfigured Product\n        newConfiguration[bundleItem.id] = bundleItem.product_id\n      } else if (isEmpty(configuration[bundleItem.id])) {\n        // Unspecified BundleItem => Pick Product based on sorting_weight\n        // sorting_weight determines order in which Products are shown under Product>Variations in the Back Office\n        const choices = products.getAll({ product_group_id: bundleItem.product_group_id }).sort('sorting_weight')\n        newConfiguration[bundleItem.id] = choices.getFirst().id\n      }\n    })\n\n    if (!isEqual(newConfiguration, configuration)) {\n      this.props.setBundleConfiguration(newConfiguration)\n    }\n  }\n\n  handleChangeVariation = (bundleItemId, e) => {\n    const { configuration } = this.props\n    const selectedProductId = e.target.value\n\n    const newConfiguration = clone(configuration)\n    newConfiguration[bundleItemId] = selectedProductId\n\n    this.props.setBundleConfiguration(newConfiguration)\n  }\n\n  renderSelectVariation = (bundleItemId, products, selectedProduct) => {\n    return (\n      <div className=\"bq-variation-wrapper\">\n        <select\n          name=\"variation\"\n          className=\"bq-variation\"\n          onChange={this.handleChangeVariation.bind(null, bundleItemId)}\n          value={selectedProduct || ''}\n        >\n          {products.map((product) => (\n            <option key={`${bundleItemId}-${product.id}`} value={product.id}>\n              {product.name}\n            </option>\n          ))}\n        </select>\n        <Icon icon=\"angle-down\" />\n      </div>\n    )\n  }\n\n  renderItem = (bundleItem) => {\n    const { products, productGroups, photos, configuration } = this.props\n    const productGroup = productGroups.getById(bundleItem.product_group_id)\n    const product = products.getById(bundleItem.product_id)\n    const variation = products.getById(configuration[bundleItem.id])\n    const item = variation || product || productGroup\n    const photo = photos.getById(item.photo_id)\n    const choices = products.getAll({ product_group_id: productGroup.id }).sort('sorting_weight')\n\n    return (\n      <BProductButton.BundleItemRow key={bundleItem.id}>\n        <BProductButton.BundleItemCell>\n          <FocalImage\n            url={(photo && photo.large_url) || NO_PRODUCT_IMAGE}\n            preview={photo && photo.preview}\n            coordinates={photo && photo.coordinates}\n            size=\"40px\"\n          />\n        </BProductButton.BundleItemCell>\n        <BProductButton.BundleItemCell disabled>\n          {bundleItem.quantity}x\n        </BProductButton.BundleItemCell>\n        <BProductButton.BundleItemCell>\n          {(!productGroup.has_variations || bundleItem.product_id) &&\n            item.name}\n          {productGroup.has_variations && !bundleItem.product_id &&\n            this.renderSelectVariation(bundleItem.id, choices, configuration[bundleItem.id])}\n        </BProductButton.BundleItemCell>\n      </BProductButton.BundleItemRow>\n    )\n  }\n\n  render () {\n    const { bundleItems } = this.props\n\n    return (\n      <BProductButton.BundleItems className=\"bq-bundle-contents\">\n        {bundleItems.map((item) => this.renderItem(item))}\n      </BProductButton.BundleItems>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const bundleItems = state.orm.bundle_items.getAll({ bundle_id: props.item.id })\n  const productGroupIds = bundleItems.pluck('product_group_id')\n  const productGroups = state.orm.product_groups.getById(productGroupIds)\n  const products = state.orm.products.getAll({ product_group_id: productGroupIds })\n\n  return {\n    bundleItems,\n    products,\n    productGroups,\n    photos: state.orm.photos.getAll()\n  }\n}\n\nexport default reduxConnect(mapStateToProps, null)(BundleItems)\n","import styled, { css } from 'styled-components'\n\nimport { size, fontWeight, fontSize, color } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\nimport P from 'ui/elements/P'\n\nexport const TimeTable = styled.div`\n  width: ${({ width }) => width ? `${width}px` : 'auto'};\n\n  ${P} {\n    font-size: ${fontSize('md')};\n  }\n`\n\nexport const ScrollContainer = styled.div`\n  height: 360px;\n\n  overflow-y: auto;\n\n  @media screen and (max-width: 425px) {\n    height: 70vh;\n  }\n`\n\nexport const Header = styled.div`\n  display: flex;\n  flex-flow: row wrap;\n  align-items: center;\n\n  padding: ${size('padding', 'sm')} !important;\n\n  border-bottom: ${size('borderWidth')} solid ${color('Misc/Divider')} !important;\n\n  & > ${Icon} {\n    flex: 0;\n\n    cursor: pointer;\n  }\n\n  & > ${P} {\n    font-weight: ${fontWeight('lighter')};\n  }\n\n  & > ${P}:last-of-type {\n    flex: 1;\n\n    text-align: center;\n\n    margin: 0;\n  }\n`\n\nexport const Item = styled.div`\n  display: flex;\n  align-items: center;\n\n  padding: ${size('padding', 'sm')} !important;\n\n  ${({ active }) => active && css`\n    background: ${color('Primary/Background2')};\n  `}\n\n  ${({ inOpeningHours }) => !inOpeningHours && css`\n    opacity: 0.5;\n  `}\n\n  & > ${P} {\n    margin: 0;\n\n    font-weight: ${fontWeight('lighter')};\n  }\n\n  & > ${P}:first-of-type {\n    flex: 1;\n  }\n\n  & > ${P}:last-of-type {\n    text-align: right;\n  }\n`\n\nexport const Indicator = styled.div`\n  width: 16px;\n  height: 16px;\n\n  margin-right: ${size('margin', 'xs')} !important;\n\n  border-radius: ${size('borderRadius')};\n\n  ${({ status }) => {\n    let background\n\n    if (status) {\n      switch (status) {\n        case 'available':\n          background = color('Success/Outline')\n          break\n        case 'unavailable':\n          background = color('Danger/Base')\n          break\n      }\n\n      return css`\n        background-color: ${background};\n      `\n    } else {\n      /* Loading state */\n      return css`\n        background: #000000;\n        opacity: 0.15;\n\n        animation: pulse 1.5s infinite ease-in-out;\n\n        @keyframes pulse {\n          0% { opacity: 0.05; }\n          50% { opacity: 0.15; }\n          100% { opacity: 0.05; }\n        }\n      `\n    }\n  }}\n`\n","import { Header, Indicator, Item, ScrollContainer, TimeTable } from './styles'\n\nTimeTable.Header = Header\nTimeTable.Item = Item\nTimeTable.Indicator = Indicator\nTimeTable.ScrollContainer = ScrollContainer\n\nexport default TimeTable\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport P from 'ui/elements/P'\nimport Loader from 'ui/components/Loader'\nimport BTimeTable from 'store/modules/product/blocks/ProductAvailabilityCalendar/TimeTable'\nimport Icon from 'ui/components/Icon'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\nimport OperatinRuleUtils from 'shared/utils/operating_rules'\nimport { date as dateFormat } from 'shared/utils/format'\nimport moment, { localMomentInUTC } from 'shared/lib/moment'\n\nexport class TimeTable extends Component {\n  static displayName = 'TimeTable'\n\n  static propTypes = {\n    id: PropTypes.string,\n    date: PropTypes.any,\n    onClose: PropTypes.func,\n    fetchAvailability: PropTypes.func,\n    quantity: PropTypes.number,\n    selected: PropTypes.object,\n    availabilities: PropTypes.object,\n    showCounts: PropTypes.bool,\n    width: PropTypes.number,\n    t: PropTypes.func\n  }\n\n  constructor (props) {\n    super(props)\n    this.firstOpenElement = React.createRef()\n  }\n\n  componentDidMount = () => {\n    const { date, fetchAvailability } = this.props\n\n    fetchAvailability({\n      time: date,\n      timeTable: true\n    })\n  }\n\n  componentDidUpdate = (prevProps) => {\n    if (this.props.availabilities !== prevProps.availabilities) {\n      this.firstOpenElement?.current?.scrollIntoView()\n    }\n  }\n\n  render () {\n    const { availabilities, onClose, date, selected, showCounts, t } = this.props\n    const localDate = localMomentInUTC(date)\n\n    let firstOpenElement = availabilities.find((el) => el.inOpeningHours)\n\n    return (\n      <BTimeTable width={this.props.width}>\n        <BTimeTable.Header>\n          <Icon icon=\"arrow-left\" onClick={onClose} />\n          <P>{dateFormat(localDate, 'date')}</P>\n        </BTimeTable.Header>\n        <BTimeTable.ScrollContainer>\n          {!availabilities && <Loader size=\"md\" />}\n          {availabilities.map((availability) => {\n            let ref\n\n            if (firstOpenElement === availability) {\n              ref = this.firstOpenElement\n            }\n\n            const active = selected.contains(availability.time)\n\n            return (\n              <BTimeTable.Item key={availability.time} active={active} ref={ref} inOpeningHours={availability.inOpeningHours}>\n                <BTimeTable.Indicator className={availability.status} status={availability.status} />\n                <P>{dateFormat(availability.time, 'time')}</P>\n                {showCounts && <P>{availability.quantity} {t('user.store.available')}</P>}\n                {!showCounts && <P>{t(availability.status === 'available' ? 'user.store.available' : 'user.store.unavailable')}</P>}\n              </BTimeTable.Item>\n            )\n          })}\n        </BTimeTable.ScrollContainer>\n      </BTimeTable>\n    )\n  }\n}\n\nconst mapStateToProps = (_state, props) => {\n  return {\n    selected: moment.range(\n      moment(props.selected.from),\n      moment(props.selected.to)\n    ),\n    availabilities: props.availabilities.getAll({\n      type: 'time'\n    }).map((el) => {\n      const time = moment(`${el.date} ${el.hour}:${el.minute}`)\n\n      return {\n        time,\n        date: el.date,\n        status: el.status,\n        quantity: el.quantity,\n        inOpeningHours: OperatinRuleUtils.isWithinOpeningHours(time, props.operatingRules, true)\n      }\n    }).filter((el) => {\n      // TODO: In case we want to hide availability outside of opening hours\n      // if (!el.inOpeningHours && el.status !== 'unavailable') return false\n      const localDate = localMomentInUTC(props.date)\n      return moment(el.date).isSame(localDate, 'day')\n    }).sortBy((el) => el.time)\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps)(TimeTable)\n\nexport default withTranslation('user')(reduxComponent)\n","import styled from 'styled-components'\nimport Link from 'ui/blocks/Link'\nimport H3 from 'ui/elements/H3'\nimport Label from 'ui/elements/Label'\nimport BQuantityInput from 'ui/blocks/QuantityInput'\n\nimport { size, color, fontSize, fontWeight } from 'ui/themes/utils'\n\nexport const ProductAvailabilityCalendar = styled.div`\n  overflow-x: hidden;\n\n  .slide-and-fade-enter {\n    opacity: 0;\n    transform: translateX(100%);\n  }\n\n  .slide-and-fade-exit {\n    opacity: 1;\n    transform: translateX(0);\n  }\n\n  .slide-and-fade-enter-active {\n    opacity: 1;\n    transform: translateX(0);\n  }\n\n  .slide-and-fade-exit-active {\n    opacity: 0;\n    transform: translateX(-100%);\n  }\n\n  .slide-and-fade-enter-active,\n  .slide-and-fade-exit-active {\n    transition: all 150ms;\n  }\n\n  font-family: ${(props) => props.theme.font.body};\n\n  .DayPicker-Caption {\n    color: ${color('Text/Primary')};\n  }\n`\n\nexport const CalendarContainer = styled.div``\n\nexport const Header = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  padding: ${size('padding', 'sm')} ${size('padding', 'sm')} 0 !important;\n\n  cursor: pointer;\n\n  ${H3} {\n    font-size: calc(${fontSize('md')} + 2px);\n    font-weight: ${fontWeight('semibold')};\n  }\n`\n\nexport const InputContainer = styled.div`\n  padding: ${size('padding', 'md')} ${size('padding', 'sm')} 0 !important;\n\n  font-weight: ${fontWeight('semibold')} !important;\n\n  display: flex;\n\n  > div:first-child {\n    /* Increase flex-basis to allow 3 digit numbers to be fully visible */\n    flex-basis: 28%;\n  }\n\n  > div:last-child {\n    flex-grow: 3;\n\n    margin-left: ${size('margin', 'md')};\n  }\n\n  > div:first-child:last-child {\n    margin-left: 0;\n  }\n\n  .Select__menu {\n    margin-top: ${size('margin', 'xs')};\n  }\n\n  .Select__option {\n    padding: ${size('padding', 'xs')} ${size('padding', 'md')};\n    font-weight: ${fontWeight('lighter')};\n    font-size: ${fontSize('md')};\n  }\n\n  ${Label} {\n    font-weight: ${fontWeight('semibold')};\n    font-size: ${fontSize('md')};\n\n    margin-bottom: ${size('margin', 'xs')};\n  }\n\n  ${BQuantityInput.Control} {\n    font-size: calc(${fontSize('sm')} + 1px);\n    line-height: ${fontSize('lg')} !important;\n  }\n`\n\nexport const AvailabilityLink = styled(Link)`\n  display: inline-block;\n  height: 2em;\n\n  text-decoration: underline !important;\n`\n","import { ProductAvailabilityCalendar, InputContainer, AvailabilityLink, Header, CalendarContainer } from './styles'\n\nProductAvailabilityCalendar.InputContainer = InputContainer\nProductAvailabilityCalendar.AvailabilityLink = AvailabilityLink\nProductAvailabilityCalendar.Header = Header\nProductAvailabilityCalendar.CalendarContainer = CalendarContainer\n\nexport default ProductAvailabilityCalendar\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Navigation from 'ui/components/DayPicker/Navigation'\nimport InputField from 'ui/components/InputField'\nimport PickerDay from 'ui/components/Picker/Day'\nimport Popover from 'ui/components/Popover'\nimport Icon from 'ui/components/Icon'\nimport BDatePickerInput from 'ui/blocks/DatePickerInput'\nimport BDayPicker from 'ui/blocks/DayPicker'\nimport H3 from 'ui/elements/H3'\nimport TimeTable from './TimeTable'\nimport PortalWrapper from 'ui/components/PortalWrapper'\nimport BProductAvailabilityCalendar from 'store/modules/product/blocks/ProductAvailabilityCalendar'\nimport Div from 'ui/elements/Div'\n\n// Libraries\nimport DayPicker, { MomentLocaleUtils } from 'react-day-picker'\nimport debounce from 'lodash/debounce'\nimport { CSSTransition, SwitchTransition, config } from 'react-transition-group'\n\n// Shared\nimport { isDayClosed } from 'ui/components/Picker/utils'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport moment, { localMoment } from 'shared/lib/moment'\nimport AvailabilityActions from 'store/v2/redux/actions/availability'\nimport { localMomentInUTC } from 'shared/lib/moment'\n\nimport 'react-day-picker/lib/style.css'\n\n// Get and set locale\nlet locale = 'en'\n\nif (navigator.languages !== undefined) {\n  locale = navigator.languages[0]\n} else {\n  locale = navigator.language\n}\n\nlocale = locale.toLowerCase()\n\nimport(`moment/locale/${locale}`).then(() => {\n  moment.locale(locale)\n\n  if (window.booqableOptions) {\n    window.booqableOptions.locale = locale.split('-')[0]\n  }\n})\n  .catch((error) => {\n    // These locales are the default in moment and\n    // not included in as specific locale files.\n    // We can discard the error since US English\n    // is already loaded.\n    if (['en', 'en-us'].includes(locale)) return\n\n    throw (error)\n  })\n\nclass ProductAvailabilityCalendar extends Component {\n  static displayName = 'ProductAvailabilityCalendar'\n\n  static propTypes = {\n    id: PropTypes.string,\n    productConfiguration: PropTypes.object,\n    firstDayOfWeek: PropTypes.number,\n    translate: PropTypes.bool,\n    selected: PropTypes.object,\n    availabilities: PropTypes.object,\n    locations: PropTypes.object,\n    showPast: PropTypes.bool,\n    showTimes: PropTypes.bool,\n    fetchAvailability: PropTypes.func,\n    defaultLocationId: PropTypes.string,\n    t: PropTypes.func,\n    showCounts: PropTypes.bool,\n    operatingRules: PropTypes.object,\n    isMobile: PropTypes.bool\n  }\n\n  state = {\n    selectedLocationId: null,\n    quantity: 1,\n    date: null,\n    time: null,\n    containerWidth: 0\n  }\n\n  componentDidMount = () => {\n    // disables animations when in test mode\n    config.disabled = !!window.testMode\n\n    this.handleFetchAvailability = debounce(\n      this.fetchAvailability,\n      window.testMode ? 0 : 500\n    )\n  }\n\n  componentDidUpdate = (_, prevState) => {\n    if (!prevState.time && this.state.time !== prevState.time && this.containerRef) {\n      this.setState({ containerWidth: this.containerRef.getBoundingClientRect().width })\n    }\n\n    if (!this.state.selectedLocationId && this.props.defaultLocationId !== this.state.selectedLocationId) {\n      this.setState({ selectedLocationId: this.props.defaultLocationId })\n    }\n  }\n\n  handlePopoverOpen = () => {\n    this.setState({ open: true, time: null })\n    this.handleFetchAvailability()\n  }\n\n  handleDayClick = (date, modifiers) => {\n    if (modifiers.disabled) return\n\n    const { showTimes } = this.props\n\n    if (!showTimes) return\n\n    this.setState({ time: date })\n  }\n\n  handleTimeTableClose = () => {\n    this.setState({ time: null })\n  }\n\n  handlePopoverClose = () => {\n    this.setState({ open: false })\n  }\n\n  fetchAvailability = ({ time, timeTable } = {}) => {\n    const { id, productConfiguration, selected, fetchAvailability, defaultLocationId, locations } = this.props\n    const { selectedLocationId, quantity, date } = this.state\n    const queryDate = time || date || (selected?.from && new Date(selected.from)) || new Date()\n    const locationId = selectedLocationId || defaultLocationId || locations?.first()?.id\n\n    fetchAvailability(id, productConfiguration, {\n      date: queryDate,\n      locationId,\n      quantity,\n      timeTable\n    })\n  }\n\n  renderLocationSelect = () => {\n    const { locations, defaultLocationId, t } = this.props\n    const { selectedLocationId } = this.state\n\n    if (!locations || locations.size() <= 1) return null\n\n    return (\n      <InputField\n        type=\"select\"\n        data-tid=\"Availability location select\"\n        label={t('user.store.start', t('common.start.present'))}\n        options={locations.pluckObject({ label: 'name', value: 'id' })}\n        field={{\n          name: 'location',\n          value: selectedLocationId || defaultLocationId,\n          onChange: (value) => this.setState({ selectedLocationId: value }, this.handleFetchAvailability)\n        }}\n        renderNativeOnMobile={false}\n      />\n    )\n  }\n\n  renderQuantityInput = () => {\n    const { t } = this.props\n    const { quantity } = this.state\n\n    return (\n      <InputField\n        type=\"quantity\"\n        data-tid=\"Availability quantity\"\n        label={t('user.store.quantity', t('common.quantity'))}\n        min={1}\n        field={{\n          name: 'quantity',\n          value: quantity,\n          onChange: (value) => { this.setState({ quantity: value }, this.handleFetchAvailability) }\n        }}\n      />\n    )\n  }\n\n  renderDay = (day, modifiers) => {\n    const { availabilities, showCounts, showPast, showTimes } = this.props\n\n    const availabilityData = availabilities?.getFirst({ type: 'date', date: localMomentInUTC(day).format('YYYY-MM-DD') })\n\n    return (\n      <PickerDay\n        day={day}\n        available={availabilityData?.status}\n        availableCount={availabilityData?.quantity}\n        showCounts={showCounts}\n        modifiers={modifiers}\n        showAvailability\n        showPast={showPast}\n        interactive={showTimes}\n      />\n    )\n  }\n\n  renderAvailabilityCalendar = () => {\n    const { translate, operatingRules, availabilities, showCounts, firstDayOfWeek, isMobile, showTimes, t } = this.props\n\n    const modifiers = {}\n    const selected = {\n      from: new Date()\n    }\n\n    if (this.props.selected?.from) {\n      Object.assign(selected, {\n        from: localMoment(this.props.selected.from, true).toDate(),\n        to: localMoment(this.props.selected.to, true).toDate()\n      })\n\n      Object.assign(modifiers, {\n        selected,\n        selectionStart: selected.from,\n        selectionEnd: selected.to,\n        from: selected.from,\n        to: selected.to,\n        past: { before: new Date() }\n      })\n    } else {\n      Object.assign(modifiers, {\n        past: { before: new Date() }\n      })\n    }\n\n    return (\n      <BProductAvailabilityCalendar\n        isMobile={isMobile}\n        ref={(ref) => { this.containerRef = ref }}\n        className=\"booqable-component\"\n      >\n        <BProductAvailabilityCalendar.Header onClick={this.handlePopoverClose}>\n          <H3>{t('user.store.check_availability', t('common.check_availability'))}</H3>\n          {' '}\n          <Icon icon=\"times\" style=\"fas\" />\n        </BProductAvailabilityCalendar.Header>\n        <SwitchTransition>\n          <CSSTransition\n            key={(this.state.time && showTimes) ? 'time' : 'date'}\n            addEndListener={(node, done) => node.addEventListener('transitionend', done, false)}\n            classNames=\"slide-and-fade\"\n          >\n            <>\n              {this.state.time && (\n                <TimeTable\n                  fetchAvailability={this.fetchAvailability}\n                  onClose={this.handleTimeTableClose}\n                  date={this.state.time}\n                  quantity={this.state.quantity}\n                  width={this.state.containerWidth}\n                  availabilities={availabilities}\n                  operatingRules={operatingRules}\n                  selected={selected}\n                  showCounts={showCounts}\n                />\n              )}\n              {!this.state.time && (\n                <BProductAvailabilityCalendar.CalendarContainer>\n                  <BProductAvailabilityCalendar.InputContainer>\n                    {this.renderQuantityInput()}\n                    {this.renderLocationSelect()}\n                  </BProductAvailabilityCalendar.InputContainer>\n                  <Div modifiers=\"padding-left-sm padding-right-sm padding-top-md padding-bottom-md\">\n                    <BDayPicker>\n                      <DayPicker\n                        navbarElement={Navigation}\n                        month={selected.from || new Date()}\n                        localeUtils={MomentLocaleUtils}\n                        locale={translate ? locale : 'en'}\n                        firstDayOfWeek={parseInt(firstDayOfWeek)}\n                        renderDay={this.renderDay}\n                        onMonthChange={(date) => this.setState({ date }, this.handleFetchAvailability)}\n                        onDayClick={this.handleDayClick}\n                        disabledDays={(date) => isDayClosed({ date: localMomentInUTC(date), openingHours: operatingRules, allowPast: false })}\n                        modifiers={modifiers}\n                        from={selected.from}\n                        to={selected.to}\n                        className={!showTimes && 'DayPicker--interactionDisabled'}\n                      />\n                    </BDayPicker>\n                  </Div>\n                </BProductAvailabilityCalendar.CalendarContainer>\n              )}\n            </>\n          </CSSTransition>\n        </SwitchTransition>\n      </BProductAvailabilityCalendar>\n    )\n  }\n\n  renderMobile = (open) => {\n    const { t } = this.props\n\n    return (\n      <Fragment>\n        <BProductAvailabilityCalendar.AvailabilityLink color=\"dark\" size=\"xs\" onClick={this.handlePopoverOpen}>\n          {t('user.store.check_availability', t('common.check_availability'))}\n        </BProductAvailabilityCalendar.AvailabilityLink>\n        <PortalWrapper open={open}>\n          <BDatePickerInput.MobileWrapper>\n            {this.renderAvailabilityCalendar(true)}\n          </BDatePickerInput.MobileWrapper>\n        </PortalWrapper>\n      </Fragment>\n    )\n  }\n\n  render () {\n    const { open } = this.state\n    const { isMobile, t } = this.props\n\n    if (isMobile) {\n      return this.renderMobile(open)\n    } else {\n      return (\n        <Popover\n          content={this.renderAvailabilityCalendar}\n          open={open}\n          onClose={this.handlePopoverClose}\n          method=\"manual\"\n          direction=\"right\"\n          fallbackPlacements={['left', 'bottom']}\n          offset={20}\n          fixed\n        >\n          <BProductAvailabilityCalendar.AvailabilityLink color=\"dark\" size=\"xs\" onClick={this.handlePopoverOpen}>\n            {t('user.store.check_availability', t('common.check_availability'))}\n          </BProductAvailabilityCalendar.AvailabilityLink>\n        </Popover>\n      )\n    }\n  }\n}\n\nconst ProductAvailabilityCalendarWrapper = (props) => {\n  const isMobile = useIsMobile()\n\n  return <ProductAvailabilityCalendar {...props} isMobile={isMobile} />\n}\n\nconst mapStateToProps = (state, _props) => {\n  return {\n    locations: state.orm.locations.getAll(),\n    firstDayOfWeek: state.settings.get('dates.first_day_of_week'),\n    showTimes: state.settings.get('store.use_times')\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => ({\n  fetchAvailability: (id, configuration, { date, locationId, quantity, timeTable }) => {\n    if (!date) return\n\n    const filter = {\n      year: date.getFullYear(),\n      month: date.getMonth() + 1,\n      item_id: id,\n      start_location_id: locationId,\n      quantity,\n      configuration\n    }\n\n    if (timeTable) {\n      filter.day = date.getDate()\n    }\n\n    return AvailabilityActions.fetchItemAvailability({\n      apiVersion: 3,\n      filter\n    })\n  }\n})\n\nexport default compose(\n  reduxConnect(mapStateToProps, mapDispatchToProps),\n  withTranslation('user')\n)(ProductAvailabilityCalendarWrapper)\n","import get from 'lodash/get'\n\nexport default {\n  selectedForProductGroup (collection, selectedProductId, productGroupId) {\n    let selectedProduct\n\n    if (selectedProductId) {\n      selectedProduct = collection.getById(selectedProductId)\n    } else {\n      // TODO: Select available product first\n      const products = collection.getAll({ product_group_id: productGroupId })\n\n      selectedProduct = products.sortBy(\n        (product) => product.price_in_cents || product.price_each_in_cents || get(product, 'price.tile.price_in_cents')\n      )\n      selectedProduct =\n        selectedProduct.filter((product) => product.available_quantity > 0).first() || selectedProduct.first()\n    }\n\n    return selectedProduct\n  }\n}\n","import { updateUI } from 'shared/redux/interface'\n\nconst store = window.booqableStore\n\nexport default {\n  addLineQtyUI (line, qty) {\n    const newQty = parseInt(line.quantity) + parseInt(qty)\n    const action = updateUI(`Line${line.id}`, { quantity: newQty })\n\n    return store.dispatch(action)\n  }\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport _get from 'lodash/get'\nimport _capitalize from 'lodash/capitalize'\nimport _isEqual from 'lodash/isEqual'\nimport _isNaN from 'lodash/isNaN'\n\n// Components\nimport BundleItems from './BundleItems'\nimport ProductPrice from 'store/v2/react/components/product_price'\nimport InputField from 'ui/components/InputField'\nimport Button from 'ui/components/Button'\nimport Icon from 'ui/components/Icon'\nimport Spacer from 'ui/blocks/Spacer'\nimport ProductAvailabilityCalendar from 'store/modules/product/components/ProductAvailabilityCalendar'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport ReactCSSTransitionGroup from 'shared/lib/react_css_transition_group'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport productSelectors from 'store/v2/redux/selectors/product'\nimport cartActions from 'store/v2/redux/actions/cart'\nimport clientActions from 'store/v2/redux/actions/client'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\nimport lineActions from 'store/v2/redux/actions/line'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\nimport { getOperatingRules } from 'shared/utils/operating_rules'\n\nexport class ProductButton extends Component {\n  static displayName = 'ProductButton'\n\n  static propTypes = {\n    item: PropTypes.object,\n    productGroup: PropTypes.object,\n    products: PropTypes.object,\n    bundle: PropTypes.object,\n    line: PropTypes.object,\n    cart: PropTypes.object,\n    useAvailability: PropTypes.bool,\n    showProductAvailability: PropTypes.bool,\n    hasDates: PropTypes.bool,\n    book: PropTypes.func.isRequired,\n    onChangeProductId: PropTypes.func,\n    availabilities: PropTypes.object,\n    operatingRules: PropTypes.object,\n    showCounts: PropTypes.bool,\n    addButtonUsesCheckoutBehaviour: PropTypes.bool,\n    t: PropTypes.func,\n    clear: PropTypes.func,\n    loading: PropTypes.bool\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      loading: false,\n      quantity: 1,\n      selectedProductId: null,\n      configuration: { products: {} },\n      promise: null\n    }\n  }\n\n  componentDidUpdate = (prevProps, prevState) => {\n    const cartChanged = prevProps.cart?.updated_at !== this.props.cart?.updated_at\n\n    const isBundle = this.props.item.type === 'Bundle'\n    const bundleConfigChanged = !_isEqual(prevState.configuration, this.state.configuration)\n\n    if (cartChanged) {\n      this.loadItemData()\n    }\n    if (isBundle && (cartChanged || bundleConfigChanged)) {\n      this.loadBundlePriceAndAvailability()\n    }\n  }\n\n  get selectedProduct () {\n    const { products, item } = this.props\n    const { selectedProductId } = this.state\n\n    if (item.type !== 'ProductGroup') return null\n\n    return productSelectors.selectedForProductGroup(products, selectedProductId, item.id)\n  }\n\n  loadItemData = () => {\n    const { item, cart } = this.props\n\n    this.setState({ loading: true })\n\n    const callback = () => this.setState({ loading: false, price_each_in_cents: null })\n\n    if (item.type === 'ProductGroup') {\n      return ProductGroupActions.fetchAll({\n        ids: [item.id],\n        cart_id: cart && cart.id,\n        include: 'photos,products',\n        apiVersion: 3\n      }).then(callback)\n    } else if (item.type === 'Bundle') {\n      return BundleActions.fetchAll({\n        ids: [item.id],\n        cart_id: cart && cart.id,\n        include: [\n          'photos',\n          'bundle_items',\n          'bundle_items.product',\n          'bundle_items.product.photo',\n          'bundle_items.product_group',\n          'bundle_items.product_group.products',\n          'bundle_items.product_group.photo',\n          'bundle_items.product_group.products',\n          'bundle_items.product_group.products.photo'\n        ].join(','),\n        apiVersion: 3\n      }).then(callback)\n    }\n  }\n\n  handleBook = () => {\n    const { book, clear, addButtonUsesCheckoutBehaviour, line, item, hasDates } = this.props\n    const { quantity, selectedProductId, configuration } = this.state\n\n    if (!hasDates && addButtonUsesCheckoutBehaviour) {\n      return clientActions.toggleModalPicker(true)\n    }\n\n    this.setState({ loading: true })\n\n    let promise\n\n    const itemId = selectedProductId || _get(this.selectedProduct, 'id') || item.id\n\n    if (addButtonUsesCheckoutBehaviour) {\n      promise = clear().then(() => book(itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour))\n    } else {\n      promise = book(itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour)\n    }\n\n    this.setState({ promise })\n  }\n\n  handleChangeQuantity = (e) => {\n    let { value } = e.target\n\n    if (value < 0) {\n      value = 1\n    }\n\n    return this.setState({ quantity: value })\n  }\n\n  handleChangeVariation = (e) => {\n    const id = e.target.value\n\n    this.props.onChangeProductId && this.props.onChangeProductId(id)\n\n    return this.setState({ selectedProductId: id })\n  }\n\n  setBundleConfiguration = (newBundleConfiguration) => {\n    this.setState({ configuration: { products: newBundleConfiguration } })\n  }\n\n  loadBundlePriceAndAvailability = () => {\n    const { cart, item } = this.props\n    const { configuration } = this.state\n\n    // Cart MUST be present. Otherwise we get wrong pricing displayed.\n    if (!cart) return\n\n    BundleActions.configurationAvailability({\n      id: item.id,\n      products: configuration.products,\n      cart_id: cart.id,\n      apiVersion: 3\n    }).then((response) => {\n      this.setState({\n        price_each_in_cents: _get(response, 'payload.response.data.configuration.price_each_in_cents'),\n        available_quantity: _get(response, 'payload.response.data.configuration.available_quantity')\n      })\n    })\n  }\n\n  renderAvailability = () => {\n    const {\n      useAvailability,\n      showProductAvailability,\n      availabilities,\n      showCounts,\n      hasDates,\n      item,\n      products,\n      productGroup,\n      bundle,\n      cart,\n      operatingRules,\n      t\n    } = this.props\n    const { configuration } = this.state\n\n    if (!useAvailability) return null\n\n    let available\n    const product = products && this.selectedProduct\n\n    const withProductAvailability =\n      useAvailability &&\n      showProductAvailability &&\n      ['bulk', 'trackable', 'mixed'].includes(item.tracking_type)\n\n    if (typeof this.state.available_quantity === 'number') {\n      available = this.state.available_quantity\n    } else {\n      available = (product || item || productGroup || bundle)?.available_quantity\n    }\n\n    return (\n      <Fragment>\n        {hasDates && available !== null && (\n          <ReactCSSTransitionGroup transitionName=\"fade\" transitionEnterTimeout={100} transitionLeaveTimeout={100}>\n            {available > 0 && showCounts && (\n              <span className=\"bq-branded bq-status bq-available\">\n                {!_get(productGroup, 'has_variations') && (\n                  <span className=\"bq-status-quantity\">\n                    {available}\n                    {' '}\n                  </span>\n                )}\n                {t('user.store.available')}\n              </span>\n            )}\n            {available <= 0 && available !== -1 && (\n              <span className=\"bq-status bq-unavailable\">\n                <span>{_capitalize(t('user.store.unavailable'))}</span>\n              </span>\n            )}\n            {(available === -1 ||\n              (!showCounts && available > 0)) && (\n              <span className=\"bq-branded bq-status bq-available\">\n                <span>{_capitalize(t('user.store.available'))}</span>\n              </span>\n            )}\n          </ReactCSSTransitionGroup>\n        )}\n        {withProductAvailability && (\n          <ProductAvailabilityCalendar\n            currentMonth={cart?.starts_at ? new Date(cart?.starts_at) : new Date()}\n            availabilities={availabilities.getAll({ item_id: product?.id || item?.id })}\n            defaultLocationId={cart?.start_location_id}\n            id={product?.id || item?.id}\n            productConfiguration={configuration}\n            useBusinessHours\n            operatingRules={operatingRules}\n            showCounts={showCounts}\n            selected={{ from: cart?.starts_at, to: cart?.stops_at }}\n          />\n        )}\n      </Fragment>\n    )\n  }\n\n  renderSelectVariation = () => {\n    const { useAvailability, showCounts, hasDates, products, productGroup, t } = this.props\n    const selectedProductId = this.state.selectedProductId || _get(this.selectedProduct, 'id')\n\n    return (\n      <div className=\"bq-variation-wrapper\">\n        <select\n          name=\"variation\"\n          className=\"bq-variation\"\n          onChange={this.handleChangeVariation}\n          value={selectedProductId}\n        >\n          {products.map((product) => {\n            const withAvailability =\n              useAvailability &&\n              hasDates &&\n              product.tracking_type !== 'none' &&\n              product.available_quantity !== null &&\n              showCounts\n\n            return (\n              <option key={product.id} value={product.id}>\n                {withAvailability ?\n                  `${product.name.replace(`${productGroup.name} - `, '')} (${\n                    product.available_quantity\n                  } ${t('user.store.available')})` :\n                  product.name.replace(`${productGroup.name} - `, '')}\n              </option>\n            )\n          })}\n        </select>\n        <Icon icon=\"angle-down\" />\n      </div>\n    )\n  }\n\n  render () {\n    const { item, productGroup, bundle, useAvailability, hasDates, addButtonUsesCheckoutBehaviour, t } = this.props\n    const { quantity, configuration, price_each_in_cents: priceEachInCents } = this.state\n    const selectedProduct = this.selectedProduct || bundle || item\n    const loading = this.props.loading || this.state.loading\n\n    let disabled = quantity <= 0 || _isNaN(quantity)\n\n    if (addButtonUsesCheckoutBehaviour && useAvailability && selectedProduct?.tracking_type !== 'none') {\n      disabled =\n        disabled ||\n        (hasDates && !selectedProduct?.available_quantity) ||\n        (hasDates && quantity > selectedProduct?.available_quantity)\n    }\n\n    return (\n      <div className=\"booqable-product-button-wrapper\" id={`booqable-product-button-${item && item.id}`}>\n        {bundle && (\n          <BundleItems\n            item={item}\n            useAvailability={useAvailability}\n            hasDates={hasDates}\n            configuration={configuration.products}\n            setBundleConfiguration={this.setBundleConfiguration}\n          />\n        )}\n        <div className=\"bq-actions\">\n          {_get(productGroup, 'has_variations') && this.renderSelectVariation()}\n          <ProductPrice\n            chargeLabel={selectedProduct.charge_label}\n            priceInCents={priceEachInCents || selectedProduct.price_each_in_cents}\n            priceType={selectedProduct.price_type}\n            productType={selectedProduct.product_type}\n            branded\n          />\n          {this.renderAvailability()}\n          <div className=\"bq-control\">\n            <InputField\n              field={{\n                value: quantity,\n                onChange: this.handleChangeQuantity,\n                name: 'quantity'\n              }}\n              type=\"number\"\n              size=\"sm\"\n              className=\"bq-quantity\"\n            />\n            <Spacer vertical size=\"xs\" />\n            <ReadOnlyModeDisabledComponent>\n              <Button\n                onClick={this.handleBook}\n                promise={this.state.promise}\n                size=\"sm\"\n                block\n                disabled={loading || disabled}\n                className={`bq-button ${disabled && 'bq-disabled'}`}\n              >\n                {addButtonUsesCheckoutBehaviour && (\n                  <Fragment>\n                    {hasDates && t('user.store.add_to_cart')}\n                    {!hasDates && t('user.store.select_a_period')}\n                  </Fragment>\n                )}\n                {!addButtonUsesCheckoutBehaviour && t('user.store.add_to_cart')}\n              </Button>\n            </ReadOnlyModeDisabledComponent>\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const productGroup = state.orm.product_groups.getById(props.item.id)\n\n  const hasDates = !!cart?.starts_at && !!cart?.stops_at\n\n  return {\n    cart,\n    productGroup,\n    operatingRules: getOperatingRules(state),\n    availabilities: state.orm.shop_availabilities,\n    useAvailability: state.settings.get('store.use_availability'),\n    showProductAvailability: state.settings.get('store.show_product_availability'),\n    bundle: state.orm.bundles.getById(props.item.id),\n    products: state.orm.products.getAll({ product_group_id: productGroup && productGroup.id }).sort('sorting_weight'),\n    showCounts: !state.settings.get('store.hide_product_availability_quantities'),\n    addButtonUsesCheckoutBehaviour: state.settings.get('store.behaviors.add_button') === 'checkout',\n    hasDates\n  }\n}\n\nconst mapDispatchToProps = () => {\n  return {\n    clear: () => {\n      return cartActions.clear({\n        apiVersion: 1\n      })\n    },\n    book: (itemId, line, quantity, configuration, addButtonUsesCheckoutBehaviour) => {\n      return cartActions.book({ item_id: itemId, quantity, configuration, apiVersion: 1 }).then(() => {\n        if (line) {\n          lineActions.addLineQtyUI(line, quantity)\n        }\n\n        const addToCart = () => {\n          quickviewActions.unsetItem()\n          clientActions.toggleCart(true)\n        }\n\n        const handleCheckout = () => {\n          quickviewActions.unsetItem()\n          clientActions.setCheckingOut()\n        }\n\n        const checkout = () =>\n          clientActions.evaluateCartOverdue() ? clientActions.toggleModalPicker(true) : handleCheckout()\n\n        const action = addButtonUsesCheckoutBehaviour ? checkout : addToCart\n\n        triggerUserFrameworkBookEvent(itemId, quantity)\n\n        return setTimeout(action, 150)\n      })\n    }\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(ProductButton)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport ProductButton from 'store/modules/product/components/ProductButton'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class Button extends React.Component {\n  static displayName = 'ProductButtonContainer'\n\n  render = () => {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <IdFinder {...Object.assign({}, this.props)} hideOnLoad>\n              <ProductButton />\n            </IdFinder>\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import styled, { css } from 'styled-components'\n\nimport { fontSize } from 'ui/themes/utils'\n\nexport const ProductImage = styled.div`\n  float: left;\n\n  width: 250px;\n\n  @media (max-width: 534px) {\n    width: 100%;\n    float: none;\n  }\n`\n\nexport const MainImage = styled.div`\n  max-height: 100%;\n  max-width: 100%;\n\n  width: 100%;\n  height: 100%;\n\n  position: absolute;\n  top: 0;\n  left: 0;\n\n  visibility: hidden;\n\n  ${({ visible }) => visible && css`\n    visibility: visible;\n  `}\n`\n\nexport const MainImageContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  width: 250px;\n  height: 250px;\n\n  position: relative;\n\n  cursor: zoom-in;\n\n  ${({ magnify }) => magnify && css`\n    cursor: zoom-out;\n  `}\n\n  ${({ canMagnify }) => !canMagnify && css`\n    cursor: default;\n  `}\n\n  @media (max-width: 534px) {\n    width: 100%;\n  }\n\n  @media (max-height: 550px) {\n    height: 200px;\n  }\n`\n\nexport const GalleryImages = styled.div`\n  position: absolute;\n\n  left: ${({ offset }) => offset || 0};\n  top: 0;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  transition: left 0.3s ease-in-out;\n`\n\nexport const GalleryImagesContainer = styled.div`\n  position: relative;\n  overflow: hidden;\n`\n\nexport const GalleryImageContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  margin-left: 5px !important;\n\n  overflow: hidden;\n\n  border: 1px solid transparent !important;\n\n  &:hover {\n    border: 1px solid ${({ brandingColor }) => brandingColor};\n    cursor: pointer;\n  }\n\n  ${({ selected }) => selected && css`\n    border: 1px solid ${({ brandingColor }) => brandingColor} !important;\n  `}\n`\n\nexport const GalleryImage = styled.img`\n  max-height: 100%;\n  max-width: 100%;\n`\n\nexport const Controls = styled.div`\n  font-size: ${fontSize('md')};\n\n  transition: opacity 0.3s ease-in-out;\n  cursor: pointer;\n\n  &:hover {\n    opacity: 0.6;\n  }\n\n  ${({ disabled }) => disabled && css`\n    opacity: 0.6;\n    cursor: initial;\n    pointer-events: none;\n  `}\n`\n\nexport const Gallery = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  margin-top: 10px !important;\n\n  ${({ size, offset }) => css`\n    ${GalleryImagesContainer} {\n      /* 5 = gap between images */\n      width: ${((size + 5) * 3) + 5}px;\n      height: ${size}px;\n    }\n\n    ${GalleryImageContainer} {\n      height: ${size}px;\n      width: ${size}px;\n    }\n\n    ${GalleryImages} {\n      left: -${offset * (size + 5)}px;\n    }\n  `}\n`\n","import {\n  ProductImage, MainImage, MainImageContainer,\n  Gallery, GalleryImage, GalleryImageContainer,\n  Controls, GalleryImages, GalleryImagesContainer\n} from './styles'\n\nProductImage.MainImage = MainImage\nProductImage.MainImageContainer = MainImageContainer\nProductImage.Gallery = Gallery\nProductImage.GalleryImage = GalleryImage\nProductImage.GalleryImageContainer = GalleryImageContainer\nProductImage.Controls = Controls\nProductImage.GalleryImages = GalleryImages\nProductImage.GalleryImagesContainer = GalleryImagesContainer\n\nexport default ProductImage\n","import styled from 'styled-components'\nimport { color, size } from 'ui/themes/utils'\n\nimport ReactInputPosition from 'react-input-position'\n\nexport const ImageMagnify = styled(ReactInputPosition)`\n  &&& {\n    position: relative;\n    overflow: hidden;\n\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    z-index: 10;\n    background-color: ${color('white')};\n  }\n`\n\nexport const ImageContainer = styled.div`\n  &&& {\n    display: inline-block;\n\n    padding: 2px;\n    padding-bottom: 0;\n\n    border: ${size('borderWidth')} solid ${color('Misc/Divider')};\n\n    z-index: 10;\n    background-color: ${color('white')};\n  }\n`\n\nexport const Image = styled.img`\n  &&& {\n    margin-bottom: -2px;\n  }\n`\n\nexport const Portal = styled.div`\n  &&& {\n    width: 100%;\n    height: 100%;\n\n    position: relative;\n    overflow: hidden;\n\n    background-image: url(${({ image }) => image});\n    background-repeat: no-repeat;\n    background-size: cover;\n\n    z-index: 1024;\n\n    transform: ${({ scale }) => `scale(${scale})`};\n  }\n`\n\nexport const PortalContainer = styled.div`\n  width: ${({ width }) => width}px;\n  height: ${({ height }) => height}px;\n\n  overflow: hidden;\n`\n\nexport const MagnifyContainer = styled.div`\n  position: absolute;\n  top: 30px;\n  left: 310px;\n\n  background-color: ${color('white')};\n  box-shadow: ${size('shadow', 'md')};\n`\n","import { ImageMagnify, ImageContainer, Image, Portal, PortalContainer, MagnifyContainer } from './styles'\n\nImageMagnify.ImageContainer = ImageContainer\nImageMagnify.Image = Image\nImageMagnify.Portal = Portal\nImageMagnify.PortalContainer = PortalContainer\nImageMagnify.MagnifyContainer = MagnifyContainer\n\nexport default ImageMagnify\n","// React\nimport React, { Fragment, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport PropTypes from 'prop-types'\n\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\n\nimport { interpolateNumber } from 'd3-interpolate'\n\nconst ImageRenderer = (props) => {\n  const originalRef = useRef(null)\n\n  const [originalDimensions, setOriginalDimensions] = useState(null)\n\n  const handleOriginalLoad = ({ target: img }) => {\n    setOriginalDimensions({ height: img.offsetHeight, width: img.offsetWidth })\n  }\n\n  const calculatePosition = (x, y) => {\n    const offset = 50 * props.scale\n\n    if (!originalRef || !originalRef.current) return '0 0'\n\n    const box = originalRef.current.getBoundingClientRect()\n    const { width, height } = box\n\n    const lo = (x / width) * 100\n    const wo = (y / height) * 100\n\n    const rx = `calc(${lo}% + ${interpolateNumber(offset, -offset)(lo / 100)}px)`\n    const ry = `calc(${wo}% + ${interpolateNumber(offset, -offset)(wo / 100)}px)`\n\n    return `${rx} ${ry}`\n  }\n\n  const imageIsVertical = originalDimensions && originalDimensions.height > (props.size || props.height)\n\n  return (\n    <Fragment>\n      <BImageMagnify.ImageContainer>\n        <BImageMagnify.Image\n          src={props.originalImage}\n          alt={props.imageAlt}\n          width={imageIsVertical ? 'auto' : props.size - 6 || props.width - 6}\n          height={imageIsVertical ? props.size - 6 || props.height - 6 : 'auto'}\n          ref={originalRef}\n          onLoad={handleOriginalLoad}\n        />\n      </BImageMagnify.ImageContainer>\n      {originalRef?.current &&\n        createPortal(\n          <BImageMagnify.PortalContainer width={props.zoomedSize || props.zoomedWidth || props.elementDimensions.width} height={props.zoomedSize || props.zoomedHeight || props.elementDimensions.height}>\n            <BImageMagnify.Portal\n              image={props.zoomedImage || props.originalImage}\n              scale={props.scale || 1.2}\n              style={{\n                backgroundPosition: calculatePosition(props.activePosition.x, props.activePosition.y)\n              }}\n            />\n          </BImageMagnify.PortalContainer>,\n          props.portalTarget || document.body\n        )}\n    </Fragment>\n  )\n}\n\nImageRenderer.propTypes = {\n  originalImage: PropTypes.string.isRequired,\n  zoomedImage: PropTypes.string,\n  imageAlt: PropTypes.string,\n  size: PropTypes.number,\n  width: PropTypes.number,\n  height: PropTypes.number,\n  zoomedSize: PropTypes.number,\n  zoomedWidth: PropTypes.number,\n  zoomedHeight: PropTypes.number,\n  elementDimensions: PropTypes.object,\n  portalTarget: PropTypes.any,\n  activePosition: PropTypes.object,\n  scale: PropTypes.number\n}\n\nexport default ImageRenderer\n","// React\nimport React from 'react'\n\n// Libraries\nimport {\n  MOUSE_ACTIVATION\n} from 'react-input-position'\n\n// Components\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\nimport ImageRenderer from './ImageRenderer'\n\nconst ImageMagnify = (props) => {\n  return (\n    <BImageMagnify\n      mouseActivationMethod={MOUSE_ACTIVATION.HOVER}\n      cursorStyle=\"zoom-in\"\n      cursorStyleActive=\"crosshair\"\n    >\n      <ImageRenderer {...props} />\n    </BImageMagnify>\n  )\n}\n\nexport default ImageMagnify\n","import styled, { css } from 'styled-components'\nimport { color, size } from 'ui/themes/utils'\n\nexport const ModalGallery = styled.div`\n  position: fixed;\n\n  top: 0;\n  left: 0;\n\n  background-color: ${color('white')};\n\n  width: 100vw;\n  height: 100vh;\n\n  z-index: 99999;\n`\n\nexport const Title = styled.h3`\n  text-align: center;\n\n  padding: ${size('padding', 'sm')} 0;\n\n  line-height: 25px;\n\n  width: 75%;\n  margin: 0 auto;\n\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n`\n\nexport const Wrapper = styled.div`\n  display: flex;\n  flex-flow: column nowrap;\n\n  position: relative;\n\n  height: 100%;\n`\n\nexport const ControlWrapper = styled.div`\n  display: inline-block;\n\n  padding: ${size('padding', 'sm')};\n\n  background-color: ${color('white')}80;\n`\n\nexport const Header = styled.div`\n  z-index: 1;\n\n  ${ControlWrapper} {\n    position: absolute;\n    top: 0;\n    left: 0;\n  }\n`\n\nexport const Body = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  padding: ${size('padding', 'sm')};\n\n  height: calc(100% - 125px);\n\n  position: relative;\n`\n\nexport const Footer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  position: absolute;\n  bottom: 0;\n  left: 0;\n\n  width: 100%;\n\n  padding-bottom: ${size('padding', 'sm')};\n`\n\nexport const Controls = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  position: absolute;\n  top: 50%;\n  left: 0;\n\n  width: 100%;\n\n  transform: translateY(-50%);\n`\n\nexport const GalleryImages = styled.div`\n  position: absolute;\n\n  left: ${({ offset }) => offset || 0};\n  top: 0;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  transition: left 0.3s ease-in-out;\n`\n\nexport const GalleryImagesContainer = styled.div`\n  position: relative;\n  overflow: hidden;\n`\n\nexport const Image = styled.img`\n  width: ${({ width }) => width};\n  height: ${({ height }) => height};\n  max-height: 400px;\n\n  @media (orientation: landscape) {\n    height: 100%;\n    width: auto;\n  }\n`\n\nexport const GalleryImageContainer = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  margin-left: ${size('margin', 'xs')} !important;\n\n  overflow: hidden;\n\n  border: ${size('borderWidth')} solid transparent !important;\n\n  &:hover {\n    border-color: ${({ brandingColor }) => brandingColor};\n    cursor: pointer;\n  }\n\n  ${({ selected }) =>\n    selected &&\n    css`\n      border-color: ${({ brandingColor }) => brandingColor} !important;\n    `}\n`\n\nexport const Gallery = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  ${({ size, offset }) => css`\n    ${GalleryImagesContainer} {\n      /* 5 = gap between images */\n      width: ${(size + 5) * 3 + 5}px;\n      height: ${size}px;\n    }\n\n    ${GalleryImageContainer} {\n      height: ${size}px;\n      width: ${size}px;\n    }\n\n    ${GalleryImages} {\n      left: -${offset * (size * 0.85)}px;\n    }\n  `}\n`\n","import {\n  ModalGallery,\n  Wrapper,\n  Body,\n  Header,\n  ControlWrapper,\n  Controls,\n  Footer,\n  Gallery,\n  GalleryImageContainer,\n  GalleryImagesContainer,\n  GalleryImages,\n  Title,\n  Image\n} from './styles'\n\nModalGallery.Wrapper = Wrapper\nModalGallery.Body = Body\nModalGallery.Header = Header\nModalGallery.ControlWrapper = ControlWrapper\nModalGallery.Controls = Controls\nModalGallery.Footer = Footer\nModalGallery.Gallery = Gallery\nModalGallery.GalleryImageContainer = GalleryImageContainer\nModalGallery.GalleryImagesContainer = GalleryImagesContainer\nModalGallery.GalleryImages = GalleryImages\nModalGallery.Title = Title\nModalGallery.Image = Image\n\nexport default ModalGallery\n","// React\nimport React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\n\n// Libraries\nimport _get from 'lodash/get'\n\n// Components\nimport BModalGallery from 'store/modules/product/blocks/ModalGallery'\nimport Icon from 'ui/components/Icon'\nimport FocalImage from 'ui/components/FocalImage'\n\nconst THUMBNAIL_SIZE = 60\n\nconst ModalGallery = (props) => {\n  const [swipe, setSwipe] = useState({})\n  const [swiping, setSwiping] = useState(false)\n  const [galleryOffset, setGalleryOffset] = useState(0)\n  const [dimensions, setDimensions] = useState(null)\n\n  useEffect(() => {\n    const photoIndex = props.photos.indexOf(props.selectedPhoto)\n\n    if (photoIndex <= -1) {\n      setGalleryOffset(0)\n    } else {\n      setGalleryOffset(Math.min(photoIndex, getMaximumOffset()))\n    }\n  }, [props.selectedPhoto])\n\n  const onTouchStart = (e) => {\n    const touch = e.touches[0]\n\n    setSwipe({ x: touch.clientX })\n  }\n\n  const onTouchMove = (e) => {\n    if (e.changedTouches && e.changedTouches.length) {\n      setSwiping(true)\n    }\n  }\n\n  const onTouchEnd = (e) => {\n    const touch = e.changedTouches[0]\n    const x = touch.clientX - swipe.x\n\n    if (swiping && x > 50) {\n      props.handlePhotoSelect && props.handlePhotoSelect(-1)\n    } else if (swiping && x < 50) {\n      props.handlePhotoSelect && props.handlePhotoSelect(1)\n    }\n\n    setSwiping(false)\n  }\n\n  const onImageLoad = ({ target: img }) => {\n    setDimensions({ height: img.offsetHeight, width: img.offsetWidth })\n  }\n\n  const getMaximumOffset = () => {\n    return Math.max(props.photos.length - 1, 0)\n  }\n\n  const handleImagesForward = () => {\n    if (galleryOffset + 1 > getMaximumOffset()) return null\n\n    setGalleryOffset(galleryOffset + 1)\n  }\n\n  const handleImagesBackward = () => {\n    if (galleryOffset - 1 < 0) return null\n\n    setGalleryOffset(galleryOffset - 1)\n  }\n\n  const showGallery = props.photos.length > 0\n  const showControls = props.photos.length > 1\n\n  const imageIsVertical = dimensions && (dimensions.height / dimensions.width) > 1\n\n  return createPortal(\n    <BModalGallery>\n      <BModalGallery.Wrapper>\n        <BModalGallery.Header>\n          <BModalGallery.ControlWrapper onTouchEnd={props.onClose}>\n            <Icon icon=\"arrow-left\" />\n          </BModalGallery.ControlWrapper>\n          <BModalGallery.Title>{props.itemTitle}</BModalGallery.Title>\n        </BModalGallery.Header>\n        <BModalGallery.Body\n          onTouchStart={onTouchStart}\n          onTouchMove={onTouchMove}\n          onTouchEnd={onTouchEnd}\n        >\n          <BModalGallery.Image\n            src={props.selectedPhoto.large_url}\n            onLoad={onImageLoad}\n            width={imageIsVertical ? 'auto' : '100%'}\n            height={imageIsVertical ? '100%' : 'auto'}\n          />\n          {showControls && (\n            <BModalGallery.Controls>\n              <BModalGallery.ControlWrapper\n                onTouchStart={() => {\n                  props.handlePhotoSelect(-1)\n                  handleImagesBackward()\n                }}\n              >\n                <Icon icon=\"chevron-left\" />\n              </BModalGallery.ControlWrapper>\n              <BModalGallery.ControlWrapper\n                onTouchStart={() => {\n                  props.handlePhotoSelect(1)\n                  handleImagesForward()\n                }}\n              >\n                <Icon icon=\"chevron-right\" />\n              </BModalGallery.ControlWrapper>\n            </BModalGallery.Controls>\n          )}\n        </BModalGallery.Body>\n        <BModalGallery.Footer>\n          {showGallery && (\n            <BModalGallery.Gallery size={THUMBNAIL_SIZE} offset={galleryOffset}>\n              <BModalGallery.GalleryImagesContainer>\n                <BModalGallery.GalleryImages>\n                  {props.photos.map((photo) => (\n                    <BModalGallery.GalleryImageContainer\n                      key={photo.id}\n                      selected={\n                        props.selectedPhoto &&\n                        props.selectedPhoto.id === photo.id\n                      }\n                      brandingColor={props.brandingColor}\n                      onTouchEnd={() => props.onThumbnailPress(photo)}\n                    >\n                      <FocalImage\n                        url={photo.large_url}\n                        preview={_get(photo, 'preview')}\n                        coordinates={photo.coordinates}\n                        size={`${THUMBNAIL_SIZE}px`}\n                        noBorder\n                        noBorderRadius\n                      />\n                    </BModalGallery.GalleryImageContainer>\n                  ))}\n                </BModalGallery.GalleryImages>\n              </BModalGallery.GalleryImagesContainer>\n            </BModalGallery.Gallery>\n          )}\n        </BModalGallery.Footer>\n      </BModalGallery.Wrapper>\n    </BModalGallery>,\n    document.body\n  )\n}\n\nexport default ModalGallery\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport _get from 'lodash/get'\nimport _find from 'lodash/find'\nimport _findIndex from 'lodash/findIndex'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport Icon from 'ui/components/Icon'\nimport BProductImage from 'store/modules/product/blocks/ProductImage'\nimport ImageMagnify from 'store/modules/product/components/ImageMagnify'\nimport ModalGallery from 'store/modules/product/components/ModalGallery'\n\n// Shared\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nconst THUMBNAIL_SIZE = 60\n\nexport class ProductImage extends Component {\n  static displayName = 'ProductImage'\n\n  static propTypes = {\n    defaultPhoto: PropTypes.object,\n    // Show this photo\n    photoId: PropTypes.string,\n    brandingColor: PropTypes.string,\n    portalTarget: PropTypes.instanceOf(Element),\n    itemTitle: PropTypes.any,\n    alt: PropTypes.string,\n    isMobile: PropTypes.bool\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      selectedPhoto: null,\n      galleryOffset: 0,\n      magnify: false,\n      showGallery: false,\n      hideFocalImages: false\n    }\n  }\n\n  componentDidMount = () => {\n    this.componentDidUpdate({})\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { defaultPhoto, photoId } = this.props\n\n    if (photoId !== prevProps.photoId) {\n      let newSelectedPhoto\n\n      if (photoId) {\n        newSelectedPhoto = _find([defaultPhoto, ...this.photos], { id: photoId })\n      } else {\n        newSelectedPhoto = defaultPhoto\n      }\n\n      const newState = { selectedPhoto: newSelectedPhoto }\n\n      // Makes sure we update the gallery offset if needed\n      const photoIndex = this.photos.indexOf(newSelectedPhoto)\n\n      if (photoIndex <= -1) {\n        newState.galleryOffset = 0\n      } else {\n        newState.galleryOffset = Math.min(photoIndex, this.maximumOffset)\n      }\n\n      this.setState(newState)\n    }\n  }\n\n  get maximumOffset () {\n    // Displaying 3 images at a time the default product group\n    // image + 2 album_photos so maximumOffset is how many images\n    // over these 3\n    return Math.max(this.photos.length - 2, 0)\n  }\n\n  get photos () {\n    return _get(this.props, 'albumPhotos', [])\n  }\n\n  handleChangeImage = (photo) => {\n    this.setState({ selectedPhoto: photo, magnify: false, hideFocalImages: false })\n  }\n\n  handleImagesForward = () => {\n    const { galleryOffset } = this.state\n\n    if (galleryOffset + 1 > this.maximumOffset) return null\n\n    this.setState({ galleryOffset: galleryOffset + 1 })\n  }\n\n  handleImagesBackward = () => {\n    const { galleryOffset } = this.state\n\n    if (galleryOffset - 1 < 0) return null\n\n    this.setState({ galleryOffset: galleryOffset - 1 })\n  }\n\n  handleClick = () => {\n    const { magnify, hideFocalImages } = this.state\n    const { defaultPhoto } = this.props\n\n    const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n    if (canMagnify) {\n      this.setState({ magnify: !magnify, hideFocalImages: !hideFocalImages })\n    }\n  }\n\n  handleTouch = () => {\n    const { defaultPhoto } = this.props\n\n    const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n    if (canMagnify) {\n      this.setState({ showGallery: true })\n    }\n  }\n\n  handleGalleryClose = (e) => {\n    e.preventDefault()\n\n    this.setState({ showGallery: false })\n  }\n\n  handleThumbnailPress = (selectedPhoto) => {\n    this.setState({ selectedPhoto })\n  }\n\n  handlePhotoSelect = (direction) => {\n    const { selectedPhoto } = this.state\n    const { defaultPhoto } = this.props\n\n    const photosArray = [defaultPhoto, ...this.photos]\n\n    const selectedPhotoURL = (selectedPhoto && selectedPhoto.large_url) || (defaultPhoto && defaultPhoto.large_url)\n\n    const currentIndex = _findIndex(photosArray, { large_url: selectedPhotoURL })\n\n    if (direction === -1 && currentIndex === 0) return\n\n    if (direction === 1 && currentIndex === photosArray.length - 1) return\n\n    const newSelectedPhoto = photosArray[currentIndex + direction]\n\n    this.setState({ selectedPhoto: newSelectedPhoto })\n  }\n\n  render () {\n    const { selectedPhoto, galleryOffset, magnify, showGallery: showMobileGallery, hideFocalImages } = this.state\n    const { defaultPhoto, brandingColor, portalTarget, itemTitle, alt, isMobile } = this.props\n\n    const selectedPhotoURL = (selectedPhoto && selectedPhoto.large_url) || (defaultPhoto && defaultPhoto.large_url)\n    const selectedLargePhotoURL = (selectedPhoto && selectedPhoto.xlarge_url) || (defaultPhoto && defaultPhoto.xlarge_url)\n\n    const showGallery = this.photos.length > 0\n    const showControls = this.photos.length > 2\n\n    const canMagnify = [defaultPhoto, ...this.photos][0] !== undefined\n\n    return (\n      <BProductImage>\n        <BProductImage.MainImageContainer\n          data-tid=\"Main image\"\n          onClick={isMobile ? this.handleTouch : this.handleClick}\n          magnify={magnify}\n          canMagnify={canMagnify}\n        >\n          {[defaultPhoto, ...this.photos].map((photo, index) => (\n            <BProductImage.MainImage visible={!hideFocalImages && selectedPhotoURL === photo?.large_url} key={photo?.id || `no_photo_${index}`}>\n              <FocalImage\n                url={photo?.large_url || NO_PRODUCT_IMAGE}\n                preview={photo?.preview}\n                coordinates={photo?.coordinates || { x: 0, y: 0 }}\n                size=\"100%\"\n                alt={alt}\n                noBorder\n                noBorderRadius\n              />\n            </BProductImage.MainImage>\n          ))}\n          {canMagnify && magnify && !isMobile && (\n            <ImageMagnify\n              originalImage={selectedPhotoURL}\n              zoomedImage={selectedLargePhotoURL}\n              portalTarget={portalTarget}\n              size={250}\n              zoomedSize={350}\n              scale={2}\n            />\n          )}\n          {showMobileGallery && isMobile && (\n            <ModalGallery\n              selectedPhoto={selectedPhoto || defaultPhoto}\n              photos={[defaultPhoto, ...this.photos]}\n              onClose={this.handleGalleryClose}\n              handlePhotoSelect={this.handlePhotoSelect}\n              brandingColor={brandingColor}\n              itemTitle={itemTitle}\n              onThumbnailPress={this.handleThumbnailPress}\n            />\n          )}\n        </BProductImage.MainImageContainer>\n        {showGallery && (\n          <BProductImage.Gallery size={THUMBNAIL_SIZE} offset={galleryOffset}>\n            {showControls && (\n              <BProductImage.Controls onClick={this.handleImagesBackward} disabled={galleryOffset <= 0}>\n                <Icon icon=\"chevron-left\" />\n              </BProductImage.Controls>\n            )}\n            <BProductImage.GalleryImagesContainer>\n              <BProductImage.GalleryImages data-tid=\"Product image gallery\">\n                {[defaultPhoto, ...this.photos].map((photo) => (\n                  <BProductImage.GalleryImageContainer\n                    key={photo.id}\n                    onClick={this.handleChangeImage.bind(null, photo)}\n                    selected={selectedPhoto && selectedPhoto.id === photo.id}\n                    brandingColor={brandingColor}\n                  >\n                    <FocalImage\n                      url={photo.large_url}\n                      preview={_get(photo, 'preview')}\n                      coordinates={photo.coordinates}\n                      size={`${THUMBNAIL_SIZE}px`}\n                      noBorder\n                      noBorderRadius\n                    />\n                  </BProductImage.GalleryImageContainer>\n                ))}\n              </BProductImage.GalleryImages>\n            </BProductImage.GalleryImagesContainer>\n            {showControls && (\n              <BProductImage.Controls onClick={this.handleImagesForward} disabled={galleryOffset >= this.maximumOffset}>\n                <Icon icon=\"chevron-right\" />\n              </BProductImage.Controls>\n            )}\n          </BProductImage.Gallery>\n        )}\n      </BProductImage>\n    )\n  }\n}\n\nconst ProductImageWrapper = (props) => {\n  const isMobile = useIsMobile()\n\n  return <ProductImage {...props} isMobile={isMobile} />\n}\n\nconst mapStateToProps = (state, props) => {\n  const photos = state.orm.photos\n    .getAll({ owner_id: props.ownerId })\n    .sort('position')\n    .toArray()\n\n  const defaultPhoto = photos && photos[0]\n  const albumPhotos = photos && photos.slice(1)\n\n  return {\n    brandingColor: state.settings.get('store.brand_color'),\n    defaultPhoto,\n    albumPhotos\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(ProductImageWrapper)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport uiConnect from 'shared/redux/interface'\nimport { compose } from 'redux'\n\n// Libraries\n\n// Components\nimport ProductButton from 'store/modules/product/components/ProductButton'\nimport ProductImage from 'store/modules/product/components/ProductImage'\nimport BImageMagnify from 'store/modules/product/blocks/ImageMagnify'\n\n// Shared\nimport { triggerUserFrameworkViewProductEvent } from 'shared/utils/userFrameworkEvents'\nimport productSelectors from 'store/v2/redux/selectors/product'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nclass ProductDetail extends Component {\n  static displayName = 'ProductDetail'\n\n  static propTypes = {\n    onChangeProductId: PropTypes.func,\n    item: PropTypes.object,\n    product: PropTypes.object,\n    bundleItems: PropTypes.any,\n    selectedProductId: PropTypes.string,\n    ui: PropTypes.object,\n    cart: PropTypes.object\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      triggeredTracking: false,\n      hovered: false,\n      loading: false\n    }\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { product, bundleItems } = this.props\n\n    // On mount window.Booqable.data is not set yet. By keeping track of whether this is triggered,\n    // we can use the data in reporting events. In this event we also include Bundle data.\n    if (product && !this.state.triggeredTracking) {\n      const isBundle = product.type === 'Bundle'\n\n      if (isBundle && !bundleItems) return\n\n      this.setState({ triggeredTracking: true })\n\n      triggerUserFrameworkViewProductEvent(product, isBundle && bundleItems)\n    }\n\n    if (this.props.ui?.selectedProductId && this.props.ui?.selectedProductId !== prevProps.ui?.selectedProductId) {\n      triggerUserFrameworkViewProductEvent(product)\n    }\n  }\n\n  componentDidMount = () => {\n    const { product, item } = this.props\n    const productDataFresh =\n      product?.price_each_in_cents === item?.price_each_in_cents &&\n      product?.charge_label === item?.charge_label &&\n      product?.available_quantity === item?.available_quantity\n\n    if (productDataFresh || window.bqFetchingDetailProducts) return\n\n    this.fetchData()\n  }\n\n  fetchData = () => {\n    const { item, cart } = this.props\n\n    this.setState({ loading: true })\n\n    const callback = () => this.setState({ loading: false })\n\n    if (item.type === 'ProductGroup') {\n      return ProductGroupActions.fetchAll({\n        ids: [item.id],\n        cart_id: cart && cart.id,\n        include: 'photos,products',\n        apiVersion: 3\n      }).then(callback)\n    } else if (item.type === 'Bundle') {\n      return BundleActions.fetchAll({\n        ids: [item.id],\n        cart_id: cart && cart.id,\n        include: [\n          'photos', 'bundle_items', 'bundle_items.product', 'bundle_items.product.photo',\n          'bundle_items.product_group', 'bundle_items.product_group.products',\n          'bundle_items.product_group.photo', 'bundle_items.product_group.products',\n          'bundle_items.product_group.products.photo'\n        ].join(','),\n        apiVersion: 3\n      }).then(callback)\n    }\n  }\n\n  render = () => {\n    const { item } = this.props\n    const { loading } = this.state\n\n    return (\n      <div className=\"booqable-product-detail-wrapper\" data-tid=\"Product detail\">\n        <ProductImage alt={this.props.product?.name} ownerId={item.id} itemTitle={item.name || null} photoId={this.props.product && this.props.product.photo_id} portalTarget={this.magnifyRef || null} />\n        <div className=\"bq-content\">\n          <h3 className=\"bq-product-name\">\n            {item && item.name}\n          </h3>\n          {item &&\n            (\n              <ProductButton\n                uiKey={item.id}\n                item={item}\n                onChangeProductId={this.props.onChangeProductId}\n                loading={loading}\n              />\n            )}\n          {item && item.description &&\n            <div className=\"bq-product-description rx-reset rx-content\" dangerouslySetInnerHTML={{ __html: item.description }} />}\n          <BImageMagnify.MagnifyContainer ref={(ref) => this.magnifyRef = ref} />\n        </div>\n      </div>\n    )\n  }\n}\n\nconst uiToProps = {\n  state: {\n    selectedProductId: null\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const item = props.item || state.orm.items.getById(props.itemId)\n  const selectedProduct = productSelectors.selectedForProductGroup(\n    state.orm.products.sort('sorting_weight'),\n    props.ui != null ? props.ui.selectedProductId : undefined,\n    item.id\n  )\n  const bundle = item.type === 'Bundle' && state.orm.bundles.getById(item.id)\n  const bundleItems = bundle && state.orm.bundle_items.getById(bundle.bundle_items)\n\n  return {\n    item,\n    translations: state.client.get('translations').toJS(),\n    product: selectedProduct,\n    cart: state.orm.carts.getById(state.client.cartId),\n    bundle,\n    bundleItems\n  }\n}\n\nconst mapDispatchToProp = (_, props) => {\n  return {\n    onChangeProductId (id) {\n      return props.updateUI({ selectedProductId: id })\n    }\n  }\n}\n\nexport default compose(\n  uiConnect('ProductDetail', uiToProps),\n  reduxConnect(mapStateToProps, mapDispatchToProp)\n)(ProductDetail)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport IdFinder from '../id_finder'\nimport ProductDetail from '../components/product_detail'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class Detail extends React.Component {\n  static displayName = 'ProductDetailContainer'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component booqable-component-product-detail\" style={{ display: 'none' }}>\n            <IdFinder {...Object.assign({}, this.props)} hideOnLoad>\n              <ProductDetail />\n            </IdFinder>\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport uiConnect from 'shared/redux/interface'\nimport { connect as reduxConnect, Provider } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport ProductDetail from '../components/product_detail'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nclass QuickviewInner extends React.Component {\n  static displayName = 'QuickviewInner'\n\n  static propTypes = {\n    item: PropTypes.any,\n    itemId: PropTypes.string,\n    closeWrapper: PropTypes.func,\n    close: PropTypes.func\n  }\n\n  render () {\n    const { itemId, item, closeWrapper, close } = this.props\n\n    return (\n      <div className=\"booqable-component\" style={{ display: 'none' }}>\n        <div\n          id=\"booqable-quickview-wrapper\"\n          className={item ? 'open' : 'closed'}\n          key={`booqable-quickview-${item?.id}`}\n          onClick={closeWrapper}\n        >\n          <div id=\"booqable-quickview-inner\">\n            <button className=\"bq-close\" onClick={close}>\n              <i className=\"bq-icon-cross fas fa-times\" />\n            </button>\n            {itemId && <ProductDetail uiKey={itemId} itemId={itemId} />}\n          </div>\n        </div>\n      </div>\n    )\n  }\n}\n\nconst uiToProps = {\n  state: {\n    itemId: null\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const itemId = props.ui.itemId\n\n  return {\n    itemId,\n    item: state.orm.items.getById(itemId)\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  const close = () => props.updateUI({ itemId: null })\n\n  return {\n    closeWrapper: (e) => {\n      if (e.target.id === 'booqable-quickview-wrapper') {\n        return close()\n      }\n    },\n    close\n  }\n}\n\nconst QuickviewInnerComposed = compose(\n  uiConnect('Quickview', uiToProps),\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(QuickviewInner)\n\nexport default class Quickview extends React.Component {\n  static displayName = 'Quickview'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <QuickviewInnerComposed uiKey=\"\" />\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\nimport ProductSearch from '../components/product_search'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class ProductSearchContainer extends React.Component {\n  static displayName = 'ProductSearchContainer'\n\n  static propTypes = {\n    searchKey: PropTypes.string\n  }\n\n  render = () => {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <ProductSearch {...this.props} filterKey={this.props.searchKey} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import styled, { css } from 'styled-components'\n\nimport { transparentize } from 'ui/themes/utils'\n\nimport BPeriod from '../../blocks/Period'\n\nexport const DateTimeContainer = styled.div`\n  &:first-child {\n    border-radius: 3px 3px 0 3px;\n  }\n\n  &:nth-child(2) {\n    border-radius: 3px 3px 3px 0;\n  }\n\n  ${(props) => props.disabled || (props.active ?\n    css`\n      margin-bottom: -2px !important;\n\n      border-bottom: 2px solid !important;\n      ${(props) => props.brandingColor ? `border-color: ${props.brandingColor} !important` : ''};\n    ` :\n    css`\n      &:hover {\n        margin-bottom: -2px !important;\n\n        border-bottom: 2px solid !important;\n\n        ${(props) => props.brandingColor ? `border-color: ${transparentize(props.brandingColor, 0.5)} !important` : ''};\n      }\n    `)}\n`\n\nexport const Container = styled.div`\n  position: relative;\n\n  display: flex;\n\n  ${(props) => props.useAMPM ? 'min-width: 330px' : 'min-width: 270px'};\n\n  width: 100%;\n  min-height: 50px;\n\n  background: #FFFFFF;\n\n  border: 1px solid #E9EBED !important;\n  border-radius: 3px;\n\n  ${DateTimeContainer} {\n    width: 100%;\n\n    &:first-of-type ${BPeriod.Detail} {\n      border-right: 1px solid #E9EBED !important;\n    }\n\n    ${BPeriod.Detail} {\n      display: flex;\n      flex-flow: column nowrap;\n      justify-content: center;\n\n      padding: 10px;\n\n      width: 100%;\n      height: 100%;\n\n      cursor: pointer;\n    }\n  }\n\n  @media screen and (max-width: 320px) {\n    display: block;\n    min-width: 100%;\n\n    ${DateTimeContainer} {\n      &:first-child {\n        border-bottom: 1px solid #E9EBED !important;\n      }\n    }\n}\n`\n\nexport const Label = styled.div`\n  margin: 4px 0 !important;\n\n  font-weight: 500 !important;\n`\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\nimport BPeriod from '../../blocks/Period'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport quickviewActions from 'store/v2/redux/actions/quickview'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { isLocationInputEnabled } from 'ui/components/Picker/utils'\nimport useIsMobile from 'shared/utils/useIsMobile'\n\n// Styles\nimport { Container, DateTimeContainer } from './Base.styles'\n\nexport class SeparateDatePicker extends Component {\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      modalOpen: false,\n      loading: false\n    }\n  }\n\n  static displayName = 'SeparateDatePicker'\n\n  static propTypes = {\n    periodType: PropTypes.string,\n    useAMOrPM: PropTypes.bool,\n    locations: PropTypes.object,\n    cart: PropTypes.object,\n    timeFormat: PropTypes.string,\n    useTimes: PropTypes.bool,\n    brandingColor: PropTypes.string,\n    productId: PropTypes.string,\n    item: PropTypes.object,\n    isMobile: PropTypes.bool,\n    title: PropTypes.string,\n    t: PropTypes.func\n  }\n\n  componentDidMount = () => {\n    const { productId } = this.props\n\n    // Fetch item if id set\n    if (productId) {\n      this.setState({ loading: true })\n      ItemActions.fetchAll({\n        include: 'photo',\n        apiVersion: 3,\n        ids: [productId]\n      }).then(() => {\n        this.setState({ loading: false })\n      })\n    }\n  }\n\n  handleSave = () => {\n    const { item, productId } = this.props\n\n    if (!productId) return\n\n    if (!item) {\n      // Item not in state as we can't fetch products trough the item endpoint\n      // so it's a product and should be booked\n      CartActions.book({ item_id: productId, quantity: 1, apiVersion: 1 }).then(() => {\n        triggerUserFrameworkBookEvent(productId, 1)\n        // Implemented in PR#6092\n        ClientActions.setCheckingOut()\n      })\n    } else {\n      quickviewActions.setItem(productId)\n    }\n  }\n\n  handleClose = () => {\n    this.setState({ modalOpen: false })\n  }\n\n  handleOpenModal = () => {\n    this.setState({ modalOpen: true })\n  }\n\n  handleTouch = (e) => {\n    e.preventDefault()\n    this.handleOpenModal()\n  }\n\n  render () {\n    const {\n      useAMOrPM,\n      useTimes,\n      periodType,\n      brandingColor,\n      cart,\n      locations,\n      productId,\n      item,\n      title,\n      isMobile,\n      t\n    } = this.props\n\n    const {\n      modalOpen\n    } = this.state\n\n    const hasLocations = locations.size() > 1\n\n    return (\n      <Container\n        useAMPM={useAMOrPM}\n        brandingColor={brandingColor}\n      >\n        <DateTimeContainer\n          onClick={this.handleOpenModal}\n          onTouchEnd={this.handleTouch}\n          brandingColor={brandingColor}\n          className=\"from\"\n        >\n          {cart && cart.starts_at ?\n            (\n              <BPeriod.Detail>\n                {hasLocations && isLocationInputEnabled('start') && (\n                  <BPeriod.Location>\n                    {cart && cart.start_location_id ? locations.getById(cart.start_location_id).name : null}\n                  </BPeriod.Location>\n                )}\n                <BPeriod.DateTime>\n                  {`${Format.date(\n                    cart ? cart.starts_at : undefined,\n                    'MMM D[,] YYYY'\n                  )}${useTimes ?\n                    `, ${Format.date(\n                      cart ? cart.starts_at : undefined,\n                      this.props.timeFormat\n                    )}` :\n                    ''}`}\n                </BPeriod.DateTime>\n              </BPeriod.Detail>\n            ) :\n            (\n              <BPeriod.Detail>\n                <BPeriod.Placeholder>\n                  {t('user.store.start_date')}\n                </BPeriod.Placeholder>\n              </BPeriod.Detail>\n            )}\n        </DateTimeContainer>\n        <DateTimeContainer\n          onClick={this.handleOpenModal}\n          onTouchEnd={this.handleOpenModal}\n          disabled={['timeslot_fixed', 'timeslot_duration'].includes(periodType)}\n          brandingColor={brandingColor}\n          className=\"till\"\n        >\n          {cart && cart.stops_at ?\n            (\n              <BPeriod.Detail>\n                {hasLocations && isLocationInputEnabled('stop') && (\n                  <BPeriod.Location>\n                    {cart && cart.stop_location_id ? locations.getById(cart.stop_location_id).name : null}\n                  </BPeriod.Location>\n                )}\n                <BPeriod.DateTime>\n                  {`${Format.date(\n                    cart ? cart.stops_at : undefined,\n                    'MMM D[,] YYYY'\n                  )}${useTimes ?\n                    `, ${Format.date(\n                      cart ? cart.stops_at : undefined,\n                      this.props.timeFormat\n                    )}` :\n                    ''}`}\n                </BPeriod.DateTime>\n              </BPeriod.Detail>\n            ) :\n            (\n              <BPeriod.Detail>\n                <BPeriod.Placeholder>\n                  {t('user.store.stop_date')}\n                </BPeriod.Placeholder>\n              </BPeriod.Detail>\n            )}\n        </DateTimeContainer>\n        <ModalCartPicker\n          cart={cart}\n          onSave={this.handleSave}\n          open={modalOpen}\n          onClose={this.handleClose}\n          brandingColor={this.props.brandingColor}\n          direction={isMobile ? 'vertical' : 'horizontal'}\n          isMobile={isMobile}\n          title={item?.name || title}\n          productId={productId}\n          loading={this.state.loading}\n        />\n      </Container>\n    )\n  }\n}\n\nconst FunctionalSeparateDatePicker = (props) => {\n  const isMobile = useIsMobile()\n\n  return <SeparateDatePicker {...props} isMobile={isMobile} />\n}\n\nconst mapStateToProps = (state, props) => {\n  const useAMOrPM = state.settings.get('dates.use_am_pm')\n  const useTimes = state.settings.get('store.use_times')\n  const brandingColor = window.booqableOptions?.primaryColor ?? state.settings.get('store.brand_color')\n  const cart = state.orm.carts.getById(state.client.cartId)\n\n  let timeFormat = ''\n\n  if (useTimes) {\n    timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n  }\n\n  return {\n    cart,\n    useTimes,\n    item: state.orm.items.getById(props.productId),\n    brandingColor,\n    locations: state.orm.locations.getAll().sort('name'),\n    timeFormat\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(FunctionalSeparateDatePicker)\n\nexport default withTranslation('user')(reduxComponent)\n","import React from 'react'\nimport { Provider } from 'react-redux'\n\nimport SeparateDatePicker from '../components/separate_date_picker'\nimport Themed from 'store/v2/react/components/Themed'\n\nconst store = window.booqableStore\n\nexport default class SeparateDatePickerContainer extends React.Component {\n  static displayName = 'SeparateDatePicker'\n\n  render = () => {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <SeparateDatePicker {...this.props} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { Provider } from 'react-redux'\nimport Themed from 'store/v2/react/components/Themed'\n\nimport CollectionList from 'store/modules/product/components/CollectionList'\n\nconst store = window.booqableStore\n\nexport default class CollectionListContainer extends Component {\n  static displayName = 'CollectionListContainer'\n\n  static propTypes = {\n    searchKey: PropTypes.string\n  }\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <CollectionList {...this.props} filterKey={this.props.searchKey} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport { setFilterSortBy } from 'store/v2/redux/actions/filter'\n\nexport class SortingSelect extends Component {\n  static displayName = 'SortingSelect'\n\n  static propTypes = {\n    sortBy: PropTypes.string,\n    handleChangeSortBy: PropTypes.func,\n    showPrices: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  get options () {\n    const { showPrices, t } = this.props\n\n    let options = [\n      {\n        label: t('user.store.sorting_standard'),\n        value: 'null'\n      }\n    ]\n\n    if (showPrices) {\n      options.push(\n        {\n          label: t('user.store.sorting_price_ascending'),\n          value: 'price_each_in_cents'\n        },\n        {\n          label: t('user.store.sorting_price_descending'),\n          value: '-price_each_in_cents'\n        }\n      )\n    }\n\n    options.push({\n      label: t('user.store.sorting_newest'),\n      value: '-created_at'\n    })\n\n    return options\n  }\n\n  render () {\n    const { sortBy, handleChangeSortBy } = this.props\n\n    return (\n      <div className=\"select-container bq-sorting-select\">\n        <select\n          name=\"sort\"\n          className=\"bq-sort\"\n          onChange={handleChangeSortBy}\n          value={sortBy}\n        >\n          {this.options.map((option) => (\n            <option key={option.value} value={option.value}>\n              {option.label}\n            </option>\n          ))}\n        </select>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const filter = state.filter.get(props.filterKey || 'global')\n  const sortBy = (filter && filter.get('sort_by')) || undefined\n\n  return {\n    sortBy,\n    showPrices: state.settings.get('store.use_prices')\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n  return {\n    handleChangeSortBy: (event) => {\n      let value = event.target.value\n\n      if (value === 'null') {\n        value = null\n      }\n\n      setFilterSortBy(value, props.filterKey || 'global')\n    }\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(SortingSelect)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport { setFilterFilterBy } from 'store/v2/redux/actions/filter'\n\nexport class FilterSelect extends Component {\n  static displayName = 'FilterSelect'\n\n  static propTypes = {\n    filterBy: PropTypes.string,\n    handleChangeFilter: PropTypes.func,\n    useAvailability: PropTypes.bool\n  }\n\n  get options () {\n    const { useAvailability, t } = this.props\n    const options = [\n      {\n        label: t('user.store.filter_all'),\n        value: null\n      }\n    ]\n\n    if (useAvailability) {\n      options.push(\n        {\n          label: t('user.store.filter_available'),\n          value: 'available'\n        }\n      )\n    }\n\n    return options\n  }\n\n  render () {\n    const { filterBy, handleChangeFilter } = this.props\n\n    return (\n      <div className=\"select-container bq-filter-select\">\n        <select\n          name=\"filter\"\n          className=\"bq-filter\"\n          onChange={handleChangeFilter}\n          value={filterBy}\n        >\n          {this.options.map((option) => (\n            <option key={option.value} value={option.value}>\n              {option.label}\n            </option>\n          ))}\n        </select>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const filter = state.filter.get(props.filterKey || 'global')\n  const filterBy = (filter && filter.get('filter_by')) || undefined\n\n  return {\n    useAvailability: state.settings.get('store.use_availability'),\n    filterBy\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n  return {\n    handleChangeFilter: (event) => {\n      const value = event.target.value\n\n      setFilterFilterBy(value, props.filterKey || 'global')\n    }\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(FilterSelect)\n\nexport default withTranslation('user')(reduxComponent)\n\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport ProductSearch from '../components/product_search'\nimport SortingSelect from 'store/modules/product/components/SortingSelect'\nimport FilterSelect from 'store/modules/product/components/FilterSelect'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class FilterBar extends Component {\n  static displayName = 'FilterBar'\n\n  static propTypes = {\n    filterKey: PropTypes.string,\n    searchKey: PropTypes.string\n  }\n\n  static defaultProps = {\n    filterKey: 'global'\n  }\n\n  render () {\n    const filterKey = this.props.searchKey || this.props.filterKey\n\n    // TODO: Re-enable filterselect when availability filtering perfomance is improved\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <div className=\"booqable-filter-bar\">\n              <ProductSearch filterKey={filterKey} />\n              <SortingSelect filterKey={filterKey} />\n              {false && <FilterSelect filterKey={filterKey} />}\n            </div>\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport SortingSelect from 'store/modules/product/components/SortingSelect'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class SortingSelectContainer extends Component {\n  static displayName = 'SortingSelectContainer'\n\n  static propTypes = {\n    filterKey: PropTypes.string\n  }\n\n  static defaultProps = {\n    filterKey: 'global'\n  }\n\n  render () {\n    const { filterKey } = this.props\n\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <SortingSelect filterKey={filterKey} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport CartPicker from './Picker'\n\n// Shared\nimport { useCartPicker } from './hooks'\nimport { CartPickerProvider } from './Provider'\n\nconst CartPickerInner = (props) => {\n  const { cart, onSave, onChange } = useCartPicker()\n\n  const handleChange = (values) => {\n    onChange(values)\n    onSave(values)\n  }\n\n  return <CartPicker {...props} cart={cart} onChange={handleChange} inline={false} />\n}\n\nexport const InlineCartPicker = ({ cart, onSave, ...props }) => (\n  <CartPickerProvider cart={cart} onSave={onSave}>\n    <CartPickerInner {...props} />\n  </CartPickerProvider>\n)\n\nInlineCartPicker.propTypes = {\n  cart: PropTypes.object,\n  onSave: PropTypes.func\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport CollectionList from 'store/modules/product/components/CollectionList'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class Sidebar extends Component {\n  static displayName = 'Sidebar'\n\n  static propTypes = {\n    filterKey: PropTypes.string\n  }\n\n  static defaultProps = {\n    filterKey: 'global'\n  }\n\n  render () {\n    const { filterKey } = this.props\n\n    return (\n      <Provider store={store}>\n        <Themed>\n          <Fragment>\n            <InlineCartPicker />\n            <div className=\"booqable-component\">\n              <CollectionList horizontalRule filterKey={filterKey} />\n            </div>\n          </Fragment>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartLine extends Component {\n  static displayName = 'EmbeddableCartLine'\n\n  static propTypes = {\n    line: PropTypes.object,\n    currency: PropTypes.any,\n    photo: PropTypes.object,\n    useAvailability: PropTypes.bool,\n    showPrices: PropTypes.bool,\n    hideProductAvailabilityQuantities: PropTypes.bool,\n    hasDates: PropTypes.bool,\n    quantity: PropTypes.number,\n    deleting: PropTypes.bool,\n    onIncreaseQuantity: PropTypes.func,\n    onDecreaseQuantity: PropTypes.func,\n    onRemove: PropTypes.func,\n    onInputChange: PropTypes.func,\n    t: PropTypes.func\n  }\n\n  render () {\n    const {\n      line,\n      currency,\n      useAvailability,\n      showPrices,\n      hideProductAvailabilityQuantities,\n      hasDates,\n      quantity,\n      deleting,\n      onIncreaseQuantity,\n      onDecreaseQuantity,\n      onRemove,\n      onInputChange,\n      t\n    } = this.props\n\n    const available = line.available_quantity >= quantity\n    const statusClass = available ? 'bq-available' : 'bq-unavailable'\n    const titleClass = useAvailability ? 'bq-small' : 'bq-large'\n\n    if (line.product_type === 'service' || line.quantity === 0) {\n      return null\n    }\n\n    return (\n      <tr key={line.id} className=\"bq-cart-item\">\n        <td>\n          <div className=\"bq-product-photo\">\n            {line?.photo && (\n              <div>\n                <FocalImage\n                  size=\"40px\"\n                  preview={line.photo.preview}\n                  url={line.photo.large_url}\n                  coordinates={line.photo.coordinates}\n                  maintainAspect\n                />\n              </div>\n            )}\n            {!line?.photo && (\n              <span className=\"bq-no-photo\">\n                <i className=\"bq-no-photo bq-icon-image fas fa-image\" />\n              </span>\n            )}\n          </div>\n          <div className=\"bq-product-info\">\n            <div className={`bq-product-name ${titleClass}`}>{line.title}</div>\n            {hasDates && useAvailability && (\n              <span className={`bq-status-indicator ${statusClass}`}>\n                {!hideProductAvailabilityQuantities && (\n                  <Fragment>\n                    <span className=\"bq-status-quantity\">{line.available_quantity} </span>\n                    {t('user.store.available')}\n                  </Fragment>\n                )}\n                {hideProductAvailabilityQuantities && (\n                  t(available ? 'user.store.available' : 'user.store.unavailable')\n                )}\n              </span>\n            )}\n          </div>\n        </td>\n        <td>\n          <ReadOnlyModeDisabledComponent>\n            <div className={`bq-quantity ${deleting ? 'disabled' : 'enabled'}`}>\n              <button className=\"bq-quantity-toggle\" onClick={onDecreaseQuantity}>\n                <i className=\"far fa-minus\" />\n              </button>\n              <input\n                type=\"number\"\n                className=\"bq-quantity\"\n                name=\"quantity\"\n                id=\"quantity\"\n                value={quantity}\n                onChange={onInputChange}\n              />\n              <button className=\"bq-quantity-toggle\" onClick={onIncreaseQuantity}>\n                <i className=\"far fa-plus\" />\n              </button>\n            </div>\n          </ReadOnlyModeDisabledComponent>\n        </td>\n        <td className=\"bq-cart-total\">\n          {showPrices && line.display_price_in_cents > 0 && (\n            <span className=\"bq-price\">{Format.money(line.display_price_in_cents, currency)}</span>\n          )}\n        </td>\n        <td>\n          <ReadOnlyModeDisabledComponent>\n            <button className=\"bq-remove-product\" onClick={deleting ? undefined : onRemove}>\n              <i className=\"bq-icon-cross fas fa-times\" />\n            </button>\n          </ReadOnlyModeDisabledComponent>\n        </td>\n      </tr>\n    )\n  }\n}\n\nconst mapStateToProps = (state) => ({ hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities') })\n\nconst EnhancedEmbeddableCartLine = compose(\n  withTranslation('user'),\n  connect(mapStateToProps)\n)(EmbeddableCartLine)\n\nexport default EnhancedEmbeddableCartLine\n","// React\nimport { Component, createElement } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\n\n// Shared\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport cartActions from 'store/v2/redux/actions/cart'\n\nexport class EmbeddableCartLineContainer extends Component {\n  static displayName = 'EmbeddableCartLineContainer'\n\n  static propTypes = {\n    book: PropTypes.func,\n    line: PropTypes.object,\n    component: PropTypes.any.isRequired\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      quantity: props.line.quantity,\n      deleting: false\n    }\n  }\n\n  handleBook = (quantity) => {\n    if (quantity === 0) {\n      this.setState({ deleting: true })\n    }\n\n    if (quantity === -1) {\n      return\n    }\n\n    this.setState({ quantity })\n\n    this.props.book(quantity)\n  }\n\n  handleIncreaseQuantity = () => {\n    const { quantity } = this.state\n\n    this.handleBook(quantity + 1)\n  }\n\n  handleDecreaseQuantity = () => {\n    const { quantity } = this.state\n\n    this.handleBook(quantity - 1)\n  }\n\n  handleRemove = () => {\n    this.handleBook(0)\n  }\n\n  handleInputChange = ({ target }) => {\n    if (target.value) {\n      this.handleBook(target.value)\n    }\n  }\n\n  render () {\n    const { component, ...otherProps } = this.props\n    const { quantity, deleting } = this.state\n\n    return createElement(component, {\n      quantity,\n      deleting,\n      onIncreaseQuantity: this.handleIncreaseQuantity,\n      onDecreaseQuantity: this.handleDecreaseQuantity,\n      onRemove: this.handleRemove,\n      onInputChange: this.handleInputChange,\n      ...otherProps\n    })\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  return {\n    currency: state.client.currency.toJS(),\n    useAvailability: state.settings.get('store.use_availability') && props.line.tracking_type !== 'none',\n    showPrices: state.settings.get('store.use_prices'),\n    photo: props.line.product && state.orm.photos.getById(props.line.product.photo_id)\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, props) => {\n  return {\n    book: (quantity) => {\n      return cartActions.book({\n        item_id: props.line.item_id,\n        line_id: props.line.id,\n        quantity,\n        type: 'set',\n        apiVersion: 1\n      }).then((_response) => {\n        const quantityChange = quantity - props.line.quantity\n\n        triggerUserFrameworkBookEvent(props.line.item_id, quantityChange)\n      })\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(EmbeddableCartLineContainer)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\nimport LineContainer from './LineContainer'\n\n// Shared\n\nexport class EmbeddableCartLinesContainer extends Component {\n  static displayName = 'EmbeddableCartLinesContainer'\n\n  static propTypes = {\n    lines: PropTypes.object,\n    hasDates: PropTypes.bool,\n    component: PropTypes.any\n  }\n\n  render () {\n    const { lines, hasDates, component, t } = this.props\n\n    if (lines.size() <= 0) {\n      return <div className=\"bq-clean\">{t('user.store.cart_empty')}</div>\n    }\n\n    return lines.map((line) => <LineContainer component={component} key={line.id} line={line} hasDates={hasDates} />)\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const hasDates = !!(cart && cart.starts_at && cart.stops_at)\n  const lines = state.orm.lines.getAll({ id: cart != null ? cart.lines : undefined })\n\n  return {\n    lines,\n    hasDates\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartLinesContainer)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Component\nimport Line from './Line'\nimport LinesContainer from './LinesContainer'\n\nexport class EmbeddableCartLines extends Component {\n  static displayName = 'EmbeddableCartLines'\n\n  static propTypes = {\n    lines: PropTypes.object,\n    usePrices: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  render () {\n    const { lines, usePrices, t } = this.props\n\n    return (\n      <div className=\"booqable-component\" style={{ display: 'none' }}>\n        <div className=\"bq-cart-items\">\n          {lines.size() > 0 && (\n            <table>\n              <thead>\n                <tr>\n                  <td>{t('user.store.product')}</td>\n                  <td>{t('user.store.quantity')}</td>\n                  {usePrices && <td className=\"bq-cart-totals\">{t('user.cart.total')}</td>}\n                  <td />\n                </tr>\n              </thead>\n              <tbody>\n                <LinesContainer component={Line} />\n              </tbody>\n            </table>\n          )}\n          {lines.size() <= 0 &&\n            <div className=\"bq-clean\">{t('user.store.cart_empty')}</div>}\n        </div>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const lines = state.orm.lines.getAll({ id: cart != null ? cart.lines : undefined })\n  const usePrices = state.settings.get('store.use_prices')\n\n  return { lines, usePrices }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartLines)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartErrors extends Component {\n  static displayName = 'EmbeddableCartErrors'\n\n  static propTypes = {\n    hasDates: PropTypes.bool,\n    cannotCheckout: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  render () {\n    const { hasDates, cannotCheckout, t } = this.props\n\n    let errorText\n\n    if (hasDates && cannotCheckout) {\n      errorText = t('user.store.not_all_products_available')\n    }\n\n    if (!hasDates) {\n      errorText = t('user.store.select_a_period', 'Select a rental period')\n    }\n\n    if (!errorText) return null\n\n    return (\n      <div className=\"bq-cart-error\">\n        <i className=\"fas fa-exclamation-triangle\" />\n        <span>{errorText}</span>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const hasDates = !!(cart && cart.starts_at && cart.stops_at)\n  const useAvailability = state.settings.get('store.use_availability')\n\n  let cannotCheckout\n\n  // Check if we need to calculate if use can checkout\n  if (useAvailability) {\n    cannotCheckout =\n      state.orm.lines\n        .getAll({\n          id: cart != null ? cart.lines : undefined,\n          can_checkout: false\n        })\n        .size() > 0\n  } else {\n    cannotCheckout = false\n  }\n\n  return {\n    hasDates,\n    cannotCheckout\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartErrors)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Components\n\n// Shared\nimport Format from 'shared/utils/format'\n\nexport class EmbeddableCartTotals extends Component {\n  static displayName = 'EmbeddableCartTotals'\n\n  static propTypes = {\n    cart: PropTypes.object,\n    currency: PropTypes.any,\n    totalPriceAttribute: PropTypes.string,\n    t: PropTypes.func\n  }\n\n  render () {\n    const { cart, currency, totalPriceAttribute, t } = this.props\n\n    if (!cart || cart.lines.length < 1) return null\n\n    return (\n      <div className=\"bq-totals\">\n        <div className=\"bq-detail bq-strong\">\n          <span>{t('user.store.subtotal')}</span>\n          <span className=\"bq-amount\">\n            {Format.money(\n              cart != null ? cart.get(totalPriceAttribute) : undefined,\n              currency\n            )}\n          </span>\n        </div>\n\n        {(cart != null && cart.get('deposit_in_cents') !== 0) && (\n          <div className=\"bq-detail\">\n            <span>{t('user.store.security_deposit')}</span>\n            <span className=\"bq-amount\">\n              {Format.money(\n                cart != null ? cart.get('deposit_in_cents') : undefined,\n                currency\n              )}\n            </span>\n          </div>\n        )}\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, _props) => {\n  let totalPriceAttribute\n\n  if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n    totalPriceAttribute = 'grand_total_with_tax_in_cents'\n  } else {\n    totalPriceAttribute = 'grand_total_in_cents'\n  }\n\n  return {\n    currency: state.client.currency != null ? state.client.currency.toJS() : undefined,\n    totalPriceAttribute\n  }\n}\n\nconst reduxComponent = reduxConnect(mapStateToProps, null)(EmbeddableCartTotals)\n\nexport default withTranslation('user')(reduxComponent)\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Errors from './Errors'\nimport Totals from './Totals'\nimport Services from 'store/components/Services'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport ReadOnlyModeDisabledComponent from 'store/components/ReadOnlyModeDisabledComponent'\n\n// Shared\nimport clientActions from 'store/v2/redux/actions/client'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartSidebar extends Component {\n  static displayName = 'EmbeddableCartSidebar'\n\n  static propTypes = {\n    cart: PropTypes.object,\n    checkoutButtonValid: PropTypes.bool,\n    checkingOut: PropTypes.bool,\n    setCheckingOut: PropTypes.func,\n    usePrices: PropTypes.bool,\n    showContinueShopping: PropTypes.bool,\n    showDatePicker: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  static defaultProps = {\n    showContinueShopping: true,\n    showDatePicker: true\n  }\n\n  handleBack = (event) => {\n    window.history.back()\n    event?.preventDefault()\n  }\n\n  render () {\n    const {\n      cart,\n      checkoutButtonValid,\n      showDatePicker,\n      checkingOut,\n      setCheckingOut,\n      usePrices,\n      showContinueShopping,\n      t\n    } = this.props\n    const checkoutButtonClass = checkoutButtonValid ? 'bq-enabled' : 'bq-disabled'\n\n    return (\n      <div className=\"bq-cart-sidebar\">\n        {showDatePicker && <InlineCartPicker />}\n        <div className=\"booqable-component\" style={{ display: 'none' }}>\n          <Services cart={cart} />\n          {usePrices && cart && cart.lines.length > 0 && (\n            <Fragment>\n              <hr />\n              <Totals cart={cart} />\n            </Fragment>\n          )}\n          <hr />\n          <Errors />\n          {checkingOut && (\n            <div className=\"bq-loading-wrapper\">\n              <div className=\"bq-loader\" />\n            </div>\n          )}\n          {!checkingOut && (\n            <ReadOnlyModeDisabledComponent>\n              <button\n                onClick={setCheckingOut}\n                className={`bq-checkout-button bq-branded bq-button ${checkoutButtonClass}`}\n              >\n                {t('user.store.checkout')}\n              </button>\n            </ReadOnlyModeDisabledComponent>\n          )}\n          {showContinueShopping && (\n            <button onClick={this.handleBack} className=\"bq-checkout-button bq-back-button bq-button\">\n              {t('user.store.continue_shopping')}\n            </button>\n          )}\n        </div>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n\n  let cannotCheckout\n\n  const hasDates = !!(cart?.starts_at && cart?.stops_at)\n  const useAvailability = state.settings.get('store.use_availability')\n  const usePrices = state.settings.get('store.use_prices')\n\n  // Check if we need to calculate if use can checkout\n  if (useAvailability) {\n    cannotCheckout =\n      state.orm.lines\n        .getAll({\n          id: cart?.lines,\n          can_checkout: false\n        })\n        .size() > 0\n  } else {\n    cannotCheckout = false\n  }\n\n  const checkoutButtonValid = !!(\n    (Number(cart?.lines?.length || 0) > 0) &&\n    hasDates &&\n    !cannotCheckout &&\n    !state.client.cartOverdue\n  )\n\n  return {\n    cart,\n    checkingOut: state.client.checkingOut,\n    checkoutButtonValid,\n    usePrices,\n    showContinueShopping: props.continueShopping,\n    showDatePicker: props.datepicker\n  }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    setCheckingOut: (e) => {\n      e.preventDefault()\n\n      if (clientActions.evaluateCartOverdue()) return\n\n      clientActions.setCheckingOut()\n    }\n  }\n}\n\nexport default compose(\n  reduxConnect(mapStateToProps, mapDispatchToProps),\n  withTranslation('user')\n)(EmbeddableCartSidebar)\n","// React\nimport React, { Component, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nexport class EmbeddableCartMobileLine extends Component {\n  static displayName = 'EmbeddableCartMobileLine'\n\n  static propTypes = {\n    line: PropTypes.object,\n    currency: PropTypes.any,\n    photo: PropTypes.object,\n    useAvailability: PropTypes.bool,\n    showPrices: PropTypes.bool,\n    hideProductAvailabilityQuantities: PropTypes.bool,\n    hasDates: PropTypes.bool,\n    quantity: PropTypes.number,\n    deleting: PropTypes.bool,\n    onIncreaseQuantity: PropTypes.func,\n    onDecreaseQuantity: PropTypes.func,\n    onRemove: PropTypes.func,\n    onInputChange: PropTypes.func,\n    t: PropTypes.func\n  }\n\n  constructor (props) {\n    super(props)\n\n    this.state = {\n      quantity: props.line.quantity,\n      deleting: false\n    }\n  }\n\n  render () {\n    const {\n      line,\n      currency,\n      useAvailability,\n      showPrices,\n      hideProductAvailabilityQuantities,\n      hasDates,\n      quantity,\n      deleting,\n      onIncreaseQuantity,\n      onDecreaseQuantity,\n      onRemove,\n      onInputChange,\n      t\n    } = this.props\n\n    const available = line.available_quantity >= quantity\n    const statusClass = available ? 'bq-available' : 'bq-unavailable'\n\n    if (line.product_type === 'service' || line.quantity === 0) {\n      return null\n    }\n\n    return (\n      <div className=\"bq-cart-item--mobile\">\n        <div className=\"bq-product-photo\">\n          {line?.photo && (\n            <div>\n              <FocalImage\n                size=\"40px\"\n                preview={line.photo.preview}\n                url={line.photo.large_url}\n                coordinates={line.photo.coordinates}\n                maintainAspect\n              />\n            </div>\n          )}\n          {!line?.photo && (\n            <span className=\"bq-no-photo\">\n              <i className=\"bq-no-photo bq-icon-image fas fa-image\" />\n            </span>\n          )}\n        </div>\n        <div className=\"bq-product-info\">\n          <div className=\"bq-product-name\">{line.title}</div>\n          {hasDates && useAvailability && (\n            <span className={`bq-status-indicator ${statusClass}`}>\n              {!hideProductAvailabilityQuantities && (\n                <Fragment>\n                  <span className=\"bq-status-quantity\">{line.available_quantity} </span>\n                  {t('user.store.available')}\n                </Fragment>\n              )}\n              {hideProductAvailabilityQuantities &&\n                t(available ? 'user.store.available' : 'user.store.unavailable')}\n            </span>\n          )}\n          <div className={`bq-quantity ${deleting ? 'disabled' : 'enabled'}`}>\n            <button className=\"bq-quantity-toggle\" onClick={onDecreaseQuantity}>\n              <i className=\"far fa-minus\" />\n            </button>\n            <input\n              type=\"number\"\n              className=\"bq-quantity\"\n              name=\"quantity\"\n              id=\"quantity\"\n              value={quantity}\n              onChange={onInputChange}\n            />\n            <button className=\"bq-quantity-toggle\" onClick={onIncreaseQuantity}>\n              <i className=\"far fa-plus\" />\n            </button>\n          </div>\n        </div>\n        <div className=\"bq-line-total\">\n          <button className=\"bq-remove-product\" onClick={deleting ? undefined : onRemove}>\n            <i className=\"bq-icon-cross fas fa-times\" />\n          </button>\n          {showPrices && line.display_price_in_cents > 0 && (\n            <span className=\"bq-price\">{Format.money(line.display_price_in_cents, currency)}</span>\n          )}\n        </div>\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state) => ({ hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities') })\n\nconst EnhancedEmbeddableCartMobileLine = compose(\n  withTranslation('user'),\n  connect(mapStateToProps)\n)(EmbeddableCartMobileLine)\n\nexport default EnhancedEmbeddableCartMobileLine\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\n\n// Components\nimport LinesContainer from '../LinesContainer'\nimport Line from './Line'\n\n// Shared\n\nexport default class EmbeddableCartMobileLines extends Component {\n  static displayName = 'EmbeddableCartMobileLines'\n\n  render () {\n    return (\n      <div className=\"bq-cart-items bq-cart-items--mobile\">\n        <LinesContainer cleanstate component={Line} />\n      </div>\n    )\n  }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\n\n// Components\nimport Sidebar from '../Sidebar'\nimport { InlineCartPicker } from 'store/modules/cart/CartPicker/Inline'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\nimport Lines from './Lines'\nimport Spacer from 'ui/blocks/Spacer'\n\n// Shared\n\nexport class EmbeddableCartMobile extends Component {\n  static displayName = 'EmbeddableCartMobile'\n\n  static propTypes = {\n    showPoweredBy: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  render () {\n    const { showPoweredBy } = this.props\n\n    return (\n      <div className=\"bq-cart bq-cart--mobile\">\n        <InlineCartPicker />\n        <div className=\"booqable-component\" style={{ display: 'none' }}>\n          <hr />\n          <Lines />\n          <Sidebar datepicker={false} />\n          <Spacer size=\"md\" vertical />\n          {showPoweredBy && (\n            <div className=\"bq-poweredby\">\n              <PoweredBy logoWidth=\"16px\" />\n            </div>\n          )}\n        </div>\n      </div>\n    )\n  }\n}\n\nexport default EmbeddableCartMobile\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\nimport Lines from './Lines'\nimport Sidebar from './Sidebar'\nimport Mobile from './Mobile'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Shared\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\n\nclass EmbeddableCart extends Component {\n  static displayName = 'EmbeddableCart'\n\n  static propTypes = {\n    cart: PropTypes.object,\n    showPoweredBy: PropTypes.bool,\n    t: PropTypes.func\n  }\n\n  state = {\n    triggeredTracking: false,\n    renderMobileForDesktop: false\n  }\n\n  get isMobile () {\n    return /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||\n      this.state.renderMobileForDesktop\n  }\n\n  componentDidMount () {\n    window.addEventListener('resize', this.handleWindowResize)\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('resize', this.handleWindowResize)\n  }\n\n  componentDidUpdate = (prevProps) => {\n    const { cart } = this.props\n\n    if (cart !== prevProps.cart) {\n      setUserFrameworkCartData()\n    }\n\n    // On mount window.Booqable.data is not set yet. By keeping track of whether this is triggered,\n    // we can use the data in reporting events\n    if (window.Booqable.cartData && !this.state.triggeredTracking) {\n      this.setState({ triggeredTracking: true })\n\n      window.Booqable._trigger('viewCart')\n    }\n  }\n\n  handleWindowResize = () => {\n    const renderMobileForDesktop = window.innerWidth <= 991\n\n    if (renderMobileForDesktop !== this.state.renderMobileForDesktop) {\n      this.setState({ renderMobileForDesktop })\n    }\n  }\n\n  renderDesktop () {\n    const { showPoweredBy } = this.props\n\n    return (\n      <div className=\"bq-cart\">\n        <div className=\"row\">\n          <div className=\"col-lg-8 bq-cart__lines\">\n            <Lines />\n            {showPoweredBy && (\n              <div className=\"bq-poweredby\">\n                <PoweredBy logoWidth=\"16px\" />\n              </div>\n            )}\n          </div>\n          <div className=\"col-lg-4 bq-cart__sidebar\">\n            <Sidebar />\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  renderMobile () {\n    const { showPoweredBy } = this.props\n\n    return <Mobile showPoweredBy={showPoweredBy} />\n  }\n\n  render () {\n    return this.isMobile ? this.renderMobile() : this.renderDesktop()\n  }\n}\n\nconst mapStateToProps = (state) => {\n  const cart = state.orm.carts.first()\n\n  return {\n    cart,\n    showPoweredBy: state.settings.get('store.show_powered_by')\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(EmbeddableCart)\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCart from 'store/modules/cart/EmbeddableCart'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartContainer extends Component {\n  static displayName = 'EmbeddableCartContainer'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <EmbeddableCart />\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCartLines from 'store/modules/cart/EmbeddableCart/Lines'\nimport EmbeddableCartMobileLines from 'store/modules/cart/EmbeddableCart/Mobile/Lines'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartLinesContainer extends Component {\n  static displayName = 'EmbeddableCartLinesContainer'\n\n  static propTypes = {\n    compact: PropTypes.bool\n  }\n\n  render () {\n    const { compact } = this.props\n\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            {compact ?\n              <EmbeddableCartMobileLines /> :\n              <EmbeddableCartLines />}\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport EmbeddableCartSidebar from 'store/modules/cart/EmbeddableCart/Sidebar'\nimport Themed from 'store/v2/react/components/Themed'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class EmbeddableCartSidebarContainer extends Component {\n  static displayName = 'EmbeddableCartSidebarContainer'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <div className=\"booqable-component\" style={{ display: 'none' }}>\n            <EmbeddableCartSidebar datepicker={false} />\n          </div>\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","// React\nimport React, { useEffect, useCallback, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport FloatingCart from 'store/v2/react/scenes/cart/components/FloatingCart'\nimport Popover from 'ui/components/Popover'\nimport PortalWrapper from 'ui/components/PortalWrapper'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faShoppingCart as fasShoppingCart } from '@fortawesome/pro-solid-svg-icons'\nimport { faShoppingCart as farShoppingCart } from '@fortawesome/pro-regular-svg-icons'\nimport { faShoppingCart as falShoppingCart } from '@fortawesome/pro-light-svg-icons'\nimport { faShoppingCart as fatShoppingCart } from '@fortawesome/pro-thin-svg-icons'\n\nimport { StyleSheetManager } from 'styled-components'\n\n// Shared\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst getIcon = (style) => {\n  switch (style) {\n    case 'solid':\n      return fasShoppingCart\n    case 'regular':\n      return farShoppingCart\n    case 'light':\n      return falShoppingCart\n    case 'thin':\n      return fatShoppingCart\n    default:\n      return farShoppingCart\n  }\n}\n\nconst CartButton = ({ cart, iconStyle, itemCount, cartOpen, toggleCart, href }) => {\n  const isMobile = useIsMobile()\n\n  const icon = getIcon(iconStyle)\n\n  useEffect(() => {\n    setUserFrameworkCartData()\n  }, [cart])\n\n  const renderFloatingCart = useCallback(\n    (props) => (\n      <div className=\"booqable-component\">\n        <FloatingCart inPortal={!isMobile} href={href} {...props} />\n      </div>\n    ),\n    [isMobile, href]\n  )\n\n  const renderIcon = useCallback(\n    () => (\n      <StyleSheetManager shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n        <button onClick={toggleCart} className=\"bq-cart-button\" part=\"bq-cart-wrapper\">\n          <FontAwesomeIcon icon={icon} className=\"bq-icon-cart\" part=\"bq-icon-cart\" />\n          {itemCount > 0 && (\n            <span className=\"bq-cart-button__line-count bq-branded\" part=\"bq-cart-lines\">\n              {itemCount}\n            </span>\n          )}\n        </button>\n      </StyleSheetManager>\n    ),\n    [itemCount, icon, toggleCart]\n  )\n\n  if (isMobile) {\n    return (\n      <Fragment>\n        {renderIcon()}\n        <PortalWrapper open={cartOpen}>{renderFloatingCart()}</PortalWrapper>\n      </Fragment>\n    )\n  }\n\n  return (\n    <Popover\n      open={cartOpen}\n      onClose={toggleCart}\n      method=\"manual\"\n      direction=\"bottom-end\"\n      content={renderFloatingCart}\n      useContentWrapper={false}\n      zIndex={9999999}\n    >\n      {renderIcon()}\n    </Popover>\n  )\n}\n\nCartButton.propTypes = {\n  cart: PropTypes.object,\n  itemCount: PropTypes.number,\n  isMobile: PropTypes.bool,\n  toggleCart: PropTypes.func,\n  cartOpen: PropTypes.bool,\n  iconStyle: PropTypes.oneOf(['solid', 'regular', 'light', 'thin']),\n  href: PropTypes.string\n}\n\nCartButton.displayName = 'CartButton'\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const lines = state.orm.lines.getAll({\n    id: cart != null ? cart.lines : undefined,\n    product_type: ['consumable', 'rental', 'bundle']\n  })\n  const cartIsOpen = state.client.cartOpen\n\n  const hasDates = !!((cart != null ? cart.starts_at : undefined) && (cart != null ? cart.stops_at : undefined))\n\n  const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n  return {\n    cart,\n    itemCount,\n    hasDates,\n    cartOpen: state.client.cartOpen,\n    locations: state.orm.locations.getAll().sort('name'),\n    cartIsOpen\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    toggleCart: () => {\n      const state = window.booqableStore.getState()\n      const isOpen = state.client.cartOpen\n\n      return ClientActions.toggleCart(!isOpen)\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(CartButton)\n","// React\nimport React, { Component } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport CartPicker from 'store/modules/cart/FloatingCart/components/CartPicker'\nimport CartButtonComponent from 'store/modules/cart/CartButton'\n\nexport class CartButton extends Component {\n  static displayName = 'CartButton'\n\n  static propTypes = {\n    isShowCartBehavior: PropTypes.bool\n  }\n\n  render () {\n    const { isShowCartBehavior } = this.props\n\n    return (\n      <div className=\"booqable-component\" style={{ display: 'none' }}>\n        {isShowCartBehavior && <CartButtonComponent {...this.props} />}\n        <CartPicker />\n      </div>\n    )\n  }\n}\n\nconst mapStateToProps = (state, props) => {\n  const isShowCartBehavior = state.settings.get('store.behaviors.add_button') === 'show_cart'\n\n  return {\n    isShowCartBehavior\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(CartButton)\n","// React\nimport React, { Component } from 'react'\n\n// Libraries\nimport { Provider } from 'react-redux'\n\n// Components\nimport Themed from 'store/v2/react/components/Themed'\nimport CartButton from 'store/v2/react/components/cart_button'\n\n// Shared\n\nconst store = window.booqableStore\n\nexport default class CartButtonContainer extends Component {\n  static displayName = 'CartButtonContainer'\n\n  render () {\n    return (\n      <Provider store={store}>\n        <Themed>\n          <CartButton {...this.props} />\n        </Themed>\n      </Provider>\n    )\n  }\n}\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --availability-padding: 5px 12px;\n    --availability-border-radius: var(--border-radius-lg, 20px);\n\n    --availability-available-background-color: var(--color-green, #8fcc40);\n    --availability-available-color: var(--color-white, #fff);\n    --availability-unavailable-background-color: var(--color-red, #f85454);\n    --availability-unavailable-color: var(--color-white, #fff);\n  }\n`\n\nexport const Availability = styled.span`\n  padding: var(--availability-padding);\n\n  border-radius: var(--availability-border-radius);\n\n  ${({ available }) => available && css`\n    background-color: var(--availability-available-background-color);\n    color: var(--availability-available-color);\n  `}\n\n  ${({ available }) => !available && css`\n    background-color: var(--availability-unavailable-background-color);\n    color: var(--availability-unavailable-color);\n  `}\n`\n","// React\nimport React, { useMemo } from 'react'\nimport { Provider } from 'react-redux'\n\nconst withStore = (Component) => (props) => {\n  const store = useMemo(() => window.booqableGetStore(), [])\n\n  return (\n    <Provider store={store}>\n      <Component {...props} />\n    </Provider>\n  )\n}\n\nexport default withStore\n","// React\nimport React from 'react'\nimport { ThemeProvider } from 'styled-components'\n\n// Shared\nimport theme from 'ui/themes/public'\nimport getBrandingColor from 'shared/utils/getBrandingColor'\n\nconst withTheme = (Component) => (props) =>\n  (\n    <ThemeProvider theme={theme(getBrandingColor())}>\n      <Component {...props} />\n    </ThemeProvider>\n  )\n\nexport default withTheme\n","// React\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\n\n// Libraries\nimport { StyleSheetManager } from 'styled-components'\nimport camelCase from 'lodash/camelCase'\nimport retargetEvents from 'react-shadow-dom-retarget-events'\n\n// Shared\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst registerCustomElement = (\n  name,\n  Component,\n  { attributes, mountElement = 'div', mountAttributes = {}, styleSheetTarget } = {}\n) => {\n  const webComponentClass = class extends HTMLElement {\n    constructor () {\n      super()\n\n      this.mountPoint = document.createElement(mountElement)\n      this.mountPoint.className = name\n\n      for (const [key, value] of Object.entries(mountAttributes)) {\n        this.mountPoint.setAttribute(key, value)\n      }\n\n      this.attachShadow({ mode: 'open' })\n    }\n\n    connectedCallback () {\n      if (this.isConnected) {\n        this.setAttribute('initialized', 'true')\n\n        const attrs = attributes?.reduce(\n          (acc, key) =>\n            Object.assign(acc, {\n              [camelCase(key.replace('data-', ''))]:\n                this.getAttribute(key) ?? undefined\n            }),\n          {}\n        ) ?? {}\n\n        const handleSetAttribute = (name, value) => {\n          if (value === null) {\n            this.removeAttribute(name)\n          } else {\n            this.setAttribute(name, value)\n          }\n        }\n\n        this.shadowRoot?.appendChild(this.mountPoint)\n\n        const root = createRoot(this.mountPoint)\n\n        root.render(\n          <StyleSheetManager\n            target={styleSheetTarget || this.shadowRoot || undefined}\n            shouldForwardProp={shouldForwardProp}\n            enableVendorPrefixes\n          >\n            <Component {...attrs} setAttribute={handleSetAttribute}>{this.childNodes}</Component>\n          </StyleSheetManager>\n        )\n\n        retargetEvents(this.shadowRoot)\n      }\n    }\n\n    disconnectedCallback () {\n      if (!this.isConnected) {\n        this.shadowRoot?.removeChild(this.mountPoint)\n      }\n    }\n  }\n\n  if (!customElements.get(name)) {\n    customElements.define(name, webComponentClass)\n  }\n}\n\nexport default registerCustomElement\n","import axios from 'axios'\nimport qs from 'qs'\n\nconst request = axios.create({\n  baseURL: window.booqableOptions.apiURL\n})\n\nrequest.interceptors.request.use((config) => {\n  config.paramsSerializer = (params) => {\n    return qs.stringify(params, {\n      arrayFormat: 'brackets',\n      encode: false\n    })\n  }\n\n  return config\n})\n\nexport default request\n","import request from './'\n\nexport const getAvailabilities = ({ ids, startsAt, stopsAt, startLocationId }) => {\n  return request({\n    method: 'POST',\n    url: '/api/boomerang/availabilities',\n    data: {\n      filter: {\n        item_id: ids,\n        from: startsAt,\n        till: stopsAt,\n        location_id: startLocationId\n      }\n    }\n  })\n}\n\nexport const getAvailability = ({ id, startsAt, stopsAt, startLocationId, configuration }) => {\n  return request({\n    method: 'POST',\n    url: '/api/boomerang/availabilities',\n    data: {\n      filter: {\n        item_id: id,\n        from: startsAt,\n        till: stopsAt,\n        location_id: startLocationId,\n        configuration\n      }\n    }\n  })\n}\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getAvailabilities, getAvailability } from 'shop-components/api/availability'\n\nlet ids = []\n\nconst availabilitiesRequest = ({ dispatch, ...params }) => {\n  dispatch({\n    type: 'PRODUCT_AVAILABILITIES_FETCH_START'\n  })\n\n  getAvailabilities({ ids, ...params })\n    .then(({ data: { data } }) => {\n      const availabilities = data.map(({ attributes }) => attributes)\n\n      dispatch({ type: 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS', payload: { records: availabilities } })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_AVAILABILITIES_FETCH_ERROR'\n      })\n    })\n\n  ids = []\n}\n\nconst availabilityRequest = ({ dispatch, ...params }) => {\n  dispatch({\n    type: 'PRODUCT_AVAILABILITIES_FETCH_START'\n  })\n\n  getAvailability(params)\n    .then(({ data: { data } }) => {\n      const availabilities = data.map(({ attributes }) => attributes)\n\n      dispatch({ type: 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS', payload: { records: availabilities } })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_AVAILABILITIES_FETCH_ERROR'\n      })\n    })\n}\n\nconst fetchAvailabilitiesDebounced = _debounce(availabilitiesRequest, 50)\n\nconst fetchAvailabilityDebounced = _debounce(availabilityRequest, 50)\n\n// Bulk fetch actions are debounced to prevent multiple requests\nexport const fetchAvailabilities = ({ id, ...params }) => (dispatch) => {\n  if (!ids.includes(id)) {\n    ids.push(id)\n  }\n\n  return fetchAvailabilitiesDebounced({ ...params, dispatch })\n}\n\nexport const fetchAvailability = (params) => (dispatch) => {\n  return fetchAvailabilityDebounced({ ...params, dispatch })\n}\n\nexport const fetchVariationAvailability = ({ productId, ...params }) => (dispatch) => {\n  dispatch({\n    type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_START'\n  })\n\n  getAvailabilities(params)\n    .then(({ data: { data } }) => {\n      const availabilities = data.map(({ attributes }) => ({ ...attributes }))\n\n      dispatch({\n        type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_SUCCESS',\n        payload: { records: availabilities, productId }\n      })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_ERROR'\n      })\n    })\n}\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\nimport { HostStyles, Availability } from './styles'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { fetchAvailabilities } from 'shop-components/redux/actions/availability'\n\nconst ProductAvailability = ({\n  productId,\n  isLoading,\n  availability,\n  cart,\n  fetchProductAvailabilities,\n  hideAvailability,\n  setAttribute,\n  t\n}) => {\n  useEffect(() => {\n    if (productId && !!cart.startsAt && !!cart.stopsAt && !!cart.startLocationId) {\n      fetchProductAvailabilities({\n        id: productId,\n        startsAt: cart.startsAt,\n        stopsAt: cart.stopsAt,\n        startLocationId: cart.startLocationId\n      })\n    }\n  }, [cart.startsAt, cart.stopsAt, cart.startLocationId])\n\n  useEffect(() => {\n    if (!cart.startsAt || !cart.stopsAt || !availability) {\n      setAttribute('visible', false)\n    } else {\n      setAttribute('visible', true)\n    }\n  }, [cart.startsAt, cart.stopsAt, availability])\n\n  if (isLoading) return <Skeleton width={150} />\n\n  if (!cart.startsAt || !cart.stopsAt || !availability) return null\n\n  const availableString = hideAvailability ?\n    t('user.store.available') :\n    `${availability.plannable} ${t('user.store.available')?.toLowerCase?.()}`\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <Availability available={!!availability?.plannable}>\n        {availability?.plannable ? availableString : t('user.store.unavailable')}\n      </Availability>\n    </Fragment>\n  )\n}\n\nProductAvailability.displayName = 'ProductAvailability'\n\nProductAvailability.propTypes = {\n  availability: PropTypes.object,\n  isLoading: PropTypes.bool,\n  hideAvailability: PropTypes.bool,\n  cart: PropTypes.object,\n  productId: PropTypes.string,\n  fetchProductAvailabilities: PropTypes.func,\n  setAttribute: PropTypes.func,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  let availability\n\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n\n  const item = state.items.records[props.productId]\n\n  if (item?.products?.length > 1 && item?.type !== 'bundles') {\n    availability = item?.products?.find(({ id }) => id === item.variation_id)?.availability\n  } else {\n    availability = item?.availability\n  }\n\n  return {\n    cart: {\n      id: cart?.id ?? window.booqableOptions.cart?.id,\n      startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n      stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n      startLocationId: cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId\n    },\n    isLoading: state.items.loading && !availability,\n    availability,\n    hideAvailability: state.settings.get('store.hide_product_availability_quantities')\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n  fetchProductAvailabilities: (attributes) => dispatch(fetchAvailabilities(attributes))\n})\n\nconst decoratedComponent = compose(\n  withStore,\n  withTranslation('user'),\n  withTheme,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductAvailability)\n\nregisterCustomElement('bq-product-availability', decoratedComponent, {\n  mountElement: 'span',\n  attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getPrices, getPrice } from 'shop-components/api/price'\n\nlet ids = []\n\nconst pricesRequest = ({ cartId, dispatch }) => {\n  dispatch({\n    type: 'PRODUCT_PRICES_FETCH_START'\n  })\n\n  getPrices({ ids, cartId })\n    .then(({ data: { data } }) => {\n      const prices = data.map(({ attributes }) => attributes)\n\n      dispatch({ type: 'PRODUCT_PRICES_FETCH_SUCCESS', payload: { records: prices } })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_PRICES_FETCH_ERROR'\n      })\n    })\n\n  ids = []\n}\n\nconst priceRequest = ({ id, cartId, configuration, dispatch }) => {\n  dispatch({\n    type: 'PRODUCT_PRICES_FETCH_START'\n  })\n\n  getPrice({ id, configuration, cartId })\n    .then(({ data: { data } }) => {\n      const prices = data.map(({ attributes }) => attributes)\n\n      dispatch({ type: 'PRODUCT_PRICES_FETCH_SUCCESS', payload: { records: prices, method: 'configuration' } })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_PRICES_FETCH_ERROR'\n      })\n    })\n}\n\nconst fetchPricesDebounced = _debounce(pricesRequest, 50)\n\nconst fetchPriceDebounced = _debounce(priceRequest, 50)\n\nexport const fetchPrices = ({ id, cartId }) => (dispatch) => {\n  if (!ids.includes(id)) {\n    ids.push(id)\n  }\n\n  return fetchPricesDebounced({ cartId, dispatch })\n}\n\nexport const fetchPrice = ({ id, cartId, configuration }) => (dispatch) => {\n  return fetchPriceDebounced({ id, cartId, configuration, dispatch })\n}\n","import request from './'\n\nexport const getPrices = ({ ids, cartId }) => {\n  return request({\n    method: 'POST',\n    url: '/api/boomerang/prices',\n    data: {\n      filter: {\n        item_id: ids,\n        cart_id: cartId\n      }\n    }\n  })\n}\n\nexport const getPrice = ({ id, cartId, configuration }) => {\n  return request({\n    method: 'POST',\n    url: '/api/boomerang/prices',\n    data: {\n      filter: {\n        item_id: id,\n        cart_id: cartId,\n        configuration\n      }\n    }\n  })\n}\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice, fetchPrices } from 'shop-components/redux/actions/price'\nimport { money } from 'shared/utils/format'\n\nconst ProductPrice = ({\n  productId,\n  isLoading,\n  price,\n  defaultPrice,\n  cart,\n  product,\n  fetchProductPrice,\n  fetchProductPrices,\n  currency\n}) => {\n  useEffect(() => {\n    if (product?.id && cart?.id && (product?.variation_id || product?.configuration)) {\n      return fetchProductPrice({\n        cartId: cart.id,\n        id: product.variation_id || product.id,\n        configuration: product.configuration\n      })\n    }\n\n    if (productId && cart?.id) {\n      fetchProductPrices({\n        cartId: cart.id,\n        id: productId\n      })\n    }\n  }, [productId, product?.id, product?.variation_id, product?.configuration, cart.id, cart.startsAt, cart.stopsAt])\n\n  if (isLoading) return <Skeleton width={100} />\n\n  if (price) return money(price, currency)\n\n  if (defaultPrice) return defaultPrice\n\n  return null\n}\n\nProductPrice.displayName = 'ProductPrice'\n\nProductPrice.propTypes = {\n  productId: PropTypes.string,\n  product: PropTypes.object,\n  price: PropTypes.number,\n  isLoading: PropTypes.bool,\n  defaultPrice: PropTypes.string,\n  cart: PropTypes.object,\n  fetchProductPrice: PropTypes.func,\n  fetchProductPrices: PropTypes.func,\n  currency: PropTypes.object\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n  const product = state.items.records[props.productId]\n  const price = product?.price?.price_each_in_cents\n\n  return {\n    cart: {\n      id: cart?.id ?? window.booqableOptions.cart?.id,\n      startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n      stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till\n    },\n    currency: window.booqableOptions.currency,\n    isLoading: state.items.loading && !price,\n    price,\n    product\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n  fetchProductPrice: (attributes) => dispatch(fetchPrice(attributes)),\n  fetchProductPrices: (attributes) => dispatch(fetchPrices(attributes))\n})\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductPrice)\n\nregisterCustomElement('bq-product-price', decoratedComponent, {\n  mountElement: 'span',\n  attributes: ['product-id', 'default-price']\n})\n\nexport default decoratedComponent\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice, fetchPrices } from 'shop-components/redux/actions/price'\n\nconst ProductPriceLabel = ({\n  productId,\n  label,\n  isLoading,\n  defaultLabel,\n  cart,\n  product,\n  fetchProductPrices,\n  fetchProductPrice\n}) => {\n  useEffect(() => {\n    if (product?.id && cart?.id && (product?.variation_id || product?.configuration)) {\n      return fetchProductPrice({\n        cartId: cart.id,\n        id: product.variation_id || product.id,\n        configuration: product.configuration\n      })\n    }\n\n    if (productId && cart?.id) {\n      fetchProductPrices({\n        cartId: cart.id,\n        id: productId\n      })\n    }\n  }, [productId, product?.id, product?.variation_id, product?.configuration, cart.id, cart.startsAt, cart.stopsAt])\n\n  if (isLoading) return <Skeleton width={150} />\n\n  if (label) return label\n\n  if (defaultLabel) return defaultLabel\n\n  return null\n}\n\nProductPriceLabel.displayName = 'ProductPriceLabel'\n\nProductPriceLabel.propTypes = {\n  productId: PropTypes.string,\n  label: PropTypes.any,\n  isLoading: PropTypes.bool,\n  defaultLabel: PropTypes.any,\n  cart: PropTypes.object,\n  product: PropTypes.object,\n  fetchProductPrices: PropTypes.func,\n  fetchProductPrice: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n  const product = state.items.records[props.productId]\n  const type = product?.price?.product_type\n  const label = type === 'consumable' ? props.t('user.store.buy') : product?.price?.charge_label\n\n  return {\n    cart: {\n      id: cart?.id ?? window.booqableOptions.cart?.id,\n      startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n      stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till\n    },\n    isLoading: state.items.loading && !label,\n    label,\n    product\n  }\n}\n\nconst mapDispatchToProps = (dispatch, _props) => ({\n  fetchProductPrice: (attributes) => dispatch(fetchPrice(attributes)),\n  fetchProductPrices: (attributes) => dispatch(fetchPrices(attributes))\n})\n\nconst decoratedComponent = compose(\n  withStore,\n  withTranslation('user'),\n  withTheme,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductPriceLabel)\n\nregisterCustomElement('bq-product-price-label', decoratedComponent, {\n  mountElement: 'span',\n  attributes: ['product-id', 'default-label']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --variation-select-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --variation-select-color: var(--color-typo, ${color('text')});\n    --variation-select-background-color: var(--color-white, ${color('white')});\n    --variation-select-font-size: 13px;\n    --variation-select-font-family: var(--font-body, sans-serif);\n\n    --variation-select-padding: 0 30px 0 10px;\n\n    --variation-select-control-height: 38px;\n\n    --variation-select-border-radius: 6px;\n  }\n`\n\nconst Wrapper = styled.div`\n  position: relative;\n\n  svg {\n    position: absolute;\n\n    top: 50%;\n    right: 10px;\n    transform: translateY(-50%);\n\n    width: 14px;\n    height: 14px;\n\n    pointer-events: none;\n  }\n`\n\nconst Select = styled.select`\n  border: var(--variation-select-border);\n\n  background-color: var(--variation-select-background-color);\n  color: var(--variation-select-color);\n\n  font-family: var(--variation-select-font-family);\n  font-size: var(--variation-select-font-size);\n\n  padding: var(--variation-select-padding);\n\n  width: 100%;\n  height: var(--variation-select-control-height);\n\n  border-radius: var(--variation-select-border-radius);\n\n  appearance: none;\n`\n\nWrapper.Select = Select\n\nexport default Wrapper\n","// React\nimport React, { Fragment, useCallback, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport BVariationSelect, { HostStyles } from './styles'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\nimport _sortBy from 'lodash/sortBy'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice } from 'shop-components/redux/actions/price'\nimport { fetchVariationAvailability } from 'shop-components/redux/actions/availability'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst ProductVariationsSelect = ({\n  name,\n  productId,\n  variations,\n  defaultVariation,\n  withAvailability,\n  cart,\n  fetchProductPrice,\n  fetchAvailability,\n  setVariation,\n  t\n}) => {\n  const [selected, setSelected] = useState(defaultVariation?.id)\n\n  const handleSelectVariation = useCallback(\n    (id) => {\n      setVariation(productId, id)\n      setSelected(id)\n    },\n    [productId, setVariation]\n  )\n\n  useEffect(() => {\n    if (!selected && defaultVariation?.id) {\n      handleSelectVariation(defaultVariation?.id)\n    }\n  }, [selected, defaultVariation?.id, handleSelectVariation])\n\n  useEffect(() => {\n    if (!(selected && cart.id)) return\n\n    fetchProductPrice({ id: selected, cartId: cart.id })\n  }, [selected, cart.id, cart.startsAt, cart.stopsAt])\n\n  useEffect(() => {\n    if (!(productId && variations?.length && cart.startsAt && cart.stopsAt && cart.startLocationId)) return\n\n    fetchAvailability({\n      ids: variations.map(({ id }) => id),\n      productId,\n      startsAt: cart.startsAt,\n      stopsAt: cart.stopsAt,\n      startLocationId: cart.startLocationId\n    })\n  }, [productId, variations?.length, cart.startsAt, cart.stopsAt, cart.startLocationId])\n\n  if (!variations || variations?.length <= 1) return null\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <BVariationSelect>\n        <BVariationSelect.Select\n          className=\"variations-select\"\n          name=\"variation\"\n          value={selected}\n          onChange={(e) => handleSelectVariation(e.target.value)}\n        >\n          {variations.map((variation) => {\n            return (\n              <option key={variation.id} value={variation.id}>\n                {`${variation.name.replace(`${name} - `, '')}${\n                  withAvailability && variation.availability ?\n                    ` (${variation.availability.plannable} ${t('user.store.available')})` :\n                    ''\n                }`}\n              </option>\n            )\n          })}\n        </BVariationSelect.Select>\n        <FontAwesomeIcon icon={farChevronDown} />\n      </BVariationSelect>\n    </Fragment>\n  )\n}\n\nProductVariationsSelect.propTypes = {\n  productId: PropTypes.string.isRequired,\n  name: PropTypes.string,\n  cart: PropTypes.object,\n  variations: PropTypes.array,\n  defaultVariation: PropTypes.object,\n  withAvailability: PropTypes.bool,\n  fetchProductPrice: PropTypes.func,\n  fetchAvailability: PropTypes.func,\n  setVariation: PropTypes.func,\n  t: PropTypes.func\n}\n\nProductVariationsSelect.displayName = 'ProcuctVariationsSelect'\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n  const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n  const item = state.items.records[props.productId]\n  // Sort by price first (base_price_in_cents)\n  const priceSortedVariants = _sortBy(item?.products, 'base_price_in_cents')\n  // then by sorting_weight as a tiebreaker\n  const variations = _sortBy(item?.products, 'sorting_weight')\n  const defaultVariation = priceSortedVariants?.[0]\n\n  const withAvailability =\n    hasDates &&\n    item?.tracking_type !== 'none' &&\n    SettingsUtils.get('store.use_availability') &&\n    !SettingsUtils.get('store.hide_product_availability_quantities')\n\n  return {\n    cart: {\n      id: cart?.id ?? window.booqableOptions.cart?.id,\n      startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n      stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n      startLocationId: cart?.start_location_id ?? window.booqableOptions.cart?.start_location_id\n    },\n    name: item?.name,\n    variations,\n    defaultVariation,\n    withAvailability\n  }\n}\n\nconst mapDispatchToProps = (dispatch) => ({\n  fetchProductPrice: ({ id, cartId }) => dispatch(fetchPrice({ id, cartId })),\n  fetchAvailability: (attributes) => dispatch(fetchVariationAvailability(attributes)),\n  setVariation: (id, variationId) => dispatch({ type: 'PRODUCT_UPDATE_VARIATION', payload: { id, variationId } })\n})\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme,\n  withTranslation('user'),\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductVariationsSelect)\n\nregisterCustomElement('bq-product-variations-select', decoratedComponent, {\n  attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport ProductAvailabilityCalendar from 'store/modules/product/components/ProductAvailabilityCalendar'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { getOperatingRules } from 'shared/utils/operating_rules'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst AvailabilityCalendar = ({ itemId, cart, configuration, locations, availabilities, operatingRules, showCounts }) => (\n  <ProductAvailabilityCalendar\n    id={itemId}\n    productConfiguration={{ products: configuration }}\n    currentMonth={cart?.starts_at ? new Date(cart.starts_at) : new Date()}\n    availabilities={availabilities}\n    defaultLocationId={locations.start?.id}\n    operatingRules={operatingRules}\n    showCounts={showCounts}\n    selected={{ from: cart?.starts_at, to: cart?.stops_at }}\n    useBusinessHours\n  />\n)\n\nAvailabilityCalendar.propTypes = {\n  item: PropTypes.object,\n  cart: PropTypes.object,\n  configuration: PropTypes.object,\n  locations: PropTypes.object,\n  availabilities: PropTypes.object,\n  operatingRules: PropTypes.object,\n  showCounts: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart.id)\n  const locations = {\n    start: state.orm.locations.getById(cart?.start_location_id ?? window.booqableOptions.cart.startLocationId),\n    stop: state.orm.locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart.stopLocationId)\n  }\n\n  const item = state.items.records[props.productId]\n  let itemId = item?.variation_id\n  itemId ||= item?.type === 'product_groups' ? item?.products?.[0]?.id : item?.id\n\n  const availabilities = state.orm.shop_availabilities.getAll({\n    item_id: itemId\n  })\n\n  const configuration = item?.configuration\n\n  const operatingRules = getOperatingRules(state)\n  const showCounts = !SettingsUtils.get('store.hide_product_availability_quantities')\n\n  return {\n    item,\n    itemId,\n    configuration,\n    cart,\n    locations,\n    availabilities,\n    operatingRules,\n    showCounts\n  }\n}\n\nconst decoratedComponent = compose(withStore, withTheme, reduxConnect(mapStateToProps))(AvailabilityCalendar)\n\nregisterCustomElement('bq-product-availability-calendar', decoratedComponent, {\n  attributes: ['product-id'],\n  mountElement: 'span',\n  styleSheetTarget: document.head\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport Skeleton from 'ui/blocks/Skeleton'\n\nconst statusColors = {\n  success: '--add-button-button-color',\n  error: '--add-button-error-color'\n}\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --add-button-button-color: var(--color-accent-background, ${color('branding')});\n    --add-button-button-label-color: var(--color-accent-foreground, ${color('white')});\n\n    --add-button-success-color: var(--color-green, ${color('Success/Base')});\n    --add-button-error-color: var(--color-red, ${color('Danger/Base')});\n\n    --add-button-label-weight: 700;\n    --add-button-label-family: var(--font-body, sans-serif);\n\n    --add-button-input-border-radius: 6px;\n    --add-button-button-border-radius: 6px;\n\n    --add-button-control-button-color: var(--color-typo, ${color('text')});\n\n    --add-button-input-color: var(--color-typo, ${color('text')});\n    --add-button-input-background-color: var(--color-white, ${color('white')});\n    --add-button-input-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --add-button-control-height: 48px;\n\n    --add-button-input-padding: 8px 12px;\n    --add-button-input-width: 110px;\n\n    --add-button-button-padding: 0 14px;\n    --add-button-button-width: 100%;\n    --add-button-button-max-width: 400px;\n\n    --add-button-gap: 6px;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n\n  @keyframes spin {\n    0% {\n      transform: rotate(0deg);\n    }\n\n    100% {\n      transform: rotate(360deg);\n    }\n  }\n`\n\nconst Wrapper = styled.div`\n  display: flex;\n  align-items: center;\n\n  gap: var(--add-button-gap);\n\n  width: 100%;\n`\n\nconst ButtonLabel = styled.span`\n  color: var(--add-button-button-label-color);\n\n  font-family: var(--add-button-label-family);\n  font-weight: var(--add-button-label-weight);\n`\n\nconst ButtonOverlay = styled.div`\n  position: absolute;\n\n  width: 100%;\n  height: 100%;\n\n  top: 0;\n  left: 0;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  svg {\n    max-height: 18px;\n    max-width: 18px;\n\n    height: 100%;\n    width: 100%;\n\n    &.loading {\n      animation: spin 1s linear infinite;\n    }\n  }\n`\n\nconst Button = styled.button`\n  display: block;\n  position: relative;\n\n  width: var(--add-button-button-width);\n  height: var(--add-button-control-height);\n\n  max-width: var(--add-button-button-max-width);\n\n  padding: var(--add-button-button-padding);\n\n  background-color: var(--add-button-button-color);\n  color: var(--add-button-button-label-color);\n\n  border: none;\n  border-radius: var(--add-button-button-border-radius);\n\n  cursor: pointer;\n\n  &:hover {\n    box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, 0.12);\n  }\n\n  transition: all 0.2s ease-in-out;\n\n  ${({ loading }) =>\n    loading &&\n    css`\n      cursor: progress;\n\n      ${ButtonLabel} {\n        opacity: 0;\n        visibility: hidden;\n      }\n    `}\n\n  ${({ disabled }) =>\n    disabled &&\n    css`\n      cursor: not-allowed;\n\n      opacity: 0.6;\n    `}\n\n  ${({ status }) =>\n    status &&\n    css`\n      background-color: var(${statusColors[status]});\n\n      ${ButtonLabel} {\n        opacity: 0;\n        visibility: hidden;\n      }\n    `}\n`\n\nconst InputWrapper = styled.div`\n  position: relative;\n`\n\nconst Input = styled.input`\n  display: block;\n\n  width: var(--add-button-input-width);\n  height: var(--add-button-control-height);\n\n  color: var(--add-button-input-color);\n  background-color: var(--add-button-input-background-color);\n\n  padding: var(--add-button-input-padding);\n  margin: 0;\n\n  border: var(--add-button-input-border);\n  border-radius: var(--add-button-input-border-radius);\n\n  font-family: sans-serif;\n\n  appearance: textfield;\n\n  &::-webkit-outer-spin-button,\n  &::-webkit-inner-spin-button {\n    appearance: none;\n    margin: 0;\n  }\n`\n\nconst Controls = styled.div`\n  position: absolute;\n\n  display: flex;\n  flex-direction: column;\n\n  top: 0;\n  right: 0;\n  bottom: 0;\n\n  border-top-right-radius: var(--add-button-input-border-radius);\n  border-bottom-right-radius: var(--add-button-input-border-radius);\n\n  border-left: var(--add-button-input-border);\n`\n\nconst Control = styled.button`\n  flex: 1 1 auto;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  padding: 0 15px;\n\n  border: none;\n\n  background-color: transparent;\n\n  cursor: pointer;\n\n  svg {\n    width: 12px;\n    height: 12px;\n\n    fill: var(--add-button-control-button-color);\n    color: var(--add-button-control-button-color);\n  }\n`\n\nconst SkeletonContainer = styled(Wrapper)`\n  ${Skeleton} {\n    height: var(--add-button-control-height);\n    width: var(--add-button-button-width);\n\n    border-radius: var(--add-button-button-border-radius);\n  }\n`\n\nWrapper.Button = Button\nWrapper.ButtonLabel = ButtonLabel\nWrapper.ButtonOverlay = ButtonOverlay\nWrapper.InputWrapper = InputWrapper\nWrapper.Input = Input\nWrapper.Controls = Controls\nWrapper.Control = Control\nWrapper.SkeletonContainer = SkeletonContainer\n\nexport default Wrapper\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport BProductButton from './styles'\nimport Skeleton from 'ui/blocks/Skeleton'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n  faSpinnerThird as farSpinnerThird,\n  faCheck as farCheck,\n  faTimes as farTimes\n} from '@fortawesome/pro-regular-svg-icons'\n\nconst Button = ({ loading, disabled, status, behavior, onClick, label }) => {\n  if (!behavior) {\n    return (\n      <BProductButton.SkeletonContainer>\n        <Skeleton />\n      </BProductButton.SkeletonContainer>\n    )\n  }\n\n  return (\n    <BProductButton.Button\n      onClick={onClick}\n      disabled={disabled}\n      loading={loading || undefined}\n      status={status}\n      className=\"bq-button\"\n    >\n      <BProductButton.ButtonLabel>{label}</BProductButton.ButtonLabel>\n      {loading && (\n        <BProductButton.ButtonOverlay>\n          <FontAwesomeIcon className=\"loading\" icon={farSpinnerThird} size=\"sm\" />\n        </BProductButton.ButtonOverlay>\n      )}\n      {status === 'success' && (\n        <BProductButton.ButtonOverlay>\n          <FontAwesomeIcon icon={farCheck} size=\"sm\" />\n        </BProductButton.ButtonOverlay>\n      )}\n      {status === 'error' && (\n        <BProductButton.ButtonOverlay>\n          <FontAwesomeIcon icon={farTimes} size=\"sm\" />\n        </BProductButton.ButtonOverlay>\n      )}\n    </BProductButton.Button>\n  )\n}\n\nButton.propTypes = {\n  onClick: PropTypes.func,\n  loading: PropTypes.bool,\n  disabled: PropTypes.bool,\n  status: PropTypes.oneOf(['success', 'error']),\n  behavior: PropTypes.oneOf(['show_cart', 'checkout']),\n  label: PropTypes.any\n}\n\nexport default Button\n","import request from './'\n\n// Universal action supporting product groups, products and bundles\nexport const getItem = (id) => {\n  return request({\n    method: 'GET',\n    url: `/api/boomerang/items/${id}`,\n    params: {\n      include: ['photo', 'bundle_items.product_group.products.photo', 'products', 'products.photo']\n    }\n  })\n}\n","// Libraries\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { getItem } from 'shop-components/api/items'\n\nexport const composeItem = ({ data, included }) => {\n  const item = {\n    id: data.id,\n    type: data.type,\n    ...data.attributes,\n    photos: [],\n    products: []\n  }\n\n  included.forEach(({ id, type, attributes, relationships }) => {\n    switch (type) {\n      case 'bundle_items': {\n        if (data.type !== 'bundles') return\n\n        const productGroup = included.find(({ id: _id }) => _id === relationships.product_group.data.id)\n        const photo = included.find(({ id: _id }) => _id === productGroup.attributes.photo_id)\n        const products = productGroup.relationships.products.data\n          .map(({ id }) => ({\n            id,\n            ...included.find(({ id: _id }) => _id === id).attributes\n          }))\n          .map((product) => {\n            const photo = included.find(({ id: _id }) => _id === product.photo_id)?.attributes\n\n            if (photo) {\n              return {\n                ...product,\n                photo\n              }\n            }\n\n            return product\n          })\n\n        if (photo && !item.photos.find(({ id: _id }) => _id === photo.id)) {\n          item.photos.push({\n            id: photo.id,\n            ...photo.attributes\n          })\n        }\n\n        item.products.push({\n          id,\n          ...attributes,\n          product_group: {\n            id: productGroup.id,\n            ...productGroup.attributes,\n            products\n          }\n        })\n\n        break\n      }\n      case 'products': {\n        if (data.type !== 'product_groups') return\n\n        const photo = included.find(({ id: _id }) => _id === attributes.photo_id)\n\n        if (photo && !item.photos.find(({ id: _id }) => _id === photo.id)) {\n          item.photos.push({\n            id: photo.id,\n            ...photo.attributes\n          })\n        }\n\n        item.products.push({\n          id,\n          ...attributes\n        })\n\n        break\n      }\n    }\n  })\n\n  return item\n}\n\nconst fetchRequest = (id, dispatch) => {\n  dispatch({\n    type: 'PRODUCTS_FETCH_START',\n    payload: { id }\n  })\n\n  getItem(id).then(({ data }) => {\n    const item = composeItem(data)\n\n    dispatch({ type: 'PRODUCTS_FETCH_SUCCESS', payload: { records: [item] } })\n  })\n}\n\nconst fetchDebounced = _debounce(fetchRequest, 50)\n\nexport const fetchItem = (id) => (dispatch) => {\n  return fetchDebounced(id, dispatch)\n}\n\nexport const updateConfiguration = ({ id, itemId, variationId }) => (dispatch) => {\n  dispatch({\n    type: 'PRODUCT_UPDATE_CONFIGURATION',\n    payload: { id, itemId, variationId }\n  })\n}\n","// React\nimport React, { Fragment, useState, useCallback, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BProductButton, { HostStyles } from './styles'\nimport Button from './Button'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPlus as farPlus, faMinus as farMinus } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\nimport { fetchItem } from 'shop-components/redux/actions/item'\n\nconst ProductButton = ({ item, behavior, hasDates, useAvailability, bookProduct, fetchItem, clearCart, label, t }) => {\n  const [quantity, setQuantity] = useState(1)\n  const [loading, setLoading] = useState(false)\n  const [status, setStatus] = useState(null)\n\n  useEffect(() => {\n    fetchItem()\n  }, [])\n\n  let disabled = quantity <= 0 || isNaN(quantity) || loading\n\n  if (behavior === 'checkout' && useAvailability) {\n    const available = item?.availability?.plannable\n\n    disabled = disabled || (hasDates && !available) || (hasDates && quantity > available)\n  }\n\n  const handleBook = useCallback(async () => {\n    let timeout\n    let id\n\n    if (item.type === 'bundles') {\n      id = item.id\n    } else {\n      id = item.variation_id || item.products[0].id\n    }\n\n    setLoading(true)\n\n    if (behavior === 'checkout') {\n      await clearCart()\n    }\n\n    await bookProduct({ id, quantity, configuration: item.configuration })\n      .then(() => {\n        setStatus('success')\n      })\n      .catch(() => {\n        setStatus('error')\n      })\n      .finally(() => {\n        setLoading(false)\n\n        timeout = setTimeout(() => {\n          setStatus(null)\n        }, 3000)\n      })\n\n    return () => {\n      clearTimeout(timeout)\n    }\n  }, [item, quantity])\n\n  const handleButtonClick = useCallback(() => {\n    if (!hasDates && behavior === 'checkout') {\n      return ClientActions.toggleModalPicker(true)\n    }\n\n    handleBook()\n  }, [handleBook, hasDates, behavior])\n\n  const handleInputFocus = useCallback(({ target }) => {\n    target.select()\n  }, [])\n\n  const handleChangeQuantity = useCallback(({ target: { value } }) => {\n    if (value && !isNaN(value)) {\n      setQuantity(parseInt(value))\n    }\n  }, [])\n\n  const handleIncreaseQuantity = useCallback(() => {\n    setQuantity((prev) => prev + 1)\n  }, [])\n\n  const handleDecreaseQuantity = useCallback(() => {\n    setQuantity((prev) => {\n      if (prev === 0) return prev\n\n      return prev - 1\n    })\n  }, [])\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <BProductButton>\n        <BProductButton.InputWrapper>\n          <BProductButton.Input\n            value={quantity}\n            onChange={handleChangeQuantity}\n            onFocus={handleInputFocus}\n            name=\"quantity\"\n            type=\"number\"\n            className=\"bq-quantity\"\n            min=\"1\"\n          />\n          <BProductButton.Controls>\n            <BProductButton.Control onClick={handleIncreaseQuantity}>\n              <FontAwesomeIcon icon={farPlus} size=\"sm\" />\n            </BProductButton.Control>\n            <BProductButton.Control disabled={quantity <= 1} onClick={handleDecreaseQuantity}>\n              <FontAwesomeIcon icon={farMinus} size=\"sm\" />\n            </BProductButton.Control>\n          </BProductButton.Controls>\n        </BProductButton.InputWrapper>\n        <Button\n          label={t(label)}\n          onClick={handleButtonClick}\n          loading={loading}\n          disabled={disabled}\n          status={status}\n          behavior={behavior}\n        />\n      </BProductButton>\n    </Fragment>\n  )\n}\n\nProductButton.propTypes = {\n  item: PropTypes.object,\n  behavior: PropTypes.oneOf(['show_cart', 'checkout']),\n  hasDates: PropTypes.bool,\n  useAvailability: PropTypes.bool,\n  bookProduct: PropTypes.func,\n  clearCart: PropTypes.func,\n  fetchItem: PropTypes.func,\n  label: PropTypes.any,\n  t: PropTypes.func\n}\n\nProductButton.displayName = 'ProductButton'\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const item = state.items.records[props.productId]\n\n  const behavior = SettingsUtils.get('store.behaviors.add_button')\n  const useAvailability = SettingsUtils.get('store.use_availability') && item?.tracking_type !== 'none'\n  const hasDates = !!cart?.starts_at && !!cart?.stops_at\n\n  let label = 'user.store.add_to_cart'\n\n  if (behavior === 'checkout' && !hasDates) {\n    label = 'user.store.select_a_period'\n  }\n\n  return { item, behavior, hasDates, label, useAvailability }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n  fetchItem: () => dispatch(fetchItem(props.productId)),\n  clearCart: () => CartActions.clear(),\n  bookProduct: ({ id, quantity, configuration }) =>\n    CartActions.book({ item_id: id, quantity, configuration: { products: configuration } }).then(() => {\n      const toggleCart = () => ClientActions.toggleCart(true)\n      const togglePicker = () =>\n        ClientActions.evaluateCartOverdue() ? ClientActions.toggleModalPicker(true) : ClientActions.setCheckingOut()\n\n      const action = SettingsUtils.get('store.behaviors.add_button') === 'show_cart' ? toggleCart : togglePicker\n\n      triggerUserFrameworkBookEvent(id, quantity)\n\n      return setTimeout(action, 150)\n    })\n})\n\nconst decoratedComponent = compose(\n  withTranslation('user'),\n  withTheme,\n  withStore,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductButton)\n\nregisterCustomElement('bq-product-button', decoratedComponent, {\n  attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    /* Colors */\n    --date-picker-icon-color: var(--color-accent-foreground, #ffffff);\n    --date-picker-background-color: var(--color-white, #ffffff);\n    --date-picker-text-color: var(--color-typo, #0c2747);\n    --date-picker-placeholder-color: var(--color-placeholder, #0c27471a);\n    --date-picker-cleanstate-background-color: var(--color-accent-background, #395db8);\n    --date-picker-cleanstate-text-color: var(--color-accent-foreground, #ffffff);\n    --date-picker-error-color: var(--color-red, #f85454);\n\n    /* Sizes */\n    --date-picker-wrapper-padding: 0.5rem;\n    --date-picker-cleanstate-padding: 0.75rem 1.25rem;\n    --date-picker-section-padding: 0.75rem;\n    --date-picker-title-size: 1.125rem;\n    --date-picker-title-line-height: 1.75rem;\n    --date-picker-text-size: 1rem;\n    --date-picker-text-line-height: 1.5rem;\n    --date-picker-border-radius: 0.5rem;\n\n    /* Other styles */\n    --date-picker-box-shadow: 0 1px 2px rgba(33, 59, 71, 0.12), 0 4px 12px rgba(33, 59, 71, 0.12);\n    --date-picker-section-border: 1px solid ${color('Misc/Divider')};\n\n    --date-picker-cleanstate-alignment: left;\n    --date-picker-alignment: left;\n\n    @media (min-width: 820px) {\n      --date-picker-wrapper-padding: 1rem;\n    }\n  }\n`\n\nconst DatePicker = styled.div`\n  * {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n  }\n\n  font-family: var(--font-body);\n`\n\nconst Icon = styled(FontAwesomeIcon)`\n  max-width: 24px;\n  width: 100%;\n\n  color: var(--date-picker-icon-color);\n`\n\nconst CalendarIcon = styled(Icon)`\n  max-height: 24px;\n\n  margin-right: 16px;\n`\n\nconst ChevronIcon = styled(Icon)`\n  max-width: 12px;\n`\n\nconst Cleanstate = styled.div`\n  display: flex;\n  align-items: center;\n\n  text-align: var(--date-picker-cleanstate-alignment);\n\n  background-color: var(--date-picker-cleanstate-background-color);\n\n  padding: var(--date-picker-cleanstate-padding);\n\n  border-radius: var(--date-picker-border-radius);\n\n  cursor: pointer;\n\n  min-height: 56px;\n`\n\nconst CleanstateLabels = styled.div`\n  width: 100%;\n  margin-right: 16px;\n\n  color: var(--date-picker-cleanstate-text-color);\n`\n\nconst CleanstateTitle = styled.div`\n  font-size: var(--date-picker-title-size);\n  line-height: var(--date-picker-title-line-height);\n  font-weight: 600;\n\n  color: var(--color-accent-foreground);\n`\n\nconst CleanstateLabel = styled.div`\n  font-size: var(--date-picker-text-size);\n  line-height: var(--date-picker-text-line-height);\n  color: var(--color-accent-foreground);\n`\n\nconst Wrapper = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n\n  background-color: var(--date-picker-background-color);\n\n  padding: var(--date-picker-wrapper-padding) 0;\n\n  box-shadow: var(--date-picker-box-shadow);\n  border-radius: var(--date-picker-border-radius);\n\n  text-align: var(--date-picker-alignment);\n`\n\nconst SectionGroup = styled.div`\n  display: flex;\n  flex-grow: 1;\n  cursor: pointer;\n`\n\nconst Section = styled.div`\n  flex: 1 1 0;\n  padding: 0 var(--date-picker-section-padding);\n  border-right: var(--date-picker-section-border);\n`\n\nconst Label = styled.p`\n  font-size: var(--date-picker-text-size);\n  line-height: var(--date-picker-text-line-height);\n\n  color: var(--date-picker-text-color);\n\n  font-weight: 600;\n\n  @media (min-width: 820px) {\n    display: block;\n  }\n`\n\nconst Value = styled.p`\n  font-size: var(--date-picker-text-size);\n  line-height: var(--date-picker-text-line-height);\n\n  color: var(--date-picker-text-color);\n\n  font-weight: 400;\n\n  ${({ isPlaceholder }) => isPlaceholder && css`\n    font-size: var(--date-picker-text-size);\n    line-height: var(--date-picker-text-line-height);\n    font-weight: 400;\n    color: var(--date-picker-placeholder-color);\n  `}\n\n  ${({ isValid }) => !isValid && css`\n    color: var(--date-picker-error-color);\n  `}\n`\n\nDatePicker.Icon = Icon\nDatePicker.CalendarIcon = CalendarIcon\nDatePicker.ChevronIcon = ChevronIcon\nDatePicker.Cleanstate = Cleanstate\nDatePicker.CleanstateLabels = CleanstateLabels\nDatePicker.CleanstateTitle = CleanstateTitle\nDatePicker.CleanstateLabel = CleanstateLabel\nDatePicker.Wrapper = Wrapper\nDatePicker.Section = Section\nDatePicker.SectionGroup = SectionGroup\nDatePicker.Label = Label\nDatePicker.Value = Value\n\nexport default DatePicker\n","// React\nimport { useEffect, useCallback } from 'react'\n\n// Hooks\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useSearchParam } from 'shared/utils/useSearchParam'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport CartActions from 'store/v2/redux/actions/cart'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport const useDatePicker = () => {\n  const shouldOpenPicker = useSearchParam('open-picker')\n\n  const behavior = useSettings('store.behaviors.add_button')\n\n  const isOpen = useSelector((state) => state.client.modalPickerOpen)\n\n  const toggle = useCallback((state) => {\n    ClientActions.toggleModalPicker(state)\n  }, [])\n\n  const close = useCallback(() => {\n    switch (behavior) {\n      case 'show_cart': {\n        ClientActions.toggleModalPicker(false)\n        break\n      }\n      case 'checkout': {\n        CartActions.clear()\n        ClientActions.toggleModalPicker(false)\n        break\n      }\n    }\n  }, [behavior])\n\n  // Effect to check if we should open picker based on the URL search param\n  useEffect(() => {\n    if (!shouldOpenPicker) return\n\n    toggle(true)\n  }, [])\n\n  return {\n    isOpen,\n    toggle,\n    close,\n    behavior\n  }\n}\n","// React\nimport React, { Fragment, useMemo } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BDatePicker, { HostStyles } from './styles'\n\n// Libraries\nimport { faCalendar as falCalendar, faChevronRight as falChevronRight } from '@fortawesome/pro-light-svg-icons'\n\n// Hooks\nimport { useOrm, shallowEqual } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useDatePicker } from './hooks'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { isLocationInputEnabled, isDaySelectable, isTimeSelectable } from 'ui/components/Picker/utils'\n\nconst getLabelKey = (pricingEnabled, availabilityEnabled) => {\n  if (pricingEnabled && availabilityEnabled) {\n    return 'user.store.view_prices_and_availability'\n  }\n\n  if (pricingEnabled && !availabilityEnabled) {\n    return 'user.store.view_prices'\n  }\n\n  if (!pricingEnabled && availabilityEnabled) {\n    return 'user.store.view_availability'\n  }\n}\n\nconst Button = () => {\n  const openingHours = useOpeningHours()\n\n  const cartId = useSelector((state) => state.client.cartId)\n\n  const cart = useOrm('carts', (carts) => {\n    return carts.getById(cartId || window.booqableOptions.cart?.id)\n  })\n  const locations = useOrm('locations', (locations) => {\n    return {\n      count: locations.size(),\n      start: locations.getById(cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId),\n      stop: locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart?.stopLocationId)\n    }\n  }, shallowEqual)\n\n  const useTimes = useSettings('store.use_times')\n  const useAMOrPM = useSettings('dates.use_am_pm')\n  const isPricingEnabled = useSettings('pricing.enabled')\n  const isAvailabilityEnabled = useSettings('store.use_availability')\n\n  const { toggle } = useDatePicker()\n\n  const dates = {\n    start: cart?.starts_at ?? window.booqableOptions.cart?.from,\n    stop: cart?.stops_at ?? window.booqableOptions.cart?.till\n  }\n\n  const isDelivery = cart?.data?.fulfillment_type === 'delivery'\n\n  const isStartValid = useMemo(\n    () =>\n      isDaySelectable({\n        type: 'start',\n        openingHours,\n        date: dates.start,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }) &&\n      isTimeSelectable({\n        type: 'start',\n        openingHours,\n        date: dates.start,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }),\n    [dates.start, dates.stop, openingHours]\n  )\n\n  const isStopValid = useMemo(\n    () =>\n      isDaySelectable({\n        type: 'stop',\n        openingHours,\n        date: dates.stop,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }) &&\n      isTimeSelectable({\n        type: 'stop',\n        openingHours,\n        date: dates.stop,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }),\n    [dates.start, dates.stop, openingHours]\n  )\n\n  const { t } = useTranslation('user')\n\n  const hasLocations = locations.count > 1 && (isLocationInputEnabled('start') || isLocationInputEnabled('stop'))\n  const hasData = hasLocations ?\n    !!dates.start && !!dates.stop && !!locations.start && !!locations.stop :\n    !!dates.start && !!dates.stop\n\n  let timeFormat = ''\n\n  if (useTimes) {\n    timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n  }\n\n  const labelKey = getLabelKey(isPricingEnabled, isAvailabilityEnabled)\n\n  if (!cart) return null\n\n  if (!hasData) {\n    return (\n      <Fragment>\n        <HostStyles />\n        <BDatePicker>\n          <BDatePicker.Cleanstate onClick={() => toggle(true)}>\n            <BDatePicker.CalendarIcon icon={falCalendar} />\n            <BDatePicker.CleanstateLabels>\n              <BDatePicker.CleanstateTitle>{t('user.store.select_a_period')}</BDatePicker.CleanstateTitle>\n              <BDatePicker.CleanstateLabel>{labelKey ? t(labelKey) : '...'}</BDatePicker.CleanstateLabel>\n            </BDatePicker.CleanstateLabels>\n            <BDatePicker.ChevronIcon icon={falChevronRight} />\n          </BDatePicker.Cleanstate>\n        </BDatePicker>\n      </Fragment>\n    )\n  }\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <BDatePicker>\n        <BDatePicker.Wrapper onClick={() => toggle(true)} hasLocations={hasLocations}>\n          <BDatePicker.SectionGroup>\n            <BDatePicker.Section>\n              <BDatePicker.Label>{isDelivery ? t('user.store.timeslot_from') : t('user.store.start_date')}</BDatePicker.Label>\n              <BDatePicker.Value isPlaceholder={!dates.start} isValid={isStartValid}>\n                {dates.start && (\n                  <Fragment>\n                    {FormatUtils.date(dates.start, 'MMM D[,] YYYY')}\n                    {useTimes && FormatUtils.date(dates.start, timeFormat)}\n                  </Fragment>\n                )}\n                {!dates.start && t('user.store.pick_date')}\n              </BDatePicker.Value>\n            </BDatePicker.Section>\n            <BDatePicker.Section>\n              <BDatePicker.Label>{isDelivery ? t('user.store.timeslot_until') : t('user.store.stop_date')}</BDatePicker.Label>\n              <BDatePicker.Value isPlaceholder={!dates.stop} isValid={isStopValid}>\n                {dates.stop && (\n                  <Fragment>\n                    {FormatUtils.date(dates.stop, 'MMM D[,] YYYY')}\n                    {useTimes && FormatUtils.date(dates.stop, timeFormat)}\n                  </Fragment>\n                )}\n                {!dates.stop && t('user.store.pick_date')}\n              </BDatePicker.Value>\n            </BDatePicker.Section>\n          </BDatePicker.SectionGroup>\n          {hasLocations && !isDelivery && (\n            <BDatePicker.SectionGroup>\n              <BDatePicker.Section>\n                <BDatePicker.Label>{t('user.store.start_location')}</BDatePicker.Label>\n                <BDatePicker.Value isPlaceholder={!locations.start} isValid>\n                  {locations.start?.name ?? t('user.store.start_location')}\n                </BDatePicker.Value>\n              </BDatePicker.Section>\n              <BDatePicker.Section>\n                <BDatePicker.Label>{t('user.store.stop_location')}</BDatePicker.Label>\n                <BDatePicker.Value isPlaceholder={!locations.stop} isValid>\n                  {locations.stop?.name ?? t('user.store.stop_location')}\n                </BDatePicker.Value>\n              </BDatePicker.Section>\n            </BDatePicker.SectionGroup>\n          )}\n        </BDatePicker.Wrapper>\n      </BDatePicker>\n    </Fragment>\n  )\n}\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme\n)(Button)\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\n\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    /* Colors */\n    --date-picker-icon-color: var(--color-accent-foreground, #ffffff);\n    --date-picker-background-color: var(--color-white, #ffffff);\n    --date-picker-text-color: var(--color-typo, #0c2747);\n    --date-picker-border-color: var(--color-accent-background, #395db8);\n    --date-picker-error-color: var(--color-red, #f85454);\n\n    /* Sizes */\n    --date-picker-wrapper-padding: 0.5rem;\n    --date-picker-text-size: 1.125rem;\n    --date-picker-text-weight: 600;\n    --date-picker-text-line-height: 1.75rem;\n    --date-picker-border-radius: 0.5rem;\n  }\n`\n\nconst DatePicker = styled.div`\n  * {\n    margin: 0;\n    padding: 0;\n    box-sizing: border-box;\n  }\n\n  font-family: var(--font-body);\n`\n\nconst Icon = styled(FontAwesomeIcon)`\n  max-width: 14px;\n  width: 100%;\n\n  color: var(--date-picker-icon-color);\n`\n\nconst CalendarIcon = styled(Icon)`\n  max-height: 24px;\n\n  margin-right: 12px;\n`\n\nconst Wrapper = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: auto;\n  width: 512px;\n  max-width: 100%;\n\n  background-color: var(--date-picker-background-color);\n\n  padding: var(--date-picker-wrapper-padding);\n\n  border: 1px solid var(--date-picker-border-color);\n\n  border-radius: var(--date-picker-border-radius);\n\n  cursor: pointer;\n\n  @media (max-width: 820px) {\n    width: 100%;\n  }\n`\n\nconst WrapperWithData = styled(Wrapper)`\n  @media (max-width: 426px) {\n    flex-direction: column;\n    align-items: start;\n  }\n`\n\nconst Text = styled.div`\n  font-size: var(--date-picker-text-size);\n  line-height: var(--date-picker-text-line-height);\n  font-weight: var(--date-picker-text-weight);\n\n  color: var(--date-picker-text-color);\n`\n\nconst ExpandedTitle = styled.span`\n  @media (max-width: 426px) {\n    display: none;\n  }\n`\n\nconst Location = styled(Text)`\n  border-right: 1px solid var(--date-picker-border-color);\n  padding-right: 12px;\n  margin-right: 12px;\n\n  @media (max-width: 426px) {\n    border-right: 0px none;\n    padding-right: 0px;\n    margin-right: 0px;\n  }\n`\n\nconst Dates = styled(Text)`\n  ${({ isValid }) => !isValid && css`\n    color: var(--date-picker-error-color);\n  `}\n\n  @media (max-width: 426px) {\n    font-weight: 400;\n  }\n`\n\nDatePicker.Wrapper = Wrapper\nDatePicker.WrapperWithData = WrapperWithData\nDatePicker.CalendarIcon = CalendarIcon\nDatePicker.Text = Text\nDatePicker.ExpandedTitle = ExpandedTitle\nDatePicker.Location = Location\nDatePicker.Dates = Dates\n\nexport default DatePicker\n","// React\nimport React, { Fragment, useMemo } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BDatePicker, { HostStyles } from './styles-next'\n\n// Libraries\nimport { faCalendar as farCalendar } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useOrm, shallowEqual } from 'shared/utils/useOrm'\nimport { useOpeningHours } from 'shared/utils/useOpeningHours'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useDatePicker } from './hooks'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { isLocationInputEnabled, isDaySelectable, isTimeSelectable } from 'ui/components/Picker/utils'\n\nconst getLabelKey = (pricingEnabled, availabilityEnabled) => {\n  if (pricingEnabled && availabilityEnabled) {\n    return 'user.store.view_prices_and_availability'\n  }\n\n  if (pricingEnabled && !availabilityEnabled) {\n    return 'user.store.view_prices'\n  }\n\n  if (!pricingEnabled && availabilityEnabled) {\n    return 'user.store.view_availability'\n  }\n}\n\nconst ButtonNext = () => {\n  const openingHours = useOpeningHours()\n\n  const cartId = useSelector((state) => state.client.cartId)\n\n  const cart = useOrm('carts', (carts) => {\n    return carts.getById(cartId || window.booqableOptions.cart?.id)\n  })\n  const locations = useOrm('locations', (locations) => {\n    return {\n      count: locations.size(),\n      start: locations.getById(cart?.start_location_id ?? window.booqableOptions.cart?.startLocationId),\n      stop: locations.getById(cart?.stop_location_id ?? window.booqableOptions.cart?.stopLocationId)\n    }\n  }, shallowEqual)\n\n  const useTimes = useSettings('store.use_times')\n  const useAMOrPM = useSettings('dates.use_am_pm')\n  const isPricingEnabled = useSettings('pricing.enabled')\n  const isAvailabilityEnabled = useSettings('store.use_availability')\n\n  const { toggle } = useDatePicker()\n\n  const dates = {\n    start: cart?.starts_at ?? window.booqableOptions.cart?.from,\n    stop: cart?.stops_at ?? window.booqableOptions.cart?.till\n  }\n\n  const isDelivery = cart?.data?.fulfillment_type === 'delivery'\n\n  const isStartValid = useMemo(\n    () =>\n      isDaySelectable({\n        type: 'start',\n        openingHours,\n        date: dates.start,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }) &&\n      isTimeSelectable({\n        type: 'start',\n        openingHours,\n        date: dates.start,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }),\n    [dates.start, dates.stop, openingHours]\n  )\n\n  const isStopValid = useMemo(\n    () =>\n      isDaySelectable({\n        type: 'stop',\n        openingHours,\n        date: dates.stop,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }) &&\n      isTimeSelectable({\n        type: 'stop',\n        openingHours,\n        date: dates.stop,\n        values: {\n          starts_at: dates.start,\n          stops_at: dates.stop\n        }\n      }),\n    [dates.start, dates.stop, openingHours]\n  )\n\n  const { t } = useTranslation('user')\n\n  const hasLocations = locations.count > 1 && (isLocationInputEnabled('start') || isLocationInputEnabled('stop'))\n  const hasData = hasLocations ?\n    !!dates.start && !!dates.stop && !!locations.start && !!locations.stop :\n    !!dates.start && !!dates.stop\n\n  let timeFormat = ''\n\n  if (useTimes) {\n    timeFormat = useAMOrPM ? ' hh:mm A' : ' HH:mm'\n  }\n\n  const labelKey = getLabelKey(isPricingEnabled, isAvailabilityEnabled)\n\n  if (!cart) return null\n\n  if (!hasData) {\n    return (\n      <Fragment>\n        <HostStyles />\n        <BDatePicker>\n          <BDatePicker.Wrapper onClick={() => toggle(true)}>\n            <BDatePicker.CalendarIcon icon={farCalendar} />\n            <BDatePicker.Text>\n              {t('user.store.select_a_period')}\n              {labelKey && <BDatePicker.ExpandedTitle>; {t(labelKey)}</BDatePicker.ExpandedTitle>}\n            </BDatePicker.Text>\n          </BDatePicker.Wrapper>\n        </BDatePicker>\n      </Fragment>\n    )\n  }\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <BDatePicker>\n        <BDatePicker.WrapperWithData onClick={() => toggle(true)}>\n          {hasLocations && !isDelivery && (\n            <BDatePicker.Location>\n              {locations.start?.name ?? t('user.store.start_location')}\n            </BDatePicker.Location>\n          )}\n          <BDatePicker.Dates isValid={isStartValid && isStopValid}>\n            {dates.start && (\n              <Fragment>\n                {FormatUtils.date(dates.start, 'MMM D[,] YYYY')}\n                {useTimes && FormatUtils.date(dates.start, timeFormat)}\n              </Fragment>\n            )}\n            &nbsp;-&nbsp;\n            {dates.stop && (\n              <Fragment>\n                {FormatUtils.date(dates.stop, 'MMM D[,] YYYY')}\n                {useTimes && FormatUtils.date(dates.stop, timeFormat)}\n              </Fragment>\n            )}\n          </BDatePicker.Dates>\n        </BDatePicker.WrapperWithData>\n      </BDatePicker>\n    </Fragment>\n  )\n}\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme\n)(ButtonNext)\n\nexport default decoratedComponent\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Button from './Button'\nimport ButtonNext from './ButtonNext'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\n\nconst DatePicker = ({ version }) => {\n  return version === 'next' ? <ButtonNext /> : <Button />\n}\n\nDatePicker.propTypes = {\n  version: PropTypes.string\n}\n\nregisterCustomElement('bq-date-picker', DatePicker, {\n  attributes: ['version']\n})\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { useSelector } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { ModalCartPicker } from 'store/modules/cart/CartPicker/Modal'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useDatePicker } from './hooks'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useIsMobile } from 'shared/utils/useIsMobile'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\n\nconst Modal = () => {\n  const { isOpen, toggle, close } = useDatePicker()\n\n  const cartId = useSelector((state) => state.client.cartId)\n  const cart = useOrm('carts', (carts) => carts.getById(cartId || window.booqableOptions.cart?.id))\n  const brandingColor = useSettings('store.brand_color')\n\n  const isMobile = useIsMobile()\n\n  const { t } = useTranslation('user')\n\n  const handleSave = () => {\n    toggle(false)\n  }\n\n  if (!cart) return null\n\n  return (\n    <ModalCartPicker\n      open={isOpen}\n      cart={cart}\n      onClose={close}\n      onSaveCallback={handleSave}\n      direction={isMobile ? 'vertical' : 'horizontal'}\n      brandingColor={brandingColor}\n      title={t('user.store.cart_title')}\n    />\n  )\n}\n\nModal.displayName = 'DatePickerModal'\n\nModal.propTypes = {\n  cart: PropTypes.object,\n  open: PropTypes.bool,\n  onClose: PropTypes.func,\n  brandingColor: PropTypes.string,\n  t: PropTypes.func\n}\n\nconst decoratedComponent = compose(withStore, withTheme)(Modal)\n\nregisterCustomElement('bq-date-picker-modal', decoratedComponent, {\n  styleSheetTarget: document.body\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport BButton from 'ui/blocks/Button'\n\nexport const HostStyles = createGlobalStyle`\n  :host, :root {\n    --minicart-accent-color: var(--color-accent-background, ${color('branding')});\n    --minicart-accent-text-color: var(--color-accent-foreground, ${color('white')});\n    --minicart-accent-outline: var(--color-outline, ${color('Text/Primary')});\n    --minicart-typo-color: var(--color-primary-foreground, ${color('Text/Primary')});\n    --minicart-background-color: var(--color-primary-background, ${color('white')});\n    --minicart-header-color: var(--color-accent-foreground, ${color('white')});\n    --minicart-warning-color: ${color('Danger/Base')};\n    /* Use HEX with alpha to get background colour */\n    --minicart-warning-background-color: ${color('Danger/Base')}22;\n    --minicart-border-radius: var(--border-radius-sm, 8px);\n    --minicart-border-color: var(--color-border, ${color('Misc/Divider')});\n    --minicart-padding: var(--horizontal-padding, 16px);\n    --minicart-image-width: 56px;\n    --minicart-z-index: 9999;\n\n    --minicart-font: var(--font-body, Source Sans Pro, sans-serif);\n    --minicart-font-size: 14px;\n    --minicart-font-weight-normal: 400;\n    --minicart-font-weight-bold: 600;\n  }\n`\n\nexport const MiniCart = styled.div`\n  position: fixed;\n\n  top: 0;\n  right: 0;\n\n  display: none;\n  flex-direction: column;\n\n  height: 100%;\n  width: 100%;\n\n  min-height: 440px;\n  min-width: 300px;\n\n  background: var(--minicart-background-color);\n  color: var(--minicart-typo-color);\n\n  border-radius: var(--minicart-border-radius);\n  box-shadow: 0 5px 40px rgba(0,0,0,0.16)!important;\n\n  transition: all 100ms ease-in;\n\n  overflow: hidden;\n  overscroll-behavior: none;\n  pointer-events: auto;\n\n  font-family: var(--minicart-font);\n  font-size: var(--minicart-font-size);\n\n  ${({ open }) => open && css`\n    display: flex;\n  `}\n\n  ${({ portal }) => portal && css`\n    position: relative;\n    width: 380px;\n    height: 780px;\n    max-height: 80vh;\n    bottom: 0;\n    right: 0;\n  `}\n\n  svg {\n    height: 1em;\n  }\n\n  z-index: var(--minicart-z-index);\n`\n\nexport const Head = styled.div`\n  border-radius: var(--minicart-border-radius) var(--minicart-border-radius) 0 0;\n  width: 100%;\n  z-index: 1;\n\n  background: var(--minicart-accent-color);\n  color: var(--minicart-header-color);\n\n  p {\n    margin: 0;\n    color: var(--minicart-header-color);\n  }\n\n`\n\nexport const Close = styled.a`\n  cursor: pointer;\n\n  position: absolute;\n  right: 0;\n  top: 0;\n\n  padding: var(--minicart-padding);\n`\n\nexport const Title = styled.div`\n  position: relative;\n\n  display: flex;\n  justify-content: space-between;\n\n  padding: var(--minicart-padding);\n\n  border-top-right-radius: var(--mincart-border-radius);\n  border-top-left-radius: var(--mincart-border-radius);\n\n  z-index: 2;\n`\n\nexport const Lines = styled.div`\n  position: relative;\n\n  flex-grow: 1;\n\n  width: 100%;\n\n  overflow-x: hidden;\n  overflow-y: auto;\n\n  overscroll-behavior: none;\n\n  z-index: 0;\n\n  & > ul {\n    list-style: none;\n    margin: 0;\n    margin-block-start: 0;\n    margin-block-end: 0;\n    padding-inline: 0;\n  }\n`\n\nexport const Notice = styled.div`\n  display: flex;\n\n  align-items: center;\n\n  gap: var(--minicart-padding);\n\n  padding: var(--minicart-padding);\n  margin: var(--minicart-padding);\n  margin-bottom: 0;\n\n  background: var(--minicart-warning-background-color);\n  color: var(--minicart-warning-color);\n\n  font-size: var(--minicart-font-size);\n\n  border-radius: var(--minicart-border-radius);\n\n  ${({ inSummary }) => inSummary && css`\n    margin-left: 0;\n    margin-right: 0;\n    margin-top: 0.8em;\n  `}\n`\n\nexport const Cleanstate = styled.div`\n  margin-top: 50%;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column;\n\n  text-align: center;\n\n\n  font-size: 1.1em;\n  line-height: 1.6em;\n\n  gap: var(--minicart-padding);\n\n  ${BButton} button {\n    background-color: var(--minicart-accent-color) !important;\n  }\n\n  svg {\n    color: var(--minicart-accent-color);\n    fill: var(--minicart-accent-color);\n  }\n`\n\nexport const Summary = styled.div`\n  position: relative;\n\n  width: 100%;\n  padding: var(--minicart-padding) 0;\n  border-top: 1px solid var(--minicart-border-color);\n\n  background: var(--minicart-background-color);\n\n  box-shadow: 0px -4px 12px rgba(33, 59, 71, 0.12);\n  box-sizing: border-box;\n\n  z-index: 3;\n`\n\nexport const Detail = styled.div`\n  font-size: var(--minicart-font-size);\n  line-height: 1.4em;\n\n  ${({ bold }) => bold && css`\n    font-weight: var(--minicart-font-weight-bold);\n  `}\n`\n\nexport const Amount = styled.span`\n  float: right;\n`\n\nexport const PoweredBy = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  width: 100%;\n\n  padding-top: 16px;\n\n  svg {\n    filter: grayscale(100%);\n\n    #icon {\n      fill: var(--minicart-typo-color);\n    }\n  }\n\n  &:hover {\n    svg {\n      filter: grayscale(0);\n    }\n  }\n\n  a {\n    display: flex;\n    align-items: center;\n\n    gap: 12px;\n\n    font-size: 12px;\n    color: var(--minicart-typo-color);\n\n    opacity: 0.8;\n\n    text-decoration: none;\n    line-height: 20px;\n\n    &:hover, &:active {\n      opacity: 1;\n    }\n  }\n`\n\nexport const Button = styled.button`\n  display: block;\n  width: 100%;\n\n  padding: 0.75em;\n\n  border: none;\n  border-radius: var(--minicart-border-radius);\n  text-align: center;\n\n  font-size: var(--minicart-font-size);\n  font-weight: var(--minicart-font-weight-bold);\n\n  text-decoration: none;\n  cursor: pointer;\n\n  background: var(--minicart-accent-color);\n  color: var(--minicart-accent-text-color);\n  border: 1px solid;\n  border-color: var(--minicart-accent-color);\n\n  ${({ invert }) => invert && css`\n    border-color: var(--minicart-accent-outline);\n    color: var(--minicart-accent-outline);\n    background: var(--minicart-background-color);\n  `}\n\n  ${({ disabled }) => disabled && css`\n    opacity: 0.5;\n    pointer-events: none;\n  `}\n`\n\nexport const CheckoutButtons = styled.div`\n  display: flex;\n  align-items: center;\n\n  padding: 0 var(--minicart-padding);\n\n  gap: var(--minicart-padding);\n\n  margin-top: 0.8em;\n\n  span {\n    width: 100%;\n  }\n`\n\nexport const CheckoutTotals = styled.div`\n  padding: 0 var(--minicart-padding);\n`\n\nMiniCart.Head = Head\nMiniCart.Title = Title\nMiniCart.Lines = Lines\nMiniCart.Summary = Summary\nMiniCart.Detail = Detail\nMiniCart.Amount = Amount\nMiniCart.Close = Close\nMiniCart.Cleanstate = Cleanstate\nMiniCart.PoweredBy = PoweredBy\nMiniCart.CheckoutButtons = CheckoutButtons\nMiniCart.CheckoutTotals = CheckoutTotals\nMiniCart.Button = Button\nMiniCart.Notice = Notice\n\nexport default MiniCart\n","import styled, { css } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const Line = styled.div`\n  position: relative;\n\n  padding: var(--minicart-padding);\n\n  font-size: var(--minicart-font-size);\n\n  border-bottom: 1px solid var(--minicart-border-color);\n\n  z-index: 2;\n\n  &:last-child {\n    border-bottom: 0;\n    /* Extra margin so you can always see the last item  */\n    /* without overlapping with the services/powered by */\n    margin-bottom: 90px;\n  }\n`\n\nexport const Remove = styled.a`\n  cursor: pointer;\n`\n\nexport const Image = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  width: var(--minicart-image-width);\n  height: var(--minicart-image-width);\n\n  & > ${FocalImage} {\n    width: var(--minicart-image-width);\n    height: var(--minicart-image-width);\n\n    border-radius: var(--minicart-border-radius);\n  }\n\n  & > span {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n\n    width: var(--minicart-image-width);\n    height: var(--minicart-image-width);\n\n    background: var(--color-image-placeholder, #fbfdfc);\n    border: 1px solid  var(--minicart-border-color);\n    border-radius: var(--minicart-border-radius);\n  }\n`\n\nexport const Quantity = styled.div`\n  display: flex;\n\n  align-items: center;\n\n  line-height: 1.4em;\n\n  user-select: none;\n\n  /* Quantity number */\n  & > span {\n    display: flex;\n    justify-content: center;\n    align-items: center;\n\n    width: 3.4em;\n    height: 2.4em;\n\n    border-top: 1px solid var(--minicart-border-color);\n    border-bottom: 1px solid var(--minicart-border-color);\n  }\n`\n\nexport const QuantityButton = styled.a`\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  width: 2.4em;\n  height: 2.4em;\n\n  border: 1px solid var(--minicart-border-color);\n\n  cursor: pointer;\n\n  svg {\n    opacity: 60%;\n  }\n\n  &:hover, &:active {\n    svg {\n      opacity: 100%;\n    }\n  }\n`\n\nexport const ProductName = styled.div`\n  font-weight: var(--minicart-font-weight-bold);\n  line-height: 1.4em;\n\n  ${({ large }) => large && css`\n    font-size: calc(1em + 1px);\n    margin-bottom: 1.2em;\n  `}\n`\n\nexport const Details = styled.div`\n  display: flex;\n\n  gap: 0.85em;\n\n  & > div:not(${Image}) {\n    width: 100%;\n  }\n`\n\nexport const StatusIndicator = styled.span`\n  margin-top: 0.3em;\n\n  font-size: 0.85em;\n  line-height: 1.2em;\n\n  color: var(--color-primary-foreground);\n\n  &::before {\n    display: inline-block;\n    content: '';\n\n    width: 0.7em;\n    height: 0.7em;\n\n    margin-right: 0.3em;\n\n    border-radius: 100%;\n\n    ${({ available }) => available ?\n      css`\n        background: ${color('Success/Base')};\n      ` :\n      css`\n        background: ${color('Danger/Base')};\n      `}\n  }\n`\n\nexport const Price = styled.div`\n  display: flex;\n  align-items: center;\n\n  p {\n    align-self: center;\n    font-weight: var(--minicart-font-weight-bold);\n  }\n\n  svg {\n    margin-right: 0.5em;\n  }\n`\n\nexport const DetailContainer = styled.div`\n  display: flex;\n  justify-content: space-between;\n\n  ${({ center }) => center && css`\n    align-items: center;\n  `}\n\n  &:last-child {\n    margin-top: calc(var(--minicart-padding) / 2);\n  }\n`\n\nexport const BundleContents = styled.div`\n  margin-top: var(--minicart-padding);\n`\n\nexport const BundleContentsTitle = styled.div`\n  cursor: pointer;\n\n  & > span {\n    margin-right: 0.5em;\n  }\n`\n\nexport const BundleContentsItem = styled.div`\n  display: flex;\n  align-items: center;\n\n  gap: calc(var(--minicart-padding) / 2);\n  margin-top: calc(var(--minicart-padding) / 2);\n\n  ${Image} {\n    width: calc(var(--minicart-image-width) / 2);\n    height: calc(var(--minicart-image-width) / 2);\n\n    ${FocalImage} {\n      width: calc(var(--minicart-image-width) / 2);\n      height: calc(var(--minicart-image-width) / 2);\n      border-radius: calc(var(--minicart-border-radius) / 2);\n    }\n\n    span {\n      width: calc(var(--minicart-image-width) / 2);\n      height: calc(var(--minicart-image-width) / 2);\n      border-radius: calc(var(--minicart-border-radius) / 2);\n    }\n  }\n`\n\nexport const BundleContentsQuantity = styled.div`\n  /* TODO: Get this color somewhere else */\n  color: ${color('Text/Secondary')};\n`\n\nLine.Remove = Remove\nLine.Quantity = Quantity\nLine.QuantityButton = QuantityButton\nLine.ProductName = ProductName\nLine.Details = Details\nLine.StatusIndicator = StatusIndicator\nLine.Image = Image\nLine.Price = Price\nLine.DetailContainer = DetailContainer\nLine.BundleContents = BundleContents\nLine.BundleContentsTitle = BundleContentsTitle\nLine.BundleContentsItem = BundleContentsItem\nLine.BundleContentsQuantity = BundleContentsQuantity\n\nexport default Line\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport BLine from 'shop-components/components/MiniCart/styles/Line'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nconst BundleItem = ({ product, photo, quantity }) => {\n  if (!product) return null\n\n  return (\n    <BLine.BundleContentsItem>\n      <BLine.Image>\n        <FocalImage coordinates={photo?.coordinates ?? { x: 0, y: 0 }} url={photo?.url ?? NO_PRODUCT_IMAGE} />\n      </BLine.Image>\n      <BLine.BundleContentsQuantity>{quantity}x</BLine.BundleContentsQuantity>\n      <div>{product.name}</div>\n    </BLine.BundleContentsItem>\n  )\n}\n\nBundleItem.displayName = 'BundleItem'\n\nBundleItem.propTypes = {\n  product: PropTypes.object,\n  photo: PropTypes.object,\n  quantity: PropTypes.number\n}\n\nconst mapStateToProps = (state, props) => {\n  const product = state.orm.products.getById(props.id)\n  const photo = state.orm.photos.getById(product?.photo_id)\n\n  return {\n    product,\n    photo\n  }\n}\n\nexport default reduxConnect(mapStateToProps)(BundleItem)\n","// React\nimport React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n  faChevronDown as farChevronDown,\n  faChevronUp as farChevronUp,\n  faSpinnerThird as farSpinnerThird\n} from '@fortawesome/pro-regular-svg-icons'\n\n// Components\nimport BLine from 'shop-components/components/MiniCart/styles/Line'\nimport BundleItem from './BundleItem'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ItemActions from 'back_office/v2/redux/actions/item_actions'\n\nexport const BundleContents = ({ line, fetchItems, t }) => {\n  const [open, setOpen] = useState(false)\n  const [loading, setLoading] = useState(false)\n  const [loaded, setLoaded] = useState(false)\n\n  const handleToggleOpen = () => {\n    if (!loaded && !open) {\n      setLoading(true)\n\n      fetchItems(line.items.map((item) => item.item_id))\n        .then(() => {\n          setOpen(true)\n          setLoaded(true)\n        })\n        .finally(() => {\n          setLoading(false)\n        })\n\n      return\n    }\n\n    setOpen((prev) => !prev)\n  }\n\n  return (\n    <BLine.BundleContents>\n      <BLine.BundleContentsTitle onClick={handleToggleOpen}>\n        {t('user.store.bundle_contents')}\n        {' '}\n        {line.items?.length > 0 && <span>({line.items.length})</span>}\n        {!loading && <FontAwesomeIcon icon={open ? farChevronUp : farChevronDown} />}\n        {loading && <FontAwesomeIcon icon={farSpinnerThird} spin />}\n      </BLine.BundleContentsTitle>\n      {open && line.items.map(({ item_id: id, quantity }, index) => (\n        <BundleItem\n          key={`${id}-${index}`}\n          id={id}\n          quantity={quantity}\n        />\n      ))}\n    </BLine.BundleContents>\n  )\n}\n\nBundleContents.displayName = 'LineBundleContents'\n\nBundleContents.propTypes = {\n  line: PropTypes.object,\n  fetchItems: PropTypes.func,\n  t: PropTypes.func\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    fetchItems: (ids) => {\n      return ItemActions.fetchAll({\n        apiVersion: '4',\n        include: ['photo'],\n        filter: {\n          id: ids\n        },\n        page: {\n          size: 1000\n        }\n      })\n    }\n  }\n}\n\nexport default compose(reduxConnect(null, mapDispatchToProps), withTranslation('user'))(BundleContents)\n","// React\nimport React, { Fragment, useState, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport _debounce from 'lodash/debounce'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n  faCircleInfo as farCircleInfo,\n  faImage as farImage,\n  faMinus as farMinus,\n  faPlus as farPlus\n} from '@fortawesome/pro-regular-svg-icons'\nimport { faTimes as fasTimes } from '@fortawesome/pro-solid-svg-icons'\n\n// Components\nimport BundleContents from './BundleContents'\nimport BLine from 'shop-components/components/MiniCart/styles/Line'\nimport Tooltip from 'ui/components/Tooltip'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport Format from 'shared/utils/format'\nimport cartActions from 'store/v2/redux/actions/cart'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\n\nexport const Line = ({ line, useAvailability, hasDates, t, currency, showPrices, hideProductAvailabilityQuantities, updateLineQuantity }) => {\n  const [quantity, setQuantity] = useState(line.quantity || 1)\n  const [deleting, setDeleting] = useState(false)\n  const available = line.available_quantity >= quantity\n\n  useEffect(() => {\n    setQuantity(line.quantity)\n  }, [line])\n\n  const debouncedUpdateLineQuantity = useCallback(\n    window.testMode ? updateLineQuantity : _debounce(updateLineQuantity, 1500),\n    []\n  )\n\n  const handleRemoveLine = () => {\n    setDeleting(true)\n    updateLineQuantity(0)\n  }\n\n  const handleIncreaseQuantity = () => {\n    const newQuantity = quantity + 1\n\n    setQuantity(newQuantity)\n    debouncedUpdateLineQuantity(newQuantity)\n  }\n\n  const handleDecreaseQuantity = () => {\n    const newQuantity = quantity - 1\n\n    if (newQuantity <= 0) {\n      handleRemoveLine()\n    } else {\n      setQuantity(newQuantity)\n      debouncedUpdateLineQuantity(newQuantity)\n    }\n  }\n\n  if (line.line_type === 'delivery_rate') return null\n\n  return (\n    <BLine key={line.title}>\n      <BLine.Details>\n        <BLine.Image>\n          {line?.photo_url && (\n            <FocalImage url={line.photo_url} />\n          )}\n          {!line?.photo_url && (\n            <span>\n              <FontAwesomeIcon icon={farImage} size=\"lg\" />\n            </span>\n          )}\n        </BLine.Image>\n        <div>\n          <BLine.DetailContainer center>\n            <div>\n              <BLine.ProductName large={!useAvailability}>{line.title}</BLine.ProductName>\n              {hasDates && useAvailability && (\n                <BLine.StatusIndicator available={available}>\n                  {!hideProductAvailabilityQuantities && (\n                    <Fragment>\n                      <span>{line.available_quantity}</span> {t('user.store.available')}\n                    </Fragment>\n                  )}\n                  {hideProductAvailabilityQuantities && (\n                    <Fragment>\n                      {t(available ? 'user.store.available' : 'user.store.unavailable')}\n                    </Fragment>\n                  )}\n                </BLine.StatusIndicator>\n              )}\n            </div>\n            <BLine.Remove data-tid=\"Remove product\" onClick={deleting ? null : handleRemoveLine}>\n              <FontAwesomeIcon icon={fasTimes} />\n            </BLine.Remove>\n          </BLine.DetailContainer>\n          <BLine.DetailContainer>\n            <BLine.Quantity>\n              <BLine.QuantityButton onClick={deleting ? null : handleDecreaseQuantity}>\n                <FontAwesomeIcon icon={farMinus} />\n              </BLine.QuantityButton>\n              <span>{quantity}</span>\n              <BLine.QuantityButton onClick={handleIncreaseQuantity}>\n                <FontAwesomeIcon icon={farPlus} />\n              </BLine.QuantityButton>\n            </BLine.Quantity>\n            {showPrices && line.display_price_in_cents > 0 && (\n              <BLine.Price>\n                {showPrices && !line.discountable && (\n                  <Tooltip direction=\"bottom\" content={t('user.store.not_discountable_hint')}>\n                    <FontAwesomeIcon icon={farCircleInfo} />\n                  </Tooltip>\n                )}\n                <p>{Format.money(line.display_price_in_cents, currency)}</p>\n              </BLine.Price>\n            )}\n          </BLine.DetailContainer>\n        </div>\n      </BLine.Details>\n      {line.product_type === 'bundle' && <BundleContents line={line} />}\n    </BLine>\n  )\n}\n\nLine.propTypes = {\n  line: PropTypes.object,\n  useAvailability: PropTypes.bool,\n  hasDates: PropTypes.bool,\n  currency: PropTypes.object,\n  showPrices: PropTypes.bool,\n  hideProductAvailabilityQuantities: PropTypes.bool,\n  updateLineQuantity: PropTypes.func,\n  t: PropTypes.func\n}\n\nLine.displayName = 'Line'\n\nconst mapStateToProps = (state, props) => {\n  return {\n    currency: state.client.currency.toJS(),\n    useAvailability: state.settings.get('store.use_availability') && props.line.tracking_type !== 'none',\n    showPrices: state.settings.get('store.use_prices'),\n    hideProductAvailabilityQuantities: state.settings.get('store.hide_product_availability_quantities')\n  }\n}\n\nconst mapDispatchToProps = (_, props) => {\n  return {\n    updateLineQuantity: (quantity) => {\n      if (quantity < 0) {\n        return\n      }\n\n      return cartActions\n        .book({\n          item_id: props.line.item_id,\n          line_id: props.line.id,\n          quantity,\n          type: 'set'\n        })\n        .then(() => {\n          const quantityChange = quantity - props.line.quantity\n\n          triggerUserFrameworkBookEvent(props.line.item_id, quantityChange)\n        })\n    }\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Line)\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\n\n// Components\nimport BMiniCart from 'shop-components/components/MiniCart/styles'\nimport Button from 'ui/components/Button'\nimport Line from './Line'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n  faTriangleExclamation as farTriangleExclamation,\n  faSpinnerThird as farSpinnerThird\n} from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport clientActions from 'store/v2/redux/actions/client'\n\nexport const Lines = ({ hasDates, cannotCheckout, lines, toggleCart, showPoweredBy, loading, t }) => {\n  useEffect(() => {\n    return () => {\n      clientActions.setCartScroll(0)\n    }\n  }, [])\n\n  return (\n    <Fragment>\n      {hasDates && cannotCheckout && (\n        <BMiniCart.Notice>\n          <FontAwesomeIcon icon={farTriangleExclamation} size=\"lg\" />\n          {t('user.store.not_all_products_available')}\n        </BMiniCart.Notice>\n      )}\n      {lines.size() > 0 && !loading && (\n        <ul>\n          <li>\n            {lines.map((line) => {\n              return <Line key={line.id} line={line} hasDates={hasDates} />\n            })}\n          </li>\n        </ul>\n      )}\n      {!lines.size() && (\n        <BMiniCart.Cleanstate>\n          {loading && (\n            <FontAwesomeIcon icon={farSpinnerThird} spin />\n          )}\n          {!loading && (\n            <Fragment>\n              {t('user.store.cart_empty')}\n              <Button onClick={toggleCart.bind(null, false)} size=\"sm\">\n                {t('user.store.continue_shopping')}\n              </Button>\n            </Fragment>\n          )}\n        </BMiniCart.Cleanstate>\n      )}\n      {lines.size() === 0 && showPoweredBy && (\n        <BMiniCart.PoweredBy cleanstate>\n          <PoweredBy logoWidth=\"24px\" />\n        </BMiniCart.PoweredBy>\n      )}\n    </Fragment>\n  )\n}\n\nLines.displayName = 'Lines'\nLines.propTypes = {\n  hasDates: PropTypes.bool,\n  cannotCheckout: PropTypes.bool,\n  lines: PropTypes.object,\n  toggleCart: PropTypes.func,\n  showPoweredBy: PropTypes.bool,\n  loading: PropTypes.bool,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const { cartOpen } = state.client\n\n  return {\n    cartOpen,\n    lines: state.orm.lines.getAll({ id: props.cart?.lines }).filter(({ product_type: type }) => type !== 'service'),\n    showPoweredBy: state.settings.get('store.show_powered_by')\n  }\n}\n\nexport default compose(\n  withTranslation('user'),\n  reduxConnect(mapStateToProps)\n)(Lines)\n","import styled from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Icon from 'ui/blocks/Icon'\n\nexport const Period = styled.div`\n  cursor: pointer;\n\n  ${Icon} {\n    font-size: 12px;\n    margin: 0 ${size('margin', 'xs')};\n\n    &:last-child {\n      margin-right: 0;\n    }\n  }\n`\n\nexport const Details = styled.div`\n  display: flex;\n  flex-flow: row nowrap;\n\n  align-items: center;\n\n  gap: ${size('margin', 'sm')};\n\n  font-size: 14px;\n  text-align: left;\n`\n\nexport const Detail = styled.div`\n  flex: 1;\n\n  &:last-child {\n    text-align: right;\n  }\n`\n\nexport const Location = styled.p`\n  font-size: 12px !important;\n  line-height: 16px;\n  font-weight: 400 !important;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n`\n\nexport const DateTime = styled.p`\n  font-size: 13px !important;\n  line-height: 16px;\n  font-weight: 600 !important;\n\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  &:first-letter {\n    text-transform: uppercase;\n  }\n`\n\nexport const ChoosePeriod = styled.p`\n  width: 100%;\n`\n\nexport const Dates = styled.div`\n  width: calc(100% - var(--minicart-padding) * 2);\n\n  padding: 14px !important;\n\n  font-size: 12px !important;\n  line-height: 16px !important;\n  text-align: center;\n\n  background: rgba(0, 0, 0, 0.16);\n  border-radius: 8px;\n`\n\nconst DatesBase = styled.div`\n  position: relative;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  padding-bottom: var(--minicart-padding);\n`\n\nexport const WithDates = styled(DatesBase)`\n  ${Icon} {\n    line-height: 16px;\n    align-self: flex-start;\n\n    &:last-child {\n      position: absolute;\n\n      top: 50%;\n      right: ${size('padding', 'md')};\n\n      transform: translateY(-50%);\n    }\n  }\n`\n\nexport const NoDates = styled(DatesBase)`\n  ${Icon} {\n    &:last-child {\n      position: absolute;\n\n      top: 50%;\n      right: ${size('padding', 'md')};\n\n      transform: translateY(-50%);\n    }\n  }\n`\n\nexport const Placeholder = styled.p`\n  font-size: 14px !important;\n`\n\nPeriod.Dates = Dates\nPeriod.Details = Details\nPeriod.Detail = Detail\nPeriod.Location = Location\nPeriod.DateTime = DateTime\nPeriod.NoDates = NoDates\nPeriod.WithDates = WithDates\nPeriod.ChoosePeriod = ChoosePeriod\nPeriod.Placeholder = Placeholder\n\nexport default Period\n","// React\nimport React, { useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BPeriod from '../styles/Period'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faArrowRight as farArrowRight } from '@fortawesome/pro-regular-svg-icons'\n\n// Libraries\nimport { withTranslation } from 'shared/utils/withTranslation'\n\n// Shared\n\nimport Format from 'shared/utils/format'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nexport const Period = ({\n  autoOpenedModal,\n  onAutoModal,\n  hasDates,\n  open,\n  modalOpen,\n  openDatePicker,\n  cart,\n  locations,\n  useTimes,\n  t,\n  timeFormat\n}) => {\n  useEffect(() => {\n    if (!autoOpenedModal && open && !hasDates && !modalOpen) {\n      onAutoModal(() => {\n        openDatePicker()\n      })\n    }\n  }, [autoOpenedModal, open, hasDates, modalOpen])\n\n  const handleOpenModal = () => {\n    openDatePicker()\n  }\n\n  const hasLocations = locations.size() > 1\n\n  return (\n    <BPeriod data-tid=\"Select dates\" onClick={handleOpenModal}>\n      {hasDates && (\n        <BPeriod.WithDates className=\"bq-selected-dates\">\n          <BPeriod.Dates>\n            <BPeriod.Details>\n              <BPeriod.Detail>\n                <BPeriod.DateTime>\n                  {Format.date(cart?.starts_at, 'date')}\n                  {useTimes && `, ${Format.date(cart?.starts_at, timeFormat)}`}\n                </BPeriod.DateTime>\n                {hasLocations && (\n                  <BPeriod.Location>\n                    {cart?.start_location_id ? locations.getById(cart.start_location_id)?.name : null}\n                  </BPeriod.Location>\n                )}\n              </BPeriod.Detail>\n              <FontAwesomeIcon icon={farArrowRight} />\n              <BPeriod.Detail>\n                <BPeriod.DateTime>\n                  {Format.date(cart?.stops_at, 'date')}\n                  {useTimes && `, ${Format.date(cart?.stops_at, timeFormat)}`}\n                </BPeriod.DateTime>\n                {hasLocations && (\n                  <BPeriod.Location>\n                    {cart?.stop_location_id ? locations.getById(cart.stop_location_id)?.name : null}\n                  </BPeriod.Location>\n                )}\n              </BPeriod.Detail>\n            </BPeriod.Details>\n          </BPeriod.Dates>\n        </BPeriod.WithDates>\n      )}\n      {!hasDates && (\n        <BPeriod.NoDates className=\"bq-branded-border\">\n          <BPeriod.Dates>\n            <BPeriod.ChoosePeriod>{t('user.store.select_a_period')}</BPeriod.ChoosePeriod>\n          </BPeriod.Dates>\n        </BPeriod.NoDates>\n      )}\n    </BPeriod>\n  )\n}\n\nPeriod.displayName = 'Period'\n\nPeriod.propTypes = {\n  cart: PropTypes.object,\n  hasDates: PropTypes.bool,\n  useTimes: PropTypes.bool,\n  timeFormat: PropTypes.string,\n  locations: PropTypes.object,\n  openDatePicker: PropTypes.func,\n  onAutoModal: PropTypes.func,\n  autoOpenedModal: PropTypes.bool,\n  open: PropTypes.bool,\n  modalOpen: PropTypes.bool,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  let timeFormat\n\n  if (state.settings.get('dates.use_am_pm')) {\n    timeFormat = 'hh:mm A'\n  } else {\n    timeFormat = 'HH:mm'\n  }\n\n  return {\n    locale: state.client.locale,\n    timeFormat,\n    useTimes: state.settings.get('store.use_times'),\n    open: state.client.cartOpen,\n    modalOpen: state.client.modalPickerOpen\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    openDatePicker: () => ClientActions.toggleModalPicker(true)\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Period)\n","import styled, { css } from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nexport const Services = styled.div`\n  padding: 0 var(--minicart-padding);\n  padding-bottom: 12px;\n  margin-bottom: 16px;\n\n  border-bottom: 1px solid var(--minicart-border-color);\n\n  color: var(--minicart-typo-color);\n\n  font-size: var(--minicart-font-size);\n\n  height: ${({ open, headerHeight }) => open ?\n      css`150px` :\n      css`${headerHeight}px`\n  };\n  max-height: 150px;\n\n  overflow: ${({ open }) => open ? 'auto' : 'hidden'};\n  position: relative;\n\n  transition: height 0.3s ease, max-height 0.3s ease;\n`\n\nexport const Header = styled.div`\n  display: grid;\n  grid-template-columns: 1fr repeat(2, max-content);\n  gap: ${size('margin', 'xs')};\n\n  position: sticky;\n  top: 0;\n  left: 0;\n\n  padding-bottom: var(--minicart-padding);\n  background-image: ${({ open }) => css`linear-gradient(\n    to bottom,\n    var(--minicart-background-color) 60%,\n    color-mix(in srgb, var(--minicart-background-color) ${open ? 0 : 100}%, transparent)\n  )`};\n\n  align-items: center;\n  justify-content: space-between;\n\n  font-size: var(--minicart-font-size);\n\n  cursor: pointer;\n`\n\nexport const Title = styled.span``\n\nexport const Total = styled.span`\n  font-weight: var(--minicart-font-weight-bold);\n`\n\nexport const Service = styled.div`\n  display: flex;\n  align-items: center;\n\n  label {\n    margin: 0;\n  }\n\n  & > span {\n    margin-right: 0.9em;\n    cursor: pointer;\n  }\n\n  & > span:last-child {\n    margin-left: auto;\n    margin-right: 0;\n\n    font-weight: var(--minicart-font-weight-bold);\n\n    cursor: default;\n  }\n\n  &:not(:last-child) {\n    margin-bottom: 0.7em;\n  }\n`\n\nServices.Header = Header\nServices.Service = Service\nServices.Title = Title\nServices.Total = Total\n\nexport default Services\n","// React\nimport React, { useState, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Libraries\n\n// Components\nimport BServices from 'shop-components/components/MiniCart/styles/Services'\nimport Checkbox from 'ui/components/Checkbox'\nimport ProductPrice from 'store/v2/react/components/product_price'\n\n// Shared\nimport cartActions from 'store/v2/redux/actions/cart'\nimport { triggerUserFrameworkBookEvent } from 'shared/utils/userFrameworkEvents'\n\nexport const Service = ({ inCart, toggleService, service, line, hasPrice }) => {\n  const [checked, setChecked] = useState(false)\n  const [loading, setLoading] = useState(false)\n\n  useEffect(() => {\n    setChecked(inCart)\n  }, [inCart])\n\n  const handleChangeService = () => {\n    if (loading) return\n\n    const value = !checked\n\n    setChecked((prev) => !prev)\n    setLoading(true)\n\n    toggleService(value).then(() => {\n      setChecked(inCart)\n      setLoading(false)\n    })\n  }\n\n  const renderPrice = () => {\n    return (\n      <ProductPrice\n        chargeLabel={(line || service).charge_label}\n        priceInCents={line?.display_price_in_cents || service?.price_in_cents}\n        priceType={(line || service).price_type}\n        productType={(line || service).product_type}\n      />\n    )\n  }\n\n  return (\n    <BServices.Service>\n      <span>\n        <Checkbox\n          id={service.id}\n          field={{\n            value: checked,\n            onChange: handleChangeService\n          }}\n          disabled={loading}\n        />\n      </span>\n      <span onClick={handleChangeService}>{service.name}</span>\n      {hasPrice && <span>{renderPrice()}</span>}\n    </BServices.Service>\n  )\n}\n\nService.displayName = 'Service'\nService.propTypes = {\n  service: PropTypes.object.isRequired,\n  line: PropTypes.object,\n  inCart: PropTypes.bool.isRequired,\n  toggleService: PropTypes.func.isRequired,\n  hasPrice: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n  const hasPrice =\n    props.service &&\n    props.service.price_in_cents >= 0 &&\n    props.service.price_in_cents !== null &&\n    props.service.price_type !== 'none'\n\n  return {\n    line: props.lines.getAll({ item_id: props.service.id }).reverse().first(),\n    hasPrice\n  }\n}\n\nconst mapDispatchToProps = (state, props) => {\n  const book = (quantity) => {\n    return cartActions\n      .book({\n        item_id: props.service.id,\n        quantity,\n        type: 'set'\n      })\n      .then((response) => {\n        const quantityChange = quantity === 0 ? -1 : 1\n\n        triggerUserFrameworkBookEvent(props.service.id, quantityChange)\n      })\n  }\n\n  return {\n    toggleService: (value) => {\n      if (value) {\n        return book(1)\n      } else {\n        return book(0)\n      }\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { useState, useEffect, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport _intersection from 'lodash/intersection'\n\n// Components\nimport BServices from 'shop-components/components/MiniCart/styles/Services'\nimport Service from './Service'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronUp as farChevronUp, faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\n\nexport const Services = ({ cart, lines, currency, services, servicesPrice, cartItemIds, t }) => {\n  const prevCartRef = useRef(cart)\n  const headerElementRef = useRef(null)\n\n  const [open, setOpen] = useState(true)\n\n  useEffect(() => {\n    ProductGroupActions.fetchServices({ cart_id: cart.id })\n  }, [cart.id])\n\n  useEffect(() => {\n    const previousCart = prevCartRef.current\n    const newCart = !previousCart && cart\n    const fromChanged = cart && !newCart ? previousCart.starts_at !== cart.starts_at : false\n    const tillChanged = cart && !newCart ? previousCart.stops_at !== cart.stops_at : false\n\n    if (cart && (newCart || fromChanged || tillChanged)) {\n      ProductGroupActions.fetchServices({ cart_id: cart ? cart.id : undefined })\n    }\n\n    prevCartRef.current = cart\n  }, [cart])\n\n  const isServiceInCart = (serviceId) => {\n    return cartItemIds.includes(serviceId)\n  }\n\n  const handleToggleOpen = () => {\n    setOpen((prev) => !prev)\n  }\n\n  const renderServices = () => {\n    return services.map((service) => (\n      <Service key={service.id} lines={lines} service={service} inCart={isServiceInCart(service.id)} />\n    ))\n  }\n\n  if (!services?.size()) {\n    return null\n  }\n\n  return (\n    <BServices open={open} headerHeight={headerElementRef.current?.getBoundingClientRect().height}>\n      <BServices.Header ref={headerElementRef} open={open} onClick={handleToggleOpen}>\n        <BServices.Title>{t('user.store.additional_services')}</BServices.Title>\n        <BServices.Total>{FormatUtils.money(servicesPrice, currency)}</BServices.Total>\n        <FontAwesomeIcon icon={open ? farChevronUp : farChevronDown} />\n      </BServices.Header>\n      {renderServices()}\n    </BServices>\n  )\n}\n\nServices.displayName = 'ServiceLines'\nServices.propTypes = {\n  cart: PropTypes.object,\n  currency: PropTypes.object,\n  lines: PropTypes.object,\n  services: PropTypes.object,\n  servicesPrice: PropTypes.number,\n  cartItemIds: PropTypes.object,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const currency = state.client.currency.toJS()\n  const lines = state.orm.lines.getAll({ id: props.cart?.lines })\n  const cartItemIds = lines.map((line) => line.item_id)\n  const services = state.orm.product_groups.getAll({ product_type: 'service', show_in_store: true })\n  const enabledServices = state.orm.products\n    .getAll({ product_type: 'service', product_group_id: services.pluck('id') })\n    .sortBy((service) => services.getById(service.product_group_id).sorting_weight)\n\n  const selectedServices = lines.getAll({ item_id: _intersection(cartItemIds.toArray(), enabledServices.pluck('id')) })\n  const servicesPrice = selectedServices.toArray().reduce((sum, { display_price_in_cents: price }) => sum + price, 0)\n\n  return {\n    currency,\n    lines,\n    services: enabledServices,\n    servicesPrice,\n    cartItemIds\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(Services)\n","// Hooks\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useSelector } from 'react-redux'\n\n// Shared\nimport previewUrlComposer from 'shared/utils/previewUrlComposer'\n\nexport const useCart = () => {\n  const cartId = useSelector((state) => state.client.cartId)\n  const companySlug = useSelector((state) => state.client.getIn(['company', 'slug']))\n\n  const cart = useOrm('carts', (carts) => carts.getById(cartId))\n\n  const taxStrategy = useSettings('pricing.tax_strategy')\n  const showPrices = useSettings('store.use_prices')\n\n  const currency = useSelector((state) => state.client.currency)\n\n  const isOverdue = useSelector((state) => state.client.cartOverdue)\n  const isEmpty = useOrm('lines', (lines) => {\n    return lines.getAll({\n      id: cart?.lines,\n      product_type: ['rental', 'consumable', 'bundle']\n    }).size() === 0\n  })\n\n  const searchParams = new URLSearchParams(window.location.search)\n  const viewCartHref = window.booqableOptions.preview ?\n    previewUrlComposer({ slug: companySlug, themeId: searchParams.get('theme_id'), key: 'templates/cart.json' }) :\n    cart?.cart_url\n\n  let totalPriceAttribute\n\n  if (taxStrategy === 'inclusive') {\n    totalPriceAttribute = 'grand_total_with_tax_in_cents'\n  } else {\n    totalPriceAttribute = 'grand_total_in_cents'\n  }\n\n  return {\n    cart,\n    totalPriceAttribute,\n    showPrices,\n    taxStrategy,\n    currency: currency?.toJS(),\n    isOverdue,\n    isEmpty,\n    viewCartHref\n  }\n}\n","// React\nimport React, { Fragment, useState, useCallback, useEffect } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport BMiniCart, { HostStyles } from 'shop-components/components/MiniCart/styles'\nimport Lines from 'shop-components/components/MiniCart/components/Lines'\nimport Period from 'shop-components/components/MiniCart/components/Period'\nimport Services from 'shop-components/components/MiniCart/components/Services'\nimport { PoweredBy } from 'shop-components/components/PoweredBy'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport {\n  faTimes as farTimes,\n  faTriangleExclamation as farTriangleExclamation\n} from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useCart } from 'shop-components/utils/useCart'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useSelector } from 'react-redux'\nimport { useSettings } from 'shared/utils/useSettings'\nimport { useIsMobile } from 'shared/utils/useIsMobile'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\nimport Format from 'shared/utils/format'\n\nexport const MiniCart = () => {\n  let cannotCheckout = false\n\n  const isMobile = useIsMobile()\n\n  const [autoOpenedModal, setAutoOpenedModal] = useState(false)\n  const [isLoading, setIsLoading] = useState(true)\n\n  const { cart, totalPriceAttribute, showPrices, isOverdue, viewCartHref } = useCart()\n\n  const currency = useSelector((state) => state.client.currency)?.toJS()\n\n  const locations = useOrm('locations', (locations) => {\n    return locations.getAll().sort('name')\n  })\n  const lines = useOrm('lines', (lines) => {\n    return lines.getAll({ id: cart?.lines }).filter(({ product_type: type }) => type !== 'service')\n  })\n  const unavailableLines = useOrm('lines', (lines) => {\n    return lines\n      .getAll({\n        id: cart?.lines,\n        can_checkout: false\n      })\n      .filter((line) => line.line_type !== 'delivery_rate')\n  })\n\n  const showPoweredBy = useSettings('store.show_powered_by')\n  const useAvailability = useSettings('store.use_availability')\n\n  const isCartOpen = useSelector((state) => state.client.cartOpen)\n  const isCheckingOut = useSelector((state) => state.client.checkingOut)\n\n  const { t } = useTranslation('user')\n\n  useEffect(() => {\n    const fetchLines = async (cartId) => {\n      return LineActions.fetchAll({\n        apiVersion: 'boomerang',\n        include: [\n          'item',\n          'item.photo',\n          'item.bundle_items',\n          'item.bundle_items.product',\n          'item.bundle_items.product.photo'\n        ],\n        filter: {\n          owner_id: cartId\n        }\n      })\n    }\n\n    if (cart?.id) {\n      fetchLines(cart.id).finally(() => {\n        setIsLoading(false)\n      })\n    }\n  }, [cart?.id])\n\n  const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n  if (useAvailability) {\n    cannotCheckout = unavailableLines.size() > 0\n  }\n\n  const isCheckoutButtonValid = !!(cart?.lines.length && hasDates && !cannotCheckout && !isOverdue)\n\n  // Needs to live in parent state as Period gets unmounted\n  // on some transitions losing state\n  const onAutoModal = useCallback(\n    (callback) => {\n      setAutoOpenedModal(true)\n      callback?.()\n    },\n    [setAutoOpenedModal]\n  )\n\n  const setCheckingOut = (e) => {\n    e.preventDefault()\n\n    if (ClientActions.evaluateCartOverdue()) return\n\n    ClientActions.setCheckingOut()\n  }\n\n  const toggleCart = (cartOpen) => {\n    return ClientActions.toggleCart(cartOpen)\n  }\n\n  const viewCart = () => {\n    window.location = window.Booqable.decorateLinkForTracking(viewCartHref)\n  }\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <BMiniCart open={isCartOpen} portal={!isMobile} data-tid=\"Mini cart\">\n        <BMiniCart.Head>\n          <BMiniCart.Title>\n            <div>{t('user.store.cart_title')}</div>\n            <BMiniCart.Close onClick={toggleCart.bind(null, false)}>\n              <FontAwesomeIcon icon={farTimes} />\n            </BMiniCart.Close>\n          </BMiniCart.Title>\n          <Period\n            cart={cart}\n            hasDates={hasDates}\n            locations={locations}\n            autoOpenedModal={autoOpenedModal}\n            onAutoModal={onAutoModal}\n          />\n        </BMiniCart.Head>\n        <BMiniCart.Lines>\n          <Lines\n            toggleCart={toggleCart}\n            cart={cart}\n            cannotCheckout={cannotCheckout}\n            hasDates={hasDates}\n            loading={isLoading}\n          />\n        </BMiniCart.Lines>\n        {lines?.size() > 0 && (\n          <BMiniCart.Summary>\n            <Services cart={cart} showPoweredBy={showPoweredBy} />\n            {showPrices && (\n              <BMiniCart.CheckoutTotals>\n                <BMiniCart.Detail bold>\n                  <span>{t('user.store.subtotal')}</span>\n                  <BMiniCart.Amount>{Format.money(cart?.get(totalPriceAttribute), currency)}</BMiniCart.Amount>\n                </BMiniCart.Detail>\n\n                {cart?.get('deposit_in_cents') > 0 && (\n                  <BMiniCart.Detail>\n                    <span>{t('user.store.security_deposit')}</span>\n                    <BMiniCart.Amount>{Format.money(cart.get('deposit_in_cents'), currency)}</BMiniCart.Amount>\n                  </BMiniCart.Detail>\n                )}\n\n                {isOverdue && (\n                  <BMiniCart.Notice inSummary>\n                    <FontAwesomeIcon icon={farTriangleExclamation} size=\"lg\" />\n                    {t('user.checkout.dates_in_past')}\n                  </BMiniCart.Notice>\n                )}\n              </BMiniCart.CheckoutTotals>\n            )}\n            <BMiniCart.CheckoutButtons>\n              {viewCartHref && (\n                <BMiniCart.Button onClick={viewCart} invert>\n                  {t('user.store.view_cart')}\n                </BMiniCart.Button>\n              )}\n              <BMiniCart.Button onClick={setCheckingOut} disabled={!isCheckoutButtonValid || isCheckingOut}>\n                {t('user.store.checkout')}\n              </BMiniCart.Button>\n            </BMiniCart.CheckoutButtons>\n            {showPoweredBy && (\n              <BMiniCart.PoweredBy>\n                <PoweredBy logoWidth=\"24px\" />\n              </BMiniCart.PoweredBy>\n            )}\n          </BMiniCart.Summary>\n        )}\n      </BMiniCart>\n    </Fragment>\n  )\n}\n\nregisterCustomElement('bq-minicart', compose(withStore, withTheme)(MiniCart))\n\nexport default MiniCart\n","// React\nimport React from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Img from 'ui/elements/Img'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Shared\nimport { optimizeImageUrl } from 'shared/utils/optimizeImageUrl'\n\nconst OptimizedImage = ({ focal, src, ...otherProps }) => {\n  const optimizedSrc = optimizeImageUrl(src, { ...otherProps })\n\n  if (focal) {\n    return <FocalImage {...otherProps} url={optimizedSrc} coordinates={focal} />\n  }\n\n  return <Img {...otherProps} src={optimizedSrc} />\n}\n\nOptimizedImage.displayName = 'OptimizedImage'\n\nOptimizedImage.propTypes = {\n  src: PropTypes.string.isRequired,\n  width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  quality: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n  format: PropTypes.oneOf(['jpg', 'jpeg', 'png', 'webp']),\n  focal: PropTypes.shape({\n    x: PropTypes.any,\n    y: PropTypes.any\n  })\n}\n\nexport default OptimizedImage\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport FocalImage from 'ui/blocks/FocalImage'\nimport OptimizedImage from './components/OptimizedImage'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    /* Gallery */\n    --product-gallery-direction: column;\n    --product-gallery-gap: 12px;\n\n    /* Large Preview */\n    --product-gallery-preview-gap: 8px;\n    --product-gallery-preview-border-radius: 0;\n\n    /* Controls */\n    --product-gallery-control-size: 40px;\n    --product-gallery-control-padding: 0 10px;\n    --product-gallery-control-border-radius: 6px;\n    --product-gallery-control-background-color: ${color('white')}66;\n    --product-gallery-control-icon-size: 20px;\n    --product-gallery-control-icon-color: var(--color-typo, ${color('black')});\n    --product-gallery-control-filter: blur(3px);\n\n    /* Thumbnails */\n    --product-gallery-thumbnail-direction: row;\n    --product-gallery-thumbnail-border-radius: 6px;\n    --product-gallery-thumbnail-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n    --product-gallery-active-thumbnail-border: 1px solid var(--color-accent-background, ${color('branding')});\n    --product-gallery-thumbnail-size: 64px;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n`\n\nconst ProductGallery = styled.div`\n  display: flex;\n  flex-direction: var(--product-gallery-direction);\n\n  gap: var(--product-gallery-gap);\n`\n\nconst Wrapper = styled.div`\n  position: relative;\n`\n\nconst Inner = styled.div`\n  display: flex;\n  align-items: center;\n\n  overflow-x: auto;\n  overflow-y: hidden;\n\n  scroll-snap-type: x mandatory;\n\n  gap: var(--horizontal-padding, 16px);\n\n  position: relative;\n\n  -ms-overflow-style: none;\n  scrollbar-width: none;\n\n  -webkit-overflow-scrolling: touch;\n\n  &::-webkit-scrollbar {\n    display: none;\n  }\n\n  ${({ noGap }) => noGap && css`\n    gap: 0;\n  `}\n`\n\nconst Item = styled.div`\n  scroll-snap-align: start end;\n  scroll-snap-stop: always;\n\n  min-width: 100%;\n  width: 100%;\n`\n\nconst Image = styled(OptimizedImage)`\n  display: block;\n\n  width: 100%;\n\n  border-radius: var(--product-gallery-preview-border-radius);\n`\n\nconst Controls = styled.div`\n  position: absolute;\n\n  top: 50%;\n  left: 0;\n  right: 0;\n  transform: translateY(-50%);\n\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n\n  padding: var(--product-gallery-control-padding);\n\n  pointer-events: none;\n\n  z-index: 1000;\n`\n\nconst Control = styled.button`\n  width: var(--product-gallery-control-size);\n  height: var(--product-gallery-control-size);\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  border: none;\n  border-radius: var(--product-gallery-control-border-radius);\n\n  cursor: pointer;\n\n  background-color: var(--product-gallery-control-background-color);\n  backdrop-filter: var(--product-gallery-control-filter);\n\n  pointer-events: all;\n\n  svg {\n    width: var(--product-gallery-control-icon-size);\n    height: var(--product-gallery-control-icon-size);\n\n    fill: var(--product-gallery-control-icon-color);\n    color: var(--product-gallery-control-icon-color);\n  }\n\n  ${({ hidden }) => hidden && css`\n    visibility: hidden;\n\n    pointer-events: none;\n  `}\n\n  ${({ small }) => small && css`\n    width: calc(var(--product-gallery-control-size) / 2);\n    height: calc(var(--product-gallery-control-size) / 2);\n\n    svg {\n      width: calc(var(--product-gallery-control-icon-size) / 2);\n      height: calc(var(--product-gallery-control-icon-size) / 2);\n    }\n  `}\n`\n\nconst ThumbnailsInner = styled.div`\n  display: flex;\n  align-items: center;\n\n  flex-direction: var(--product-gallery-thumbnail-direction);\n\n  gap: var(--product-gallery-preview-gap);\n`\n\nconst Thumbnail = styled.div`\n  ${FocalImage} {\n    width: var(--product-gallery-thumbnail-size);\n    height: var(--product-gallery-thumbnail-size);\n\n    border-radius: var(--product-gallery-thumbnail-border-radius);\n    border: var(--product-gallery-thumbnail-border);\n\n    cursor: pointer;\n\n    transition: border 0.2s ease-in-out;\n\n    ${({ isActive }) => isActive && css`\n      border: var(--product-gallery-active-thumbnail-border);\n    `}\n  }\n`\n\nProductGallery.Wrapper = Wrapper\nProductGallery.Inner = Inner\nProductGallery.Item = Item\nProductGallery.Image = Image\nProductGallery.Controls = Controls\nProductGallery.Control = Control\nProductGallery.ThumbnailsInner = ThumbnailsInner\nProductGallery.Thumbnail = Thumbnail\n\nexport default ProductGallery\n","import request from './'\n\nexport const getPhoto = (id) => {\n  return request({\n    method: 'GET',\n    url: `/api/boomerang/photos/${id}`\n  })\n}\n\nexport const getPhotos = ({ ownerId }) => {\n  return request({\n    method: 'GET',\n    url: '/api/boomerang/photos',\n    params: {\n      filter: {\n        owner_id: ownerId\n      }\n    }\n  })\n}\n","import { getPhoto, getPhotos } from 'shop-components/api/photo'\n\nexport const fetchPhoto = (id) => (dispatch) => {\n  dispatch({\n    type: 'PRODUCT_IMAGES_FETCH_START'\n  })\n\n  getPhoto(id)\n    .then(({ data: { data } }) => {\n      const photo = {\n        id: data.id,\n        ...data.attributes\n      }\n\n      dispatch({\n        type: 'PRODUCT_IMAGES_FETCH_SUCCESS',\n        payload: { records: [photo] }\n      })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_IMAGES_FETCH_ERROR'\n      })\n    })\n}\n\nexport const fetchPhotos = (ownerId) => (dispatch) => {\n  dispatch({\n    type: 'PRODUCT_IMAGES_FETCH_START'\n  })\n\n  getPhotos({ ownerId })\n    .then(({ data: { data } }) => {\n      const records = data.map(({ id, attributes }) => ({\n        id,\n        ...attributes\n      }))\n\n      dispatch({\n        type: 'PRODUCT_IMAGES_FETCH_SUCCESS',\n        payload: { records }\n      })\n    })\n    .catch(() => {\n      dispatch({\n        type: 'PRODUCT_IMAGES_FETCH_ERROR'\n      })\n    })\n}\n","// React\nimport React, { Fragment, useEffect, useRef, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport BProductGallery, { HostStyles } from './styles'\nimport OptimizedImage from './components/OptimizedImage'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronLeft as farChevronLeft, faChevronRight as farChevronRight } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { fetchPhotos } from 'shop-components/redux/actions/photo'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\n\nconst ProductGallery = ({\n  item,\n  photos,\n  variationId,\n  variations,\n  fetchPhotos,\n  enableThumbnails = 'true',\n  enableControls = 'true',\n  infiniteScroll = 'true'\n}) => {\n  const listenerReady = useRef(false)\n  const innerRef = useRef()\n  const thumbnailsWrapperRef = useRef()\n  const thumbnailsInnerRef = useRef()\n\n  const [currentIndex, setIndex] = useState(variationId && variations ? null : 0)\n\n  const withInfiniteScroll = infiniteScroll === 'true'\n  const withControls = enableControls === 'true'\n  const withThumbnails = enableThumbnails === 'true'\n\n  useEffect(() => {\n    if (!item?.id) return\n\n    fetchPhotos()\n  }, [item?.id])\n\n  useEffect(() => {\n    if (photos?.length && !listenerReady.current) {\n      // Reset scroll offset on gallery init to prevent invalid index to be calculated\n      innerRef.current.scrollLeft = 0\n\n      const handleInnerScroll = () => {\n        const width = innerRef.current.offsetWidth\n        const offset = innerRef.current.scrollLeft\n        const index = Math.round(offset / width)\n\n        handleSnapToThumbnail(index)\n\n        setIndex(index)\n      }\n\n      innerRef.current?.addEventListener('scroll', handleInnerScroll)\n      innerRef.current?.addEventListener('touchmove', handleInnerScroll)\n\n      listenerReady.current = true\n\n      return () => {\n        innerRef.current?.removeEventListener('scroll', handleInnerScroll)\n        innerRef.current?.removeEventListener('touchmove', handleInnerScroll)\n\n        listenerReady.current = false\n      }\n    }\n  }, [photos])\n\n  useEffect(() => {\n    if (variationId && variations) {\n      const currentPhotoId = variations.find((variation) => variation.id === variationId)?.photo_id\n      const currentPhotoIndex = photos.findIndex((photo) => photo.id === currentPhotoId)\n\n      if (currentPhotoIndex > -1) {\n        handleSnapToPhoto(currentPhotoIndex)\n      }\n    }\n  }, [variationId, variations, photos])\n\n  const handleSnapToThumbnail = (index) => {\n    const width = thumbnailsInnerRef.current?.offsetWidth / photos.length\n    const height = thumbnailsInnerRef.current?.offsetHeight / photos.length\n\n    thumbnailsWrapperRef.current?.scrollTo({\n      left: width * index - width,\n      top: height * index - height,\n      behavior: 'smooth'\n    })\n  }\n\n  const handleSnapToPhoto = (index, behavior = 'smooth') => {\n    const width = innerRef.current?.offsetWidth\n    const offset = width * index\n\n    innerRef.current?.scrollTo({\n      left: offset,\n      behavior\n    })\n\n    handleSnapToThumbnail(index)\n\n    setIndex(index)\n  }\n\n  const handleSnapToNextPhoto = () => {\n    if (currentIndex < photos.length - 1) {\n      handleSnapToPhoto(currentIndex + 1)\n    }\n\n    if (currentIndex === photos.length - 1 && withInfiniteScroll) {\n      handleSnapToPhoto(0)\n    }\n  }\n\n  const handleSnapToPrevPhoto = () => {\n    if (currentIndex > 0) {\n      handleSnapToPhoto(currentIndex - 1)\n    }\n\n    if (currentIndex === 0 && withInfiniteScroll) {\n      handleSnapToPhoto(photos.length - 1)\n    }\n  }\n\n  return (\n    <Fragment>\n      <HostStyles />\n      {!!photos?.length && (\n        <BProductGallery>\n          <BProductGallery.Wrapper>\n            <BProductGallery.Inner ref={innerRef} noGap>\n              {photos?.map((photo) => {\n                return (\n                  <BProductGallery.Item key={photo.id}>\n                    <BProductGallery.Image src={photo.url} alt=\"\" />\n                  </BProductGallery.Item>\n                )\n              })}\n            </BProductGallery.Inner>\n            {withControls && photos?.length > 1 && (\n              <BProductGallery.Controls>\n                <BProductGallery.Control\n                  onClick={handleSnapToPrevPhoto}\n                  data-direction=\"prev\"\n                  disabled={currentIndex === 0 && !withInfiniteScroll}\n                >\n                  <FontAwesomeIcon icon={farChevronLeft} />\n                </BProductGallery.Control>\n                <BProductGallery.Control\n                  onClick={handleSnapToNextPhoto}\n                  data-direction=\"next\"\n                  disabled={currentIndex === photos?.length - 1 && !withInfiniteScroll}\n                >\n                  <FontAwesomeIcon icon={farChevronRight} />\n                </BProductGallery.Control>\n              </BProductGallery.Controls>\n            )}\n          </BProductGallery.Wrapper>\n          {withThumbnails && photos?.length > 1 && (\n            <BProductGallery.Wrapper>\n              <BProductGallery.Inner ref={thumbnailsWrapperRef}>\n                <BProductGallery.ThumbnailsInner ref={thumbnailsInnerRef}>\n                  {photos\n                    .filter(({ url }) => !!url)\n                    .map((photo, index) => {\n                      const isActive = currentIndex === index\n\n                      return (\n                        <BProductGallery.Thumbnail\n                          key={photo.id}\n                          isActive={isActive}\n                          data-index={index + 1}\n                          data-active={isActive}\n                          onClick={() => handleSnapToPhoto(index)}\n                        >\n                          <OptimizedImage src={photo.url} focal={photo.coordinates} alt=\"\" width=\"120\" height=\"120\" />\n                        </BProductGallery.Thumbnail>\n                      )\n                    })}\n                </BProductGallery.ThumbnailsInner>\n              </BProductGallery.Inner>\n            </BProductGallery.Wrapper>\n          )}\n        </BProductGallery>\n      )}\n    </Fragment>\n  )\n}\n\nProductGallery.propTypes = {\n  item: PropTypes.object,\n  photos: PropTypes.array,\n  variationId: PropTypes.string,\n  variations: PropTypes.array,\n  fetchPhotos: PropTypes.func,\n  enableThumbnails: PropTypes.oneOf(['true', 'false']),\n  enableControls: PropTypes.oneOf(['true', 'false']),\n  infiniteScroll: PropTypes.oneOf(['true', 'false'])\n}\n\nconst mapStateToProps = (state, props) => {\n  const item = state.items.records[props.productId]\n\n  return {\n    item,\n    photos: item?.photos,\n    variationId: item?.variation_id,\n    variations: item?.products\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n  fetchPhotos: () => dispatch(fetchPhotos(props.productId))\n})\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(ProductGallery)\n\nregisterCustomElement('bq-product-gallery', decoratedComponent, {\n  attributes: ['product-id', 'enable-thumbnails', 'enable-controls', 'infinite-scroll']\n})\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --variation-select-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n    --variation-select-color: var(--color-typo, ${color('text')});\n    --variation-select-background-color: var(--color-white, ${color('white')});\n    --variation-select-font-size: 13px;\n    --variation-select-font-family: var(--font-body, sans-serif);\n    --variation-select-padding: 0 30px 0 10px;\n    --variation-select-control-height: 38px;\n    --variation-select-border-radius: 6px;\n\n    --bundle-items-image-size: 50px;\n    --bundle-items-image-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n    --bundle-items-image-border-radius: 6px;\n\n    --bundle-items-cell-padding: 5px;\n\n    --bundle-items-font-size: 15px;\n    --bundle-items-font-family: var(--font-body, sans-serif);\n\n    --bundle-items-background-color: var(--color-primary-background, ${color('white')});\n    --bundle-items-color: var(--color-primary-foreground, ${color('text')});\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n`\n\nconst BundleItems = styled.div`\n  position: relative;\n\n  background-color: var(--bundle-items-background-color);\n`\n\nconst Inner = styled.div`\n  display: grid;\n  grid-template-columns: max-content max-content 1fr;\n\n  overflow-y: auto;\n\n  ${({ height }) => height && css`\n    max-height: ${height}px;\n  `}\n`\n\nconst BundleItem = styled.div`\n  display: contents;\n\n  ${FocalImage} {\n    width: var(--bundle-items-image-size);\n    height: var(--bundle-items-image-size);\n\n    border: var(--bundle-items-image-border);\n    border-radius: var(--bundle-items-image-border-radius);\n  }\n`\n\nconst BundleItemCell = styled.div`\n  display: flex;\n  align-items: center;\n\n  padding: var(--bundle-items-cell-padding);\n\n  font-size: var(--bundle-items-font-size);\n  font-family: var(--bundle-items-font-family);\n\n  color: var(--bundle-items-color);\n\n  &:first-child {\n    padding-left: 0;\n  }\n\n  &:last-child {\n    padding-right: 0;\n  }\n`\n\nconst BundleItemSelectWrapper = styled.div`\n  position: relative;\n\n  width: 100%;\n\n  svg {\n    position: absolute;\n\n    color: var(--variation-select-color);\n    fill: var(--variation-select-color);\n\n    top: 50%;\n    right: 10px;\n    transform: translateY(-50%);\n\n    width: 14px;\n    height: 14px;\n\n    pointer-events: none;\n  }\n`\n\nconst BundleItemSelect = styled.select`\n  border: var(--variation-select-border);\n\n  color: var(--variation-select-color);\n  background-color: var(--variation-select-background-color);\n\n  font-size: var(--variation-select-font-size);\n  font-family: var(--variation-select-font-family);\n\n  padding: var(--variation-select-padding);\n\n  width: 100%;\n  height: var(--variation-select-control-height);\n\n  border-radius: var(--variation-select-border-radius);\n\n  appearance: none;\n`\n\nconst ScrollGradient = styled.div`\n  position: absolute;\n\n  left: 0;\n  right: 0;\n\n  height: 50px;\n  width: 100%;\n\n  z-index: 100;\n\n  pointer-events: none;\n\n  opacity: 0;\n\n  background-image: linear-gradient(\n    to bottom,\n    color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n    var(--bundle-items-background-color)\n  );\n\n  transition: opacity 0.15s cubic-bezier(0.18, 0.89, 0.32, 1.28);\n\n  ${({ visible }) => visible && css`\n    opacity: 1;\n  `}\n\n  ${({ side }) => {\n    switch (side) {\n      case 'top':\n        return css`\n          top: 0;\n          background-image: linear-gradient(\n            to top,\n            color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n            var(--bundle-items-background-color)\n          );\n        `\n      case 'bottom':\n        return css`\n          bottom: 0;\n          background-image: linear-gradient(\n            to bottom,\n            color-mix(in srgb, var(--bundle-items-background-color) 0%, transparent) 15%,\n            var(--bundle-items-background-color)\n          );\n        `\n    }\n  }}\n`\n\nBundleItems.Inner = Inner\nBundleItems.BundleItem = BundleItem\nBundleItems.BundleItemCell = BundleItemCell\nBundleItems.BundleItemSelectWrapper = BundleItemSelectWrapper\nBundleItems.BundleItemSelect = BundleItemSelect\nBundleItems.ScrollGradient = ScrollGradient\n\nexport default BundleItems\n","// React\nimport React, { useState, useEffect, useCallback, memo } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport BBundleItems from './styles'\nimport FocalImage from 'ui/components/FocalImage'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Libraries\nimport _sortBy from 'lodash/sortBy'\n\n// Shared\nimport { updateConfiguration } from 'shop-components/redux/actions/item'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\n\nconst getItem = (item, selected) => {\n  const variation = item.product_group?.products?.find((p) => p.id === selected)\n  const product = item.product_group?.products?.find((p) => p.id === item.product_id)\n  const productGroup = item.product_group\n\n  return variation || product || productGroup\n}\n\nconst BundleItem = ({ productId, cart, bundleItem, updateConfiguration }) => {\n  const [selected, setSelected] = useState('')\n\n  const item = getItem(bundleItem, selected)\n  const variations = _sortBy(\n    bundleItem.product_group?.products?.filter(({ archived_at: archivedAt }) => !archivedAt),\n    'sorting_weight'\n  )\n  const photo = variations.find((p) => p.id === selected)?.photo\n\n  const handleSetSelected = useCallback(\n    (id) => {\n      if (cart?.id && id !== selected) {\n        setSelected(id)\n        updateConfiguration({ id: productId, itemId: bundleItem.id, variationId: id })\n      }\n    },\n    [selected, productId, bundleItem.id, cart]\n  )\n\n  useEffect(() => {\n    const defaultVariation = variations.find(({ id }) => id === bundleItem.product_id) || variations[0]\n\n    if (!selected && defaultVariation?.id) {\n      handleSetSelected(defaultVariation.id)\n    }\n  }, [bundleItem, selected, variations, handleSetSelected])\n\n  return (\n    <BBundleItems.BundleItem key={bundleItem.id}>\n      <BBundleItems.BundleItemCell part=\"bundle-item__image\">\n        <FocalImage url={photo?.url || NO_PRODUCT_IMAGE} preview={photo?.preview} coordinates={photo?.coordinates} />\n      </BBundleItems.BundleItemCell>\n      <BBundleItems.BundleItemCell>{bundleItem.quantity}x</BBundleItems.BundleItemCell>\n      <BBundleItems.BundleItemCell>\n        {(!bundleItem.product_group.has_variations || bundleItem.product_id) && item.name}\n        {bundleItem.product_group.has_variations && !bundleItem.product_id && (\n          <BBundleItems.BundleItemSelectWrapper>\n            <BBundleItems.BundleItemSelect\n              className=\"bundle-item__select\"\n              name={`variation-${bundleItem.id}`}\n              id={`variation-${bundleItem.id}`}\n              value={selected}\n              onChange={({ target }) => handleSetSelected(target.value)}\n            >\n              {variations.map((variation) => (\n                <option key={variation.id} value={variation.id}>\n                  {variation.name}\n                </option>\n              ))}\n            </BBundleItems.BundleItemSelect>\n            <FontAwesomeIcon icon={farChevronDown} />\n          </BBundleItems.BundleItemSelectWrapper>\n        )}\n      </BBundleItems.BundleItemCell>\n    </BBundleItems.BundleItem>\n  )\n}\n\nBundleItem.propTypes = {\n  productId: PropTypes.string,\n  cart: PropTypes.object,\n  bundleItem: PropTypes.object,\n  updateConfiguration: PropTypes.func\n}\n\nconst mapStateToProps = (state, _props) => ({\n  cart: state.orm.carts.getById(state.client.cartId ?? window.booqableOptions.cart?.id)\n})\n\nconst mapDispatchToProps = (dispatch, _props) => ({\n  updateConfiguration: (attributes) => dispatch(updateConfiguration(attributes))\n})\n\nconst decoratedComponent = reduxConnect(mapStateToProps, mapDispatchToProps)(BundleItem)\n\nexport default memo(decoratedComponent)\n","// React\nimport React, { Fragment, useState, useEffect, useCallback, useRef } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Item from './Item'\nimport BBundleItems, { HostStyles } from './styles'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { fetchPrice } from 'shop-components/redux/actions/price'\nimport { fetchAvailability } from 'shop-components/redux/actions/availability'\n\nconst CONTAINER_HEIGHT = 220\n\nconst BundleItems = ({ productId, items, cart, bundle, fetchPrice, fetchAvailability }) => {\n  const ref = useRef()\n\n  const [displayTopGradient, setDisplayTopGradient] = useState(false)\n  const [displayBottomGradient, setDisplayBottomGradient] = useState(false)\n\n  useEffect(() => {\n    if (cart.id && bundle?.id) {\n      fetchPrice({\n        cartId: cart.id,\n        id: bundle.id,\n        configuration: bundle.configuration\n      })\n    }\n\n    if (cart.startsAt && cart.stopsAt && cart.startLocationId) {\n      fetchAvailability({\n        startsAt: cart.startsAt,\n        stopsAt: cart.stopsAt,\n        startLocationId: cart.startLocationId,\n        id: productId,\n        configuration: bundle?.configuration\n      })\n    }\n  }, [cart.id, cart.startsAt, cart.stopsAt, bundle?.configuration])\n\n  useEffect(() => {\n    const handleInnerScroll = () => {\n      if (ref.current?.scrollTop + CONTAINER_HEIGHT >= ref.current?.scrollHeight) {\n        setDisplayBottomGradient(false)\n        setDisplayTopGradient(true)\n      } else {\n        setDisplayBottomGradient(true)\n        setDisplayTopGradient(false)\n      }\n    }\n\n    if (ref.current?.scrollHeight > CONTAINER_HEIGHT) {\n      setDisplayBottomGradient(true)\n    }\n\n    ref.current?.addEventListener('scroll', handleInnerScroll)\n\n    return () => {\n      ref.current?.removeEventListener('scroll', handleInnerScroll)\n    }\n  }, [items])\n\n  const renderBundleItem = useCallback(\n    (item) => <Item key={item.id} productId={productId} bundleItem={item} />,\n    [productId]\n  )\n\n  return (\n    <Fragment>\n      <HostStyles />\n      {items?.length && (\n        <BBundleItems>\n          <BBundleItems.ScrollGradient visible={displayTopGradient} side=\"top\" />\n          <BBundleItems.Inner height={CONTAINER_HEIGHT} ref={ref}>\n            {items.map(renderBundleItem)}\n          </BBundleItems.Inner>\n          <BBundleItems.ScrollGradient visible={displayBottomGradient} side=\"bottom\" />\n        </BBundleItems>\n      )}\n    </Fragment>\n  )\n}\n\nBundleItems.propTypes = {\n  productId: PropTypes.string.isRequired,\n  cart: PropTypes.object,\n  bundle: PropTypes.object,\n  items: PropTypes.array,\n  fetchPrice: PropTypes.func,\n  fetchAvailability: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId || window.booqableOptions.cart?.id)\n  const bundle = state.items.records[props.productId]\n\n  return {\n    cart: {\n      id: cart?.id ?? window.booqableOptions.cart?.id,\n      startsAt: cart?.starts_at ?? window.booqableOptions.cart?.from,\n      stopsAt: cart?.stops_at ?? window.booqableOptions.cart?.till,\n      startLocationId: cart?.start_location_id ?? window.booqableOptions?.startLocationId\n    },\n    bundle,\n    items: bundle?.products\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => ({\n  fetchPrice: (attributes) => dispatch(fetchPrice(attributes)),\n  fetchAvailability: (attributes) => dispatch(fetchAvailability(attributes))\n})\n\nconst decoratedComponent = compose(withStore, withTheme, reduxConnect(mapStateToProps, mapDispatchToProps))(BundleItems)\n\nregisterCustomElement('bq-bundle-items', decoratedComponent, {\n  attributes: ['product-id']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle, css } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport Skeleton from 'ui/blocks/Skeleton'\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --lines-empty-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n    --line-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --line-image-size: var(--cart-line-image-size, 60px);\n    --line-image-border-radius: var(--cart-line-image-border-radius, 6px);\n    --line-image-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --line-icon-color: var(--color-primary-foreground, #0c2747);\n    --line-control-border-radius: var(--cart-line-control-border-radius, 6px);\n    --line-control-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n    --line-input-color: var(--color-primary-foreground, #0c2747);\n\n    --line-availability-border: 1px solid;\n    --line-availability-border-color-available: var(--color-green, ${color('Success/Base')});\n    --line-availability-border-color-unavailable: var(--color-red, ${color('Danger/Base')});\n    --line-availability-color-available: var(--color-green, ${color('Success/Base')});\n    --line-availability-color-unavailable: var(--color-red, ${color('Danger/Base')});\n    --line-availability-background-color-available: transparent;\n    --line-availability-background-color-unavailable: transparent;\n\n    --line-title-color: var(--color-primary-foreground, ${color('Text/Primary')});\n    --line-title-font-size: 16px;\n\n    --line-price-color: var(--color-primary-foreground, ${color('Text/Primary')});\n    --line-price-font-size: 16px;\n\n    --line-variations-color: var(--color-primary-foreground-lightened, ${color('Text/Secondary')});\n    --line-variations-font-size: 14px;\n\n    --line-toggle-color: var(--color-primary-foreground, ${color('branding')});\n    --line-toggle-font-size: 16px;\n\n    --line-bundle-item-quantity-color: var(--color-primary-foreground, ${color('Text/Secondary')});\n    --line-bundle-item-quantity-font-size: 16px;\n    --line-bundle-item-quantity-background: var(--color-primary-background, ${color('white')});\n\n    --line-bundle-item-name-color: var(--color-primary-foreground, ${color('Text/Primary')});\n    --line-bundle-item-name-font-size: 16px;\n  }\n`\n\nexport const Lines = styled.div`\n  display: grid;\n  grid-template-columns: max-content 1fr max-content max-content;\n\n  border-top: var(--line-border);\n\n  * {\n    box-sizing: border-box;\n  }\n\n  ${FocalImage} {\n    width: var(--line-image-size);\n    height: var(--line-image-size);\n\n    border-radius: var(--line-image-border-radius);\n    border: var(--line-image-border);\n  }\n`\n\nexport const EmptyText = styled.h3`\n  display: inline-block;\n\n  color: var(--lines-empty-text-color);\n`\n\nexport const Cell = styled.div`\n  padding: 20px 12px;\n\n  border-bottom: var(--line-border);\n`\n\nexport const Image = styled(Cell)`\n  grid-column: 1 / 2;\n\n  padding-left: 0;\n\n  @media screen and (max-width: 576px) {\n    border: none;\n\n    padding-bottom: 0;\n  }\n`\n\nexport const Info = styled(Cell)`\n  grid-column: 2 / 3;\n\n  @media screen and (max-width: 576px) {\n    border: none;\n\n    padding-bottom: 0;\n  }\n`\n\nexport const Availability = styled.span`\n  display: inline-block;\n\n  font-family: var(--font-body);\n  font-size: 14px;\n  font-weight: 600;\n\n  margin: 8px 0;\n  padding: 2px 8px;\n\n  border: var(--line-availability-border);\n  border-radius: 20px;\n\n  ${({ available }) =>\n    available ?\n      css`\n          border-color: var(--line-availability-border-color-available);\n          color: var(--line-availability-color-available);\n          background-color: var(--line-availability-background-color-available);\n        ` :\n      css`\n          border-color: var(--line-availability-border-color-unavailable);\n          color: var(--line-availability-color-unavailable);\n          background-color: var(--line-availability-background-color-unavailable);\n        `}\n`\n\nexport const Controls = styled(Cell)`\n  display: flex;\n\n  gap: 4px;\n\n  grid-column: 3 / 4;\n\n  padding-right: 0;\n\n  @media screen and (max-width: 576px) {\n    grid-column: 1 / 3;\n  }\n\n  ${({ withRightOffset }) => withRightOffset && css`\n    padding-right: 12px;\n  `}\n`\n\nexport const ActionButton = styled.button`\n  border: none;\n  background: none;\n\n  width: 40px;\n  height: 40px;\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  margin-right: 8px;\n\n  cursor: pointer;\n\n  svg {\n    width: 18px;\n    height: 18px;\n\n    fill: var(--line-icon-color);\n    color: var(--line-icon-color);\n  }\n`\n\nexport const QuantityButton = styled(ActionButton)`\n  border: var(--line-control-border);\n  border-radius: var(--line-control-border-radius);\n\n  background-color: var(--line-bundle-item-quantity-background);\n\n  margin-right: 0;\n\n  svg {\n    width: 14px;\n    height: 14px;\n\n    fill: var(--line-icon-color);\n    color: var(--line-icon-color);\n  }\n`\n\nexport const QuantityInput = styled.input`\n  border: none;\n  border: var(--line-control-border);\n\n  background-color: var(--line-bundle-item-quantity-background);\n\n  color: var(--line-input-color);\n\n  border-radius: var(--line-control-border-radius);\n\n  font-size: 14px;\n  line-height: 20px;\n\n  text-align: center;\n\n  min-height: 40px;\n  max-height: 40px;\n  width: 60px;\n`\n\nexport const Price = styled(Cell)`\n  display: flex;\n  justify-content: flex-end;\n  align-items: flex-start;\n\n  padding-top: 30px;\n  padding-right: 0;\n\n  font-family: var(--font-body);\n  font-size: var(--line-price-font-size);\n  color: var(--line-price-color);\n\n  ${Skeleton} {\n    display: block;\n  }\n\n  grid-column: 4 / 5;\n\n  @media screen and (max-width: 576px) {\n    grid-column: 3 / 4;\n  }\n`\n\nexport const Title = styled.h3`\n  font-family: var(--font-heading);\n  font-size: 16px;\n\n  font-size: var(--line-title-font-size);\n  color: var(--line-title-color);\n\n  margin: 0;\n`\n\nexport const Variations = styled.p`\n  font-family: var(--font-body);\n  font-size: var(--line-variations-font-size);\n\n  color: var(--line-variations-color);\n\n  margin: 0;\n`\n\nexport const Contents = styled.div``\n","import styled from 'styled-components'\n\nimport FocalImage from 'ui/blocks/FocalImage'\n\nexport const BundleItem = styled.div`\n  display: flex;\n  align-items: center;\n\n  gap: 12px;\n\n  &:not(:last-child) {\n    margin-bottom: 8px;\n  }\n\n  ${FocalImage} {\n    width: 32px;\n    height: 32px;\n  }\n`\n\nexport const Toggle = styled.div`\n  display: flex;\n  align-items: center;\n\n  cursor: pointer;\n\n  margin-bottom: 8px;\n\n  gap: 4px;\n\n  svg {\n    width: 16px;\n    height: 16px;\n\n    fill: var(--line-toggle-color);\n    color: var(--line-toggle-color);\n  }\n`\n\nexport const ToggleText = styled.span`\n  font-family: var(--font-body);\n  font-size: var(--line-toggle-font-size);\n\n  font-weight: 600;\n\n  color: var(--line-toggle-color);\n`\n\nexport const Quantity = styled.span`\n  font-family: var(--font-body);\n  font-size: var(--line-bundle-item-quantity-font-size);\n\n  color: var(--line-bundle-item-quantity-color);\n`\n\nexport const Name = styled.span`\n  font-family: var(--font-body);\n  font-size: var(--line-bundle-item-name-font-size);\n\n  color: var(--line-bundle-item-name-color);\n`\n","// React\nimport React, { useState, useCallback, Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { BundleItem, Quantity, Name, Toggle, ToggleText } from './styles'\nimport FocalImage from 'ui/components/FocalImage'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faChevronUp as farChevronUp, faChevronDown as farChevronDown } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst BundleContents = ({ data, products, photos, t }) => {\n  const [open, setOpen] = useState(false)\n\n  const handleToggle = useCallback(() => {\n    setOpen((prev) => !prev)\n  }, [])\n\n  return (\n    <Fragment>\n      <Toggle onClick={handleToggle}>\n        <ToggleText>\n          {t('user.cart.bundle_contents')} ({data.length})\n        </ToggleText>\n        <FontAwesomeIcon icon={open ? farChevronUp : farChevronDown} />\n      </Toggle>\n      {open &&\n        data.map((item) => {\n          const product = products.getById(item.item_id)\n\n          if (!product) return null\n\n          const photo = photos.getById(product?.photo_id)\n\n          return (\n            <BundleItem key={product.id}>\n              <FocalImage\n                coordinates={photo?.coordinates ?? { x: 0, y: 0 }}\n                url={photo?.url ?? NO_PRODUCT_IMAGE}\n                size=\"32px\"\n              />\n              <Quantity>{item.quantity}x</Quantity>\n              <Name>{product.name}</Name>\n            </BundleItem>\n          )\n        })}\n    </Fragment>\n  )\n}\n\nBundleContents.displayName = 'BundleContents'\n\nBundleContents.propTypes = {\n  data: PropTypes.array,\n  products: PropTypes.object,\n  photos: PropTypes.object,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  const products = state.orm.products\n  const photos = state.orm.photos\n\n  return { products, photos }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps))(BundleContents)\n","// React\nimport React, { Fragment, useCallback, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport {\n  Controls,\n  ActionButton,\n  QuantityButton,\n  QuantityInput,\n  Price,\n  Image,\n  Info,\n  Title,\n  Variations,\n  Contents,\n  Availability\n} from './styles'\nimport FocalImage from 'ui/components/FocalImage'\nimport Skeleton from 'ui/blocks/Skeleton'\nimport BundleContents from './BundleContents'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faMinus as farMinus, faPlus as farPlus } from '@fortawesome/pro-regular-svg-icons'\nimport { faTrash as falTrash } from '@fortawesome/pro-light-svg-icons'\n\nimport _debounce from 'lodash/debounce'\n\n// Shared\nimport { Settings as SettingsUtils, Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport NO_PRODUCT_IMAGE from '@assets/images/no-product-image.png'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst Line = ({\n  line,\n  product,\n  currency,\n  type,\n  hasDates,\n  useAvailability,\n  hideAvailabilityQuantity,\n  showPrices,\n  updateLine,\n  t\n}) => {\n  const [quantity, setQuantity] = useState(line?.quantity)\n  const [loading, setLoading] = useState(false)\n\n  const handleUpdateQuantity = useCallback(\n    (quantity, skipQuantityUpdate) => {\n      if (quantity === '') {\n        if (!skipQuantityUpdate) {\n          setQuantity(1)\n        }\n\n        updateLine(line, 1).finally(() => setLoading(false))\n      } else {\n        if (!skipQuantityUpdate) {\n          setQuantity(quantity)\n        }\n\n        updateLine(line, quantity).finally(() => setLoading(false))\n      }\n    },\n    [line]\n  )\n\n  const debounceUpdateQuantity = _debounce(handleUpdateQuantity, 500)\n\n  const handleUpdateInputQuantity = useCallback(({ target }) => {\n    setQuantity(target.value)\n\n    debounceUpdateQuantity(target.value)\n  }, [])\n\n  const handleIncreaseQuantity = useCallback((quantity) => {\n    setLoading(true)\n    setQuantity(quantity + 1)\n\n    debounceUpdateQuantity(quantity + 1, true)\n  }, [])\n\n  const handleDecreaseQuantity = useCallback((quantity) => {\n    setLoading(true)\n    setQuantity(quantity - 1)\n\n    debounceUpdateQuantity(quantity - 1, true)\n  }, [])\n\n  const handleDeleteLine = useCallback(() => {\n    updateLine(line, 0)\n  }, [line])\n\n  if (!line || !product) return null\n\n  const available = line.available_quantity >= quantity\n\n  return (\n    <Fragment>\n      <Image>\n        <FocalImage\n          coordinates={line.photo?.coordinates ?? { x: 0, y: 0 }}\n          url={line.photo?.large_url ?? NO_PRODUCT_IMAGE}\n          size=\"60px\"\n        />\n      </Image>\n      <Info>\n        <Title>{product.group_name || product.name}</Title>\n        {product.variation_values && <Variations>{product.variation_values.join(',')}</Variations>}\n        {hasDates && useAvailability && (\n          <Availability available={available}>\n            {!hideAvailabilityQuantity && (\n              <Fragment>\n                {line.available_quantity} {t('user.store.available')}\n              </Fragment>\n            )}\n            {hideAvailabilityQuantity && t(available ? 'user.store.available' : 'user.store.unavailable')}\n          </Availability>\n        )}\n        {type === 'bundle' && (\n          <Contents>\n            <BundleContents data={line.items} />\n          </Contents>\n        )}\n      </Info>\n      <Controls withRightOffset={showPrices}>\n        <ActionButton data-tid={`${product.group_name || product.name}: delete line`} onClick={handleDeleteLine}>\n          <FontAwesomeIcon icon={falTrash} />\n        </ActionButton>\n        <QuantityButton\n          data-tid={`${product.group_name || product.name}: decrease quantity`}\n          onClick={() => handleDecreaseQuantity(quantity)}\n        >\n          <FontAwesomeIcon icon={farMinus} />\n        </QuantityButton>\n        <QuantityInput\n          data-tid={`${product.group_name || product.name}: quantity input`}\n          value={quantity}\n          onChange={handleUpdateInputQuantity}\n        />\n        <QuantityButton\n          data-tid={`${product.group_name || product.name}: increase quantity`}\n          onClick={() => handleIncreaseQuantity(quantity)}\n        >\n          <FontAwesomeIcon icon={farPlus} />\n        </QuantityButton>\n      </Controls>\n      {showPrices && (\n        <Price>{loading ? <Skeleton width={60} /> : FormatUtils.money(line.display_price_in_cents, currency)}</Price>\n      )}\n    </Fragment>\n  )\n}\n\nLine.displayName = 'Line'\n\nLine.propTypes = {\n  line: PropTypes.object,\n  product: PropTypes.object,\n  currency: PropTypes.object,\n  type: PropTypes.oneOf(['rental', 'bundle']),\n  hasDates: PropTypes.bool,\n  useAvailability: PropTypes.bool,\n  hideAvailabilityQuantity: PropTypes.bool,\n  showPrices: PropTypes.bool,\n  updateLine: PropTypes.func,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, props) => {\n  let product\n\n  const cartId = state.client.cartId\n  const currency = state.client.currency.toJS()\n\n  const cart = state.orm.carts.getById(cartId)\n  const line = state.orm.lines.getById(props.id)\n  const type = line?.product?.product_type\n\n  const hasDates = !!cart.starts_at && !!cart.stops_at\n  const useAvailability = SettingsUtils.get('store.use_availability') && line?.tracking_type !== 'none'\n  const hideAvailabilityQuantity = SettingsUtils.get('store.hide_product_availability_quantities')\n  const showPrices = SettingsUtils.get('store.use_prices')\n\n  switch (type) {\n    case 'bundle':\n      product = state.orm.bundles.getById(line?.product.id)\n      break\n    case undefined:\n      product = null\n      break\n    default:\n      product = state.orm.products.getById(line?.product.id)\n      break\n  }\n\n  return { line, product, currency, type, useAvailability, hasDates, hideAvailabilityQuantity, showPrices }\n}\n\nconst mapDispatchToProps = () => {\n  return {\n    updateLine: (line, quantity) =>\n      CartActions.book({\n        item_id: line.item_id,\n        line_id: line.id,\n        quantity,\n        type: 'set'\n      })\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(mapStateToProps, mapDispatchToProps))(Line)\n","// React\nimport React from 'react'\n\n// Components\nimport { Controls, Image, Info, Lines, Price } from './styles'\nimport Skeleton from 'ui/blocks/Skeleton'\n\nconst LinesSkeleton = () => {\n  return (\n    <Lines>\n      <Image>\n        <Skeleton width={60} height={60} modifiers=\"border-radius-md\" />\n      </Image>\n      <Info>\n        <Skeleton height={24} modifiers=\"display-flex width-100 margin-bottom-xs\" noCenter />\n        <Skeleton height={24} modifiers=\"width-75\" noCenter />\n      </Info>\n      <Controls />\n      <Price>\n        <Skeleton height={18} modifiers=\"width-50\" />\n      </Price>\n    </Lines>\n  )\n}\n\nexport default LinesSkeleton\n","// React\nimport React, { Fragment, useEffect, useState } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport Line from './Line'\nimport LinesSkeleton from './LineSkeleton'\nimport { Lines as LinesContainer, EmptyText, HostStyles } from './styles'\nimport Div from 'ui/elements/Div'\n\n// Libraries\nimport _flatten from 'lodash/flatten'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ItemActions from 'back_office/v2/redux/actions/item_actions'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\n\nconst Lines = ({ cartId, lines, fetchLines, fetchContents, t }) => {\n  const [loading, setLoading] = useState(false)\n\n  useEffect(() => {\n    setLoading(true)\n\n    fetchLines(cartId)\n      .then(({ payload }) => {\n        const ids = _flatten(\n          payload.response.data.map(({ attributes }) => attributes.items.map(({ item_id: id }) => id))\n        )\n\n        if (!ids.length) return\n\n        fetchContents(ids)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [cartId])\n\n  if (loading) {\n    return (\n      <Fragment>\n        <HostStyles />\n        <LinesSkeleton />\n      </Fragment>\n    )\n  }\n\n  if (!lines.size()) {\n    return (\n      <Fragment>\n        <HostStyles />\n        <Div modifiers=\"display-flex justify-center align-center padding-top-lg padding-bottom-lg\">\n          <EmptyText>{t('user.cart.empty')}</EmptyText>\n        </Div>\n      </Fragment>\n    )\n  }\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <LinesContainer>\n        {lines?.map((line) => (\n          <Line key={line.id} id={line.id} />\n        ))}\n      </LinesContainer>\n    </Fragment>\n  )\n}\n\nLines.propTypes = {\n  cartId: PropTypes.string,\n  lines: PropTypes.object,\n  fetchLines: PropTypes.func,\n  fetchContents: PropTypes.func,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state, _props) => {\n  const cartId = state.client.cartId\n\n  const cart = state.orm.carts.getById(cartId)\n  const lines = state.orm.lines.getAll({ id: cart?.lines }).filter(({ product_type: type }) => type !== 'service')\n\n  return { cartId, lines }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    fetchLines: (id) => {\n      return LineActions.fetchAll({\n        apiVersion: 'boomerang',\n        include: [\n          'item',\n          'item.photo',\n          'item.bundle_items',\n          'item.bundle_items.product',\n          'item.bundle_items.product.photo'\n        ],\n        filter: {\n          owner_id: id\n        }\n      })\n    },\n    fetchContents: (ids) => {\n      return ItemActions.fetchAll({\n        apiVersion: 'boomerang',\n        include: ['photo'],\n        filter: {\n          id: ids,\n          archived: false\n        }\n      })\n    }\n  }\n}\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme,\n  withTranslation('user'),\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Lines)\n\nregisterCustomElement('bq-cart-lines', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle, css } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport H3 from 'ui/elements/H3'\nimport P from 'ui/elements/P'\nimport Div from 'ui/elements/Div'\nimport Label from 'ui/elements/Label'\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --services-container-background: transparent;\n    --services-container-padding: 16px;\n    --services-container-border-radius: 8px;\n    --services-container-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --services-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n    --service-checkbox-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n    --service-checkbox-border-radius: 4px;\n    --service-checkbox-size: 20px;\n    --service-checkbox-color: ${color('white')};\n    --service-checkbox-color-checked: var(--color-accent-background, ${color('branding')});\n    --service-checkbox-icon-color: var(--color-accent-foreground, ${color('white')});\n\n    --service-title-font-size: 18px;\n    --service-name-font-size: 16px;\n    --service-price-font-size: 16px;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n\n  @keyframes spin {\n    0% {\n      transform: rotate(0deg);\n    }\n\n    100% {\n      transform: rotate(360deg);\n    }\n  }\n`\n\nexport const Container = styled(Div)`\n  position: relative;\n\n  background: var(--services-container-background);\n  border: var(--services-container-border);\n\n  padding: var(--services-container-padding);\n\n  border-radius: var(--services-container-border-radius);\n`\n\nexport const Title = styled(H3)`\n  font-family: var(--font-body);\n  font-weight: 600;\n  font-size: var(--service-title-font-size);\n\n  margin-bottom: 14px;\n\n  color: var(--services-text-color);\n`\n\nexport const ServiceContainer = styled(Div)`\n  display: grid;\n  grid-template-columns: max-content 1fr;\n  grid-gap: 12px;\n\n  &:not(:last-child) {\n    margin-bottom: 12px;\n  }\n\n  ${({ hasPrice }) =>\n    hasPrice &&\n    css`\n      grid-template-columns: max-content 1fr max-content;\n    `}\n\n  ${({ loading }) =>\n    loading &&\n    css`\n      grid-template-columns: max-content 1fr max-content;\n    `}\n`\n\nexport const Name = styled(Div)`\n  display: flex;\n  align-items: center;\n\n  ${Label} {\n    font-family: var(--font-body);\n    font-size: var(--service-name-font-size);\n    font-weight: 400;\n\n    cursor: pointer;\n\n    margin: 0;\n\n    color: var(--services-text-color);\n  }\n\n  ${({ disabled }) =>\n    disabled &&\n    css`\n      opacity: 0.7;\n    `}\n`\n\nexport const Checkbox = styled(Div)`\n  width: var(--service-checkbox-size);\n  height: var(--service-checkbox-size);\n\n  cursor: pointer;\n\n  border-radius: var(--service-checkbox-border-radius);\n  border: var(--service-checkbox-border);\n\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  padding: 2px;\n\n  background-color: var(--service-checkbox-color);\n\n  svg {\n    max-width: 100%;\n    max-height: 100%;\n\n    width: 100%;\n\n    color: var(--service-checkbox-icon-color);\n    fill: var(--service-checkbox-icon-color);\n\n    visibility: hidden;\n  }\n`\n\nexport const CheckboxContainer = styled(Div)`\n  position: relative;\n\n  & > input[type='checkbox'] {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 0;\n    height: 0;\n    visibility: hidden;\n\n    &:checked + ${Checkbox} {\n      background-color: var(--service-checkbox-color-checked);\n\n      svg {\n        visibility: visible;\n      }\n    }\n  }\n`\n\nexport const Price = styled(P)`\n  font-family: var(--font-body);\n  font-weight: 700;\n  font-size: var(--service-price-font-size);\n\n  color: var(--services-text-color);\n\n  text-align: right;\n\n  margin: 0;\n\n  ${({ disabled }) =>\n    disabled &&\n    css`\n      opacity: 0.7;\n    `}\n`\n","// React\nimport React, { useEffect, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\n\n// Components\nimport { Name, Checkbox, CheckboxContainer, Price, ServiceContainer } from './styles'\nimport Input from 'ui/elements/Input'\nimport Label from 'ui/elements/Label'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCheck as farCheck } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { fetchPrices } from 'shop-components/redux/actions/price'\nimport { money } from 'shared/utils/format'\nimport CartActions from 'store/v2/redux/actions/cart'\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\n\nconst Service = ({ cart, service, fetchPrice, toggleService, dates, inCart, price, currency, hasPrice }) => {\n  const [checked, setChecked] = useState(inCart)\n  const [loading, setLoading] = useState(false)\n\n  useEffect(() => {\n    if (service?.id && cart?.id) {\n      fetchPrice({ id: service.id, cartId: cart.id })\n    }\n  }, [dates.start, dates.stop, service?.id, cart?.id])\n\n  useEffect(() => {\n    if (inCart !== checked) {\n      setChecked(inCart)\n    }\n  }, [inCart, checked])\n\n  const handleToggleService = useCallback(() => {\n    const value = !checked\n\n    setLoading(true)\n    setChecked((prev) => !prev)\n\n    toggleService({ id: service.id, value })\n      .catch(() => {\n        setChecked((prev) => !prev)\n      })\n      .finally(() => {\n        setLoading(false)\n      })\n  }, [checked, service?.id])\n\n  if (!service) return null\n\n  return (\n    <ServiceContainer hasPrice={price && hasPrice}>\n      <Label htmlFor={service.id} modifiers=\"no-margin\">\n        <CheckboxContainer>\n          <Input\n            id={service.id}\n            type=\"checkbox\"\n            value={checked}\n            checked={checked}\n            onChange={handleToggleService}\n            disabled={loading}\n          />\n          <Checkbox>\n            <FontAwesomeIcon icon={farCheck} />\n          </Checkbox>\n        </CheckboxContainer>\n      </Label>\n      <Name disabled={!checked}>\n        <Label htmlFor={service.id}>{service.name}</Label>\n      </Name>\n      {price && hasPrice && <Price disabled={!checked}>{money(price.price_each_in_cents, currency)}</Price>}\n    </ServiceContainer>\n  )\n}\n\nService.propTypes = {\n  service: PropTypes.object,\n  cart: PropTypes.object,\n  fetchPrice: PropTypes.func,\n  toggleService: PropTypes.func,\n  dates: PropTypes.object,\n  price: PropTypes.object,\n  currency: PropTypes.object,\n  inCart: PropTypes.bool,\n  hasPrice: PropTypes.bool\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const dates = { start: cart?.starts_at, stop: cart?.stops_at }\n\n  const price = state.items.records[props.service?.product_group_id]?.price\n  const currency = window.booqableOptions.currency\n\n  const hasPrice =\n    price?.price_each_in_cents >= 0 &&\n    price?.price_each_in_cents !== null &&\n    props.service?.price_type !== 'none' &&\n    props.service?.price_type !== null &&\n    SettingsUtils.get('store.use_prices')\n\n  return { dates, cart, price, currency, hasPrice }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  const book = ({ id, quantity }) =>\n    CartActions.book({\n      item_id: id,\n      quantity,\n      type: 'set'\n    })\n\n  return {\n    fetchPrice: (params) => dispatch(fetchPrices(params)),\n    toggleService: ({ id, value }) => {\n      if (value) {\n        return book({ id, quantity: 1 })\n      } else {\n        return book({ id, quantity: 0 })\n      }\n    }\n  }\n}\n\nexport default reduxConnect(mapStateToProps, mapDispatchToProps)(Service)\n","// React\nimport React, { Fragment, useEffect, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { HostStyles, Container, Title } from './styles'\nimport Service from './Service'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ItemActions from 'back_office/v2/redux/actions/item_actions'\nimport LineActions from 'back_office/v2/redux/actions/line_actions'\n\nconst Services = ({ cartId, services, itemIds, fetchLines, fetchServices, title, t }) => {\n  useEffect(() => {\n    if (!cartId) return\n\n    // We need to fetch both services and lines\n    // because we need to know which services are already added to the cart\n    fetchLines(cartId).then(() => {\n      fetchServices()\n    })\n  }, [cartId])\n\n  const isServiceInCart = useCallback((serviceId) => itemIds.includes(serviceId), [itemIds])\n\n  if (!services.size()) return null\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <Container>\n        <Title>{title || t('user.store.additional_services')}</Title>\n        {services?.map((service) => {\n          const inCart = isServiceInCart(service.id)\n\n          return <Service key={service.id} service={service} inCart={inCart} />\n        })}\n      </Container>\n    </Fragment>\n  )\n}\n\nServices.propTypes = {\n  cartId: PropTypes.string,\n  services: PropTypes.object,\n  itemIds: PropTypes.object,\n  fetchLines: PropTypes.func,\n  fetchServices: PropTypes.func,\n  t: PropTypes.func,\n  // Element attributes\n  title: PropTypes.any\n}\n\nconst mapStateToProps = (state, _props) => {\n  const cartId = state.client.cartId\n  const cart = state.orm.carts.getById(cartId)\n\n  const lines = state.orm.lines.getAll({ id: cart?.lines })\n  const itemIds = lines.map((line) => line.item_id)\n\n  const enabledServices = state.orm.product_groups.getAll({\n    product_type: 'service',\n    show_in_store: true,\n    archived_at: null\n  })\n  const services = state.orm.products\n    .getAll({ product_type: 'service', product_group_id: enabledServices.pluck('id') })\n    .sortBy((product) => enabledServices.getById(product.product_group_id)?.sorting_weight)\n\n  return { cartId, services, itemIds }\n}\n\nconst mapDispatchToProps = (_dispatch, _props) => {\n  return {\n    fetchLines: (id) => {\n      return LineActions.fetchAll({\n        apiVersion: 'boomerang',\n        include: [\n          'item',\n          'item.photo',\n          'item.bundle_items',\n          'item.bundle_items.product',\n          'item.bundle_items.product.photo'\n        ],\n        filter: {\n          owner_id: id\n        }\n      })\n    },\n    fetchServices: () => {\n      return ItemActions.fetchAll({\n        apiVersion: 'boomerang',\n        filter: { services: true, archived: false, show_in_store: true },\n        page: {\n          number: 1,\n          size: 100\n        }\n      })\n    }\n  }\n}\n\nconst decoratedComponent = compose(\n  withStore,\n  withTheme,\n  withTranslation('user'),\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Services)\n\nregisterCustomElement('bq-cart-services', decoratedComponent, {\n  attributes: ['title']\n})\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nimport P from 'ui/elements/P'\nimport Hr from 'ui/elements/Hr'\n\nconst BaseGrid = styled.div`\n  display: grid;\n  grid-template-columns: 1fr max-content;\n  grid-gap: 8px;\n\n  ${P} {\n    margin: 0;\n  }\n`\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --totals-text-color: var(--color-primary-foreground, ${color('Text/Primary')});\n\n    --totals-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --totals-breakdown-font-size: 16px;\n    --totals-breakdown-font-weight: 400;\n\n    --totals-total-font-size: 20px;\n    --totals-total-font-weight: 700;\n\n    --totals-error-padding: 16px;\n    --totals-error-border-radius: 8px;\n    --totals-error-background-color: #FFEAEF;\n    --totals-error-color: var(--color-red, ${color('Danger/Base')});\n    --totals-error-gap: 16px;\n    --totals-error-font-size: 16px;\n    --totals-error-font-weight: 400;\n  }\n\n  ${Hr} {\n    border: none;\n    border-top: var(--totals-border);\n  }\n`\n\nexport const Breakdown = styled(BaseGrid)`\n  ${P} {\n    font-family: var(--font-body);\n    font-size: var(--totals-breakdown-font-size);\n    font-weight: var(--totals-breakdown-font-weight);\n\n    color: var(--totals-text-color);\n  }\n`\n\nexport const Total = styled(BaseGrid)`\n  ${P} {\n    font-family: var(--font-body);\n    font-size: var(--totals-total-font-size);\n    font-weight: var(--totals-total-font-weight);\n\n    color: var(--totals-text-color);\n  }\n`\n\nexport const Error = styled.div`\n  display: grid;\n  grid-template-columns: max-content 1fr;\n  align-items: center;\n\n  padding: var(--totals-error-padding);\n\n  border-radius: var(--totals-error-border-radius);\n\n  background-color: var(--totals-error-background-color);\n\n  gap: var(--totals-error-gap);\n\n  svg {\n    width: 20px;\n    height: 20px;\n\n    fill: var(--totals-error-color);\n    color: var(--totals-error-color);\n  }\n\n  ${P} {\n    margin: 0;\n\n    font-family: var(--font-body);\n    font-size: var(--totals-error-font-size);\n    font-weight: var(--totals-error-font-weight);\n\n    color: var(--totals-error-color);\n  }\n`\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport Spacer from 'ui/blocks/Spacer'\nimport { Error } from './styles'\nimport P from 'ui/elements/P'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faExclamationTriangle as fasExclamationTriangle } from '@fortawesome/pro-regular-svg-icons'\n\n// Hooks\nimport { useCart } from 'shop-components/utils/useCart'\nimport { useOrm } from 'shared/utils/useOrm'\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useSettings } from 'shared/utils/useSettings'\n\nexport const Errors = ({ onError }) => {\n  let errorText\n  let cannotCheckout = false\n\n  const { cart, isOverdue, isEmpty } = useCart()\n\n  const useAvailability = useSettings('store.use_availability')\n\n  const unavailableLines = useOrm('lines', (lines) => {\n    return lines\n      .getAll({\n        id: cart?.lines,\n        can_checkout: false\n      })\n      .filter((line) => line.line_type !== 'delivery_rate')\n  })\n\n  const { t } = useTranslation('user')\n\n  const hasDates = !!(cart?.starts_at && cart?.stops_at)\n\n  if (hasDates && cannotCheckout) {\n    errorText = t('user.store.not_all_products_available')\n  }\n\n  if (!hasDates) {\n    errorText = t('user.store.select_a_period', 'Select a rental period')\n  }\n\n  if (isOverdue) {\n    errorText = t('user.checkout.dates_in_past')\n  }\n\n  if (useAvailability) {\n    cannotCheckout = unavailableLines.size() > 0\n  }\n\n  useEffect(() => {\n    if (errorText || isEmpty) {\n      onError(errorText || true)\n    } else {\n      onError(null)\n    }\n  }, [errorText, isEmpty])\n\n  if (!errorText) return null\n\n  return (\n    <Fragment>\n      <Error>\n        <FontAwesomeIcon icon={fasExclamationTriangle} />\n        <P>{errorText}</P>\n      </Error>\n      <Spacer />\n    </Fragment>\n  )\n}\n\nErrors.displayName = 'Errors'\n\nErrors.propTypes = {\n  onError: PropTypes.func\n}\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nconst statusColors = {\n  error: '--book-button-error-color'\n}\n\nexport const HostStyles = createGlobalStyle`\n  :host {\n    --book-button-button-color: var(--color-accent-background, ${color('branding')});\n    --book-button-button-label-color: var(--color-accent-foreground, ${color('white')});\n\n    --secondary-button-button-color: var(--color-primary-background, ${color('white')});\n    --secondary-button-button-label-color: var(--color-primary-foreground, ${color('Text/Primary')});\n    --secondary-button-button-border: 1px solid var(--color-border, ${color('Misc/Divider')});\n\n    --book-button-error-color: var(--color-red, ${color('Danger/Base')});\n\n    --book-button-label-weight: 700;\n\n    --book-button-input-border-radius: 6px;\n    --book-button-button-border-radius: 6px;\n\n    --book-button-control-height: 48px;\n\n    --book-button-button-padding: 0 14px;\n    --book-button-button-width: 100%;\n  }\n\n  * {\n    box-sizing: border-box;\n  }\n\n  @keyframes spin {\n    0% {\n      transform: rotate(0deg);\n    }\n\n    100% {\n      transform: rotate(360deg);\n    }\n  }\n`\n\nexport const Label = styled.span`\n  color: var(--book-button-button-label-color);\n\n  font-weight: var(--book-button-label-weight);\n`\n\nexport const Overlay = styled.div`\n  position: absolute;\n\n  width: 100%;\n  height: 100%;\n\n  top: 0;\n  left: 0;\n\n  display: flex;\n  align-items: center;\n  justify-content: center;\n\n  svg {\n    max-height: 18px;\n    max-width: 18px;\n\n    height: 100%;\n    width: 100%;\n\n    &.loading {\n      animation: spin 1s linear infinite;\n    }\n  }\n`\n\nexport const Button = styled.button`\n  display: block;\n  position: relative;\n\n  width: var(--book-button-button-width);\n  height: var(--book-button-control-height);\n\n  padding: var(--book-button-button-padding);\n\n  background-color: var(--book-button-button-color);\n  color: var(--book-button-button-label-color);\n\n  border: none;\n  border-radius: var(--book-button-button-border-radius);\n\n  cursor: pointer;\n\n  &:hover {\n    box-shadow: inset 0px 0px 400px 110px rgba(0, 0, 0, 0.12);\n  }\n\n  transition: all 0.2s ease-in-out;\n\n  ${({ loading }) =>\n    loading &&\n    css`\n      cursor: progress;\n\n      ${Label} {\n        opacity: 0;\n        visibility: hidden;\n      }\n    `}\n\n  ${({ disabled }) =>\n    disabled &&\n    css`\n      cursor: not-allowed;\n\n      opacity: 0.6;\n    `}\n\n  ${({ status }) =>\n    status &&\n    css`\n      background-color: var(${statusColors[status]});\n\n      ${Label} {\n        opacity: 0;\n        visibility: hidden;\n      }\n    `}\n\n  ${({ secondary }) =>\n    secondary &&\n    css`\n      background-color: var(--secondary-button-button-color);\n\n      border: var(--secondary-button-button-border);\n\n      ${Label} {\n        color: var(--secondary-button-button-label-color);\n      }\n    `}\n`\n","// React\nimport React, { Fragment, useState, useCallback } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { Button as ButtonContainer, HostStyles, Label, Overlay } from './styles'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSpinnerThird as farSpinnerThird, faTimes as farTimes } from '@fortawesome/pro-regular-svg-icons'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nconst CheckoutButton = ({ disabled, t, book }) => {\n  const [loading, setLoading] = useState(false)\n  const [status, setStatus] = useState(null)\n\n  const handleBook = useCallback(() => {\n    let timeout\n\n    setLoading(true)\n\n    book()\n      .catch(() => {\n        setStatus('error')\n      })\n      .finally(() => {\n        setLoading(false)\n        timeout = setTimeout(() => {\n          setStatus(null)\n        }, 3000)\n      })\n\n    return () => {\n      clearTimeout(timeout)\n    }\n  }, [])\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <ButtonContainer\n        onClick={loading || disabled ? undefined : handleBook}\n        disabled={disabled}\n        loading={loading ? true : undefined}\n        status={status}\n        className=\"bq-button\"\n      >\n        <Label>{t('user.store.checkout')}</Label>\n        {loading && (\n          <Overlay>\n            <FontAwesomeIcon className=\"loading\" icon={farSpinnerThird} size=\"sm\" />\n          </Overlay>\n        )}\n        {status === 'error' && (\n          <Overlay>\n            <FontAwesomeIcon icon={farTimes} size=\"sm\" />\n          </Overlay>\n        )}\n      </ButtonContainer>\n    </Fragment>\n  )\n}\n\nCheckoutButton.displayName = 'Button'\n\nCheckoutButton.propTypes = {\n  disabled: PropTypes.bool,\n  book: PropTypes.func,\n  t: PropTypes.func\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    book: () => {\n      return new Promise((resolve, reject) => {\n        if (ClientActions.evaluateCartOverdue()) {\n          reject(new Error('Cart is overdue'))\n        } else {\n          ClientActions.setCheckingOut()\n\n          resolve()\n        }\n      })\n    }\n  }\n}\n\nexport default compose(withTranslation('user'), reduxConnect(null, mapDispatchToProps))(CheckoutButton)\n","// React\nimport { useCallback } from 'react'\n\nexport const useNavigation = () => {\n  const backToStore = useCallback(() => {\n    const previewing = window.location.pathname.includes('/preview')\n    const backUrl = window.booqableOptions?.cart.backToStoreUrl\n\n    if (previewing || !backUrl) {\n      return window.history.back()\n    }\n\n    return window.location.replace(backUrl)\n  }, [])\n\n  return { backToStore }\n}\n","// React\nimport React, { Fragment, useCallback } from 'react'\nimport PropTypes from 'prop-types'\n\n// Components\nimport { Button as ButtonContainer, HostStyles, Label } from './styles'\n\n// Shared\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { useNavigation } from 'shop-components/utils/navigation'\n\nconst BackToStoreButton = ({ disabled, t }) => {\n  const { backToStore } = useNavigation()\n\n  const handleGoBackToStore = useCallback((e) => {\n    e?.preventDefault()\n\n    backToStore()\n  }, [])\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <ButtonContainer\n        onClick={disabled ? undefined : handleGoBackToStore}\n        disabled={disabled}\n        className=\"bq-button\"\n        secondary\n      >\n        <Label>{t('user.store.continue_shopping')}</Label>\n      </ButtonContainer>\n    </Fragment>\n  )\n}\n\nBackToStoreButton.displayName = 'Button'\n\nBackToStoreButton.propTypes = {\n  disabled: PropTypes.bool,\n  t: PropTypes.func\n}\n\nexport default withTranslation('user')(BackToStoreButton)\n","// React\nimport React, { Fragment } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Components\nimport { Breakdown } from './styles'\nimport P from 'ui/elements/P'\nimport Hr from 'ui/elements/Hr'\n\n// Shared\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\nimport { withTranslation } from 'shared/utils/withTranslation'\n\nconst Discounts = ({ lines, currency }) => {\n  if (!lines.length) return null\n\n  return (\n    <Fragment>\n      <Breakdown>\n        {lines.map(({ key, label, value }) => (\n          <Fragment key={key}>\n            <P>{label}</P>\n            <P>{FormatUtils.money(value, currency)}</P>\n          </Fragment>\n        ))}\n      </Breakdown>\n      <Hr />\n    </Fragment>\n  )\n}\n\nDiscounts.propTypes = {\n  lines: PropTypes.array,\n  currency: PropTypes.object\n}\n\nconst mapStateToProps = (state, props) => {\n  const lines = []\n\n  const currency = state.client.currency.toJS()\n  const coupon = state.orm.coupons.getById(props.cart.coupon_id)\n  const discountLabel = props.t('user.checkout.discount')\n\n  if (props.cart.discount_percentage !== 0) {\n    lines.push({\n      key: 'cart',\n      label: props.t('user.auth.account_discount'),\n      value: props.cart.discount_in_cents * -1\n    })\n  }\n\n  if (coupon) {\n    let label\n    const value = props.cart.coupon_discount_in_cents * -1\n\n    if (coupon.coupon_type === 'percentage') {\n      label = `${props.t('user.checkout.coupon')}: ${coupon.value}% ${discountLabel.toLowerCase()}`\n    } else {\n      label = `${props.t('user.checkout.coupon')} ${discountLabel.toLowerCase()}`\n    }\n\n    lines.push({ key: 'coupon', label, value })\n  }\n\n  return {\n    lines,\n    currency\n  }\n}\n\nexport default compose(\n  withTranslation('user'),\n  reduxConnect(mapStateToProps)\n)(Discounts)\n","// React\nimport React, { Fragment, useState } from 'react'\nimport { compose } from 'redux'\n\n// Components\nimport { Breakdown, HostStyles, Total } from './styles'\nimport P from 'ui/elements/P'\nimport Spacer from 'ui/blocks/Spacer'\nimport Div from 'ui/elements/Div'\nimport { Errors } from './Errors'\nimport CheckoutButton from './Buttons/Checkout'\nimport BackToStoreButton from './Buttons/BackToStore'\nimport Discounts from './Discounts'\n\n// Hooks\nimport { useTranslation } from 'shared/utils/useTranslation'\nimport { useCart } from 'shop-components/utils/useCart'\n\n// Shared\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport { Format as FormatUtils } from 'back_office/v2/utils/utils'\n\nconst Totals = () => {\n  const [error, setError] = useState(null)\n\n  const { cart, totalPriceAttribute, showPrices, currency } = useCart()\n\n  const { t } = useTranslation('user')\n\n  if (!cart?.lines) return null\n\n  return (\n    <Fragment>\n      <HostStyles />\n      <Div>\n        {showPrices && (\n          <Fragment>\n            <Discounts cart={cart} />\n            <Total>\n              <P>{t('user.store.subtotal')}</P>\n              <P>{FormatUtils.money(cart[totalPriceAttribute], currency)}</P>\n            </Total>\n            {cart.deposit_in_cents > 0 && (\n              <Fragment>\n                <Spacer size=\"xs\" />\n                <Breakdown>\n                  <P>{t('user.store.security_deposit')}</P>\n                  <P>{FormatUtils.money(cart.deposit_in_cents, currency)}</P>\n                </Breakdown>\n              </Fragment>\n            )}\n            <Spacer />\n          </Fragment>\n        )}\n        <Errors onError={setError} />\n        <CheckoutButton disabled={!!error} />\n        <Spacer />\n        <BackToStoreButton />\n      </Div>\n    </Fragment>\n  )\n}\n\nconst decoratedComponent = compose(withTheme, withStore)(Totals)\n\nregisterCustomElement('bq-cart-totals', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { css, createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n  :host, :root {\n    --minicart-launcher-height: 60px;\n    --minicart-launcher-open-width: 325px;\n    --minicart-launcher-bottom: 16px;\n    --minicart-launcher-right: 16px;\n    --minicart-launcher-accent-color: var(--color-accent-background, ${color('branding')});\n    --minicart-launcher-background-color: var(--color-accent-foreground, ${color('white')});\n    --minicart-launcher-border-radius: var(--border-radius-sm, 8px);\n    --minicart-launcher-padding: 8px;\n    --minicart-launcher-font-size: 13px;\n    --minicart-launcher-icon-size: 26px;\n    --minicart-launcher-font: var(--font-body, --minicart-font, Source Sans Pro, sans-serif);\n    --minicart-launcher-shadow: 0px 4px 12px 0px ${color('black')};\n  }\n`\n\nexport const Launcher = styled.div`\n  display: flex;\n  position: fixed;\n\n  right: var(--minicart-launcher-right);\n  bottom: var(--minicart-launcher-bottom);\n\n  height: var(--minicart-launcher-height);\n  width: var(--minicart-launcher-height);\n\n  font-family: var(--minicart-launcher-font);\n\n  overflow: hidden;\n\n  border-radius: var(--minicart-launcher-border-radius);\n\n  cursor: pointer;\n\n  transition: width 0.5s ease-in-out 0.1s;\n  transition-delay: 0.5s;\n\n  box-shadow: var(--minicart-launcher-shadow);\n\n  &:hover {\n    ${({ cartOpen }) => !cartOpen && css`\n      width: var(--minicart-launcher-open-width);\n    `}\n  }\n\n`\n\nexport const MiniCartContainer = styled.div`\n  position: fixed;\n  right: 16px;\n  bottom: 84px;\n`\n\nexport const Icon = styled.div`\n  display: flex;\n\n  justify-content: center;\n  align-items: center;\n\n  height: var(--minicart-launcher-height);\n  min-width: var(--minicart-launcher-height);\n\n  color: var(--minicart-launcher-background-color);\n  background: var(--minicart-launcher-accent-color);\n\n  > svg {\n    font-size: var(--minicart-launcher-icon-size);\n    height: var(--minicart-launcher-icon-size);\n    width: var(--minicart-launcher-icon-size);\n  }\n`\n\nexport const Summary = styled.div`\n  padding: var(--minicart-launcher-padding);\n\n  font-size: var(--minicart-launcher-font-size);\n\n  width: calc(var(--minicart-launcher-open-width) - var(--minicart-launcher-height));\n  /* Akwardly split line to please eslint */\n  min-width: calc(var(--minicart-launcher-open-width) - var(--minicart-launcher-height)\n    - (var(--minicart-launcher-padding) * 2));\n`\n\nexport const Dates = styled.div`\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n\n  > svg {\n    font-size: var(--minicart-launcher-font-size);\n    height: var(--minicart-launcher-font-size);\n    width: var(--minicart-launcher-font-size);\n  }\n`\n\nexport const Details = styled.div`\n > div {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n }\n`\n\nLauncher.MiniCartContainer = MiniCartContainer\nLauncher.Icon = Icon\nLauncher.Summary = Summary\nLauncher.Dates = Dates\nLauncher.Details = Details\n\nexport default Launcher\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faCartShopping as fasCartShopping, faArrowRight as fasArrowRight } from '@fortawesome/pro-solid-svg-icons'\n\n// Components\nimport BLauncher, { HostStyles } from './styles'\nimport MiniCart from 'shop-components/components/MiniCart'\n\n// Shared\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport Format from 'shared/utils/format'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\n\nconst Launcher = ({\n  cart,\n  cartOpen,\n  toggleCart,\n  useTimes,\n  usePrices,\n  timeFormat,\n  itemCount,\n  currency,\n  totalPriceAttribute,\n  t\n}) => {\n  useEffect(() => {\n    setUserFrameworkCartData()\n  }, [cart])\n\n  return (\n    <Fragment>\n      <HostStyles />\n      {cart && (\n        <BLauncher.MiniCartContainer>\n          <MiniCart inPortal t={t} />\n        </BLauncher.MiniCartContainer>\n      )}\n      <BLauncher\n        key={`booqable-launcher-${cartOpen}`}\n        id=\"booqable-launcher\"\n        cartOpen={cartOpen}\n        onClick={toggleCart.bind(null, !cartOpen)}\n      >\n        <BLauncher.Icon>\n          <FontAwesomeIcon icon={fasCartShopping} size=\"lg\" />\n        </BLauncher.Icon>\n        <BLauncher.Summary id=\"booqable-launcher-summary\">\n          <BLauncher.Details>\n            {cart?.starts_at ?\n              (\n                <BLauncher.Dates>\n                  <span>\n                    {Format.date(cart.starts_at)}\n                    {useTimes && Format.date(cart.starts_at, timeFormat)}\n                  </span>\n                  <FontAwesomeIcon icon={fasArrowRight} />\n                  <span>\n                    {Format.date(cart.stops_at)}\n                    {useTimes && Format.date(cart.stops_at, timeFormat)}\n                  </span>\n                </BLauncher.Dates>\n              ) :\n              (\n                <BLauncher.Dates>{t('user.store.select_a_period')}</BLauncher.Dates>\n              )}\n          </BLauncher.Details>\n          <hr />\n          <BLauncher.Details>\n            {cart && itemCount ?\n              (\n                <div>\n                  <span>\n                    {itemCount} {t('common.resources.item', { count: itemCount })}\n                  </span>\n                  {usePrices && (\n                    <span className=\"bq-total\">{Format.money(cart?.get(totalPriceAttribute), currency)}</span>\n                  )}\n                </div>\n              ) :\n              (\n                <span>{t('user.store.cart_empty')}</span>\n              )}\n          </BLauncher.Details>\n        </BLauncher.Summary>\n      </BLauncher>\n    </Fragment>\n  )\n}\n\nLauncher.displayName = 'MiniCartLauncher'\n\nLauncher.propTypes = {\n  cartOpen: PropTypes.bool,\n  toggleCart: PropTypes.func,\n  cart: PropTypes.object,\n  useTimes: PropTypes.bool,\n  usePrices: PropTypes.bool,\n  timeFormat: PropTypes.string,\n  totalPriceAttribute: PropTypes.string,\n  currency: PropTypes.object,\n  itemCount: PropTypes.number,\n  t: PropTypes.func\n}\n\nconst mapStateToProps = (state) => {\n  let timeFormat, totalPriceAttribute\n\n  if (state.settings.get('dates.use_am_pm')) {\n    timeFormat = 'hh:mm A'\n  } else {\n    timeFormat = 'HH:mm'\n  }\n\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const lines = state.orm.lines.getAll({ id: cart?.lines, product_type: ['consumable', 'rental', 'bundle'] })\n\n  const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n  if (state.settings.get('pricing.tax_strategy') === 'inclusive') {\n    totalPriceAttribute = 'grand_total_with_tax_in_cents'\n  } else {\n    totalPriceAttribute = 'grand_total_in_cents'\n  }\n\n  return {\n    cartOpen: state.client.cartOpen,\n    cart,\n    currency: state.client.currency,\n    totalPriceAttribute,\n    timeFormat,\n    useTimes: state.settings.get('store.use_times'),\n    usePrices: state.settings.get('store.use_prices'),\n    itemCount\n  }\n}\n\nconst mapDispatchToProps = () => {\n  return {\n    toggleCart: (cartOpen) => {\n      return ClientActions.toggleCart(cartOpen)\n    },\n    closePicker: () => {\n      return ClientActions.toggleModalPicker(false)\n    }\n  }\n}\n\nconst decoratedComponent = compose(\n  withTranslation('user'),\n  withTheme,\n  withStore,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(Launcher)\n\nregisterCustomElement('bq-minicart-launcher', decoratedComponent)\n\nexport default decoratedComponent\n","import styled, { createGlobalStyle } from 'styled-components'\nimport { color } from 'ui/themes/utils'\n\nexport const HostStyles = createGlobalStyle`\n  :host, :root {\n    /* Container variables */\n    --minicart-button-size: 24px;\n    --minicart-button-color: var(--color-primary-foreground, ${color('white')});\n    --minicart-button-hover-color: var(--color-primary-foreground, ${color('white')});\n    --minicart-button-hover-opacity: 0.6;\n    --minicart-button-transition-duration: 0ms;\n\n    /* Updated container variables */\n    --minicart-button-transition-property: none;\n    --minicart-button-transition-timing-function: linear;\n    --minicart-button-transition-delay: 0ms;\n    --minicart-button-outer-padding: 0px;\n    --minicart-button-outer-border: none;\n    --minicart-button-outer-hover-border: none;\n    --minicart-button-outer-border-radius: 0px;\n    --minicart-button-outer-background: transparent;\n    --minicart-button-outer-background-hover: transparent;\n    --minicart-button-outer-transition: none;\n\n    /* Badge variables */\n    --minicart-button-badge-color: var(--color-accent-foreground, ${color('white')});\n    --minicart-button-border-radius: 12px;\n    --minicart-button-padding: 4px;\n    --minicart-button-font: var(--font-body, --minicart-font, Source Sans Pro, sans-serif);\n    --minicart-button-font-size: 12px;\n    --minicart-button-accent-color: var(--color-accent-background, ${color('branding')});\n    --minicart-button-badge-size: 16px;\n  }\n`\n\nexport const Button = styled.div`\n  position: relative;\n\n  border: var(--minicart-button-outer-border);\n  border-radius: var(--minicart-button-outer-border-radius);\n  background: var(--minicart-button-outer-background);\n\n  padding: var(--minicart-button-outer-padding);\n\n  color: var(--minicart-button-color);\n\n  cursor: pointer;\n\n  > svg {\n    height: var(--minicart-button-size);\n    width: var(--minicart-button-size);\n  }\n\n  &:hover {\n    color: var(--minicart-button-hover-color);\n\n    border: var(--minicart-button-outer-hover-border);\n    background: var(--minicart-button-outer-background-hover);\n\n    > svg {\n      opacity: var(--minicart-button-hover-opacity);\n    }\n  }\n\n  transition-property: var(--minicart-button-transition-property);\n  transition-duration: var(--minicart-button-transition-duration);\n  transition-timing-function: var(--minicart-button-transition-timing-function);\n  transition-delay: var(--minicart-button-transition-delay);\n`\n\nexport const Badge = styled.div`\n  display: flex;\n  justify-content: center;\n  align-items: center;\n\n  position: absolute;\n  bottom: 50%;\n  left: 50%;\n\n  min-height: var(--minicart-button-badge-size);\n  min-width: var(--minicart-button-badge-size);\n  aspect-ratio: 1/1;\n\n  padding: var(--minicart-button-padding);\n\n  border-radius: var(--minicart-button-border-radius);\n\n  background: var(--minicart-button-accent-color);\n  color: var(--minicart-button-badge-color);\n\n  font-family: var(--minicart-button-font);\n  font-size: var(--minicart-button-font-size);\n  font-weight: 600;\n  line-height: var(--minicart-button-badge-size);\n  white-space: nowrap;\n  text-wrap: nowrap;\n\n  user-select: none;\n`\n\nButton.Badge = Badge\n\nexport default Button\n","// React\nimport React, { Fragment, useEffect } from 'react'\nimport PropTypes from 'prop-types'\nimport { connect as reduxConnect } from 'react-redux'\nimport { compose } from 'redux'\n\n// Libraries\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faShoppingCart as fasShoppingCart } from '@fortawesome/pro-solid-svg-icons'\nimport { faShoppingCart as farShoppingCart } from '@fortawesome/pro-regular-svg-icons'\nimport { faShoppingCart as falShoppingCart } from '@fortawesome/pro-light-svg-icons'\nimport { faShoppingCart as fatShoppingCart } from '@fortawesome/pro-thin-svg-icons'\n\nimport { StyleSheetManager } from 'styled-components'\n\n// Components\nimport BMiniCartButton, { HostStyles } from './styles'\nimport MiniCart from 'shop-components/components/MiniCart'\nimport Popover from 'ui/components/Popover'\nimport PortalWrapper from 'ui/components/PortalWrapper'\n\n// Shared\nimport { Settings as SettingsUtils } from 'back_office/v2/utils/utils'\nimport registerCustomElement from 'shop-components/utils/registerCustomElement'\nimport withStore from 'shop-components/utils/withStore'\nimport withTheme from 'shop-components/utils/withTheme'\nimport { withTranslation } from 'shared/utils/withTranslation'\nimport { setUserFrameworkCartData } from 'shared/utils/userFrameworkEvents'\nimport ClientActions from 'store/v2/redux/actions/client'\nimport useIsMobile from 'shared/utils/useIsMobile'\nimport { shouldForwardProp } from 'shared/utils/shouldForwardProp'\n\nconst getIcon = (style) => {\n  switch (style) {\n    case 'solid':\n      return fasShoppingCart\n    case 'regular':\n      return farShoppingCart\n    case 'light':\n      return falShoppingCart\n    case 'thin':\n      return fatShoppingCart\n    default:\n      return farShoppingCart\n  }\n}\n\nconst MiniCartButton = ({ cart, cartOpen, toggleCart, iconStyle, itemCount }) => {\n  const isMobile = useIsMobile()\n  const icon = getIcon(iconStyle)\n\n  useEffect(() => {\n    setUserFrameworkCartData()\n  }, [cart])\n\n  const renderCartButton = () => {\n    return (\n      <Fragment>\n        <HostStyles />\n        <BMiniCartButton\n          key=\"booqable-minicart-button\"\n          id=\"booqable-minicart-button\"\n          onClick={toggleCart.bind(null, !cartOpen)}\n        >\n          <FontAwesomeIcon icon={icon} size=\"lg\" />\n          {itemCount > 0 && <BMiniCartButton.Badge>{itemCount}</BMiniCartButton.Badge>}\n        </BMiniCartButton>\n      </Fragment>\n    )\n  }\n\n  const renderMiniCart = () => {\n    return (\n      <StyleSheetManager target={document.body} shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n        <MiniCart />\n      </StyleSheetManager>\n    )\n  }\n\n  if (isMobile) {\n    return (\n      <Fragment>\n        <PortalWrapper open={cartOpen}>\n          <StyleSheetManager target={document.body} shouldForwardProp={shouldForwardProp} enableVendorPrefixes>\n            <MiniCart />\n          </StyleSheetManager>\n        </PortalWrapper>\n        {renderCartButton()}\n      </Fragment>\n    )\n  }\n\n  return (\n    <Popover\n      open={cartOpen}\n      onClose={toggleCart.bind(null, false)}\n      method=\"manual\"\n      direction=\"bottom-end\"\n      content={renderMiniCart}\n      useContentWrapper={false}\n      zIndex={9999999}\n    >\n      {renderCartButton()}\n    </Popover>\n  )\n}\n\nMiniCartButton.displayName = 'MiniCartButton'\n\nMiniCartButton.propTypes = {\n  cart: PropTypes.object,\n  cartOpen: PropTypes.bool,\n  toggleCart: PropTypes.func,\n  itemCount: PropTypes.number,\n  iconStyle: PropTypes.oneOf(['solid', 'regular', 'light', 'thin'])\n}\n\nconst mapStateToProps = (state, props) => {\n  const cart = state.orm.carts.getById(state.client.cartId)\n  const lines = state.orm.lines.getAll({ id: cart?.lines, product_type: ['consumable', 'rental', 'bundle'] })\n\n  const itemCount = lines.map((line) => line.quantity).reduce((a, b) => a + b, 0)\n\n  return {\n    isShowCartBehavior: SettingsUtils.get('store.behaviors.add_button') === 'show_cart',\n    cart,\n    cartOpen: state.client.cartOpen,\n    itemCount\n  }\n}\n\nconst mapDispatchToProps = (dispatch, props) => {\n  return {\n    toggleCart: (cartOpen) => {\n      return ClientActions.toggleCart(cartOpen)\n    }\n  }\n}\n\nconst decoratedComponent = compose(\n  withTranslation('user'),\n  withTheme,\n  withStore,\n  reduxConnect(mapStateToProps, mapDispatchToProps)\n)(MiniCartButton)\n\nregisterCustomElement('bq-minicart-button', decoratedComponent, {\n  attributes: ['icon-style']\n})\n\nexport default decoratedComponent\n","\n\nimport React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport cuid from 'cuid'\nimport Cookie from 'js-cookie'\nimport getFingerprint from 'shared/utils/get_fingerprint'\n\nimport LocaleActions from 'store/v2/redux/actions/locale'\nimport clientActions from 'store/v2/redux/actions/client'\nimport ItemActions from 'store/v2/redux/actions/item'\nimport BundleActions from 'store/v2/redux/actions/bundle'\nimport ProductGroupActions from 'store/v2/redux/actions/product_group'\nimport getProvider from 'store/v2/get_provider'\nimport { initShopTracking } from 'shared/utils/userFrameworkEvents'\n\nimport Cart from './scenes/cart'\nimport ProductGroup from './scenes/product_group'\nimport ProductList from './scenes/product_list'\nimport ProductButton from 'store/v2/react/scenes/product_button'\nimport ProductDetail from './scenes/product_detail'\nimport Quickview from './scenes/quickview'\nimport ProductSearch from './scenes/product_search'\nimport SeparateDatePicker from './scenes/separate_date_picker'\nimport CollectionList from './scenes/collection_list'\nimport FilterBar from './scenes/filter_bar'\nimport SortingSelect from './scenes/sorting_select'\nimport Sidebar from './scenes/sidebar'\nimport EmbeddableCart from './scenes/embeddable_cart'\nimport EmbeddableCartLines from './scenes/embeddable_cart_lines'\nimport EmbeddableCartSidebar from './scenes/embeddable_cart_sidebar'\nimport CartButton from './scenes/cart_button'\n\nimport 'shop-components/components/ProductAvailability'\nimport 'shop-components/components/ProductPrice/Price'\nimport 'shop-components/components/ProductPrice/Label'\nimport 'shop-components/components/ProductVariationsSelect'\nimport 'shop-components/components/ProductAvailabilityCalendar'\nimport 'shop-components/components/ProductButton'\nimport 'shop-components/components/DatePicker'\nimport 'shop-components/components/DatePicker/Modal'\nimport 'shop-components/components/MiniCart'\nimport 'shop-components/components/ProductGallery'\nimport 'shop-components/components/BundleItems'\nimport 'shop-components/components/CartLines'\nimport 'shop-components/components/CartServices'\nimport 'shop-components/components/CartTotals'\nimport 'shop-components/components/MiniCartLauncher'\nimport 'shop-components/components/MiniCartButton'\n\n// Set storeProvider for tracking\nif (!window.booqableOptions.storeProvider) {\n  if (getProvider.isWix()) {\n    window.booqableOptions.storeProvider = 'Wix'\n  } else if (getProvider.isWeebly()) {\n    window.booqableOptions.storeProvider = 'Weebly'\n  } else if (getProvider.isSquarespace()) {\n    window.booqableOptions.storeProvider = 'Squarespace'\n  } else if (getProvider.isShopify()) {\n    window.booqableOptions.storeProvider = 'Shopify'\n  }\n}\n\nlet cartId\n\n// Migrate 'old' cookie to localStorage\nif ((cartId = Cookie.get('cartId'))) {\n  localStorage.bqCartId = cartId\n  Cookie.remove('cartId')\n}\n\nif ((cartId = localStorage.bqCartId)) {\n  clientActions.setCartId(cartId)\n}\n\nconst booqableRoots = []\n\n// memoize root elements\nlet cartRoot, quickviewRoot\n\nwindow.initBooqableComponents = function () {\n  for (const root of Array.from(booqableRoots)) {\n    root?.unmount()\n  }\n\n  // For fetching product card data\n  const cardIds = []\n\n  // For fetching button/detail data\n  const detailIds = []\n\n  const initializeLocale = () => {\n    let locale\n\n    if (navigator.language != null) {\n      locale = navigator.language\n    } else if (navigator.languages != null) {\n      locale = navigator.languages[0]\n    }\n\n    return LocaleActions.set(locale)\n  }\n\n  const initializeLauncher = () => {\n    if (window.booqableOptions.disableLauncher) {\n      return\n    }\n\n    const embeddableCartElements = {\n      'booqable-cart-button': document.querySelector('.booqable-cart-button'),\n      'booqable-embeddable-cart': document.querySelector('.booqable-embeddable-cart'),\n      'booqable-embeddable-cart-lines': document.querySelector('.booqable-embeddable-cart-lines'),\n      'booqable-embeddable-cart-sidebar': document.querySelector('.booqable-embeddable-cart-sidebar'),\n      'bq-minicart': document.querySelector('bq-minicart'),\n      'bq-minicart-launcher': document.querySelector('bq-minicart-launcher'),\n      'bq-minicart-button': document.querySelector('bq-minicart-button'),\n      'bq-date-picker': document.querySelector('bq-date-picker'),\n      'bq-date-picker-modal': document.querySelector('bq-date-picker-modal')\n    }\n\n    const usedEmbeddableCartElements = Object.entries(embeddableCartElements).filter(([_, v]) => v !== null)\n\n    if (usedEmbeddableCartElements.length > 0) {\n      // We save the embeddableCartElements key to the booqableOptions objects for tracking purposes\n      window.booqableOptions.embeddableCartElements = Object.keys(\n        Object.fromEntries(usedEmbeddableCartElements)\n      ).join(', ')\n\n      // Embeddable cart is being used, don't use launcher\n      return\n    }\n\n    // # Initialize the cart launcher\n    let launcher\n\n    if (!(launcher = document.getElementById('booqable-cart'))) {\n      launcher = document.createElement('div')\n      launcher.setAttribute('id', 'booqable-cart')\n      document.body.appendChild(launcher)\n      clientActions.setFloatingCart()\n    }\n\n    const component = <Cart />\n\n    cartRoot = cartRoot || createRoot(document.getElementById('booqable-cart'))\n    cartRoot.render(component)\n\n    return launcher.setAttribute('initialized', 'true')\n  }\n\n  const initializeProductQuickview = () => {\n    // # Initialize quickview\n    const quickview = document.createElement('div')\n\n    quickview.setAttribute('id', 'booqable-quickview')\n    document.body.appendChild(quickview)\n\n    const component = <Quickview />\n\n    quickviewRoot = quickviewRoot || createRoot(document.getElementById('booqable-quickview'))\n\n    return quickviewRoot.render(component)\n  }\n\n  const initializeLegacy = () => {\n    // # Support for legacy v1 components\n    const legacyComponents = document.getElementsByClassName('booqable-product-component')\n\n    return Array.from(legacyComponents).map((node) => (node.className += ' booqable-product-button'))\n  }\n\n  const initializeProducts = () => {\n    const products = document.getElementsByClassName('booqable-product')\n\n    const result = []\n\n    for (const node of Array.from(products)) {\n      if (node.parentElement.className !== 'booqable-product-list') {\n        // Get product group id\n        const { id } = node.dataset\n\n        cardIds.push(id)\n\n        const component = <ProductGroup {...node.dataset} />\n        const root = createRoot(node)\n\n        root.render(component)\n        result.push(booqableRoots.push(root))\n      } else {\n        result.push(undefined)\n      }\n    }\n\n    return result\n  }\n\n  const initializeProductButtons = () => {\n    // # Render all products buttons\n    const productButtons = document.getElementsByClassName('booqable-product-button')\n\n    const result = []\n\n    for (const node of Array.from(productButtons)) {\n      const { dataset } = node\n      // Get product group id\n      const { id } = dataset\n\n      dataset.uiKey = id\n      dataset.productGroupId = id\n      detailIds.push(id)\n\n      const component = <ProductButton {...dataset} />\n      const root = createRoot(node)\n\n      root.render(component)\n      result.push(booqableRoots.push(root))\n    }\n\n    return result\n  }\n\n  const initializeProductDetails = () => {\n    // # Render all product details\n    const productDetails = document.getElementsByClassName('booqable-product-detail')\n\n    const result = []\n\n    for (const node of Array.from(productDetails)) {\n      const { dataset } = node\n      // Get product group id\n      const { id } = dataset\n\n      dataset.uiKey = id\n      dataset.productGroupId = id\n      detailIds.push(id)\n\n      const component = <ProductDetail {...dataset} />\n      const root = createRoot(node)\n\n      root.render(component)\n      result.push(booqableRoots.push(root))\n    }\n\n    return result\n  }\n\n  const initializeProductLists = () => {\n    // # Render Product List component\n    const productLists = document.getElementsByClassName('booqable-product-list')\n\n    const result = []\n\n    for (const node of Array.from(productLists)) {\n      const props = node.dataset\n\n      props.uiKey = cuid()\n\n      const component = <ProductList {...props} />\n      const root = createRoot(node)\n\n      root.render(component)\n      result.push(booqableRoots.push(root))\n    }\n\n    return result\n  }\n\n  const initializeProductSearch = () => {\n    // # Render product search component\n    const productSearches = document.getElementsByClassName('booqable-product-search')\n\n    const result = []\n\n    for (const node of Array.from(productSearches)) {\n      const props = node.dataset\n\n      props.uiKey = cuid()\n\n      const component = <ProductSearch {...props} />\n      const root = createRoot(node)\n\n      root.render(component)\n      result.push(booqableRoots.push(root))\n    }\n\n    return result\n  }\n\n  const initializeStandardComponents = () => {\n    const result = []\n    const components = {\n      'booqable-datepicker': SeparateDatePicker,\n      'booqable-categories': CollectionList,\n      'booqable-collections': CollectionList,\n      'booqable-bar': FilterBar,\n      'booqable-sort': SortingSelect,\n      // Re-enable when availability filtering performance is improved\n      // 'booqable-filter': FilterSelect,\n      'booqable-sidebar': Sidebar,\n      'booqable-embeddable-cart': EmbeddableCart,\n      'booqable-embeddable-cart-lines': EmbeddableCartLines,\n      'booqable-embeddable-cart-sidebar': EmbeddableCartSidebar,\n      'booqable-cart-button': CartButton\n    }\n\n    Object.keys(components).forEach((className) => {\n      const nodes = document.getElementsByClassName(className)\n\n      for (const node of Array.from(nodes)) {\n        const props = node.dataset\n        const Component = components[className]\n        const root = createRoot(node)\n\n        root.render(<Component {...props} />)\n        result.push(booqableRoots.push(root))\n      }\n    })\n\n    return result\n  }\n\n  initializeLocale()\n  initializeLauncher()\n  initializeProductQuickview()\n  initializeLegacy()\n  initializeProducts()\n  initializeProductButtons()\n  initializeProductDetails()\n  initializeProductLists()\n  initializeProductSearch()\n  initializeStandardComponents()\n\n  // # Fetch all product groups on the page\n  if (cardIds.length > 0) {\n    if (!window.bqFetchingProducts) {\n      window.bqFetchingProducts = true\n\n      ItemActions.fetchAll({ ids: cardIds, cart_id: cartId, include: 'photo', apiVersion: 3 })\n        .then(() => {\n          window.bqFetchingProducts = false\n        }).catch((e) => {\n          window.bqFetchingProducts = false\n\n          if (e === 'Online reservations are disabled') {\n            booqableRoots.forEach((root) => root?.unmount())\n\n            cartRoot = cartRoot || createRoot(document.getElementById('booqable-cart'))\n            cartRoot.unmount()\n          }\n        })\n    }\n  }\n\n  if (detailIds.length > 0) {\n    window.bqFetchingDetailProducts = true\n\n    const actions = []\n\n    actions.push(ProductGroupActions.fetchAll({\n      ids: detailIds,\n      cart_id: cartId,\n      include: 'photos,products',\n      apiVersion: 3\n    }))\n\n    actions.push(BundleActions.fetchAll({\n      ids: detailIds,\n      cart_id: cartId,\n      include: [\n        'photos',\n        'bundle_items',\n        'bundle_items.product',\n        'bundle_items.product.photo',\n        'bundle_items.product_group',\n        'bundle_items.product_group.products',\n        'bundle_items.product_group.photo',\n        'bundle_items.product_group.products',\n        'bundle_items.product_group.products.photo'\n      ].join(','),\n      apiVersion: 3\n    }))\n\n    Promise.all(actions)\n      .then(() => {\n        window.bqFetchingDetailProducts = false\n      })\n      .catch(() => {\n        window.bqFetchingDetailProducts = false\n      })\n  }\n}\n\ngetFingerprint((fingerprint) => {\n  window.fingerprint = fingerprint\n  window.initBooqableComponents()\n\n  clientActions.initialize().then(() => {\n    initShopTracking()\n  })\n})\n","import ReduxModel from 'shared/lib/orm/reduxModel'\n\nconst Model = {}\n\nModel.Cart = ReduxModel('Cart', {\n  defaultValues: {},\n  hasMany: {\n    lines: { namespace: Model }\n  },\n  hasOne: {\n    coupon: { namespace: Model }\n  }\n})\n\nModel.Line = ReduxModel('Line', {\n  defaultValues: {},\n  belongsTo: {\n    cart: { namespace: Model }\n  }\n})\n\nModel.ProductGroup = ReduxModel('ProductGroup', {\n  defaultValues: {},\n  hasMany: {\n    products: { foreignKey: 'product_group_id', namespace: Model },\n    album_photos: { namespace: Model, modelName: 'Photo' }\n\n  },\n  hasOne: {\n    photo: { namespace: Model }\n  }\n})\n\nModel.Product = ReduxModel('Product', {\n  defaultValues: {},\n  belongsTo: {\n    product_group: { namespace: Model }\n  }\n})\n\nModel.Item = ReduxModel('Item', {\n  apiVersion: 3\n})\n\nModel.Bundle = ReduxModel('Bundle', {\n  apiVersion: 3\n})\n\nModel.BundleItem = ReduxModel('BundleItem', {\n  apiVersion: 3\n})\n\nModel.Location = ReduxModel('Location', {\n  apiVersion: 3\n})\n\nModel.Availability = ReduxModel('ShopAvailability')\n\nModel.OperatingDateTime = ReduxModel('OperatingDateTime')\n\nModel.OperatingRule = ReduxModel('OperatingRule')\n\nModel.Photo = ReduxModel('Photo')\n\nModel.Collection = ReduxModel('Collection')\n\nModel.Coupon = ReduxModel('Coupon')\n\nexport default Model\n","import Immutable from 'immutable'\n\nconst Record = Immutable.Record({\n  floatingCart: false,\n  cartOpen: false,\n  modalPickerOpen: false,\n  cartScroll: 0,\n  cartId: null,\n  periodPickerOpen: false,\n  checkingOut: false,\n  currency: Immutable.Map(),\n  translations: Immutable.Map(),\n  company: Immutable.Map(),\n  custom_fields: {},\n  enabledFeatures: [],\n  locale: 'en',\n  cartOverdue: false,\n  firstTimeSelectable: undefined,\n  defaultStartTime: undefined,\n  defaultStopTime: undefined,\n  readOnlyMode: false\n})\n\nconst initialState = new Record()\n\nexport default function (state = initialState, action) {\n  switch (action.type) {\n    case 'CARTS_SET_PERIOD_SUCCESS':\n    case 'CARTS_FETCH_SUCCESS':\n    case 'CARTS_BOOK_SUCCESS':\n    case 'CARTS_UPDATE_SUCCESS': {\n      const { id } = action.payload.response.cart\n      const data = action.payload.response.meta\n\n      data.cartId = id\n      localStorage.bqCartId = id\n\n      return state.merge({\n        cartId: id,\n        company: data.company,\n        currency: data.currency,\n        custom_fields: data.custom_fields,\n        enabledFeatures: data.features_enabled,\n        translations: data.translations\n      })\n    }\n    case 'LOCALE_SET':\n      return state.merge({\n        locale: action.payload.locale\n      })\n    case 'DEFAULT_TIMES_INITIALIZED':\n      return state.merge(action.payload)\n    case 'SET_CART_ID':\n      return state.merge(action.payload)\n    case 'SET_FLOATING_CART':\n      return state.merge(action.payload)\n    case 'TOGGLE_CART':\n      return state.merge(action.payload)\n    case 'TOGGLE_PICKER':\n      return state.merge(action.payload)\n    case 'TOGGLE_PERIOD_PICKER':\n      return state.merge(action.payload)\n    case 'SET_CART_SCROLL':\n      return state.merge(action.payload)\n    case 'SET_CHECKING_OUT':\n      return state.merge({ checkingOut: action.payload !== undefined ? action.payload : true })\n    case 'SET_CART_OVERDUE':\n      return state.merge({ cartOverdue: action.payload })\n    case 'SET_READ_ONLY_MODE':\n      return state.set('readOnlyMode', action.payload.read_only_mode)\n    default:\n      return state\n  }\n}\n","import { Map } from 'immutable'\n\nconst initialState = Map({\n  global: Map({\n    q: '',\n    collection_id: null,\n    sort_by: null,\n    filter_by: null\n  })\n})\n\nexport default (state = initialState, action) => {\n  switch (action.type) {\n    case 'SET_FILTER_SEARCH_QUERY':\n    {\n      const key = action.payload.key\n      const previousValue = state.get(key)\n      const value = previousValue ? previousValue.merge({ q: action.payload.value }) : { q: action.payload.value }\n\n      return state.merge({ [key]: value })\n    }\n    case 'SET_FILTER_COLLECTION':\n    {\n      const key = action.payload.key\n      const previousValue = state.get(key)\n      const value = previousValue ?\n        previousValue.merge({ collection_id: action.payload.value }) :\n        { collection_id: action.payload.value }\n\n      return state.merge({ [key]: value })\n    }\n    case 'SET_FILTER_SORT_BY':\n    {\n      const key = action.payload.key\n      const previousValue = state.get(key)\n      const value = previousValue ?\n        previousValue.merge({ sort_by: action.payload.value }) :\n        { sort_by: action.payload.value }\n\n      return state.merge({ [key]: value })\n    }\n    case 'SET_FILTER_FILTER_BY':\n    {\n      const key = action.payload.key\n      const previousValue = state.get(key)\n      const value = previousValue ?\n        previousValue.merge({ filter_by: action.payload.value }) :\n        { filter_by: action.payload.value }\n\n      return state.merge({ [key]: value })\n    }\n    case 'SETTINGS_INITIALIZED':\n    {\n      const settings = action.payload.settings\n\n      return state.map(\n        (key) => key.merge({ sort_by: settings['store.default_sort'], filter_by: settings['store.default_filter'] })\n      )\n    }\n    default:\n      return state\n  }\n}\n","import _uniqBy from 'lodash/uniqBy'\nimport _sortBy from 'lodash/sortBy'\n\nconst initialState = {\n  loading: false,\n  records: {}\n}\n\nconst itemsReducer = (state = initialState, action) => {\n  switch (action.type) {\n    case 'PRODUCTS_FETCH_START':\n    case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_START':\n    case 'PRODUCT_AVAILABILITIES_FETCH_START':\n    case 'PRODUCT_PRICES_FETCH_START':\n    case 'PRODUCT_IMAGES_FETCH_START':\n      return {\n        ...state,\n        loading: true\n      }\n    case 'PRODUCTS_FETCH_ERROR':\n    case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_ERROR':\n    case 'PRODUCT_AVAILABILITIES_FETCH_ERROR':\n    case 'PRODUCT_PRICES_FETCH_ERROR':\n    case 'PRODUCT_IMAGES_FETCH_ERROR':\n      return {\n        ...state,\n        loading: false\n      }\n    // Fetching products\n    case 'PRODUCTS_FETCH_SUCCESS': {\n      const records = action.payload.records.reduce((state, item) => {\n        const existing = state[item.id]\n\n        if (existing) {\n          return {\n            ...state,\n            [item.id]: {\n              ...existing,\n              ...item\n            }\n          }\n        }\n\n        return {\n          ...state,\n          [item.id]: item\n        }\n      }, state.records)\n\n      return {\n        loading: false,\n        records\n      }\n    }\n    // Fetching product availabilities\n    case 'PRODUCT_AVAILABILITIES_FETCH_SUCCESS': {\n      const records = action.payload.records.reduce((state, availability) => {\n        const existing = state[availability.item_id]\n\n        if (existing) {\n          return {\n            ...state,\n            [availability.item_id]: {\n              ...existing,\n              availability\n            }\n          }\n        }\n\n        return {\n          ...state,\n          [availability.item_id]: {\n            id: availability.item_id,\n            availability\n          }\n        }\n      }, state.records)\n\n      return {\n        loading: false,\n        records\n      }\n    }\n    // Fetching product variation availabilities\n    case 'PRODUCT_VARIATION_AVAILABILITIES_FETCH_SUCCESS': {\n      const records = action.payload.records.reduce((state, availability) => {\n        const existing = state[action.payload.productId]\n\n        if (existing) {\n          const products = existing.products.map((product) => {\n            if (product.id === availability.item_id) {\n              return {\n                ...product,\n                availability\n              }\n            }\n\n            return product\n          })\n\n          return {\n            ...state,\n            [action.payload.productId]: {\n              ...existing,\n              products\n            }\n          }\n        }\n\n        return {\n          ...state,\n          [action.payload.productId]: {\n            id: action.payload.productId,\n            products: [\n              {\n                id: availability.item_id,\n                availability\n              }\n            ]\n          }\n        }\n      }, state.records)\n\n      return {\n        loading: false,\n        records\n      }\n    }\n    // Fetching product prices\n    case 'PRODUCT_PRICES_FETCH_SUCCESS': {\n      const records = action.payload.records.reduce((state, price) => {\n        const existing = state[price.item_id]\n\n        if (existing) {\n          // If the price was updated by changing configuration,\n          // we don't want to override it if the new price is not a configuration price\n          if (existing.method === 'configuration' && action.payload.method !== 'configuration') return state\n\n          return {\n            ...state,\n            [price.item_id]: {\n              ...existing,\n              price,\n              ...(action.payload.method === 'configuration' && { method: 'configuration' })\n            }\n          }\n        }\n\n        return {\n          ...state,\n          [price.item_id]: {\n            id: price.item_id,\n            price,\n            ...(action.payload.method === 'configuration' && { method: 'configuration' })\n          }\n        }\n      }, state.records)\n\n      return {\n        loading: false,\n        records\n      }\n    }\n    // Fetching product images\n    case 'PRODUCT_IMAGES_FETCH_SUCCESS': {\n      const records = action.payload.records.reduce((state, image) => {\n        const existing = state[image.owner_id]\n\n        if (existing) {\n          return {\n            ...state,\n            [image.owner_id]: {\n              ...existing,\n              photos: _sortBy(_uniqBy([...existing.photos, image], 'id'), 'position')\n            }\n          }\n        }\n\n        return {\n          ...state,\n          [image.owner_id]: {\n            id: image.owner_id,\n            photos: [image]\n          }\n        }\n      }, state.records)\n\n      return {\n        loading: false,\n        records\n      }\n    }\n    // Updating product variation\n    case 'PRODUCT_UPDATE_VARIATION': {\n      const { id, variationId } = action.payload\n\n      const records = { ...state.records, [id]: { ...state.records[id], variation_id: variationId } }\n\n      return {\n        ...state,\n        records\n      }\n    }\n    // Updating product configuration\n    case 'PRODUCT_UPDATE_CONFIGURATION': {\n      const { id, itemId, variationId } = action.payload\n\n      const records = {\n        ...state.records,\n        [id]: {\n          ...state.records[id],\n          configuration: {\n            ...state.records[id].configuration,\n            [itemId]: variationId\n          }\n        }\n      }\n\n      return {\n        ...state,\n        records\n      }\n    }\n    default:\n      return state\n  }\n}\n\nexport default itemsReducer\n","import { reducer as interfaceReducer } from 'shared/redux/interface'\n\nimport ORM from 'shared/lib/orm/orm'\n\nimport clientReducer from './client'\nimport settingsReducer from 'shared/redux/reducers/settings'\nimport filterReducer from './filter'\nimport itemsReducer from 'shop-components/redux/reducers/items'\n\nconst rootReducer = (state = {}, action) => ({\n  orm: ORM.reducer(state.orm, action, state),\n\n  client: clientReducer(state.client, action, state),\n  interface: interfaceReducer(state.interface, action, state),\n  settings: settingsReducer(state.settings, action, state),\n  filter: filterReducer(state.filter, action, state),\n  items: itemsReducer(state.items, action, state)\n})\n\nexport default rootReducer\n","import { applyMiddleware, compose, createStore } from 'redux'\n\nimport rootReducer from './reducers/index'\nimport thunkMiddleware from 'redux-thunk'\n\nconst middleware = []\n\nmiddleware.push(thunkMiddleware)\n\nlet enhancer = applyMiddleware(...middleware)\n\nif (window.__REDUX_DEVTOOLS_EXTENSION__ != null) {\n  enhancer = compose(\n    enhancer,\n    typeof window.__REDUX_DEVTOOLS_EXTENSION__ === 'function' ? window.__REDUX_DEVTOOLS_EXTENSION__() : undefined\n  )\n}\n\nconst store = createStore(rootReducer, {}, enhancer)\n\nexport default store\n","import styled, { css } from 'styled-components'\nimport { size } from 'ui/themes/utils'\n\nimport Div from 'ui/elements/Div'\n\nexport const ActionGroup = styled(Div)`\n  text-align: right;\n\n  > *:not(:first-child) {\n    margin-left: ${size('margin')};\n  }\n\n  * {\n    display: inline-block;\n  }\n\n  ${(props) => props.float && css`\n    float: right;\n  `}\n\n  ${(props) => props.left && css`\n    text-align: left;\n  `}\n\n  ${({ flex }) => flex && css`\n    display: flex;\n  `}\n\n  ${({ align }) => align && css`\n    align-items: ${align};\n  `}\n\n  ${({ justify }) => justify && css`\n    justify-content: ${justify};\n  `}\n\n  ${({ spacing }) => spacing && css`\n    > *:not(:first-child) {\n      margin-left: ${size('margin', spacing)};\n    }\n  `}\n`\n","import styled from 'styled-components'\nimport { injectModifiers } from 'ui/themes/utils'\nimport modifiers from 'ui/themes/modifiers'\n\nconst Img = styled.img`\n  ${({ theme }) => injectModifiers(modifiers(theme))}\n`\n\nexport default Img\n"],"names":["CookieNotice","init","config","translations","en","CookieConsent","run","this","_settings","showPreferencesModal","showPreferences","servicesTable","services","Booqable","_apps","marketing","forEach","app","find","service","name","push","domain","desc","description","_services","map","label","filter","reduce","acc","_refreshAppConsent","cookie","tracking","includes","onConsent","onDeny","self","defaults","hideFromBots","navigator","webdriver","autoShow","categories","necessary","enabled","readOnly","language","default","onChange","Object","assign","undefined","window","imageFocus","require","location","pathname","origin","value","localStorage","setItem","getItem","initBooqableComponents","setCartData","data","cartData","_events","on","event","callback","context","hasOwnProperty","_trigger","args","Array","prototype","slice","call","arguments","callbacks","i","length","apply","off","listener","loadScript","src","_isScriptLoaded","tag","document","createElement","async","getElementsByTagName","appendChild","unloadScript","_findScript","removeChild","jQuery","_defer","$","querySelector","_once","func","didRun","TypeError","condition","method","attempt","setTimeout","_prependChild","parentElement","element","insertBefore","firstChild","essential","_initApps","entries","_","apps","_consentToAllApps","registerApp","category","appConfig","Error","_gtag","type","gtag","_prepare_gtag_event_data","currency","items","item","item_id","item_name","quantity","price","setupGoogleAnalytics","trackingId","defaultPageTracking","defaultEvents","options","linker","accept_incoming","dataLayer","Date","_setupGoogleAnalyticsDefaultPageTracking","_setupGoogleAnalyticsDefaultEvents","page_title","send_to","grandTotalWithTax","event_data","coupon","cartId","tax","_fbq","fbq","_prepare_fbq_event_data","contents","id","content_name","setupFacebook","fbId","f","b","e","n","t","s","callMethod","queue","loaded","version","parentNode","_setupFacebookDefaultEvents","setupIntercom","appId","intercomSettings","app_id","w","ic","Intercom","d","c","l","x","q","attachEvent","addEventListener","_loadIntercom","decorateLinkForTracking","link","ga","trackers","getAll","tracker","gaplugins","Linker","decorate","querySelectorAll","form","button","submitter","classList","contains","setAttribute","booqableStore","booqableGetStore","elementDataset","Promise","Bluebird","Model","accounting","cuid","warnings","onPossiblyUnhandledRejection","error","message","fingerPrintOptions","excludes","fonts","screenResolution","availableScreenResolution","store","locale","setLocale","booqableOptions","split","moment","tryLoadLocales","locales","then","dispatch","payload","loadLocale","catch","substring","toLowerCase","notSupported","localeWithSubstring","join","API","prefix","apiURL","getLocalCartId","cart","bqCartId","starts_at","startsAt","OperatinRuleUtils","isTimeSelectable","Cart","createAction","params","provider","storeProvider","pathName","startsWith","previewing","get","apiVersion","put","createResource","getBrandingColor","primaryColor","SettingUtils","clientActions","initialize","cartActions","fetch","source","embeddable_cart_elements","embeddableCartElements","action","settings","response","meta","OperatingRule","hydrate","operating_rules","Location","locations","evaluateCartOverdue","brandingColor","brandingUtils","resolve","_reject","defaultStartTime","TimeUtils","defaultStopTime","state","getState","startType","useTimes","firstTimeSelectable","OperatingRuleUtils","initializeDefaultTimes","setFloatingCart","floatingCart","toggleCart","open","cartOpen","toggleModalPicker","modalPickerOpen","setCartScroll","pixels","cartScroll","setCheckingOut","client","orm","carts","getById","checkoutURL","checkout_url","checkoutDomain","match","replace","checkoutURLwithSearch","search","setCartId","overdue","cartUtils","Item","actions","fetchAllOnPage","products","getElementsByClassName","itemIds","specificIds","node","from","dataset","Bundle","fetchAll","ids","cart_id","ProductGroup","include","post","productIds","isSquarespace","iterator","createNodeIterator","head","NodeFilter","SHOW_COMMENT","filterNone","curNode","nextNode","nodeValue","isWix","metaNode","content","isWeebly","_W","isShopify","Shopify","FILTER_ACCEPT","triggerUserFrameworkBookEvent","productId","_store","currencySettings","session","line","lines","first","price_each_in_cents","product","Math","abs","triggerUserFrameworkViewProductEvent","iso_code","price_in_cents","setUserFrameworkCartData","coupon_id","coupons","orderId","order_id","deposit","deposit_in_cents","couponDiscount","coupon_discount_in_cents","toBePaid","to_be_paid_in_cents","totalDueLater","total_due_later_in_cents","grandtotal","grand_total_in_cents","grand_total_with_tax_in_cents","tax_values","taxValue","value_in_cents","prev","current","identifier","title","Period","styled","div","withConfig","displayName","Icon","size","Details","Detail","p","DateTime","ChoosePeriod","DatesBase","WithDates","NoDates","Placeholder","Component","static","PropTypes","hasDates","timeFormat","autoOpenedModal","onAutoModal","modalOpen","togglePicker","componentDidUpdate","prevProps","props","handleOpenModal","render","hasLocations","React","BPeriod","className","onClick","start_location_id","Format","icon","stop_location_id","stops_at","reduxComponent","reduxConnect","mapStateToProps","mapDispatchToProps","ClientActions","withTranslation","Line","updateUI","useAvailability","decreaseQty","increaseQty","showPrices","hideProductAvailabilityQuantities","remove","ui","deleting","style","opacity","transform","componentDidMount","available","available_quantity","statusClass","titleClass","product_type","key","photo_url","Fragment","discountable","display_price_in_cents","compose","uiConnect","persist","toJS","tracking_type","_dispatch","book","line_id","quantityChange","newQuantity","Delay","initial","children","period","constructor","super","getDerivedStateFromProps","setProps","setState","prevState","Logo","width","height","viewBox","xmlns","stroke","strokeWidth","fill","fillRule","propTypes","PoweredBy","logoWidth","useTranslation","href","featureEnabled","FeatureFlags","EQUIPMENT_RENTAL_SOFTWARE_LINK","target","rel","easing","stiffness","damping","Lines","cannotCheckout","nonServiceCartLinesCount","showPoweredBy","componentWillUnmount","ReactCSSTransitionGroup","transitionName","transitionEnterTimeout","transitionLeaveTimeout","transitionAppear","transitionEnter","component","delayed","Motion","defaultStyle","v","spring","uiKey","testMode","bind","pluck","ProductPrice","chargeLabel","priceInCents","show","productType","priceType","FormatUtils","usePrices","hasPrice","Services","Service","disabled","css","Label","span","fontSize","fontWeight","index","inCart","toggleService","loading","setLoading","useState","checked","setChecked","handleChangeService","useCallback","console","finally","BServices","SettingsUtils","charge_label","price_type","Switch","field","withActiveEffect","relative","block","_state","reverse","CartActions","fetchServices","useEffect","isServiceInCart","serviceId","enabledServices","product_groups","show_in_store","product_group_id","sortBy","sorting_weight","ProductGroupActions","color","Overdue","BOverdue","FloatingCart","totalPriceAttribute","checkingOut","viewCartHref","checkoutButtonValid","cartOverdue","inPortal","renderCheckoutButton","checkoutButtonClass","checkoutButton","tooltipContent","Tooltip","direction","floatingCartClasses","StyleSheetManager","body","shouldForwardProp","enableVendorPrefixes","slug","getIn","searchParams","URLSearchParams","preview","previewUrlComposer","themeId","cart_url","can_checkout","sort","preventDefault","Backdrop","Div","theme","font","Body","Header","Footer","Container","Close","Button","Modal","onClose","modifiers","nodeRef","useRef","useLayoutEffect","originalStyle","getComputedStyle","overflow","useLockScroll","handleBackdropClick","currentTarget","Transition","in","timeout","enter","exit","PortalWrapper","backdrop","container","isRequired","ModalClose","forwardRef","ref","ModalHeader","_extends","ModalTitle","H3","ModalBody","ModalFooter","UserAddressesSelect","addresses","selectedAddress","setSelectedAddress","useFormikContext","address","Select","option","setValues","values","delivery_address_property_id","delivery_address","pick","forceValue","forceOnChange","DeliveryFulfillmentForm","userAddresses","setUserAddresses","isUserAuthenticated","setIsUserAuthenticated","tOrEmptyString","Trans","useSelector","useOrm","countries","toArray","provinces","isAuthEnabled","useSettings","authUri","user_login_url","encodeURIComponent","userAddressesUrl","axios","properties","fetchCountriesAndProvinces","AddressFields","defaultFormLayout","addressFieldsOrder","skipValidation","featureDisabled","NEW_ADDRESS_VALIDATION","invalidExistingAddressWarning","fieldTranslationPrefix","errorKey","selectPlaceholder","initialValues","addressIdentifier","fieldDebounce","Span","i18nKey","components","Link","A","fetchDeliveryOptionsRequest","deliveryAddress","apiUrl","delivery","skip_checkout_validation","skip_shortage_validation","CartPickerContext","createContext","onSave","onValidate","isValid","isLoading","CartPickerProvider","setIsValid","setIsLoading","previousCart","usePrevious","behavior","defaultStartLocationId","defaultStopLocationId","handleChange","newValues","handleValidate","valid","handleSave","nextValues","DELIVERIES","fulfillment_type","update","ItemActions","Provider","useCartPicker","useContext","useDeliveryOptions","fetchAvailability","onError","resetError","isFirstMount","formattedDeliveryAddress","useMemo","perform","fetchDeliveryOptions","useCachedQuery","queryFn","cache","Map","previousKey","has","onSuccess","cached","onLoading","result","set","err","rates","isDelivery","isEmpty","country","address1","zipcode","city","keys","errors","valuesAreEqual","isEqual","all","request","useSearchParam","paramName","paramValue","setParamValue","handleUrlChange","removeEventListener","FulfillmentType","deliveryError","setDeliveryError","fulfillmentTab","pickupLocations","archived_at","fulfillment_capabilities","deliveryLocations","showFulfillmentTypeSelect","isPickup","setFieldValue","fulfillmentType","country_id","setFieldError","setErrors","BCartPicker","Section","FontAwesomeIcon","farTriangleExclamation","FulfillmentTypeSelect","Field","inputModifiers","radioGroup","radioGroupIcon","radioGroupLabel","disableStyling","LocationPicker","handleLocationChange","ReadOnlyModeDisabledComponent","readOnlyMode","maxWidth","pointerEvents","Availability","CartPicker","availabilities","minDate","duration","setDuration","openingHours","useOpeningHours","intervalInMinutes","transformer","parseInt","handleMonthChange","date","showAvailability","lineCount","year","getFullYear","month","getMonth","durationData","handleAvailabilityFetch","day","toDate","getDate","location_id","PickerProvider","validateOnBlur","WrapperComponent","startLocationLabel","stopLocationLabel","CartFlowPicker","onMonthChange","promiseDebounce","onOpen","onDurationChange","handleChangeDuration","_duration","address2","first_name","last_name","region","province_id","mode","format","useAMOrPM","shop_availabilities","availabilityLoading","pendingRequests","_props","created_at","_isAMomentObject","duration_period","AvailabilityActions","fetchCalendarAvailability","CartPickerInner","onSaveCallback","withBranding","promise","setPromise","isMobile","useIsMobile","clsx","ActionGroup","ModalCartPicker","CartPickerContainer","clearCart","mobile","innerWidth","handleClearAndClose","handleClose","clear","Launcher","itemCount","floating","position","bottom","right","countLabel","launcherClassNames","a","isShowCartBehavior","showPicker","setShowPicker","deprecatedColors","primary","secondary","colors","success","info","warning","danger","light","palette","grey","dark","borderHover","black","white","transparent","branding","blue","green","orange","red","purple","grid","unit","Number","isInteger","units","base","fallback","mono","fontAwesomeStyle","xs","sm","md","lg","lgplus","xl","xxl","xxxl","weight","lighter","normal","semibold","bold","borderRadius","borderWidth","controlHeight","margin","padding","mdplus","xlplus","shadow","smplus","screenSizes","destroying","zIndex","Themed","ThemeProvider","BThemed","CartScene","findByIdOrSlug","collection","legacy_id","IdFinder","hideOnLoad","shouldComponentUpdate","nextProps","itemSelectors","bundles","itemId","unsetItem","Product","photo","hasPrices","openQuickview","setWidth","findAncestor","el","cls","findDOMNode","offsetWidth","maxPerRow","floor","max","min","renderLoading","renderContent","_get","imageSrc","imageCoordinates","FocalImage","url","coordinates","maintainAspect","_capitalize","display","photos","photo_id","quickviewActions","getAttribute","Pagination","page","pages","showPrev","showNext","handlePage","handleNextPage","handlePrevPage","renderPages","allPages","_range","till","classNames","ceil","total","per","handlePageChange","setFilterSearchQuery","setFilterSortBy","setFilterFilterBy","ProductSearch","filterKey","setValue","placeholder","onKeyUp","blur","handleClearClick","focus","decoratedComponent","searchKey","Collection","active","I","CollectionList","ul","noPadding","collections","rootCollections","fetchCollections","brandColor","horizontalRule","setOpen","handleToggleCollection","collectionId","stopPropagation","prevOpen","handleFilterByCollection","nativeEvent","stopImmediatePropagation","setFilterCollection","renderCollection","parent_id","isOpen","hasChildren","BCollectionList","item_count","CollectionActions","ProductList","hasItems","searchVisible","collectionsVisible","loadingItems","wrapClass","limit","tags","searchValue","cartModalOpen","initialLoaded","fetchItems","equals","resetFilter","number","category_id","collection_id","filter_by","_isEmpty","sort_by","_map","normalizedResponse","entities","total_count","scrollIntoView","scrollTo","handleModalOpen","handleModalClose","renderList","range","ns","showSearch","showCollections","showCategories","List","ProductButton","BundleItems","BundleItemRow","BundleItemCell","bundleItems","productGroups","configuration","setBundleConfiguration","chooseInitialConfiguration","newConfiguration","clone","bundleItem","product_id","choices","getFirst","handleChangeVariation","bundleItemId","selectedProductId","renderSelectVariation","selectedProduct","renderItem","productGroup","BProductButton","large_url","NO_PRODUCT_IMAGE","has_variations","bundle_items","bundle_id","productGroupIds","TimeTable","P","ScrollContainer","inOpeningHours","Indicator","status","background","selected","showCounts","firstOpenElement","time","timeTable","localDate","localMomentInUTC","BTimeTable","dateFormat","Loader","availability","to","hour","minute","operatingRules","isSame","ProductAvailabilityCalendar","CalendarContainer","InputContainer","BQuantityInput","Control","AvailabilityLink","languages","productConfiguration","firstDayOfWeek","translate","showPast","showTimes","defaultLocationId","selectedLocationId","containerWidth","handleFetchAvailability","debounce","containerRef","getBoundingClientRect","handlePopoverOpen","handleDayClick","handleTimeTableClose","handlePopoverClose","locationId","renderLocationSelect","InputField","pluckObject","renderNativeOnMobile","renderQuantityInput","renderDay","availabilityData","PickerDay","availableCount","interactive","renderAvailabilityCalendar","localMoment","selectionStart","selectionEnd","past","before","BProductAvailabilityCalendar","SwitchTransition","CSSTransition","addEndListener","done","BDayPicker","DayPicker","navbarElement","Navigation","localeUtils","MomentLocaleUtils","onDayClick","disabledDays","isDayClosed","allowPast","renderMobile","BDatePickerInput","MobileWrapper","Popover","fallbackPlacements","offset","fixed","ProductAvailabilityCalendarWrapper","fetchItemAvailability","selectedForProductGroup","productGroupId","addLineQtyUI","qty","newQty","bundle","showProductAvailability","onChangeProductId","addButtonUsesCheckoutBehaviour","cartChanged","updated_at","isBundle","bundleConfigChanged","_isEqual","loadItemData","loadBundlePriceAndAvailability","productSelectors","BundleActions","handleBook","handleChangeQuantity","newBundleConfiguration","configurationAvailability","renderAvailability","withProductAvailability","currentMonth","useBusinessHours","withAvailability","priceEachInCents","_isNaN","branded","Spacer","vertical","getOperatingRules","lineActions","checkout","addToCart","ProductImage","MainImage","visible","MainImageContainer","magnify","canMagnify","GalleryImages","GalleryImagesContainer","GalleryImageContainer","GalleryImage","img","Controls","Gallery","ImageMagnify","ReactInputPosition","ImageContainer","Image","Portal","image","scale","PortalContainer","MagnifyContainer","ImageRenderer","originalRef","originalDimensions","setOriginalDimensions","imageIsVertical","BImageMagnify","originalImage","alt","imageAlt","onLoad","handleOriginalLoad","offsetHeight","createPortal","zoomedSize","zoomedWidth","elementDimensions","zoomedHeight","zoomedImage","backgroundPosition","calculatePosition","y","box","lo","wo","interpolateNumber","activePosition","portalTarget","mouseActivationMethod","MOUSE_ACTIVATION","HOVER","cursorStyle","cursorStyleActive","ModalGallery","Title","h3","Wrapper","ControlWrapper","swipe","setSwipe","swiping","setSwiping","galleryOffset","setGalleryOffset","dimensions","setDimensions","photoIndex","indexOf","selectedPhoto","getMaximumOffset","showGallery","showControls","BModalGallery","onTouchEnd","itemTitle","onTouchStart","touch","touches","clientX","onTouchMove","changedTouches","handlePhotoSelect","onImageLoad","handleImagesBackward","handleImagesForward","onThumbnailPress","noBorder","noBorderRadius","defaultPhoto","photoId","Element","hideFocalImages","newSelectedPhoto","_find","newState","maximumOffset","handleChangeImage","handleClick","handleTouch","handleGalleryClose","handleThumbnailPress","photosArray","selectedPhotoURL","currentIndex","_findIndex","showMobileGallery","selectedLargePhotoURL","xlarge_url","BProductImage","ProductImageWrapper","owner_id","ownerId","albumPhotos","ProductDetail","triggeredTracking","hovered","bqFetchingDetailProducts","fetchData","magnifyRef","dangerouslySetInnerHTML","__html","mapDispatchToProp","QuickviewInner","closeWrapper","close","QuickviewInnerComposed","Quickview","ProductSearchContainer","DateTimeContainer","transparentize","useAMPM","SeparateDatePicker","periodType","isLocationInputEnabled","FunctionalSeparateDatePicker","SeparateDatePickerContainer","CollectionListContainer","SortingSelect","handleChangeSortBy","FilterSelect","filterBy","handleChangeFilter","FilterBar","SortingSelectContainer","inline","InlineCartPicker","Sidebar","EmbeddableCartLine","onIncreaseQuantity","onDecreaseQuantity","onRemove","onInputChange","connect","EmbeddableCartLineContainer","handleIncreaseQuantity","handleDecreaseQuantity","handleRemove","handleInputChange","otherProps","_response","EmbeddableCartLinesContainer","LineContainer","EmbeddableCartLines","LinesContainer","EmbeddableCartErrors","errorText","EmbeddableCartTotals","EmbeddableCartSidebar","showContinueShopping","showDatePicker","handleBack","history","back","Totals","Errors","continueShopping","datepicker","EmbeddableCartMobileLine","EmbeddableCartMobileLines","cleanstate","EmbeddableCartMobile","EmbeddableCart","renderMobileForDesktop","test","userAgent","handleWindowResize","renderDesktop","Mobile","EmbeddableCartContainer","compact","EmbeddableCartSidebarContainer","CartButton","iconStyle","fasShoppingCart","farShoppingCart","falShoppingCart","fatShoppingCart","getIcon","renderFloatingCart","renderIcon","part","useContentWrapper","cartIsOpen","CartButtonComponent","CartButtonContainer","HostStyles","createGlobalStyle","registerCustomElement","attributes","mountElement","mountAttributes","styleSheetTarget","webComponentClass","HTMLElement","mountPoint","attachShadow","connectedCallback","isConnected","attrs","camelCase","handleSetAttribute","removeAttribute","shadowRoot","createRoot","childNodes","retargetEvents","disconnectedCallback","customElements","define","baseURL","interceptors","use","paramsSerializer","qs","arrayFormat","encode","getAvailabilities","stopsAt","startLocationId","fetchAvailabilitiesDebounced","_debounce","availabilitiesRequest","records","fetchAvailabilityDebounced","availabilityRequest","getAvailability","ProductAvailability","fetchProductAvailabilities","hideAvailability","Skeleton","availableString","plannable","withStore","withTheme","variation_id","fetchAvailabilities","fetchPricesDebounced","pricesRequest","getPrices","prices","fetchPriceDebounced","priceRequest","getPrice","fetchPrices","fetchPrice","defaultPrice","fetchProductPrice","fetchProductPrices","money","ProductPriceLabel","defaultLabel","select","ProductVariationsSelect","variations","defaultVariation","setVariation","setSelected","handleSelectVariation","BVariationSelect","variation","farChevronDown","priceSortedVariants","_sortBy","fetchVariationAvailability","variationId","AvailabilityCalendar","start","stop","stopLocationId","statusColors","ButtonLabel","ButtonOverlay","InputWrapper","Input","input","SkeletonContainer","farSpinnerThird","farCheck","farTimes","fetchDebounced","fetchRequest","composeItem","included","relationships","_id","product_group","bookProduct","fetchItem","setQuantity","setStatus","isNaN","clearTimeout","handleButtonClick","handleInputFocus","onFocus","farPlus","farMinus","DatePicker","CalendarIcon","ChevronIcon","Cleanstate","CleanstateLabels","CleanstateTitle","CleanstateLabel","SectionGroup","Value","isPlaceholder","useDatePicker","shouldOpenPicker","toggle","count","shallowEqual","isPricingEnabled","isAvailabilityEnabled","dates","isStartValid","isDaySelectable","isStopValid","hasData","labelKey","availabilityEnabled","pricingEnabled","getLabelKey","BDatePicker","falCalendar","falChevronRight","WrapperWithData","Text","ExpandedTitle","Dates","ButtonNext","farCalendar","MiniCart","portal","Head","Notice","inSummary","BButton","Summary","Amount","invert","CheckoutButtons","CheckoutTotals","Remove","Quantity","QuantityButton","ProductName","large","StatusIndicator","Price","DetailContainer","center","BundleContents","BundleContentsTitle","BundleContentsItem","BundleContentsQuantity","BundleItem","BLine","setLoaded","handleToggleOpen","farChevronUp","spin","updateLineQuantity","setDeleting","debouncedUpdateLineQuantity","handleRemoveLine","line_type","farImage","fasTimes","farCircleInfo","BMiniCart","openDatePicker","farArrowRight","headerHeight","Total","Checkbox","servicesPrice","cartItemIds","prevCartRef","headerElementRef","newCart","fromChanged","tillChanged","selectedServices","_intersection","sum","useCart","companySlug","taxStrategy","isOverdue","setAutoOpenedModal","unavailableLines","isCartOpen","isCheckingOut","LineActions","fetchLines","isCheckoutButtonValid","viewCart","OptimizedImage","focal","optimizedSrc","optimizeImageUrl","Img","quality","ProductGallery","Inner","noGap","hidden","small","ThumbnailsInner","Thumbnail","isActive","fetchPhotos","getPhotos","enableThumbnails","enableControls","infiniteScroll","listenerReady","innerRef","thumbnailsWrapperRef","thumbnailsInnerRef","setIndex","withInfiniteScroll","withControls","withThumbnails","scrollLeft","handleInnerScroll","round","handleSnapToThumbnail","currentPhotoId","currentPhotoIndex","findIndex","handleSnapToPhoto","left","top","BProductGallery","handleSnapToPrevPhoto","farChevronLeft","handleSnapToNextPhoto","farChevronRight","BundleItemSelectWrapper","BundleItemSelect","ScrollGradient","side","updateConfiguration","archivedAt","handleSetSelected","BBundleItems","memo","displayTopGradient","setDisplayTopGradient","displayBottomGradient","setDisplayBottomGradient","scrollTop","scrollHeight","renderBundleItem","EmptyText","Cell","Info","withRightOffset","ActionButton","QuantityInput","Variations","Contents","Toggle","ToggleText","Name","handleToggle","hideAvailabilityQuantity","updateLine","handleUpdateQuantity","skipQuantityUpdate","debounceUpdateQuantity","handleUpdateInputQuantity","handleDeleteLine","group_name","variation_values","falTrash","LinesSkeleton","noCenter","fetchContents","_flatten","archived","ServiceContainer","CheckboxContainer","handleToggleService","htmlFor","BaseGrid","Hr","Breakdown","fasExclamationTriangle","Overlay","CheckoutButton","ButtonContainer","reject","BackToStoreButton","backToStore","backUrl","backToStoreUrl","handleGoBackToStore","Discounts","discountLabel","discount_percentage","discount_in_cents","coupon_type","setError","MiniCartContainer","BLauncher","fasCartShopping","fasArrowRight","closePicker","Badge","MiniCartButton","renderCartButton","BMiniCartButton","renderMiniCart","getProvider","Cookie","booqableRoots","cartRoot","quickviewRoot","root","unmount","cardIds","detailIds","initializeLocale","LocaleActions","initializeLauncher","disableLauncher","usedEmbeddableCartElements","fromEntries","launcher","getElementById","initializeProductQuickview","quickview","initializeLegacy","legacyComponents","initializeProducts","initializeProductButtons","productButtons","initializeProductDetails","productDetails","initializeProductLists","productLists","initializeProductSearch","productSearches","initializeStandardComponents","nodes","bqFetchingProducts","Fingerprint2","fingerprint","getFingerprint","googleAnalytics","facebookPixel","initShopTracking","ReduxModel","defaultValues","hasMany","namespace","hasOne","belongsTo","foreignKey","album_photos","modelName","OperatingDateTime","Photo","Coupon","initialState","Immutable","periodPickerOpen","company","custom_fields","enabledFeatures","merge","features_enabled","read_only_mode","global","previousValue","itemsReducer","existing","_uniqBy","rootReducer","ORM","reducer","clientReducer","interface","interfaceReducer","settingsReducer","filterReducer","middleware","thunkMiddleware","enhancer","applyMiddleware","__REDUX_DEVTOOLS_EXTENSION__","createStore","float","flex","align","justify","spacing","injectModifiers"],"sourceRoot":""}