@behio/storefront-sdk 0.41.0 → 0.42.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.
@@ -355,6 +355,36 @@ interface ProductListItem {
355
355
  * disable the buy button, never re-derive the rule client-side.
356
356
  */
357
357
  isPurchasable: boolean;
358
+ /**
359
+ * The merchant sells this product ONLY through its variants: "Tričko" on its
360
+ * own means nothing, the shop sells the red one and the yellow one.
361
+ *
362
+ * The product keeps its card, its PDP and its search presence — it simply is
363
+ * not a sellable unit. `isPurchasable` is false and the cart/checkout reject
364
+ * its `id` with a 400, so the shopper must pick a variant first.
365
+ *
366
+ * When this is true, render the headline price as **"od {priceFrom}"** and
367
+ * keep the buy button disabled until a variant is chosen; then switch to that
368
+ * variant's own `price` and add `variant.id` to the cart. `price` still
369
+ * carries the parent's own number for backwards compatibility, but showing it
370
+ * as *the* price would quote 990 and charge 1990 — always label it "od".
371
+ *
372
+ * False for every product without variants, so nothing changes for shops that
373
+ * never turn it on.
374
+ */
375
+ variantsOnly: boolean;
376
+ /**
377
+ * "From" price: the CHEAPEST variant price, in the requested currency, or
378
+ * null when the product has no variants (or prices are gated behind login in
379
+ * B2B mode). Populated for EVERY variant parent, not only `variantsOnly`
380
+ * ones, so a card can render "od 990 Kč" whenever the template wants to.
381
+ *
382
+ * Computed over the same variant set the PDP lists (published, enabled
383
+ * variants) and deliberately IGNORING stock — a size selling out must not
384
+ * make the advertised price jump. `compareAtPrice` carries that same
385
+ * variant's strike-through price when it has one.
386
+ */
387
+ priceFrom?: ProductPrice | null;
358
388
  /**
359
389
  * Early bird (time-based launch price) is active: `price.amount` already IS
360
390
  * the discounted early-bird amount and the regular price sits in
@@ -355,6 +355,36 @@ interface ProductListItem {
355
355
  * disable the buy button, never re-derive the rule client-side.
356
356
  */
357
357
  isPurchasable: boolean;
358
+ /**
359
+ * The merchant sells this product ONLY through its variants: "Tričko" on its
360
+ * own means nothing, the shop sells the red one and the yellow one.
361
+ *
362
+ * The product keeps its card, its PDP and its search presence — it simply is
363
+ * not a sellable unit. `isPurchasable` is false and the cart/checkout reject
364
+ * its `id` with a 400, so the shopper must pick a variant first.
365
+ *
366
+ * When this is true, render the headline price as **"od {priceFrom}"** and
367
+ * keep the buy button disabled until a variant is chosen; then switch to that
368
+ * variant's own `price` and add `variant.id` to the cart. `price` still
369
+ * carries the parent's own number for backwards compatibility, but showing it
370
+ * as *the* price would quote 990 and charge 1990 — always label it "od".
371
+ *
372
+ * False for every product without variants, so nothing changes for shops that
373
+ * never turn it on.
374
+ */
375
+ variantsOnly: boolean;
376
+ /**
377
+ * "From" price: the CHEAPEST variant price, in the requested currency, or
378
+ * null when the product has no variants (or prices are gated behind login in
379
+ * B2B mode). Populated for EVERY variant parent, not only `variantsOnly`
380
+ * ones, so a card can render "od 990 Kč" whenever the template wants to.
381
+ *
382
+ * Computed over the same variant set the PDP lists (published, enabled
383
+ * variants) and deliberately IGNORING stock — a size selling out must not
384
+ * make the advertised price jump. `compareAtPrice` carries that same
385
+ * variant's strike-through price when it has one.
386
+ */
387
+ priceFrom?: ProductPrice | null;
358
388
  /**
359
389
  * Early bird (time-based launch price) is active: `price.amount` already IS
360
390
  * the discounted early-bird amount and the regular price sits in
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BehioStorefront, S as SdkResult, C as CookieConsent } from './client-sN7fZvjG.mjs';
2
- export { A as ActivePromotion, a as AddToCartInput, b as AddressDetail, c as AddressSuggestion, d as AddressType, e as AddressTypes, f as AuthTokens, g as BackInStockSubscription, h as BadgeTone, i as BehioApiError, j as BehioErrorCode, k as BehioEventHandler, l as BehioEventType, m as BehioNetworkError, n as BehioStorefrontConfig, o as Bundle, p as BundleItem, q as Cart, r as CartBundleLine, s as CartBundleLineItem, t as CartDiscount, u as CartItem, v as CartItemProduct, w as CartPromotion, x as Category, y as CategoryDetail, z as CertificateVerification, D as CheckoutAddress, E as CheckoutInput, F as CheckoutPaymentMethod, G as CheckoutSettings, H as CookieConsentInput, I as CourseAttachment, J as CourseCertificate, K as CourseComment, L as CourseCommentReply, M as CourseCommentsList, N as CourseDetail, O as CourseLesson, P as CourseListItem, Q as CourseModule, R as CoursePostedComment, T as CourseProgress, U as CourseTutorMessage, V as CourseTutorThread, W as CrossSellItem, X as CustomerAddress, Y as CustomerProfile, Z as DataGroupFieldType, _ as DigitalDownload, $ as DownloadUrl, a0 as Facet, a1 as FacetAvailability, a2 as FacetCategory, a3 as FacetLabel, a4 as FacetPriceRange, a5 as FacetRange, a6 as FacetRatingBucket, a7 as FacetValue, a8 as FacetsResponse, a9 as FilterField, aa as FulfillmentStatus, ab as FulfillmentStatuses, ac as GiftCardBalance, ad as GiftCardPurchaseInput, ae as GiftCardPurchaseResult, af as GiftCardSummary, ag as LessonNote, ah as LessonQuiz, ai as LoginInput, aj as LoyaltyBalance, ak as LoyaltyNextTier, al as LoyaltyProgram, am as LoyaltySummary, an as LoyaltyTier, ao as LoyaltyTierPerks, ap as LoyaltyTransaction, aq as Menu, ar as MenuItem, as as MenuItemRef, at as MenuItemType, au as MessageResponse, av as NewsletterOptInDefault, aw as NewsletterSubscribeInput, ax as NewsletterSubscribeResult, ay as NewsletterUnsubscribeResult, az as OrderAccessRequestResponse, aA as OrderAccessVerifyResponse, aB as OrderDetail, aC as OrderItem, aD as OrderListItem, aE as OrderStatus, aF as OrderStatusHistory, aG as OrderStatuses, aH as OrderTracking, aI as Page, aJ as PageAttachment, aK as PageDetail, aL as PaginatedResponse, aM as PaymentStatus, aN as PaymentStatuses, aO as PickupPoint, aP as PickupPointHours, aQ as PickupPointsInput, aR as PriceDisplay, aS as ProductAvailability, aT as ProductCustomField, aU as ProductCustomFieldGroup, aV as ProductDetail, aW as ProductGroup, aX as ProductLabel, aY as ProductListItem, aZ as ProductMedia, a_ as ProductMediaVariant, a$ as ProductPrice, b0 as ProductPromotionSummary, b1 as ProductReview, b2 as ProductReviewsResponse, b3 as ProductSort, b4 as ProductSortValue, b5 as ProductVariant, b6 as ProductVolumePrice, b7 as ProductsQuery, b8 as QuizAnswerInput, b9 as QuizAnswerResult, ba as QuizQuestion, bb as QuizResult, bc as QuoteItem, bd as QuoteRequest, be as RegisterInput, bf as RegisterResult, bg as RequestInterceptor, bh as RequestInterceptorConfig, bi as ResponseInterceptor, bj as ResponseInterceptorData, bk as ReturnRequest, bl as ReturnRequestItem, bm as ReturnStatus, bn as ReturnStatusItem, bo as ReturnableOrder, bp as ReturnableOrderItem, bq as SdkError, br as ShippingMethodSummary, bs as ShippingQuote, bt as ShippingQuoteInput, bu as ShopInfo, bv as ShopScript, bw as ShopScriptPlacement, bx as ShopScriptType, by as ShopScripts, bz as ShopSeo, bA as ShopSeoIdentity, bB as StockBehavior, bC as StockMode, bD as SubmitQuoteInput, bE as SubmitReturnInput, bF as SubmitReviewInput, bG as Subscription, bH as SubscriptionAction, bI as SubscriptionFrequency, bJ as SubscriptionItem, bK as SubscriptionStatus, bL as TaxBreakdownLine, bM as VariantAxis, bN as VariantAxisValue, bO as WishlistItem, bP as err, bQ as ok, bR as toSdkError } from './client-sN7fZvjG.mjs';
1
+ import { B as BehioStorefront, S as SdkResult, C as CookieConsent } from './client-B0vlHxB1.mjs';
2
+ export { A as ActivePromotion, a as AddToCartInput, b as AddressDetail, c as AddressSuggestion, d as AddressType, e as AddressTypes, f as AuthTokens, g as BackInStockSubscription, h as BadgeTone, i as BehioApiError, j as BehioErrorCode, k as BehioEventHandler, l as BehioEventType, m as BehioNetworkError, n as BehioStorefrontConfig, o as Bundle, p as BundleItem, q as Cart, r as CartBundleLine, s as CartBundleLineItem, t as CartDiscount, u as CartItem, v as CartItemProduct, w as CartPromotion, x as Category, y as CategoryDetail, z as CertificateVerification, D as CheckoutAddress, E as CheckoutInput, F as CheckoutPaymentMethod, G as CheckoutSettings, H as CookieConsentInput, I as CourseAttachment, J as CourseCertificate, K as CourseComment, L as CourseCommentReply, M as CourseCommentsList, N as CourseDetail, O as CourseLesson, P as CourseListItem, Q as CourseModule, R as CoursePostedComment, T as CourseProgress, U as CourseTutorMessage, V as CourseTutorThread, W as CrossSellItem, X as CustomerAddress, Y as CustomerProfile, Z as DataGroupFieldType, _ as DigitalDownload, $ as DownloadUrl, a0 as Facet, a1 as FacetAvailability, a2 as FacetCategory, a3 as FacetLabel, a4 as FacetPriceRange, a5 as FacetRange, a6 as FacetRatingBucket, a7 as FacetValue, a8 as FacetsResponse, a9 as FilterField, aa as FulfillmentStatus, ab as FulfillmentStatuses, ac as GiftCardBalance, ad as GiftCardPurchaseInput, ae as GiftCardPurchaseResult, af as GiftCardSummary, ag as LessonNote, ah as LessonQuiz, ai as LoginInput, aj as LoyaltyBalance, ak as LoyaltyNextTier, al as LoyaltyProgram, am as LoyaltySummary, an as LoyaltyTier, ao as LoyaltyTierPerks, ap as LoyaltyTransaction, aq as Menu, ar as MenuItem, as as MenuItemRef, at as MenuItemType, au as MessageResponse, av as NewsletterOptInDefault, aw as NewsletterSubscribeInput, ax as NewsletterSubscribeResult, ay as NewsletterUnsubscribeResult, az as OrderAccessRequestResponse, aA as OrderAccessVerifyResponse, aB as OrderDetail, aC as OrderItem, aD as OrderListItem, aE as OrderStatus, aF as OrderStatusHistory, aG as OrderStatuses, aH as OrderTracking, aI as Page, aJ as PageAttachment, aK as PageDetail, aL as PaginatedResponse, aM as PaymentStatus, aN as PaymentStatuses, aO as PickupPoint, aP as PickupPointHours, aQ as PickupPointsInput, aR as PriceDisplay, aS as ProductAvailability, aT as ProductCustomField, aU as ProductCustomFieldGroup, aV as ProductDetail, aW as ProductGroup, aX as ProductLabel, aY as ProductListItem, aZ as ProductMedia, a_ as ProductMediaVariant, a$ as ProductPrice, b0 as ProductPromotionSummary, b1 as ProductReview, b2 as ProductReviewsResponse, b3 as ProductSort, b4 as ProductSortValue, b5 as ProductVariant, b6 as ProductVolumePrice, b7 as ProductsQuery, b8 as QuizAnswerInput, b9 as QuizAnswerResult, ba as QuizQuestion, bb as QuizResult, bc as QuoteItem, bd as QuoteRequest, be as RegisterInput, bf as RegisterResult, bg as RequestInterceptor, bh as RequestInterceptorConfig, bi as ResponseInterceptor, bj as ResponseInterceptorData, bk as ReturnRequest, bl as ReturnRequestItem, bm as ReturnStatus, bn as ReturnStatusItem, bo as ReturnableOrder, bp as ReturnableOrderItem, bq as SdkError, br as ShippingMethodSummary, bs as ShippingQuote, bt as ShippingQuoteInput, bu as ShopInfo, bv as ShopScript, bw as ShopScriptPlacement, bx as ShopScriptType, by as ShopScripts, bz as ShopSeo, bA as ShopSeoIdentity, bB as StockBehavior, bC as StockMode, bD as SubmitQuoteInput, bE as SubmitReturnInput, bF as SubmitReviewInput, bG as Subscription, bH as SubscriptionAction, bI as SubscriptionFrequency, bJ as SubscriptionItem, bK as SubscriptionStatus, bL as TaxBreakdownLine, bM as VariantAxis, bN as VariantAxisValue, bO as WishlistItem, bP as err, bQ as ok, bR as toSdkError } from './client-B0vlHxB1.mjs';
3
3
 
4
4
  /**
5
5
  * Format a price amount with currency using Intl.NumberFormat.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { B as BehioStorefront, S as SdkResult, C as CookieConsent } from './client-sN7fZvjG.js';
2
- export { A as ActivePromotion, a as AddToCartInput, b as AddressDetail, c as AddressSuggestion, d as AddressType, e as AddressTypes, f as AuthTokens, g as BackInStockSubscription, h as BadgeTone, i as BehioApiError, j as BehioErrorCode, k as BehioEventHandler, l as BehioEventType, m as BehioNetworkError, n as BehioStorefrontConfig, o as Bundle, p as BundleItem, q as Cart, r as CartBundleLine, s as CartBundleLineItem, t as CartDiscount, u as CartItem, v as CartItemProduct, w as CartPromotion, x as Category, y as CategoryDetail, z as CertificateVerification, D as CheckoutAddress, E as CheckoutInput, F as CheckoutPaymentMethod, G as CheckoutSettings, H as CookieConsentInput, I as CourseAttachment, J as CourseCertificate, K as CourseComment, L as CourseCommentReply, M as CourseCommentsList, N as CourseDetail, O as CourseLesson, P as CourseListItem, Q as CourseModule, R as CoursePostedComment, T as CourseProgress, U as CourseTutorMessage, V as CourseTutorThread, W as CrossSellItem, X as CustomerAddress, Y as CustomerProfile, Z as DataGroupFieldType, _ as DigitalDownload, $ as DownloadUrl, a0 as Facet, a1 as FacetAvailability, a2 as FacetCategory, a3 as FacetLabel, a4 as FacetPriceRange, a5 as FacetRange, a6 as FacetRatingBucket, a7 as FacetValue, a8 as FacetsResponse, a9 as FilterField, aa as FulfillmentStatus, ab as FulfillmentStatuses, ac as GiftCardBalance, ad as GiftCardPurchaseInput, ae as GiftCardPurchaseResult, af as GiftCardSummary, ag as LessonNote, ah as LessonQuiz, ai as LoginInput, aj as LoyaltyBalance, ak as LoyaltyNextTier, al as LoyaltyProgram, am as LoyaltySummary, an as LoyaltyTier, ao as LoyaltyTierPerks, ap as LoyaltyTransaction, aq as Menu, ar as MenuItem, as as MenuItemRef, at as MenuItemType, au as MessageResponse, av as NewsletterOptInDefault, aw as NewsletterSubscribeInput, ax as NewsletterSubscribeResult, ay as NewsletterUnsubscribeResult, az as OrderAccessRequestResponse, aA as OrderAccessVerifyResponse, aB as OrderDetail, aC as OrderItem, aD as OrderListItem, aE as OrderStatus, aF as OrderStatusHistory, aG as OrderStatuses, aH as OrderTracking, aI as Page, aJ as PageAttachment, aK as PageDetail, aL as PaginatedResponse, aM as PaymentStatus, aN as PaymentStatuses, aO as PickupPoint, aP as PickupPointHours, aQ as PickupPointsInput, aR as PriceDisplay, aS as ProductAvailability, aT as ProductCustomField, aU as ProductCustomFieldGroup, aV as ProductDetail, aW as ProductGroup, aX as ProductLabel, aY as ProductListItem, aZ as ProductMedia, a_ as ProductMediaVariant, a$ as ProductPrice, b0 as ProductPromotionSummary, b1 as ProductReview, b2 as ProductReviewsResponse, b3 as ProductSort, b4 as ProductSortValue, b5 as ProductVariant, b6 as ProductVolumePrice, b7 as ProductsQuery, b8 as QuizAnswerInput, b9 as QuizAnswerResult, ba as QuizQuestion, bb as QuizResult, bc as QuoteItem, bd as QuoteRequest, be as RegisterInput, bf as RegisterResult, bg as RequestInterceptor, bh as RequestInterceptorConfig, bi as ResponseInterceptor, bj as ResponseInterceptorData, bk as ReturnRequest, bl as ReturnRequestItem, bm as ReturnStatus, bn as ReturnStatusItem, bo as ReturnableOrder, bp as ReturnableOrderItem, bq as SdkError, br as ShippingMethodSummary, bs as ShippingQuote, bt as ShippingQuoteInput, bu as ShopInfo, bv as ShopScript, bw as ShopScriptPlacement, bx as ShopScriptType, by as ShopScripts, bz as ShopSeo, bA as ShopSeoIdentity, bB as StockBehavior, bC as StockMode, bD as SubmitQuoteInput, bE as SubmitReturnInput, bF as SubmitReviewInput, bG as Subscription, bH as SubscriptionAction, bI as SubscriptionFrequency, bJ as SubscriptionItem, bK as SubscriptionStatus, bL as TaxBreakdownLine, bM as VariantAxis, bN as VariantAxisValue, bO as WishlistItem, bP as err, bQ as ok, bR as toSdkError } from './client-sN7fZvjG.js';
1
+ import { B as BehioStorefront, S as SdkResult, C as CookieConsent } from './client-B0vlHxB1.js';
2
+ export { A as ActivePromotion, a as AddToCartInput, b as AddressDetail, c as AddressSuggestion, d as AddressType, e as AddressTypes, f as AuthTokens, g as BackInStockSubscription, h as BadgeTone, i as BehioApiError, j as BehioErrorCode, k as BehioEventHandler, l as BehioEventType, m as BehioNetworkError, n as BehioStorefrontConfig, o as Bundle, p as BundleItem, q as Cart, r as CartBundleLine, s as CartBundleLineItem, t as CartDiscount, u as CartItem, v as CartItemProduct, w as CartPromotion, x as Category, y as CategoryDetail, z as CertificateVerification, D as CheckoutAddress, E as CheckoutInput, F as CheckoutPaymentMethod, G as CheckoutSettings, H as CookieConsentInput, I as CourseAttachment, J as CourseCertificate, K as CourseComment, L as CourseCommentReply, M as CourseCommentsList, N as CourseDetail, O as CourseLesson, P as CourseListItem, Q as CourseModule, R as CoursePostedComment, T as CourseProgress, U as CourseTutorMessage, V as CourseTutorThread, W as CrossSellItem, X as CustomerAddress, Y as CustomerProfile, Z as DataGroupFieldType, _ as DigitalDownload, $ as DownloadUrl, a0 as Facet, a1 as FacetAvailability, a2 as FacetCategory, a3 as FacetLabel, a4 as FacetPriceRange, a5 as FacetRange, a6 as FacetRatingBucket, a7 as FacetValue, a8 as FacetsResponse, a9 as FilterField, aa as FulfillmentStatus, ab as FulfillmentStatuses, ac as GiftCardBalance, ad as GiftCardPurchaseInput, ae as GiftCardPurchaseResult, af as GiftCardSummary, ag as LessonNote, ah as LessonQuiz, ai as LoginInput, aj as LoyaltyBalance, ak as LoyaltyNextTier, al as LoyaltyProgram, am as LoyaltySummary, an as LoyaltyTier, ao as LoyaltyTierPerks, ap as LoyaltyTransaction, aq as Menu, ar as MenuItem, as as MenuItemRef, at as MenuItemType, au as MessageResponse, av as NewsletterOptInDefault, aw as NewsletterSubscribeInput, ax as NewsletterSubscribeResult, ay as NewsletterUnsubscribeResult, az as OrderAccessRequestResponse, aA as OrderAccessVerifyResponse, aB as OrderDetail, aC as OrderItem, aD as OrderListItem, aE as OrderStatus, aF as OrderStatusHistory, aG as OrderStatuses, aH as OrderTracking, aI as Page, aJ as PageAttachment, aK as PageDetail, aL as PaginatedResponse, aM as PaymentStatus, aN as PaymentStatuses, aO as PickupPoint, aP as PickupPointHours, aQ as PickupPointsInput, aR as PriceDisplay, aS as ProductAvailability, aT as ProductCustomField, aU as ProductCustomFieldGroup, aV as ProductDetail, aW as ProductGroup, aX as ProductLabel, aY as ProductListItem, aZ as ProductMedia, a_ as ProductMediaVariant, a$ as ProductPrice, b0 as ProductPromotionSummary, b1 as ProductReview, b2 as ProductReviewsResponse, b3 as ProductSort, b4 as ProductSortValue, b5 as ProductVariant, b6 as ProductVolumePrice, b7 as ProductsQuery, b8 as QuizAnswerInput, b9 as QuizAnswerResult, ba as QuizQuestion, bb as QuizResult, bc as QuoteItem, bd as QuoteRequest, be as RegisterInput, bf as RegisterResult, bg as RequestInterceptor, bh as RequestInterceptorConfig, bi as ResponseInterceptor, bj as ResponseInterceptorData, bk as ReturnRequest, bl as ReturnRequestItem, bm as ReturnStatus, bn as ReturnStatusItem, bo as ReturnableOrder, bp as ReturnableOrderItem, bq as SdkError, br as ShippingMethodSummary, bs as ShippingQuote, bt as ShippingQuoteInput, bu as ShopInfo, bv as ShopScript, bw as ShopScriptPlacement, bx as ShopScriptType, by as ShopScripts, bz as ShopSeo, bA as ShopSeoIdentity, bB as StockBehavior, bC as StockMode, bD as SubmitQuoteInput, bE as SubmitReturnInput, bF as SubmitReviewInput, bG as Subscription, bH as SubscriptionAction, bI as SubscriptionFrequency, bJ as SubscriptionItem, bK as SubscriptionStatus, bL as TaxBreakdownLine, bM as VariantAxis, bN as VariantAxisValue, bO as WishlistItem, bP as err, bQ as ok, bR as toSdkError } from './client-B0vlHxB1.js';
3
3
 
4
4
  /**
5
5
  * Format a price amount with currency using Intl.NumberFormat.
package/dist/next.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as BehioStorefrontConfig, B as BehioStorefront } from './client-sN7fZvjG.mjs';
1
+ import { n as BehioStorefrontConfig, B as BehioStorefront } from './client-B0vlHxB1.mjs';
2
2
 
3
3
  interface GetBehioOptions extends Partial<BehioStorefrontConfig> {
4
4
  /** Override the cart session cookie name (default: "behio_cart_session"). */
package/dist/next.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as BehioStorefrontConfig, B as BehioStorefront } from './client-sN7fZvjG.js';
1
+ import { n as BehioStorefrontConfig, B as BehioStorefront } from './client-B0vlHxB1.js';
2
2
 
3
3
  interface GetBehioOptions extends Partial<BehioStorefrontConfig> {
4
4
  /** Override the cart session cookie name (default: "behio_cart_session"). */
package/dist/react.d.mts CHANGED
@@ -411,6 +411,36 @@ interface ProductListItem {
411
411
  * disable the buy button, never re-derive the rule client-side.
412
412
  */
413
413
  isPurchasable: boolean;
414
+ /**
415
+ * The merchant sells this product ONLY through its variants: "Tričko" on its
416
+ * own means nothing, the shop sells the red one and the yellow one.
417
+ *
418
+ * The product keeps its card, its PDP and its search presence — it simply is
419
+ * not a sellable unit. `isPurchasable` is false and the cart/checkout reject
420
+ * its `id` with a 400, so the shopper must pick a variant first.
421
+ *
422
+ * When this is true, render the headline price as **"od {priceFrom}"** and
423
+ * keep the buy button disabled until a variant is chosen; then switch to that
424
+ * variant's own `price` and add `variant.id` to the cart. `price` still
425
+ * carries the parent's own number for backwards compatibility, but showing it
426
+ * as *the* price would quote 990 and charge 1990 — always label it "od".
427
+ *
428
+ * False for every product without variants, so nothing changes for shops that
429
+ * never turn it on.
430
+ */
431
+ variantsOnly: boolean;
432
+ /**
433
+ * "From" price: the CHEAPEST variant price, in the requested currency, or
434
+ * null when the product has no variants (or prices are gated behind login in
435
+ * B2B mode). Populated for EVERY variant parent, not only `variantsOnly`
436
+ * ones, so a card can render "od 990 Kč" whenever the template wants to.
437
+ *
438
+ * Computed over the same variant set the PDP lists (published, enabled
439
+ * variants) and deliberately IGNORING stock — a size selling out must not
440
+ * make the advertised price jump. `compareAtPrice` carries that same
441
+ * variant's strike-through price when it has one.
442
+ */
443
+ priceFrom?: ProductPrice | null;
414
444
  /**
415
445
  * Early bird (time-based launch price) is active: `price.amount` already IS
416
446
  * the discounted early-bird amount and the regular price sits in
package/dist/react.d.ts CHANGED
@@ -411,6 +411,36 @@ interface ProductListItem {
411
411
  * disable the buy button, never re-derive the rule client-side.
412
412
  */
413
413
  isPurchasable: boolean;
414
+ /**
415
+ * The merchant sells this product ONLY through its variants: "Tričko" on its
416
+ * own means nothing, the shop sells the red one and the yellow one.
417
+ *
418
+ * The product keeps its card, its PDP and its search presence — it simply is
419
+ * not a sellable unit. `isPurchasable` is false and the cart/checkout reject
420
+ * its `id` with a 400, so the shopper must pick a variant first.
421
+ *
422
+ * When this is true, render the headline price as **"od {priceFrom}"** and
423
+ * keep the buy button disabled until a variant is chosen; then switch to that
424
+ * variant's own `price` and add `variant.id` to the cart. `price` still
425
+ * carries the parent's own number for backwards compatibility, but showing it
426
+ * as *the* price would quote 990 and charge 1990 — always label it "od".
427
+ *
428
+ * False for every product without variants, so nothing changes for shops that
429
+ * never turn it on.
430
+ */
431
+ variantsOnly: boolean;
432
+ /**
433
+ * "From" price: the CHEAPEST variant price, in the requested currency, or
434
+ * null when the product has no variants (or prices are gated behind login in
435
+ * B2B mode). Populated for EVERY variant parent, not only `variantsOnly`
436
+ * ones, so a card can render "od 990 Kč" whenever the template wants to.
437
+ *
438
+ * Computed over the same variant set the PDP lists (published, enabled
439
+ * variants) and deliberately IGNORING stock — a size selling out must not
440
+ * make the advertised price jump. `compareAtPrice` carries that same
441
+ * variant's strike-through price when it has one.
442
+ */
443
+ priceFrom?: ProductPrice | null;
414
444
  /**
415
445
  * Early bird (time-based launch price) is active: `price.amount` already IS
416
446
  * the discounted early-bird amount and the regular price sits in
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@behio/storefront-sdk",
3
- "version": "0.41.0",
3
+ "version": "0.42.0",
4
4
  "description": "TypeScript SDK for Behio Headless E-Shop — core client + React hooks",
5
5
  "author": "Behio",
6
6
  "license": "MIT",