@dropins/storefront-cart 1.4.1-alpha003 → 1.4.1-alpha006

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 (51) hide show
  1. package/api/addProductsToCart/addProductsToCart.d.ts +1 -0
  2. package/api/updateProductsFromCart/updateProductsFromCart.d.ts +1 -0
  3. package/api.js +1 -9
  4. package/api.js.map +1 -1
  5. package/chunks/CartSummaryGrid.js +1 -1
  6. package/chunks/CartSummaryGrid.js.map +1 -1
  7. package/chunks/CartSummaryList.js +1 -1
  8. package/chunks/CartSummaryList.js.map +1 -1
  9. package/chunks/CartSummaryTable2.js +1 -1
  10. package/chunks/CartSummaryTable2.js.map +1 -1
  11. package/chunks/Close.js +4 -0
  12. package/chunks/Close.js.map +1 -0
  13. package/chunks/Coupons.js +1 -1
  14. package/chunks/Coupons.js.map +1 -1
  15. package/chunks/EmptyCart.js +1 -1
  16. package/chunks/EmptyCart.js.map +1 -1
  17. package/chunks/EmptyCart2.js +4 -0
  18. package/chunks/EmptyCart2.js.map +1 -0
  19. package/chunks/OrderSummary.js +1 -1
  20. package/chunks/acdl.js +1 -1
  21. package/chunks/acdl.js.map +1 -1
  22. package/chunks/createGuestCart.js +12 -0
  23. package/chunks/createGuestCart.js.map +1 -0
  24. package/chunks/getEstimateShipping.js +1 -1
  25. package/chunks/refreshCart.js +8 -8
  26. package/chunks/refreshCart.js.map +1 -1
  27. package/chunks/removeGiftCardFromCart.js +1 -1
  28. package/chunks/setGiftOptionsOnCart.js +1 -1
  29. package/chunks/updateProductsFromCart.js +3 -3
  30. package/chunks/updateProductsFromCart.js.map +1 -1
  31. package/components/CartSummaryTable/CartSummaryTable.d.ts +2 -0
  32. package/containers/CartSummaryGrid.js +1 -1
  33. package/containers/CartSummaryList/CartSummaryList.d.ts +21 -0
  34. package/containers/CartSummaryList.js +1 -1
  35. package/containers/CartSummaryTable/CartSummaryTable.d.ts +71 -0
  36. package/containers/CartSummaryTable.js +1 -1
  37. package/containers/Coupons.js +1 -1
  38. package/containers/Coupons.js.map +1 -1
  39. package/containers/EmptyCart.js +1 -1
  40. package/containers/EmptyCart.js.map +1 -1
  41. package/containers/EstimateShipping.js +1 -1
  42. package/containers/GiftCards.js +1 -1
  43. package/containers/GiftCards.js.map +1 -1
  44. package/containers/MiniCart.js +1 -1
  45. package/containers/MiniCart.js.map +1 -1
  46. package/data/models/cart-model.d.ts +1 -0
  47. package/i18n/en_US.json.d.ts +6 -1
  48. package/lib/acdl.d.ts +1 -0
  49. package/package.json +1 -1
  50. package/render.js +2 -2
  51. package/render.js.map +1 -1
@@ -9,5 +9,6 @@ export declare const addProductsToCart: (items: {
9
9
  uid: string;
10
10
  value: string;
11
11
  }[];
12
+ customFields?: Record<string, any>;
12
13
  }[]) => Promise<CartModel | null>;
13
14
  //# sourceMappingURL=addProductsToCart.d.ts.map
@@ -18,6 +18,7 @@ type UpdateProductsFromCart = Array<{
18
18
  message: string;
19
19
  };
20
20
  };
21
+ customFields?: Record<string, any>;
21
22
  }>;
22
23
  export declare const updateProductsFromCart: (items: UpdateProductsFromCart) => Promise<CartModel | null>;
23
24
  export {};
package/api.js CHANGED
@@ -1,12 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{s as p,f as g,h as E}from"./chunks/resetCart.js";import{g as q,r as z,d as V,a as L,b as $,c as j}from"./chunks/resetCart.js";import{t as G,c as I}from"./chunks/refreshCart.js";import{g as J,b as K,d as W,e as X,i as Y,a as Z,r as tt}from"./chunks/refreshCart.js";import{events as C}from"@dropins/tools/event-bus.js";import{g as h}from"./chunks/persisted-data.js";import{A as S}from"./chunks/updateProductsFromCart.js";import{u as rt}from"./chunks/updateProductsFromCart.js";import{b as A,a as _,c as b}from"./chunks/acdl.js";import{g as st,b as ot,a as it}from"./chunks/getEstimateShipping.js";import{g as pt}from"./chunks/getEstimatedTotals.js";import{A as mt,a as ut}from"./chunks/applyCouponsToCart.js";import{a as Ct,r as lt}from"./chunks/removeGiftCardFromCart.js";import{s as gt}from"./chunks/setGiftOptionsOnCart.js";import"@dropins/tools/fetch-graphql.js";import"@dropins/tools/lib.js";import"./fragments.js";const N=async r=>{let e=!1;const c=p.cartId||await U().then(o=>(e=!0,o));return g(S,{variables:{cartId:c,cartItems:r.map(({sku:o,parentSku:a,quantity:m,optionsUIDs:t,enteredOptions:i})=>({sku:o,parent_sku:a,quantity:m,selected_options:t,entered_options:i}))}}).then(({errors:o,data:a})=>{var f;const m=[...((f=a==null?void 0:a.addProductsToCart)==null?void 0:f.user_errors)??[],...o??[]];if(m.length>0)return E(m);const t=G(a.addProductsToCart.cart),i=h(),l=(i==null?void 0:i.items)||[];if(C.emit("cart/updated",t),C.emit("cart/data",t),t){const n=t.items.filter(s=>!l.some(d=>d.sku===s.sku)),u=t.items.filter(s=>{const d=l.find(T=>T.sku===s.sku);return d&&s.quantity!==d.quantity});n.length>0&&C.emit("cart/product/added",n),u.length>0&&C.emit("cart/product/updated",u)}if(t){const n=t.items.filter(u=>r.some(({sku:s})=>s===u.topLevelSku));e?A(t,n,p.locale??"en-US"):_(t,n,p.locale??"en-US")}return t})},y=`
4
- mutation CREATE_GUEST_CART_MUTATION {
5
- createGuestCart {
6
- cart {
7
- id
8
- }
9
- }
10
- }
11
- `,U=async()=>{const{disableGuestCart:r}=I.getConfig();if(r)throw new Error("Guest cart is disabled");return await g(y).then(({data:e})=>{const c=e.createGuestCart.cart.id;return p.cartId=c,c})},Q=()=>{const r=p.locale??"en-US",e=h();e&&b(e,r)};export{mt as ApplyCouponsStrategy,N as addProductsToCart,ut as applyCouponsToCart,Ct as applyGiftCardToCart,I as config,U as createGuestCart,g as fetchGraphQl,J as getCartData,h as getCartDataFromCache,q as getConfig,st as getCountries,K as getCustomerCartPayload,ot as getEstimateShipping,pt as getEstimatedTotals,W as getGuestCartPayload,it as getRegions,X as getStoreConfig,Y as initialize,Z as initializeCart,Q as publishShoppingCartViewEvent,tt as refreshCart,z as removeFetchGraphQlHeader,lt as removeGiftCardFromCart,V as resetCart,L as setEndpoint,$ as setFetchGraphQlHeader,j as setFetchGraphQlHeaders,gt as setGiftOptionsOnCart,rt as updateProductsFromCart};
3
+ import{a as d,c as h}from"./chunks/createGuestCart.js";import{c as x,g as G,b as y,d as F,e as S,i as b,a as E,r as P}from"./chunks/refreshCart.js";import{u as D}from"./chunks/updateProductsFromCart.js";import{s as r}from"./chunks/resetCart.js";import{f as T,g as H,r as w,d as z,a as A,b as O,c as V}from"./chunks/resetCart.js";import{a as U,g as $,b as j}from"./chunks/getEstimateShipping.js";import{g as q}from"./chunks/getEstimatedTotals.js";import{g as e}from"./chunks/persisted-data.js";import{A as I,a as J}from"./chunks/applyCouponsToCart.js";import{p as o}from"./chunks/acdl.js";import{a as L,r as M}from"./chunks/removeGiftCardFromCart.js";import{s as W}from"./chunks/setGiftOptionsOnCart.js";import"@dropins/tools/event-bus.js";import"@dropins/tools/lib.js";import"./fragments.js";import"@dropins/tools/fetch-graphql.js";const f=()=>{const t=r.locale??"en-US",a=e();a&&o(a,t)};export{I as ApplyCouponsStrategy,d as addProductsToCart,J as applyCouponsToCart,L as applyGiftCardToCart,x as config,h as createGuestCart,T as fetchGraphQl,G as getCartData,e as getCartDataFromCache,H as getConfig,U as getCountries,y as getCustomerCartPayload,$ as getEstimateShipping,q as getEstimatedTotals,F as getGuestCartPayload,j as getRegions,S as getStoreConfig,b as initialize,E as initializeCart,f as publishShoppingCartViewEvent,P as refreshCart,w as removeFetchGraphQlHeader,M as removeGiftCardFromCart,z as resetCart,A as setEndpoint,O as setFetchGraphQlHeader,V as setFetchGraphQlHeaders,W as setGiftOptionsOnCart,D as updateProductsFromCart};
12
4
  //# sourceMappingURL=api.js.map
package/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sources":["/@dropins/storefront-cart/src/api/addProductsToCart/addProductsToCart.ts","/@dropins/storefront-cart/src/api/createGuestCart/graphql/CreateCartMutation.ts","/@dropins/storefront-cart/src/api/createGuestCart/createGuestCart.ts","/@dropins/storefront-cart/src/api/publishShoppingCartViewEvent/publishShoppingCartViewEvent.ts"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { fetchGraphQl, createGuestCart } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\nimport { CartModel } from '@/cart/data/models';\nimport { transformCart } from '@/cart/data/transforms';\nimport { events } from '@adobe-commerce/event-bus';\nimport { handleFetchError } from '@/cart/lib/fetch-error';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nimport { ADD_PRODUCTS_TO_CART_MUTATION } from './graphql/AddProductsToCartMutation';\nimport { publishCartUpdateEvents, publishOpenCartEvent } from '@/cart/lib/acdl';\n\nexport const addProductsToCart = async (\n items: {\n sku: string;\n parentSku?: string;\n quantity: number;\n optionsUIDs?: string[];\n enteredOptions?: { uid: string; value: string }[];\n }[]\n): Promise<CartModel | null> => {\n let isNewCart = false;\n\n const cartId =\n state.cartId ||\n (await createGuestCart().then((id) => {\n isNewCart = true;\n return id;\n }));\n\n return fetchGraphQl(ADD_PRODUCTS_TO_CART_MUTATION, {\n variables: {\n cartId,\n cartItems: items.map(\n ({\n sku,\n parentSku: parent_sku,\n quantity,\n optionsUIDs: selected_options,\n enteredOptions: entered_options,\n }) => ({\n sku,\n parent_sku,\n quantity,\n selected_options,\n entered_options,\n })\n ),\n },\n }).then(({ errors, data }) => {\n // handle errors\n const _errors = [\n ...(data?.addProductsToCart?.user_errors ?? []),\n ...(errors ?? []),\n ];\n\n if (_errors.length > 0) return handleFetchError(_errors);\n\n // transform cart\n const payload = transformCart(data.addProductsToCart.cart);\n\n // Get previous cart data before emitting events\n const previousCart = getPersistedCartData();\n const previousItems = previousCart?.items || [];\n\n // emit events\n events.emit('cart/updated', payload);\n events.emit('cart/data', payload);\n\n // emit add to cart event with affected items\n if (payload) {\n // Separate new items and updated items\n const newItems = payload.items.filter((item) => {\n return !previousItems.some((prev) => prev.sku === item.sku);\n });\n\n const updatedItems = payload.items.filter((item) => {\n const previousItem = previousItems.find(\n (prev) => prev.sku === item.sku\n );\n // Emit update event if quantity has changed\n return previousItem && item.quantity !== previousItem.quantity;\n });\n\n // Emit add event for new items\n if (newItems.length > 0) {\n events.emit('cart/product/added', newItems);\n }\n\n // Emit update event for existing items\n if (updatedItems.length > 0) {\n events.emit('cart/product/updated', updatedItems);\n }\n }\n\n // data collection\n if (payload) {\n const updatedItems = payload.items.filter((item) =>\n items.some(({ sku }) => sku === item.topLevelSku)\n );\n if (isNewCart) {\n // Publish open cart event when the first item is added to the cart\n publishOpenCartEvent(payload, updatedItems, state.locale ?? 'en-US');\n } else {\n // Otherwise publish cart update events\n publishCartUpdateEvents(payload, updatedItems, state.locale ?? 'en-US');\n }\n }\n\n return payload;\n });\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nexport const CREATE_GUEST_CART_MUTATION = `\n mutation CREATE_GUEST_CART_MUTATION {\n createGuestCart {\n cart {\n id\n }\n }\n }\n`;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { config, fetchGraphQl } from '@/cart/api';\nimport { state } from '@/cart/lib/state';\n\nimport { CREATE_GUEST_CART_MUTATION } from './graphql/CreateCartMutation';\n\nexport const createGuestCart = async () => {\n const { disableGuestCart } = config.getConfig();\n\n // If guest cart is disabled, throw an error\n if (disableGuestCart) {\n throw new Error('Guest cart is disabled');\n }\n\n // Return new empty cart id\n return await fetchGraphQl(CREATE_GUEST_CART_MUTATION).then(({ data }) => {\n const cartId = data.createGuestCart.cart.id;\n\n // Set cart id in state\n state.cartId = cartId;\n\n return cartId;\n });\n};\n","import { getPersistedCartData } from \"@/cart/lib/persisted-data\";\nimport { publishShoppingCartViewEvent as publishCartView } from \"@/cart/lib/acdl\";\nimport { state } from \"@/cart/lib/state\";\n\nexport const publishShoppingCartViewEvent = () => { \n const locale = state.locale ?? 'en-US';\n const cartData = getPersistedCartData();\n\n if (!cartData) {\n return;\n }\n\n // Publish the event\n publishCartView(cartData, locale);\n}\n"],"names":["addProductsToCart","items","isNewCart","cartId","state","createGuestCart","id","fetchGraphQl","ADD_PRODUCTS_TO_CART_MUTATION","sku","parent_sku","quantity","selected_options","entered_options","errors","data","_errors","_a","handleFetchError","payload","transformCart","previousCart","getPersistedCartData","previousItems","events","newItems","item","prev","updatedItems","previousItem","publishOpenCartEvent","publishCartUpdateEvents","CREATE_GUEST_CART_MUTATION","disableGuestCart","config","publishShoppingCartViewEvent","locale","cartData","publishCartView"],"mappings":"65BA4Ba,MAAAA,EAAoB,MAC/BC,GAO8B,CAC9B,IAAIC,EAAY,GAEV,MAAAC,EACJC,EAAM,QACL,MAAMC,IAAkB,KAAMC,IACjBJ,EAAA,GACLI,EACR,EAEH,OAAOC,EAAaC,EAA+B,CACjD,UAAW,CACT,OAAAL,EACA,UAAWF,EAAM,IACf,CAAC,CACC,IAAAQ,EACA,UAAWC,EACX,SAAAC,EACA,YAAaC,EACb,eAAgBC,CAAA,KACX,CACL,IAAAJ,EACA,WAAAC,EACA,SAAAC,EACA,iBAAAC,EACA,gBAAAC,CACF,EAAA,CACF,CAEH,CAAA,EAAE,KAAK,CAAC,CAAE,OAAAC,EAAQ,KAAAC,KAAW,OAE5B,MAAMC,EAAU,CACd,KAAIC,EAAAF,GAAA,YAAAA,EAAM,oBAAN,YAAAE,EAAyB,cAAe,CAAC,EAC7C,GAAIH,GAAU,CAAA,CAChB,EAEA,GAAIE,EAAQ,OAAS,EAAG,OAAOE,EAAiBF,CAAO,EAGvD,MAAMG,EAAUC,EAAcL,EAAK,kBAAkB,IAAI,EAGnDM,EAAeC,EAAqB,EACpCC,GAAgBF,GAAA,YAAAA,EAAc,QAAS,CAAC,EAO9C,GAJOG,EAAA,KAAK,eAAgBL,CAAO,EAC5BK,EAAA,KAAK,YAAaL,CAAO,EAG5BA,EAAS,CAEX,MAAMM,EAAWN,EAAQ,MAAM,OAAQO,GAC9B,CAACH,EAAc,KAAMI,GAASA,EAAK,MAAQD,EAAK,GAAG,CAC3D,EAEKE,EAAeT,EAAQ,MAAM,OAAQO,GAAS,CAClD,MAAMG,EAAeN,EAAc,KAChCI,GAASA,EAAK,MAAQD,EAAK,GAC9B,EAEO,OAAAG,GAAgBH,EAAK,WAAaG,EAAa,QAAA,CACvD,EAGGJ,EAAS,OAAS,GACbD,EAAA,KAAK,qBAAsBC,CAAQ,EAIxCG,EAAa,OAAS,GACjBJ,EAAA,KAAK,uBAAwBI,CAAY,CAClD,CAIF,GAAIT,EAAS,CACL,MAAAS,EAAeT,EAAQ,MAAM,OAAQO,GACzCzB,EAAM,KAAK,CAAC,CAAE,IAAAQ,KAAUA,IAAQiB,EAAK,WAAW,CAClD,EACIxB,EAEF4B,EAAqBX,EAASS,EAAcxB,EAAM,QAAU,OAAO,EAGnE2B,EAAwBZ,EAASS,EAAcxB,EAAM,QAAU,OAAO,CACxE,CAGK,OAAAe,CAAA,CACR,CACH,EC9Gaa,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECK7B3B,EAAkB,SAAY,CACzC,KAAM,CAAE,iBAAA4B,CAAA,EAAqBC,EAAO,UAAU,EAG9C,GAAID,EACI,MAAA,IAAI,MAAM,wBAAwB,EAInC,OAAA,MAAM1B,EAAayB,CAA0B,EAAE,KAAK,CAAC,CAAE,KAAAjB,KAAW,CACjE,MAAAZ,EAASY,EAAK,gBAAgB,KAAK,GAGzC,OAAAX,EAAM,OAASD,EAERA,CAAA,CACR,CACH,ECnCagC,EAA+B,IAAM,CAC1C,MAAAC,EAAShC,EAAM,QAAU,QACzBiC,EAAWf,EAAqB,EAEjCe,GAKLC,EAAgBD,EAAUD,CAAM,CAClC"}
1
+ {"version":3,"file":"api.js","sources":["/@dropins/storefront-cart/src/api/publishShoppingCartViewEvent/publishShoppingCartViewEvent.ts"],"sourcesContent":["import { getPersistedCartData } from \"@/cart/lib/persisted-data\";\nimport { publishShoppingCartViewEvent as publishCartView } from \"@/cart/lib/acdl\";\nimport { state } from \"@/cart/lib/state\";\n\nexport const publishShoppingCartViewEvent = () => { \n const locale = state.locale ?? 'en-US';\n const cartData = getPersistedCartData();\n\n if (!cartData) {\n return;\n }\n\n // Publish the event\n publishCartView(cartData, locale);\n}\n"],"names":["publishShoppingCartViewEvent","locale","state","cartData","getPersistedCartData","publishCartView"],"mappings":"g0BAIO,MAAMA,EAA+B,IAAM,CAC1C,MAAAC,EAASC,EAAM,QAAU,QACzBC,EAAWC,EAAqB,EAEjCD,GAKLE,EAAgBF,EAAUF,CAAM,CAClC"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as a,Fragment as g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as _,useEffect as C}from"@dropins/tools/preact-compat.js";import{E as b}from"./EmptyCart.js";import{classes as l,VComponent as v,Slot as I}from"@dropins/tools/lib.js";/* empty css */import{Image as N}from"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import{events as S}from"@dropins/tools/event-bus.js";import{g as j}from"./persisted-data.js";const D=({className:c,children:i,emptyCart:m,products:e,...n})=>a("div",{...n,className:l(["cart-cart-summary-grid",c]),children:a(g,{children:a("div",{className:l(["cart-cart-summary-grid__content",["cart-cart-summary-grid__content--empty",!e]]),children:e||a(v,{node:m,className:"cart-cart-summary-grid__empty-cart"})})})}),L=({children:c,initialData:i=null,routeProduct:m,routeEmptyCartCTA:e,slots:n,...p})=>{const[o,u]=_(i);C(()=>{const r=S.on("cart/data",t=>{u(t)},{eager:!0});return()=>{r==null||r.off()}},[]);const f=(r,t)=>{const y=r.selectedOptions?`${r.name}: ${Object.entries(r.selectedOptions).join("; ")}`:r.name,s={loading:t<4?"eager":"lazy",src:r.image.src,alt:r.image.alt},d=a(N,{"data-testid":"cart-grid-item-image","aria-label":y,width:"100%",...s});return a("div",{className:"cart-cart-summary-grid__item-container",children:a(I,{name:"Thumbnail",slot:n==null?void 0:n.Thumbnail,context:{item:r,defaultImageProps:s},children:m?a("a",{href:m(r),children:d}):d})},t)},h=o&&a(g,{children:o.items.map((r,t)=>f(r,t))});return a(D,{...p,emptyCart:a(b,{ctaLinkURL:e?e():void 0}),products:h})};L.getInitialData=async function(){return j()};export{L as C};
3
+ import{jsx as a,Fragment as g}from"@dropins/tools/preact-jsx-runtime.js";import{useState as _,useEffect as C}from"@dropins/tools/preact-compat.js";import{E as b}from"./EmptyCart2.js";import{classes as l,VComponent as v,Slot as I}from"@dropins/tools/lib.js";/* empty css */import{Image as N}from"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import{events as S}from"@dropins/tools/event-bus.js";import{g as j}from"./persisted-data.js";const D=({className:c,children:i,emptyCart:m,products:e,...n})=>a("div",{...n,className:l(["cart-cart-summary-grid",c]),children:a(g,{children:a("div",{className:l(["cart-cart-summary-grid__content",["cart-cart-summary-grid__content--empty",!e]]),children:e||a(v,{node:m,className:"cart-cart-summary-grid__empty-cart"})})})}),L=({children:c,initialData:i=null,routeProduct:m,routeEmptyCartCTA:e,slots:n,...p})=>{const[o,u]=_(i);C(()=>{const r=S.on("cart/data",t=>{u(t)},{eager:!0});return()=>{r==null||r.off()}},[]);const f=(r,t)=>{const y=r.selectedOptions?`${r.name}: ${Object.entries(r.selectedOptions).join("; ")}`:r.name,s={loading:t<4?"eager":"lazy",src:r.image.src,alt:r.image.alt},d=a(N,{"data-testid":"cart-grid-item-image","aria-label":y,width:"100%",...s});return a("div",{className:"cart-cart-summary-grid__item-container",children:a(I,{name:"Thumbnail",slot:n==null?void 0:n.Thumbnail,context:{item:r,defaultImageProps:s},children:m?a("a",{href:m(r),children:d}):d})},t)},h=o&&a(g,{children:o.items.map((r,t)=>f(r,t))});return a(D,{...p,emptyCart:a(b,{ctaLinkURL:e?e():void 0}),products:h})};L.getInitialData=async function(){return j()};export{L as C};
4
4
  //# sourceMappingURL=CartSummaryGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CartSummaryGrid.js","sources":["/@dropins/storefront-cart/src/components/CartSummaryGrid/CartSummaryGrid.tsx","/@dropins/storefront-cart/src/containers/CartSummaryGrid/CartSummaryGrid.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport '@/cart/components/CartSummaryGrid/CartSummaryGrid.css';\nexport interface CartSummaryGridProps extends HTMLAttributes<HTMLDivElement> {\n products?: VNode | null;\n emptyCart: VNode;\n}\n\nexport const CartSummaryGrid: FunctionComponent<CartSummaryGridProps> = ({\n className,\n children,\n emptyCart,\n products,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['cart-cart-summary-grid', className])}>\n <>\n <div\n className={classes([\n 'cart-cart-summary-grid__content',\n ['cart-cart-summary-grid__content--empty', !products],\n ])}\n >\n {products || (\n <VComponent\n node={emptyCart}\n className=\"cart-cart-summary-grid__empty-cart\"\n />\n )}\n </div>\n </>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport {\n CartSummaryGrid as CartSummaryGridComponent,\n EmptyCart,\n} from '@/cart/components';\nimport { CartModel } from '@/cart/data/models';\nimport { VNode } from 'preact';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Image, ImageProps } from '@adobe-commerce/elsie/components';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nexport interface CartSummaryGridProps extends HTMLAttributes<HTMLDivElement> {\n routeProduct?: (item: CartModel['items'][0]) => string;\n routeEmptyCartCTA?: () => string;\n slots?: {\n Thumbnail?: SlotProps<{ \n item: CartModel['items'][number], \n defaultImageProps: ImageProps \n }>;\n };\n}\n\nexport const CartSummaryGrid: Container<\n CartSummaryGridProps,\n CartModel | null\n> = ({\n children,\n initialData = null,\n routeProduct,\n routeEmptyCartCTA,\n slots,\n ...props\n}) => {\n const [data, setData] = useState<CartModel | null>(initialData);\n\n useEffect(() => {\n const dataEvent = events.on(\n 'cart/data',\n (payload) => {\n setData(payload as CartModel);\n },\n { eager: true }\n );\n return () => {\n dataEvent?.off();\n };\n }, []);\n\n const getImage = (item: CartModel['items'][0], index: number) => {\n const handleAriaLabel = item.selectedOptions\n ? `${item.name}: ${Object.entries(item.selectedOptions).join('; ')}`\n : item.name;\n\n const defaultImageProps: ImageProps = {\n loading: index < 4 ? 'eager' : 'lazy',\n src: item.image.src,\n alt: item.image.alt,\n };\n\n const imageComponent = (\n <Image\n data-testid=\"cart-grid-item-image\"\n aria-label={handleAriaLabel}\n width={'100%'}\n {...defaultImageProps}\n />\n );\n\n return (\n <div className=\"cart-cart-summary-grid__item-container\" key={index}>\n <Slot name=\"Thumbnail\" slot={slots?.Thumbnail} context={{ item, defaultImageProps }}>\n {routeProduct ? (\n <a href={routeProduct(item)}>{imageComponent}</a>\n ) : (\n imageComponent\n )}\n </Slot>\n </div>\n );\n };\n\n const products =\n data &&\n ((\n <>\n {data.items.map((item, index) => {\n return getImage(item, index) as VNode;\n })}\n </>\n ) as VNode | null);\n\n return (\n <CartSummaryGridComponent\n {...props}\n emptyCart={\n <EmptyCart\n ctaLinkURL={routeEmptyCartCTA ? routeEmptyCartCTA() : undefined}\n />\n }\n products={products}\n />\n );\n};\n\nCartSummaryGrid.getInitialData = async function () {\n return getPersistedCartData();\n};\n"],"names":["CartSummaryGrid","className","children","emptyCart","products","props","jsx","classes","Fragment","VComponent","initialData","routeProduct","routeEmptyCartCTA","slots","data","setData","useState","useEffect","dataEvent","events","payload","getImage","item","index","handleAriaLabel","defaultImageProps","imageComponent","Image","Slot","CartSummaryGridComponent","EmptyCart","getPersistedCartData"],"mappings":"udA0BO,MAAMA,EAA2D,CAAC,CACvE,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAEIC,EAAC,MAAK,CAAA,GAAGD,EAAO,UAAWE,EAAQ,CAAC,yBAA0BN,CAAS,CAAC,EACtE,SACEK,EAAAE,EAAA,CAAA,SAAAF,EAAC,MAAA,CACC,UAAWC,EAAQ,CACjB,kCACA,CAAC,yCAA0C,CAACH,CAAQ,CAAA,CACrD,EAEA,SACCA,GAAAE,EAACG,EAAA,CACC,KAAMN,EACN,UAAU,oCAAA,CAAA,CACZ,GAGN,CACF,CAAA,ECVSH,EAGT,CAAC,CACH,SAAAE,EACA,YAAAQ,EAAc,KACd,aAAAC,EACA,kBAAAC,EACA,MAAAC,EACA,GAAGR,CACL,IAAM,CACJ,KAAM,CAACS,EAAMC,CAAO,EAAIC,EAA2BN,CAAW,EAE9DO,EAAU,IAAM,CACd,MAAMC,EAAYC,EAAO,GACvB,YACCC,GAAY,CACXL,EAAQK,CAAoB,CAC9B,EACA,CAAE,MAAO,EAAK,CAChB,EACA,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAW,KACb,CACF,EAAG,EAAE,EAEC,MAAAG,EAAW,CAACC,EAA6BC,IAAkB,CAC/D,MAAMC,EAAkBF,EAAK,gBACzB,GAAGA,EAAK,IAAI,KAAK,OAAO,QAAQA,EAAK,eAAe,EAAE,KAAK,IAAI,CAAC,GAChEA,EAAK,KAEHG,EAAgC,CACpC,QAASF,EAAQ,EAAI,QAAU,OAC/B,IAAKD,EAAK,MAAM,IAChB,IAAKA,EAAK,MAAM,GAClB,EAEMI,EACJpB,EAACqB,EAAA,CACC,cAAY,uBACZ,aAAYH,EACZ,MAAO,OACN,GAAGC,CAAA,CACN,EAIA,OAAAnB,EAAC,MAAI,CAAA,UAAU,yCACb,SAAAA,EAACsB,EAAK,CAAA,KAAK,YAAY,KAAMf,GAAA,YAAAA,EAAO,UAAW,QAAS,CAAE,KAAAS,EAAM,kBAAAG,CAC7D,EAAA,SAAAd,EACIL,EAAA,IAAA,CAAE,KAAMK,EAAaW,CAAI,EAAI,SAAeI,CAAA,CAAA,EAE7CA,CAEN,CAAA,CAAA,EAP2DH,CAQ7D,CAEJ,EAEMnB,EACJU,GAGKR,EAAAE,EAAA,CAAA,SAAAM,EAAK,MAAM,IAAI,CAACQ,EAAMC,IACdF,EAASC,EAAMC,CAAK,CAC5B,EACH,EAIF,OAAAjB,EAACuB,EAAA,CACE,GAAGxB,EACJ,UACEC,EAACwB,EAAA,CACC,WAAYlB,EAAoBA,IAAsB,MAAA,CACxD,EAEF,SAAAR,CAAA,CACF,CAEJ,EAEAJ,EAAgB,eAAiB,gBAAkB,CACjD,OAAO+B,EAAqB,CAC9B"}
1
+ {"version":3,"file":"CartSummaryGrid.js","sources":["/@dropins/storefront-cart/src/components/CartSummaryGrid/CartSummaryGrid.tsx","/@dropins/storefront-cart/src/containers/CartSummaryGrid/CartSummaryGrid.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { VComponent, classes } from '@adobe-commerce/elsie/lib';\nimport '@/cart/components/CartSummaryGrid/CartSummaryGrid.css';\nexport interface CartSummaryGridProps extends HTMLAttributes<HTMLDivElement> {\n products?: VNode | null;\n emptyCart: VNode;\n}\n\nexport const CartSummaryGrid: FunctionComponent<CartSummaryGridProps> = ({\n className,\n children,\n emptyCart,\n products,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['cart-cart-summary-grid', className])}>\n <>\n <div\n className={classes([\n 'cart-cart-summary-grid__content',\n ['cart-cart-summary-grid__content--empty', !products],\n ])}\n >\n {products || (\n <VComponent\n node={emptyCart}\n className=\"cart-cart-summary-grid__empty-cart\"\n />\n )}\n </div>\n </>\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useEffect, useState } from 'preact/compat';\nimport {\n CartSummaryGrid as CartSummaryGridComponent,\n EmptyCart,\n} from '@/cart/components';\nimport { CartModel } from '@/cart/data/models';\nimport { VNode } from 'preact';\nimport { Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Image, ImageProps } from '@adobe-commerce/elsie/components';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nexport interface CartSummaryGridProps extends HTMLAttributes<HTMLDivElement> {\n routeProduct?: (item: CartModel['items'][0]) => string;\n routeEmptyCartCTA?: () => string;\n slots?: {\n Thumbnail?: SlotProps<{ \n item: CartModel['items'][number], \n defaultImageProps: ImageProps \n }>;\n };\n}\n\nexport const CartSummaryGrid: Container<\n CartSummaryGridProps,\n CartModel | null\n> = ({\n children,\n initialData = null,\n routeProduct,\n routeEmptyCartCTA,\n slots,\n ...props\n}) => {\n const [data, setData] = useState<CartModel | null>(initialData);\n\n useEffect(() => {\n const dataEvent = events.on(\n 'cart/data',\n (payload) => {\n setData(payload as CartModel);\n },\n { eager: true }\n );\n return () => {\n dataEvent?.off();\n };\n }, []);\n\n const getImage = (item: CartModel['items'][0], index: number) => {\n const handleAriaLabel = item.selectedOptions\n ? `${item.name}: ${Object.entries(item.selectedOptions).join('; ')}`\n : item.name;\n\n const defaultImageProps: ImageProps = {\n loading: index < 4 ? 'eager' : 'lazy',\n src: item.image.src,\n alt: item.image.alt,\n };\n\n const imageComponent = (\n <Image\n data-testid=\"cart-grid-item-image\"\n aria-label={handleAriaLabel}\n width={'100%'}\n {...defaultImageProps}\n />\n );\n\n return (\n <div className=\"cart-cart-summary-grid__item-container\" key={index}>\n <Slot name=\"Thumbnail\" slot={slots?.Thumbnail} context={{ item, defaultImageProps }}>\n {routeProduct ? (\n <a href={routeProduct(item)}>{imageComponent}</a>\n ) : (\n imageComponent\n )}\n </Slot>\n </div>\n );\n };\n\n const products =\n data &&\n ((\n <>\n {data.items.map((item, index) => {\n return getImage(item, index) as VNode;\n })}\n </>\n ) as VNode | null);\n\n return (\n <CartSummaryGridComponent\n {...props}\n emptyCart={\n <EmptyCart\n ctaLinkURL={routeEmptyCartCTA ? routeEmptyCartCTA() : undefined}\n />\n }\n products={products}\n />\n );\n};\n\nCartSummaryGrid.getInitialData = async function () {\n return getPersistedCartData();\n};\n"],"names":["CartSummaryGrid","className","children","emptyCart","products","props","jsx","classes","Fragment","VComponent","initialData","routeProduct","routeEmptyCartCTA","slots","data","setData","useState","useEffect","dataEvent","events","payload","getImage","item","index","handleAriaLabel","defaultImageProps","imageComponent","Image","Slot","CartSummaryGridComponent","EmptyCart","getPersistedCartData"],"mappings":"wdA0BO,MAAMA,EAA2D,CAAC,CACvE,UAAAC,EACA,SAAAC,EACA,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAEIC,EAAC,MAAK,CAAA,GAAGD,EAAO,UAAWE,EAAQ,CAAC,yBAA0BN,CAAS,CAAC,EACtE,SACEK,EAAAE,EAAA,CAAA,SAAAF,EAAC,MAAA,CACC,UAAWC,EAAQ,CACjB,kCACA,CAAC,yCAA0C,CAACH,CAAQ,CAAA,CACrD,EAEA,SACCA,GAAAE,EAACG,EAAA,CACC,KAAMN,EACN,UAAU,oCAAA,CAAA,CACZ,GAGN,CACF,CAAA,ECVSH,EAGT,CAAC,CACH,SAAAE,EACA,YAAAQ,EAAc,KACd,aAAAC,EACA,kBAAAC,EACA,MAAAC,EACA,GAAGR,CACL,IAAM,CACJ,KAAM,CAACS,EAAMC,CAAO,EAAIC,EAA2BN,CAAW,EAE9DO,EAAU,IAAM,CACd,MAAMC,EAAYC,EAAO,GACvB,YACCC,GAAY,CACXL,EAAQK,CAAoB,CAC9B,EACA,CAAE,MAAO,EAAK,CAChB,EACA,MAAO,IAAM,CACXF,GAAA,MAAAA,EAAW,KACb,CACF,EAAG,EAAE,EAEC,MAAAG,EAAW,CAACC,EAA6BC,IAAkB,CAC/D,MAAMC,EAAkBF,EAAK,gBACzB,GAAGA,EAAK,IAAI,KAAK,OAAO,QAAQA,EAAK,eAAe,EAAE,KAAK,IAAI,CAAC,GAChEA,EAAK,KAEHG,EAAgC,CACpC,QAASF,EAAQ,EAAI,QAAU,OAC/B,IAAKD,EAAK,MAAM,IAChB,IAAKA,EAAK,MAAM,GAClB,EAEMI,EACJpB,EAACqB,EAAA,CACC,cAAY,uBACZ,aAAYH,EACZ,MAAO,OACN,GAAGC,CAAA,CACN,EAIA,OAAAnB,EAAC,MAAI,CAAA,UAAU,yCACb,SAAAA,EAACsB,EAAK,CAAA,KAAK,YAAY,KAAMf,GAAA,YAAAA,EAAO,UAAW,QAAS,CAAE,KAAAS,EAAM,kBAAAG,CAC7D,EAAA,SAAAd,EACIL,EAAA,IAAA,CAAE,KAAMK,EAAaW,CAAI,EAAI,SAAeI,CAAA,CAAA,EAE7CA,CAEN,CAAA,CAAA,EAP2DH,CAQ7D,CAEJ,EAEMnB,EACJU,GAGKR,EAAAE,EAAA,CAAA,SAAAM,EAAK,MAAM,IAAI,CAACQ,EAAMC,IACdF,EAASC,EAAMC,CAAK,CAC5B,EACH,EAIF,OAAAjB,EAACuB,EAAA,CACE,GAAGxB,EACJ,UACEC,EAACwB,EAAA,CACC,WAAYlB,EAAoBA,IAAsB,MAAA,CACxD,EAEF,SAAAR,CAAA,CACF,CAEJ,EAEAJ,EAAgB,eAAiB,gBAAkB,CACjD,OAAO+B,EAAqB,CAC9B"}
@@ -1,4 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as r,jsxs as m,Fragment as B}from"@dropins/tools/preact-jsx-runtime.js";import*as A from"@dropins/tools/preact-compat.js";import{useState as O,useCallback as qt,useEffect as wt}from"@dropins/tools/preact-compat.js";import{classes as S,VComponent as z,Slot as p}from"@dropins/tools/lib.js";import{E as Ut}from"./EmptyCart.js";/* empty css */import{Divider as Pt,Skeleton as jt,SkeletonRow as Tt,InLineAlert as Vt,CartList as Nt,Icon as T,Button as V,Accordion as Jt,AccordionSection as Kt,CartItem as Yt,Price as L,Image as Zt}from"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import{g as Rt}from"./persisted-data.js";import{events as Mt}from"@dropins/tools/event-bus.js";import{s as Dt}from"./resetCart.js";import{u as xt}from"./updateProductsFromCart.js";import{S as At,a as Ht}from"./WarningWithCircle.js";import{S as tn}from"./ChevronDown.js";import{useText as nn}from"@dropins/tools/i18n.js";const rn=C=>A.createElement("svg",{id:"Icon_Chevron_right_Base","data-name":"Icon \\u2013 Chevron right \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...C},A.createElement("g",{id:"Large"},A.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),A.createElement("g",{id:"Chevron_right_icon","data-name":"Chevron right icon"},A.createElement("path",{vectorEffect:"non-scaling-stroke",id:"chevron",d:"M199.75,367.5l4.255,-4.255-4.255,-4.255",transform:"translate(-189.25 -351.0)",fill:"none",stroke:"currentColor"})))),Ot=({className:C,children:J,heading:k,footer:y,emptyCart:w,products:u,outOfStockMessage:g,variant:P="primary",loading:f=!0,...c})=>r("div",{...c,className:S(["cart-cart-summary-list",C,`cart-cart-summary-list__background--${P}`]),children:f?r(en,{}):m(B,{children:[(k||g)&&m("div",{"data-testid":"cart-summary-list-heading-wrapper",className:S(["cart-cart-summary-list__heading",["cart-cart-summary-list__heading--full-width",!u]]),children:[k&&m(B,{children:[r(z,{node:k,className:"cart-cart-summary-list__heading-text"}),r(Pt,{variant:"primary",className:S(["cart-cart-summary-list__heading-divider"])})]}),g&&r(z,{node:g,className:"cart-cart-summary-list__out-of-stock-message"})]}),r("div",{className:S(["cart-cart-summary-list__content",["cart-cart-summary-list__content--empty",!u]]),children:u||r(z,{node:w,className:"cart-cart-summary-list__empty-cart"})}),y&&m(B,{children:[r(Pt,{variant:"primary",className:S(["cart-cart-summary-list__footer-divider"])}),r(z,{node:y,className:"cart-cart-summary-list__footer-text"})]})]})}),en=()=>r(jt,{"data-testid":"cart-summary-list-skeleton",className:"cart-cart-summary-list__skeleton",rowGap:"medium",children:r(Tt,{variant:"row",size:"xlarge",fullWidth:!0,lines:3,multilineGap:"small"})}),an=({initialData:C=null,hideHeading:J,hideFooter:k,routeProduct:y,routeEmptyCartCTA:w,routeCart:u,onItemUpdate:g,onItemRemove:P,maxItems:f,slots:c,attributesToHide:s=[],enableRemoveItem:E,enableUpdateItemQuantity:W,onItemsErrorsChange:q,accordion:Lt=!1,variant:U="primary",isLoading:Et,showMaxItems:K,showDiscount:Y,showSavings:Z,quantityType:R,dropdownOptions:M,...D})=>{var kt;const[Q,Qt]=O(!C),[a,Gt]=O(C),[_,Xt]=O(new Set),[G,H]=O(new Map),o=(kt=Dt.config)==null?void 0:kt.shoppingCartDisplaySetting,[X,$t]=O(K?!0:!f&&!K),i=nn({file:"Cart.CartItem.file",files:"Cart.CartItem.files",heading:"Cart.Cart.heading",message:"Cart.CartItem.message",recipient:"Cart.CartItem.recipient",regularPrice:"Cart.CartItem.regularPrice",discountedPrice:"Cart.CartItem.discountedPrice",sender:"Cart.CartItem.sender",lowInventory:"Cart.CartItem.lowInventory",insufficientQuantity:"Cart.CartItem.insufficientQuantity",insufficientQuantityGeneral:"Cart.CartItem.insufficientQuantityGeneral",outOfStockHeading:"Cart.OutOfStockMessage.heading",outOfStockDescription:"Cart.OutOfStockMessage.message",outOfStockAlert:"Cart.OutOfStockMessage.alert",removeAction:"Cart.OutOfStockMessage.action",notAvailableMessage:"Cart.CartItem.notAvailableMessage",viewMore:"Cart.Cart.viewMore",viewAll:"Cart.Cart.viewAll",discountPercent:"Cart.CartItem.discountPercentage",savingsAmount:"Cart.CartItem.savingsAmount"}),$=(t,n)=>{Xt(e=>(n?e.add(t):e.delete(t),new Set(e)))},tt=(t,n)=>{H(e=>(n?e.set(t,n):e.delete(t),new Map(e)))},j=(t,n)=>{$(t.uid,!0),H(new Map),E&&n===0?xt([{uid:t.uid,quantity:n}]).then(()=>{P==null||P({item:t})}).finally(()=>{$(t.uid,!1)}).catch(e=>{console.warn(e)}):W&&xt([{uid:t.uid,quantity:n}]).then(()=>{g==null||g({item:t})}).finally(()=>{$(t.uid,!1)}).catch(e=>{tt(t.uid,e.message)})},bt=qt(()=>{$t(t=>!t)},[]);wt(()=>{const t=Mt.on("cart/data",n=>{Gt(n),Qt(!!Et)},{eager:!0});return()=>{t==null||t.off()}},[]),wt(()=>{q&&q(G)},[G,q]);const nt=(t,n)=>{if(s.includes("image"))return;const e={loading:n<4?"eager":"lazy",src:t.image.src,alt:t.image.alt,width:"300",height:"300",params:{width:300}},l=r(Zt,{"data-testid":"cart-list-item-image",...e});return r(p,{name:"Thumbnail",slot:c==null?void 0:c.Thumbnail,context:{item:t,defaultImageProps:e},children:y?r("a",{href:y(t),children:l}):l})},rt=t=>{if(!s.includes("name"))return r("span",{"data-testid":"cart-list-item-title",children:y?r("a",{href:y(t),children:t.name}):t.name})},et=t=>{if(s.includes("configurations"))return;const n={...t.bundleOptions,...t.selectedOptions,...t.customizableOptions,...t.recipient?{[i.recipient]:t.recipient}:null,...t.recipientEmail&&t.recipient?{[i.recipient]:`${t.recipient} (${t.recipientEmail})`}:null,...t.sender?{[i.sender]:t.sender}:null,...t.senderEmail&&t.sender?{[i.sender]:`${t.sender} (${t.senderEmail})`}:{},...t.message?{[i.message]:t.message}:null,...t.links&&t.links.count?t.links.count>1?{[i.files.replace("{count}",t.links.count.toString())]:t.links.result}:{[i.file.replace("{count}",t.links.count.toString())]:t.links.result}:null};if(Object.keys(n).length!==0)return n},at=t=>{var n,e,l,d;return(o==null?void 0:o.price)==="INCLUDING_TAX"?t.discounted?{amount:t.regularPrice.value,currency:t.regularPrice.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(n=t.taxedPrice)==null?void 0:n.value,currency:(e=t.taxedPrice)==null?void 0:e.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(l=t.regularPrice)==null?void 0:l.value,currency:(d=t.regularPrice)==null?void 0:d.currency,style:{font:"inherit"},"data-testid":"regular-item-price"}},it=t=>{var n,e;return{amount:(n=t.savingsAmount)==null?void 0:n.value,currency:(e=t.savingsAmount)==null?void 0:e.currency,style:{font:"inherit"},"data-testid":"item-savings-amount"}},ct=t=>(o==null?void 0:o.price)==="INCLUDING_EXCLUDING_TAX"?r(L,{amount:t.rowTotal.value,currency:t.rowTotal.currency,"data-testid":"excluding-tax-total","aria-label":i.regularPrice}):void 0,ot=t=>{var l,d,I,h,v,N,x,_t,It,St;const n={"aria-label":i.regularPrice},e=t.discounted?{}:null;return["INCLUDING_TAX","INCLUDING_EXCLUDING_TAX"].includes(o==null?void 0:o.price)?(n.amount=(l=t.rowTotalIncludingTax)==null?void 0:l.value,n.currency=(d=t.rowTotalIncludingTax)==null?void 0:d.currency,n.variant=t.discounted?"strikethrough":"default",n["data-testid"]="including-tax-item-total",e&&(n.amount=(I=t.total)==null?void 0:I.value,n.currency=(h=t.total)==null?void 0:h.currency,e.amount=(v=t.rowTotalIncludingTax)==null?void 0:v.value,e.currency=(N=t.rowTotalIncludingTax)==null?void 0:N.currency,e.sale=!0,e["aria-label"]=i.discountedPrice,e["data-testid"]="discount-total")):(n.amount=(x=t.total)==null?void 0:x.value,n.currency=(_t=t.total)==null?void 0:_t.currency,n.variant=t.discounted?"strikethrough":"default",n["data-testid"]="regular-item-total",e&&(e.amount=(It=t.discountedTotal)==null?void 0:It.value,e.currency=(St=t.discountedTotal)==null?void 0:St.currency,e.sale=!0,e["aria-label"]=i.regularPrice,e["data-testid"]="discount-total")),{totalProps:n,discountProps:e}},st=t=>{var v,N,x;if(s.includes("warning"))return;const n=G.get(t.uid),e=(v=G.get(t.uid))==null?void 0:v.includes("The requested qty is not available"),l=_.has(t.uid),d=t.insufficientQuantity&&t.stockLevel?t.stockLevel==="noNumber"?i.insufficientQuantityGeneral:i.insufficientQuantity.replace("{inventory}",(N=t.stockLevel)==null?void 0:N.toString()).replace("{count}",t.quantity.toString()):"",I=t.lowInventory&&t.onlyXLeftInStock&&i.lowInventory.replace("{count}",(x=t.onlyXLeftInStock)==null?void 0:x.toString()),h=!t.outOfStock&&n&&e?i.notAvailableMessage:n;return!l&&(n||t.insufficientQuantity||t.lowInventory)?m("span",{"data-testid":"item-warning",children:[r(T,{source:Ht,size:"16"}),h||d||I]}):void 0},lt=t=>s!=null&&s.includes("alert")?void 0:!_.has(t.uid)&&t.outOfStock?m("span",{"data-testid":"item-alert",children:[r(T,{source:At,size:"16"}),i.outOfStockAlert]}):void 0,ut=t=>r(p,{name:"ProductAttributes",slot:c==null?void 0:c.ProductAttributes,context:{item:t}}),dt=t=>{if(!s.includes("sku"))return r("span",{"data-testid":"cart-list-item-sku",children:t.sku})},gt=t=>r(p,{name:"Footer",slot:c==null?void 0:c.Footer,context:{item:t,handleItemsLoading:$,handleItemsError:tt,onItemUpdate:g}}),ft=t=>a!=null&&a.totalQuantity?a.items.filter(t).map((n,e)=>{var h;const{totalProps:l,discountProps:d}=ot(n),I=r(Yt,{updating:_==null?void 0:_.has(n.uid),loading:Q,"data-testid":`cart-list-item-entry-${n.uid}`,image:nt(n,e),title:rt(n),sku:dt(n),price:s.includes("price")?void 0:r(L,{...at(n)}),quantity:s.includes("quantity")?void 0:n.quantity,total:m(B,{children:[s.includes("total")?void 0:r(L,{...l}),s.includes("totalDiscount")?void 0:d&&r(L,{...d})]}),attributes:ut(n),configurations:et(n),totalExcludingTax:s.includes("totalExcludingTax")?void 0:ct(n),taxIncluded:(o==null?void 0:o.price)==="INCLUDING_TAX",taxExcluded:!s.includes("totalExcludingTax")&&(o==null?void 0:o.price)==="INCLUDING_EXCLUDING_TAX",warning:st(n),alert:lt(n),quantityType:R,dropdownOptions:M,onQuantity:W?v=>{j(n,v)}:void 0,onRemove:E?()=>j(n,0):void 0,discount:Y&&n.discounted&&n.discountPercentage?r("div",{"data-testid":"item-discount-percent",children:i.discountPercent.replace("{discount}",((h=n.discountPercentage)==null?void 0:h.toString())??"")}):void 0,savings:Z&&n.discounted&&n.savingsAmount?m("div",{children:[r("span",{children:r(L,{...it(n)})})," ",i.savingsAmount]}):void 0,footer:gt(n)},n.uid);return r(p,{name:"CartItem",slot:c==null?void 0:c.CartItem,context:{item:n,index:e,enableUpdateItemQuantity:W,enableRemoveItem:E,itemsLoading:_,loading:Q,attributesToHide:s,cartTaxesConfig:o,quantityType:R,dropdownOptions:M,showDiscount:Y,showSavings:Z,dictionary:i,getImage:nt,getTitle:rt,getSku:dt,getPriceProps:at,getTotalPriceProps:ot,getProductAttributes:ut,getConfiguration:et,getTotalExcludingTax:ct,getWarning:st,getAlert:lt,getFooter:gt,getSavingsAmount:it},children:I},n.uid)}):null,mt=r(p,{name:"EmptyCart",slot:c==null?void 0:c.EmptyCart,context:{},children:r(Ut,{"data-testid":"empty-cart",ctaLinkURL:w==null?void 0:w()})}),yt=r(p,{name:"Heading",slot:c==null?void 0:c.Heading,context:{count:a==null?void 0:a.totalQuantity},children:r("div",{"data-testid":"default-cart-heading",children:i.heading.replace("({count})",a!=null&&a.totalQuantity?`(${a==null?void 0:a.totalQuantity.toString()})`:"")})}),Ft=yt.props.children.props.children,zt=()=>{const t=a==null?void 0:a.items.filter(n=>n.outOfStock);t==null||t.forEach(n=>{j(n,0)})},Bt=ft(t=>t.outOfStock||t.insufficientQuantity||!1),ht=a!=null&&a.hasOutOfStockItems?r(Vt,{"data-testid":"cart-out-of-stock-message",icon:r(T,{source:At,size:"16"}),itemList:r(Nt,{"data-testid":"out-of-stock-cart-items",children:Bt}),type:"warning",heading:i.outOfStockHeading,description:i.outOfStockDescription,variant:"primary",actionButtonPosition:"bottom",additionalActions:a!=null&&a.hasFullyOutOfStockItems&&E?[{label:i.removeAction,onClick:zt}]:void 0}):void 0,b=ft(t=>!t.outOfStock&&!t.insufficientQuantity),vt=X?Math.max(f||5,5):Math.min((a==null?void 0:a.totalQuantity)||5,5),pt=(a==null?void 0:a.totalQuantity)>vt,Wt=pt&&!X&&vt!=f,F=a!=null&&a.totalQuantity&&b?r(p,{name:"Footer",slot:c==null?void 0:c.CartSummaryFooter,context:{displayMaxItems:X,routeCart:u},"data-testid":"cart-cart-summary-footer-slot",className:"cart-cart-summary-footer",children:pt?Wt?r(V,{className:"cart-cart-summary-list-footer__action",onClick:bt,"data-testid":"view-more-items-button",variant:"tertiary",children:i.viewMore}):u&&r(V,{className:"cart-cart-summary-list-footer__action",href:u(),variant:"tertiary","data-testid":"view-cart-or-less-items-button",children:i.viewAll}):u&&r(V,{className:"cart-cart-summary-list-footer__action",href:u(),variant:"tertiary","data-testid":"view-cart-button",children:i.viewAll})}):null,Ct=a!=null&&a.totalQuantity?r(Nt,{"data-testid":"cart-list",children:b==null?void 0:b.slice(0,X?Math.max(f||(a==null?void 0:a.totalQuantity),5):Math.min(f??5,5))}):null;return Lt?r(Jt,{"data-testid":"cart-summary-list-accordion",className:S(["cart-cart-summary-list-accordion",`cart-cart-summary-list__background--${U}`]),iconOpen:rn,iconClose:tn,children:r(Kt,{title:Ft,"data-testid":"cart-summary-list-accordion__section",open:!0,renderContentWhenClosed:!0,children:r(Ot,{...D,"aria-expanded":!0,"aria-label":"TEST",className:"cart-cart-summary-list-accordion__list",loading:Q,footer:k?void 0:F||(u?F:void 0),emptyCart:mt,products:Ct,outOfStockMessage:ht,variant:U})})}):r(Ot,{...D,heading:J?void 0:yt,footer:k?void 0:F||(u?F:void 0),loading:Q,emptyCart:mt,products:Ct,outOfStockMessage:ht,variant:U})};an.getInitialData=async function(){return Rt()};export{an as C};
3
+ import{jsx as r,jsxs as S,Fragment as R}from"@dropins/tools/preact-jsx-runtime.js";import*as B from"@dropins/tools/preact-compat.js";import{forwardRef as tn,useState as L,useEffect as W,useCallback as bt,useImperativeHandle as nn}from"@dropins/tools/preact-compat.js";import{classes as Q,VComponent as j,Slot as I}from"@dropins/tools/lib.js";import{E as en}from"./EmptyCart2.js";/* empty css */import{Divider as Ut,Skeleton as rn,SkeletonRow as an,InLineAlert as $t,CartList as V,Icon as D,Button as M,Accordion as cn,AccordionSection as on,CartItem as sn,Price as G,Image as ln}from"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import{g as zt}from"./persisted-data.js";import{events as Bt}from"@dropins/tools/event-bus.js";import{s as un}from"./resetCart.js";import{a as dn}from"./createGuestCart.js";import{u as Gt}from"./updateProductsFromCart.js";import{S as Rt,a as mn}from"./WarningWithCircle.js";import{S as gn}from"./ChevronDown.js";import{useText as fn}from"@dropins/tools/i18n.js";const hn=O=>B.createElement("svg",{id:"Icon_Chevron_right_Base","data-name":"Icon \\u2013 Chevron right \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...O},B.createElement("g",{id:"Large"},B.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),B.createElement("g",{id:"Chevron_right_icon","data-name":"Chevron right icon"},B.createElement("path",{vectorEffect:"non-scaling-stroke",id:"chevron",d:"M199.75,367.5l4.255,-4.255-4.255,-4.255",transform:"translate(-189.25 -351.0)",fill:"none",stroke:"currentColor"})))),Xt=({className:O,children:H,heading:N,footer:_,emptyCart:E,products:g,outOfStockMessage:v,variant:b="primary",loading:m=!0,...o})=>r("div",{...o,className:Q(["cart-cart-summary-list",O,`cart-cart-summary-list__background--${b}`]),children:m?r(yn,{}):S(R,{children:[(N||v)&&S("div",{"data-testid":"cart-summary-list-heading-wrapper",className:Q(["cart-cart-summary-list__heading",["cart-cart-summary-list__heading--full-width",!g]]),children:[N&&S(R,{children:[r(j,{node:N,className:"cart-cart-summary-list__heading-text"}),r(Ut,{variant:"primary",className:Q(["cart-cart-summary-list__heading-divider"])})]}),v&&r(j,{node:v,className:"cart-cart-summary-list__out-of-stock-message"})]}),r("div",{className:Q(["cart-cart-summary-list__content",["cart-cart-summary-list__content--empty",!g]]),children:g||r(j,{node:E,className:"cart-cart-summary-list__empty-cart"})}),_&&S(R,{children:[r(Ut,{variant:"primary",className:Q(["cart-cart-summary-list__footer-divider"])}),r(j,{node:_,className:"cart-cart-summary-list__footer-text"})]})]})}),yn=()=>r(rn,{"data-testid":"cart-summary-list-skeleton",className:"cart-cart-summary-list__skeleton",rowGap:"medium",children:r(an,{variant:"row",size:"xlarge",fullWidth:!0,lines:3,multilineGap:"small"})}),vn=tn(({initialData:O=null,hideHeading:H,hideFooter:N,routeProduct:_,routeEmptyCartCTA:E,routeCart:g,onItemUpdate:v,onItemRemove:b,maxItems:m,slots:o,attributesToHide:d=[],enableRemoveItem:X,enableUpdateItemQuantity:J,onItemsErrorsChange:K,accordion:Ft=!1,variant:Y="primary",isLoading:qt,showMaxItems:tt,showDiscount:nt,showSavings:et,quantityType:rt,dropdownOptions:it,undo:P=!1,__testRecentlyRemovedItems:at,...ct},Tt)=>{var Lt;const[U,Wt]=L(!O),[i,jt]=L(O),[p,Vt]=L(new Set),[z,ot]=L(new Map),[w,A]=L(at||[]);W(()=>{},[at,w]);const u=(Lt=un.config)==null?void 0:Lt.shoppingCartDisplaySetting,[x,Jt]=L(tt?!0:!m&&!tt),c=fn({file:"Cart.CartItem.file",files:"Cart.CartItem.files",heading:"Cart.Cart.heading",message:"Cart.CartItem.message",recipient:"Cart.CartItem.recipient",regularPrice:"Cart.CartItem.regularPrice",discountedPrice:"Cart.CartItem.discountedPrice",sender:"Cart.CartItem.sender",lowInventory:"Cart.CartItem.lowInventory",insufficientQuantity:"Cart.CartItem.insufficientQuantity",insufficientQuantityGeneral:"Cart.CartItem.insufficientQuantityGeneral",outOfStockHeading:"Cart.OutOfStockMessage.heading",outOfStockDescription:"Cart.OutOfStockMessage.message",outOfStockAlert:"Cart.OutOfStockMessage.alert",removeAction:"Cart.OutOfStockMessage.action",notAvailableMessage:"Cart.CartItem.notAvailableMessage",viewMore:"Cart.Cart.viewMore",viewAll:"Cart.Cart.viewAll",discountPercent:"Cart.CartItem.discountPercentage",savingsAmount:"Cart.CartItem.savingsAmount",itemBeingRemoved:"Cart.CartItem.itemBeingRemoved",itemRemoved:"Cart.CartItem.itemRemoved",itemRemovedDescription:"Cart.CartItem.itemRemovedDescription",undoAction:"Cart.CartItem.undoAction",dismissAction:"Cart.CartItem.dismissAction"}),F=(t,n)=>{Vt(e=>(n?e.add(t):e.delete(t),new Set(e)))},st=(t,n)=>{ot(e=>(n?e.set(t,n):e.delete(t),new Map(e)))};function Kt(t){const n=zt(),e=n==null?void 0:n.items.find(a=>a.uid===t);e&&A(a=>{const s=n.items.findIndex(l=>l.uid===t);return s!==-1&&!a.some(l=>l.item.uid===t)?(Bt.emit("cart/product/removed",{item:e,index:s}),[...a,{item:e,index:s,error:void 0,beingRemoved:!0}]):a})}const Z=(t,n)=>{F(t.uid,!0),ot(new Map),X&&n===0?(Kt(t.uid),Gt([{uid:t.uid,quantity:n}]).then(()=>{b==null||b({item:t})}).finally(()=>{F(t.uid,!1),A(e=>e.map(a=>a.item.uid===t.uid?{...a,beingRemoved:!1}:a))}).catch(e=>{console.warn(e)})):J&&Gt([{uid:t.uid,quantity:n}]).then(()=>{v==null||v({item:t})}).finally(()=>{F(t.uid,!1)}).catch(e=>{st(t.uid,e.message)})},lt=t=>{A(n=>n.filter(e=>e.item.uid!==t))},Yt=bt(()=>{Jt(t=>!t)},[]);W(()=>{const t=Bt.on("cart/data",n=>{jt(n),Wt(!!qt)},{eager:!0});return()=>{t==null||t.off()}},[]),W(()=>{P||A([])},[P]),W(()=>{K&&K(z)},[z,K]);const ut=(t,n)=>{if(d.includes("image"))return;const e={loading:n<4?"eager":"lazy",src:t.image.src,alt:t.image.alt,width:"300",height:"300",params:{width:300}},a=r(ln,{"data-testid":"cart-list-item-image",...e});return r(I,{name:"Thumbnail",slot:o==null?void 0:o.Thumbnail,context:{item:t,defaultImageProps:e},children:_?r("a",{href:_(t),children:a}):a})},dt=t=>{if(!d.includes("name"))return r("span",{"data-testid":"cart-list-item-title",children:_?r("a",{href:_(t),children:t.name}):t.name})},mt=t=>{if(d.includes("configurations"))return;const n={...t.bundleOptions,...t.selectedOptions,...t.customizableOptions,...t.recipient?{[c.recipient]:t.recipient}:null,...t.recipientEmail&&t.recipient?{[c.recipient]:`${t.recipient} (${t.recipientEmail})`}:null,...t.sender?{[c.sender]:t.sender}:null,...t.senderEmail&&t.sender?{[c.sender]:`${t.sender} (${t.senderEmail})`}:{},...t.message?{[c.message]:t.message}:null,...t.links&&t.links.count?t.links.count>1?{[c.files.replace("{count}",t.links.count.toString())]:t.links.result}:{[c.file.replace("{count}",t.links.count.toString())]:t.links.result}:null};if(Object.keys(n).length!==0)return n},gt=t=>{var n,e,a,s;return(u==null?void 0:u.price)==="INCLUDING_TAX"?t.discounted?{amount:t.regularPrice.value,currency:t.regularPrice.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(n=t.taxedPrice)==null?void 0:n.value,currency:(e=t.taxedPrice)==null?void 0:e.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(a=t.regularPrice)==null?void 0:a.value,currency:(s=t.regularPrice)==null?void 0:s.currency,style:{font:"inherit"},"data-testid":"regular-item-price"}},ft=t=>{var n,e;return{amount:(n=t.savingsAmount)==null?void 0:n.value,currency:(e=t.savingsAmount)==null?void 0:e.currency,style:{font:"inherit"},"data-testid":"item-savings-amount"}},ht=t=>(u==null?void 0:u.price)==="INCLUDING_EXCLUDING_TAX"?r(G,{amount:t.rowTotal.value,currency:t.rowTotal.currency,"data-testid":"excluding-tax-total","aria-label":c.regularPrice}):void 0,yt=t=>{var a,s,l,f,y,C,k,$,Qt,Et;const n={"aria-label":c.regularPrice},e=t.discounted?{}:null;return["INCLUDING_TAX","INCLUDING_EXCLUDING_TAX"].includes(u==null?void 0:u.price)?(n.amount=(a=t.rowTotalIncludingTax)==null?void 0:a.value,n.currency=(s=t.rowTotalIncludingTax)==null?void 0:s.currency,n.variant=t.discounted?"strikethrough":"default",n["data-testid"]="including-tax-item-total",e&&(n.amount=(l=t.total)==null?void 0:l.value,n.currency=(f=t.total)==null?void 0:f.currency,e.amount=(y=t.rowTotalIncludingTax)==null?void 0:y.value,e.currency=(C=t.rowTotalIncludingTax)==null?void 0:C.currency,e.sale=!0,e["aria-label"]=c.discountedPrice,e["data-testid"]="discount-total")):(n.amount=(k=t.total)==null?void 0:k.value,n.currency=($=t.total)==null?void 0:$.currency,n.variant=t.discounted?"strikethrough":"default",n["data-testid"]="regular-item-total",e&&(e.amount=(Qt=t.discountedTotal)==null?void 0:Qt.value,e.currency=(Et=t.discountedTotal)==null?void 0:Et.currency,e.sale=!0,e["aria-label"]=c.regularPrice,e["data-testid"]="discount-total")),{totalProps:n,discountProps:e}},vt=t=>{var y,C,k;if(d.includes("warning"))return;const n=z.get(t.uid),e=(y=z.get(t.uid))==null?void 0:y.includes("The requested qty is not available"),a=p.has(t.uid),s=t.insufficientQuantity&&t.stockLevel?t.stockLevel==="noNumber"?c.insufficientQuantityGeneral:c.insufficientQuantity.replace("{inventory}",(C=t.stockLevel)==null?void 0:C.toString()).replace("{count}",t.quantity.toString()):"",l=t.lowInventory&&t.onlyXLeftInStock&&c.lowInventory.replace("{count}",(k=t.onlyXLeftInStock)==null?void 0:k.toString()),f=!t.outOfStock&&n&&e?c.notAvailableMessage:n;return!a&&(n||t.insufficientQuantity||t.lowInventory)?S("span",{"data-testid":"item-warning",children:[r(D,{source:mn,size:"16"}),f||s||l]}):void 0},pt=t=>d!=null&&d.includes("alert")?void 0:!p.has(t.uid)&&t.outOfStock?S("span",{"data-testid":"item-alert",children:[r(D,{source:Rt,size:"16"}),c.outOfStockAlert]}):void 0,Ct=t=>r(I,{name:"ProductAttributes",slot:o==null?void 0:o.ProductAttributes,context:{item:t}}),kt=t=>{if(!d.includes("sku"))return r("span",{"data-testid":"cart-list-item-sku",children:t.sku})},It=t=>r(I,{name:"Footer",slot:o==null?void 0:o.Footer,context:{item:t,handleItemsLoading:F,handleItemsError:st,onItemUpdate:v}}),St=t=>i!=null&&i.totalQuantity?i.items.filter(t).map((n,e)=>{var f;const{totalProps:a,discountProps:s}=yt(n),l=r(sn,{updating:p==null?void 0:p.has(n.uid),loading:U,"data-testid":`cart-list-item-entry-${n.uid}`,image:ut(n,e),title:dt(n),sku:kt(n),price:d.includes("price")?void 0:r(G,{...gt(n)}),quantity:d.includes("quantity")?void 0:n.quantity,total:S(R,{children:[d.includes("total")?void 0:r(G,{...a}),d.includes("totalDiscount")?void 0:s&&r(G,{...s})]}),attributes:Ct(n),configurations:mt(n),totalExcludingTax:d.includes("totalExcludingTax")?void 0:ht(n),taxIncluded:(u==null?void 0:u.price)==="INCLUDING_TAX",taxExcluded:!d.includes("totalExcludingTax")&&(u==null?void 0:u.price)==="INCLUDING_EXCLUDING_TAX",warning:vt(n),alert:pt(n),quantityType:rt,dropdownOptions:it,onQuantity:J&&!p.has(n.uid)?y=>{Z(n,y)}:void 0,onRemove:X&&!p.has(n.uid)?()=>Z(n,0):void 0,discount:nt&&n.discounted&&n.discountPercentage?r("div",{"data-testid":"item-discount-percent",children:c.discountPercent.replace("{discount}",((f=n.discountPercentage)==null?void 0:f.toString())??"")}):void 0,savings:et&&n.discounted&&n.savingsAmount?S("div",{children:[r("span",{children:r(G,{...ft(n)})})," ",c.savingsAmount]}):void 0,footer:It(n)},n.uid);return r(I,{name:"CartItem",slot:o==null?void 0:o.CartItem,context:{item:n,index:e,enableUpdateItemQuantity:J,enableRemoveItem:X,itemsLoading:p,loading:U,attributesToHide:d,cartTaxesConfig:u,quantityType:rt,dropdownOptions:it,showDiscount:nt,showSavings:et,dictionary:c,getImage:ut,getTitle:dt,getSku:kt,getPriceProps:gt,getTotalPriceProps:yt,getProductAttributes:Ct,getConfiguration:mt,getTotalExcludingTax:ht,getWarning:vt,getAlert:pt,getFooter:It,getSavingsAmount:ft},children:l},n.uid)}):null,_t=r(I,{name:"Heading",slot:o==null?void 0:o.Heading,context:{count:i==null?void 0:i.totalQuantity},children:r("div",{"data-testid":"default-cart-heading",children:c.heading.replace("({count})",i!=null&&i.totalQuantity?`(${i==null?void 0:i.totalQuantity.toString()})`:"")})}),Zt=_t.props.children.props.children,Dt=()=>{const t=i==null?void 0:i.items.filter(n=>n.outOfStock);t==null||t.forEach(n=>{Z(n,0)})},Mt=St(t=>t.outOfStock||t.insufficientQuantity||!1),wt=i!=null&&i.hasOutOfStockItems?r($t,{"data-testid":"cart-out-of-stock-message",icon:r(D,{source:Rt,size:"16"}),itemList:r(V,{"data-testid":"out-of-stock-cart-items",children:Mt}),type:"warning",heading:c.outOfStockHeading,description:c.outOfStockDescription,variant:"primary",actionButtonPosition:"bottom",additionalActions:i!=null&&i.hasFullyOutOfStockItems&&X?[{label:c.removeAction,onClick:Dt}]:void 0}):void 0,h=St(t=>!t.outOfStock&&!t.insufficientQuantity),At=x?Math.max(m||5,5):Math.min((i==null?void 0:i.totalQuantity)||5,5),Ot=(i==null?void 0:i.totalQuantity)>At,Ht=Ot&&!x&&At!=m,q=i!=null&&i.totalQuantity&&h?r(I,{name:"Footer",slot:o==null?void 0:o.CartSummaryFooter,context:{displayMaxItems:x,routeCart:g},"data-testid":"cart-cart-summary-footer-slot",className:"cart-cart-summary-footer",children:Ot?Ht?r(M,{className:"cart-cart-summary-list-footer__action",onClick:Yt,"data-testid":"view-more-items-button",variant:"tertiary",children:c.viewMore}):g&&r(M,{className:"cart-cart-summary-list-footer__action",href:g(),variant:"tertiary","data-testid":"view-cart-or-less-items-button",children:c.viewAll}):g&&r(M,{className:"cart-cart-summary-list-footer__action",href:g(),variant:"tertiary","data-testid":"view-cart-button",children:c.viewAll})}):null,Nt=()=>{if(!(i!=null&&i.items))return null;const t=[],n=i.items,e=o==null?void 0:o.UndoBanner,a=x?Math.max(m||(i==null?void 0:i.totalQuantity),5):Math.min(m??5,5);for(let s=0;s<=a;s++)P&&w.filter(l=>l.index===s).forEach(({item:l,error:f,beingRemoved:y})=>{var k,$;const C=r($t,{type:f?"error":"info",heading:y?(k=c.itemBeingRemoved)==null?void 0:k.replace("{product}",l.name):($=c.itemRemoved)==null?void 0:$.replace("{product}",l.name),description:f||c.itemRemovedDescription,variant:"primary",actionButtonPosition:"bottom",additionalActions:y?[]:[{label:c.undoAction,onClick:()=>T(l.uid),"aria-label":`${c.undoAction} remove ${l.name}`},{label:c.dismissAction,onClick:()=>lt(l.uid),"aria-label":`${c.dismissAction} undo for ${l.name}`}]},`undo-banner-${l.uid}`);t.push(e?r(I,{name:"UndoBanner",slot:e,context:{item:l,loading:U,error:f,onUndo:()=>T(l.uid),onDismiss:()=>lt(l.uid)},children:C},`undo-banner-${l.uid}`):C)}),s<a&&s<n.length&&t.push((h==null?void 0:h[s])||null);return r(V,{"data-testid":"cart-list",children:t})},T=bt(async t=>{A(e=>e.map(a=>a.item.uid===t?{...a,loading:!0,error:void 0}:a));const n=w.find(e=>e.item.uid===t);if(n)try{await dn([{sku:n.item.sku,parentSku:n.item.topLevelSku,quantity:n.item.quantity,optionsUIDs:n.item.bundleOptionsUIDs||(n.item.selectedOptionsUIDs?Object.values(n.item.selectedOptionsUIDs):void 0),enteredOptions:n.item.customizableOptions?Object.entries(n.item.customizableOptions).map(([e,a])=>({uid:e,value:a})):void 0}]),A(e=>e.filter(a=>a.item.uid!==t))}catch(e){A(a=>a.map(s=>s.item.uid===t?{...s,error:(e==null?void 0:e.message)||"Failed to restore item."}:s))}},[w]);nn(Tt,()=>({handleUndo:T}),[T]);const Pt=r(R,{children:P&&w.length>0?Nt():r(I,{name:"EmptyCart",slot:o==null?void 0:o.EmptyCart,context:{},children:r(en,{"data-testid":"empty-cart",ctaLinkURL:E==null?void 0:E()})})}),xt=i!=null&&i.totalQuantity||P&&w.length>0?P?w.length>0?Nt():r(V,{"data-testid":"cart-list",children:h==null?void 0:h.slice(0,x?Math.max(m||(i==null?void 0:i.totalQuantity),5):Math.min(m??5,5))}):r(V,{"data-testid":"cart-list",children:h==null?void 0:h.slice(0,x?Math.max(m||(i==null?void 0:i.totalQuantity),5):Math.min(m??5,5))}):null;return Ft?r(cn,{"data-testid":"cart-summary-list-accordion",className:Q(["cart-cart-summary-list-accordion",`cart-cart-summary-list__background--${Y}`]),iconOpen:hn,iconClose:gn,children:r(on,{title:Zt,"data-testid":"cart-summary-list-accordion__section",open:!0,renderContentWhenClosed:!0,children:r(Xt,{...ct,"aria-expanded":!0,"aria-label":"TEST",className:"cart-cart-summary-list-accordion__list",loading:U,footer:N?void 0:q||(g?q:void 0),emptyCart:Pt,products:xt,outOfStockMessage:wt,variant:Y})})}):r(Xt,{...ct,heading:H?void 0:_t,footer:N?void 0:q||(g?q:void 0),loading:U,emptyCart:Pt,products:xt,outOfStockMessage:wt,variant:Y})});vn.getInitialData=async function(){return zt()};export{vn as C};
4
4
  //# sourceMappingURL=CartSummaryList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CartSummaryList.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","/@dropins/storefront-cart/src/components/CartSummaryList/CartSummaryList.tsx","/@dropins/storefront-cart/src/containers/CartSummaryList/CartSummaryList.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Chevron_right_Base\", \"data-name\": \"Icon \\\\u2013 Chevron right \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Chevron_right_icon\", \"data-name\": \"Chevron right icon\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", id: \"chevron\", d: \"M199.75,367.5l4.255,-4.255-4.255,-4.255\", transform: \"translate(-189.25 -351.0)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgChevronRight;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Divider, Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nimport '@/cart/components/CartSummaryList/CartSummaryList.css';\nexport interface CartSummaryListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n heading?: VNode | null;\n footer?: VNode | null;\n emptyCart: VNode;\n products?: VNode | null;\n outOfStockMessage?: VNode | null;\n loading?: boolean;\n variant?: 'primary' | 'secondary';\n}\n\nexport const CartSummaryList: FunctionComponent<CartSummaryListProps> = ({\n className,\n children,\n heading,\n footer,\n emptyCart,\n products,\n outOfStockMessage,\n variant = 'primary',\n loading = true,\n ...props\n}) => {\n return (\n <div\n {...props}\n className={classes([\n 'cart-cart-summary-list',\n className,\n `cart-cart-summary-list__background--${variant}`,\n ])}\n >\n {loading ? (\n <CartSummaryListSkeleton />\n ) : (\n <>\n {(heading || outOfStockMessage) && (\n <div\n data-testid=\"cart-summary-list-heading-wrapper\"\n className={classes([\n 'cart-cart-summary-list__heading',\n ['cart-cart-summary-list__heading--full-width', !products],\n ])}\n >\n {heading && (\n <>\n <VComponent\n node={heading}\n className=\"cart-cart-summary-list__heading-text\"\n />\n <Divider\n variant=\"primary\"\n className={classes([\n 'cart-cart-summary-list__heading-divider',\n ])}\n />\n </>\n )}\n\n {outOfStockMessage && (\n <VComponent\n node={outOfStockMessage}\n className=\"cart-cart-summary-list__out-of-stock-message\"\n />\n )}\n </div>\n )}\n <div\n className={classes([\n 'cart-cart-summary-list__content',\n ['cart-cart-summary-list__content--empty', !products],\n ])}\n >\n {products || (\n <VComponent\n node={emptyCart}\n className=\"cart-cart-summary-list__empty-cart\"\n />\n )}\n </div>\n\n {footer && (\n <>\n <Divider\n variant=\"primary\"\n className={classes(['cart-cart-summary-list__footer-divider'])}\n />\n <VComponent\n node={footer}\n className=\"cart-cart-summary-list__footer-text\"\n />\n </>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst CartSummaryListSkeleton: FunctionComponent = () => {\n return (\n <Skeleton\n data-testid=\"cart-summary-list-skeleton\"\n className=\"cart-cart-summary-list__skeleton\"\n rowGap=\"medium\"\n >\n <SkeletonRow\n variant=\"row\"\n size=\"xlarge\"\n fullWidth={true}\n lines={3}\n multilineGap=\"small\"\n />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n} from 'preact/compat';\nimport { Container, Slot, SlotProps, classes } from '@adobe-commerce/elsie/lib';\n\nimport {\n CartSummaryList as CartSummaryListComponent,\n EmptyCart,\n} from '@/cart/components';\n\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\nimport { CartModel } from '@/cart/data/models/cart-model';\nimport {\n Accordion,\n AccordionSection,\n Button,\n CartItem,\n CartList,\n Icon,\n Image,\n ImageProps,\n InLineAlert,\n Price,\n PriceProps,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { VNode } from 'preact';\nimport { events, Cart } from '@adobe-commerce/event-bus';\nimport { state } from '@/cart/lib/state';\nimport {\n ChevronDown,\n ChevronRight,\n OrderError,\n WarningWithCircle,\n} from '@adobe-commerce/elsie/icons';\nimport { updateProductsFromCart } from '@/cart/api';\n\nexport interface CartSummaryListProps extends HTMLAttributes<HTMLDivElement> {\n hideHeading?: boolean;\n hideFooter?: boolean;\n routeProduct?: (item: CartModel['items'][0]) => string;\n routeEmptyCartCTA?: () => string;\n routeCart?: () => string;\n onItemUpdate?: ({ item }: { item: CartModel['items'][0] }) => void;\n onItemRemove?: ({ item }: { item: CartModel['items'][0] }) => void;\n maxItems?: number; // Maximum number of items to display\n showMaxItems?: boolean;\n attributesToHide?: SwitchableAttributes[]; // Product attributes to hide\n slots?: {\n Heading?: SlotProps;\n EmptyCart?: SlotProps;\n Footer?: SlotProps;\n Thumbnail?: SlotProps<{\n item: CartModel['items'][number],\n defaultImageProps: ImageProps\n }>;\n ProductAttributes?: SlotProps;\n CartSummaryFooter?: SlotProps;\n CartItem?: SlotProps;\n };\n enableRemoveItem?: boolean;\n enableUpdateItemQuantity?: boolean;\n onItemsErrorsChange?: (errors: Map<string, string>) => void;\n accordion?: boolean;\n variant?: 'primary' | 'secondary';\n isLoading?: boolean;\n showDiscount?: boolean;\n showSavings?: boolean;\n quantityType?: 'stepper' | 'dropdown';\n dropdownOptions?: { value: string; text: string }[];\n}\n\n// Attributes that can be hidden or shown\nexport type SwitchableAttributes =\n | 'name'\n | 'image'\n | 'configurations'\n | 'warning'\n | 'alert'\n | 'sku'\n | 'price'\n | 'quantity'\n | 'total'\n | 'totalDiscount'\n | 'totalExcludingTax';\n\nexport const CartSummaryList: Container<\n CartSummaryListProps,\n CartModel | null\n> = ({\n initialData = null,\n hideHeading,\n hideFooter,\n routeProduct,\n routeEmptyCartCTA,\n routeCart,\n onItemUpdate,\n onItemRemove,\n maxItems, //if maxItems is not provided, default to show all items\n slots,\n attributesToHide = [],\n enableRemoveItem,\n enableUpdateItemQuantity,\n onItemsErrorsChange,\n accordion = false,\n variant = 'primary',\n isLoading,\n showMaxItems,\n\n showDiscount,\n showSavings,\n quantityType,\n dropdownOptions,\n ...props\n}) => {\n const [loading, setLoading] = useState(!initialData);\n\n const [cartModelData, setCartModelData] = useState<CartModel | null>(\n initialData\n );\n const [itemsLoading, setItemLoading] = useState<Set<string>>(new Set());\n\n const [itemsErrors, setItemErrors] = useState<Map<string, string>>(new Map());\n\n const cartTaxesConfig = state.config?.shoppingCartDisplaySetting;\n\n const [displayMaxItems, setDisplayMaxItems] = useState<boolean>(\n showMaxItems ? true : !maxItems && !showMaxItems\n );\n\n const dictionary = useText({\n file: 'Cart.CartItem.file',\n files: 'Cart.CartItem.files',\n heading: 'Cart.Cart.heading',\n message: 'Cart.CartItem.message',\n recipient: 'Cart.CartItem.recipient',\n regularPrice: 'Cart.CartItem.regularPrice',\n discountedPrice: 'Cart.CartItem.discountedPrice',\n sender: 'Cart.CartItem.sender',\n lowInventory: 'Cart.CartItem.lowInventory',\n insufficientQuantity: 'Cart.CartItem.insufficientQuantity',\n insufficientQuantityGeneral: 'Cart.CartItem.insufficientQuantityGeneral',\n outOfStockHeading: 'Cart.OutOfStockMessage.heading',\n outOfStockDescription: 'Cart.OutOfStockMessage.message',\n outOfStockAlert: 'Cart.OutOfStockMessage.alert',\n removeAction: 'Cart.OutOfStockMessage.action',\n notAvailableMessage: 'Cart.CartItem.notAvailableMessage',\n viewMore: 'Cart.Cart.viewMore',\n viewAll: 'Cart.Cart.viewAll',\n discountPercent: 'Cart.CartItem.discountPercentage',\n savingsAmount: 'Cart.CartItem.savingsAmount',\n \n });\n\n const handleItemsLoading = (uid: string, state: boolean) => {\n setItemLoading((prev) => {\n state ? prev.add(uid) : prev.delete(uid);\n return new Set(prev);\n });\n };\n\n const handleItemsError = (uid: string, message?: string) => {\n setItemErrors((prev) => {\n message ? prev.set(uid, message) : prev.delete(uid);\n return new Map(prev);\n });\n };\n\n const handleItemQuantityUpdate = (\n item: CartModel['items'][0],\n quantity: number\n ) => {\n // initial values\n handleItemsLoading(item.uid, true);\n\n // Reset temporary error messages\n setItemErrors(new Map());\n\n if (enableRemoveItem && quantity === 0) {\n // use callback for removing\n updateProductsFromCart([{ uid: item.uid, quantity }])\n .then(() => {\n onItemRemove?.({ item });\n })\n .finally(() => {\n handleItemsLoading(item.uid, false);\n })\n .catch((error: any) => {\n console.warn(error);\n });\n }\n // use callback for updating\n else {\n enableUpdateItemQuantity &&\n updateProductsFromCart([{ uid: item.uid, quantity }])\n .then(() => {\n onItemUpdate?.({ item });\n })\n .finally(() => {\n handleItemsLoading(item.uid, false);\n })\n .catch((error: Error) => {\n handleItemsError(item.uid, error.message);\n });\n }\n };\n\n // Display max items\n const handleMaxItemsView = useCallback(() => {\n setDisplayMaxItems((prev) => !prev);\n }, []);\n\n useEffect(() => {\n const cartDataEvent = events.on(\n 'cart/data',\n (payload: Cart | null) => {\n setCartModelData(payload as CartModel);\n setLoading(!!isLoading);\n },\n { eager: true }\n );\n\n return () => {\n cartDataEvent?.off();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Call onItemsErrorsChange whenever itemsErrors changes\n useEffect(() => {\n if (onItemsErrorsChange) {\n onItemsErrorsChange(itemsErrors);\n }\n }, [itemsErrors, onItemsErrorsChange]);\n\n // Helper functions\n const getImage = (item: CartModel['items'][0], index: number) => {\n if (attributesToHide.includes('image')) {\n return undefined;\n }\n\n const defaultImageProps: ImageProps = {\n loading: index < 4 ? 'eager' : 'lazy',\n src: item.image.src,\n alt: item.image.alt,\n width: '300',\n height: '300',\n params: { width: 300 },\n };\n\n const imageComponent = (\n <Image\n data-testid=\"cart-list-item-image\"\n {...defaultImageProps}\n />\n );\n return (\n <Slot\n name=\"Thumbnail\"\n slot={slots?.Thumbnail}\n context={{\n item,\n defaultImageProps,\n }}\n >\n {routeProduct ? (\n <a href={routeProduct(item)}>{imageComponent}</a>\n ) : (\n imageComponent\n )}\n </Slot>\n );\n };\n\n const getTitle = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('name')) {\n return undefined;\n }\n\n return (\n <span data-testid=\"cart-list-item-title\">\n {routeProduct ? (\n <a href={routeProduct(item)}>{item.name}</a>\n ) : (\n item.name\n )}\n </span>\n );\n };\n\n const getConfiguration = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('configurations')) {\n return undefined;\n }\n\n const configuration = {\n ...item.bundleOptions,\n ...item.selectedOptions,\n ...item.customizableOptions,\n ...(item.recipient ? { [dictionary.recipient]: item.recipient } : null),\n ...(item.recipientEmail && item.recipient\n ? {\n [dictionary.recipient]: `${item.recipient} (${item.recipientEmail})`,\n }\n : null),\n ...(item.sender ? { [dictionary.sender]: item.sender } : null),\n ...(item.senderEmail && item.sender\n ? {\n [dictionary.sender]: `${item.sender} (${item.senderEmail})`,\n }\n : {}),\n ...(item.message ? { [dictionary.message]: item.message } : null),\n ...(item.links && item.links.count\n ? item.links.count > 1\n ? {\n [dictionary.files.replace(\n '{count}',\n item.links.count.toString()\n )]: item.links.result,\n }\n : {\n [dictionary.file.replace('{count}', item.links.count.toString())]:\n item.links.result,\n }\n : null),\n };\n\n if (Object.keys(configuration).length === 0) {\n return undefined;\n }\n\n return configuration;\n };\n\n const getPriceProps = (item: CartModel['items'][0]) => {\n return cartTaxesConfig?.price === 'INCLUDING_TAX'\n ? item.discounted\n ? {\n amount: item.regularPrice.value,\n currency: item.regularPrice.currency,\n style: { font: 'inherit' },\n 'data-testid': 'including-tax-item-price',\n }\n : {\n amount: item.taxedPrice?.value,\n currency: item.taxedPrice?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'including-tax-item-price',\n }\n : {\n amount: item.regularPrice?.value,\n currency: item.regularPrice?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'regular-item-price',\n };\n };\n\n const getSavingsAmount = (item: CartModel['items'][0]) => {\n return {\n amount: item.savingsAmount?.value,\n currency: item.savingsAmount?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'item-savings-amount',\n };\n };\n\n const getTotalExcludingTax = (item: CartModel['items'][0]) => {\n return cartTaxesConfig?.price === 'INCLUDING_EXCLUDING_TAX' ? (\n <Price\n amount={item.rowTotal.value}\n currency={item.rowTotal.currency}\n data-testid=\"excluding-tax-total\"\n aria-label={dictionary.regularPrice}\n />\n ) : undefined;\n };\n\n const getTotalPriceProps = (item: CartModel['items'][0]) => {\n const totalProps: PriceProps = {\n 'aria-label': dictionary.regularPrice,\n };\n const discountProps: PriceProps | null = item.discounted ? {} : null;\n\n if (\n ['INCLUDING_TAX', 'INCLUDING_EXCLUDING_TAX'].includes(\n cartTaxesConfig?.price as string\n )\n ) {\n totalProps['amount'] = item.rowTotalIncludingTax?.value;\n totalProps['currency'] = item.rowTotalIncludingTax?.currency;\n totalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore\n totalProps['data-testid'] = 'including-tax-item-total';\n\n if (discountProps) {\n totalProps['amount'] = item.total?.value;\n totalProps['currency'] = item.total?.currency;\n\n discountProps['amount'] = item.rowTotalIncludingTax?.value;\n discountProps['currency'] = item.rowTotalIncludingTax?.currency;\n discountProps['sale'] = true;\n discountProps['aria-label'] = dictionary.discountedPrice;\n // @ts-ignore\n discountProps['data-testid'] = 'discount-total';\n }\n } else {\n totalProps['amount'] = item.total?.value;\n totalProps['currency'] = item.total?.currency;\n totalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore\n totalProps['data-testid'] = 'regular-item-total';\n\n if (discountProps) {\n discountProps['amount'] = item.discountedTotal?.value;\n discountProps['currency'] = item.discountedTotal?.currency;\n discountProps['sale'] = true;\n discountProps['aria-label'] = dictionary.regularPrice;\n // @ts-ignore\n discountProps['data-testid'] = 'discount-total';\n }\n }\n\n return {\n totalProps,\n discountProps,\n };\n };\n\n const getWarning = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('warning')) {\n return undefined;\n }\n\n const error = itemsErrors.get(item.uid);\n const quantityError = itemsErrors\n .get(item.uid)\n ?.includes('The requested qty is not available');\n const itemIsLoading = itemsLoading.has(item.uid);\n\n const insufficientQuantityText =\n item.insufficientQuantity && item.stockLevel\n ? item.stockLevel === 'noNumber'\n ? dictionary.insufficientQuantityGeneral\n : dictionary.insufficientQuantity\n .replace('{inventory}', item.stockLevel?.toString())\n .replace('{count}', item.quantity.toString())\n : '';\n\n const lowInventoryText =\n item.lowInventory &&\n item.onlyXLeftInStock &&\n dictionary.lowInventory.replace(\n '{count}',\n item.onlyXLeftInStock?.toString()\n );\n\n const notAvailableQuantity =\n !item.outOfStock && error && quantityError\n ? dictionary.notAvailableMessage\n : error;\n\n return !itemIsLoading &&\n (error || item.insufficientQuantity || item.lowInventory) ? (\n <span data-testid=\"item-warning\">\n <Icon source={WarningWithCircle} size={'16'} />\n {notAvailableQuantity || insufficientQuantityText || lowInventoryText}\n </span>\n ) : undefined;\n };\n\n const getAlert = (item: CartModel['items'][0]) => {\n if (attributesToHide?.includes('alert')) {\n return undefined;\n }\n const itemIsLoading = itemsLoading.has(item.uid);\n\n return !itemIsLoading && item.outOfStock ? (\n <span data-testid=\"item-alert\">\n <Icon source={OrderError} size={'16'} />\n {dictionary.outOfStockAlert}\n </span>\n ) : undefined;\n };\n\n const getProductAttributes = (item: CartModel['items'][0]) => {\n return (\n <Slot\n name=\"ProductAttributes\"\n slot={slots?.ProductAttributes}\n context={{\n item,\n }}\n />\n );\n };\n\n const getSku = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('sku')) {\n return undefined;\n }\n return <span data-testid=\"cart-list-item-sku\">{item.sku}</span>;\n };\n\n const getFooter = (item: CartModel['items'][0]) => {\n return (\n <Slot\n name=\"Footer\"\n slot={slots?.Footer}\n context={{ item, handleItemsLoading, handleItemsError, onItemUpdate }}\n />\n );\n };\n\n // Re-usable function to get a filtered list of cart items\n const getCartItemEntries = (\n filterCallback: (item: CartModel['items'][0]) => boolean\n ) => {\n return cartModelData?.totalQuantity\n ? cartModelData.items.filter(filterCallback).map((item, index) => {\n const { totalProps, discountProps } = getTotalPriceProps(item);\n\n const defaultCartItem = (\n <CartItem\n updating={itemsLoading?.has(item.uid)}\n loading={loading}\n key={item.uid}\n data-testid={`cart-list-item-entry-${item.uid}`}\n image={getImage(item, index)}\n title={getTitle(item)}\n sku={getSku(item)}\n price={\n attributesToHide.includes('price') ? undefined : (\n <Price {...getPriceProps(item)} />\n )\n }\n quantity={\n attributesToHide.includes('quantity')\n ? undefined\n : item.quantity\n }\n total={\n <>\n {attributesToHide.includes('total') ? undefined : (\n <Price {...totalProps} />\n )}\n {attributesToHide.includes('totalDiscount')\n ? undefined\n : discountProps && <Price {...discountProps} />}\n </>\n }\n attributes={getProductAttributes(item)}\n configurations={getConfiguration(item)}\n totalExcludingTax={\n attributesToHide.includes('totalExcludingTax')\n ? undefined\n : getTotalExcludingTax(item)\n }\n taxIncluded={cartTaxesConfig?.price === 'INCLUDING_TAX'}\n taxExcluded={\n !attributesToHide.includes('totalExcludingTax') &&\n cartTaxesConfig?.price === 'INCLUDING_EXCLUDING_TAX'\n }\n warning={getWarning(item)}\n alert={getAlert(item)}\n quantityType={quantityType}\n dropdownOptions={dropdownOptions}\n onQuantity={\n enableUpdateItemQuantity\n ? (newQuantity) => {\n handleItemQuantityUpdate(item, newQuantity);\n }\n : undefined\n }\n onRemove={\n enableRemoveItem\n ? () => handleItemQuantityUpdate(item, 0)\n : undefined\n }\n discount={\n showDiscount && item.discounted && item.discountPercentage ? (\n <div data-testid=\"item-discount-percent\">\n {dictionary.discountPercent.replace(\n '{discount}',\n item.discountPercentage?.toString() ?? ''\n )}\n </div>\n ) : undefined\n }\n savings={\n showSavings && item.discounted && item.savingsAmount ? (\n <div>\n <span>\n <Price {...getSavingsAmount(item)} />\n </span>\n &nbsp;\n {dictionary.savingsAmount}\n </div>\n ) : undefined\n }\n footer={getFooter(item)}\n />\n );\n\n return (\n <Slot\n key={item.uid}\n name=\"CartItem\"\n slot={slots?.CartItem}\n context={{\n item,\n index,\n enableUpdateItemQuantity,\n enableRemoveItem,\n itemsLoading,\n loading,\n attributesToHide,\n cartTaxesConfig,\n quantityType,\n dropdownOptions,\n showDiscount,\n showSavings,\n dictionary,\n getImage,\n getTitle,\n getSku,\n getPriceProps,\n getTotalPriceProps,\n getProductAttributes,\n getConfiguration,\n getTotalExcludingTax,\n getWarning,\n getAlert,\n getFooter,\n getSavingsAmount\n }}\n >\n {defaultCartItem}\n </Slot>\n );\n })\n : null;\n };\n\n const emptyCart = (\n <Slot name=\"EmptyCart\" slot={slots?.EmptyCart} context={{}}>\n <EmptyCart data-testid=\"empty-cart\" ctaLinkURL={routeEmptyCartCTA?.()} />\n </Slot>\n );\n\n const heading = (\n <Slot\n name=\"Heading\"\n slot={slots?.Heading}\n context={{\n count: cartModelData?.totalQuantity,\n }}\n >\n <div data-testid=\"default-cart-heading\">\n {dictionary.heading.replace(\n '({count})',\n cartModelData?.totalQuantity\n ? `(${cartModelData?.totalQuantity.toString()})`\n : ''\n )}\n </div>\n </Slot>\n );\n\n // Heading Section text for screen reader\n const headingSection = heading.props.children.props.children;\n\n // Out of Stock Items\n const handleRemoveOutOfStockItems = () => {\n const outOfStockItems = cartModelData?.items.filter(\n (item) => item.outOfStock\n );\n\n outOfStockItems?.forEach((item) => {\n handleItemQuantityUpdate(item, 0);\n });\n };\n\n const outOfStockEntries = getCartItemEntries(\n (item) => item.outOfStock || item.insufficientQuantity || false\n );\n\n const outOfStockMessage = cartModelData?.hasOutOfStockItems ? (\n <InLineAlert\n data-testid=\"cart-out-of-stock-message\"\n icon={<Icon source={OrderError} size={'16'} />}\n itemList={\n <CartList data-testid=\"out-of-stock-cart-items\">\n {outOfStockEntries}\n </CartList>\n }\n type=\"warning\"\n heading={dictionary.outOfStockHeading}\n description={dictionary.outOfStockDescription}\n variant=\"primary\"\n actionButtonPosition=\"bottom\"\n additionalActions={\n cartModelData?.hasFullyOutOfStockItems && enableRemoveItem\n ? [\n {\n label: dictionary.removeAction,\n onClick: handleRemoveOutOfStockItems,\n },\n ]\n : undefined\n }\n />\n ) : undefined;\n\n // Main Product Entries\n const mainProductEntries = getCartItemEntries(\n (item) => !item.outOfStock && !item.insufficientQuantity\n );\n\n const numOfVisibleItems = displayMaxItems\n ? Math.max(maxItems || 5, 5)\n : Math.min(cartModelData?.totalQuantity || 5, 5);\n\n const hasHiddenItems = cartModelData?.totalQuantity > numOfVisibleItems;\n\n const canDisplayMoreItems =\n hasHiddenItems && !displayMaxItems && numOfVisibleItems != maxItems;\n\n const footerActions =\n cartModelData?.totalQuantity && mainProductEntries ? (\n <Slot\n name=\"Footer\"\n slot={slots?.CartSummaryFooter}\n context={{ displayMaxItems, routeCart }}\n data-testid=\"cart-cart-summary-footer-slot\"\n className=\"cart-cart-summary-footer\"\n >\n {hasHiddenItems ? (\n canDisplayMoreItems ? (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n onClick={handleMaxItemsView}\n data-testid=\"view-more-items-button\"\n variant=\"tertiary\"\n >\n {dictionary.viewMore}\n </Button>\n ) : (\n routeCart && (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n href={routeCart()}\n variant=\"tertiary\"\n data-testid=\"view-cart-or-less-items-button\"\n >\n {dictionary.viewAll}\n </Button>\n )\n )\n ) : (\n routeCart && (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n href={routeCart()}\n variant=\"tertiary\"\n data-testid=\"view-cart-button\"\n >\n {dictionary.viewAll}\n </Button>\n )\n )}\n </Slot>\n ) : null;\n\n // Product Entries - Min 5 items to display per UX request\n const productEntries = cartModelData?.totalQuantity\n ? ((\n <CartList data-testid=\"cart-list\">\n {mainProductEntries?.slice(\n 0,\n displayMaxItems\n ? Math.max(!maxItems ? cartModelData?.totalQuantity : maxItems, 5)\n : Math.min(maxItems ?? 5, 5)\n )}\n </CartList>\n ) as VNode | null)\n : null;\n\n return accordion ? (\n <Accordion\n data-testid=\"cart-summary-list-accordion\"\n className={classes([\n `cart-cart-summary-list-accordion`,\n `cart-cart-summary-list__background--${variant}`,\n ])}\n iconOpen={ChevronRight}\n iconClose={ChevronDown}\n >\n <AccordionSection\n title={headingSection}\n data-testid=\"cart-summary-list-accordion__section\"\n open={true}\n renderContentWhenClosed={true}\n >\n <CartSummaryListComponent\n {...props}\n aria-expanded={true}\n aria-label={'TEST'}\n className={`cart-cart-summary-list-accordion__list`}\n loading={loading}\n footer={\n hideFooter\n ? undefined\n : footerActions || (routeCart ? footerActions : undefined)\n }\n emptyCart={emptyCart}\n products={productEntries}\n outOfStockMessage={outOfStockMessage}\n variant={variant}\n />\n </AccordionSection>\n </Accordion>\n ) : (\n <CartSummaryListComponent\n {...props}\n heading={hideHeading ? undefined : heading}\n footer={\n hideFooter\n ? undefined\n : footerActions || (routeCart ? footerActions : undefined)\n }\n loading={loading}\n emptyCart={emptyCart}\n products={productEntries}\n outOfStockMessage={outOfStockMessage}\n variant={variant}\n />\n );\n};\n\nCartSummaryList.getInitialData = async function () {\n return getPersistedCartData();\n};\n"],"names":["SvgChevronRight","props","React","CartSummaryList","className","children","heading","footer","emptyCart","products","outOfStockMessage","variant","loading","jsx","classes","CartSummaryListSkeleton","jsxs","Fragment","VComponent","Divider","Skeleton","SkeletonRow","initialData","hideHeading","hideFooter","routeProduct","routeEmptyCartCTA","routeCart","onItemUpdate","onItemRemove","maxItems","slots","attributesToHide","enableRemoveItem","enableUpdateItemQuantity","onItemsErrorsChange","accordion","isLoading","showMaxItems","showDiscount","showSavings","quantityType","dropdownOptions","setLoading","useState","cartModelData","setCartModelData","itemsLoading","setItemLoading","itemsErrors","setItemErrors","cartTaxesConfig","_a","state","displayMaxItems","setDisplayMaxItems","dictionary","useText","handleItemsLoading","uid","prev","handleItemsError","message","handleItemQuantityUpdate","item","quantity","updateProductsFromCart","error","handleMaxItemsView","useCallback","useEffect","cartDataEvent","events","payload","getImage","index","defaultImageProps","imageComponent","Image","Slot","getTitle","getConfiguration","configuration","getPriceProps","_b","_c","_d","getSavingsAmount","getTotalExcludingTax","Price","getTotalPriceProps","totalProps","discountProps","_e","_f","_g","_h","_i","_j","getWarning","quantityError","itemIsLoading","insufficientQuantityText","lowInventoryText","notAvailableQuantity","Icon","WarningWithCircle","getAlert","OrderError","getProductAttributes","getSku","getFooter","getCartItemEntries","filterCallback","defaultCartItem","CartItem","newQuantity","EmptyCart","headingSection","handleRemoveOutOfStockItems","outOfStockItems","outOfStockEntries","InLineAlert","CartList","mainProductEntries","numOfVisibleItems","hasHiddenItems","canDisplayMoreItems","footerActions","Button","productEntries","Accordion","ChevronRight","ChevronDown","AccordionSection","CartSummaryListComponent","getPersistedCartData"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"CartSummaryList.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/ChevronRight.svg","/@dropins/storefront-cart/src/components/CartSummaryList/CartSummaryList.tsx","/@dropins/storefront-cart/src/containers/CartSummaryList/CartSummaryList.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronRight = (props) => /* @__PURE__ */ React.createElement(\"svg\", { id: \"Icon_Chevron_right_Base\", \"data-name\": \"Icon \\\\u2013 Chevron right \\\\u2013 Base\", xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", ...props }, /* @__PURE__ */ React.createElement(\"g\", { id: \"Large\" }, /* @__PURE__ */ React.createElement(\"rect\", { id: \"Placement_area\", \"data-name\": \"Placement area\", width: 24, height: 24, fill: \"#fff\", opacity: 0 }), /* @__PURE__ */ React.createElement(\"g\", { id: \"Chevron_right_icon\", \"data-name\": \"Chevron right icon\" }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", id: \"chevron\", d: \"M199.75,367.5l4.255,-4.255-4.255,-4.255\", transform: \"translate(-189.25 -351.0)\", fill: \"none\", stroke: \"currentColor\" }))));\nexport default SvgChevronRight;\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { Divider, Skeleton, SkeletonRow } from '@adobe-commerce/elsie/components';\n\nimport '@/cart/components/CartSummaryList/CartSummaryList.css';\nexport interface CartSummaryListProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n heading?: VNode | null;\n footer?: VNode | null;\n emptyCart: VNode;\n products?: VNode | null;\n outOfStockMessage?: VNode | null;\n loading?: boolean;\n variant?: 'primary' | 'secondary';\n}\n\nexport const CartSummaryList: FunctionComponent<CartSummaryListProps> = ({\n className,\n children,\n heading,\n footer,\n emptyCart,\n products,\n outOfStockMessage,\n variant = 'primary',\n loading = true,\n ...props\n}) => {\n return (\n <div\n {...props}\n className={classes([\n 'cart-cart-summary-list',\n className,\n `cart-cart-summary-list__background--${variant}`,\n ])}\n >\n {loading ? (\n <CartSummaryListSkeleton />\n ) : (\n <>\n {(heading || outOfStockMessage) && (\n <div\n data-testid=\"cart-summary-list-heading-wrapper\"\n className={classes([\n 'cart-cart-summary-list__heading',\n ['cart-cart-summary-list__heading--full-width', !products],\n ])}\n >\n {heading && (\n <>\n <VComponent\n node={heading}\n className=\"cart-cart-summary-list__heading-text\"\n />\n <Divider\n variant=\"primary\"\n className={classes([\n 'cart-cart-summary-list__heading-divider',\n ])}\n />\n </>\n )}\n\n {outOfStockMessage && (\n <VComponent\n node={outOfStockMessage}\n className=\"cart-cart-summary-list__out-of-stock-message\"\n />\n )}\n </div>\n )}\n <div\n className={classes([\n 'cart-cart-summary-list__content',\n ['cart-cart-summary-list__content--empty', !products],\n ])}\n >\n {products || (\n <VComponent\n node={emptyCart}\n className=\"cart-cart-summary-list__empty-cart\"\n />\n )}\n </div>\n\n {footer && (\n <>\n <Divider\n variant=\"primary\"\n className={classes(['cart-cart-summary-list__footer-divider'])}\n />\n <VComponent\n node={footer}\n className=\"cart-cart-summary-list__footer-text\"\n />\n </>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst CartSummaryListSkeleton: FunctionComponent = () => {\n return (\n <Skeleton\n data-testid=\"cart-summary-list-skeleton\"\n className=\"cart-cart-summary-list__skeleton\"\n rowGap=\"medium\"\n >\n <SkeletonRow\n variant=\"row\"\n size=\"xlarge\"\n fullWidth={true}\n lines={3}\n multilineGap=\"small\"\n />\n </Skeleton>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n useImperativeHandle,\n forwardRef,\n} from 'preact/compat';\nimport { Container, Slot, SlotProps, classes } from '@adobe-commerce/elsie/lib';\n\nimport {\n CartSummaryList as CartSummaryListComponent,\n EmptyCart,\n} from '@/cart/components';\n\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\nimport { CartModel } from '@/cart/data/models/cart-model';\nimport {\n Accordion,\n AccordionSection,\n Button,\n CartItem,\n CartList,\n Icon,\n Image,\n ImageProps,\n InLineAlert,\n Price,\n PriceProps,\n} from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { VNode } from 'preact';\nimport { events, Cart } from '@adobe-commerce/event-bus';\nimport { state } from '@/cart/lib/state';\nimport {\n ChevronDown,\n ChevronRight,\n OrderError,\n WarningWithCircle,\n} from '@adobe-commerce/elsie/icons';\nimport { updateProductsFromCart } from '@/cart/api';\nimport { addProductsToCart } from '@/cart/api/addProductsToCart/addProductsToCart';\n\nexport interface CartSummaryListProps extends HTMLAttributes<HTMLDivElement> {\n hideHeading?: boolean;\n hideFooter?: boolean;\n routeProduct?: (item: CartModel['items'][0]) => string;\n routeEmptyCartCTA?: () => string;\n routeCart?: () => string;\n onItemUpdate?: ({ item }: { item: CartModel['items'][0] }) => void;\n onItemRemove?: ({ item }: { item: CartModel['items'][0] }) => void;\n maxItems?: number; // Maximum number of items to display\n showMaxItems?: boolean;\n attributesToHide?: SwitchableAttributes[]; // Product attributes to hide\n slots?: {\n Heading?: SlotProps;\n EmptyCart?: SlotProps;\n Footer?: SlotProps;\n Thumbnail?: SlotProps<{\n item: CartModel['items'][number];\n defaultImageProps: ImageProps;\n }>;\n ProductAttributes?: SlotProps;\n CartSummaryFooter?: SlotProps;\n CartItem?: SlotProps;\n UndoBanner?: SlotProps<{\n item: CartModel['items'][0];\n loading: boolean;\n error?: string;\n onUndo: () => void;\n onDismiss: () => void;\n }>;\n };\n enableRemoveItem?: boolean;\n enableUpdateItemQuantity?: boolean;\n onItemsErrorsChange?: (errors: Map<string, string>) => void;\n accordion?: boolean;\n variant?: 'primary' | 'secondary';\n isLoading?: boolean;\n showDiscount?: boolean;\n showSavings?: boolean;\n quantityType?: 'stepper' | 'dropdown';\n dropdownOptions?: { value: string; text: string }[];\n undo?: boolean;\n /**\n * TEST ONLY: Allows test to inject recentlyRemovedItems for coverage\n */\n __testRecentlyRemovedItems?: Array<{\n item: CartModel['items'][0];\n index: number;\n loading: boolean;\n error?: string;\n beingRemoved?: boolean;\n }>;\n}\n\n// Attributes that can be hidden or shown\nexport type SwitchableAttributes =\n | 'name'\n | 'image'\n | 'configurations'\n | 'warning'\n | 'alert'\n | 'sku'\n | 'price'\n | 'quantity'\n | 'total'\n | 'totalDiscount'\n | 'totalExcludingTax';\n\n// Ref interface for exposing functions to tests\nexport interface CartSummaryListRef {\n handleUndo: (uid: string) => Promise<void>;\n}\n\nexport const CartSummaryList: Container<\n CartSummaryListProps,\n CartModel | null\n> = forwardRef<\n CartSummaryListRef,\n CartSummaryListProps & { initialData?: CartModel | null }\n>(\n (\n {\n initialData = null,\n hideHeading,\n hideFooter,\n routeProduct,\n routeEmptyCartCTA,\n routeCart,\n onItemUpdate,\n onItemRemove,\n maxItems, //if maxItems is not provided, default to show all items\n slots,\n attributesToHide = [],\n enableRemoveItem,\n enableUpdateItemQuantity,\n onItemsErrorsChange,\n accordion = false,\n variant = 'primary',\n isLoading,\n showMaxItems,\n\n showDiscount,\n showSavings,\n quantityType,\n dropdownOptions,\n undo = false,\n __testRecentlyRemovedItems,\n ...props\n },\n ref\n ) => {\n const [loading, setLoading] = useState(!initialData);\n\n const [cartModelData, setCartModelData] = useState<CartModel | null>(\n initialData\n );\n const [itemsLoading, setItemLoading] = useState<Set<string>>(new Set());\n\n const [itemsErrors, setItemErrors] = useState<Map<string, string>>(\n new Map()\n );\n\n const [recentlyRemovedItems, setRecentlyRemovedItems] = useState<\n {\n item: CartModel['items'][0];\n index: number;\n loading: boolean;\n error?: string;\n beingRemoved?: boolean;\n }[]\n >(__testRecentlyRemovedItems || []);\n\n // TEST ONLY: allow test to update recentlyRemovedItems after mount\n useEffect(() => {\n if (\n process.env.NODE_ENV === 'test' &&\n __testRecentlyRemovedItems &&\n recentlyRemovedItems !== __testRecentlyRemovedItems\n ) {\n setRecentlyRemovedItems(__testRecentlyRemovedItems);\n }\n }, [__testRecentlyRemovedItems, recentlyRemovedItems]);\n\n const cartTaxesConfig = state.config?.shoppingCartDisplaySetting;\n\n const [displayMaxItems, setDisplayMaxItems] = useState<boolean>(\n showMaxItems ? true : !maxItems && !showMaxItems\n );\n\n const dictionary = useText({\n file: 'Cart.CartItem.file',\n files: 'Cart.CartItem.files',\n heading: 'Cart.Cart.heading',\n message: 'Cart.CartItem.message',\n recipient: 'Cart.CartItem.recipient',\n regularPrice: 'Cart.CartItem.regularPrice',\n discountedPrice: 'Cart.CartItem.discountedPrice',\n sender: 'Cart.CartItem.sender',\n lowInventory: 'Cart.CartItem.lowInventory',\n insufficientQuantity: 'Cart.CartItem.insufficientQuantity',\n insufficientQuantityGeneral: 'Cart.CartItem.insufficientQuantityGeneral',\n outOfStockHeading: 'Cart.OutOfStockMessage.heading',\n outOfStockDescription: 'Cart.OutOfStockMessage.message',\n outOfStockAlert: 'Cart.OutOfStockMessage.alert',\n removeAction: 'Cart.OutOfStockMessage.action',\n notAvailableMessage: 'Cart.CartItem.notAvailableMessage',\n viewMore: 'Cart.Cart.viewMore',\n viewAll: 'Cart.Cart.viewAll',\n discountPercent: 'Cart.CartItem.discountPercentage',\n savingsAmount: 'Cart.CartItem.savingsAmount',\n itemBeingRemoved: 'Cart.CartItem.itemBeingRemoved',\n itemRemoved: 'Cart.CartItem.itemRemoved',\n itemRemovedDescription: 'Cart.CartItem.itemRemovedDescription',\n undoAction: 'Cart.CartItem.undoAction',\n dismissAction: 'Cart.CartItem.dismissAction',\n });\n\n const handleItemsLoading = (uid: string, state: boolean) => {\n setItemLoading((prev) => {\n state ? prev.add(uid) : prev.delete(uid);\n return new Set(prev);\n });\n };\n\n const handleItemsError = (uid: string, message?: string) => {\n setItemErrors((prev) => {\n message ? prev.set(uid, message) : prev.delete(uid);\n return new Map(prev);\n });\n };\n\n // Helper to add to recently removed items for undo\n function addToRecentlyRemovedItems(uid: string) {\n const cart = getPersistedCartData();\n const item = cart?.items.find((i) => i.uid === uid);\n if (item) {\n setRecentlyRemovedItems((prev) => {\n const index = cart.items.findIndex((i) => i.uid === uid);\n if (index !== -1 && !prev.some((r) => r.item.uid === uid)) {\n // Emit the event for analytics or listeners\n events.emit('cart/product/removed', { item, index });\n return [\n ...prev,\n { item, index, error: undefined, beingRemoved: true },\n ];\n }\n return prev;\n });\n }\n }\n\n const handleItemQuantityUpdate = (\n item: CartModel['items'][0],\n quantity: number\n ) => {\n // initial values\n handleItemsLoading(item.uid, true);\n\n // Reset temporary error messages\n setItemErrors(new Map());\n\n if (enableRemoveItem && quantity === 0) {\n // Add to recently removed items for undo\n addToRecentlyRemovedItems(item.uid);\n // use callback for removing (original logic)\n updateProductsFromCart([{ uid: item.uid, quantity }])\n .then(() => {\n onItemRemove?.({ item });\n })\n .finally(() => {\n handleItemsLoading(item.uid, false);\n setRecentlyRemovedItems((prev) =>\n prev.map((r) =>\n r.item.uid === item.uid ? { ...r, beingRemoved: false } : r\n )\n );\n })\n .catch((error: any) => {\n console.warn(error);\n });\n }\n // use callback for updating\n else {\n enableUpdateItemQuantity &&\n updateProductsFromCart([{ uid: item.uid, quantity }])\n .then(() => {\n onItemUpdate?.({ item });\n })\n .finally(() => {\n handleItemsLoading(item.uid, false);\n })\n .catch((error: Error) => {\n handleItemsError(item.uid, error.message);\n });\n }\n };\n\n const handleDismiss = (uid: string) => {\n setRecentlyRemovedItems((prev) => prev.filter((r) => r.item.uid !== uid));\n };\n\n // Display max items\n const handleMaxItemsView = useCallback(() => {\n setDisplayMaxItems((prev) => !prev);\n }, []);\n\n useEffect(() => {\n const cartDataEvent = events.on(\n 'cart/data',\n (payload: Cart | null) => {\n setCartModelData(payload as CartModel);\n setLoading(!!isLoading);\n },\n { eager: true }\n );\n\n return () => {\n cartDataEvent?.off();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Clear recently removed items when undo is disabled\n useEffect(() => {\n if (!undo) {\n setRecentlyRemovedItems([]);\n }\n }, [undo]);\n\n // Call onItemsErrorsChange whenever itemsErrors changes\n useEffect(() => {\n if (onItemsErrorsChange) {\n onItemsErrorsChange(itemsErrors);\n }\n }, [itemsErrors, onItemsErrorsChange]);\n\n // Helper functions\n const getImage = (item: CartModel['items'][0], index: number) => {\n if (attributesToHide.includes('image')) {\n return undefined;\n }\n\n const defaultImageProps: ImageProps = {\n loading: index < 4 ? 'eager' : 'lazy',\n src: item.image.src,\n alt: item.image.alt,\n width: '300',\n height: '300',\n params: { width: 300 },\n };\n\n const imageComponent = (\n <Image data-testid=\"cart-list-item-image\" {...defaultImageProps} />\n );\n return (\n <Slot\n name=\"Thumbnail\"\n slot={slots?.Thumbnail}\n context={{\n item,\n defaultImageProps,\n }}\n >\n {routeProduct ? (\n <a href={routeProduct(item)}>{imageComponent}</a>\n ) : (\n imageComponent\n )}\n </Slot>\n );\n };\n\n const getTitle = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('name')) {\n return undefined;\n }\n\n return (\n <span data-testid=\"cart-list-item-title\">\n {routeProduct ? (\n <a href={routeProduct(item)}>{item.name}</a>\n ) : (\n item.name\n )}\n </span>\n );\n };\n\n const getConfiguration = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('configurations')) {\n return undefined;\n }\n\n const configuration = {\n ...item.bundleOptions,\n ...item.selectedOptions,\n ...item.customizableOptions,\n ...(item.recipient ? { [dictionary.recipient]: item.recipient } : null),\n ...(item.recipientEmail && item.recipient\n ? {\n [dictionary.recipient]: `${item.recipient} (${item.recipientEmail})`,\n }\n : null),\n ...(item.sender ? { [dictionary.sender]: item.sender } : null),\n ...(item.senderEmail && item.sender\n ? {\n [dictionary.sender]: `${item.sender} (${item.senderEmail})`,\n }\n : {}),\n ...(item.message ? { [dictionary.message]: item.message } : null),\n ...(item.links && item.links.count\n ? item.links.count > 1\n ? {\n [dictionary.files.replace(\n '{count}',\n item.links.count.toString()\n )]: item.links.result,\n }\n : {\n [dictionary.file.replace(\n '{count}',\n item.links.count.toString()\n )]: item.links.result,\n }\n : null),\n };\n\n if (Object.keys(configuration).length === 0) {\n return undefined;\n }\n\n return configuration;\n };\n\n const getPriceProps = (item: CartModel['items'][0]) => {\n return cartTaxesConfig?.price === 'INCLUDING_TAX'\n ? item.discounted\n ? {\n amount: item.regularPrice.value,\n currency: item.regularPrice.currency,\n style: { font: 'inherit' },\n 'data-testid': 'including-tax-item-price',\n }\n : {\n amount: item.taxedPrice?.value,\n currency: item.taxedPrice?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'including-tax-item-price',\n }\n : {\n amount: item.regularPrice?.value,\n currency: item.regularPrice?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'regular-item-price',\n };\n };\n\n const getSavingsAmount = (item: CartModel['items'][0]) => {\n return {\n amount: item.savingsAmount?.value,\n currency: item.savingsAmount?.currency,\n style: { font: 'inherit' },\n 'data-testid': 'item-savings-amount',\n };\n };\n\n const getTotalExcludingTax = (item: CartModel['items'][0]) => {\n return cartTaxesConfig?.price === 'INCLUDING_EXCLUDING_TAX' ? (\n <Price\n amount={item.rowTotal.value}\n currency={item.rowTotal.currency}\n data-testid=\"excluding-tax-total\"\n aria-label={dictionary.regularPrice}\n />\n ) : undefined;\n };\n\n const getTotalPriceProps = (item: CartModel['items'][0]) => {\n const totalProps: PriceProps = {\n 'aria-label': dictionary.regularPrice,\n };\n const discountProps: PriceProps | null = item.discounted ? {} : null;\n\n if (\n ['INCLUDING_TAX', 'INCLUDING_EXCLUDING_TAX'].includes(\n cartTaxesConfig?.price as string\n )\n ) {\n totalProps['amount'] = item.rowTotalIncludingTax?.value;\n totalProps['currency'] = item.rowTotalIncludingTax?.currency;\n totalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore\n totalProps['data-testid'] = 'including-tax-item-total';\n\n if (discountProps) {\n totalProps['amount'] = item.total?.value;\n totalProps['currency'] = item.total?.currency;\n\n discountProps['amount'] = item.rowTotalIncludingTax?.value;\n discountProps['currency'] = item.rowTotalIncludingTax?.currency;\n discountProps['sale'] = true;\n discountProps['aria-label'] = dictionary.discountedPrice;\n // @ts-ignore\n discountProps['data-testid'] = 'discount-total';\n }\n } else {\n totalProps['amount'] = item.total?.value;\n totalProps['currency'] = item.total?.currency;\n totalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore\n totalProps['data-testid'] = 'regular-item-total';\n\n if (discountProps) {\n discountProps['amount'] = item.discountedTotal?.value;\n discountProps['currency'] = item.discountedTotal?.currency;\n discountProps['sale'] = true;\n discountProps['aria-label'] = dictionary.regularPrice;\n // @ts-ignore\n discountProps['data-testid'] = 'discount-total';\n }\n }\n\n return {\n totalProps,\n discountProps,\n };\n };\n\n const getWarning = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('warning')) {\n return undefined;\n }\n\n const error = itemsErrors.get(item.uid);\n const quantityError = itemsErrors\n .get(item.uid)\n ?.includes('The requested qty is not available');\n const itemIsLoading = itemsLoading.has(item.uid);\n\n const insufficientQuantityText =\n item.insufficientQuantity && item.stockLevel\n ? item.stockLevel === 'noNumber'\n ? dictionary.insufficientQuantityGeneral\n : dictionary.insufficientQuantity\n .replace('{inventory}', item.stockLevel?.toString())\n .replace('{count}', item.quantity.toString())\n : '';\n\n const lowInventoryText =\n item.lowInventory &&\n item.onlyXLeftInStock &&\n dictionary.lowInventory.replace(\n '{count}',\n item.onlyXLeftInStock?.toString()\n );\n\n const notAvailableQuantity =\n !item.outOfStock && error && quantityError\n ? dictionary.notAvailableMessage\n : error;\n\n return !itemIsLoading &&\n (error || item.insufficientQuantity || item.lowInventory) ? (\n <span data-testid=\"item-warning\">\n <Icon source={WarningWithCircle} size={'16'} />\n {notAvailableQuantity || insufficientQuantityText || lowInventoryText}\n </span>\n ) : undefined;\n };\n\n const getAlert = (item: CartModel['items'][0]) => {\n if (attributesToHide?.includes('alert')) {\n return undefined;\n }\n const itemIsLoading = itemsLoading.has(item.uid);\n\n return !itemIsLoading && item.outOfStock ? (\n <span data-testid=\"item-alert\">\n <Icon source={OrderError} size={'16'} />\n {dictionary.outOfStockAlert}\n </span>\n ) : undefined;\n };\n\n const getProductAttributes = (item: CartModel['items'][0]) => {\n return (\n <Slot\n name=\"ProductAttributes\"\n slot={slots?.ProductAttributes}\n context={{\n item,\n }}\n />\n );\n };\n\n const getSku = (item: CartModel['items'][0]) => {\n if (attributesToHide.includes('sku')) {\n return undefined;\n }\n return <span data-testid=\"cart-list-item-sku\">{item.sku}</span>;\n };\n\n const getFooter = (item: CartModel['items'][0]) => {\n return (\n <Slot\n name=\"Footer\"\n slot={slots?.Footer}\n context={{ item, handleItemsLoading, handleItemsError, onItemUpdate }}\n />\n );\n };\n\n // Re-usable function to get a filtered list of cart items\n const getCartItemEntries = (\n filterCallback: (item: CartModel['items'][0]) => boolean\n ) => {\n return cartModelData?.totalQuantity\n ? cartModelData.items.filter(filterCallback).map((item, index) => {\n const { totalProps, discountProps } = getTotalPriceProps(item);\n\n const defaultCartItem = (\n <CartItem\n updating={itemsLoading?.has(item.uid)}\n loading={loading}\n key={item.uid}\n data-testid={`cart-list-item-entry-${item.uid}`}\n image={getImage(item, index)}\n title={getTitle(item)}\n sku={getSku(item)}\n price={\n attributesToHide.includes('price') ? undefined : (\n <Price {...getPriceProps(item)} />\n )\n }\n quantity={\n attributesToHide.includes('quantity')\n ? undefined\n : item.quantity\n }\n total={\n <>\n {attributesToHide.includes('total') ? undefined : (\n <Price {...totalProps} />\n )}\n {attributesToHide.includes('totalDiscount')\n ? undefined\n : discountProps && <Price {...discountProps} />}\n </>\n }\n attributes={getProductAttributes(item)}\n configurations={getConfiguration(item)}\n totalExcludingTax={\n attributesToHide.includes('totalExcludingTax')\n ? undefined\n : getTotalExcludingTax(item)\n }\n taxIncluded={cartTaxesConfig?.price === 'INCLUDING_TAX'}\n taxExcluded={\n !attributesToHide.includes('totalExcludingTax') &&\n cartTaxesConfig?.price === 'INCLUDING_EXCLUDING_TAX'\n }\n warning={getWarning(item)}\n alert={getAlert(item)}\n quantityType={quantityType}\n dropdownOptions={dropdownOptions}\n onQuantity={\n enableUpdateItemQuantity && !itemsLoading.has(item.uid)\n ? (newQuantity) => {\n handleItemQuantityUpdate(item, newQuantity);\n }\n : undefined\n }\n onRemove={\n enableRemoveItem && !itemsLoading.has(item.uid)\n ? () => handleItemQuantityUpdate(item, 0)\n : undefined\n }\n discount={\n showDiscount && item.discounted && item.discountPercentage ? (\n <div data-testid=\"item-discount-percent\">\n {dictionary.discountPercent.replace(\n '{discount}',\n item.discountPercentage?.toString() ?? ''\n )}\n </div>\n ) : undefined\n }\n savings={\n showSavings && item.discounted && item.savingsAmount ? (\n <div>\n <span>\n <Price {...getSavingsAmount(item)} />\n </span>\n &nbsp;\n {dictionary.savingsAmount}\n </div>\n ) : undefined\n }\n footer={getFooter(item)}\n />\n );\n\n return (\n <Slot\n key={item.uid}\n name=\"CartItem\"\n slot={slots?.CartItem}\n context={{\n item,\n index,\n enableUpdateItemQuantity,\n enableRemoveItem,\n itemsLoading,\n loading,\n attributesToHide,\n cartTaxesConfig,\n quantityType,\n dropdownOptions,\n showDiscount,\n showSavings,\n dictionary,\n getImage,\n getTitle,\n getSku,\n getPriceProps,\n getTotalPriceProps,\n getProductAttributes,\n getConfiguration,\n getTotalExcludingTax,\n getWarning,\n getAlert,\n getFooter,\n getSavingsAmount,\n }}\n >\n {defaultCartItem}\n </Slot>\n );\n })\n : null;\n };\n\n const heading = (\n <Slot\n name=\"Heading\"\n slot={slots?.Heading}\n context={{\n count: cartModelData?.totalQuantity,\n }}\n >\n <div data-testid=\"default-cart-heading\">\n {dictionary.heading.replace(\n '({count})',\n cartModelData?.totalQuantity\n ? `(${cartModelData?.totalQuantity.toString()})`\n : ''\n )}\n </div>\n </Slot>\n );\n\n // Heading Section text for screen reader\n const headingSection = heading.props.children.props.children;\n\n // Out of Stock Items\n const handleRemoveOutOfStockItems = () => {\n const outOfStockItems = cartModelData?.items.filter(\n (item) => item.outOfStock\n );\n\n outOfStockItems?.forEach((item) => {\n handleItemQuantityUpdate(item, 0);\n });\n };\n\n const outOfStockEntries = getCartItemEntries(\n (item) => item.outOfStock || item.insufficientQuantity || false\n );\n\n const outOfStockMessage = cartModelData?.hasOutOfStockItems ? (\n <InLineAlert\n data-testid=\"cart-out-of-stock-message\"\n icon={<Icon source={OrderError} size={'16'} />}\n itemList={\n <CartList data-testid=\"out-of-stock-cart-items\">\n {outOfStockEntries}\n </CartList>\n }\n type=\"warning\"\n heading={dictionary.outOfStockHeading}\n description={dictionary.outOfStockDescription}\n variant=\"primary\"\n actionButtonPosition=\"bottom\"\n additionalActions={\n cartModelData?.hasFullyOutOfStockItems && enableRemoveItem\n ? [\n {\n label: dictionary.removeAction,\n onClick: handleRemoveOutOfStockItems,\n },\n ]\n : undefined\n }\n />\n ) : undefined;\n\n // Main Product Entries\n const mainProductEntries = getCartItemEntries(\n (item) => !item.outOfStock && !item.insufficientQuantity\n );\n\n const numOfVisibleItems = displayMaxItems\n ? Math.max(maxItems || 5, 5)\n : Math.min(cartModelData?.totalQuantity || 5, 5);\n\n const hasHiddenItems = cartModelData?.totalQuantity > numOfVisibleItems;\n\n const canDisplayMoreItems =\n hasHiddenItems && !displayMaxItems && numOfVisibleItems != maxItems;\n\n const footerActions =\n cartModelData?.totalQuantity && mainProductEntries ? (\n <Slot\n name=\"Footer\"\n slot={slots?.CartSummaryFooter}\n context={{ displayMaxItems, routeCart }}\n data-testid=\"cart-cart-summary-footer-slot\"\n className=\"cart-cart-summary-footer\"\n >\n {hasHiddenItems ? (\n canDisplayMoreItems ? (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n onClick={handleMaxItemsView}\n data-testid=\"view-more-items-button\"\n variant=\"tertiary\"\n >\n {dictionary.viewMore}\n </Button>\n ) : (\n routeCart && (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n href={routeCart()}\n variant=\"tertiary\"\n data-testid=\"view-cart-or-less-items-button\"\n >\n {dictionary.viewAll}\n </Button>\n )\n )\n ) : (\n routeCart && (\n <Button\n className=\"cart-cart-summary-list-footer__action\"\n href={routeCart()}\n variant=\"tertiary\"\n data-testid=\"view-cart-button\"\n >\n {dictionary.viewAll}\n </Button>\n )\n )}\n </Slot>\n ) : null;\n\n const renderCartListWithUndoBanners = () => {\n if (!cartModelData?.items) return null;\n const entries: (VNode | null)[] = [];\n const items = cartModelData.items;\n const UndoBanner = slots?.UndoBanner;\n\n // Calculate how many items to show (same logic as original)\n const numItemsToShow = displayMaxItems\n ? Math.max(!maxItems ? cartModelData?.totalQuantity : maxItems, 5)\n : Math.min(maxItems ?? 5, 5);\n\n // Only process items up to the limit\n for (let i = 0; i <= numItemsToShow; i++) {\n // Render undo banners for this index only if undo is enabled\n if (undo) {\n recentlyRemovedItems\n .filter((r) => r.index === i)\n .forEach(({ item, error, beingRemoved }) => {\n const defaultUndoBanner = (\n <InLineAlert\n key={`undo-banner-${item.uid}`}\n type={error ? 'error' : 'info'}\n heading={\n beingRemoved\n ? dictionary.itemBeingRemoved?.replace(\n '{product}',\n item.name\n )\n : dictionary.itemRemoved?.replace('{product}', item.name)\n }\n description={error || dictionary.itemRemovedDescription}\n variant=\"primary\"\n actionButtonPosition=\"bottom\"\n additionalActions={\n beingRemoved\n ? [] // Hide buttons while removing\n : [\n {\n label: dictionary.undoAction,\n onClick: () => handleUndo(item.uid),\n 'aria-label': `${dictionary.undoAction} remove ${item.name}`,\n },\n {\n label: dictionary.dismissAction,\n onClick: () => handleDismiss(item.uid),\n 'aria-label': `${dictionary.dismissAction} undo for ${item.name}`,\n },\n ]\n }\n />\n );\n\n entries.push(\n UndoBanner ? (\n <Slot\n name=\"UndoBanner\"\n slot={UndoBanner}\n context={{\n item,\n loading,\n error,\n onUndo: () => handleUndo(item.uid),\n onDismiss: () => handleDismiss(item.uid),\n }}\n key={`undo-banner-${item.uid}`}\n >\n {defaultUndoBanner}\n </Slot>\n ) : (\n defaultUndoBanner\n )\n );\n });\n }\n // Render cart item if not at the end and within the slice limit\n if (i < numItemsToShow && i < items.length) {\n entries.push(mainProductEntries?.[i] || null);\n }\n }\n return <CartList data-testid=\"cart-list\">{entries}</CartList>;\n };\n // Undo handler implementation\n const handleUndo = useCallback(\n async (uid: string) => {\n setRecentlyRemovedItems((prev) =>\n prev.map((r) =>\n r.item.uid === uid ? { ...r, loading: true, error: undefined } : r\n )\n );\n const removed = recentlyRemovedItems.find((r) => r.item.uid === uid);\n if (!removed) return;\n try {\n await addProductsToCart([\n {\n sku: removed.item.sku,\n parentSku: removed.item.topLevelSku,\n quantity: removed.item.quantity,\n optionsUIDs:\n removed.item.bundleOptionsUIDs || // Use bundle option UIDs for bundle products\n (removed.item.selectedOptionsUIDs\n ? Object.values(removed.item.selectedOptionsUIDs)\n : undefined),\n enteredOptions: removed.item.customizableOptions\n ? Object.entries(removed.item.customizableOptions).map(\n ([uid, value]) => ({ uid, value })\n )\n : undefined,\n },\n ]);\n setRecentlyRemovedItems((prev) =>\n prev.filter((r) => r.item.uid !== uid)\n );\n } catch (error: any) {\n setRecentlyRemovedItems((prev) =>\n prev.map((r) =>\n r.item.uid === uid\n ? { ...r, error: error?.message || 'Failed to restore item.' }\n : r\n )\n );\n }\n },\n [recentlyRemovedItems]\n );\n\n // Expose handleUndo to parent components via ref (for testing)\n useImperativeHandle(\n ref,\n () => ({\n handleUndo,\n }),\n [handleUndo]\n );\n\n // Replace the emptyCart definition with conditional rendering for undo banners\n const emptyCart = (\n <>\n {undo && recentlyRemovedItems.length > 0 ? (\n renderCartListWithUndoBanners()\n ) : (\n <Slot name=\"EmptyCart\" slot={slots?.EmptyCart} context={{}}>\n <EmptyCart\n data-testid=\"empty-cart\"\n ctaLinkURL={routeEmptyCartCTA?.()}\n />\n </Slot>\n )}\n </>\n );\n\n // Choose between original product entries and undo banner version\n const productEntries =\n cartModelData?.totalQuantity ||\n (undo && recentlyRemovedItems.length > 0) ? (\n !undo ? (\n <CartList data-testid=\"cart-list\">\n {mainProductEntries?.slice(\n 0,\n displayMaxItems\n ? Math.max(\n !maxItems ? cartModelData?.totalQuantity : maxItems,\n 5\n )\n : Math.min(maxItems ?? 5, 5)\n )}\n </CartList>\n ) : recentlyRemovedItems.length > 0 ? (\n renderCartListWithUndoBanners()\n ) : (\n <CartList data-testid=\"cart-list\">\n {mainProductEntries?.slice(\n 0,\n displayMaxItems\n ? Math.max(\n !maxItems ? cartModelData?.totalQuantity : maxItems,\n 5\n )\n : Math.min(maxItems ?? 5, 5)\n )}\n </CartList>\n )\n ) : null;\n\n return accordion ? (\n <Accordion\n data-testid=\"cart-summary-list-accordion\"\n className={classes([\n `cart-cart-summary-list-accordion`,\n `cart-cart-summary-list__background--${variant}`,\n ])}\n iconOpen={ChevronRight}\n iconClose={ChevronDown}\n >\n <AccordionSection\n title={headingSection}\n data-testid=\"cart-summary-list-accordion__section\"\n open={true}\n renderContentWhenClosed={true}\n >\n <CartSummaryListComponent\n {...props}\n aria-expanded={true}\n aria-label={'TEST'}\n className={`cart-cart-summary-list-accordion__list`}\n loading={loading}\n footer={\n hideFooter\n ? undefined\n : footerActions || (routeCart ? footerActions : undefined)\n }\n emptyCart={emptyCart}\n products={productEntries}\n outOfStockMessage={outOfStockMessage}\n variant={variant}\n />\n </AccordionSection>\n </Accordion>\n ) : (\n <CartSummaryListComponent\n {...props}\n heading={hideHeading ? undefined : heading}\n footer={\n hideFooter\n ? undefined\n : footerActions || (routeCart ? footerActions : undefined)\n }\n loading={loading}\n emptyCart={emptyCart}\n products={productEntries}\n outOfStockMessage={outOfStockMessage}\n variant={variant}\n />\n );\n }\n);\n\nCartSummaryList.getInitialData = async function () {\n return getPersistedCartData();\n};\n"],"names":["SvgChevronRight","props","React","CartSummaryList","className","children","heading","footer","emptyCart","products","outOfStockMessage","variant","loading","jsx","classes","CartSummaryListSkeleton","jsxs","Fragment","VComponent","Divider","Skeleton","SkeletonRow","forwardRef","initialData","hideHeading","hideFooter","routeProduct","routeEmptyCartCTA","routeCart","onItemUpdate","onItemRemove","maxItems","slots","attributesToHide","enableRemoveItem","enableUpdateItemQuantity","onItemsErrorsChange","accordion","isLoading","showMaxItems","showDiscount","showSavings","quantityType","dropdownOptions","undo","__testRecentlyRemovedItems","ref","setLoading","useState","cartModelData","setCartModelData","itemsLoading","setItemLoading","itemsErrors","setItemErrors","recentlyRemovedItems","setRecentlyRemovedItems","useEffect","cartTaxesConfig","_a","state","displayMaxItems","setDisplayMaxItems","dictionary","useText","handleItemsLoading","uid","prev","handleItemsError","message","addToRecentlyRemovedItems","cart","getPersistedCartData","item","i","index","r","events","handleItemQuantityUpdate","quantity","updateProductsFromCart","error","handleDismiss","handleMaxItemsView","useCallback","cartDataEvent","payload","getImage","defaultImageProps","imageComponent","Image","Slot","getTitle","getConfiguration","configuration","getPriceProps","_b","_c","_d","getSavingsAmount","getTotalExcludingTax","Price","getTotalPriceProps","totalProps","discountProps","_e","_f","_g","_h","_i","_j","getWarning","quantityError","itemIsLoading","insufficientQuantityText","lowInventoryText","notAvailableQuantity","Icon","WarningWithCircle","getAlert","OrderError","getProductAttributes","getSku","getFooter","getCartItemEntries","filterCallback","defaultCartItem","CartItem","newQuantity","headingSection","handleRemoveOutOfStockItems","outOfStockItems","outOfStockEntries","InLineAlert","CartList","mainProductEntries","numOfVisibleItems","hasHiddenItems","canDisplayMoreItems","footerActions","Button","renderCartListWithUndoBanners","entries","items","UndoBanner","numItemsToShow","beingRemoved","defaultUndoBanner","handleUndo","removed","addProductsToCart","value","useImperativeHandle","EmptyCart","productEntries","Accordion","ChevronRight","ChevronDown","AccordionSection","CartSummaryListComponent"],"mappings":"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","x_google_ignoreList":[0]}