@faststore/core 4.8.0-dev.7 → 4.8.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.
@@ -1,9 +1,9 @@
1
1
 
2
- > @faststore/core@4.8.0-dev.6 generate /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.8.0-dev.8 generate /home/runner/work/faststore/faststore/packages/core
3
3
  > pnpm run gen-types && pnpm run cache-graphql
4
4
 
5
5
 
6
- > @faststore/core@4.8.0-dev.6 gen-types /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@4.8.0-dev.8 gen-types /home/runner/work/faststore/faststore/packages/core
7
7
  > node ../cli/bin/run generate-types .
8
8
 
9
9
  [STARTED] Parse Configuration
@@ -19,7 +19,7 @@
19
19
  [COMPLETED] Generate to @generated/
20
20
  [COMPLETED] Generate outputs
21
21
 
22
- > @faststore/core@4.8.0-dev.6 cache-graphql /home/runner/work/faststore/faststore/packages/core
22
+ > @faststore/core@4.8.0-dev.8 cache-graphql /home/runner/work/faststore/faststore/packages/core
23
23
  > node ../cli/bin/run cache-graphql --config=./discovery.config.default.js --queries=./@generated/persisted-documents.json
24
24
 
25
25
  [Info] - Config file location: /home/runner/work/faststore/faststore/packages/core/discovery.config.default.js
@@ -1,25 +1,26 @@
1
1
 
2
- > @faststore/core@4.8.0-dev.6 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.8.0-dev.8 test /home/runner/work/faststore/faststore/packages/core
3
3
  > vitest run
4
4
 
5
5
 
6
6
   RUN  v4.0.18 /home/runner/work/faststore/faststore/packages/core
7
7
 
8
- Not implemented: navigation to another Document
9
- Not implemented: navigation to another Document
10
8
  Browserslist: browsers data (caniuse-lite) is 7 months old. Please run:
11
9
  npx update-browserslist-db@latest
12
10
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
13
- ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 837ms
14
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 412ms
15
- ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (14 tests) 1807ms
16
- ✓ shows the tab bar and renders Personal cards by default  601ms
17
- ✓ paginates when there are more than 25 cards  324ms
18
- ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 130ms
19
- ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (13 tests) 1943ms
20
- ✓ shows an error state when the list fails to load  610ms
21
- ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 240ms
22
- ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (5 tests) 17ms
11
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 449ms
12
+ Not implemented: navigation to another Document
13
+ Not implemented: navigation to another Document
14
+ ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 1099ms
15
+ ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 2283ms
16
+ ✓ shows the tab bar and renders Personal cards by default  766ms
17
+ ✓ paginates when there are more than 25 cards  417ms
18
+ ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 244ms
19
+ ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 263ms
20
+ ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (13 tests) 2718ms
21
+ ✓ shows an error state when the list fails to load  849ms
22
+ ✓ requires selecting a contract before Confirm is enabled, then switches (REQ-03)  531ms
23
+ ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (5 tests) 23ms
23
24
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx
24
25
  Error in optimistic validation: TypeError: Failed to parse URL from /api/graphql?operationName=ValidateCartMutation&operationHash=3c71b0d3fc2bade14df68abfa271858beb361b12
25
26
   at node:internal/deps/undici/undici:16416:13
@@ -49,9 +50,12 @@ Browserslist: browsers data (caniuse-lite) is 7 months old. Please run:
49
50
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx > RecommendationShelf > renders nothing when there is an error
50
51
  Error fetching recommendations undefined boom for campaign vrn:recommendations:acc:rec-top-items-v2:campaign-1
51
52
 
52
- ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 141ms
53
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 96ms
54
- ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 97ms
53
+ ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 244ms
54
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 152ms
55
+ ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 75ms
56
+ ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (6 tests) 10ms
57
+ ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (5 tests) 872ms
58
+ ✓ renders the menu view with contract details and manage footer  444ms
55
59
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > posts the password and redirects to the requested return path
56
60
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
57
61
 
@@ -137,7 +141,6 @@ act(() => {
137
141
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
138
142
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
139
143
 
140
- ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (6 tests) 8ms
141
144
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > uses the fallback invalid-password message when API omits an error
142
145
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
143
146
 
@@ -282,11 +285,9 @@ act(() => {
282
285
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
283
286
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
284
287
 
285
- ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 619ms
286
- ✓ renders the password protection form  351ms
287
- ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (5 tests) 682ms
288
- ✓ renders the menu view with contract details and manage footer  326ms
289
- ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 40ms
288
+ ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 1124ms
289
+ ✓ renders the password protection form  405ms
290
+ ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 44ms
290
291
  stderr | test/sdk/localization/store-url.browser.test.ts
291
292
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
292
293
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -303,13 +304,13 @@ This ensures that you're testing the behavior the user would see in the browser.
303
304
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
304
305
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
305
306
 
306
- ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 4ms
307
- ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 23ms
308
- ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 71ms
309
- ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 30ms
310
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 120ms
311
- ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (4 tests) 25ms
312
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 42ms
307
+ ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 5ms
308
+ ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 67ms
309
+ ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 42ms
310
+ ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 39ms
311
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 129ms
312
+ ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (4 tests) 46ms
313
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 58ms
313
314
  stderr | test/components/account/doLogout.browser.test.ts
314
315
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
315
316
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -318,11 +319,11 @@ This ensures that you're testing the behavior the user would see in the browser.
318
319
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
319
320
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
320
321
 
321
- ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 21ms
322
- ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 40ms
323
- ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 62ms
324
- ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (3 tests) 220ms
325
- ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (3 tests) 230ms
322
+ ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 27ms
323
+ ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 43ms
324
+ ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 93ms
325
+ ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (3 tests) 304ms
326
+ ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (3 tests) 279ms
326
327
  stderr | test/sdk/account/clearPersistedSessionState.browser.test.ts
327
328
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
328
329
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -331,11 +332,11 @@ This ensures that you're testing the behavior the user would see in the browser.
331
332
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
332
333
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
333
334
 
334
- ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (1 test) 6ms
335
+ ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (1 test) 8ms
335
336
  ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 4ms
336
- ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 3ms
337
- ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 12ms
338
- ✓  node  test/server/password-protection-service.test.ts (22 tests) 29ms
337
+ ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 4ms
338
+ ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 29ms
339
+ ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 36ms
339
340
  stderr | test/sdk/account/refreshToken.browser.test.ts
340
341
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
341
342
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -344,12 +345,12 @@ This ensures that you're testing the behavior the user would see in the browser.
344
345
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
345
346
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
346
347
 
347
- ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 34ms
348
- ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 4ms
349
- ✓  node  test/utils/match-url.test.ts (10 tests) 8ms
350
- ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 12ms
351
- ✓  node  test/pages/api/unlock.test.ts (15 tests) 140ms
352
- ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 8ms
348
+ ✓  node  test/server/password-protection-service.test.ts (22 tests) 41ms
349
+ ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 6ms
350
+ ✓  node  test/utils/match-url.test.ts (10 tests) 9ms
351
+ ✓  node  test/pages/api/unlock.test.ts (15 tests) 234ms
352
+ ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 15ms
353
+ ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 10ms
353
354
  stderr | test/components/search/SearchInputComponent.test.tsx
354
355
  Warning: forwardRef render functions accept exactly two parameters: props and ref. Did you forget to use the ref parameter?
355
356
 
@@ -413,19 +414,19 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
413
414
  at Suspense
414
415
  at Wrapper (/home/runner/work/faststore/faststore/packages/core/test/components/search/SearchInputComponent.test.tsx:106:20)
415
416
 
416
- ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 62ms
417
- ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 38ms
418
- ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 10ms
417
+ ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 79ms
418
+ ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 51ms
419
+ ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 13ms
419
420
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > redirects to /pvt/account/403 when the query fails with 401/403
420
421
  { extensions: { status: 401 } }
421
422
 
422
423
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > renders the error state (no redirect) when the query fails with a non-auth status
423
424
  { extensions: { status: 502 } }
424
425
 
425
- ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 8ms
426
- ✓  node  test/utils/clearCookies.test.ts (20 tests) 24ms
427
- ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 7ms
428
- ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (12 tests) 314ms
426
+ ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 12ms
427
+ ✓  node  test/utils/clearCookies.test.ts (20 tests) 28ms
428
+ ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 10ms
429
+ ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (12 tests) 358ms
429
430
  stderr | test/pages/api/graphql.test.ts > /api/graphql error status propagation > propagates the upstream 400 from a wrapped BadRequestError instead of 500
430
431
  Graphql execution returned with error: [
431
432
  {
@@ -504,6 +505,7 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
504
505
  extensions: { status: 401, type: 'UnauthorizedError' }
505
506
  }
506
507
 
508
+ ✓  node  test/pages/api/graphql.test.ts (17 tests) 24ms
507
509
  stderr | test/pages/api/graphql.test.ts > /api/graphql request handling > maps an unexpected failure thrown by execute to its status
508
510
  Something unexpected occurred querying Graphql endpoint:
509
511
  Error: socket hang up
@@ -518,69 +520,67 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
518
520
  at file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1653:37
519
521
  at Traces.$ (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/vitest@4.0.18_@opentelemetry+api@1.9.0_@types+node@20.19.13_jiti@2.6.1_jsdom@27.4.0_sas_13be941c57d55f08f06eeaf1c180ddfe/node_modules/vitest/dist/chunks/traces.CCmnQaNT.js:142:27)
520
522
 
521
- ✓  node  test/pages/api/graphql.test.ts (17 tests) 19ms
522
523
  stderr | test/sdk/account/useSetPassword.test.ts > useSetPassword > maps wrongcredentials error responses to the existing message
523
524
  Set password request failed: Bad Request
524
525
 
525
- ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 22ms
526
- ✓  node  test/components/quotes/quoteFilters.test.ts (23 tests) 22ms
527
- ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (9 tests) 796ms
528
- ✓ navigates with the search term on blur  358ms
526
+ ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 38ms
527
+ ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (9 tests) 811ms
528
+ ✓ navigates with the search term on blur  360ms
529
529
  ✓ navigates without a label param when the search is cleared  357ms
530
- ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 37ms
531
- ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 4ms
532
- ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 5ms
533
- ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 5ms
534
- ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (12 tests) 11ms
535
- ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 38ms
536
- ✓  node  test/sdk/redirects/index.test.ts (7 tests) 39ms
537
- ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (5 tests) 119ms
538
- ✓  node  test/utils/productJsonLd.test.ts (17 tests) 8ms
539
- ✓  node  test/proxy.localization.test.ts (5 tests) 29ms
540
- ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 14ms
541
- ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 30ms
542
- ✓  node  test/server/index.test.ts (7 tests) 794ms
543
- ✓ should handle options and execute  376ms
544
- ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (6 tests) 7ms
545
- ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 43ms
546
- ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (8 tests) 69ms
547
- ✓  node  test/server/webops-api.test.ts (9 tests) 16ms
548
- ✓  node  test/proxy.test.ts (4 tests) 12ms
549
- ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 30ms
550
- ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 11ms
530
+ ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 44ms
531
+ ✓  node  test/components/quotes/quoteFilters.test.ts (23 tests) 37ms
532
+ ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 7ms
533
+ ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 8ms
534
+ ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 7ms
535
+ ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (12 tests) 9ms
536
+ ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 52ms
537
+ ✓  node  test/sdk/redirects/index.test.ts (7 tests) 49ms
538
+ ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (5 tests) 146ms
539
+ ✓  node  test/utils/productJsonLd.test.ts (17 tests) 9ms
540
+ ✓  node  test/proxy.localization.test.ts (5 tests) 36ms
541
+ ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 16ms
542
+ ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 35ms
543
+ ✓  node  test/server/index.test.ts (7 tests) 827ms
544
+ ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (6 tests) 9ms
545
+ ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (8 tests) 112ms
546
+ ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 41ms
547
+ ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 43ms
548
+ ✓  node  test/server/webops-api.test.ts (9 tests) 19ms
549
+ ✓  node  test/proxy.test.ts (4 tests) 25ms
551
550
  ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 4ms
552
- ✓  node  test/server/cms/myAccountDefaultSections.test.ts (7 tests) 6ms
553
- ✓  node  test/server/content/service.test.ts (5 tests) 4ms
554
- ✓  node  test/utils/productJsonLdRendering.test.tsx (4 tests) 9ms
551
+ ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 15ms
552
+ ✓  node  test/server/cms/myAccountDefaultSections.test.ts (7 tests) 7ms
553
+ ✓  node  test/server/content/service.test.ts (5 tests) 5ms
554
+ ✓  node  test/utils/productJsonLdRendering.test.tsx (4 tests) 14ms
555
+ ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 8ms
555
556
  ✓  node  test/server/cms/global.test.ts (3 tests) 4ms
556
- ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 5ms
557
- ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 27ms
558
- ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (6 tests) 112ms
559
- ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 4ms
560
- ✓  node  test/server/rootSpan.test.ts (4 tests) 32ms
561
- ✓  node  test/pages/api/preview.test.ts (2 tests) 8ms
562
- ✓  node  test/components/search/SearchInput.test.ts (6 tests) 7ms
563
- ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 3ms
564
- ✓  node  test/components/account/Layout.test.tsx (6 tests) 58ms
557
+ ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 38ms
558
+ ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (6 tests) 153ms
559
+ ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 8ms
560
+ ✓  node  test/server/rootSpan.test.ts (4 tests) 44ms
561
+ ✓  node  test/pages/api/preview.test.ts (2 tests) 7ms
562
+ ✓  node  test/components/search/SearchInput.test.ts (6 tests) 8ms
563
+ ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 6ms
564
+ ✓  node  test/components/account/Layout.test.tsx (6 tests) 66ms
565
565
  ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 4ms
566
- ✓  node  test/server/cms/index.test.ts (2 tests) 4ms
567
- ✓  node  test/utils/retry.test.ts (5 tests) 12ms
568
- ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 3ms
569
- ✓  node  test/utils/unlockResponse.test.ts (11 tests) 3ms
566
+ ✓  node  test/utils/retry.test.ts (5 tests) 13ms
567
+ ✓  node  test/server/cms/index.test.ts (2 tests) 6ms
568
+ ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 5ms
569
+ ✓  node  test/utils/unlockResponse.test.ts (11 tests) 7ms
570
570
  ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 4ms
571
- ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 176ms
572
- ✓  node  test/utils/isLocalHost.test.ts (7 tests) 4ms
573
- ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 37ms
574
- ✓  node  test/utils/userOrderStatus.test.ts (3 tests) 3ms
575
- ✓  node  test/utils/getCookie.test.ts (4 tests) 4ms
576
- ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 3ms
577
- ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 32ms
578
- ✓  node  test/instrumentation.test.ts (3 tests) 3ms
579
- ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 6ms
580
- ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (2 tests) 19ms
571
+ ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 193ms
572
+ ✓  node  test/utils/isLocalHost.test.ts (7 tests) 6ms
573
+ ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 55ms
574
+ ✓  node  test/utils/userOrderStatus.test.ts (3 tests) 5ms
575
+ ✓  node  test/utils/getCookie.test.ts (4 tests) 6ms
576
+ ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 4ms
577
+ ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 30ms
578
+ ✓  node  test/instrumentation.test.ts (3 tests) 6ms
579
+ ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (2 tests) 27ms
580
+ ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 11ms
581
581
 
582
582
   Test Files  98 passed (98)
583
-  Tests  793 passed (793)
584
-  Start at  17:47:42
585
-  Duration  36.02s (transform 10.49s, setup 0ms, import 32.11s, tests 11.46s, environment 45.03s)
583
+  Tests  795 passed (795)
584
+  Start at  00:17:19
585
+  Duration  49.01s (transform 13.53s, setup 0ms, import 45.14s, tests 14.85s, environment 61.56s)
586
586
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
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
+ # [4.8.0](https://github.com/vtex/faststore/compare/v4.7.0...v4.8.0) (2026-09-15)
7
+
8
+ ### Features
9
+
10
+ - release 4.8.0 (graduate dev → main) ([#3488](https://github.com/vtex/faststore/issues/3488)) ([09ff84a](https://github.com/vtex/faststore/commit/09ff84aabe1f5a5a74fe52c191f37e5521dd8e9b)), closes [#3466](https://github.com/vtex/faststore/issues/3466) [#3481](https://github.com/vtex/faststore/issues/3481) [#3487](https://github.com/vtex/faststore/issues/3487) [#3453](https://github.com/vtex/faststore/issues/3453) [#3484](https://github.com/vtex/faststore/issues/3484) [#3482](https://github.com/vtex/faststore/issues/3482) [#3476](https://github.com/vtex/faststore/issues/3476) [#3477](https://github.com/vtex/faststore/issues/3477) [#3474](https://github.com/vtex/faststore/issues/3474) [#3422](https://github.com/vtex/faststore/issues/3422) [#3470](https://github.com/vtex/faststore/issues/3470)
11
+
12
+ # [4.8.0-dev.8](https://github.com/vtex/faststore/compare/v4.8.0-dev.7...v4.8.0-dev.8) (2026-09-14)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **core:** align the saved-cards list with the design reference ([#3487](https://github.com/vtex/faststore/issues/3487)) ([0e0d3ea](https://github.com/vtex/faststore/commit/0e0d3eacc23f5d2027ef5f933b03cd8a0338885c))
17
+
6
18
  # [4.8.0-dev.7](https://github.com/vtex/faststore/compare/v4.8.0-dev.6...v4.8.0-dev.7) (2026-09-14)
7
19
 
8
20
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "4.8.0-dev.7",
3
+ "version": "4.8.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -71,11 +71,11 @@
71
71
  "style-loader": "^3.3.1",
72
72
  "swr": "^2.2.5",
73
73
  "use-sync-external-store": "^1.6.0",
74
- "@faststore/api": "4.8.0-dev.7",
75
- "@faststore/diagnostics": "4.8.0-dev.7",
76
- "@faststore/ui": "4.8.0-dev.7",
77
- "@faststore/lighthouse": "4.8.0-dev.7",
78
- "@faststore/sdk": "4.8.0-dev.7"
74
+ "@faststore/api": "4.8.0",
75
+ "@faststore/diagnostics": "4.8.0",
76
+ "@faststore/sdk": "4.8.0",
77
+ "@faststore/ui": "4.8.0",
78
+ "@faststore/lighthouse": "4.8.0"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@cypress/code-coverage": "^3.12.1",
@@ -350,6 +350,7 @@ export default function MyAccountListCards({
350
350
  />
351
351
 
352
352
  <div
353
+ data-fs-list-cards-panel
353
354
  role={sharedOnly ? undefined : 'tabpanel'}
354
355
  id={sharedOnly ? undefined : PANEL_ID}
355
356
  aria-labelledby={sharedOnly ? undefined : activeTabId}
@@ -52,6 +52,16 @@
52
52
  color: var(--fs-text-link, #0632c1);
53
53
  }
54
54
 
55
+ // The tabpanel wrapper sits between .page and the controls/grid pair, so
56
+ // .page's column gap stops at this element and never separates the search
57
+ // row from the list below it. Carry the same rhythm down one level rather
58
+ // than dropping the wrapper, which owns the tabpanel role the tabs point at.
59
+ [data-fs-list-cards-panel] {
60
+ display: flex;
61
+ flex-direction: column;
62
+ gap: var(--fs-spacing-4, 1.5rem);
63
+ }
64
+
55
65
  [data-fs-list-cards-controls] {
56
66
  display: flex;
57
67
  flex-wrap: wrap;
@@ -84,14 +94,25 @@
84
94
 
85
95
  [data-fs-list-cards-item] {
86
96
  display: flex;
97
+
98
+ // Square tile, per the design reference: brand mark at the top, label and
99
+ // number at the bottom, with the slack between them. `aspect-ratio` sets
100
+ // the preferred box only — a long label still grows the card rather than
101
+ // overflowing it, since `min-height` stays `auto`.
87
102
  flex-direction: column;
88
103
  gap: var(--fs-spacing-1, 0.5rem);
104
+ aspect-ratio: 1;
89
105
  padding: var(--fs-spacing-2, 1rem);
90
106
  border: 1px solid var(--fs-border-color, #d9d9d9);
91
107
  border-radius: var(--fs-border-radius, 0.25rem);
92
108
  }
93
109
 
94
110
  [data-fs-list-cards-item-brand] {
111
+ // Pins the brand mark to the top edge and lets the label and number stay
112
+ // grouped at the bottom, as the design reference has them. `space-between`
113
+ // on the parent cannot express this: with three children it spreads all
114
+ // three evenly and strands the label in the middle of the tile.
115
+ margin-bottom: auto;
95
116
  font-size: 0.875rem;
96
117
  font-weight: 700;
97
118
  }
@@ -298,4 +298,42 @@ describe('MyAccountListCards', () => {
298
298
  fireEvent.click(screen.getByRole('button', { name: 'Try again' }))
299
299
  expect(mockReload).toHaveBeenCalledTimes(1)
300
300
  })
301
+
302
+ // Regression guard for the search/list spacing fix. The stylesheet hangs the
303
+ // column gap off this attribute because .page's own gap stops at this
304
+ // wrapper and never separates the controls row from the list below it.
305
+ // Dropping the attribute collapses that gap back to zero, silently.
306
+ it('marks the panel wrapper that carries the spacing between controls and list', () => {
307
+ const { container } = render(
308
+ <MyAccountListCards
309
+ personalCards={[VISA_PERSONAL]}
310
+ sharedCards={[AMEX_SHARED]}
311
+ hasOrgAssociation
312
+ canViewPersonalCards
313
+ />
314
+ )
315
+
316
+ const panel = container.querySelector('[data-fs-list-cards-panel]')
317
+
318
+ expect(panel).not.toBeNull()
319
+ expect(panel).toHaveAttribute('role', 'tabpanel')
320
+ expect(panel?.querySelector('[data-fs-list-cards-controls]')).not.toBeNull()
321
+ expect(panel?.querySelector('[data-fs-list-cards-grid]')).not.toBeNull()
322
+ })
323
+
324
+ it('keeps the panel marker in the shared-only rendering, which has no tabpanel role', () => {
325
+ const { container } = render(
326
+ <MyAccountListCards
327
+ personalCards={[]}
328
+ sharedCards={[AMEX_SHARED]}
329
+ hasOrgAssociation
330
+ canViewPersonalCards={false}
331
+ />
332
+ )
333
+
334
+ const panel = container.querySelector('[data-fs-list-cards-panel]')
335
+
336
+ expect(panel).not.toBeNull()
337
+ expect(panel).not.toHaveAttribute('role')
338
+ })
301
339
  })