@propeller-commerce/propeller-v2-react-ui 0.25.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);
@@ -8280,6 +8428,7 @@ function ClusterCard(rawProps) {
8280
8428
  const contentHidden = isContentHidden(props.portalMode, props.user, props.isAuthenticated);
8281
8429
  const defaultProductInventory = contentHidden ? void 0 : cluster?.defaultProduct?.inventory;
8282
8430
  const useTax = props.includeTax !== void 0 ? !!props.includeTax : false;
8431
+ const priceOnRequest = isPriceOnRequest(cluster);
8283
8432
  const priceObj = contentHidden ? void 0 : cluster?.defaultProduct?.price;
8284
8433
  const priceValue = useTax ? priceObj?.net : priceObj?.gross;
8285
8434
  const clusterPrice = props.showPrice === false ? "" : formatPrice(priceValue, { symbol: props.currency ?? "\u20AC", locale: localeForLanguage(props.language) });
@@ -8314,6 +8463,7 @@ function ClusterCard(rawProps) {
8314
8463
  defaultProductInventory,
8315
8464
  clusterPrice,
8316
8465
  priceObj,
8466
+ priceOnRequest,
8317
8467
  useTax,
8318
8468
  isRow,
8319
8469
  language,
@@ -8352,7 +8502,7 @@ function ClusterCard(rawProps) {
8352
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: [
8353
8503
  /* @__PURE__ */ jsxs("div", { className: "propeller-cluster-card__footer-meta flex items-center justify-between gap-3 md:contents", children: [
8354
8504
  props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
8355
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8505
+ props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8356
8506
  ] }),
8357
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, {}) })
8358
8508
  ] })
@@ -8364,11 +8514,11 @@ function ClusterCard(rawProps) {
8364
8514
  textLabelValues.length > 0 ? /* @__PURE__ */ jsx(ClusterCardTextLabels, {}) : null,
8365
8515
  props.showManufacturer && manufacturer ? /* @__PURE__ */ jsx(ClusterCardManufacturer, {}) : null,
8366
8516
  props.showShortDescription && shortDescription ? /* @__PURE__ */ jsx(ClusterCardShortDescription, {}) : null,
8367
- 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
8368
8518
  ] }),
8369
- 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: [
8370
8520
  props.showStock && defaultProductInventory ? /* @__PURE__ */ jsx(ClusterCardStock, {}) : null,
8371
- props.showPrice !== false && priceObj ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8521
+ props.showPrice !== false && (priceObj || priceOnRequest) ? /* @__PURE__ */ jsx(ClusterCardPrice, {}) : null
8372
8522
  ] }) : null,
8373
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, {}) })
8374
8524
  ] })
@@ -8574,6 +8724,9 @@ function ClusterCardStock(props) {
8574
8724
  }
8575
8725
  function ClusterCardPrice(props) {
8576
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
+ }
8577
8730
  if (!derived.priceObj) return null;
8578
8731
  const InjectedPrice = resolved.priceComponent;
8579
8732
  if (InjectedPrice) {
@@ -8753,7 +8906,8 @@ function ProductPriceDisplay(props) {
8753
8906
  }
8754
8907
  return /* @__PURE__ */ jsxs("div", { className: cn(`propeller-product-price ${props.className || ""}`), "data-hidden": isHidden2() ? "true" : "false", children: [
8755
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,
8756
- !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: [
8757
8911
  /* @__PURE__ */ jsxs("div", { className: "propeller-product-price__primary flex items-baseline gap-2", children: [
8758
8912
  /* @__PURE__ */ jsx(
8759
8913
  "span",
@@ -9129,6 +9283,20 @@ function ProductCardBelowName() {
9129
9283
  }
9130
9284
  function ProductCardPrice(props) {
9131
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
+ }
9132
9300
  if (!product?.price) return null;
9133
9301
  const InjectedPrice = resolved.priceComponent;
9134
9302
  if (InjectedPrice) {
@@ -10109,7 +10277,7 @@ function GridToolbar(rawProps) {
10109
10277
  const [currentSortOrder, setCurrentSortOrder] = useState(SortOrder.DESC);
10110
10278
  const [currentOffset, setCurrentOffset] = useState(12);
10111
10279
  const [currentViewMode, setCurrentViewMode] = useState("grid");
10112
- function getLabel59(key) {
10280
+ function getLabel61(key) {
10113
10281
  const labels = props.labels || {};
10114
10282
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS[key] || key;
10115
10283
  }
@@ -10147,8 +10315,8 @@ function GridToolbar(rawProps) {
10147
10315
  }
10148
10316
  function getAvailabilityLabel() {
10149
10317
  const qty = props.minStock;
10150
- if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${getLabel59("inStock")}: ${qty}+`;
10151
- return getLabel59("inStock");
10318
+ if (qty !== void 0 && qty > MIN_STOCK_THRESHOLD) return `${getLabel61("inStock")}: ${qty}+`;
10319
+ return getLabel61("inStock");
10152
10320
  }
10153
10321
  function handleSortFieldChange(field) {
10154
10322
  setCurrentSortField(field);
@@ -10194,7 +10362,7 @@ function GridToolbar(rawProps) {
10194
10362
  /* @__PURE__ */ jsx("div", { className: "propeller-grid-toolbar__count text-sm text-muted-foreground font-medium", children: props.itemsFound > 0 ? /* @__PURE__ */ jsxs("span", { children: [
10195
10363
  props.itemsFound,
10196
10364
  "\xA0",
10197
- props.itemsFound === 1 ? getLabel59("productSingular") : getLabel59("productPlural")
10365
+ props.itemsFound === 1 ? getLabel61("productSingular") : getLabel61("productPlural")
10198
10366
  ] }) : null }),
10199
10367
  /* @__PURE__ */ jsxs("div", { className: "propeller-grid-toolbar__controls flex flex-wrap items-center gap-3", children: [
10200
10368
  /* @__PURE__ */ jsx(
@@ -10205,7 +10373,7 @@ function GridToolbar(rawProps) {
10205
10373
  onChange: (e) => handleOffsetChange(parseInt(e.target.value)),
10206
10374
  children: getOffsetOptions()?.map((n) => /* @__PURE__ */ jsxs("option", { value: n, children: [
10207
10375
  n,
10208
- getLabel59("perPage")
10376
+ getLabel61("perPage")
10209
10377
  ] }, n))
10210
10378
  }
10211
10379
  ),
@@ -10221,7 +10389,7 @@ function GridToolbar(rawProps) {
10221
10389
  {
10222
10390
  value: field,
10223
10391
  disabled: field === "PRICE" && isPriceSortDisabled(),
10224
- children: getLabel59(field)
10392
+ children: getLabel61(field)
10225
10393
  },
10226
10394
  field
10227
10395
  ))
@@ -10234,8 +10402,8 @@ function GridToolbar(rawProps) {
10234
10402
  value: currentSortOrder,
10235
10403
  onChange: (e) => handleSortOrderChange(e.target.value),
10236
10404
  children: [
10237
- /* @__PURE__ */ jsx("option", { value: SortOrder.ASC, children: getLabel59("ASC") }),
10238
- /* @__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") })
10239
10407
  ]
10240
10408
  }
10241
10409
  ),
@@ -10245,7 +10413,7 @@ function GridToolbar(rawProps) {
10245
10413
  type: "button",
10246
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",
10247
10415
  onClick: (event) => handleViewChange(),
10248
- title: currentViewMode === "grid" ? getLabel59("switchToList") : getLabel59("switchToGrid"),
10416
+ title: currentViewMode === "grid" ? getLabel61("switchToList") : getLabel61("switchToGrid"),
10249
10417
  children: [
10250
10418
  currentViewMode === "grid" ? /* @__PURE__ */ jsxs(
10251
10419
  "svg",
@@ -10303,7 +10471,7 @@ function GridToolbar(rawProps) {
10303
10471
  onClick: (event) => {
10304
10472
  if (props.onClearFilters) props.onClearFilters();
10305
10473
  },
10306
- children: getLabel59("clearAll")
10474
+ children: getLabel61("clearAll")
10307
10475
  }
10308
10476
  ),
10309
10477
  props.priceFilterMin !== void 0 || props.priceFilterMax !== void 0 ? /* @__PURE__ */ jsxs(
@@ -10314,7 +10482,7 @@ function GridToolbar(rawProps) {
10314
10482
  if (props.onPriceFilterRemove) props.onPriceFilterRemove();
10315
10483
  },
10316
10484
  children: [
10317
- getLabel59("price"),
10485
+ getLabel61("price"),
10318
10486
  ": ",
10319
10487
  currencySymbol,
10320
10488
  props.priceFilterMin ?? 0,
@@ -10366,7 +10534,7 @@ var DEFAULT_LABELS2 = {
10366
10534
  of: "of"
10367
10535
  };
10368
10536
  function GridPagination(props) {
10369
- function getLabel59(key) {
10537
+ function getLabel61(key) {
10370
10538
  const labels = props.labels || {};
10371
10539
  return labels[key] !== void 0 ? labels[key] : DEFAULT_LABELS2[key] || key;
10372
10540
  }
@@ -10439,15 +10607,15 @@ function GridPagination(props) {
10439
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",
10440
10608
  disabled: currentPage === 1,
10441
10609
  onClick: () => handlePageChange(currentPage - 1),
10442
- children: getLabel59("previous")
10610
+ children: getLabel61("previous")
10443
10611
  }
10444
10612
  ),
10445
10613
  /* @__PURE__ */ jsxs("span", { className: "propeller-grid-pagination__info px-2 text-sm font-medium text-muted-foreground", children: [
10446
- getLabel59("page"),
10614
+ getLabel61("page"),
10447
10615
  "\xA0",
10448
10616
  currentPage,
10449
10617
  "\xA0",
10450
- getLabel59("of"),
10618
+ getLabel61("of"),
10451
10619
  "\xA0",
10452
10620
  totalPages
10453
10621
  ] }),
@@ -10458,7 +10626,7 @@ function GridPagination(props) {
10458
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",
10459
10627
  disabled: currentPage === totalPages,
10460
10628
  onClick: () => handlePageChange(currentPage + 1),
10461
- children: getLabel59("next")
10629
+ children: getLabel61("next")
10462
10630
  }
10463
10631
  )
10464
10632
  ] }) : null,
@@ -10470,7 +10638,7 @@ function GridPagination(props) {
10470
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",
10471
10639
  disabled: currentPage === 1,
10472
10640
  onClick: () => handlePageChange(currentPage - 1),
10473
- children: getLabel59("previous")
10641
+ children: getLabel61("previous")
10474
10642
  }
10475
10643
  ),
10476
10644
  getFullPages().map((item, idx) => /* @__PURE__ */ jsx(
@@ -10497,7 +10665,7 @@ function GridPagination(props) {
10497
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",
10498
10666
  disabled: currentPage === totalPages,
10499
10667
  onClick: () => handlePageChange(currentPage + 1),
10500
- children: getLabel59("next")
10668
+ children: getLabel61("next")
10501
10669
  }
10502
10670
  )
10503
10671
  ] }) : null
@@ -11800,7 +11968,7 @@ function FavoriteListDetails(rawProps) {
11800
11968
  graphqlClient: props.graphqlClient,
11801
11969
  user: props.user ?? null
11802
11970
  });
11803
- const { addItem } = useCart({
11971
+ const { addItem: addItem2 } = useCart({
11804
11972
  graphqlClient: props.graphqlClient,
11805
11973
  user: props.user ?? null,
11806
11974
  cartId: props.cartId,
@@ -11905,7 +12073,7 @@ function FavoriteListDetails(rawProps) {
11905
12073
  setBulkBusy(true);
11906
12074
  try {
11907
12075
  for (const product of products) {
11908
- await addItem({
12076
+ await addItem2({
11909
12077
  product,
11910
12078
  quantity: product.minimumQuantity && product.minimumQuantity > 0 ? product.minimumQuantity : 1,
11911
12079
  cartId: props.cartId,
@@ -14371,6 +14539,130 @@ function OrderList(rawProps) {
14371
14539
  ] });
14372
14540
  }
14373
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;
14374
14666
  var ROW_SEQ = 0;
14375
14667
  function blankRow() {
14376
14668
  ROW_SEQ += 1;
@@ -14462,6 +14754,11 @@ function QuickOrderInner(props) {
14462
14754
  patchRow(key, { code: "", matches: [], productId: null, name: "", netPrice: 0, grossPrice: 0, searched: false });
14463
14755
  return;
14464
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
+ }
14465
14762
  patchRow(key, {
14466
14763
  code: match.sku,
14467
14764
  productId: match.productId,
@@ -14522,6 +14819,10 @@ function QuickOrderInner(props) {
14522
14819
  continue;
14523
14820
  }
14524
14821
  if (resolved.some((r) => r.productId === exact.productId)) continue;
14822
+ if (exact.priceOnRequest) {
14823
+ notFound.push(line.code);
14824
+ continue;
14825
+ }
14525
14826
  const row = blankRow();
14526
14827
  resolved.push({
14527
14828
  ...row,
@@ -16311,6 +16612,20 @@ function ProductInfoAddToCart(props = {}) {
16311
16612
  }
16312
16613
  );
16313
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
+ }
16314
16629
  const Injected = resolved.addToCartComponent;
16315
16630
  if (Injected) {
16316
16631
  return /* @__PURE__ */ jsx(
@@ -18875,7 +19190,8 @@ function mapToSearchBarResult(item, language, urls) {
18875
19190
  priceGross,
18876
19191
  imageUrl: displayItem?.media?.images?.items?.[0]?.imageVariants?.[0]?.url || "",
18877
19192
  url,
18878
- isCluster
19193
+ isCluster,
19194
+ priceOnRequest: isPriceOnRequest(item)
18879
19195
  };
18880
19196
  }
18881
19197
  function SearchBar(rawProps) {
@@ -19059,7 +19375,7 @@ function SearchBar(rawProps) {
19059
19375
  result.sku
19060
19376
  ] }) : null
19061
19377
  ] }),
19062
- 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: [
19063
19379
  /* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-value", children: formatItemPrice(leadingPrice(result)) }),
19064
19380
  /* @__PURE__ */ jsx("span", { className: "propeller-search-bar__result-price-label block text-xs font-normal text-muted-foreground", children: priceTaxLabel() })
19065
19381
  ] }) : null
@@ -19213,6 +19529,6 @@ function UserDetails(rawProps) {
19213
19529
  }
19214
19530
  var UserDetails_default = UserDetails;
19215
19531
 
19216
- 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 };
19217
19533
  //# sourceMappingURL=index.js.map
19218
19534
  //# sourceMappingURL=index.js.map