@faststore/core 3.83.1 → 3.84.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.
Files changed (65) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +31 -31
  3. package/.next/cache/.tsbuildinfo +1 -1
  4. package/.next/cache/config.json +3 -3
  5. package/.next/cache/webpack/client-production/0.pack +0 -0
  6. package/.next/cache/webpack/client-production/index.pack +0 -0
  7. package/.next/cache/webpack/server-production/0.pack +0 -0
  8. package/.next/cache/webpack/server-production/index.pack +0 -0
  9. package/.next/prerender-manifest.js +1 -1
  10. package/.next/prerender-manifest.json +1 -1
  11. package/.next/react-loadable-manifest.json +22 -22
  12. package/.next/routes-manifest.json +1 -1
  13. package/.next/server/chunks/1911.js +1 -1
  14. package/.next/server/chunks/6789.js +1 -1
  15. package/.next/server/chunks/8474.js +1 -1
  16. package/.next/server/chunks/948.js +1 -1
  17. package/.next/server/chunks/9563.js +2 -2
  18. package/.next/server/chunks/9630.js +10 -7
  19. package/.next/server/middleware-build-manifest.js +1 -1
  20. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  21. package/.next/server/pages/[slug]/p.js +1 -1
  22. package/.next/server/pages/api/graphql.js +1 -1
  23. package/.next/server/pages/en-US/404.html +1 -1
  24. package/.next/server/pages/en-US/500.html +1 -1
  25. package/.next/server/pages/en-US/checkout.html +1 -1
  26. package/.next/server/pages/en-US/login.html +1 -1
  27. package/.next/server/pages/en-US/s.html +1 -1
  28. package/.next/server/pages/en-US.html +1 -1
  29. package/.next/server/pages-manifest.json +1 -1
  30. package/.next/static/{CaCKSx22-JjJUNjxZbMA8 → DhcFFBEwJrYjN9OdXaeMO}/_buildManifest.js +1 -1
  31. package/.next/static/chunks/3166-b1ac316afe18625b.js +1 -0
  32. package/.next/static/chunks/3836.c7f8d69a151682bc.js +1 -0
  33. package/.next/static/chunks/6789.c37c2ec891333684.js +1 -0
  34. package/.next/static/chunks/{7191-d91c65fe5de71dcd.js → 7191-d39597fc204602cb.js} +1 -1
  35. package/.next/static/chunks/9781.60f28efd7e165f54.js +1 -0
  36. package/.next/static/chunks/ProductTiles.2bd64de5bcd5f6d8.js +1 -0
  37. package/.next/static/chunks/pages/[slug]/{p-6ae1f8bde471e1a6.js → p-60dd0938ba92424b.js} +1 -1
  38. package/.next/static/chunks/pages/_app-423f11b0d7fff185.js +1 -0
  39. package/.next/static/chunks/{webpack-648fd45b167c0042.js → webpack-92cd0db592faf63b.js} +1 -1
  40. package/.next/static/css/{4656927d3ebbf5b8.css → 04fb2d4b8924b0c6.css} +1 -1
  41. package/.next/static/css/24a5e8f6808266fe.css +1 -0
  42. package/.next/static/css/{62a5153ac7061286.css → 3d7be7043aee15df.css} +1 -1
  43. package/.next/static/css/{a3ca6a9b63f657be.css → 6cd282d958f613bc.css} +1 -1
  44. package/.next/static/css/{8f6350925b347380.css → fe0bcc13a2b68605.css} +1 -1
  45. package/.next/trace +136 -136
  46. package/.turbo/turbo-build.log +18 -18
  47. package/.turbo/turbo-test.log +5 -5
  48. package/@generated/gql.ts +2 -2
  49. package/@generated/graphql.ts +22 -3
  50. package/@generated/persisted-documents.json +3 -3
  51. package/@generated/schema.graphql +8 -0
  52. package/CHANGELOG.md +6 -0
  53. package/cms/faststore/content-types.json +32 -0
  54. package/package.json +4 -4
  55. package/src/components/product/ProductCard/ProductCard.tsx +14 -0
  56. package/src/sdk/deliveryPromise/useDeliveryPromise.ts +87 -1
  57. package/src/utils/globalSettings.ts +7 -0
  58. package/.next/static/chunks/3166-7f69db4fed76486b.js +0 -1
  59. package/.next/static/chunks/3836.63a23109a71dbbdb.js +0 -1
  60. package/.next/static/chunks/6789.38bef760c1190c23.js +0 -1
  61. package/.next/static/chunks/9781.dd4028663db7414b.js +0 -1
  62. package/.next/static/chunks/ProductTiles.90806430263e4389.js +0 -1
  63. package/.next/static/chunks/pages/_app-ea25733c67653eac.js +0 -1
  64. package/.next/static/css/4b8252ed2f23ac67.css +0 -1
  65. /package/.next/static/{CaCKSx22-JjJUNjxZbMA8 → DhcFFBEwJrYjN9OdXaeMO}/_ssgManifest.js +0 -0
@@ -1,23 +1,23 @@
1
1
 
2
- > @faststore/core@3.83.0 prebuild /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@3.83.1 prebuild /home/runner/work/faststore/faststore/packages/core
3
3
  > na run partytown && na run generate
4
4
 
5
5
 
6
- > @faststore/core@3.83.0 partytown /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@3.83.1 partytown /home/runner/work/faststore/faststore/packages/core
7
7
  > partytown copylib ./public/~partytown
8
8
 
9
9
  Partytown lib copied to: /home/runner/work/faststore/faststore/packages/core/public/~partytown
10
10
 
11
- > @faststore/core@3.83.0 generate /home/runner/work/faststore/faststore/packages/core
11
+ > @faststore/core@3.83.1 generate /home/runner/work/faststore/faststore/packages/core
12
12
  > na run generate:schema && na run generate:codegen && na run format:generated
13
13
 
14
14
 
15
- > @faststore/core@3.83.0 generate:schema /home/runner/work/faststore/faststore/packages/core
15
+ > @faststore/core@3.83.1 generate:schema /home/runner/work/faststore/faststore/packages/core
16
16
  > tsx src/server/generator/generateGraphQLSchemaFile.ts
17
17
 
18
18
  Schema GraphQL file generated successfully
19
19
 
20
- > @faststore/core@3.83.0 generate:codegen /home/runner/work/faststore/faststore/packages/core
20
+ > @faststore/core@3.83.1 generate:codegen /home/runner/work/faststore/faststore/packages/core
21
21
  > graphql-codegen
22
22
 
23
23
  [STARTED] Parse Configuration
@@ -37,11 +37,11 @@ Running lifecycle hook "afterStart" scripts...
37
37
  [CLI] Loading Documents
38
38
  [CLI] Generating output
39
39
 
40
- > @faststore/core@3.83.0 format:generated /home/runner/work/faststore/faststore/packages/core
40
+ > @faststore/core@3.83.1 format:generated /home/runner/work/faststore/faststore/packages/core
41
41
  > prettier --write "@generated/**/*.{ts,js,tsx,jsx,json}" --loglevel error
42
42
 
43
43
 
44
- > @faststore/core@3.83.0 build /home/runner/work/faststore/faststore/packages/core
44
+ > @faststore/core@3.83.1 build /home/runner/work/faststore/faststore/packages/core
45
45
  > next build
46
46
 
47
47
  ⚠ No build cache found. Please configure build caching for faster rebuilds. Read more: https://nextjs.org/docs/messages/no-cache
@@ -65,8 +65,8 @@ Browserslist: browsers data (caniuse-lite) is 8 months old. Please run:
65
65
  Collecting page data ...
66
66
  Generating static pages (0/6) ...
67
67
 
68
68
  Generating static pages (1/6)
69
- Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Content documentation at https://developers.vtex.com/docs/guides/faststore/dynamic-content-overview for mapping the page and the corresponding data-fetching function.
70
69
 
71
70
  Generating static pages (2/6)
71
+ Warning: Dynamic Content not found for the page: home. Refer to the Dynamic Content documentation at https://developers.vtex.com/docs/guides/faststore/dynamic-content-overview for mapping the page and the corresponding data-fetching function.
72
72
 
73
73
  Generating static pages (4/6)
74
74
 
75
75
  ✓ Generating static pages (6/6)
76
76
  Finalizing page optimization ...
@@ -76,10 +76,10 @@ Route (pages) Size First Load JS
76
76
  ┌ ● / 3.66 kB 141 kB
77
77
  ├ └ css/b1806cbafd0c1f81.css 3.06 kB
78
78
  ├ /_app 0 B 107 kB
79
- ├ ● /[...slug] 2.45 kB 154 kB
80
- ├ ● /[slug]/p 33.3 kB 170 kB
81
- ├ ├ css/a3ca6a9b63f657be.css 5.75 kB
82
- ├ ├ css/62a5153ac7061286.css 6.11 kB
79
+ ├ ● /[...slug] 2.45 kB 155 kB
80
+ ├ ● /[slug]/p 33.5 kB 171 kB
81
+ ├ ├ css/6cd282d958f613bc.css 5.9 kB
82
+ ├ ├ css/3d7be7043aee15df.css 6.26 kB
83
83
  ├ └ css/6d92375b6ee8276a.css 16.1 kB
84
84
  ├ ○ /404 1.55 kB 139 kB
85
85
  ├ ● /500 1.55 kB 139 kB
@@ -87,11 +87,11 @@ Route (pages) Size First Load JS
87
87
  ├ ● /account/[...unknown] 281 B 107 kB
88
88
  ├ λ /account/403 2.44 kB 140 kB
89
89
  ├ └ css/b7bba8fce075688b.css 4.2 kB
90
- ├ λ /account/404 2.13 kB 139 kB
90
+ ├ λ /account/404 2.13 kB 140 kB
91
91
  ├ └ css/5347dbc8b71de47d.css 4.25 kB
92
92
  ├ λ /account/orders 10.5 kB 148 kB
93
93
  ├ └ css/b7fc24e8f1eb011f.css 12.8 kB
94
- ├ λ /account/orders/[id] 12.2 kB 149 kB
94
+ ├ λ /account/orders/[id] 12.2 kB 150 kB
95
95
  ├ └ css/297be4be3be36ff0.css 12.6 kB
96
96
  ├ λ /account/profile 1.79 kB 139 kB
97
97
  ├ └ css/831a1f72fe4b2d80.css 3.97 kB
@@ -105,13 +105,13 @@ Route (pages) Size First Load JS
105
105
  ├ λ /api/preview 0 B 107 kB
106
106
  ├ ● /checkout 737 B 138 kB
107
107
  ├ ● /login 1.68 kB 139 kB
108
- └ ● /s 3.24 kB 155 kB
108
+ └ ● /s 3.24 kB 156 kB
109
109
  + First Load JS shared by all 110 kB
110
110
  ├ chunks/framework-807b0f81cbc129f0.js 45.4 kB
111
111
  ├ chunks/main-f658704b53a96ab1.js 33.1 kB
112
- ├ chunks/pages/_app-ea25733c67653eac.js 24.3 kB
113
- ├ chunks/webpack-648fd45b167c0042.js 3.85 kB
114
- └ css/4b8252ed2f23ac67.css 3.51 kB
112
+ ├ chunks/pages/_app-423f11b0d7fff185.js 24.7 kB
113
+ ├ chunks/webpack-92cd0db592faf63b.js 3.85 kB
114
+ └ css/24a5e8f6808266fe.css 3.53 kB
115
115
 
116
116
  λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps)
117
117
  ○ (Static) automatically rendered as static HTML (uses no initial props)
@@ -1,14 +1,14 @@
1
1
 
2
- > @faststore/core@3.83.0 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@3.83.1 test /home/runner/work/faststore/faststore/packages/core
3
3
  > jest
4
4
 
5
- PASS test/server/cms/global.test.ts (28.448 s)
6
- PASS test/utils/multipleTemplates.test.ts (28.683 s)
5
+ PASS test/utils/multipleTemplates.test.ts (27.708 s)
6
+ PASS test/server/cms/global.test.ts (28.492 s)
7
7
  PASS test/server/cms/index.test.ts
8
- PASS test/server/index.test.ts (32.329 s)
8
+ PASS test/server/index.test.ts (31.229 s)
9
9
 
10
10
  Test Suites: 4 passed, 4 total
11
11
  Tests: 22 passed, 22 total
12
12
  Snapshots: 0 total
13
- Time: 33.357 s
13
+ Time: 32.612 s
14
14
  Ran all test suites.
package/@generated/gql.ts CHANGED
@@ -12,7 +12,7 @@ import * as types from './graphql'
12
12
  * Therefore it is highly recommended to use the babel or swc plugin for production.
13
13
  */
14
14
  const documents = {
15
- '\n fragment ProductSummary_product on StoreProduct {\n id: productID\n slug\n sku\n brand {\n brandName: name\n }\n name\n gtin\n\t\tunitMultiplier\n\n isVariantOf {\n productGroupID\n name\n\t\t\tskuVariants {\n\t\t\t\tallVariantsByName\n\t\t\t\tactiveVariations\n\t\t\t\tslugsMap\n\t\t\t\tavailableVariations\n\t\t\t}\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n lowPriceWithTaxes\n offers {\n availability\n price\n listPrice\n listPriceWithTaxes\n priceWithTaxes\n quantity\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n hasSpecifications\n\n unitMultiplier\n\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n allVariantProducts {\n name\n productID\n }\n }\n }\n\n advertisement {\n adId\n adResponseId\n }\n }\n':
15
+ '\n fragment ProductSummary_product on StoreProduct {\n id: productID\n slug\n sku\n brand {\n brandName: name\n }\n name\n gtin\n\t\tunitMultiplier\n\n isVariantOf {\n productGroupID\n name\n\t\t\tskuVariants {\n\t\t\t\tallVariantsByName\n\t\t\t\tactiveVariations\n\t\t\t\tslugsMap\n\t\t\t\tavailableVariations\n\t\t\t}\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n lowPriceWithTaxes\n offers {\n availability\n price\n listPrice\n listPriceWithTaxes\n priceWithTaxes\n quantity\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n hasSpecifications\n\n unitMultiplier\n\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n allVariantProducts {\n name\n productID\n }\n }\n }\n\n advertisement {\n adId\n adResponseId\n }\n\n deliveryPromiseBadges {\n typeName\n }\n }\n':
16
16
  types.ProductSummary_ProductFragmentDoc,
17
17
  '\n fragment Filter_facets on StoreFacet {\n ... on StoreFacetRange {\n key\n label\n\n min {\n selected\n absolute\n }\n\n max {\n selected\n absolute\n }\n\n __typename\n }\n ... on StoreFacetBoolean {\n key\n label\n values {\n label\n value\n selected\n quantity\n }\n\n __typename\n }\n }\n':
18
18
  types.Filter_FacetsFragmentDoc,
@@ -98,7 +98,7 @@ const documents = {
98
98
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
99
99
  */
100
100
  export function gql(
101
- source: '\n fragment ProductSummary_product on StoreProduct {\n id: productID\n slug\n sku\n brand {\n brandName: name\n }\n name\n gtin\n\t\tunitMultiplier\n\n isVariantOf {\n productGroupID\n name\n\t\t\tskuVariants {\n\t\t\t\tallVariantsByName\n\t\t\t\tactiveVariations\n\t\t\t\tslugsMap\n\t\t\t\tavailableVariations\n\t\t\t}\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n lowPriceWithTaxes\n offers {\n availability\n price\n listPrice\n listPriceWithTaxes\n priceWithTaxes\n quantity\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n hasSpecifications\n\n unitMultiplier\n\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n allVariantProducts {\n name\n productID\n }\n }\n }\n\n advertisement {\n adId\n adResponseId\n }\n }\n'
101
+ source: '\n fragment ProductSummary_product on StoreProduct {\n id: productID\n slug\n sku\n brand {\n brandName: name\n }\n name\n gtin\n\t\tunitMultiplier\n\n isVariantOf {\n productGroupID\n name\n\t\t\tskuVariants {\n\t\t\t\tallVariantsByName\n\t\t\t\tactiveVariations\n\t\t\t\tslugsMap\n\t\t\t\tavailableVariations\n\t\t\t}\n }\n\n image {\n url\n alternateName\n }\n\n brand {\n name\n }\n\n offers {\n lowPrice\n lowPriceWithTaxes\n offers {\n availability\n price\n listPrice\n listPriceWithTaxes\n priceWithTaxes\n quantity\n seller {\n identifier\n }\n }\n }\n\n additionalProperty {\n propertyID\n name\n value\n valueReference\n }\n\n hasSpecifications\n\n unitMultiplier\n\n isVariantOf {\n productGroupID\n name\n skuVariants {\n activeVariations\n slugsMap\n availableVariations\n allVariantProducts {\n name\n productID\n }\n }\n }\n\n advertisement {\n adId\n adResponseId\n }\n\n deliveryPromiseBadges {\n typeName\n }\n }\n'
102
102
  ): typeof import('./graphql').ProductSummary_ProductFragmentDoc
103
103
  /**
104
104
  * The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
@@ -349,6 +349,12 @@ export type DeliveryIds = {
349
349
  warehouseId: Maybe<Scalars['String']['output']>
350
350
  }
351
351
 
352
+ /** Delivery Promise badge. */
353
+ export type DeliveryPromiseBadge = {
354
+ /** Badge type. */
355
+ typeName: Maybe<Scalars['String']['output']>
356
+ }
357
+
352
358
  /** Input to get commercial authorizations by order ID. */
353
359
  export type ICommercialAuthorizationByOrderId = {
354
360
  /** Order ID to get commercial authorizations for. */
@@ -1417,6 +1423,8 @@ export type StoreProduct = {
1417
1423
  brand: StoreBrand
1418
1424
  /** List of items consisting of chain linked web pages, ending with the current page. */
1419
1425
  breadcrumbList: StoreBreadcrumbList
1426
+ /** Delivery Promise product's badge. */
1427
+ deliveryPromiseBadges: Maybe<Array<Maybe<DeliveryPromiseBadge>>>
1420
1428
  /** Product description. */
1421
1429
  description: Scalars['String']['output']
1422
1430
  /** Global Trade Item Number. */
@@ -2441,6 +2449,7 @@ export type ProductSummary_ProductFragment = {
2441
2449
  valueReference: any
2442
2450
  }>
2443
2451
  advertisement: { adId: string; adResponseId: string } | null
2452
+ deliveryPromiseBadges: Array<{ typeName: string | null } | null> | null
2444
2453
  }
2445
2454
 
2446
2455
  type Filter_Facets_StoreFacetBoolean_Fragment = {
@@ -3297,6 +3306,9 @@ export type ClientManyProductsQueryQuery = {
3297
3306
  valueReference: any
3298
3307
  }>
3299
3308
  advertisement: { adId: string; adResponseId: string } | null
3309
+ deliveryPromiseBadges: Array<{
3310
+ typeName: string | null
3311
+ } | null> | null
3300
3312
  }
3301
3313
  }>
3302
3314
  }
@@ -3529,6 +3541,7 @@ export type ClientSearchSuggestionsQueryQuery = {
3529
3541
  valueReference: any
3530
3542
  }>
3531
3543
  advertisement: { adId: string; adResponseId: string } | null
3544
+ deliveryPromiseBadges: Array<{ typeName: string | null } | null> | null
3532
3545
  }>
3533
3546
  }
3534
3547
  products: { pageInfo: { totalCount: number } }
@@ -3687,6 +3700,9 @@ export type ServerManyProductsQueryQuery = {
3687
3700
  valueReference: any
3688
3701
  }>
3689
3702
  advertisement: { adId: string; adResponseId: string } | null
3703
+ deliveryPromiseBadges: Array<{
3704
+ typeName: string | null
3705
+ } | null> | null
3690
3706
  }
3691
3707
  }>
3692
3708
  }
@@ -3781,6 +3797,9 @@ export const ProductSummary_ProductFragmentDoc = new TypedDocumentString(
3781
3797
  adId
3782
3798
  adResponseId
3783
3799
  }
3800
+ deliveryPromiseBadges {
3801
+ typeName
3802
+ }
3784
3803
  }
3785
3804
  `,
3786
3805
  { fragmentName: 'ProductSummary_product' }
@@ -4413,7 +4432,7 @@ export const ClientAllVariantProductsQueryDocument = {
4413
4432
  export const ClientManyProductsQueryDocument = {
4414
4433
  __meta__: {
4415
4434
  operationName: 'ClientManyProductsQuery',
4416
- operationHash: 'a4d0dbbeaafcf323c0850f282d4beaa2969ababa',
4435
+ operationHash: 'e49027bc29aa10cbf7bbb0ed62239af8de1653f0',
4417
4436
  },
4418
4437
  } as unknown as TypedDocumentString<
4419
4438
  ClientManyProductsQueryQuery,
@@ -4458,7 +4477,7 @@ export const ClientProfileQueryDocument = {
4458
4477
  export const ClientSearchSuggestionsQueryDocument = {
4459
4478
  __meta__: {
4460
4479
  operationName: 'ClientSearchSuggestionsQuery',
4461
- operationHash: '3df0026ed7d06f74ef470ecb6e4d2e7c70882451',
4480
+ operationHash: 'bbaa2ed75c4fb04842189e8d53a1d65481154e2b',
4462
4481
  },
4463
4482
  } as unknown as TypedDocumentString<
4464
4483
  ClientSearchSuggestionsQueryQuery,
@@ -4494,7 +4513,7 @@ export const ClientShippingSimulationQueryDocument = {
4494
4513
  export const ServerManyProductsQueryDocument = {
4495
4514
  __meta__: {
4496
4515
  operationName: 'ServerManyProductsQuery',
4497
- operationHash: '59ff9a09e138da0f0d5e7ab553c4889a6d4bc432',
4516
+ operationHash: '4b769cda49004c85d0d427c601eba36c37a52224',
4498
4517
  },
4499
4518
  } as unknown as TypedDocumentString<
4500
4519
  ServerManyProductsQueryQuery,
@@ -15,14 +15,14 @@
15
15
  "feb7005103a859e2bc8cf2360d568806fd88deba": "mutation SubscribeToNewsletter($data: IPersonNewsletter!) { subscribeToNewsletter(data: $data) { id } }",
16
16
  "dc912e7272e3d9f5ced206837df87f544d39d0a5": "query ClientProductCountQuery($term: String) { productCount(term: $term) { total } }",
17
17
  "4039e05f01a2fe449e20e8b82170d0ba94b1fbe9": "fragment ProductSKUMatrixSidebarFragment_product on StoreProduct { isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { additionalProperty { name propertyID value valueReference } image { alternateName url } name offers { highPrice lowPrice lowPriceWithTaxes offerCount offers { availability itemCondition listPrice listPriceWithTaxes price priceCurrency priceValidUntil priceWithTaxes quantity sellingPrice } priceCurrency } sku } availableVariations slugsMap } } id: productID } query ClientAllVariantProductsQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { ...ProductSKUMatrixSidebarFragment_product } }",
18
- "a4d0dbbeaafcf323c0850f282d4beaa2969ababa": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } query ClientManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $sponsoredCount: Int, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }",
18
+ "e49027bc29aa10cbf7bbb0ed62239af8de1653f0": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } deliveryPromiseBadges { typeName } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } query ClientManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $sponsoredCount: Int, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }",
19
19
  "bfc40da32b60f9404a4adb96b0856e3fbb04b076": "fragment ClientProductGallery on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { products { pageInfo { totalCount } } } } fragment Filter_facets on StoreFacet { ... on StoreFacetBoolean { __typename key label values { label quantity selected value } } ... on StoreFacetRange { __typename key label max { absolute selected } min { absolute selected } } } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ClientProductGalleryQuery($after: String!, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $term: String!) { redirect(term: $term, selectedFacets: $selectedFacets) { url } search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets ) { facets { ...Filter_facets } metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } } ...ClientProductGallery }",
20
20
  "47aa22eb750cb2c529e5eeafb921bfeadb67db71": "fragment CartProductItem on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations availableVariations slugsMap } } name sku unitMultiplier } fragment ClientProduct on Query { product(locator: $locator) { id: productID } } fragment ProductDetailsFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } brand { name } description gtin image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes seller { identifier } } } id: productID sku unitMultiplier ...CartProductItem } query ClientProductQuery($locator: [IStoreSelectedFacet!]!) { product(locator: $locator) { ...ProductDetailsFragment_product } ...ClientProduct }",
21
21
  "b668777678c137b8c7004297df4d8b8f2b29ee06": "fragment ProductComparisonFragment_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { name } description gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku skuSpecifications { field { id name originalName } values { fieldId id name originalName } } slug specificationGroups { name originalName specifications { name originalName values } } unitMultiplier } query ClientManyProductsSelectedQuery($productIds: [String!]!) { products(productIds: $productIds) { ...ProductComparisonFragment_product } }",
22
22
  "34ea14c0d4a57ddf9bc11e4be0cd2b5a6506d3d4": "query ClientProfileQuery($id: String!) { profile(id: $id) { addresses { city country geoCoordinate postalCode } } }",
23
- "3df0026ed7d06f74ef470ecb6e4d2e7c70882451": "fragment ClientSearchSuggestions on Query { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ClientSearchSuggestionsQuery($selectedFacets: [IStoreSelectedFacet!], $term: String!) { search(first: 5, term: $term, selectedFacets: $selectedFacets) { metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } suggestions { products { ...ProductSummary_product } terms { value } } } ...ClientSearchSuggestions }",
23
+ "bbaa2ed75c4fb04842189e8d53a1d65481154e2b": "fragment ClientSearchSuggestions on Query { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } deliveryPromiseBadges { typeName } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ClientSearchSuggestionsQuery($selectedFacets: [IStoreSelectedFacet!], $term: String!) { search(first: 5, term: $term, selectedFacets: $selectedFacets) { metadata { ...SearchEvent_metadata } products { pageInfo { totalCount } } suggestions { products { ...ProductSummary_product } terms { value } } } ...ClientSearchSuggestions }",
24
24
  "e2385b0f11726d0068f96548f57a8dd441c064e3": "fragment ClientTopSearchSuggestions on Query { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } } query ClientTopSearchSuggestionsQuery($selectedFacets: [IStoreSelectedFacet!], $term: String!) { search(first: 5, term: $term, selectedFacets: $selectedFacets) { suggestions { terms { value } } } ...ClientTopSearchSuggestions }",
25
25
  "5da2700f5a69ee8835b1cb6c69e14f4b6e12c4df": "mutation ValidateSession($search: String!, $session: IStoreSession!) { validateSession(session: $session, search: $search) { addressType b2b { customerId firstName isRepresentative lastName savedPostalCode unitId unitName userEmail userName } channel city country currency { code symbol } deliveryMode { deliveryChannel deliveryMethod deliveryWindow { endDate startDate } } geoCoordinates { latitude longitude } locale marketingData { utmCampaign utmMedium utmSource utmiCampaign utmiPage utmiPart } person { email familyName givenName id } postalCode refreshAfter } }",
26
26
  "c35bad22f67f3eb34fea52bb49efa6b1da6b728d": "fragment ClientShippingSimulation on Query { shipping(items: $items, postalCode: $postalCode, country: $country) { address { city } } } query ClientShippingSimulationQuery($country: String!, $items: [IShippingItem!]!, $postalCode: String!) { shipping(items: $items, postalCode: $postalCode, country: $country) { address { city neighborhood state } logisticsInfo { slas { availableDeliveryWindows { endDateUtc listPrice price startDateUtc } carrier deliveryChannel localizedEstimates price shippingEstimate } } } ...ClientShippingSimulation }",
27
- "59ff9a09e138da0f0d5e7ab553c4889a6d4bc432": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ServerManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $sponsoredCount: Int, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { metadata { ...SearchEvent_metadata } products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }"
27
+ "4b769cda49004c85d0d427c601eba36c37a52224": "fragment ClientManyProducts on Query { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { products { pageInfo { totalCount } } } } fragment ProductSummary_product on StoreProduct { additionalProperty { name propertyID value valueReference } advertisement { adId adResponseId } brand { brandName: name } brand { name } deliveryPromiseBadges { typeName } gtin hasSpecifications image { alternateName url } isVariantOf { name productGroupID skuVariants { activeVariations allVariantsByName availableVariations slugsMap } } isVariantOf { name productGroupID skuVariants { activeVariations allVariantProducts { name productID } availableVariations slugsMap } } name offers { lowPrice lowPriceWithTaxes offers { availability listPrice listPriceWithTaxes price priceWithTaxes quantity seller { identifier } } } id: productID sku slug unitMultiplier unitMultiplier } fragment SearchEvent_metadata on SearchMetadata { fuzzy isTermMisspelled logicalOperator } query ServerManyProductsQuery($after: String, $first: Int!, $selectedFacets: [IStoreSelectedFacet!]!, $sort: StoreSort!, $sponsoredCount: Int, $term: String!) { search( first: $first after: $after sort: $sort term: $term selectedFacets: $selectedFacets sponsoredCount: $sponsoredCount ) { metadata { ...SearchEvent_metadata } products { edges { node { ...ProductSummary_product } } pageInfo { totalCount } } } ...ClientManyProducts }"
28
28
  }
@@ -165,6 +165,12 @@ type StoreCollection {
165
165
  type: StoreCollectionType!
166
166
  }
167
167
 
168
+ """Delivery Promise badge."""
169
+ type DeliveryPromiseBadge {
170
+ """Badge type."""
171
+ typeName: String
172
+ }
173
+
168
174
  union StoreFacet = StoreFacetRange | StoreFacetBoolean
169
175
 
170
176
  """Search facet range information."""
@@ -698,6 +704,8 @@ type StoreProduct {
698
704
  skuSpecifications: [SkuSpecification!]!
699
705
  """Indicate the specifications of a group of SKUs."""
700
706
  specificationGroups: [SpecificationGroup!]!
707
+ """Delivery Promise product's badge."""
708
+ deliveryPromiseBadges: [DeliveryPromiseBadge]
701
709
  }
702
710
 
703
711
  type SkuSpecification {
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.84.0](https://github.com/vtex/faststore/compare/v3.83.1...v3.84.0) (2025-09-09)
7
+
8
+ ### Features
9
+
10
+ - Adds delivery promise badges to product card ([#2994](https://github.com/vtex/faststore/issues/2994)) ([87279c8](https://github.com/vtex/faststore/commit/87279c82a0ba83c9dffc5872b94cead98189dd23))
11
+
6
12
  ## [3.83.1](https://github.com/vtex/faststore/compare/v3.83.0...v3.83.1) (2025-09-09)
7
13
 
8
14
  ### Bug Fixes
@@ -255,6 +255,38 @@
255
255
  "default": "All delivery options"
256
256
  }
257
257
  }
258
+ },
259
+ "deliveryPromiseBadges": {
260
+ "title": "Delivery Promise badges",
261
+ "type": "object",
262
+ "description": "The badges will be displayed in product cards indicating the delivery methods availability for the product.",
263
+ "properties": {
264
+ "enabled": {
265
+ "title": "Should display Delivery Promise badges?",
266
+ "type": "boolean",
267
+ "default": true
268
+ },
269
+ "delivery": {
270
+ "title": "Shipping available label",
271
+ "type": "string",
272
+ "default": "Available for shipping"
273
+ },
274
+ "deliveryUnavailable": {
275
+ "title": "Shipping unavailable label",
276
+ "type": "string",
277
+ "default": "Unavailable for shipping"
278
+ },
279
+ "pickupInPoint": {
280
+ "title": "Pickup available label",
281
+ "type": "string",
282
+ "default": "Available for pickup"
283
+ },
284
+ "pickupInPointUnavailable": {
285
+ "title": "Pickup unavailable label",
286
+ "type": "string",
287
+ "default": "Unavailable for pickup"
288
+ }
289
+ }
258
290
  }
259
291
  }
260
292
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "3.83.1",
3
+ "version": "3.84.0",
4
4
  "license": "MIT",
5
5
  "repository": "vtex/faststore",
6
6
  "browserslist": "supports es6-module and not dead",
@@ -44,11 +44,11 @@
44
44
  "@envelop/graphql-jit": "^8.0.3",
45
45
  "@envelop/parser-cache": "^6.0.2",
46
46
  "@envelop/validation-cache": "^6.0.2",
47
- "@faststore/api": "^3.82.4",
47
+ "@faststore/api": "^3.84.0",
48
48
  "@faststore/graphql-utils": "^3.81.0",
49
49
  "@faststore/lighthouse": "^3.81.0",
50
50
  "@faststore/sdk": "^3.83.1",
51
- "@faststore/ui": "^3.81.0",
51
+ "@faststore/ui": "^3.84.0",
52
52
  "@graphql-codegen/cli": "5.0.2",
53
53
  "@graphql-codegen/client-preset": "4.2.6",
54
54
  "@graphql-codegen/typescript": "4.0.7",
@@ -108,5 +108,5 @@
108
108
  "ts-jest": "29.1.1",
109
109
  "typescript": "5.3.2"
110
110
  },
111
- "gitHead": "f5425a54e204c3c45133e7da86c878b1de10f767"
111
+ "gitHead": "6fa29e5b0a01dab3971a688484c8ec73e1a40aad"
112
112
  }
@@ -11,8 +11,10 @@ import type { ProductSummary_ProductFragment } from '@generated/graphql'
11
11
  import type { ImageProps } from 'next/image'
12
12
  import NextLink from 'next/link'
13
13
  import { Image } from 'src/components/ui/Image'
14
+ import { useDeliveryPromise } from 'src/sdk/deliveryPromise'
14
15
  import { useFormattedPrice } from 'src/sdk/product/useFormattedPrice'
15
16
  import { useProductLink } from 'src/sdk/product/useProductLink'
17
+ import { getGlobalSettings } from 'src/utils/globalSettings'
16
18
 
17
19
  type Variant = 'wide' | 'default'
18
20
 
@@ -99,8 +101,15 @@ function ProductCard({
99
101
  lowPriceWithTaxes,
100
102
  offers: [{ listPrice: listPriceBase, availability, listPriceWithTaxes }],
101
103
  },
104
+ deliveryPromiseBadges,
102
105
  } = product
103
106
 
107
+ const { deliveryPromise: deliveryPromiseSettings } = getGlobalSettings() ?? {}
108
+ const { badges, shouldDisplayDeliveryPromiseBadges } = useDeliveryPromise({
109
+ deliveryPromiseBadges,
110
+ deliveryPromiseSettings,
111
+ })
112
+
104
113
  const linkProps = {
105
114
  ...useProductLink({ product, selectedOffer: 0, index }),
106
115
  as: NextLink,
@@ -175,6 +184,7 @@ function ProductCard({
175
184
  includeTaxesLabel={taxesConfiguration?.taxesLabel}
176
185
  sponsored={!!advertisement}
177
186
  sponsoredLabel={sponsoredLabel}
187
+ deliveryPromiseBadges={shouldDisplayDeliveryPromiseBadges && badges}
178
188
  />
179
189
  </UIProductCard>
180
190
  </>
@@ -258,6 +268,10 @@ export const fragment = gql(`
258
268
  adId
259
269
  adResponseId
260
270
  }
271
+
272
+ deliveryPromiseBadges {
273
+ typeName
274
+ }
261
275
  }
262
276
  `)
263
277
 
@@ -8,7 +8,10 @@ import {
8
8
  type SearchState,
9
9
  type Session,
10
10
  } from '@faststore/sdk'
11
- import type { Filter_FacetsFragment } from '@generated/graphql'
11
+ import type {
12
+ DeliveryPromiseBadge,
13
+ Filter_FacetsFragment,
14
+ } from '@generated/graphql'
12
15
 
13
16
  import type { useFilter } from 'src/sdk/search/useFilter'
14
17
  import { useSession } from 'src/sdk/session'
@@ -31,6 +34,7 @@ export const DELIVERY_OPTIONS_FACET_KEY = 'delivery-options' as const
31
34
  export const DYNAMIC_ESTIMATE_FACET_KEY = 'dynamic-estimate' as const
32
35
 
33
36
  type Facet = SearchState['selectedFacets'][number]
37
+ type DeliveryType = 'delivery' | 'pickup-in-point'
34
38
 
35
39
  export type PickupPoint = {
36
40
  id: string
@@ -84,6 +88,7 @@ type Props = {
84
88
  allFacets?: ReturnType<typeof useFilter>['facets']
85
89
  fallbackToFirstPickupPoint?: boolean
86
90
  selectedFilterFacets?: Facet[]
91
+ deliveryPromiseBadges?: DeliveryPromiseBadge[]
87
92
  }
88
93
 
89
94
  /**
@@ -95,6 +100,7 @@ export function useDeliveryPromise({
95
100
  selectedFilterFacets = undefined,
96
101
  deliveryPromiseSettings,
97
102
  fallbackToFirstPickupPoint = true,
103
+ deliveryPromiseBadges,
98
104
  }: Props = {}) {
99
105
  const { postalCode } = useSession()
100
106
  const { state: searchState, setState: setSearchState } = useSearch()
@@ -435,6 +441,84 @@ export function useDeliveryPromise({
435
441
  []
436
442
  )
437
443
 
444
+ function getBadgeLabel(value: DeliveryType, isAvailable: boolean) {
445
+ const labelMap: Record<
446
+ DeliveryType,
447
+ { available: string; unavailable: string }
448
+ > = {
449
+ delivery: {
450
+ available:
451
+ deliveryPromiseSettings?.deliveryPromiseBadges?.delivery ??
452
+ 'Available for shipping',
453
+ unavailable:
454
+ deliveryPromiseSettings?.deliveryPromiseBadges?.deliveryUnavailable ??
455
+ 'Unavailable for shipping',
456
+ },
457
+ 'pickup-in-point': {
458
+ available:
459
+ deliveryPromiseSettings?.deliveryPromiseBadges?.pickupInPoint ??
460
+ 'Available for pickup',
461
+ unavailable:
462
+ deliveryPromiseSettings?.deliveryPromiseBadges
463
+ ?.pickupInPointUnavailable ?? 'Unavailable for pickup',
464
+ },
465
+ }
466
+
467
+ return labelMap[value]
468
+ ? isAvailable
469
+ ? labelMap[value].available
470
+ : labelMap[value].unavailable
471
+ : value
472
+ }
473
+
474
+ function getDeliveryPromiseBadges() {
475
+ // Only add unavailable badges if at least one delivery method is available
476
+ if (!deliveryPromiseBadges || deliveryPromiseBadges.length === 0) return []
477
+
478
+ const badges: Array<{ label: string; availability: boolean }> = []
479
+
480
+ const availableTypeNames = deliveryPromiseBadges?.map(
481
+ (badge) => badge.typeName
482
+ )
483
+
484
+ const hasDelivery = availableTypeNames?.includes('delivery')
485
+ const hasPickupPoint = availableTypeNames?.includes('pickup-in-point')
486
+
487
+ if (hasDelivery) {
488
+ badges.push({
489
+ label: getBadgeLabel('delivery', true),
490
+ availability: true,
491
+ })
492
+ } else {
493
+ badges.push({
494
+ label: getBadgeLabel('delivery', false),
495
+ availability: false,
496
+ })
497
+ }
498
+
499
+ if (hasPickupPoint) {
500
+ badges.push({
501
+ label: getBadgeLabel('pickup-in-point', true),
502
+ availability: true,
503
+ })
504
+ } else {
505
+ badges.push({
506
+ label: getBadgeLabel('pickup-in-point', false),
507
+ availability: false,
508
+ })
509
+ }
510
+
511
+ return badges
512
+ }
513
+
514
+ const badges = getDeliveryPromiseBadges()
515
+
516
+ const shouldDisplayDeliveryPromiseBadges =
517
+ !!postalCode &&
518
+ isDeliveryPromiseEnabled &&
519
+ (deliveryPromiseSettings?.deliveryPromiseBadges?.enabled ?? true) &&
520
+ badges.length > 0
521
+
438
522
  return {
439
523
  mandatory: deliveryPromiseConfig.mandatory,
440
524
  isEnabled: isDeliveryPromiseEnabled,
@@ -463,6 +547,8 @@ export function useDeliveryPromise({
463
547
  pickupPoints?.length > 0 &&
464
548
  (deliveryPromiseSettings?.deliveryMethods?.pickupAll?.enabled ?? false),
465
549
  shouldDisplayDeliveryButton: isDeliveryPromiseEnabled && !postalCode,
550
+ shouldDisplayDeliveryPromiseBadges,
551
+ badges,
466
552
  }
467
553
  }
468
554
 
@@ -63,6 +63,13 @@ type DeliveryPromiseCmsData = {
63
63
  title?: string
64
64
  allDeliveryOptions?: string
65
65
  }
66
+ deliveryPromiseBadges?: {
67
+ enabled?: boolean
68
+ delivery?: string
69
+ deliveryUnavailable?: string
70
+ pickupInPoint?: string
71
+ pickupInPointUnavailable?: string
72
+ }
66
73
  }
67
74
 
68
75
  export function getGlobalSettings(