@dropins/storefront-cart 1.3.1-alpha2 → 1.4.0-alpha2

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 (102) hide show
  1. package/api/fetch-graphql/fetch-graphql.d.ts +2 -2
  2. package/api/initialize/initialize.d.ts +3 -3
  3. package/api.js +1 -0
  4. package/api.js.map +1 -0
  5. package/chunks/CartSummaryGrid.js +2 -1
  6. package/chunks/CartSummaryGrid.js.map +1 -0
  7. package/chunks/CartSummaryList.js +2 -1
  8. package/chunks/CartSummaryList.js.map +1 -0
  9. package/chunks/CartSummaryTable2.js +4 -0
  10. package/chunks/CartSummaryTable2.js.map +1 -0
  11. package/chunks/ChevronDown.js +1 -0
  12. package/chunks/ChevronDown.js.map +1 -0
  13. package/chunks/ChevronUp.js +1 -0
  14. package/chunks/ChevronUp.js.map +1 -0
  15. package/chunks/Coupon.js +1 -0
  16. package/chunks/Coupon.js.map +1 -0
  17. package/chunks/Coupons.js +2 -1
  18. package/chunks/Coupons.js.map +1 -0
  19. package/chunks/EmptyCart.js +2 -1
  20. package/chunks/EmptyCart.js.map +1 -0
  21. package/chunks/GiftCard.js +1 -0
  22. package/chunks/GiftCard.js.map +1 -0
  23. package/chunks/OrderSummary.js +2 -1
  24. package/chunks/OrderSummary.js.map +1 -0
  25. package/chunks/OrderSummaryLine.js +2 -1
  26. package/chunks/OrderSummaryLine.js.map +1 -0
  27. package/chunks/WarningWithCircle.js +4 -0
  28. package/chunks/WarningWithCircle.js.map +1 -0
  29. package/chunks/acdl.js +2 -1
  30. package/chunks/acdl.js.map +1 -0
  31. package/chunks/applyCouponsToCart.js +1 -0
  32. package/chunks/applyCouponsToCart.js.map +1 -0
  33. package/chunks/getEstimateShipping.js +1 -0
  34. package/chunks/getEstimateShipping.js.map +1 -0
  35. package/chunks/getEstimatedTotals.js +1 -0
  36. package/chunks/getEstimatedTotals.js.map +1 -0
  37. package/chunks/persisted-data.js +1 -0
  38. package/chunks/persisted-data.js.map +1 -0
  39. package/chunks/refreshCart.js +1 -0
  40. package/chunks/refreshCart.js.map +1 -0
  41. package/chunks/removeGiftCardFromCart.js +1 -0
  42. package/chunks/removeGiftCardFromCart.js.map +1 -0
  43. package/chunks/resetCart.js +1 -0
  44. package/chunks/resetCart.js.map +1 -0
  45. package/chunks/setGiftOptionsOnCart.js +1 -0
  46. package/chunks/setGiftOptionsOnCart.js.map +1 -0
  47. package/chunks/updateProductsFromCart.js +8 -7
  48. package/chunks/updateProductsFromCart.js.map +1 -0
  49. package/components/CartSummaryTable/CartSummaryTable.d.ts +42 -0
  50. package/components/CartSummaryTable/Elements/Item/Item.d.ts +13 -0
  51. package/components/CartSummaryTable/Elements/Item/index.d.ts +11 -0
  52. package/components/CartSummaryTable/Elements/index.d.ts +2 -0
  53. package/components/CartSummaryTable/index.d.ts +11 -0
  54. package/components/GiftOptions/Elements/GiftOptionModal.d.ts +1 -1
  55. package/components/GiftOptions/GiftOptions.d.ts +1 -1
  56. package/components/index.d.ts +1 -0
  57. package/containers/CartSummaryGrid/CartSummaryGrid.d.ts +2 -2
  58. package/containers/CartSummaryGrid.js +2 -1
  59. package/containers/CartSummaryGrid.js.map +1 -0
  60. package/containers/CartSummaryList/CartSummaryList.d.ts +2 -2
  61. package/containers/CartSummaryList.js +2 -1
  62. package/containers/CartSummaryList.js.map +1 -0
  63. package/containers/CartSummaryTable/CartSummaryTable.d.ts +86 -0
  64. package/containers/CartSummaryTable/index.d.ts +11 -0
  65. package/containers/CartSummaryTable.d.ts +3 -0
  66. package/containers/CartSummaryTable.js +4 -0
  67. package/containers/CartSummaryTable.js.map +1 -0
  68. package/containers/Coupons/Coupons.d.ts +1 -1
  69. package/containers/Coupons.js +2 -1
  70. package/containers/Coupons.js.map +1 -0
  71. package/containers/EmptyCart/EmptyCart.d.ts +1 -1
  72. package/containers/EmptyCart.js +2 -1
  73. package/containers/EmptyCart.js.map +1 -0
  74. package/containers/EstimateShipping/EstimateShipping.d.ts +1 -1
  75. package/containers/EstimateShipping.js +2 -1
  76. package/containers/EstimateShipping.js.map +1 -0
  77. package/containers/GiftCards/GiftCards.d.ts +1 -1
  78. package/containers/GiftCards.js +2 -1
  79. package/containers/GiftCards.js.map +1 -0
  80. package/containers/GiftOptions/GiftOptions.d.ts +2 -2
  81. package/containers/GiftOptions.js +2 -1
  82. package/containers/GiftOptions.js.map +1 -0
  83. package/containers/MiniCart/MiniCart.d.ts +2 -2
  84. package/containers/MiniCart.js +2 -1
  85. package/containers/MiniCart.js.map +1 -0
  86. package/containers/OrderSummary/OrderSummary.d.ts +1 -1
  87. package/containers/OrderSummary.js +2 -1
  88. package/containers/OrderSummary.js.map +1 -0
  89. package/containers/OrderSummaryLine/OrderSummaryLine.d.ts +1 -1
  90. package/containers/OrderSummaryLine.js +2 -1
  91. package/containers/OrderSummaryLine.js.map +1 -0
  92. package/containers/index.d.ts +1 -0
  93. package/data/models/acdl-models.d.ts +18 -0
  94. package/fragments.js +1 -0
  95. package/fragments.js.map +1 -0
  96. package/hooks/useCartItems.d.ts +85 -0
  97. package/hooks/useGiftOptions.d.ts +1 -2
  98. package/i18n/en_US.json.d.ts +16 -5
  99. package/package.json +1 -1
  100. package/render/render.d.ts +1 -1
  101. package/render.js +4 -2
  102. package/render.js.map +1 -0
@@ -14,11 +14,11 @@
14
14
  * is strictly forbidden unless prior written permission is obtained
15
15
  * from Adobe.
16
16
  *******************************************************************/
17
- export declare const setEndpoint: (endpoint: string) => void, setFetchGraphQlHeader: (key: string, value: string | null) => void, removeFetchGraphQlHeader: (key: string) => void, setFetchGraphQlHeaders: (header: import('@adobe-commerce/fetch-graphql').Header) => void, fetchGraphQl: <T = any>(query: string, options?: import('@adobe-commerce/fetch-graphql').FetchOptions | undefined) => Promise<{
17
+ export declare const setEndpoint: (endpoint: string) => void, setFetchGraphQlHeader: (key: string, value: string | null) => void, removeFetchGraphQlHeader: (key: string) => void, setFetchGraphQlHeaders: (header: import('@adobe-commerce/fetch-graphql').Header | ((prev: import('@adobe-commerce/fetch-graphql').Header) => import('@adobe-commerce/fetch-graphql').Header)) => void, fetchGraphQl: <T = any>(query: string, options?: import('@adobe-commerce/fetch-graphql').FetchOptions | undefined) => Promise<{
18
18
  errors?: import('@adobe-commerce/fetch-graphql').FetchQueryError | undefined;
19
19
  data: T;
20
20
  }>, getConfig: () => {
21
21
  endpoint: string | undefined;
22
- fetchGraphQlHeaders: import('@adobe-commerce/fetch-graphql').Header | undefined;
22
+ fetchGraphQlHeaders: import('@adobe-commerce/fetch-graphql').Header;
23
23
  };
24
24
  //# sourceMappingURL=fetch-graphql.d.ts.map
@@ -1,5 +1,5 @@
1
- import { Initializer, Model } from '../../../@adobe-commerce/elsie/src/lib';
2
- import { Lang } from '../../../@adobe-commerce/elsie/src/i18n';
1
+ import { Initializer, Model } from '@dropins/tools/types/elsie/src/lib';
2
+ import { Lang } from '@dropins/tools/types/elsie/src/i18n';
3
3
  import { CartModel } from '../../data/models';
4
4
 
5
5
  type ConfigProps = {
@@ -10,6 +10,6 @@ type ConfigProps = {
10
10
  };
11
11
  };
12
12
  export declare const initialize: Initializer<ConfigProps>;
13
- export declare const config: import('../../../@adobe-commerce/elsie/src/lib').Config<ConfigProps>;
13
+ export declare const config: import('@dropins/tools/types/elsie/src/lib').Config<ConfigProps>;
14
14
  export {};
15
15
  //# sourceMappingURL=initialize.d.ts.map
package/api.js CHANGED
@@ -9,3 +9,4 @@ import{s as p,f as g,h as E}from"./chunks/resetCart.js";import{g as q,r as z,d a
9
9
  }
10
10
  }
11
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};
12
+ //# sourceMappingURL=api.js.map
package/api.js.map ADDED
@@ -0,0 +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,3 +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"./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};
4
+ //# sourceMappingURL=CartSummaryGrid.js.map
@@ -0,0 +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,3 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import{jsx as n,jsxs as y,Fragment as M}from"@dropins/tools/preact-jsx-runtime.js";import*as o from"@dropins/tools/preact-compat.js";import{useState as N,useCallback as Bt,useEffect as It}from"@dropins/tools/preact-compat.js";import{classes as I,VComponent as b,Slot as C}from"@dropins/tools/lib.js";import{E as Ft}from"./EmptyCart.js";/* empty css */import{Divider as Et,Skeleton as zt,SkeletonRow as Wt,InLineAlert as qt,CartList as St,Icon as W,Button as q,Accordion as Ut,AccordionSection as Tt,CartItem as Jt,Price as A,Image as Kt}from"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import{g as Yt}from"./persisted-data.js";import{events as Rt}from"@dropins/tools/event-bus.js";import{s as Ht}from"./resetCart.js";import{u as Pt}from"./updateProductsFromCart.js";import{S as Dt}from"./ChevronDown.js";import{useText as te}from"@dropins/tools/i18n.js";const ee=g=>o.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",...g},o.createElement("g",{id:"Large"},o.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),o.createElement("g",{id:"Chevron_right_icon","data-name":"Chevron right icon"},o.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=g=>o.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...g},o.createElement("g",{clipPath:"url(#clip0_4797_15331)"},o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M10.25 20.91L1.5 17.55V6.51996L10.25 9.92996V20.91Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.24023 4.64001L14.9902 8.06001V11.42",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),o.createElement("path",{className:"error-icon",vectorEffect:"non-scaling-stroke",d:"M19 13.31L15.5 19.37H22.5L19 13.31Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),o.createElement("path",{className:"error-icon",vectorEffect:"non-scaling-stroke",d:"M19.0202 17.11H18.9802L18.9502 15.56H19.0502L19.0202 17.11ZM18.9602 18.29V18.06H19.0502V18.29H18.9602Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"}),o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M19 12.16V6.51996L10.25 9.92996V20.91L14.27 19.37L14.4 19.32",stroke:"currentColor",strokeLinejoin:"round"}),o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M1.5 6.51999L10.25 3.04999L19 6.51999L10.25 9.92999L1.5 6.51999Z",stroke:"currentColor",strokeLinecap:"round",strokeLinejoin:"round"})),o.createElement("defs",null,o.createElement("clipPath",{id:"clip0_4797_15331"},o.createElement("rect",{width:22,height:18.86,fill:"white",transform:"translate(1 2.54999)"})))),ne=g=>o.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...g},o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),o.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M11.75 5.88423V4.75H12.25V5.88423L12.0485 13.0713H11.9515L11.75 5.88423ZM11.7994 18.25V16.9868H12.2253V18.25H11.7994Z",stroke:"currentColor"})),Nt=({className:g,children:U,heading:w,footer:v,emptyCart:E,products:d,outOfStockMessage:m,variant:S="primary",loading:h=!0,...c})=>n("div",{...c,className:I(["cart-cart-summary-list",g,`cart-cart-summary-list__background--${S}`]),children:h?n(re,{}):y(M,{children:[(w||m)&&y("div",{"data-testid":"cart-summary-list-heading-wrapper",className:I(["cart-cart-summary-list__heading",["cart-cart-summary-list__heading--full-width",!d]]),children:[w&&y(M,{children:[n(b,{node:w,className:"cart-cart-summary-list__heading-text"}),n(Et,{variant:"primary",className:I(["cart-cart-summary-list__heading-divider"])})]}),m&&n(b,{node:m,className:"cart-cart-summary-list__out-of-stock-message"})]}),n("div",{className:I(["cart-cart-summary-list__content",["cart-cart-summary-list__content--empty",!d]]),children:d||n(b,{node:E,className:"cart-cart-summary-list__empty-cart"})}),v&&y(M,{children:[n(Et,{variant:"primary",className:I(["cart-cart-summary-list__footer-divider"])}),n(b,{node:v,className:"cart-cart-summary-list__footer-text"})]})]})}),re=()=>n(zt,{"data-testid":"cart-summary-list-skeleton",className:"cart-cart-summary-list__skeleton",rowGap:"medium",children:n(Wt,{variant:"row",size:"xlarge",fullWidth:!0,lines:3,multilineGap:"small"})}),ae=({initialData:g=null,hideHeading:U,hideFooter:w,routeProduct:v,routeEmptyCartCTA:E,routeCart:d,onItemUpdate:m,onItemRemove:S,maxItems:h,slots:c,attributesToHide:l=[],enableRemoveItem:O,enableUpdateItemQuantity:Z,onItemsErrorsChange:B,accordion:At=!1,variant:F="primary",isLoading:Ot,showMaxItems:T,showDiscount:J,showSavings:K,quantityType:Y,dropdownOptions:R,...H})=>{var Ct;const[Q,Qt]=N(!g),[a,Gt]=N(g),[L,Vt]=N(new Set),[G,D]=N(new Map),s=(Ct=Ht.config)==null?void 0:Ct.shoppingCartDisplaySetting,[V,Xt]=N(T?!0:!h&&!T),i=te({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"}),X=(t,e)=>{Vt(r=>(e?r.add(t):r.delete(t),new Set(r)))},tt=(t,e)=>{D(r=>(e?r.set(t,e):r.delete(t),new Map(r)))},z=(t,e)=>{X(t.uid,!0),D(new Map),O&&e===0?Pt([{uid:t.uid,quantity:e}]).then(()=>{S==null||S({item:t})}).finally(()=>{X(t.uid,!1)}).catch(r=>{console.warn(r)}):Z&&Pt([{uid:t.uid,quantity:e}]).then(()=>{m==null||m({item:t})}).finally(()=>{X(t.uid,!1)}).catch(r=>{tt(t.uid,r.message)})},jt=Bt(()=>{Xt(t=>!t)},[]);It(()=>{const t=Rt.on("cart/data",e=>{Gt(e),Qt(!!Ot)},{eager:!0});return()=>{t==null||t.off()}},[]),It(()=>{B&&B(G)},[G,B]);const et=(t,e)=>{if(l.includes("image"))return;const r={loading:e<4?"eager":"lazy",src:t.image.src,alt:t.image.alt,width:"300",height:"300",params:{width:300}},u=n(Kt,{"data-testid":"cart-list-item-image",...r});return n(C,{name:"Thumbnail",slot:c==null?void 0:c.Thumbnail,context:{item:t,defaultImageProps:r},children:v?n("a",{href:v(t),children:u}):u})},nt=t=>{if(!l.includes("name"))return n("span",{"data-testid":"cart-list-item-title",children:v?n("a",{href:v(t),children:t.name}):t.name})},rt=t=>{if(l.includes("configurations"))return;const e={...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(e).length!==0)return e},at=t=>{var e,r,u,f;return(s==null?void 0:s.price)==="INCLUDING_TAX"?t.discounted?{amount:t.regularPrice.value,currency:t.regularPrice.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(e=t.taxedPrice)==null?void 0:e.value,currency:(r=t.taxedPrice)==null?void 0:r.currency,style:{font:"inherit"},"data-testid":"including-tax-item-price"}:{amount:(u=t.regularPrice)==null?void 0:u.value,currency:(f=t.regularPrice)==null?void 0:f.currency,style:{font:"inherit"},"data-testid":"regular-item-price"}},it=t=>{var e,r;return{amount:(e=t.savingsAmount)==null?void 0:e.value,currency:(r=t.savingsAmount)==null?void 0:r.currency,style:{font:"inherit"},"data-testid":"item-savings-amount"}},ct=t=>(s==null?void 0:s.price)==="INCLUDING_EXCLUDING_TAX"?n(A,{amount:t.rowTotal.value,currency:t.rowTotal.currency,"data-testid":"excluding-tax-total","aria-label":i.regularPrice}):void 0,ot=t=>{var u,f,_,p,k,P,x,wt,Lt,_t;const e={"aria-label":i.regularPrice},r=t.discounted?{}:null;return["INCLUDING_TAX","INCLUDING_EXCLUDING_TAX"].includes(s==null?void 0:s.price)?(e.amount=(u=t.rowTotalIncludingTax)==null?void 0:u.value,e.currency=(f=t.rowTotalIncludingTax)==null?void 0:f.currency,e.variant=t.discounted?"strikethrough":"default",e["data-testid"]="including-tax-item-total",r&&(e.amount=(_=t.total)==null?void 0:_.value,e.currency=(p=t.total)==null?void 0:p.currency,r.amount=(k=t.rowTotalIncludingTax)==null?void 0:k.value,r.currency=(P=t.rowTotalIncludingTax)==null?void 0:P.currency,r.sale=!0,r["aria-label"]=i.discountedPrice,r["data-testid"]="discount-total")):(e.amount=(x=t.total)==null?void 0:x.value,e.currency=(wt=t.total)==null?void 0:wt.currency,e.variant=t.discounted?"strikethrough":"default",e["data-testid"]="regular-item-total",r&&(r.amount=(Lt=t.discountedTotal)==null?void 0:Lt.value,r.currency=(_t=t.discountedTotal)==null?void 0:_t.currency,r.sale=!0,r["aria-label"]=i.regularPrice,r["data-testid"]="discount-total")),{totalProps:e,discountProps:r}},st=t=>{var k,P,x;if(l.includes("warning"))return;const e=G.get(t.uid),r=(k=G.get(t.uid))==null?void 0:k.includes("The requested qty is not available"),u=L.has(t.uid),f=t.insufficientQuantity&&t.stockLevel?t.stockLevel==="noNumber"?i.insufficientQuantityGeneral:i.insufficientQuantity.replace("{inventory}",(P=t.stockLevel)==null?void 0:P.toString()).replace("{count}",t.quantity.toString()):"",_=t.lowInventory&&t.onlyXLeftInStock&&i.lowInventory.replace("{count}",(x=t.onlyXLeftInStock)==null?void 0:x.toString()),p=!t.outOfStock&&e&&r?i.notAvailableMessage:e;return!u&&(e||t.insufficientQuantity||t.lowInventory)?y("span",{"data-testid":"item-warning",children:[n(W,{source:ne,size:"16"}),p||f||_]}):void 0},lt=t=>l!=null&&l.includes("alert")?void 0:!L.has(t.uid)&&t.outOfStock?y("span",{"data-testid":"item-alert",children:[n(W,{source:xt,size:"16"}),i.outOfStockAlert]}):void 0,ut=t=>n(C,{name:"ProductAttributes",slot:c==null?void 0:c.ProductAttributes,context:{item:t}}),dt=t=>{if(!l.includes("sku"))return n("span",{"data-testid":"cart-list-item-sku",children:t.sku})},gt=t=>n(C,{name:"Footer",slot:c==null?void 0:c.Footer,context:{item:t,handleItemsLoading:X,handleItemsError:tt,onItemUpdate:m}}),ft=t=>a!=null&&a.totalQuantity?a.items.filter(t).map((e,r)=>{var p;const{totalProps:u,discountProps:f}=ot(e),_=n(Jt,{updating:L==null?void 0:L.has(e.uid),loading:Q,"data-testid":`cart-list-item-entry-${e.uid}`,image:et(e,r),title:nt(e),sku:dt(e),price:l.includes("price")?void 0:n(A,{...at(e)}),quantity:l.includes("quantity")?void 0:e.quantity,total:y(M,{children:[l.includes("total")?void 0:n(A,{...u}),l.includes("totalDiscount")?void 0:f&&n(A,{...f})]}),attributes:ut(e),configurations:rt(e),totalExcludingTax:l.includes("totalExcludingTax")?void 0:ct(e),taxIncluded:(s==null?void 0:s.price)==="INCLUDING_TAX",taxExcluded:!l.includes("totalExcludingTax")&&(s==null?void 0:s.price)==="INCLUDING_EXCLUDING_TAX",warning:st(e),alert:lt(e),quantityType:Y,dropdownOptions:R,onQuantity:Z?k=>{z(e,k)}:void 0,onRemove:O?()=>z(e,0):void 0,discount:J&&e.discounted&&e.discountPercentage?n("div",{"data-testid":"item-discount-percent",children:i.discountPercent.replace("{discount}",((p=e.discountPercentage)==null?void 0:p.toString())??"")}):void 0,savings:K&&e.discounted&&e.savingsAmount?y("div",{children:[n("span",{children:n(A,{...it(e)})})," ",i.savingsAmount]}):void 0,footer:gt(e)},e.uid);return n(C,{name:"CartItem",slot:c==null?void 0:c.CartItem,context:{item:e,index:r,enableUpdateItemQuantity:Z,enableRemoveItem:O,itemsLoading:L,loading:Q,attributesToHide:l,cartTaxesConfig:s,quantityType:Y,dropdownOptions:R,showDiscount:J,showSavings:K,dictionary:i,getImage:et,getTitle:nt,getSku:dt,getPriceProps:at,getTotalPriceProps:ot,getProductAttributes:ut,getConfiguration:rt,getTotalExcludingTax:ct,getWarning:st,getAlert:lt,getFooter:gt,getSavingsAmount:it},children:_},e.uid)}):null,mt=n(C,{name:"EmptyCart",slot:c==null?void 0:c.EmptyCart,context:{},children:n(Ft,{"data-testid":"empty-cart",ctaLinkURL:E==null?void 0:E()})}),ht=n(C,{name:"Heading",slot:c==null?void 0:c.Heading,context:{count:a==null?void 0:a.totalQuantity},children:n("div",{"data-testid":"default-cart-heading",children:i.heading.replace("({count})",a!=null&&a.totalQuantity?`(${a==null?void 0:a.totalQuantity.toString()})`:"")})}),$t=ht.props.children.props.children,bt=()=>{const t=a==null?void 0:a.items.filter(e=>e.outOfStock);t==null||t.forEach(e=>{z(e,0)})},Mt=ft(t=>t.outOfStock||t.insufficientQuantity||!1),yt=a!=null&&a.hasOutOfStockItems?n(qt,{"data-testid":"cart-out-of-stock-message",icon:n(W,{source:xt,size:"16"}),itemList:n(St,{"data-testid":"out-of-stock-cart-items",children:Mt}),type:"warning",heading:i.outOfStockHeading,description:i.outOfStockDescription,variant:"primary",actionButtonPosition:"bottom",additionalActions:a!=null&&a.hasFullyOutOfStockItems&&O?[{label:i.removeAction,onClick:bt}]:void 0}):void 0,j=ft(t=>!t.outOfStock&&!t.insufficientQuantity),vt=V?Math.max(h||5,5):Math.min((a==null?void 0:a.totalQuantity)||5,5),pt=(a==null?void 0:a.totalQuantity)>vt,Zt=pt&&!V&&vt!=h,$=a!=null&&a.totalQuantity&&j?n(C,{name:"Footer",slot:c==null?void 0:c.CartSummaryFooter,context:{displayMaxItems:V,routeCart:d},"data-testid":"cart-cart-summary-footer-slot",className:"cart-cart-summary-footer",children:pt?Zt?n(q,{className:"cart-cart-summary-list-footer__action",onClick:jt,"data-testid":"view-more-items-button",variant:"tertiary",children:i.viewMore}):d&&n(q,{className:"cart-cart-summary-list-footer__action",href:d(),variant:"tertiary","data-testid":"view-cart-or-less-items-button",children:i.viewAll}):d&&n(q,{className:"cart-cart-summary-list-footer__action",href:d(),variant:"tertiary","data-testid":"view-cart-button",children:i.viewAll})}):null,kt=a!=null&&a.totalQuantity?n(St,{"data-testid":"cart-list",children:j==null?void 0:j.slice(0,V?Math.max(h||(a==null?void 0:a.totalQuantity),5):Math.min(h??5,5))}):null;return At?n(Ut,{"data-testid":"cart-summary-list-accordion",className:I(["cart-cart-summary-list-accordion",`cart-cart-summary-list__background--${F}`]),iconOpen:ee,iconClose:Dt,children:n(Tt,{title:$t,"data-testid":"cart-summary-list-accordion__section",open:!0,renderContentWhenClosed:!0,children:n(Nt,{...H,"aria-expanded":!0,"aria-label":"TEST",className:"cart-cart-summary-list-accordion__list",loading:Q,footer:w?void 0:$||(d?$:void 0),emptyCart:mt,products:kt,outOfStockMessage:yt,variant:F})})}):n(Nt,{...H,heading:U?void 0:ht,footer:w?void 0:$||(d?$:void 0),loading:Q,emptyCart:mt,products:kt,outOfStockMessage:yt,variant:F})};ae.getInitialData=async function(){return Yt()};export{ae as C};
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};
4
+ //# sourceMappingURL=CartSummaryList.js.map
@@ -0,0 +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]}
@@ -0,0 +1,4 @@
1
+ /*! Copyright 2025 Adobe
2
+ All Rights Reserved. */
3
+ import{jsxs as o,jsx as r}from"@dropins/tools/preact-jsx-runtime.js";import{classes as W,VComponent as _,debounce as fa,Slot as h}from"@dropins/tools/lib.js";import{Image as Ca,Icon as H,Button as Ia,Price as k,Skeleton as va,SkeletonRow as xa}from"@dropins/tools/components.js";/* empty css */import*as S from"@dropins/tools/preact-compat.js";import{useState as la,useCallback as Na,useMemo as ka}from"@dropins/tools/preact-compat.js";import{useState as ua,useEffect as wa,useMemo as Ta}from"@dropins/tools/preact-hooks.js";import{useText as oa}from"@dropins/tools/i18n.js";import{events as Sa}from"@dropins/tools/event-bus.js";import{s as Pa}from"./resetCart.js";import{u as sa}from"./updateProductsFromCart.js";import{g as Ma}from"./persisted-data.js";import{S as qa,a as La}from"./WarningWithCircle.js";const Oa=l=>S.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",...l},S.createElement("path",{d:"M1 5H23",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),S.createElement("path",{d:"M17.3674 22H6.63446C5.67952 22 4.88992 21.2688 4.8379 20.3338L4 5H20L19.1621 20.3338C19.1119 21.2688 18.3223 22 17.3655 22H17.3674Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),S.createElement("path",{d:"M9.87189 2H14.1281C14.6085 2 15 2.39766 15 2.88889V5H9V2.88889C9 2.39912 9.39006 2 9.87189 2Z",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),S.createElement("path",{d:"M8.87402 8.58057L9.39348 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10}),S.createElement("path",{d:"M14.6673 8.58057L14.146 17.682",stroke:"currentColor",strokeWidth:1.5,strokeMiterlimit:10})),Ea=({entries:l,className:d,...e})=>{const m=oa({itemLabel:"Cart.CartSummaryTable.item",priceLabel:"Cart.CartSummaryTable.price",qtyLabel:"Cart.CartSummaryTable.qty",subtotalLabel:"Cart.CartSummaryTable.subtotal",mobilePriceLabel:"Cart.CartSummaryTable.mobilePrice",mobileQtyLabel:"Cart.CartSummaryTable.mobileQty",mobileSubtotalLabel:"Cart.CartSummaryTable.mobileSubtotal"});return o("div",{...e,className:W(["cart-cart-summary-table",d]),children:[o("div",{className:"cart-cart-summary-table__header",children:[r("div",{className:"cart-cart-summary-table__header-item",children:m.itemLabel}),r("div",{className:"cart-cart-summary-table__header-price",children:m.priceLabel}),r("div",{className:"cart-cart-summary-table__header-qty",children:m.qtyLabel}),r("div",{className:"cart-cart-summary-table__header-subtotal",children:m.subtotalLabel})]}),r("div",{className:"cart-cart-summary-table__body",children:l.map(u=>o("div",{className:W(["cart-cart-summary-table__row",["cart-cart-summary-table__row--updating",u.updating],["cart-cart-summary-table__row--error",u.hasError]]),children:[r("div",{className:"cart-cart-summary-table__cell-item",children:r(_,{node:u.item})}),o("div",{className:"cart-cart-summary-table__cell-price",children:[r("span",{className:"cart-cart-summary-table__mobile-label",children:m.mobilePriceLabel}),r(_,{node:u.price})]}),o("div",{className:"cart-cart-summary-table__cell-qty",children:[r("span",{className:"cart-cart-summary-table__mobile-label",children:m.mobileQtyLabel}),r(_,{node:u.quantity})]}),o("div",{className:"cart-cart-summary-table__cell-subtotal",children:[r("span",{className:"cart-cart-summary-table__mobile-label",children:m.mobileSubtotalLabel}),r(_,{node:u.subtotal})]}),r("div",{className:"cart-cart-summary-table__item-footer",children:r(_,{className:"cart-cart-summary-table__item-actions",node:u.actions})})]},u.uid))})]})},Aa=({className:l,productTitle:d,sku:e,image:m,configurations:u,alert:I,warning:v,...g})=>o("div",{...g,className:W(["cart-cart-summary-table__item",l]),children:[m&&r(_,{className:"cart-cart-summary-table__item-image-wrapper",node:m}),o("div",{className:"cart-cart-summary-table__item-details",children:[d&&r(_,{className:"cart-cart-summary-table__item-name",node:d}),e&&r(_,{className:"cart-cart-summary-table__sku",node:e}),I&&r(_,{className:"cart-cart-summary-table__item-quantity-alert-text",node:I}),v&&r(_,{className:"cart-cart-summary-table__item-quantity-warning-text",node:v}),u&&r(_,{className:"cart-cart-summary-table__item-configurations",node:u})]})]}),Ua=({dictionary:l,onQuantityUpdate:d,onItemRemove:e})=>{var L,O;const[m,u]=la(new Map),[I,v]=la(new Map),g=(O=(L=Pa)==null?void 0:L.config)==null?void 0:O.shoppingCartDisplaySetting,U=(g==null?void 0:g.price)==="INCLUDING_TAX",G=(g==null?void 0:g.price)==="INCLUDING_EXCLUDING_TAX",P=({item:a})=>{const n={...a.bundleOptions,...a.selectedOptions,...a.customizableOptions,...a.recipient?{[l.recipient]:a.recipient}:null,...a.recipientEmail&&a.recipient?{[l.recipient]:`${a.recipient} (${a.recipientEmail})`}:null,...a.sender?{[l.sender]:a.sender}:null,...a.senderEmail&&a.sender?{[l.sender]:`${a.sender} (${a.senderEmail})`}:{},...a.message?{[l.message]:a.message}:null,...a.links&&a.links.count?a.links.count>1?{[l.files.replace("{count}",a.links.count.toString())]:a.links.result}:{[l.file.replace("{count}",a.links.count.toString())]:a.links.result}:null};if(Object.keys(n).length!==0)return n},w=a=>{var n,c,i,s;return U?a.discounted?{amount:a.regularPrice.value,currency:a.regularPrice.currency,"data-testid":"discounted-regular-item-price"}:{amount:(n=a.taxedPrice)==null?void 0:n.value,currency:(c=a.taxedPrice)==null?void 0:c.currency,"data-testid":"taxed-item-price"}:{amount:(i=a.regularPrice)==null?void 0:i.value,currency:(s=a.regularPrice)==null?void 0:s.currency,"data-testid":"regular-item-price"}},D=a=>{var i,s,b,C,t,y,x,T,$,E;const n={"aria-label":l.regularPrice},c=a.discounted?{}:null;return["INCLUDING_TAX","INCLUDING_EXCLUDING_TAX"].includes(g==null?void 0:g.price)?(n.amount=(i=a.rowTotalIncludingTax)==null?void 0:i.value,n.currency=(s=a.rowTotalIncludingTax)==null?void 0:s.currency,n.variant=a.discounted?"strikethrough":"default",n["data-testid"]="including-tax-item-total",c&&(n.amount=(b=a.total)==null?void 0:b.value,n.currency=(C=a.total)==null?void 0:C.currency,c.amount=(t=a.rowTotalIncludingTax)==null?void 0:t.value,c.currency=(y=a.rowTotalIncludingTax)==null?void 0:y.currency,c.sale=!0,c["aria-label"]=l.discountedPrice,c["data-testid"]="discount-total")):(n.amount=(x=a.total)==null?void 0:x.value,n.currency=(T=a.total)==null?void 0:T.currency,n.variant=a.discounted?"strikethrough":"default",n["data-testid"]="regular-item-total",c&&(c.amount=($=a.discountedTotal)==null?void 0:$.value,c.currency=(E=a.discountedTotal)==null?void 0:E.currency,c.sale=!0,c["aria-label"]=l.regularPrice,c["data-testid"]="discount-total")),{subtotalProps:n,subtotalDiscountProps:c}},p=a=>{var s,b;const n=I.get(a.uid),c=a.insufficientQuantity&&a.stockLevel?a.stockLevel==="noNumber"?l.insufficientQuantityGeneral:l.insufficientQuantity.replace("{inventory}",(s=a.stockLevel)==null?void 0:s.toString()).replace("{count}",a.quantity.toString()):void 0,i=a.lowInventory&&a.onlyXLeftInStock&&l.lowInventory.replace("{count}",(b=a.onlyXLeftInStock)==null?void 0:b.toString());return n||c||i||void 0},N=Na(async(a,n)=>{const c=(i,s)=>sa([{uid:i.uid,quantity:s}]);if(!(isNaN(n)||a.quantity===n)){v(new Map);try{u(i=>{const s=new Map(i);return s.set(a.uid,{isUpdating:!0,updatedValue:n}),s}),await c(a,n),n===0?e==null||e(a):d==null||d(a,n)}catch(i){u(s=>{const b=new Map(s);return b.delete(a.uid),b}),v(s=>{const b=new Map(s);return b.set(a.uid,i.message),b})}}},[e,d]),M=ka(()=>fa(N,500),[N]);return{showIncludedTaxPrice:U,showExcludingTaxPrice:G,itemsUpdating:m,itemUpdateErrors:I,getConfiguration:P,getPriceProps:w,getSubtotalProps:D,processQuantityChange:N,debouncedQuantityChange:M,setItemsUpdating:u,getWarningMessage:p,setItemUpdateError:(a,n)=>{v(c=>{const i=new Map(c);return n?i.set(a,n):i.delete(a),i})},handleRemoveItem:a=>(u(n=>{const c=new Map(n);return c.set(a.uid,{isUpdating:!0,updatedValue:0}),c}),sa([{uid:a.uid,quantity:0}]).then(n=>(e==null||e(a),Promise.resolve(n)))),setItemUpdating:(a,n)=>{u(c=>{const i=new Map(c);return i.set(a,{isUpdating:n,updatedValue:n}),i})}}},Da=()=>r(va,{"data-testid":"cart-summary-table-skeleton",className:"cart-cart-summary-table__skeleton",rowGap:"medium",children:r(xa,{variant:"row",size:"xlarge",fullWidth:!0,lines:4,multilineGap:"small"})}),$a=({initialData:l=null,routeProduct:d,slots:e,className:m,allowQuantityUpdates:u=!0,allowRemoveItems:I=!0,onQuantityUpdate:v,onItemRemove:g,...U})=>{const[G,P]=ua(!l),[w,D]=ua(l),p=oa({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",includingTax:"Cart.CartItem.includingTax",excludingTax:"Cart.CartItem.excludingTax",remove:"Dropin.CartItem.remove.label",removeDefault:"Dropin.CartItem.removeDefault.label",quantity:"Dropin.CartItem.quantity.label"}),{showIncludedTaxPrice:N,showExcludingTaxPrice:M,itemsUpdating:q,itemUpdateErrors:f,getConfiguration:Q,getPriceProps:V,getSubtotalProps:L,debouncedQuantityChange:O,setItemsUpdating:a,getWarningMessage:n,handleRemoveItem:c,setItemUpdating:i,setItemUpdateError:s}=Ua({dictionary:p,onQuantityUpdate:v,onItemRemove:g});wa(()=>{const C=Sa.on("cart/data",t=>{P(!0),D(t),a(new Map),P(!1)},{eager:!0});return()=>{C==null||C.off()}},[P,D,a]);const b=Ta(()=>{var C;return((C=w==null?void 0:w.items)==null?void 0:C.sort((t,y)=>f.has(t.uid)&&!f.has(y.uid)?-1:!f.has(t.uid)&&f.has(y.uid)?1:t.outOfStock&&!y.outOfStock?-1:!t.outOfStock&&y.outOfStock?1:0).map((t,y)=>{var K,Y,R,aa,ta,ea,ra,na,ca,ia;const x=q.has(t.uid),T=n(t),$=r(h,{name:"ProductTitle",slot:e==null?void 0:e.ProductTitle,context:{item:t},children:d?r("a",{href:d(t),children:t.name}):t.name}),E={src:t.image.src,alt:t.image.alt,width:"300",height:"300",params:{width:300}},j=r(Ca,{"data-testid":`cart-table-item-image-${t.sku}`,loading:y<4?"eager":"lazy",...E}),da=r(h,{name:"Thumbnail",slot:e==null?void 0:e.Thumbnail,className:"cart-cart-summary-table__item-image-wrapper",context:{item:t,defaultImageProps:{...E,loading:y<4?"eager":"lazy"},index:y},children:d?r("a",{href:d(t),children:j}):j}),ma=r(h,{name:"Sku",slot:e==null?void 0:e.Sku,context:{item:t},children:t.sku}),ga=t.outOfStock||e!=null&&e.ItemAlert?r(h,{name:"ItemAlert",slot:e==null?void 0:e.ItemAlert,context:{item:t},children:t.outOfStock&&o("div",{className:"cart-cart-summary-table__item-quantity-alert-wrapper","data-testid":`cart-table-item-quantity-alert-${t.uid}`,children:[r(H,{className:"cart-cart-summary-table__item-quantity-alert-icon",source:qa,size:"16"}),r("span",{className:"cart-cart-summary-table__item-quantity-alert-text",children:p.outOfStockAlert})]})}):void 0,ba=T||e!=null&&e.ItemWarning?r(h,{name:"ItemWarning",slot:e==null?void 0:e.ItemWarning,context:{item:t},children:T&&o("div",{className:"cart-cart-summary-table__item-quantity-warning-wrapper","data-testid":`cart-table-item-quantity-warning-${t.uid}`,children:[r(H,{className:"cart-cart-summary-table__item-quantity-warning-icon",source:La,size:"16"}),r("span",{className:"cart-cart-summary-table__item-quantity-warning-text",children:T})]})}):void 0,z=Q({item:t}),pa=z||e!=null&&e.Configurations?r(h,{name:"Configurations",slot:e==null?void 0:e.Configurations,context:{item:t},children:z&&r("ul",{className:"cart-cart-summary-table__item-configurations","data-testid":`cart-table-item-configurations-${t.sku}`,children:Object.entries(z).map(([A,X])=>o("li",{className:"cart-cart-summary-table__item-configuration","data-testid":`cart-table-item-configuration-${A}`,children:[o("span",{className:"cart-cart-summary-table__item-configuration-label",children:[A,":"]}),r("span",{className:"cart-cart-summary-table__item-configuration-value",children:X})]},A))})}):void 0,{subtotalProps:ya,subtotalDiscountProps:B}=L(t),Z=(K=q.get(t.uid))==null?void 0:K.updatedValue,F=x&&!isNaN(Z)?Z:t.quantity,J=A=>{const X=A.target,_a=parseInt(X.value,10);O(t,_a)},ha=r(h,{name:"Actions",slot:e==null?void 0:e.Actions,context:{item:t,itemsUpdating:q,setItemUpdating:i,setItemUpdateError:s},children:I&&r(Ia,{variant:"tertiary",size:"medium",className:"cart-cart-summary-table__item-remove-button","data-testid":`cart-table-item-remove-${t.uid}`,icon:r(H,{source:Oa,size:"32"}),onClick:()=>c(t),"aria-label":((Y=p.remove)==null?void 0:Y.replace("{product}",t.name))||p.removeDefault})});return{key:t.uid,uid:t.uid,updating:x,hasError:t.outOfStock||f.has(t.uid),item:r(h,{name:"Item",slot:e==null?void 0:e.Item,context:{item:t},children:r(Aa,{productTitle:$,image:da,sku:ma,configurations:pa,alert:ga,warning:ba})}),price:o(h,{name:"Price",className:"cart-cart-summary-table__item-price",slot:e==null?void 0:e.Price,context:{item:t},children:[r(k,{...V(t)}),N&&o("span",{className:"cart-cart-summary-table__item-price-tax-label",children:[p.includingTax,": ",r(k,{amount:(R=t.taxedPrice)==null?void 0:R.value,currency:(aa=t.taxedPrice)==null?void 0:aa.currency})]}),M&&o("span",{className:"cart-cart-summary-table__item-price-tax-label",children:[p.excludingTax,": ",r(k,{amount:(ta=t.regularPrice)==null?void 0:ta.value,currency:(ea=t.regularPrice)==null?void 0:ea.currency})]})]}),quantity:r(h,{name:"Quantity",className:"cart-cart-summary-table__item-qty",slot:e==null?void 0:e.Quantity,context:{item:t,isUpdating:x,quantityInputValue:F,handleInputChange:J,itemUpdateErrors:f},children:u?r("input",{id:`cart-table-item-quantity-${t.uid}`,"data-testid":`cart-table-item-quantity-${t.uid}`,type:"number",min:"1",value:F,disabled:x,"aria-label":p.quantity,className:W(["cart-cart-summary-table__cell-qty-input","cart-cart-summary-table__cell-qty-updater",["cart-cart-summary-table__cell-qty-updater--disabled",x],["cart-cart-summary-table__cell-qty-updater--error",f.has(t.uid)]]),onChange:J}):r("span",{children:t.quantity})}),subtotal:o(h,{name:"Subtotal",className:"cart-cart-summary-table__item-subtotal",slot:e==null?void 0:e.Subtotal,context:{item:t},children:[r(k,{...ya}),B&&r(k,{...B}),N&&o("span",{className:"cart-cart-summary-table__item-subtotal-tax-label",children:[p.includingTax,": ",r(k,{amount:(ra=t.rowTotalIncludingTax)==null?void 0:ra.value,currency:(na=t.rowTotalIncludingTax)==null?void 0:na.currency})]}),M&&o("span",{className:"cart-cart-summary-table__item-subtotal-tax-label",children:[p.excludingTax,": ",r(k,{amount:(ca=t.rowTotal)==null?void 0:ca.value,currency:(ia=t.rowTotal)==null?void 0:ia.currency})]})]}),actions:ha}}))||[]},[w,q,u,d,e,f,p,Q,I,O,n,V,L,c,i,s,N,M]);return G?r(Da,{}):r(Ea,{entries:b,className:m,...U})};$a.getInitialData=async function(){return Ma()};export{$a as C};
4
+ //# sourceMappingURL=CartSummaryTable2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartSummaryTable2.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Trash.svg","/@dropins/storefront-cart/src/components/CartSummaryTable/CartSummaryTable.tsx","/@dropins/storefront-cart/src/components/CartSummaryTable/Elements/Item/Item.tsx","/@dropins/storefront-cart/src/hooks/useCartItems.ts","/@dropins/storefront-cart/src/containers/CartSummaryTable/CartSummaryTable.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgTrash = (props) => /* @__PURE__ */ React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M1 5H23\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M17.3674 22H6.63446C5.67952 22 4.88992 21.2688 4.8379 20.3338L4 5H20L19.1621 20.3338C19.1119 21.2688 18.3223 22 17.3655 22H17.3674Z\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M9.87189 2H14.1281C14.6085 2 15 2.39766 15 2.88889V5H9V2.88889C9 2.39912 9.39006 2 9.87189 2Z\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M8.87402 8.58057L9.39348 17.682\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10 }), /* @__PURE__ */ React.createElement(\"path\", { d: \"M14.6673 8.58057L14.146 17.682\", stroke: \"currentColor\", strokeWidth: 1.5, strokeMiterlimit: 10 }));\nexport default SvgTrash;\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\n/**\n * CartSummaryTable is a responsive grid-based component that displays cart items in a table-like format.\n * It adapts to mobile views by switching to a stacked layout with labeled sections.\n * \n * @component\n */\n\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport '@/cart/components/CartSummaryTable/CartSummaryTable.css';\n\n/**\n * Represents a single row entry in the cart summary table\n * Each field accepts a VNode to allow for flexible content rendering\n */\nexport interface CartTableEntry {\n /** The item UID */\n uid: string;\n /** Whether the item is updating */\n updating: boolean;\n /** Whether the item has an update error */\n hasError: boolean;\n /** The product details section (typically includes image, name, and options) */\n item: VNode;\n /** The unit price of the product */\n price: VNode;\n /** The quantity selector/display */\n quantity: VNode;\n /** The total price for this line item */\n subtotal: VNode;\n /** Actions bar on the bottom of the row */\n actions: VNode;\n}\n\n/**\n * Props for the CartSummaryTable component\n */\nexport interface CartSummaryTableProps extends HTMLAttributes<HTMLDivElement> {\n /** Array of cart entries to display in the table */\n entries: CartTableEntry[];\n /** Optional CSS class name for custom styling */\n className?: string;\n}\n\n/**\n * CartSummaryTable component displays cart items in a responsive grid layout\n * - Uses CSS Grid for layout with 4 columns on desktop\n * - Switches to a stacked single-column layout on mobile with labeled sections\n * - Renders each entry's content using VComponent for proper component handling\n */\nexport const CartSummaryTable: FunctionComponent<CartSummaryTableProps> = ({\n entries,\n className,\n ...props\n}) => {\n const dictionary = useText({\n itemLabel: 'Cart.CartSummaryTable.item',\n priceLabel: 'Cart.CartSummaryTable.price',\n qtyLabel: 'Cart.CartSummaryTable.qty',\n subtotalLabel: 'Cart.CartSummaryTable.subtotal',\n mobilePriceLabel: 'Cart.CartSummaryTable.mobilePrice',\n mobileQtyLabel: 'Cart.CartSummaryTable.mobileQty',\n mobileSubtotalLabel: 'Cart.CartSummaryTable.mobileSubtotal'\n });\n\n return (\n <div {...props} className={classes(['cart-cart-summary-table', className])}>\n {/* Table header - hidden on mobile */}\n <div className=\"cart-cart-summary-table__header\">\n <div className=\"cart-cart-summary-table__header-item\">{dictionary.itemLabel}</div>\n <div className=\"cart-cart-summary-table__header-price\">{dictionary.priceLabel}</div>\n <div className=\"cart-cart-summary-table__header-qty\">{dictionary.qtyLabel}</div>\n <div className=\"cart-cart-summary-table__header-subtotal\">{dictionary.subtotalLabel}</div>\n </div>\n {/* Table body - adapts to grid layout on mobile */}\n <div className=\"cart-cart-summary-table__body\">\n {entries.map((entry) => (\n <div key={entry.uid} className={classes([\n 'cart-cart-summary-table__row',\n [ 'cart-cart-summary-table__row--updating', entry.updating ],\n [ 'cart-cart-summary-table__row--error', entry.hasError ],\n ])}\n >\n <div className=\"cart-cart-summary-table__cell-item\">\n <VComponent node={entry.item} />\n </div>\n <div className=\"cart-cart-summary-table__cell-price\">\n <span className=\"cart-cart-summary-table__mobile-label\">{dictionary.mobilePriceLabel}</span>\n <VComponent node={entry.price} />\n </div>\n <div className=\"cart-cart-summary-table__cell-qty\">\n <span className=\"cart-cart-summary-table__mobile-label\">{dictionary.mobileQtyLabel}</span>\n <VComponent node={entry.quantity} />\n </div>\n <div className=\"cart-cart-summary-table__cell-subtotal\">\n <span className=\"cart-cart-summary-table__mobile-label\">{dictionary.mobileSubtotalLabel}</span>\n <VComponent node={entry.subtotal} />\n </div>\n <div className=\"cart-cart-summary-table__item-footer\">\n <VComponent className=\"cart-cart-summary-table__item-actions\" node={entry.actions} />\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n};\n","/********************************************************************\n * Copyright 2025 Adobe\n * All Rights Reserved.\n *\n * NOTICE: Adobe permits you to use, modify, and distribute this \n * file in accordance with the terms of the Adobe license agreement \n * accompanying it. \n *******************************************************************/\n \nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes, VComponent } from '@adobe-commerce/elsie/lib';\nimport '@/cart/components/CartSummaryTable/Elements/Item/Item.css';\n\nexport interface ItemProps extends HTMLAttributes<HTMLDivElement> {\n productTitle: VNode;\n sku?: VNode;\n image?: VNode;\n configurations?: VNode;\n alert?: VNode;\n warning?: VNode;\n}\n\nexport const Item: FunctionComponent<ItemProps> = ({\n className,\n productTitle,\n sku,\n image,\n configurations,\n alert,\n warning,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['cart-cart-summary-table__item', className])}>\n {image && <VComponent className=\"cart-cart-summary-table__item-image-wrapper\" node={image} />}\n <div className=\"cart-cart-summary-table__item-details\">\n {productTitle && <VComponent className=\"cart-cart-summary-table__item-name\" node={productTitle} />}\n {sku && <VComponent className=\"cart-cart-summary-table__sku\" node={sku} />}\n {alert && <VComponent className=\"cart-cart-summary-table__item-quantity-alert-text\" node={alert} />}\n {warning && <VComponent className=\"cart-cart-summary-table__item-quantity-warning-text\" node={warning} />}\n {configurations && <VComponent className=\"cart-cart-summary-table__item-configurations\" node={configurations} />}\n </div>\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\n/**\n * This hook provides an API for getting calculated cart items data.\n */\n\nimport { useState, useCallback, useMemo } from 'preact/compat';\nimport { CartModel } from '../data/models';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { state } from '@/cart/lib/state';\nimport { PriceProps } from '@adobe-commerce/elsie/components/Price';\nimport { updateProductsFromCart } from '@/cart/api';\nimport { debounce } from '@adobe-commerce/elsie/lib';\n\n\n/**\n * Params for the useCartItems hook\n * \n * @param {\n * dictionary: ReturnType<typeof useText>;\n * onQuantityUpdate?: (item: CartModel['items'][number], quantity: number) => void;\n * onItemRemove?: (item: CartModel['items'][number]) => void;\n * }\n * \n * dictionary - The dictionary\n * onQuantityUpdate - The function to call when the quantity is updated\n * onItemRemove - The function to call when the item is removed\n */\nexport interface useCartItemsProps {\n dictionary: ReturnType<typeof useText>;\n onQuantityUpdate?: (item: CartModel['items'][number], quantity: number) => void;\n onItemRemove?: (item: CartModel['items'][number]) => void;\n}\n\n/**\n * Params for the getConfiguration function\n */\ninterface GetConfigurationParams {\n item: CartModel['items'][number];\n}\n\ninterface ItemUpdateState {\n isUpdating: boolean;\n updatedValue: any;\n}\n\n/**\n * Type for the API returned by useCartItems\n *\n * This interface ensures that the returned object from the hook is well-typed and clear for consumers.\n */\nexport interface UseCartItemsApi {\n showIncludedTaxPrice: boolean; // Whether to show prices including tax\n showExcludingTaxPrice: boolean; // Whether to show prices excluding tax\n itemsUpdating: Map<string, ItemUpdateState>; // Tracks which items are currently being updated\n itemUpdateErrors: Map<string, string>; // Tracks update errors for each item\n getConfiguration: (params: GetConfigurationParams) => object | undefined; // Returns configuration details for a cart item\n getPriceProps: (item: CartModel['items'][number]) => PriceProps; // Returns price display props for a cart item\n getSubtotalProps: (item: CartModel['items'][number]) => { subtotalProps: PriceProps; subtotalDiscountProps: PriceProps | null }; // Returns subtotal and discount subtotal props\n processQuantityChange: (item: CartModel['items'][number], value: number) => Promise<void>; // Handles quantity change with state and error management\n debouncedQuantityChange: (item: CartModel['items'][number], value: number) => void; // Debounced version of processQuantityChange\n setItemsUpdating: (itemsUpdating: Map<string, ItemUpdateState>) => void; // Allows external setting of updating state\n getWarningMessage: (item: CartModel['items'][number]) => string | undefined; // Returns warning message for a cart item\n setItemUpdateError: (uid: string, error: string) => void; // Sets or clears update error for an item\n handleRemoveItem: (item: CartModel['items'][number]) => Promise<CartModel | null>; // Removes an item from the cart\n setItemUpdating: (uid: string, state: boolean) => void; // Sets updating state for a specific item\n}\n\n/**\n * useCartItems hook\n *\n * Provides an API for managing and retrieving calculated cart items data, including price, subtotal, configuration, quantity updates, and error handling.\n *\n * @param {Object} params\n * @param {ReturnType<typeof useText>} params.dictionary - The i18n dictionary\n * @param {(item: CartModel['items'][number], quantity: number) => void} [params.onQuantityUpdate] - Callback when item quantity is updated\n * @param {(item: CartModel['items'][number]) => void} [params.onItemRemove] - Callback when item is removed\n *\n * @returns {Object} API for cart item management:\n * - showIncludedTaxPrice: boolean\n * - showExcludingTaxPrice: boolean\n * - itemsUpdating: Map<string, ItemUpdateState>\n * - itemUpdateErrors: Map<string, string>\n * - getConfiguration(item): object | undefined\n * - getPriceProps(item): PriceProps\n * - getSubtotalProps(item): { subtotalProps: PriceProps, subtotalDiscountProps: PriceProps | null }\n * - processQuantityChange(item, value): Promise<void>\n * - debouncedQuantityChange(item, value): void\n * - setItemsUpdating(map): void\n * - getWarningMessage(item): string | undefined\n * - setItemUpdateError(uid, error): void\n * - handleRemoveItem(item): Promise<CartModel>\n * - setItemUpdating(uid, state): void\n */\nexport const useCartItems = ({ dictionary, onQuantityUpdate, onItemRemove }: useCartItemsProps): UseCartItemsApi => {\n // State for tracking which items are being updated (e.g., quantity change in progress)\n const [itemsUpdating, setItemsUpdating] = useState<Map<string, ItemUpdateState>>(new Map());\n // State for tracking errors related to item updates\n const [itemUpdateErrors, setItemUpdateErrors] = useState<Map<string, string>>(new Map());\n\n // Get cart display settings (e.g., tax display mode) from global state\n const cartSettings = state?.config?.shoppingCartDisplaySetting;\n\n // Determine which price display modes are active\n const showIncludedTaxPrice = cartSettings?.price === 'INCLUDING_TAX';\n const showExcludingTaxPrice = cartSettings?.price === 'INCLUDING_EXCLUDING_TAX';\n\n /**\n * Returns a configuration object for the cart item, combining bundle, selected, and customizable options, as well as recipient/sender info.\n * Returns undefined if there is no configuration to show.\n */\n const getConfiguration = ({ item }: GetConfigurationParams) => {\n // Merge all possible configuration sources into a single object\n const configuration = {\n ...item.bundleOptions,\n ...item.selectedOptions,\n ...item.customizableOptions,\n // Add recipient/sender info if present\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 // Add file/link info if present\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 no configuration, return undefined\n if (Object.keys(configuration).length === 0) {\n return undefined;\n }\n\n return configuration;\n };\n\n /**\n * Returns price props for the cart item, depending on tax and discount settings.\n * Used for rendering the price in the UI.\n */\n const getPriceProps = (item: CartModel['items'][number]) => {\n return showIncludedTaxPrice\n ? item.discounted\n ? {\n amount: item.regularPrice.value,\n currency: item.regularPrice.currency,\n 'data-testid': 'discounted-regular-item-price',\n }\n : {\n amount: item.taxedPrice?.value,\n currency: item.taxedPrice?.currency,\n 'data-testid': 'taxed-item-price',\n }\n : {\n amount: item.regularPrice?.value,\n currency: item.regularPrice?.currency,\n 'data-testid': 'regular-item-price',\n };\n };\n\n /**\n * Returns subtotal and discount subtotal props for the cart item.\n * Used for rendering the subtotal and any discount in the UI.\n */\n const getSubtotalProps = (item: CartModel['items'][number]) => {\n const subtotalProps: PriceProps = {\n 'aria-label': dictionary.regularPrice,\n };\n // If the item is discounted, prepare a separate object for the discount subtotal\n const subtotalDiscountProps: PriceProps | null = item.discounted ? {} : null;\n\n if (\n ['INCLUDING_TAX', 'INCLUDING_EXCLUDING_TAX'].includes(\n cartSettings?.price as string\n )\n ) {\n subtotalProps['amount'] = item.rowTotalIncludingTax?.value;\n subtotalProps['currency'] = item.rowTotalIncludingTax?.currency;\n subtotalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore: data-testid is used for testing\n subtotalProps['data-testid'] = 'including-tax-item-total';\n\n if (subtotalDiscountProps) {\n // If discounted, show the original total as the discount\n subtotalProps['amount'] = item.total?.value;\n subtotalProps['currency'] = item.total?.currency;\n\n subtotalDiscountProps['amount'] = item.rowTotalIncludingTax?.value;\n subtotalDiscountProps['currency'] = item.rowTotalIncludingTax?.currency;\n subtotalDiscountProps['sale'] = true;\n subtotalDiscountProps['aria-label'] = dictionary.discountedPrice;\n // @ts-ignore: data-testid is used for testing\n subtotalDiscountProps['data-testid'] = 'discount-total';\n }\n } else {\n subtotalProps['amount'] = item.total?.value;\n subtotalProps['currency'] = item.total?.currency;\n subtotalProps['variant'] = item.discounted ? 'strikethrough' : 'default';\n // @ts-ignore: data-testid is used for testing\n subtotalProps['data-testid'] = 'regular-item-total';\n\n if (subtotalDiscountProps) {\n subtotalDiscountProps['amount'] = item.discountedTotal?.value;\n subtotalDiscountProps['currency'] = item.discountedTotal?.currency;\n subtotalDiscountProps['sale'] = true;\n subtotalDiscountProps['aria-label'] = dictionary.regularPrice;\n // @ts-ignore: data-testid is used for testing\n subtotalDiscountProps['data-testid'] = 'discount-total';\n }\n }\n\n return {\n subtotalProps,\n subtotalDiscountProps,\n };\n };\n\n /**\n * Returns a warning message for the cart item, based on update errors, insufficient quantity, or low inventory.\n * Returns undefined if there is no warning.\n */\n const getWarningMessage = (item: CartModel['items'][number]) => {\n // Check for update error first\n const updateErrorMessage = itemUpdateErrors.get(item.uid);\n\n // Check for insufficient quantity\n const insufficientQuantityText = item.insufficientQuantity && item.stockLevel\n ? item.stockLevel === 'noNumber'\n ? dictionary.insufficientQuantityGeneral // No stock level set\n : dictionary.insufficientQuantity // Stock level set\n .replace('{inventory}', item.stockLevel?.toString())\n .replace('{count}', item.quantity.toString())\n : undefined; // Could not generate insufficient quantity text\n\n // Check for low inventory\n const lowInventoryText = item.lowInventory &&\n item.onlyXLeftInStock &&\n dictionary.lowInventory.replace(\n '{count}',\n item.onlyXLeftInStock?.toString()\n );\n\n // Return the first warning found, or undefined\n return updateErrorMessage || insufficientQuantityText || lowInventoryText || undefined;\n };\n\n /**\n * Processes a quantity change for the cart item, updating state and handling errors.\n * Handles optimistic UI updates and error state.\n */\n const processQuantityChange = useCallback(\n async (item: CartModel['items'][number], value: number) => {\n\n /**\n * Updates the quantity for the cart item in the backend.\n * This function is used internally by processQuantityChange.\n */\n const handleQuantityChange = (item: CartModel['items'][number], quantity: number) => {\n return updateProductsFromCart([\n {\n uid: item.uid,\n quantity,\n },\n ]);\n };\n\n if (isNaN(value) || item.quantity === value) {\n return;\n }\n\n // Clear all item update errors before processing\n setItemUpdateErrors(new Map());\n\n try {\n // Mark item as updating\n setItemsUpdating((prev) => {\n const next = new Map(prev);\n next.set(item.uid, { isUpdating: true, updatedValue: value });\n return next;\n });\n\n await handleQuantityChange(item, value);\n\n // Callbacks for item removal or quantity update\n if (value === 0) {\n onItemRemove?.(item);\n } else {\n onQuantityUpdate?.(item, value);\n }\n } catch (error: any) {\n // Remove updating state and set error message\n setItemsUpdating((prev) => {\n const next = new Map(prev);\n next.delete(item.uid);\n return next;\n });\n setItemUpdateErrors((prev) => {\n const next = new Map(prev);\n next.set(item.uid, error.message);\n return next;\n });\n }\n },\n [onItemRemove, onQuantityUpdate]\n );\n\n /**\n * Debounced version of processQuantityChange (500ms delay).\n * Use this to avoid rapid API calls when the user is typing or clicking quickly.\n */\n const debouncedQuantityChange = useMemo(\n () => debounce(processQuantityChange, 500),\n [processQuantityChange]\n );\n\n /**\n * Removes the item from the cart (sets quantity to 0).\n * Also updates the UI state to reflect the removal.\n */\n const handleRemoveItem = (item: CartModel['items'][number]) => {\n setItemsUpdating((prev) => {\n const next = new Map(prev);\n next.set(item.uid, { isUpdating: true, updatedValue: 0 });\n return next;\n });\n return updateProductsFromCart([\n {\n uid: item.uid,\n quantity: 0,\n },\n ]).then((data) => {\n onItemRemove?.(item);\n return Promise.resolve(data);\n });\n };\n\n /**\n * Sets the updating state for a specific cart item.\n * Used to manually mark an item as updating or not.\n */\n const setItemUpdating = (uid: string, state: boolean) => {\n setItemsUpdating((prev) => {\n const next = new Map(prev);\n next.set(uid, { isUpdating: state, updatedValue: state });\n return next;\n });\n };\n\n /**\n * Sets or clears the update error for a specific cart item.\n * Pass an error string to set, or an empty string to clear.\n */\n const setItemUpdateError = (uid: string, error: string) => {\n setItemUpdateErrors((prev) => {\n const next = new Map(prev);\n if (error) {\n next.set(uid, error);\n } else {\n next.delete(uid);\n }\n return next;\n });\n };\n\n // Construct the API object to return from the hook\n const api: UseCartItemsApi = {\n showIncludedTaxPrice,\n showExcludingTaxPrice,\n itemsUpdating,\n itemUpdateErrors,\n getConfiguration,\n getPriceProps,\n getSubtotalProps,\n processQuantityChange,\n debouncedQuantityChange,\n setItemsUpdating,\n getWarningMessage,\n setItemUpdateError,\n handleRemoveItem,\n setItemUpdating,\n };\n\n // Return the API for use in components\n return api;\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 } from 'preact/compat';\nimport { classes, Container, Slot, SlotProps } from '@adobe-commerce/elsie/lib';\nimport { CartModel } from '@/cart/data/models/cart-model';\nimport { CartSummaryTable as CartSummaryTableComponent } from '@/cart/components';\nimport { Price, Skeleton, SkeletonRow, Image, ImageProps, Icon, Button } from '@adobe-commerce/elsie/components';\nimport { useState, useEffect, useMemo } from 'preact/hooks';\nimport { events } from '@adobe-commerce/event-bus';\nimport { Cart, OrderError, Trash, WarningWithCircle } from '@adobe-commerce/elsie/icons';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Item } from '@/cart/components/CartSummaryTable/Elements/Item/Item';\nimport { useCartItems } from '@/cart/hooks/useCartItems';\nimport { getPersistedCartData } from '@/cart/lib/persisted-data';\n\nexport interface CartSummaryTableContainerProps extends HTMLAttributes<HTMLDivElement> {\n /** Initial data for the cart */\n initialData?: CartModel | null;\n /** Optional CSS class name for custom styling */\n className?: string;\n /** Slots for customizing different parts of the table */\n slots?: {\n /** Slot for customizing the item cell content */\n Item?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the price cell content */\n Price?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the quantity cell content */\n Quantity?: SlotProps<{\n item: CartModel['items'][number],\n isUpdating: boolean,\n quantityInputValue: number,\n handleInputChange: (e: Event) => void,\n itemUpdateErrors: Map<string, string>,\n }>;\n /** Slot for customizing the subtotal cell content */\n Subtotal?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the thumbnail image on an item */\n Thumbnail?: SlotProps<{\n item: CartModel['items'][number],\n defaultImageProps: ImageProps,\n index: number,\n }>;\n /** Slot for customizing the product title on an item */\n ProductTitle?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the product sku on an item */\n Sku?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the product configurations on an item */\n Configurations?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the product alert on an item */\n ItemAlert?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the product warning on an item */\n ItemWarning?: SlotProps<{ item: CartModel['items'][number] }>;\n /** Slot for customizing the actions on an item */\n Actions?: SlotProps<{\n item: CartModel['items'][number],\n itemsUpdating: Map<string, { isUpdating: boolean, updatedValue: number }>,\n setItemUpdating: (uid: string, state: boolean) => void,\n setItemUpdateError: (uid: string, error: string) => void,\n }>;\n };\n /** Function for getting the product page route */\n routeProduct?: (item: CartModel['items'][number]) => string;\n /** Whether to allow quantity updates */\n allowQuantityUpdates?: boolean;\n /** Whether to allow remove items */\n allowRemoveItems?: boolean;\n /** On quantity update */\n onQuantityUpdate?: (item: CartModel['items'][number], quantity: number) => void;\n /** On item remove */\n onItemRemove?: (item: CartModel['items'][number]) => void;\n}\n\n/**\n * Skeleton loader component for the cart summary table\n */\nconst CartSummaryTableSkeleton = () => {\n return (\n <Skeleton\n data-testid=\"cart-summary-table-skeleton\"\n className=\"cart-cart-summary-table__skeleton\"\n rowGap=\"medium\"\n >\n <SkeletonRow\n variant=\"row\"\n size=\"xlarge\"\n fullWidth={true}\n lines={4}\n multilineGap=\"small\"\n />\n </Skeleton>\n );\n};\n\n/**\n * Container component for CartSummaryTable that provides slots for customizing the table cells\n * and handles data management\n */\nexport const CartSummaryTable: Container<CartSummaryTableContainerProps, CartModel | null> = ({\n initialData = null,\n routeProduct,\n slots,\n className,\n allowQuantityUpdates = true,\n allowRemoveItems = true,\n onQuantityUpdate,\n onItemRemove,\n ...props\n}) => {\n const [loading, setLoading] = useState(!initialData);\n const [cartModelData, setCartModelData] = useState<CartModel | null>(initialData);\n /** I18n text for the cart summary table */\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 includingTax: 'Cart.CartItem.includingTax',\n excludingTax: 'Cart.CartItem.excludingTax',\n remove: 'Dropin.CartItem.remove.label',\n removeDefault: 'Dropin.CartItem.removeDefault.label',\n quantity: 'Dropin.CartItem.quantity.label',\n });\n\n /** Helper functions */\n const {\n showIncludedTaxPrice,\n showExcludingTaxPrice,\n itemsUpdating,\n itemUpdateErrors,\n getConfiguration,\n getPriceProps,\n getSubtotalProps,\n debouncedQuantityChange,\n setItemsUpdating,\n getWarningMessage,\n handleRemoveItem,\n setItemUpdating,\n setItemUpdateError,\n } = useCartItems({ dictionary, onQuantityUpdate, onItemRemove });\n\n /**\n * Handle the cart data event\n */\n useEffect(() => {\n const cartDataEvent = events.on('cart/data', (payload: Cart | null) => {\n setLoading(true);\n setCartModelData(payload as CartModel);\n setItemsUpdating(new Map());\n setLoading(false);\n }, { eager: true });\n\n return () => {\n cartDataEvent?.off();\n };\n }, [\n setLoading,\n setCartModelData,\n setItemsUpdating,\n ]);\n\n // Transform cart items into table entries with slots for customization\n const entries = useMemo(() => cartModelData?.items?.sort((a, b) => {\n // Sort out of stock items and items with update errors last\n // to show them at the top since we are rendering the list in reverse order\n if (itemUpdateErrors.has(a.uid) && !itemUpdateErrors.has(b.uid)) return -1;\n if (!itemUpdateErrors.has(a.uid) && itemUpdateErrors.has(b.uid)) return 1;\n if (a.outOfStock && !b.outOfStock) return -1;\n if (!a.outOfStock && b.outOfStock) return 1;\n return 0;\n })\n .map((item, index) => {\n const isUpdating = itemsUpdating.has(item.uid);\n const warningMessage = getWarningMessage(item);\n\n const productTitle = (\n <Slot\n name=\"ProductTitle\"\n slot={slots?.ProductTitle}\n context={{ item }}\n >\n {routeProduct ? (\n <a href={routeProduct(item)}>{item.name}</a>\n ) : (\n item.name\n )}\n </Slot>\n );\n\n const defaultImageProps = {\n src: item.image.src,\n alt: item.image.alt,\n width: '300',\n height: '300',\n params: { width: 300 },\n };\n\n const defaultImage = (\n <Image\n data-testid={`cart-table-item-image-${item.sku}`}\n loading={index < 4 ? 'eager' : 'lazy'}\n {...defaultImageProps}\n />\n );\n\n const productImage = (\n <Slot\n name=\"Thumbnail\"\n slot={slots?.Thumbnail}\n className=\"cart-cart-summary-table__item-image-wrapper\"\n context={{\n item,\n defaultImageProps: {\n ...defaultImageProps,\n loading: index < 4 ? 'eager' : 'lazy',\n },\n index,\n }}\n >\n {routeProduct ? (\n <a href={routeProduct(item)}>\n {defaultImage}\n </a>\n ) : (\n defaultImage\n )}\n </Slot>\n );\n\n const productSku = (\n <Slot\n name=\"Sku\"\n slot={slots?.Sku}\n context={{ item }}\n >\n {item.sku}\n </Slot>\n );\n\n const itemAlert = item.outOfStock || slots?.ItemAlert ? (\n <Slot\n name=\"ItemAlert\"\n slot={slots?.ItemAlert}\n context={{ item }}\n >\n {item.outOfStock && (\n <div className=\"cart-cart-summary-table__item-quantity-alert-wrapper\" data-testid={`cart-table-item-quantity-alert-${item.uid}`}>\n <Icon className=\"cart-cart-summary-table__item-quantity-alert-icon\" source={OrderError} size={'16'} />\n <span className=\"cart-cart-summary-table__item-quantity-alert-text\">\n {dictionary.outOfStockAlert}\n </span>\n </div>\n )}\n </Slot>\n ) : undefined;\n\n const itemWarning = warningMessage || slots?.ItemWarning ? (\n <Slot\n name=\"ItemWarning\"\n slot={slots?.ItemWarning}\n context={{ item }}\n >\n {warningMessage && (\n <div className=\"cart-cart-summary-table__item-quantity-warning-wrapper\" data-testid={`cart-table-item-quantity-warning-${item.uid}`}>\n <Icon className=\"cart-cart-summary-table__item-quantity-warning-icon\" source={WarningWithCircle} size={'16'} />\n <span className=\"cart-cart-summary-table__item-quantity-warning-text\">\n {warningMessage}\n </span>\n </div>\n )}\n </Slot>\n ) : undefined;\n\n const itemConfigurations = getConfiguration({ item });\n const productConfigurations = itemConfigurations || slots?.Configurations ? (\n <Slot\n name=\"Configurations\"\n slot={slots?.Configurations}\n context={{ item }}\n >\n {itemConfigurations && (\n <ul className=\"cart-cart-summary-table__item-configurations\" data-testid={`cart-table-item-configurations-${item.sku}`}>\n {Object.entries(itemConfigurations).map(([key, value]) => (\n <li className=\"cart-cart-summary-table__item-configuration\" data-testid={`cart-table-item-configuration-${key}`} key={key}>\n <span className=\"cart-cart-summary-table__item-configuration-label\">{key}:</span>\n <span className=\"cart-cart-summary-table__item-configuration-value\">{value}</span>\n </li>\n ))}\n </ul>\n )}\n </Slot>\n ) : undefined;\n\n const { subtotalProps, subtotalDiscountProps } = getSubtotalProps(item);\n\n const updatedValue = itemsUpdating.get(item.uid)?.updatedValue;\n const quantityInputValue = isUpdating && !isNaN(updatedValue) ? updatedValue : item.quantity;\n\n const handleInputChange = (e: Event) => {\n const target = e.target as HTMLInputElement;\n const value = parseInt(target.value, 10);\n\n debouncedQuantityChange(item, value);\n };\n\n const actions = (\n <Slot\n name=\"Actions\"\n slot={slots?.Actions}\n context={{ item, itemsUpdating, setItemUpdating, setItemUpdateError }}\n >\n {allowRemoveItems && (\n <Button\n variant=\"tertiary\"\n size=\"medium\"\n className=\"cart-cart-summary-table__item-remove-button\"\n data-testid={`cart-table-item-remove-${item.uid}`}\n icon={<Icon source={Trash} size={'32'} />}\n onClick={() => handleRemoveItem(item)}\n aria-label={dictionary.remove?.replace('{product}', item.name) || dictionary.removeDefault}\n />\n )}\n </Slot>\n );\n\n return ({\n key: item.uid,\n uid: item.uid,\n updating: isUpdating,\n hasError: item.outOfStock || itemUpdateErrors.has(item.uid),\n item: (\n <Slot\n name=\"Item\"\n slot={slots?.Item}\n context={{ item }}\n >\n <Item\n productTitle={productTitle}\n image={productImage}\n sku={productSku}\n configurations={productConfigurations}\n alert={itemAlert}\n warning={itemWarning}\n />\n </Slot>\n ),\n price: (\n <Slot\n name=\"Price\"\n className=\"cart-cart-summary-table__item-price\"\n slot={slots?.Price}\n context={{ item }}\n >\n <Price\n {...getPriceProps(item)}\n />\n {showIncludedTaxPrice && (\n <span className=\"cart-cart-summary-table__item-price-tax-label\">\n {dictionary.includingTax}:&nbsp;\n <Price amount={item.taxedPrice?.value} currency={item.taxedPrice?.currency} />\n </span>\n )}\n {showExcludingTaxPrice && (\n <span className=\"cart-cart-summary-table__item-price-tax-label\">\n {dictionary.excludingTax}:&nbsp;\n <Price amount={item.regularPrice?.value} currency={item.regularPrice?.currency} />\n </span>\n )}\n\n </Slot>\n ),\n quantity: (\n <Slot\n name=\"Quantity\"\n className=\"cart-cart-summary-table__item-qty\"\n slot={slots?.Quantity}\n context={{ item, isUpdating, quantityInputValue, handleInputChange, itemUpdateErrors }}\n >\n {allowQuantityUpdates ? (\n <input\n id={`cart-table-item-quantity-${item.uid}`}\n data-testid={`cart-table-item-quantity-${item.uid}`}\n type=\"number\"\n min=\"1\"\n value={quantityInputValue}\n disabled={isUpdating}\n aria-label={dictionary.quantity}\n className={classes([\n 'cart-cart-summary-table__cell-qty-input',\n 'cart-cart-summary-table__cell-qty-updater',\n ['cart-cart-summary-table__cell-qty-updater--disabled', isUpdating],\n ['cart-cart-summary-table__cell-qty-updater--error', itemUpdateErrors.has(item.uid)],\n ])}\n onChange={handleInputChange}\n />\n ) : (\n <span>{item.quantity}</span>\n )}\n </Slot>\n ),\n subtotal: (\n <Slot\n name=\"Subtotal\"\n className=\"cart-cart-summary-table__item-subtotal\"\n slot={slots?.Subtotal}\n context={{ item }}\n >\n <Price\n {...subtotalProps}\n />\n {subtotalDiscountProps && (\n <Price\n {...subtotalDiscountProps}\n />\n )}\n {showIncludedTaxPrice && (\n <span className=\"cart-cart-summary-table__item-subtotal-tax-label\">\n {dictionary.includingTax}:&nbsp;\n <Price amount={item.rowTotalIncludingTax?.value} currency={item.rowTotalIncludingTax?.currency} />\n </span>\n )}\n {showExcludingTaxPrice && (\n <span className=\"cart-cart-summary-table__item-subtotal-tax-label\">\n {dictionary.excludingTax}:&nbsp;\n <Price amount={item.rowTotal?.value} currency={item.rowTotal?.currency} />\n </span>\n )}\n </Slot>\n ),\n actions,\n });\n }) || [], [\n cartModelData,\n itemsUpdating,\n allowQuantityUpdates,\n routeProduct,\n slots,\n itemUpdateErrors,\n dictionary,\n getConfiguration,\n allowRemoveItems,\n debouncedQuantityChange,\n getWarningMessage,\n getPriceProps,\n getSubtotalProps,\n handleRemoveItem,\n setItemUpdating,\n setItemUpdateError,\n showIncludedTaxPrice,\n showExcludingTaxPrice,\n ]);\n\n /**\n * Render the cart summary table skeleton if the cart is loading\n */\n if (loading) {\n return <CartSummaryTableSkeleton />;\n }\n\n /**\n * Render the cart summary table\n */\n return (\n <CartSummaryTableComponent\n entries={entries}\n className={className}\n {...props}\n />\n );\n};\n\nCartSummaryTable.getInitialData = async function () {\n return getPersistedCartData();\n};"],"names":["SvgTrash","props","React","CartSummaryTable","entries","className","dictionary","useText","jsxs","classes","jsx","entry","VComponent","Item","productTitle","sku","image","configurations","alert","warning","useCartItems","onQuantityUpdate","onItemRemove","itemsUpdating","setItemsUpdating","useState","itemUpdateErrors","setItemUpdateErrors","cartSettings","_b","_a","state","showIncludedTaxPrice","showExcludingTaxPrice","getConfiguration","item","configuration","getPriceProps","_c","_d","getSubtotalProps","subtotalProps","subtotalDiscountProps","_e","_f","_g","_h","_i","_j","getWarningMessage","updateErrorMessage","insufficientQuantityText","lowInventoryText","processQuantityChange","useCallback","value","handleQuantityChange","quantity","updateProductsFromCart","prev","next","error","debouncedQuantityChange","useMemo","debounce","uid","data","CartSummaryTableSkeleton","Skeleton","SkeletonRow","initialData","routeProduct","slots","allowQuantityUpdates","allowRemoveItems","loading","setLoading","cartModelData","setCartModelData","handleRemoveItem","setItemUpdating","setItemUpdateError","useEffect","cartDataEvent","events","payload","a","b","index","isUpdating","warningMessage","Slot","defaultImageProps","defaultImage","Image","productImage","productSku","itemAlert","Icon","OrderError","itemWarning","WarningWithCircle","itemConfigurations","productConfigurations","key","updatedValue","quantityInputValue","handleInputChange","e","target","actions","Button","Trash","Price","CartSummaryTableComponent","getPersistedCartData"],"mappings":"szBACA,MAAMA,GAAYC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,6BAA8B,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,GAAGD,CAAO,EAAkBC,EAAM,cAAc,OAAQ,CAAE,EAAG,UAAW,OAAQ,eAAgB,YAAa,IAAK,iBAAkB,EAAE,CAAE,EAAmBA,EAAM,cAAc,OAAQ,CAAE,EAAG,sIAAuI,OAAQ,eAAgB,YAAa,IAAK,iBAAkB,EAAI,CAAA,EAAmBA,EAAM,cAAc,OAAQ,CAAE,EAAG,gGAAiG,OAAQ,eAAgB,YAAa,IAAK,iBAAkB,EAAI,CAAA,EAAmBA,EAAM,cAAc,OAAQ,CAAE,EAAG,kCAAmC,OAAQ,eAAgB,YAAa,IAAK,iBAAkB,GAAI,EAAmBA,EAAM,cAAc,OAAQ,CAAE,EAAG,iCAAkC,OAAQ,eAAgB,YAAa,IAAK,iBAAkB,EAAE,CAAE,CAAC,ECoEliCC,GAA6D,CAAC,CACzE,QAAAC,EACA,UAAAC,EACA,GAAGJ,CACL,IAAM,CACJ,MAAMK,EAAaC,GAAQ,CACzB,UAAW,6BACX,WAAY,8BACZ,SAAU,4BACV,cAAe,iCACf,iBAAkB,oCAClB,eAAgB,kCAChB,oBAAqB,sCAAA,CACtB,EAGC,OAAAC,EAAC,MAAK,CAAA,GAAGP,EAAO,UAAWQ,EAAQ,CAAC,0BAA2BJ,CAAS,CAAC,EAEvE,SAAA,CAACG,EAAA,MAAA,CAAI,UAAU,kCACb,SAAA,CAAAE,EAAC,MAAI,CAAA,UAAU,uCAAwC,SAAAJ,EAAW,UAAU,EAC3EI,EAAA,MAAA,CAAI,UAAU,wCAAyC,WAAW,WAAW,EAC7EA,EAAA,MAAA,CAAI,UAAU,sCAAuC,WAAW,SAAS,EACzEA,EAAA,MAAA,CAAI,UAAU,2CAA4C,WAAW,aAAc,CAAA,CAAA,EACtF,IAEC,MAAI,CAAA,UAAU,gCACZ,SAAQN,EAAA,IAAKO,GACZH,EAAC,MAAA,CAAoB,UAAWC,EAAQ,CACpC,+BACA,CAAE,yCAA0CE,EAAM,QAAS,EAC3D,CAAE,sCAAuCA,EAAM,QAAS,CAAA,CACzD,EAED,SAAA,CAACD,EAAA,MAAA,CAAI,UAAU,qCACb,SAAAA,EAACE,GAAW,KAAMD,EAAM,KAAM,CAChC,CAAA,EACAH,EAAC,MAAI,CAAA,UAAU,sCACb,SAAA,CAAAE,EAAC,OAAK,CAAA,UAAU,wCAAyC,SAAAJ,EAAW,iBAAiB,EACpFI,EAAAE,EAAA,CAAW,KAAMD,EAAM,KAAO,CAAA,CAAA,EACjC,EACAH,EAAC,MAAI,CAAA,UAAU,oCACb,SAAA,CAAAE,EAAC,OAAK,CAAA,UAAU,wCAAyC,SAAAJ,EAAW,eAAe,EAClFI,EAAAE,EAAA,CAAW,KAAMD,EAAM,QAAU,CAAA,CAAA,EACpC,EACAH,EAAC,MAAI,CAAA,UAAU,yCACb,SAAA,CAAAE,EAAC,OAAK,CAAA,UAAU,wCAAyC,SAAAJ,EAAW,oBAAoB,EACvFI,EAAAE,EAAA,CAAW,KAAMD,EAAM,QAAU,CAAA,CAAA,EACpC,EACAD,EAAC,MAAI,CAAA,UAAU,uCACb,SAAAA,EAACE,EAAW,CAAA,UAAU,wCAAwC,KAAMD,EAAM,OAAS,CAAA,CACrF,CAAA,CAAA,CAAA,EAvBQA,EAAM,GAAA,CAyBjB,CACH,CAAA,CAAA,EACF,CAEJ,ECtGaE,GAAqC,CAAC,CACjD,UAAAR,EACA,aAAAS,EACA,IAAAC,EACA,MAAAC,EACA,eAAAC,EACA,MAAAC,EACA,QAAAC,EACA,GAAGlB,CACL,IAEIO,EAAC,MAAK,CAAA,GAAGP,EAAO,UAAWQ,EAAQ,CAAC,gCAAiCJ,CAAS,CAAC,EAC5E,SAAA,CAAAW,GAAUN,EAAAE,EAAA,CAAW,UAAU,8CAA8C,KAAMI,EAAO,EAC3FR,EAAC,MAAI,CAAA,UAAU,wCACZ,SAAA,CAAAM,GAAiBJ,EAAAE,EAAA,CAAW,UAAU,qCAAqC,KAAME,EAAc,EAC/FC,GAAQL,EAAAE,EAAA,CAAW,UAAU,+BAA+B,KAAMG,EAAK,EACvEG,GAAUR,EAAAE,EAAA,CAAW,UAAU,oDAAoD,KAAMM,EAAO,EAChGC,GAAYT,EAAAE,EAAA,CAAW,UAAU,sDAAsD,KAAMO,EAAS,EACtGF,GAAmBP,EAAAE,EAAA,CAAW,UAAU,+CAA+C,KAAMK,CAAgB,CAAA,CAAA,CAChH,CAAA,CAAA,EACF,ECkESG,GAAe,CAAC,CAAE,WAAAd,EAAY,iBAAAe,EAAkB,aAAAC,KAAuD,SAElH,KAAM,CAACC,EAAeC,CAAgB,EAAIC,GAAuC,IAAI,GAAK,EAEpF,CAACC,EAAkBC,CAAmB,EAAIF,GAA8B,IAAI,GAAK,EAGjFG,GAAeC,GAAAC,EAAAC,KAAA,YAAAD,EAAO,SAAP,YAAAD,EAAe,2BAG9BG,GAAuBJ,GAAA,YAAAA,EAAc,SAAU,gBAC/CK,GAAwBL,GAAA,YAAAA,EAAc,SAAU,0BAMhDM,EAAmB,CAAC,CAAE,KAAAC,KAAmC,CAE7D,MAAMC,EAAgB,CACpB,GAAGD,EAAK,cACR,GAAGA,EAAK,gBACR,GAAGA,EAAK,oBAER,GAAIA,EAAK,UAAY,CAAE,CAAC7B,EAAW,SAAS,EAAG6B,EAAK,SAAA,EAAc,KAClE,GAAIA,EAAK,gBAAkBA,EAAK,UAC5B,CACA,CAAC7B,EAAW,SAAS,EAAG,GAAG6B,EAAK,SAAS,KAAKA,EAAK,cAAc,GAAA,EAEjE,KACJ,GAAIA,EAAK,OAAS,CAAE,CAAC7B,EAAW,MAAM,EAAG6B,EAAK,MAAA,EAAW,KACzD,GAAIA,EAAK,aAAeA,EAAK,OACzB,CACA,CAAC7B,EAAW,MAAM,EAAG,GAAG6B,EAAK,MAAM,KAAKA,EAAK,WAAW,GAAA,EAExD,CAAC,EACL,GAAIA,EAAK,QAAU,CAAE,CAAC7B,EAAW,OAAO,EAAG6B,EAAK,OAAA,EAAY,KAE5D,GAAIA,EAAK,OAASA,EAAK,MAAM,MACzBA,EAAK,MAAM,MAAQ,EACjB,CACA,CAAC7B,EAAW,MAAM,QAChB,UACA6B,EAAK,MAAM,MAAM,SAAS,CAAA,CAC3B,EAAGA,EAAK,MAAM,MAAA,EAEf,CACA,CAAC7B,EAAW,KAAK,QAAQ,UAAW6B,EAAK,MAAM,MAAM,SAAS,CAAC,CAAC,EAC9DA,EAAK,MAAM,MAAA,EAEf,IACN,EAGA,GAAI,OAAO,KAAKC,CAAa,EAAE,SAAW,EAInC,OAAAA,CACT,EAMMC,EAAiBF,GAAqC,aACnD,OAAAH,EACHG,EAAK,WACH,CACA,OAAQA,EAAK,aAAa,MAC1B,SAAUA,EAAK,aAAa,SAC5B,cAAe,+BAAA,EAEf,CACA,QAAQL,EAAAK,EAAK,aAAL,YAAAL,EAAiB,MACzB,UAAUD,EAAAM,EAAK,aAAL,YAAAN,EAAiB,SAC3B,cAAe,kBAAA,EAEjB,CACA,QAAQS,EAAAH,EAAK,eAAL,YAAAG,EAAmB,MAC3B,UAAUC,EAAAJ,EAAK,eAAL,YAAAI,EAAmB,SAC7B,cAAe,oBACjB,CACJ,EAMMC,EAAoBL,GAAqC,yBAC7D,MAAMM,EAA4B,CAChC,aAAcnC,EAAW,YAC3B,EAEMoC,EAA2CP,EAAK,WAAa,CAAK,EAAA,KAGtE,MAAA,CAAC,gBAAiB,yBAAyB,EAAE,SAC3CP,GAAA,YAAAA,EAAc,KAAA,GAGFa,EAAA,QAAYX,EAAAK,EAAK,uBAAL,YAAAL,EAA2B,MACvCW,EAAA,UAAcZ,EAAAM,EAAK,uBAAL,YAAAN,EAA2B,SACvDY,EAAc,QAAaN,EAAK,WAAa,gBAAkB,UAE/DM,EAAc,aAAa,EAAI,2BAE3BC,IAEYD,EAAA,QAAYH,EAAAH,EAAK,QAAL,YAAAG,EAAY,MACxBG,EAAA,UAAcF,EAAAJ,EAAK,QAAL,YAAAI,EAAY,SAElBG,EAAA,QAAYC,EAAAR,EAAK,uBAAL,YAAAQ,EAA2B,MACvCD,EAAA,UAAcE,EAAAT,EAAK,uBAAL,YAAAS,EAA2B,SAC/DF,EAAsB,KAAU,GACVA,EAAA,YAAY,EAAIpC,EAAW,gBAEjDoC,EAAsB,aAAa,EAAI,oBAG3BD,EAAA,QAAYI,EAAAV,EAAK,QAAL,YAAAU,EAAY,MACxBJ,EAAA,UAAcK,EAAAX,EAAK,QAAL,YAAAW,EAAY,SACxCL,EAAc,QAAaN,EAAK,WAAa,gBAAkB,UAE/DM,EAAc,aAAa,EAAI,qBAE3BC,IACoBA,EAAA,QAAYK,EAAAZ,EAAK,kBAAL,YAAAY,EAAsB,MAClCL,EAAA,UAAcM,EAAAb,EAAK,kBAAL,YAAAa,EAAsB,SAC1DN,EAAsB,KAAU,GACVA,EAAA,YAAY,EAAIpC,EAAW,aAEjDoC,EAAsB,aAAa,EAAI,mBAIpC,CACL,cAAAD,EACA,sBAAAC,CACF,CACF,EAMMO,EAAqBd,GAAqC,SAE9D,MAAMe,EAAqBxB,EAAiB,IAAIS,EAAK,GAAG,EAGlDgB,EAA2BhB,EAAK,sBAAwBA,EAAK,WAC/DA,EAAK,aAAe,WAClB7B,EAAW,4BACXA,EAAW,qBACV,QAAQ,eAAewB,EAAAK,EAAK,aAAL,YAAAL,EAAiB,UAAU,EAClD,QAAQ,UAAWK,EAAK,SAAS,SAAS,CAAC,EAC9C,OAGEiB,EAAmBjB,EAAK,cAC5BA,EAAK,kBACL7B,EAAW,aAAa,QACtB,WACAuB,EAAAM,EAAK,mBAAL,YAAAN,EAAuB,UACzB,EAGK,OAAAqB,GAAsBC,GAA4BC,GAAoB,MAC/E,EAMMC,EAAwBC,GAC5B,MAAOnB,EAAkCoB,IAAkB,CAMnD,MAAAC,EAAuB,CAACrB,EAAkCsB,IACvDC,GAAuB,CAC5B,CACE,IAAKvB,EAAK,IACV,SAAAsB,CAAA,CACF,CACD,EAGH,GAAI,QAAMF,CAAK,GAAKpB,EAAK,WAAaoB,GAKlB,CAAA5B,EAAA,IAAI,GAAK,EAEzB,GAAA,CAEFH,EAAkBmC,GAAS,CACnB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACpB,OAAAC,EAAA,IAAIzB,EAAK,IAAK,CAAE,WAAY,GAAM,aAAcoB,EAAO,EACrDK,CAAA,CACR,EAEK,MAAAJ,EAAqBrB,EAAMoB,CAAK,EAGlCA,IAAU,EACZjC,GAAA,MAAAA,EAAea,GAEfd,GAAA,MAAAA,EAAmBc,EAAMoB,SAEpBM,EAAY,CAEnBrC,EAAkBmC,GAAS,CACnB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACpB,OAAAC,EAAA,OAAOzB,EAAK,GAAG,EACbyB,CAAA,CACR,EACDjC,EAAqBgC,GAAS,CACtB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,IAAIzB,EAAK,IAAK0B,EAAM,OAAO,EACzBD,CAAA,CACR,CAAA,EAEL,EACA,CAACtC,EAAcD,CAAgB,CACjC,EAMMyC,EAA0BC,GAC9B,IAAMC,GAASX,EAAuB,GAAG,EACzC,CAACA,CAAqB,CACxB,EAsEO,MAlBsB,CAC3B,qBAAArB,EACA,sBAAAC,EACA,cAAAV,EACA,iBAAAG,EACA,iBAAAQ,EACA,cAAAG,EACA,iBAAAG,EACA,sBAAAa,EACA,wBAAAS,EACA,iBAAAtC,EACA,kBAAAyB,EACA,mBAzByB,CAACgB,EAAaJ,IAAkB,CACzDlC,EAAqBgC,GAAS,CACtB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAIE,EACGD,EAAA,IAAIK,EAAKJ,CAAK,EAEnBD,EAAK,OAAOK,CAAG,EAEVL,CAAA,CACR,CACH,EAgBE,iBA3DwBzB,IACxBX,EAAkBmC,GAAS,CACnB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACpB,OAAAC,EAAA,IAAIzB,EAAK,IAAK,CAAE,WAAY,GAAM,aAAc,EAAG,EACjDyB,CAAA,CACR,EACMF,GAAuB,CAC5B,CACE,IAAKvB,EAAK,IACV,SAAU,CAAA,CACZ,CACD,EAAE,KAAM+B,IACP5C,GAAA,MAAAA,EAAea,GACR,QAAQ,QAAQ+B,CAAI,EAC5B,GA8CD,gBAvCsB,CAACD,EAAalC,IAAmB,CACvDP,EAAkBmC,GAAS,CACnB,MAAAC,EAAO,IAAI,IAAID,CAAI,EACzB,OAAAC,EAAK,IAAIK,EAAK,CAAE,WAAYlC,EAAO,aAAcA,EAAO,EACjD6B,CAAA,CACR,CACH,CAkCA,CAIF,ECxUMO,GAA2B,IAE7BzD,EAAC0D,GAAA,CACC,cAAY,8BACZ,UAAU,oCACV,OAAO,SAEP,SAAA1D,EAAC2D,GAAA,CACC,QAAQ,MACR,KAAK,SACL,UAAW,GACX,MAAO,EACP,aAAa,OAAA,CAAA,CACf,CACF,EAQSlE,GAAgF,CAAC,CAC5F,YAAAmE,EAAc,KACd,aAAAC,EACA,MAAAC,EACA,UAAAnE,EACA,qBAAAoE,EAAuB,GACvB,iBAAAC,EAAmB,GACnB,iBAAArD,EACA,aAAAC,EACA,GAAGrB,CACL,IAAM,CACJ,KAAM,CAAC0E,EAASC,CAAU,EAAInD,GAAS,CAAC6C,CAAW,EAC7C,CAACO,EAAeC,CAAgB,EAAIrD,GAA2B6C,CAAW,EAE1EhE,EAAaC,GAAQ,CACzB,KAAM,qBACN,MAAO,sBACP,QAAS,oBACT,QAAS,wBACT,UAAW,0BACX,aAAc,6BACd,gBAAiB,gCACjB,OAAQ,uBACR,aAAc,6BACd,qBAAsB,qCACtB,4BAA6B,4CAC7B,kBAAmB,iCACnB,sBAAuB,iCACvB,gBAAiB,+BACjB,aAAc,gCACd,oBAAqB,oCACrB,SAAU,qBACV,QAAS,oBACT,gBAAiB,mCACjB,cAAe,8BACf,aAAc,6BACd,aAAc,6BACd,OAAQ,+BACR,cAAe,sCACf,SAAU,gCAAA,CACX,EAGK,CACJ,qBAAAyB,EACA,sBAAAC,EACA,cAAAV,EACA,iBAAAG,EACA,iBAAAQ,EACA,cAAAG,EACA,iBAAAG,EACA,wBAAAsB,EACA,iBAAAtC,EACA,kBAAAyB,EACA,iBAAA8B,EACA,gBAAAC,EACA,mBAAAC,GACE7D,GAAa,CAAE,WAAAd,EAAY,iBAAAe,EAAkB,aAAAC,EAAc,EAK/D4D,GAAU,IAAM,CACd,MAAMC,EAAgBC,GAAO,GAAG,YAAcC,GAAyB,CACrET,EAAW,EAAI,EACfE,EAAiBO,CAAoB,EACpB7D,EAAA,IAAI,GAAK,EAC1BoD,EAAW,EAAK,CAAA,EACf,CAAE,MAAO,GAAM,EAElB,MAAO,IAAM,CACXO,GAAA,MAAAA,EAAe,KACjB,CAAA,EACC,CACDP,EACAE,EACAtD,CAAA,CACD,EAGK,MAAApB,EAAU2D,GAAQ,WAAM,QAAAjC,EAAA+C,GAAA,YAAAA,EAAe,QAAf,YAAA/C,EAAsB,KAAK,CAACwD,EAAGC,IAGvD7D,EAAiB,IAAI4D,EAAE,GAAG,GAAK,CAAC5D,EAAiB,IAAI6D,EAAE,GAAG,EAAU,GACpE,CAAC7D,EAAiB,IAAI4D,EAAE,GAAG,GAAK5D,EAAiB,IAAI6D,EAAE,GAAG,EAAU,EACpED,EAAE,YAAc,CAACC,EAAE,WAAmB,GACtC,CAACD,EAAE,YAAcC,EAAE,WAAmB,EACnC,GAEN,IAAI,CAACpD,EAAMqD,IAAU,gCACpB,MAAMC,EAAalE,EAAc,IAAIY,EAAK,GAAG,EACvCuD,EAAiBzC,EAAkBd,CAAI,EAEvCrB,EACJJ,EAACiF,EAAA,CACC,KAAK,eACL,KAAMnB,GAAA,YAAAA,EAAO,aACb,QAAS,CAAE,KAAArC,CAAK,EAEf,SAAAoC,EACE7D,EAAA,IAAA,CAAE,KAAM6D,EAAapC,CAAI,EAAI,SAAAA,EAAK,IAAK,CAAA,EAExCA,EAAK,IAAA,CAET,EAGIyD,EAAoB,CACxB,IAAKzD,EAAK,MAAM,IAChB,IAAKA,EAAK,MAAM,IAChB,MAAO,MACP,OAAQ,MACR,OAAQ,CAAE,MAAO,GAAI,CACvB,EAEM0D,EACJnF,EAACoF,GAAA,CACC,cAAa,yBAAyB3D,EAAK,GAAG,GAC9C,QAASqD,EAAQ,EAAI,QAAU,OAC9B,GAAGI,CAAA,CACN,EAGIG,GACJrF,EAACiF,EAAA,CACC,KAAK,YACL,KAAMnB,GAAA,YAAAA,EAAO,UACb,UAAU,8CACV,QAAS,CACP,KAAArC,EACA,kBAAmB,CACjB,GAAGyD,EACH,QAASJ,EAAQ,EAAI,QAAU,MACjC,EACA,MAAAA,CACF,EAEC,SAAAjB,IACE,IAAE,CAAA,KAAMA,EAAapC,CAAI,EACvB,UACH,CAAA,EAEA0D,CAAA,CAEJ,EAGIG,GACJtF,EAACiF,EAAA,CACC,KAAK,MACL,KAAMnB,GAAA,YAAAA,EAAO,IACb,QAAS,CAAE,KAAArC,CAAK,EAEf,SAAKA,EAAA,GAAA,CACR,EAGI8D,GAAY9D,EAAK,YAAcqC,GAAA,MAAAA,EAAO,UAC1C9D,EAACiF,EAAA,CACC,KAAK,YACL,KAAMnB,GAAA,YAAAA,EAAO,UACb,QAAS,CAAE,KAAArC,CAAK,EAEf,SAAAA,EAAK,YACJ3B,EAAC,MAAI,CAAA,UAAU,uDAAuD,cAAa,kCAAkC2B,EAAK,GAAG,GAC3H,SAAA,CAAAzB,EAACwF,GAAK,UAAU,oDAAoD,OAAQC,GAAY,KAAM,KAAM,EACnGzF,EAAA,OAAA,CAAK,UAAU,oDACb,WAAW,eACd,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,EAGF,OAEE0F,GAAcV,GAAkBlB,GAAA,MAAAA,EAAO,YAC3C9D,EAACiF,EAAA,CACC,KAAK,cACL,KAAMnB,GAAA,YAAAA,EAAO,YACb,QAAS,CAAE,KAAArC,CAAK,EAEf,SAAAuD,KACE,MAAI,CAAA,UAAU,yDAAyD,cAAa,oCAAoCvD,EAAK,GAAG,GAC/H,SAAA,CAAAzB,EAACwF,GAAK,UAAU,sDAAsD,OAAQG,GAAmB,KAAM,KAAM,EAC5G3F,EAAA,OAAA,CAAK,UAAU,sDACb,SACHgF,CAAA,CAAA,CAAA,CACF,CAAA,CAAA,CAAA,EAGF,OAEEY,EAAqBpE,EAAiB,CAAE,KAAAC,EAAM,EAC9CoE,GAAwBD,GAAsB9B,GAAA,MAAAA,EAAO,eACzD9D,EAACiF,EAAA,CACC,KAAK,iBACL,KAAMnB,GAAA,YAAAA,EAAO,eACb,QAAS,CAAE,KAAArC,CAAK,EAEf,SAAAmE,GACE5F,EAAA,KAAA,CAAG,UAAU,+CAA+C,cAAa,kCAAkCyB,EAAK,GAAG,GACjH,SAAA,OAAO,QAAQmE,CAAkB,EAAE,IAAI,CAAC,CAACE,EAAKjD,CAAK,IAClD/C,EAAC,KAAG,CAAA,UAAU,8CAA8C,cAAa,iCAAiCgG,CAAG,GAC3G,SAAA,CAAChG,EAAA,OAAA,CAAK,UAAU,oDAAqD,SAAA,CAAAgG,EAAI,GAAA,EAAC,EACzE9F,EAAA,OAAA,CAAK,UAAU,oDAAqD,SAAM6C,CAAA,CAAA,CAAA,CAFyC,EAAAiD,CAGtH,CACD,CACH,CAAA,CAAA,CAAA,EAGF,OAEE,CAAE,cAAA/D,GAAe,sBAAAC,GAA0BF,EAAiBL,CAAI,EAEhEsE,GAAe3E,EAAAP,EAAc,IAAIY,EAAK,GAAG,IAA1B,YAAAL,EAA6B,aAC5C4E,EAAqBjB,GAAc,CAAC,MAAMgB,CAAY,EAAIA,EAAetE,EAAK,SAE9EwE,EAAqBC,GAAa,CACtC,MAAMC,EAASD,EAAE,OACXrD,GAAQ,SAASsD,EAAO,MAAO,EAAE,EAEvC/C,EAAwB3B,EAAMoB,EAAK,CACrC,EAEMuD,GACJpG,EAACiF,EAAA,CACC,KAAK,UACL,KAAMnB,GAAA,YAAAA,EAAO,QACb,QAAS,CAAE,KAAArC,EAAM,cAAAZ,EAAe,gBAAAyD,EAAiB,mBAAAC,CAAmB,EAEnE,SACCP,GAAAhE,EAACqG,GAAA,CACC,QAAQ,WACR,KAAK,SACL,UAAU,8CACV,cAAa,0BAA0B5E,EAAK,GAAG,GAC/C,KAAOzB,EAAAwF,EAAA,CAAK,OAAQc,GAAO,KAAM,KAAM,EACvC,QAAS,IAAMjC,EAAiB5C,CAAI,EACpC,eAAYN,EAAAvB,EAAW,SAAX,YAAAuB,EAAmB,QAAQ,YAAaM,EAAK,QAAS7B,EAAW,aAAA,CAAA,CAC/E,CAEJ,EAGM,MAAA,CACN,IAAK6B,EAAK,IACV,IAAKA,EAAK,IACV,SAAUsD,EACV,SAAUtD,EAAK,YAAcT,EAAiB,IAAIS,EAAK,GAAG,EAC1D,KACEzB,EAACiF,EAAA,CACC,KAAK,OACL,KAAMnB,GAAA,YAAAA,EAAO,KACb,QAAS,CAAE,KAAArC,CAAK,EAEhB,SAAAzB,EAACG,GAAA,CACC,aAAAC,EACA,MAAOiF,GACP,IAAKC,GACL,eAAgBO,GAChB,MAAON,GACP,QAASG,EAAA,CAAA,CACX,CACF,EAEF,MACE5F,EAACmF,EAAA,CACC,KAAK,QACL,UAAU,sCACV,KAAMnB,GAAA,YAAAA,EAAO,MACb,QAAS,CAAE,KAAArC,CAAK,EAEhB,SAAA,CAAAzB,EAACuG,EAAA,CACE,GAAG5E,EAAcF,CAAI,CAAA,CACxB,EACCH,GACCxB,EAAC,OAAK,CAAA,UAAU,gDACb,SAAA,CAAWF,EAAA,aAAa,KACzBI,EAACuG,GAAM,QAAQ3E,EAAAH,EAAK,aAAL,YAAAG,EAAiB,MAAO,UAAUC,GAAAJ,EAAK,aAAL,YAAAI,GAAiB,QAAU,CAAA,CAAA,EAC9E,EAEDN,GACCzB,EAAC,OAAK,CAAA,UAAU,gDACb,SAAA,CAAWF,EAAA,aAAa,KACzBI,EAACuG,GAAM,QAAQtE,GAAAR,EAAK,eAAL,YAAAQ,GAAmB,MAAO,UAAUC,GAAAT,EAAK,eAAL,YAAAS,GAAmB,QAAU,CAAA,CAAA,CAClF,CAAA,CAAA,CAAA,CAGJ,EAEF,SACElC,EAACiF,EAAA,CACC,KAAK,WACL,UAAU,oCACV,KAAMnB,GAAA,YAAAA,EAAO,SACb,QAAS,CAAE,KAAArC,EAAM,WAAAsD,EAAY,mBAAAiB,EAAoB,kBAAAC,EAAmB,iBAAAjF,CAAiB,EAEpF,SACC+C,EAAA/D,EAAC,QAAA,CACC,GAAI,4BAA4ByB,EAAK,GAAG,GACxC,cAAa,4BAA4BA,EAAK,GAAG,GACjD,KAAK,SACL,IAAI,IACJ,MAAOuE,EACP,SAAUjB,EACV,aAAYnF,EAAW,SACvB,UAAWG,EAAQ,CACjB,0CACA,4CACA,CAAC,sDAAuDgF,CAAU,EAClE,CAAC,mDAAoD/D,EAAiB,IAAIS,EAAK,GAAG,CAAC,CAAA,CACpF,EACD,SAAUwE,CAAA,CAGZ,EAAAjG,EAAC,OAAM,CAAA,SAAAyB,EAAK,QAAS,CAAA,CAAA,CAEzB,EAEF,SACE3B,EAACmF,EAAA,CACC,KAAK,WACL,UAAU,yCACV,KAAMnB,GAAA,YAAAA,EAAO,SACb,QAAS,CAAE,KAAArC,CAAK,EAEhB,SAAA,CAAAzB,EAACuG,EAAA,CACE,GAAGxE,EAAA,CACN,EACCC,GACChC,EAACuG,EAAA,CACE,GAAGvE,CAAA,CACN,EAEDV,GACCxB,EAAC,OAAK,CAAA,UAAU,mDACb,SAAA,CAAWF,EAAA,aAAa,KACzBI,EAACuG,GAAM,QAAQpE,GAAAV,EAAK,uBAAL,YAAAU,GAA2B,MAAO,UAAUC,GAAAX,EAAK,uBAAL,YAAAW,GAA2B,QAAU,CAAA,CAAA,EAClG,EAEDb,GACCzB,EAAC,OAAK,CAAA,UAAU,mDACb,SAAA,CAAWF,EAAA,aAAa,KACzBI,EAACuG,GAAM,QAAQlE,GAAAZ,EAAK,WAAL,YAAAY,GAAe,MAAO,UAAUC,GAAAb,EAAK,WAAL,YAAAa,GAAe,QAAU,CAAA,CAAA,CAC1E,CAAA,CAAA,CAAA,CAEJ,EAEF,QAAA8D,EACF,CACD,KAAK,CAAA,GAAI,CACVjC,EACAtD,EACAkD,EACAF,EACAC,EACA9C,EACApB,EACA4B,EACAwC,EACAZ,EACAb,EACAZ,EACAG,EACAuC,EACAC,EACAC,EACAjD,EACAC,CAAA,CACD,EAKD,OAAI0C,IACMR,GAAyB,EAAA,EAOjCzD,EAACwG,GAAA,CACC,QAAA9G,EACA,UAAAC,EACC,GAAGJ,CAAA,CACN,CAEJ,EAEAE,GAAiB,eAAiB,gBAAkB,CAClD,OAAOgH,GAAqB,CAC9B","x_google_ignoreList":[0]}
@@ -1,3 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
3
  import*as e from"@dropins/tools/preact-compat.js";const o=t=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},e.createElement("path",{d:"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"}));export{o as S};
4
+ //# sourceMappingURL=ChevronDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChevronDown.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/ChevronDown.svg"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronDown = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 9.87701L12.0001 14.132L16.2551 9.87701\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronDown;\n"],"names":["SvgChevronDown","props","React"],"mappings":"kDACK,MAACA,EAAkBC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,kDAAmD,OAAQ,eAAgB,YAAa,IAAK,cAAe,SAAU,eAAgB,QAAS,CAAC","x_google_ignoreList":[0]}
@@ -1,3 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
3
  import*as e from"@dropins/tools/preact-compat.js";const o=t=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},e.createElement("path",{d:"M7.74512 14.132L12.0001 9.87701L16.2551 14.132",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round"}));export{o as S};
4
+ //# sourceMappingURL=ChevronUp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChevronUp.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/ChevronUp.svg"],"sourcesContent":["import * as React from \"react\";\nconst SvgChevronUp = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { d: \"M7.74512 14.132L12.0001 9.87701L16.2551 14.132\", stroke: \"currentColor\", strokeWidth: 1.5, strokeLinecap: \"square\", strokeLinejoin: \"round\" }));\nexport default SvgChevronUp;\n"],"names":["SvgChevronUp","props","React"],"mappings":"kDACK,MAACA,EAAgBC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAK,EAAoBC,EAAM,cAAc,OAAQ,CAAE,EAAG,iDAAkD,OAAQ,eAAgB,YAAa,IAAK,cAAe,SAAU,eAAgB,QAAS,CAAC","x_google_ignoreList":[0]}
package/chunks/Coupon.js CHANGED
@@ -1,3 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
3
  import*as C from"@dropins/tools/preact-compat.js";const M=H=>C.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...H},C.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M22 6.25H22.75C22.75 5.83579 22.4142 5.5 22 5.5V6.25ZM22 9.27L22.2514 9.97663C22.5503 9.87029 22.75 9.58731 22.75 9.27H22ZM20.26 12.92L19.5534 13.1714L19.5539 13.1728L20.26 12.92ZM22 14.66H22.75C22.75 14.3433 22.551 14.0607 22.2528 13.9539L22 14.66ZM22 17.68V18.43C22.4142 18.43 22.75 18.0942 22.75 17.68H22ZM2 17.68H1.25C1.25 18.0942 1.58579 18.43 2 18.43V17.68ZM2 14.66L1.74865 13.9534C1.44969 14.0597 1.25 14.3427 1.25 14.66H2ZM3.74 11.01L4.44663 10.7586L4.44611 10.7572L3.74 11.01ZM2 9.27H1.25C1.25 9.58675 1.44899 9.86934 1.7472 9.97611L2 9.27ZM2 6.25V5.5C1.58579 5.5 1.25 5.83579 1.25 6.25H2ZM21.25 6.25V9.27H22.75V6.25H21.25ZM21.7486 8.56337C19.8706 9.23141 18.8838 11.2889 19.5534 13.1714L20.9666 12.6686C20.5762 11.5711 21.1494 10.3686 22.2514 9.97663L21.7486 8.56337ZM19.5539 13.1728C19.9195 14.1941 20.7259 15.0005 21.7472 15.3661L22.2528 13.9539C21.6541 13.7395 21.1805 13.2659 20.9661 12.6672L19.5539 13.1728ZM21.25 14.66V17.68H22.75V14.66H21.25ZM22 16.93H2V18.43H22V16.93ZM2.75 17.68V14.66H1.25V17.68H2.75ZM2.25135 15.3666C4.12941 14.6986 5.11623 12.6411 4.44663 10.7586L3.03337 11.2614C3.42377 12.3589 2.85059 13.5614 1.74865 13.9534L2.25135 15.3666ZM4.44611 10.7572C4.08045 9.73588 3.27412 8.92955 2.2528 8.56389L1.7472 9.97611C2.34588 10.1905 2.81955 10.6641 3.03389 11.2628L4.44611 10.7572ZM2.75 9.27V6.25H1.25V9.27H2.75ZM2 7H22V5.5H2V7ZM7.31 6.74V18.17H8.81V6.74H7.31ZM17.0997 8.39967L11.0397 14.4597L12.1003 15.5203L18.1603 9.46033L17.0997 8.39967ZM12.57 9.67C12.57 9.87231 12.4159 10 12.27 10V11.5C13.2839 11.5 14.07 10.6606 14.07 9.67H12.57ZM12.27 10C12.1241 10 11.97 9.87231 11.97 9.67H10.47C10.47 10.6606 11.2561 11.5 12.27 11.5V10ZM11.97 9.67C11.97 9.46769 12.1241 9.34 12.27 9.34V7.84C11.2561 7.84 10.47 8.67938 10.47 9.67H11.97ZM12.27 9.34C12.4159 9.34 12.57 9.46769 12.57 9.67H14.07C14.07 8.67938 13.2839 7.84 12.27 7.84V9.34ZM17.22 14.32C17.22 14.5223 17.0659 14.65 16.92 14.65V16.15C17.9339 16.15 18.72 15.3106 18.72 14.32H17.22ZM16.92 14.65C16.7741 14.65 16.62 14.5223 16.62 14.32H15.12C15.12 15.3106 15.9061 16.15 16.92 16.15V14.65ZM16.62 14.32C16.62 14.1177 16.7741 13.99 16.92 13.99V12.49C15.9061 12.49 15.12 13.3294 15.12 14.32H16.62ZM16.92 13.99C17.0659 13.99 17.22 14.1177 17.22 14.32H18.72C18.72 13.3294 17.9339 12.49 16.92 12.49V13.99Z",fill:"currentColor"}));export{M as S};
4
+ //# sourceMappingURL=Coupon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Coupon.js","sources":["../../node_modules/@adobe-commerce/elsie/src/icons/Coupon.svg"],"sourcesContent":["import * as React from \"react\";\nconst SvgCoupon = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M22 6.25H22.75C22.75 5.83579 22.4142 5.5 22 5.5V6.25ZM22 9.27L22.2514 9.97663C22.5503 9.87029 22.75 9.58731 22.75 9.27H22ZM20.26 12.92L19.5534 13.1714L19.5539 13.1728L20.26 12.92ZM22 14.66H22.75C22.75 14.3433 22.551 14.0607 22.2528 13.9539L22 14.66ZM22 17.68V18.43C22.4142 18.43 22.75 18.0942 22.75 17.68H22ZM2 17.68H1.25C1.25 18.0942 1.58579 18.43 2 18.43V17.68ZM2 14.66L1.74865 13.9534C1.44969 14.0597 1.25 14.3427 1.25 14.66H2ZM3.74 11.01L4.44663 10.7586L4.44611 10.7572L3.74 11.01ZM2 9.27H1.25C1.25 9.58675 1.44899 9.86934 1.7472 9.97611L2 9.27ZM2 6.25V5.5C1.58579 5.5 1.25 5.83579 1.25 6.25H2ZM21.25 6.25V9.27H22.75V6.25H21.25ZM21.7486 8.56337C19.8706 9.23141 18.8838 11.2889 19.5534 13.1714L20.9666 12.6686C20.5762 11.5711 21.1494 10.3686 22.2514 9.97663L21.7486 8.56337ZM19.5539 13.1728C19.9195 14.1941 20.7259 15.0005 21.7472 15.3661L22.2528 13.9539C21.6541 13.7395 21.1805 13.2659 20.9661 12.6672L19.5539 13.1728ZM21.25 14.66V17.68H22.75V14.66H21.25ZM22 16.93H2V18.43H22V16.93ZM2.75 17.68V14.66H1.25V17.68H2.75ZM2.25135 15.3666C4.12941 14.6986 5.11623 12.6411 4.44663 10.7586L3.03337 11.2614C3.42377 12.3589 2.85059 13.5614 1.74865 13.9534L2.25135 15.3666ZM4.44611 10.7572C4.08045 9.73588 3.27412 8.92955 2.2528 8.56389L1.7472 9.97611C2.34588 10.1905 2.81955 10.6641 3.03389 11.2628L4.44611 10.7572ZM2.75 9.27V6.25H1.25V9.27H2.75ZM2 7H22V5.5H2V7ZM7.31 6.74V18.17H8.81V6.74H7.31ZM17.0997 8.39967L11.0397 14.4597L12.1003 15.5203L18.1603 9.46033L17.0997 8.39967ZM12.57 9.67C12.57 9.87231 12.4159 10 12.27 10V11.5C13.2839 11.5 14.07 10.6606 14.07 9.67H12.57ZM12.27 10C12.1241 10 11.97 9.87231 11.97 9.67H10.47C10.47 10.6606 11.2561 11.5 12.27 11.5V10ZM11.97 9.67C11.97 9.46769 12.1241 9.34 12.27 9.34V7.84C11.2561 7.84 10.47 8.67938 10.47 9.67H11.97ZM12.27 9.34C12.4159 9.34 12.57 9.46769 12.57 9.67H14.07C14.07 8.67938 13.2839 7.84 12.27 7.84V9.34ZM17.22 14.32C17.22 14.5223 17.0659 14.65 16.92 14.65V16.15C17.9339 16.15 18.72 15.3106 18.72 14.32H17.22ZM16.92 14.65C16.7741 14.65 16.62 14.5223 16.62 14.32H15.12C15.12 15.3106 15.9061 16.15 16.92 16.15V14.65ZM16.62 14.32C16.62 14.1177 16.7741 13.99 16.92 13.99V12.49C15.9061 12.49 15.12 13.3294 15.12 14.32H16.62ZM16.92 13.99C17.0659 13.99 17.22 14.1177 17.22 14.32H18.72C18.72 13.3294 17.9339 12.49 16.92 12.49V13.99Z\", fill: \"currentColor\" }));\nexport default SvgCoupon;\n"],"names":["SvgCoupon","props","React"],"mappings":"kDACK,MAACA,EAAaC,GAA0BC,EAAM,cAAc,MAAO,CAAE,MAAO,GAAI,OAAQ,GAAI,QAAS,YAAa,KAAM,OAAQ,MAAO,6BAA8B,GAAGD,CAAO,EAAkBC,EAAM,cAAc,OAAQ,CAAE,aAAc,qBAAsB,EAAG,quEAAsuE,KAAM,cAAc,CAAE,CAAC","x_google_ignoreList":[0]}
package/chunks/Coupons.js CHANGED
@@ -1,3 +1,4 @@
1
1
  /*! Copyright 2025 Adobe
2
2
  All Rights Reserved. */
3
- import*as e from"@dropins/tools/preact-compat.js";import{useRef as k}from"@dropins/tools/preact-compat.js";import{jsx as n,jsxs as u}from"@dropins/tools/preact-jsx-runtime.js";import{classes as t,VComponent as r,getFormValues as x}from"@dropins/tools/lib.js";import{Accordion as L,AccordionSection as S}from"@dropins/tools/components.js";/* empty css */import{S as C}from"./Coupon.js";import{useText as N}from"@dropins/tools/i18n.js";const B=o=>e.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...o},e.createElement("g",{id:"Large"},e.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),e.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},e.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),e.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),V=o=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o},e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),I=o=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o},e.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),W=({accordionSectionTitle:o,accordionSectionIcon:h,className:g,children:M,couponCodeField:s,applyCouponsButton:i,appliedCoupons:l,error:d,onApplyCoupon:a,...p})=>{const c=k(null),v=N({couponTitle:"Cart.PriceSummary.coupon.title"}),w=_=>{var f;_.preventDefault();const E=x(c.current);a==null||a(E);const m=(f=c==null?void 0:c.current)==null?void 0:f.querySelector("input");m&&(m.value="")};return n("div",{...p,"data-testid":"cart-coupons",className:t(["cart-coupons",g]),children:n(L,{"data-testid":"coupon-code",className:t(["cart-coupons__accordion"]),actionIconPosition:"right",iconOpen:B,iconClose:I,children:u(S,{title:o??v.couponTitle,iconLeft:h??C,showIconLeft:!0,renderContentWhenClosed:!1,"data-testid":"coupon-code-accordion-section",className:t(["cart-coupons__accordion-section"]),children:[n("form",{"data-testid":"coupon-code-form",className:t(["coupon-code-form--edit"]),ref:c,children:u("div",{className:t(["coupon-code-form__action"]),children:[s&&n(r,{node:s,className:t(["coupon-code-form__codes"])}),i&&n(r,{node:i,className:t(["coupon-code-form--button"]),onClick:w,type:"submit"})]})}),d&&n(r,{node:d,className:t(["coupon-code-form__error"])}),l&&n(r,{node:l,className:t(["coupon-code-form__applied"])})]})})})};export{W as C,V as S};
3
+ import*as e from"@dropins/tools/preact-compat.js";import{useRef as k}from"@dropins/tools/preact-compat.js";import{jsx as n,jsxs as u}from"@dropins/tools/preact-jsx-runtime.js";import{classes as t,VComponent as r,getFormValues as x}from"@dropins/tools/lib.js";import{Accordion as L,AccordionSection as S}from"@dropins/tools/components.js";/* empty css */import{S as C}from"./Coupon.js";import{useText as N}from"@dropins/tools/i18n.js";const B=o=>e.createElement("svg",{id:"Icon_Add_Base","data-name":"Icon \\u2013 Add \\u2013 Base",xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",...o},e.createElement("g",{id:"Large"},e.createElement("rect",{id:"Placement_area","data-name":"Placement area",width:24,height:24,fill:"#fff",opacity:0}),e.createElement("g",{id:"Add_icon","data-name":"Add icon",transform:"translate(9.734 9.737)"},e.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_579","data-name":"Line 579",y2:12.7,transform:"translate(2.216 -4.087)",fill:"none",stroke:"currentColor"}),e.createElement("line",{vectorEffect:"non-scaling-stroke",id:"Line_580","data-name":"Line 580",x2:12.7,transform:"translate(-4.079 2.263)",fill:"none",stroke:"currentColor"})))),V=o=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o},e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 5.64001L5.62988 18.37",stroke:"currentColor"}),e.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M18.3599 18.37L5.62988 5.64001",stroke:"currentColor"})),I=o=>e.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...o},e.createElement("path",{d:"M17.3332 11.75H6.6665",strokeWidth:1.5,strokeLinecap:"square",strokeLinejoin:"round",vectorEffect:"non-scaling-stroke",fill:"none",stroke:"currentColor"})),W=({accordionSectionTitle:o,accordionSectionIcon:h,className:g,children:M,couponCodeField:s,applyCouponsButton:i,appliedCoupons:l,error:d,onApplyCoupon:a,...p})=>{const c=k(null),v=N({couponTitle:"Cart.PriceSummary.coupon.title"}),w=_=>{var f;_.preventDefault();const E=x(c.current);a==null||a(E);const m=(f=c==null?void 0:c.current)==null?void 0:f.querySelector("input");m&&(m.value="")};return n("div",{...p,"data-testid":"cart-coupons",className:t(["cart-coupons",g]),children:n(L,{"data-testid":"coupon-code",className:t(["cart-coupons__accordion"]),actionIconPosition:"right",iconOpen:B,iconClose:I,children:u(S,{title:o??v.couponTitle,iconLeft:h??C,showIconLeft:!0,renderContentWhenClosed:!1,"data-testid":"coupon-code-accordion-section",className:t(["cart-coupons__accordion-section"]),children:[n("form",{"data-testid":"coupon-code-form",className:t(["coupon-code-form--edit"]),ref:c,children:u("div",{className:t(["coupon-code-form__action"]),children:[s&&n(r,{node:s,className:t(["coupon-code-form__codes"])}),i&&n(r,{node:i,className:t(["coupon-code-form--button"]),onClick:w,type:"submit"})]})}),d&&n(r,{node:d,className:t(["coupon-code-form__error"])}),l&&n(r,{node:l,className:t(["coupon-code-form__applied"])})]})})})};export{W as C,V as S};
4
+ //# sourceMappingURL=Coupons.js.map