@cartbase/storefront 0.17.0 → 0.18.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/LICENSE +21 -21
- package/package.json +258 -256
- package/src/api/auth.ts +108 -108
- package/src/api/carts.ts +523 -523
- package/src/api/categories.ts +184 -184
- package/src/api/checkout.ts +526 -526
- package/src/api/collections.ts +130 -130
- package/src/api/consent.ts +75 -75
- package/src/api/content.ts +125 -125
- package/src/api/customers.ts +303 -303
- package/src/api/gift-cards.ts +112 -112
- package/src/api/http.ts +180 -180
- package/src/api/index.ts +30 -30
- package/src/api/menus.ts +77 -77
- package/src/api/metaobjects.ts +136 -136
- package/src/api/orders.ts +290 -290
- package/src/api/products.ts +43 -1
- package/src/api/redirects.ts +37 -37
- package/src/api/regions.ts +200 -200
- package/src/api/reviews.ts +259 -259
- package/src/api/search.ts +163 -163
- package/src/api/store.ts +35 -35
- package/src/api/types.ts +91 -91
- package/src/cart-drawer/context.tsx +277 -164
- package/src/cart-drawer/cross-sell-carousel.tsx +211 -211
- package/src/cart-drawer/cross-sell-sidebar.tsx +158 -158
- package/src/cart-drawer/gift-wrap.tsx +82 -82
- package/src/cart-drawer/index.ts +71 -68
- package/src/cart-drawer/item/index.tsx +162 -162
- package/src/cart-drawer/item/quantity.tsx +8 -14
- package/src/cart-drawer/item/upsell.tsx +110 -110
- package/src/cart-drawer/labels.ts +123 -123
- package/src/cart-drawer/mutation-queue.ts +78 -0
- package/src/cart-drawer/notes.tsx +131 -131
- package/src/cart-drawer/sticky-footer.tsx +73 -73
- package/src/cart-drawer/summary-breakdown.tsx +197 -197
- package/src/checkout/address-error-copy.ts +117 -117
- package/src/checkout/boxnow-locker-selector.tsx +410 -410
- package/src/checkout/compare-addresses.ts +40 -40
- package/src/checkout/discount-section.tsx +218 -218
- package/src/checkout/error-copy-codes.ts +63 -63
- package/src/checkout/geocode.ts +154 -154
- package/src/checkout/gift-card-section.tsx +224 -224
- package/src/checkout/index.ts +72 -72
- package/src/checkout/labels.ts +495 -495
- package/src/checkout/payment-button.tsx +372 -372
- package/src/checkout/payment-error-copy.ts +154 -154
- package/src/checkout/promotion-error-copy.ts +91 -91
- package/src/checkout/use-checkout-orchestration.ts +1592 -1592
- package/src/common/country-flag.tsx +52 -52
- package/src/common/country-select.tsx +11 -11
- package/src/common/index.ts +20 -20
- package/src/common/market-select.tsx +57 -57
- package/src/index.ts +12 -12
- package/src/lib/country-name.ts +59 -59
- package/src/lib/get-product-price.ts +133 -133
- package/src/lib/media-image.tsx +39 -39
- package/src/lib/payment-constants.ts +53 -53
- package/src/lib/platform.ts +13 -13
- package/src/lib/price.tsx +39 -39
- package/src/lib/store-api-error.ts +36 -36
- package/src/lib/variant-caption.ts +32 -32
- package/src/locales/bg.ts +467 -467
- package/src/locales/context.ts +37 -37
- package/src/locales/en.ts +26 -26
- package/src/locales/es.ts +466 -466
- package/src/locales/index.ts +19 -19
- package/src/locales/provider.tsx +59 -59
- package/src/locales/types.ts +77 -77
- package/src/order/index.ts +62 -62
- package/src/order/labels.ts +79 -79
- package/src/order/order-totals.tsx +250 -250
- package/src/primitives/select-field.tsx +93 -93
- package/src/products/image-gallery.tsx +43 -43
- package/src/products/index.ts +68 -59
- package/src/products/option-select.tsx +67 -67
- package/src/products/product-actions-wrapper.tsx +63 -62
- package/src/products/product-actions.tsx +151 -150
- package/src/products/product-price.tsx +69 -69
- package/src/products/product-promises.tsx +61 -61
- package/src/products/product-specs.tsx +65 -65
- package/src/products/product-tabs.tsx +123 -123
- package/src/products/product-template.tsx +163 -162
- package/src/products/purchase-options.tsx +130 -130
- package/src/products/sets.ts +110 -0
- package/src/products/use-product-actions.ts +199 -164
- package/src/products/variant-matching.ts +71 -71
- package/src/products/variant-url.ts +74 -74
- package/src/reviews-ui/index.ts +73 -73
- package/src/store/category-template.tsx +136 -136
- package/src/store/index.ts +40 -40
- package/src/tracking/chatgpt-pixel.tsx +99 -99
- package/src/tracking/consent-init.tsx +62 -62
- package/src/tracking/events.ts +348 -348
- package/src/tracking/ga4.tsx +93 -93
- package/src/tracking/google-ads.ts +84 -84
- package/src/tracking/gtm.tsx +60 -60
- package/src/tracking/inline-script.ts +49 -49
- package/src/tracking/oaiq.ts +206 -206
- package/src/tracking/tiktok-pixel.tsx +91 -91
- package/src/tracking/track-init.tsx +56 -56
- package/src/tracking/track-order-purchase.tsx +122 -122
- package/src/tracking/ttq.ts +180 -180
- package/src/tracking/use-tracking-config.ts +54 -54
- package/theme/index.css +25 -25
- package/theme/theme.css +150 -150
- package/theme/tokens.css +106 -106
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The variant caption a shopper sees under a product title.
|
|
3
|
-
*
|
|
4
|
-
* A product with one variant has no real variant, only a placeholder name
|
|
5
|
-
* for the row that holds its price: the platform names it "Default", a
|
|
6
|
-
* Shopify import carries "Default Title", Medusa "Default variant". None of
|
|
7
|
-
* them is a fact about the product, so none is shown. Every surface that
|
|
8
|
-
* prints a variant (cart drawer, checkout summary, order page) goes through
|
|
9
|
-
* this one function; a real variant title ("Size M / Red") passes through.
|
|
10
|
-
*
|
|
11
|
-
* Found 2026-09-14 on evoo's checkout summary, where every Shopify-imported
|
|
12
|
-
* product read "Default Title" under its name while three surfaces each
|
|
13
|
-
* tested a different spelling of the placeholder.
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
const PLACEHOLDER_TITLES = new Set(["default", "default title", "default variant"])
|
|
17
|
-
|
|
18
|
-
/** True for an empty title or any spelling of the single-variant placeholder. */
|
|
19
|
-
export function isPlaceholderVariantTitle(
|
|
20
|
-
title: string | null | undefined
|
|
21
|
-
): boolean {
|
|
22
|
-
if (!title) return true
|
|
23
|
-
return PLACEHOLDER_TITLES.has(title.trim().toLowerCase())
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** The caption to render, or null when there is nothing worth showing. */
|
|
27
|
-
export function variantCaption(title: string | null | undefined): string | null {
|
|
28
|
-
if (!title) return null
|
|
29
|
-
const trimmed = title.trim()
|
|
30
|
-
if (!trimmed || isPlaceholderVariantTitle(trimmed)) return null
|
|
31
|
-
return trimmed
|
|
32
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* The variant caption a shopper sees under a product title.
|
|
3
|
+
*
|
|
4
|
+
* A product with one variant has no real variant, only a placeholder name
|
|
5
|
+
* for the row that holds its price: the platform names it "Default", a
|
|
6
|
+
* Shopify import carries "Default Title", Medusa "Default variant". None of
|
|
7
|
+
* them is a fact about the product, so none is shown. Every surface that
|
|
8
|
+
* prints a variant (cart drawer, checkout summary, order page) goes through
|
|
9
|
+
* this one function; a real variant title ("Size M / Red") passes through.
|
|
10
|
+
*
|
|
11
|
+
* Found 2026-09-14 on evoo's checkout summary, where every Shopify-imported
|
|
12
|
+
* product read "Default Title" under its name while three surfaces each
|
|
13
|
+
* tested a different spelling of the placeholder.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
const PLACEHOLDER_TITLES = new Set(["default", "default title", "default variant"])
|
|
17
|
+
|
|
18
|
+
/** True for an empty title or any spelling of the single-variant placeholder. */
|
|
19
|
+
export function isPlaceholderVariantTitle(
|
|
20
|
+
title: string | null | undefined
|
|
21
|
+
): boolean {
|
|
22
|
+
if (!title) return true
|
|
23
|
+
return PLACEHOLDER_TITLES.has(title.trim().toLowerCase())
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** The caption to render, or null when there is nothing worth showing. */
|
|
27
|
+
export function variantCaption(title: string | null | undefined): string | null {
|
|
28
|
+
if (!title) return null
|
|
29
|
+
const trimmed = title.trim()
|
|
30
|
+
if (!trimmed || isPlaceholderVariantTitle(trimmed)) return null
|
|
31
|
+
return trimmed
|
|
32
|
+
}
|