@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
package/src/locales/context.ts
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
"use client"
|
|
2
|
-
|
|
3
|
-
import { createContext, useContext } from "react"
|
|
4
|
-
import type { StorefrontLocale } from "./types"
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* THE MOUNTED LANGUAGE, as a context. Null outside `StorefrontLocaleProvider`.
|
|
8
|
-
*
|
|
9
|
-
* Its default is null and not `en` on purpose: `en` gathers every area's
|
|
10
|
-
* English, and a client component that needs one area (the cart drawer, a
|
|
11
|
-
* review card) must not bundle the other five to read it. Each reader hands
|
|
12
|
-
* over its own area's English instead, through `useLocaleArea`, so a
|
|
13
|
-
* component rendered with no language mounted behaves exactly as before.
|
|
14
|
-
*/
|
|
15
|
-
export const StorefrontLocaleContext = createContext<StorefrontLocale | null>(null)
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* One area of the mounted language, for a CLIENT component that renders it.
|
|
19
|
-
*
|
|
20
|
-
* const l = { ...useLocaleArea("reviews", defaultReviewsUiLabels), ...labels }
|
|
21
|
-
*
|
|
22
|
-
* The pack the store mounted wins over the area's English; a `labels` prop
|
|
23
|
-
* still wins over both, so a store can override one word without a pack.
|
|
24
|
-
* Since 2026-09-14 this is how the cart drawer and the reviews family are
|
|
25
|
-
* localized: mount the provider once and there is nothing left to forget.
|
|
26
|
-
*
|
|
27
|
-
* A SERVER component cannot call this, because a server component has no
|
|
28
|
-
* context. That is why the store, product and order templates take their
|
|
29
|
-
* pack as a REQUIRED prop instead (`PropLabelAreas` in ./types).
|
|
30
|
-
*/
|
|
31
|
-
export function useLocaleArea<K extends keyof StorefrontLocale>(
|
|
32
|
-
area: K,
|
|
33
|
-
english: StorefrontLocale[K]
|
|
34
|
-
): StorefrontLocale[K] {
|
|
35
|
-
const locale = useContext(StorefrontLocaleContext)
|
|
36
|
-
return locale ? locale[area] : english
|
|
37
|
-
}
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext } from "react"
|
|
4
|
+
import type { StorefrontLocale } from "./types"
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* THE MOUNTED LANGUAGE, as a context. Null outside `StorefrontLocaleProvider`.
|
|
8
|
+
*
|
|
9
|
+
* Its default is null and not `en` on purpose: `en` gathers every area's
|
|
10
|
+
* English, and a client component that needs one area (the cart drawer, a
|
|
11
|
+
* review card) must not bundle the other five to read it. Each reader hands
|
|
12
|
+
* over its own area's English instead, through `useLocaleArea`, so a
|
|
13
|
+
* component rendered with no language mounted behaves exactly as before.
|
|
14
|
+
*/
|
|
15
|
+
export const StorefrontLocaleContext = createContext<StorefrontLocale | null>(null)
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* One area of the mounted language, for a CLIENT component that renders it.
|
|
19
|
+
*
|
|
20
|
+
* const l = { ...useLocaleArea("reviews", defaultReviewsUiLabels), ...labels }
|
|
21
|
+
*
|
|
22
|
+
* The pack the store mounted wins over the area's English; a `labels` prop
|
|
23
|
+
* still wins over both, so a store can override one word without a pack.
|
|
24
|
+
* Since 2026-09-14 this is how the cart drawer and the reviews family are
|
|
25
|
+
* localized: mount the provider once and there is nothing left to forget.
|
|
26
|
+
*
|
|
27
|
+
* A SERVER component cannot call this, because a server component has no
|
|
28
|
+
* context. That is why the store, product and order templates take their
|
|
29
|
+
* pack as a REQUIRED prop instead (`PropLabelAreas` in ./types).
|
|
30
|
+
*/
|
|
31
|
+
export function useLocaleArea<K extends keyof StorefrontLocale>(
|
|
32
|
+
area: K,
|
|
33
|
+
english: StorefrontLocale[K]
|
|
34
|
+
): StorefrontLocale[K] {
|
|
35
|
+
const locale = useContext(StorefrontLocaleContext)
|
|
36
|
+
return locale ? locale[area] : english
|
|
37
|
+
}
|
package/src/locales/en.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { defaultCartDrawerLabels } from "../cart-drawer/labels"
|
|
2
|
-
import { defaultCheckoutLabels } from "../checkout/labels"
|
|
3
|
-
import { defaultOrderLabels } from "../order/labels"
|
|
4
|
-
import { defaultProductLabels } from "../products/labels"
|
|
5
|
-
import { defaultReviewsUiLabels } from "../reviews-ui/labels"
|
|
6
|
-
import { defaultStoreLabels } from "../store/labels"
|
|
7
|
-
import type { StorefrontLocale } from "./types"
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* ENGLISH — the library's own default, gathered into one locale object.
|
|
11
|
-
*
|
|
12
|
-
* It holds NO copy of its own: every field points at the defaults that
|
|
13
|
-
* live beside each area's type, which are what a component renders when no
|
|
14
|
-
* provider is mounted. So English cannot drift from the library, and a new
|
|
15
|
-
* label added to any area appears here with no edit.
|
|
16
|
-
*/
|
|
17
|
-
export const en: StorefrontLocale = {
|
|
18
|
-
code: "en",
|
|
19
|
-
name: "English",
|
|
20
|
-
products: defaultProductLabels,
|
|
21
|
-
store: defaultStoreLabels,
|
|
22
|
-
cartDrawer: defaultCartDrawerLabels,
|
|
23
|
-
checkout: defaultCheckoutLabels,
|
|
24
|
-
order: defaultOrderLabels,
|
|
25
|
-
reviews: defaultReviewsUiLabels,
|
|
26
|
-
}
|
|
1
|
+
import { defaultCartDrawerLabels } from "../cart-drawer/labels"
|
|
2
|
+
import { defaultCheckoutLabels } from "../checkout/labels"
|
|
3
|
+
import { defaultOrderLabels } from "../order/labels"
|
|
4
|
+
import { defaultProductLabels } from "../products/labels"
|
|
5
|
+
import { defaultReviewsUiLabels } from "../reviews-ui/labels"
|
|
6
|
+
import { defaultStoreLabels } from "../store/labels"
|
|
7
|
+
import type { StorefrontLocale } from "./types"
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* ENGLISH — the library's own default, gathered into one locale object.
|
|
11
|
+
*
|
|
12
|
+
* It holds NO copy of its own: every field points at the defaults that
|
|
13
|
+
* live beside each area's type, which are what a component renders when no
|
|
14
|
+
* provider is mounted. So English cannot drift from the library, and a new
|
|
15
|
+
* label added to any area appears here with no edit.
|
|
16
|
+
*/
|
|
17
|
+
export const en: StorefrontLocale = {
|
|
18
|
+
code: "en",
|
|
19
|
+
name: "English",
|
|
20
|
+
products: defaultProductLabels,
|
|
21
|
+
store: defaultStoreLabels,
|
|
22
|
+
cartDrawer: defaultCartDrawerLabels,
|
|
23
|
+
checkout: defaultCheckoutLabels,
|
|
24
|
+
order: defaultOrderLabels,
|
|
25
|
+
reviews: defaultReviewsUiLabels,
|
|
26
|
+
}
|