@propeller-commerce/propeller-v2-react-ui 0.24.0 → 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
  import { getLabel, getLocalizedValue, formatPrice, localeForLanguage, getClusterSku, getClusterImageUrl, isContentHidden, getProductSku, getProductImageUrl, createServices, isCheckoutAllowed, err, ok, formatSurcharge, deriveUserMode, isContact, isCustomer, getAddresses, attributeNameMatches, getAttributeDisplayName, filterProductsBySelections, extractAttributeValues, buildInventoryFilter, findPurchaserPac, isOverAuthorizationLimit, MIN_STOCK_THRESHOLD, getNettedBonusItems, getLanguageString, collectAttributeValues, getCountryName, resolveLanguageEntry, getLanguageUri } from '@propeller-commerce/propeller-v2-core-ui';
3
3
  export * from '@propeller-commerce/propeller-v2-core-ui';
4
4
  import * as React6 from 'react';
5
- import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext } from 'react';
5
+ import { createContext, useState, useRef, useCallback, useEffect, useMemo, useContext, useSyncExternalStore } from 'react';
6
6
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
- import { ProductStatus, ProductSortField, SortOrder, CrossupsellType, CartStatus, CartAddressType, Gender, YesNo, AddressType, MagicTokenService, PaymentStatuses, OrderSearchFields, OrderItemClass, ProductSearchableField, machineService, PurchaseRole, AttributeType, OrderSortField, OrderType, BundleCondition, OrderDiscountType } from '@propeller-commerce/propeller-sdk-v2';
7
+ import { ProductStatus, ProductSortField, SortOrder, CrossupsellType, PriceDisplay, CartStatus, CartAddressType, Gender, YesNo, AddressType, MagicTokenService, PaymentStatuses, OrderSearchFields, OrderItemClass, ProductSearchableField, machineService, PurchaseRole, AttributeType, OrderSortField, OrderType, BundleCondition, OrderDiscountType } from '@propeller-commerce/propeller-sdk-v2';
8
8
  import { clsx } from 'clsx';
9
9
  import { twMerge } from 'tailwind-merge';
10
- import { User } from 'lucide-react';
10
+ import { User, Trash2, MessageSquareQuote } from 'lucide-react';
11
11
 
12
12
  // src/index.ts
13
13
  var PropellerDepsContext = createContext(null);
@@ -795,7 +795,7 @@ function useCart(options) {
795
795
  rememberCart(resolved);
796
796
  return resolved;
797
797
  }, [graphqlClient, user, companyId, language, configuration, onCartCreated]);
798
- const addItem = useCallback(async (opts) => {
798
+ const addItem2 = useCallback(async (opts) => {
799
799
  setLoading(true);
800
800
  setError(null);
801
801
  try {
@@ -842,14 +842,14 @@ function useCart(options) {
842
842
  const added = [];
843
843
  let lastCart = null;
844
844
  for (const item of items) {
845
- const result = await addItem({ createCart: true, ...item });
845
+ const result = await addItem2({ createCart: true, ...item });
846
846
  if (!result.ok) return err(result.error);
847
847
  lastCart = result.data.cart;
848
848
  added.push(result.data.item);
849
849
  }
850
850
  if (!lastCart) return err("No items to add");
851
851
  return ok({ cart: lastCart, items: added });
852
- }, [addItem]);
852
+ }, [addItem2]);
853
853
  const updateItemQuantity = useCallback(async (cartItemId, quantity) => {
854
854
  if (!cartId) return void 0;
855
855
  setLoading(true);
@@ -970,7 +970,7 @@ function useCart(options) {
970
970
  return [];
971
971
  }
972
972
  }, [graphqlClient, language, user, resolvedCompanyId, imageSearchFilters, imageVariantFilters]);
973
- return { cart, cartId, loading, error, checkoutAllowed, resolveCart, addItem, addItems, updateItemQuantity, updateItemNotes, deleteItem, addActionCode, removeActionCode, requestAuthorization, processCart, getCrossupsells, getMinQuantity, getStep };
973
+ return { cart, cartId, loading, error, checkoutAllowed, resolveCart, addItem: addItem2, addItems, updateItemQuantity, updateItemNotes, deleteItem, addActionCode, removeActionCode, requestAuthorization, processCart, getCrossupsells, getMinQuantity, getStep };
974
974
  }
975
975
  function buildAddressInput(type, addr) {
976
976
  return {
@@ -2598,6 +2598,13 @@ function useProductSearch(options) {
2598
2598
  goToPage: pagination.goToPage
2599
2599
  };
2600
2600
  }
2601
+ function isPriceOnRequest(product) {
2602
+ if (!product) return false;
2603
+ const display = product.priceData?.display ?? product.defaultProduct?.priceData?.display;
2604
+ return display === PriceDisplay.ON_REQUEST;
2605
+ }
2606
+
2607
+ // src/composables/react/useQuickOrder.ts
2601
2608
  function toMatch(item, language) {
2602
2609
  const isCluster = "clusterId" in item;
2603
2610
  const displayItem = isCluster ? item.defaultProduct : item;
@@ -2616,7 +2623,8 @@ function toMatch(item, language) {
2616
2623
  netPrice,
2617
2624
  grossPrice,
2618
2625
  minQuantity,
2619
- imageUrl
2626
+ imageUrl,
2627
+ priceOnRequest: isPriceOnRequest(item)
2620
2628
  };
2621
2629
  }
2622
2630
  function useQuickOrder(options) {
@@ -2763,6 +2771,146 @@ function useQuickOrder(options) {
2763
2771
  return { submitting, error, searchProducts, submit };
2764
2772
  }
2765
2773
 
2774
+ // src/composables/shared/utils/priceRequestList.ts
2775
+ function containsItem(list, code) {
2776
+ return list.some((i) => i.code === code);
2777
+ }
2778
+ function addItem(list, item) {
2779
+ if (containsItem(list, item.code)) return list;
2780
+ return [...list, { ...item, quantity: Math.max(item.quantity, item.minQuantity) }];
2781
+ }
2782
+ function removeItem(list, code) {
2783
+ return list.filter((i) => i.code !== code);
2784
+ }
2785
+ function setItemQuantity(list, code, quantity) {
2786
+ return list.map(
2787
+ (i) => i.code === code ? { ...i, quantity: Math.max(quantity, i.minQuantity) } : i
2788
+ );
2789
+ }
2790
+ function parseStoredList(raw) {
2791
+ if (!raw) return [];
2792
+ try {
2793
+ const parsed = JSON.parse(raw);
2794
+ if (!Array.isArray(parsed)) return [];
2795
+ return parsed.filter(
2796
+ (i) => i && typeof i.code === "string" && typeof i.productId === "number"
2797
+ );
2798
+ } catch {
2799
+ return [];
2800
+ }
2801
+ }
2802
+
2803
+ // src/composables/react/usePriceRequest.ts
2804
+ var PRICE_REQUEST_STORAGE_KEY = "propeller_price_request";
2805
+ var EMPTY = [];
2806
+ var cachedRaw = null;
2807
+ var cachedItems = EMPTY;
2808
+ function getSnapshot(key) {
2809
+ let raw = null;
2810
+ try {
2811
+ raw = window.localStorage.getItem(key);
2812
+ } catch {
2813
+ return EMPTY;
2814
+ }
2815
+ if (raw !== cachedRaw) {
2816
+ cachedRaw = raw;
2817
+ cachedItems = parseStoredList(raw);
2818
+ }
2819
+ return cachedItems;
2820
+ }
2821
+ function getServerSnapshot() {
2822
+ return EMPTY;
2823
+ }
2824
+ var listeners = /* @__PURE__ */ new Set();
2825
+ function subscribe(cb) {
2826
+ listeners.add(cb);
2827
+ window.addEventListener("storage", cb);
2828
+ return () => {
2829
+ listeners.delete(cb);
2830
+ window.removeEventListener("storage", cb);
2831
+ };
2832
+ }
2833
+ function write(key, next) {
2834
+ try {
2835
+ window.localStorage.setItem(key, JSON.stringify(next));
2836
+ } catch {
2837
+ }
2838
+ listeners.forEach((l) => l());
2839
+ }
2840
+ function usePriceRequest(options = {}) {
2841
+ const storageKey = options.storageKey ?? PRICE_REQUEST_STORAGE_KEY;
2842
+ const items = useSyncExternalStore(
2843
+ subscribe,
2844
+ () => getSnapshot(storageKey),
2845
+ getServerSnapshot
2846
+ );
2847
+ const ready = useSyncExternalStore(
2848
+ subscribe,
2849
+ () => true,
2850
+ () => false
2851
+ );
2852
+ const [submitting, setSubmitting] = useState(false);
2853
+ const [error, setError] = useState(null);
2854
+ const add = useCallback(
2855
+ (item) => {
2856
+ const current = getSnapshot(storageKey);
2857
+ if (containsItem(current, item.code)) return false;
2858
+ write(storageKey, addItem(current, item));
2859
+ return true;
2860
+ },
2861
+ [storageKey]
2862
+ );
2863
+ const remove = useCallback(
2864
+ (code) => write(storageKey, removeItem(getSnapshot(storageKey), code)),
2865
+ [storageKey]
2866
+ );
2867
+ const setQuantity = useCallback(
2868
+ (code, quantity) => write(storageKey, setItemQuantity(getSnapshot(storageKey), code, quantity)),
2869
+ [storageKey]
2870
+ );
2871
+ const clear = useCallback(() => write(storageKey, []), [storageKey]);
2872
+ const has = useCallback((code) => containsItem(items, code), [items]);
2873
+ const submit = useCallback(
2874
+ async (comment) => {
2875
+ const current = getSnapshot(storageKey);
2876
+ if (!current.length) {
2877
+ setError("empty");
2878
+ return false;
2879
+ }
2880
+ if (!options.onSubmit) {
2881
+ setError("unsupported");
2882
+ return false;
2883
+ }
2884
+ setSubmitting(true);
2885
+ setError(null);
2886
+ try {
2887
+ await options.onSubmit(current, comment);
2888
+ write(storageKey, []);
2889
+ return true;
2890
+ } catch (e) {
2891
+ setError(e?.message || "failed");
2892
+ return false;
2893
+ } finally {
2894
+ setSubmitting(false);
2895
+ }
2896
+ },
2897
+ [options, storageKey]
2898
+ );
2899
+ return {
2900
+ items,
2901
+ ready,
2902
+ count: items.length,
2903
+ add,
2904
+ remove,
2905
+ setQuantity,
2906
+ clear,
2907
+ has,
2908
+ submit,
2909
+ submitting,
2910
+ error
2911
+ };
2912
+ }
2913
+
2766
2914
  // src/composables/shared/utils/machineLanguage.ts
2767
2915
  var MACHINE_NOT_FOUND = "SPARE_PARTS_MACHINE_NOT_FOUND_ERROR";
2768
2916
  function isMachineNotFound(error) {
@@ -4603,7 +4751,7 @@ function mergeGrouped(p) {
4603
4751
  }
4604
4752
  function AddToCart(rawProps) {
4605
4753
  const props = mergeGrouped(useInfraProps(rawProps));
4606
- const { cart, loading, checkoutAllowed, addItem, getMinQuantity, getStep } = useCart({
4754
+ const { cart, loading, checkoutAllowed, addItem: addItem2, getMinQuantity, getStep } = useCart({
4607
4755
  graphqlClient: props.graphqlClient,
4608
4756
  user: props.user ?? null,
4609
4757
  companyId: props.companyId,
@@ -4710,7 +4858,7 @@ function AddToCart(rawProps) {
4710
4858
  if (!props.graphqlClient) return;
4711
4859
  if (props.beforeAddToCart && !props.beforeAddToCart()) return;
4712
4860
  const cartBeforeAdd = activeFullCart ?? cart ?? null;
4713
- const result = await addItem({
4861
+ const result = await addItem2({
4714
4862
  product: props.product,
4715
4863
  cluster: props.cluster,
4716
4864
  childItems: props.childItems,
@@ -6721,7 +6869,7 @@ function useCartItemContext() {
6721
6869
  }
6722
6870
  function CartItem(rawProps) {
6723
6871
  const props = useResolvedProps(rawProps, CART_ITEM_RESOLVE_SPEC);
6724
- const { updateItemQuantity, updateItemNotes, deleteItem, getCrossupsells, addItem, getMinQuantity, getStep } = useCart({
6872
+ const { updateItemQuantity, updateItemNotes, deleteItem, getCrossupsells, addItem: addItem2, getMinQuantity, getStep } = useCart({
6725
6873
  graphqlClient: props.graphqlClient,
6726
6874
  user: props.user ?? null,
6727
6875
  cartId: props.cartId,
@@ -6911,7 +7059,7 @@ function CartItem(rawProps) {
6911
7059
  const productId = getCrossupsellProductId(item);
6912
7060
  if (!productId) return;
6913
7061
  setAddingCrossupsellId(productId);
6914
- const result = await addItem({ product: { productId }, quantity: 1, cartId: props.cartId });
7062
+ const result = await addItem2({ product: { productId }, quantity: 1, cartId: props.cartId });
6915
7063
  setAddingCrossupsellId(null);
6916
7064
  if (result.ok && props.afterCartUpdate) {
6917
7065
  props.afterCartUpdate(result.data.cart);
@@ -7334,6 +7482,8 @@ function CartItemDelete(props = {}) {
7334
7482
  className: props.className ?? "propeller-cart-item__delete h-8 w-8 p-0 ml-auto inline-flex items-center justify-center rounded-control text-foreground-subtle hover:text-destructive hover:bg-destructive/10 transition-colors disabled:opacity-50",
7335
7483
  onClick: () => handlers.onDelete(),
7336
7484
  disabled: state.deleting,
7485
+ "aria-label": getLabel(resolved.labels, "deleteLabel", "Remove item"),
7486
+ title: getLabel(resolved.labels, "deleteLabel", "Remove item"),
7337
7487
  children: [
7338
7488
  state.deleting ? /* @__PURE__ */ jsx("div", { className: "w-4 h-4 border-2 border-foreground-subtle border-t-transparent rounded-full animate-spin" }) : null,
7339
7489
  !state.deleting ? /* @__PURE__ */ jsxs(
@@ -7714,7 +7864,8 @@ function CartOverview(rawProps) {
7714
7864
  const invoiceAddress = props.cart?.invoiceAddress;
7715
7865
  const deliveryAddress = props.cart?.deliveryAddress;
7716
7866
  const getCountryName$1 = (code) => getCountryName(code, props.countries);
7717
- const paymentMethod = props.cart?.paymentData?.method || "";
7867
+ const rawPaymentMethod = props.cart?.paymentData?.method || "";
7868
+ const paymentMethod = rawPaymentMethod ? props.paymethodLabels?.[rawPaymentMethod.toLowerCase()] || rawPaymentMethod : "";
7718
7869
  const carrierName = props.cart?.postageData?.carrier || "";
7719
7870
  function requestDate() {
7720
7871
  const date = props.cart?.postageData?.requestDate;
@@ -8277,6 +8428,7 @@ function ClusterCard(rawProps) {
8277
8428
  const contentHidden = isContentHidden(props.portalMode, props.user, props.isAuthenticated);
8278
8429
  const defaultProductInventory = contentHidden ? void 0 : cluster?.defaultProduct?.inventory;
8279
8430
  const useTax = props.includeTax !== void 0 ? !!props.includeTax : false;
8431
+ const priceOnRequest = isPriceOnRequest(cluster);
8280
8432
  const priceObj = contentHidden ? void 0 : cluster?.defaultProduct?.price;
8281
8433
  const priceValue = useTax ? priceObj?.net : priceObj?.gross;
8282
8434
  const clusterPrice = props.showPrice === false ? "" : formatPrice(priceValue, { symbol: props.currency ?? "\u20AC", locale: localeForLanguage(props.language) });
@@ -8311,6 +8463,7 @@ function ClusterCard(rawProps) {
8311
8463
  defaultProductInventory,
8312
8464
  clusterPrice,
8313
8465
  priceObj,
8466
+ priceOnRequest,
8314
8467
  useTax,
8315
8468
  isRow,
8316
8469
  language,
@@ -8349,7 +8502,7 @@ function ClusterCard(rawProps) {
8349
8502
  /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer w-full md:w-auto flex flex-col gap-2 md:flex-row md:items-center md:gap-3 px-4 py-2 md:py-0 border-t md:border-t-0 border-border-subtle", children: [
8350
8503
  /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex items-center justify-between gap-3 md:contents", children: [
8351
8504
  props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
8352
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8505
+ props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8353
8506
  ] }),
8354
8507
  /* @__PURE__ */ jsx("div", { className: "propeller-cluster-card__cta w-full md:w-auto md:flex-shrink-0 md:ml-auto", children: /* @__PURE__ */ jsx(ClusterCardViewClusterLink, {}) })
8355
8508
  ] })
@@ -8361,11 +8514,11 @@ function ClusterCard(rawProps) {
8361
8514
  textLabelValues.length > 0 ? /* @__PURE__ */ jsx(ClusterCardTextLabels, {}) : null,
8362
8515
  props.showManufacturer && manufacturer ? /* @__PURE__ */ jsx(ClusterCardManufacturer, {}) : null,
8363
8516
  props.showShortDescription && shortDescription ? /* @__PURE__ */ jsx(ClusterCardShortDescription, {}) : null,
8364
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx("div", { className: "mt-auto hidden md:block", children: /* @__PURE__ */ jsx(ClusterCardPrice, {}) }) : null
8517
+ props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx("div", { className: "mt-auto hidden md:block", children: /* @__PURE__ */ jsx(ClusterCardPrice, {}) }) : null
8365
8518
  ] }),
8366
- props.showStock && defaultProductInventory || props.showPrice !== false && priceObj ? /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
8519
+ props.showStock && defaultProductInventory || props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex flex-wrap items-center justify-between gap-x-2 gap-y-1 px-3 pt-1 sm:px-4 md:hidden", children: [
8367
8520
  props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
8368
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8521
+ props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8369
8522
  ] }) : null,
8370
8523
  /* @__PURE__ */ jsx("div", { className: "propeller-cluster-card__cta px-3 pb-3 pt-2 sm:px-4 sm:pb-4", children: /* @__PURE__ */ jsx(ClusterCardViewClusterLink, {}) })
8371
8524
  ] })
@@ -8571,6 +8724,9 @@ function ClusterCardStock(props) {
8571
8724
  }
8572
8725
  function ClusterCardPrice(props) {
8573
8726
  const { derived, resolved } = useClusterCard();
8727
+ if (derived.priceOnRequest) {
8728
+ return /* @__PURE__ */ jsx("div", { className: props.className ?? "propeller-cluster-card__price", children: /* @__PURE__ */ jsx("span", { className: "propeller-cluster-card__price-on-request text-sm text-foreground", children: getLabel(resolved.labels, "priceOnRequest", "Price on request") }) });
8729
+ }
8574
8730
  if (!derived.priceObj) return null;
8575
8731
  const InjectedPrice = resolved.priceComponent;
8576
8732
  if (InjectedPrice) {
@@ -8750,7 +8906,8 @@ function ProductPriceDisplay(props) {
8750
8906
  }
8751
8907
  return /* @__PURE__ */ jsxs("div", { className: cn(`propeller-product-price ${props.className || ""}`), "data-hidden": isHidden2() ? "true" : "false", children: [
8752
8908
  isHidden2() && props.showLoginPrompt !== false ? /* @__PURE__ */ jsx("p", { className: "propeller-product-price__login-prompt text-sm text-muted-foreground italic", children: getLabel(props.labels, "loginToSeePrices", "Log in to see prices") }) : null,
8753
- !isHidden2() && !!getLeadingPrice() ? /* @__PURE__ */ jsxs("div", { className: "propeller-product-price__content flex flex-col gap-0.5", children: [
8909
+ !isHidden2() && props.priceOnRequest ? /* @__PURE__ */ jsx("p", { className: "propeller-product-price__on-request text-sm text-foreground", children: getLabel(props.labels, "priceOnRequest", "Price on request") }) : null,
8910
+ !isHidden2() && !props.priceOnRequest && !!getLeadingPrice() ? /* @__PURE__ */ jsxs("div", { className: "propeller-product-price__content flex flex-col gap-0.5", children: [
8754
8911
  /* @__PURE__ */ jsxs("div", { className: "propeller-product-price__primary flex items-baseline gap-2", children: [
8755
8912
  /* @__PURE__ */ jsx(
8756
8913
  "span",
@@ -9126,6 +9283,20 @@ function ProductCardBelowName() {
9126
9283
  }
9127
9284
  function ProductCardPrice(props) {
9128
9285
  const { product, derived, resolved } = useProductCard();
9286
+ const onRequest = isPriceOnRequest(product);
9287
+ if (onRequest) {
9288
+ return /* @__PURE__ */ jsx("div", { className: props.className ?? "propeller-product-card__price", children: /* @__PURE__ */ jsx(
9289
+ ProductPrice_default,
9290
+ {
9291
+ priceOnRequest: true,
9292
+ labels: resolved.priceLabels,
9293
+ portalMode: resolved.portalMode,
9294
+ isAuthenticated: resolved.isAuthenticated,
9295
+ user: resolved.user,
9296
+ showLoginPrompt: false
9297
+ }
9298
+ ) });
9299
+ }
9129
9300
  if (!product?.price) return null;
9130
9301
  const InjectedPrice = resolved.priceComponent;
9131
9302
  if (InjectedPrice) {
@@ -10106,7 +10277,7 @@ function GridToolbar(rawProps) {
10106
10277
  const [currentSortOrder, setCurrentSortOrder] = useState(SortOrder.DESC);
10107
10278
  const [currentOffset, setCurrentOffset] = useState(12);
10108
10279
  const [currentViewMode, setCurrentViewMode] = useState("grid");
10109
- function getLabel59(key) {
10280
+ function getLabel61(key) {
10110
10281
  const labels = props.labels || {};
10111
10282
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS[key] || key;
10112
10283
  }
@@ -10144,8 +10315,8 @@ function GridToolbar(rawProps) {
10144
10315
  }
10145
10316
  function getAvailabilityLabel() {
10146
10317
  const qty = props.minStock;
10147
- if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${getLabel59("inStock")}: ${qty}+`;
10148
- return getLabel59("inStock");
10318
+ if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${getLabel61("inStock")}: ${qty}+`;
10319
+ return getLabel61("inStock");
10149
10320
  }
10150
10321
  function handleSortFieldChange(field) {
10151
10322
  setCurrentSortField(field);
@@ -10191,7 +10362,7 @@ function GridToolbar(rawProps) {
10191
10362
  /* @__PURE__ */ jsx("div", { className: "propeller-grid-toolbar__count text-sm text-muted-foreground font-medium", children: props.itemsFound > 0 ? /* @__PURE__ */ jsxs("span", { children: [
10192
10363
  props.itemsFound,
10193
10364
  "\xA0",
10194
- props.itemsFound === 1 ? getLabel59("productSingular") : getLabel59("productPlural")
10365
+ props.itemsFound === 1 ? getLabel61("productSingular") : getLabel61("productPlural")
10195
10366
  ] }) : null }),
10196
10367
  /* @__PURE__ */ jsxs("div", { className: "propeller-grid-toolbar__controls flex flex-wrap items-center gap-3", children: [
10197
10368
  /* @__PURE__ */ jsx(
@@ -10202,7 +10373,7 @@ function GridToolbar(rawProps) {
10202
10373
  onChange: (e) => handleOffsetChange(parseInt(e.target.value)),
10203
10374
  children: getOffsetOptions()?.map((n) => /* @__PURE__ */ jsxs("option", { value: n, children: [
10204
10375
  n,
10205
- getLabel59("perPage")
10376
+ getLabel61("perPage")
10206
10377
  ] }, n))
10207
10378
  }
10208
10379
  ),
@@ -10218,7 +10389,7 @@ function GridToolbar(rawProps) {
10218
10389
  {
10219
10390
  value: field,
10220
10391
  disabled: field === "PRICE" && isPriceSortDisabled(),
10221
- children: getLabel59(field)
10392
+ children: getLabel61(field)
10222
10393
  },
10223
10394
  field
10224
10395
  ))
@@ -10231,8 +10402,8 @@ function GridToolbar(rawProps) {
10231
10402
  value: currentSortOrder,
10232
10403
  onChange: (e) => handleSortOrderChange(e.target.value),
10233
10404
  children: [
10234
- /* @__PURE__ */ jsx("option", { value: SortOrder.ASC, children: getLabel59("ASC") }),
10235
- /* @__PURE__ */ jsx("option", { value: SortOrder.DESC, children: getLabel59("DESC") })
10405
+ /* @__PURE__ */ jsx("option", { value: SortOrder.ASC, children: getLabel61("ASC") }),
10406
+ /* @__PURE__ */ jsx("option", { value: SortOrder.DESC, children: getLabel61("DESC") })
10236
10407
  ]
10237
10408
  }
10238
10409
  ),
@@ -10242,7 +10413,7 @@ function GridToolbar(rawProps) {
10242
10413
  type: "button",
10243
10414
  className: "propeller-grid-toolbar__view-toggle h-9 w-9 flex items-center justify-center rounded-control border border-input bg-transparent hover:bg-accent hover:text-accent-foreground transition-colors",
10244
10415
  onClick: (event) => handleViewChange(),
10245
- title: currentViewMode === "grid" ? getLabel59("switchToList") : getLabel59("switchToGrid"),
10416
+ title: currentViewMode === "grid" ? getLabel61("switchToList") : getLabel61("switchToGrid"),
10246
10417
  children: [
10247
10418
  currentViewMode === "grid" ? /* @__PURE__ */ jsxs(
10248
10419
  "svg",
@@ -10300,7 +10471,7 @@ function GridToolbar(rawProps) {
10300
10471
  onClick: (event) => {
10301
10472
  if (props.onClearFilters) props.onClearFilters();
10302
10473
  },
10303
- children: getLabel59("clearAll")
10474
+ children: getLabel61("clearAll")
10304
10475
  }
10305
10476
  ),
10306
10477
  props.priceFilterMin !== void 0 || props.priceFilterMax !== void 0 ? /* @__PURE__ */ jsxs(
@@ -10311,7 +10482,7 @@ function GridToolbar(rawProps) {
10311
10482
  if (props.onPriceFilterRemove) props.onPriceFilterRemove();
10312
10483
  },
10313
10484
  children: [
10314
- getLabel59("price"),
10485
+ getLabel61("price"),
10315
10486
  ": ",
10316
10487
  currencySymbol,
10317
10488
  props.priceFilterMin ?? 0,
@@ -10363,7 +10534,7 @@ var DEFAULT_LABELS2 = {
10363
10534
  of: "of"
10364
10535
  };
10365
10536
  function GridPagination(props) {
10366
- function getLabel59(key) {
10537
+ function getLabel61(key) {
10367
10538
  const labels = props.labels || {};
10368
10539
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS2[key] || key;
10369
10540
  }
@@ -10436,15 +10607,15 @@ function GridPagination(props) {
10436
10607
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
10437
10608
  disabled: currentPage === 1,
10438
10609
  onClick: () => handlePageChange(currentPage - 1),
10439
- children: getLabel59("previous")
10610
+ children: getLabel61("previous")
10440
10611
  }
10441
10612
  ),
10442
10613
  /* @__PURE__ */ jsxs("span", { className: "propeller-grid-pagination__info px-2 text-sm font-medium text-muted-foreground", children: [
10443
- getLabel59("page"),
10614
+ getLabel61("page"),
10444
10615
  "\xA0",
10445
10616
  currentPage,
10446
10617
  "\xA0",
10447
- getLabel59("of"),
10618
+ getLabel61("of"),
10448
10619
  "\xA0",
10449
10620
  totalPages
10450
10621
  ] }),
@@ -10455,7 +10626,7 @@ function GridPagination(props) {
10455
10626
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-4 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
10456
10627
  disabled: currentPage === totalPages,
10457
10628
  onClick: () => handlePageChange(currentPage + 1),
10458
- children: getLabel59("next")
10629
+ children: getLabel61("next")
10459
10630
  }
10460
10631
  )
10461
10632
  ] }) : null,
@@ -10467,7 +10638,7 @@ function GridPagination(props) {
10467
10638
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--prev inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
10468
10639
  disabled: currentPage === 1,
10469
10640
  onClick: () => handlePageChange(currentPage - 1),
10470
- children: getLabel59("previous")
10641
+ children: getLabel61("previous")
10471
10642
  }
10472
10643
  ),
10473
10644
  getFullPages().map((item, idx) => /* @__PURE__ */ jsx(
@@ -10494,7 +10665,7 @@ function GridPagination(props) {
10494
10665
  className: "propeller-grid-pagination__btn propeller-grid-pagination__btn--next inline-flex items-center rounded-control border border-input bg-card px-3 py-2 text-sm font-medium text-foreground shadow-sm hover:bg-surface-hover disabled:opacity-40 disabled:cursor-not-allowed",
10495
10666
  disabled: currentPage === totalPages,
10496
10667
  onClick: () => handlePageChange(currentPage + 1),
10497
- children: getLabel59("next")
10668
+ children: getLabel61("next")
10498
10669
  }
10499
10670
  )
10500
10671
  ] }) : null
@@ -11797,7 +11968,7 @@ function FavoriteListDetails(rawProps) {
11797
11968
  graphqlClient: props.graphqlClient,
11798
11969
  user: props.user ?? null
11799
11970
  });
11800
- const { addItem } = useCart({
11971
+ const { addItem: addItem2 } = useCart({
11801
11972
  graphqlClient: props.graphqlClient,
11802
11973
  user: props.user ?? null,
11803
11974
  cartId: props.cartId,
@@ -11902,7 +12073,7 @@ function FavoriteListDetails(rawProps) {
11902
12073
  setBulkBusy(true);
11903
12074
  try {
11904
12075
  for (const product of products) {
11905
- await addItem({
12076
+ await addItem2({
11906
12077
  product,
11907
12078
  quantity: product.minimumQuantity && product.minimumQuantity > 0 ? product.minimumQuantity : 1,
11908
12079
  cartId: props.cartId,
@@ -14368,6 +14539,130 @@ function OrderList(rawProps) {
14368
14539
  ] });
14369
14540
  }
14370
14541
  var OrderList_default = OrderList;
14542
+ function PriceRequestList(props) {
14543
+ const [comment, setComment] = useState("");
14544
+ const [sent, setSent] = useState(false);
14545
+ const L = (key, fallback) => getLabel(props.labels, key, fallback);
14546
+ async function handleSubmit(e) {
14547
+ e.preventDefault();
14548
+ if (!props.onSubmit) return;
14549
+ const ok4 = await props.onSubmit(comment);
14550
+ if (ok4) {
14551
+ setComment("");
14552
+ setSent(true);
14553
+ }
14554
+ }
14555
+ if (sent) {
14556
+ return /* @__PURE__ */ jsx("div", { className: cn(`propeller-price-request ${props.className || ""}`), children: /* @__PURE__ */ jsx("p", { className: "propeller-price-request__sent py-8 text-center text-foreground", children: L("sent", "Price request sent. We will contact you.") }) });
14557
+ }
14558
+ if (!props.items.length) {
14559
+ return /* @__PURE__ */ jsx("div", { className: cn(`propeller-price-request ${props.className || ""}`), children: /* @__PURE__ */ jsx("p", { className: "propeller-price-request__empty py-8 text-center text-foreground-subtle", children: L("empty", "Your price request list is empty.") }) });
14560
+ }
14561
+ return /* @__PURE__ */ jsxs(
14562
+ "form",
14563
+ {
14564
+ className: cn(`propeller-price-request ${props.className || ""}`),
14565
+ onSubmit: handleSubmit,
14566
+ children: [
14567
+ /* @__PURE__ */ jsx("h2", { className: "propeller-price-request__title mb-4 text-xl font-semibold text-foreground", children: L("title", "Price request") }),
14568
+ /* @__PURE__ */ jsxs("table", { className: "propeller-price-request__table w-full text-sm", children: [
14569
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { className: "border-b border-border text-left text-foreground-subtle", children: [
14570
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colCode", "Article no. / SKU") }),
14571
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colName", "Product name") }),
14572
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 pr-4 font-medium", children: L("colQuantity", "Quantity") }),
14573
+ /* @__PURE__ */ jsx("th", { scope: "col", className: "py-2 w-10", children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: L("remove", "Remove") }) })
14574
+ ] }) }),
14575
+ /* @__PURE__ */ jsx("tbody", { children: props.items.map((item) => /* @__PURE__ */ jsxs("tr", { className: "border-b border-border-subtle", children: [
14576
+ /* @__PURE__ */ jsx("td", { className: "py-2 pr-4 font-mono text-xs text-foreground", children: item.code }),
14577
+ /* @__PURE__ */ jsx("td", { className: "py-2 pr-4 text-foreground", children: item.name }),
14578
+ /* @__PURE__ */ jsxs("td", { className: "py-2 pr-4", children: [
14579
+ /* @__PURE__ */ jsx("label", { className: "sr-only", htmlFor: `pr-qty-${item.code}`, children: L("colQuantity", "Quantity") }),
14580
+ /* @__PURE__ */ jsx(
14581
+ "input",
14582
+ {
14583
+ id: `pr-qty-${item.code}`,
14584
+ type: "number",
14585
+ min: item.minQuantity,
14586
+ step: item.unit || 1,
14587
+ value: item.quantity,
14588
+ onChange: (e) => props.onQuantityChange?.(item.code, parseInt(e.target.value, 10) || item.minQuantity),
14589
+ className: "w-20 rounded border border-border bg-background px-2 py-1"
14590
+ }
14591
+ )
14592
+ ] }),
14593
+ /* @__PURE__ */ jsx("td", { className: "py-2", children: /* @__PURE__ */ jsx(
14594
+ "button",
14595
+ {
14596
+ type: "button",
14597
+ onClick: () => props.onRemove?.(item.code),
14598
+ "aria-label": L("remove", "Remove"),
14599
+ title: L("remove", "Remove"),
14600
+ className: "text-foreground-subtle transition-colors hover:text-destructive",
14601
+ children: /* @__PURE__ */ jsx(Trash2, { className: "h-4 w-4", "aria-hidden": "true" })
14602
+ }
14603
+ ) })
14604
+ ] }, item.code)) })
14605
+ ] }),
14606
+ /* @__PURE__ */ jsxs("div", { className: "propeller-price-request__comment mt-6", children: [
14607
+ /* @__PURE__ */ jsx(
14608
+ "label",
14609
+ {
14610
+ htmlFor: "propeller-price-request-comment",
14611
+ className: "mb-2 block font-medium text-foreground",
14612
+ children: L("comments", "Comments")
14613
+ }
14614
+ ),
14615
+ /* @__PURE__ */ jsx(
14616
+ "textarea",
14617
+ {
14618
+ id: "propeller-price-request-comment",
14619
+ value: comment,
14620
+ onChange: (e) => setComment(e.target.value),
14621
+ rows: 4,
14622
+ className: "w-full rounded border border-border bg-background px-3 py-2"
14623
+ }
14624
+ )
14625
+ ] }),
14626
+ /* @__PURE__ */ jsx(
14627
+ "button",
14628
+ {
14629
+ type: "submit",
14630
+ disabled: props.submitting,
14631
+ className: "propeller-price-request__submit mt-4 rounded-control bg-primary px-4 py-2 text-sm font-medium text-primary-foreground transition-opacity hover:opacity-90 disabled:opacity-50",
14632
+ children: props.submitting ? L("sending", "Sending\u2026") : L("send", "Send request")
14633
+ }
14634
+ )
14635
+ ]
14636
+ }
14637
+ );
14638
+ }
14639
+ var PriceRequestList_default = PriceRequestList;
14640
+ function RequestPriceButton(props) {
14641
+ const anonymous = !props.isAuthenticated;
14642
+ const label = anonymous ? getLabel(props.labels, "requestPrice", "Request a price") : props.added ? getLabel(props.labels, "priceRequested", "On your request list") : getLabel(props.labels, "requestPrice", "Request a price");
14643
+ return /* @__PURE__ */ jsxs(
14644
+ "button",
14645
+ {
14646
+ type: "button",
14647
+ "data-added": props.added ? "true" : "false",
14648
+ className: cn(
14649
+ `propeller-request-price inline-flex items-center justify-center gap-2 h-10 px-4 w-full rounded-control text-sm font-medium transition-opacity hover:opacity-90 ${props.added && !anonymous ? "bg-surface-hover text-foreground border border-border" : "bg-primary text-primary-foreground"} ${props.className || ""}`
14650
+ ),
14651
+ onClick: () => {
14652
+ if (anonymous) {
14653
+ if (props.onLoginClick) props.onLoginClick();
14654
+ return;
14655
+ }
14656
+ if (props.onRequestPrice) props.onRequestPrice();
14657
+ },
14658
+ children: [
14659
+ /* @__PURE__ */ jsx(MessageSquareQuote, { className: "propeller-request-price__icon w-4 h-4", "aria-hidden": "true" }),
14660
+ label
14661
+ ]
14662
+ }
14663
+ );
14664
+ }
14665
+ var RequestPriceButton_default = RequestPriceButton;
14371
14666
  var ROW_SEQ = 0;
14372
14667
  function blankRow() {
14373
14668
  ROW_SEQ += 1;
@@ -14459,6 +14754,11 @@ function QuickOrderInner(props) {
14459
14754
  patchRow(key, { code: "", matches: [], productId: null, name: "", netPrice: 0, grossPrice: 0, searched: false });
14460
14755
  return;
14461
14756
  }
14757
+ if (match.priceOnRequest) {
14758
+ setNotice(L("priceOnRequest", "Price on request \u2014 order this product from its page"));
14759
+ patchRow(key, { code: "", matches: [], productId: null, name: "", netPrice: 0, grossPrice: 0, searched: false });
14760
+ return;
14761
+ }
14462
14762
  patchRow(key, {
14463
14763
  code: match.sku,
14464
14764
  productId: match.productId,
@@ -14519,6 +14819,10 @@ function QuickOrderInner(props) {
14519
14819
  continue;
14520
14820
  }
14521
14821
  if (resolved.some((r) => r.productId === exact.productId)) continue;
14822
+ if (exact.priceOnRequest) {
14823
+ notFound.push(line.code);
14824
+ continue;
14825
+ }
14522
14826
  const row = blankRow();
14523
14827
  resolved.push({
14524
14828
  ...row,
@@ -16308,6 +16612,20 @@ function ProductInfoAddToCart(props = {}) {
16308
16612
  }
16309
16613
  );
16310
16614
  }
16615
+ if (product?.orderable === YesNo.N) return null;
16616
+ if (isPriceOnRequest(product)) {
16617
+ return /* @__PURE__ */ jsx(
16618
+ RequestPriceButton_default,
16619
+ {
16620
+ className: props.className,
16621
+ labels: derived.labels,
16622
+ isAuthenticated: resolved.isAuthenticated,
16623
+ onLoginClick: resolved.onLoginClick,
16624
+ added: resolved.priceRequestAdded,
16625
+ onRequestPrice: resolved.onRequestPrice ? () => resolved.onRequestPrice(product) : void 0
16626
+ }
16627
+ );
16628
+ }
16311
16629
  const Injected = resolved.addToCartComponent;
16312
16630
  if (Injected) {
16313
16631
  return /* @__PURE__ */ jsx(
@@ -18872,7 +19190,8 @@ function mapToSearchBarResult(item, language, urls) {
18872
19190
  priceGross,
18873
19191
  imageUrl: displayItem?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "",
18874
19192
  url,
18875
- isCluster
19193
+ isCluster,
19194
+ priceOnRequest: isPriceOnRequest(item)
18876
19195
  };
18877
19196
  }
18878
19197
  function SearchBar(rawProps) {
@@ -19056,7 +19375,7 @@ function SearchBar(rawProps) {
19056
19375
  result.sku
19057
19376
  ] }) : null
19058
19377
  ] }),
19059
- props.renderPrice ? props.renderPrice(result) : props.showPrice !== false && result.price !== void 0 && result.price !== null ? /* @__PURE__ */ jsxs("div", { className: "propeller-search-bar__result-price text-sm font-semibold text-foreground flex-shrink-0 text-right", children: [
19378
+ props.renderPrice ? props.renderPrice(result) : props.showPrice !== false && result.priceOnRequest ? /* @__PURE__ */ jsx("div", { className: "propeller-search-bar__result-price text-sm text-foreground flex-shrink-0 text-right", children: getLabel(props.priceLabels, "priceOnRequest", "Price on request") }) : props.showPrice !== false && result.price !== void 0 && result.price !== null ? /* @__PURE__ */ jsxs("div", { className: "propeller-search-bar__result-price text-sm font-semibold text-foreground flex-shrink-0 text-right", children: [
19060
19379
  /* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-value", children: formatItemPrice(leadingPrice(result)) }),
19061
19380
  /* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-label block text-xs font-normal text-muted-foreground", children: priceTaxLabel() })
19062
19381
  ] }) : null
@@ -19210,6 +19529,6 @@ function UserDetails(rawProps) {
19210
19529
  }
19211
19530
  var UserDetails_default = UserDetails;
19212
19531
 
19213
- export { AccountIconAndMenu_default as AccountIconAndMenu, ActionCode_default as ActionCode, AddToCart_default as AddToCart, AddToFavorite_default as AddToFavorite, AddressCard_default as AddressCard, AddressSelector_default as AddressSelector, BreadcrumbsWithProvider_default as Breadcrumbs, CartBonusItems_default as CartBonusItems, CartCarriers_default as CartCarriers, CartIconAndSidebar_default as CartIconAndSidebar, CartItem_default as CartItem, CartOverview_default as CartOverview, CartPaymethods_default as CartPaymethods, CartSummary_default as CartSummary, CategoryDescription_default as CategoryDescription, CategoryShortDescriptionWithProvider_default as CategoryShortDescription, ClusterCard_default as ClusterCard, ClusterConfigurator_default as ClusterConfigurator, ClusterInfo_default as ClusterInfo, ClusterOptions_default as ClusterOptions, CompanySwitcher_default as CompanySwitcher, AddToCart_default as DefaultAddToCart, AddToFavorite_default as DefaultAddToFavorite, ItemStock_default as DefaultItemStock, DefaultProductBadges, ProductBulkPrices_default as DefaultProductBulkPrices, ProductBundles_default as DefaultProductBundles, DefaultProductImage, ProductPrice_default as DefaultProductPrice, DefaultProductSurcharges, DeliveryDate_default as DeliveryDate, FavoriteListDetails_default as FavoriteListDetails, FavoriteListItem_default as FavoriteListItem, FavoriteLists_default as FavoriteLists, ForgotPassword_default as ForgotPassword, GridFilters_default as GridFilters, GridFiltersPanel, GridPagination_default as GridPagination, GridTitleWithProvider_default as GridTitle, GridToolbar_default as GridToolbar, ItemStock_default as ItemStock, ItemsOverview_default as ItemsOverview, LoginForm_default as LoginForm, LoginToOrderButton_default as LoginToOrderButton, MachineCard, MachineGrid, Menu_default as Menu, OrderActions_default as OrderActions, OrderBonusItems_default as OrderBonusItems, OrderItemCard_default as OrderItemCard, OrderList_default as OrderList, OrderShipments_default as OrderShipments, OrderSummaryWithProvider_default as OrderSummary, OrderTotalsWithProvider_default as OrderTotals, PriceToggle_default as PriceToggle, ProductBulkPricesWithProvider_default as ProductBulkPrices, ProductBundles_default as ProductBundles, ProductCard_default as ProductCard, ProductDescription_default as ProductDescription, ProductDownloads_default as ProductDownloads, ProductGallery_default as ProductGallery, ProductGrid_default as ProductGrid, ProductGridConfigProvider, ProductInfo_default as ProductInfo, ProductPriceWithProvider_default as ProductPrice, ProductShortDescriptionWithProvider_default as ProductShortDescription, ProductSlider_default as ProductSlider, ProductSpecifications_default as ProductSpecifications, ProductTabs_default as ProductTabs, ProductVideos_default as ProductVideos, PropellerDepsProvider, PropellerProvider, PurchaseAuthorizationConfigurator_default as PurchaseAuthorizationConfigurator, PurchaseAuthorizationRequests_default as PurchaseAuthorizationRequests, QuickOrder, QuoteActions_default as QuoteActions, RegisterForm_default as RegisterForm, SearchBar_default as SearchBar, UserDetails_default as UserDetails, buildRootMachinesQuery, fetchActiveCart, initCart, mergeAnonymousCart, useAddress, useAuth, useCart, useCheckout, useClusterConfigurator, useCompany, useFavorites, useInfraProps, useMachines, useMenu, useOrders, useProductBundles, useProductGridConfig, useProductInfo, useProductSearch, useProductSlider, useProductSpecs, usePropellerContext, usePropellerDeps, usePropellerScope, usePurchaseAuthorizationConfigurator, usePurchaseAuthorizationRequests, useQuickOrder, useRequiredPropellerDeps, useResolvedProps, useServices, useSpareParts, useUserMode };
19532
+ export { AccountIconAndMenu_default as AccountIconAndMenu, ActionCode_default as ActionCode, AddToCart_default as AddToCart, AddToFavorite_default as AddToFavorite, AddressCard_default as AddressCard, AddressSelector_default as AddressSelector, BreadcrumbsWithProvider_default as Breadcrumbs, CartBonusItems_default as CartBonusItems, CartCarriers_default as CartCarriers, CartIconAndSidebar_default as CartIconAndSidebar, CartItem_default as CartItem, CartOverview_default as CartOverview, CartPaymethods_default as CartPaymethods, CartSummary_default as CartSummary, CategoryDescription_default as CategoryDescription, CategoryShortDescriptionWithProvider_default as CategoryShortDescription, ClusterCard_default as ClusterCard, ClusterConfigurator_default as ClusterConfigurator, ClusterInfo_default as ClusterInfo, ClusterOptions_default as ClusterOptions, CompanySwitcher_default as CompanySwitcher, AddToCart_default as DefaultAddToCart, AddToFavorite_default as DefaultAddToFavorite, ItemStock_default as DefaultItemStock, DefaultProductBadges, ProductBulkPrices_default as DefaultProductBulkPrices, ProductBundles_default as DefaultProductBundles, DefaultProductImage, ProductPrice_default as DefaultProductPrice, DefaultProductSurcharges, DeliveryDate_default as DeliveryDate, FavoriteListDetails_default as FavoriteListDetails, FavoriteListItem_default as FavoriteListItem, FavoriteLists_default as FavoriteLists, ForgotPassword_default as ForgotPassword, GridFilters_default as GridFilters, GridFiltersPanel, GridPagination_default as GridPagination, GridTitleWithProvider_default as GridTitle, GridToolbar_default as GridToolbar, ItemStock_default as ItemStock, ItemsOverview_default as ItemsOverview, LoginForm_default as LoginForm, LoginToOrderButton_default as LoginToOrderButton, MachineCard, MachineGrid, Menu_default as Menu, OrderActions_default as OrderActions, OrderBonusItems_default as OrderBonusItems, OrderItemCard_default as OrderItemCard, OrderList_default as OrderList, OrderShipments_default as OrderShipments, OrderSummaryWithProvider_default as OrderSummary, OrderTotalsWithProvider_default as OrderTotals, PRICE_REQUEST_STORAGE_KEY, PriceRequestList_default as PriceRequestList, PriceToggle_default as PriceToggle, ProductBulkPricesWithProvider_default as ProductBulkPrices, ProductBundles_default as ProductBundles, ProductCard_default as ProductCard, ProductDescription_default as ProductDescription, ProductDownloads_default as ProductDownloads, ProductGallery_default as ProductGallery, ProductGrid_default as ProductGrid, ProductGridConfigProvider, ProductInfo_default as ProductInfo, ProductPriceWithProvider_default as ProductPrice, ProductShortDescriptionWithProvider_default as ProductShortDescription, ProductSlider_default as ProductSlider, ProductSpecifications_default as ProductSpecifications, ProductTabs_default as ProductTabs, ProductVideos_default as ProductVideos, PropellerDepsProvider, PropellerProvider, PurchaseAuthorizationConfigurator_default as PurchaseAuthorizationConfigurator, PurchaseAuthorizationRequests_default as PurchaseAuthorizationRequests, QuickOrder, QuoteActions_default as QuoteActions, RegisterForm_default as RegisterForm, RequestPriceButton_default as RequestPriceButton, SearchBar_default as SearchBar, UserDetails_default as UserDetails, addItem as addPriceRequestItem, buildRootMachinesQuery, fetchActiveCart, initCart, isPriceOnRequest, mergeAnonymousCart, containsItem as priceRequestContains, removeItem as removePriceRequestItem, setItemQuantity as setPriceRequestItemQuantity, useAddress, useAuth, useCart, useCheckout, useClusterConfigurator, useCompany, useFavorites, useInfraProps, useMachines, useMenu, useOrders, usePriceRequest, useProductBundles, useProductGridConfig, useProductInfo, useProductSearch, useProductSlider, useProductSpecs, usePropellerContext, usePropellerDeps, usePropellerScope, usePurchaseAuthorizationConfigurator, usePurchaseAuthorizationRequests, useQuickOrder, useRequiredPropellerDeps, useResolvedProps, useServices, useSpareParts, useUserMode };
19214
19533
  //# sourceMappingURL=index.js.map
19215
19534
  //# sourceMappingURL=index.js.map