@anker-in/headless-ui 1.3.19 → 1.3.20

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 (52) hide show
  1. package/dist/cjs/biz-components/BuyOneGetOneShelf/PriceAndActions.d.ts +1 -0
  2. package/dist/cjs/biz-components/BuyOneGetOneShelf/PriceAndActions.js +1 -1
  3. package/dist/cjs/biz-components/BuyOneGetOneShelf/PriceAndActions.js.map +3 -3
  4. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +1 -0
  5. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  6. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js.map +3 -3
  7. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductImage.d.ts +2 -0
  8. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductImage.js +1 -1
  9. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductImage.js.map +3 -3
  10. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductInfo.d.ts +2 -5
  11. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductInfo.js +1 -1
  12. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductInfo.js.map +3 -3
  13. package/dist/cjs/biz-components/BuyOneGetOneShelf/types.d.ts +2 -0
  14. package/dist/cjs/biz-components/BuyOneGetOneShelf/types.js.map +1 -1
  15. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -0
  16. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  17. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  18. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.d.ts +22 -0
  19. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +2 -0
  20. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +7 -0
  21. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.d.ts +18 -0
  22. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.js +1 -1
  23. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.js.map +1 -1
  24. package/dist/cjs/shared/Styles.d.ts +2 -0
  25. package/dist/cjs/shared/Styles.js +1 -1
  26. package/dist/cjs/shared/Styles.js.map +3 -3
  27. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.d.ts +1 -0
  28. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.js +1 -1
  29. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.js.map +3 -3
  30. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +1 -0
  31. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  32. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +3 -3
  33. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.d.ts +2 -0
  34. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.js +1 -1
  35. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.js.map +3 -3
  36. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.d.ts +2 -5
  37. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.js +1 -1
  38. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.js.map +3 -3
  39. package/dist/esm/biz-components/BuyOneGetOneShelf/types.d.ts +2 -0
  40. package/dist/esm/biz-components/BuyOneGetOneShelf/types.js.map +1 -1
  41. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -0
  42. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  43. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  44. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.d.ts +22 -0
  45. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +2 -0
  46. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +7 -0
  47. package/dist/esm/biz-components/MultiLayoutGraphicBlock/types.d.ts +18 -0
  48. package/dist/esm/shared/Styles.d.ts +2 -0
  49. package/dist/esm/shared/Styles.js +1 -1
  50. package/dist/esm/shared/Styles.js.map +3 -3
  51. package/package.json +1 -1
  52. package/style.css +21 -0
@@ -6,6 +6,7 @@ export interface PriceAndActionsProps extends React.HTMLAttributes<HTMLDivElemen
6
6
  priceLabel?: string;
7
7
  learnMoreText?: string;
8
8
  shopNowText?: string;
9
+ soldOutText?: string;
9
10
  onLearnMore?: () => void;
10
11
  onShopNow?: () => void;
11
12
  availableForSale: boolean;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var O=Object.create;var s=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var B=(e,t)=>{for(var i in t)s(e,i,{get:t[i],enumerable:!0})},x=(e,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of C(t))!w.call(e,r)&&r!==i&&s(e,r,{get:()=>t[r],enumerable:!(o=S(t,r))||o.enumerable});return e};var h=(e,t,i)=>(i=e!=null?O(L(e)):{},x(t||!e||!e.__esModule?s(i,"default",{value:e,enumerable:!0}):i,e)),z=e=>x(s({},"__esModule",{value:!0}),e);var T={};B(T,{default:()=>M});module.exports=z(T);var a=require("react/jsx-runtime"),H=h(require("react")),n=require("../../helpers/index.js"),l=h(require("../../components/button.js")),d=require("../../components/text.js"),c=require("../../components/index.js");const y=H.forwardRef(({currentPrice:e,originalPrice:t,priceLabel:i,learnMoreText:o="Learn More",shopNowText:r="Shop Now",onLearnMore:P,onShopNow:N,availableForSale:p,learnMoreLoading:v,shopNowLoading:b,className:k,trackingTitle:m,trackingDescription:g,trackingSku:u,classNames:f},A)=>(0,a.jsxs)("div",{ref:A,className:(0,n.cn)("flex w-full flex-col justify-center gap-2",k),children:[(0,a.jsx)("div",{className:"flex w-full items-center gap-2",children:p?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.Heading,{size:2,className:(0,n.cn)("text-info-primary"),children:e}),t&&(0,a.jsx)(c.Heading,{size:2,className:(0,n.cn)("text-info-tertiary line-through",f?.productCardOriginalPrice),children:t})]}):(0,a.jsx)(d.Text,{size:4,className:(0,n.cn)("text-info-primary text-2xl leading-[1.2] tracking-[-0.48px]","tablet:text-xl tablet:tracking-[-0.4px]"),children:"Sold out"})}),i&&(0,a.jsx)(d.Text,{size:4,className:(0,n.cn)("text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]",f?.productCardPriceLabel),children:i}),(0,a.jsxs)("div",{className:(0,n.cn)("flex w-full items-center gap-3","tablet:gap-2"),children:[(0,a.jsx)(l.default,{variant:"secondary",size:"lg",onClick:P,loading:v,"data-headless-type-name":"BuyOneGetOneShelf#ProductCard","data-headless-title-desc-button":`${m||""}#${g||""}#${o}`,"data-headless-sku":u,children:o}),(0,a.jsx)(l.default,{variant:"primary",size:"lg",onClick:N,disabled:!p,loading:b,"data-headless-type-name":"BuyOneGetOneShelf#ProductCard","data-headless-title-desc-button":`${m||""}#${g||""}#${r}`,"data-headless-sku":u,children:r})]})]}));y.displayName="PriceAndActions";var M=y;
1
+ "use strict";"use client";var S=Object.create;var s=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var T=(e,t)=>{for(var i in t)s(e,i,{get:t[i],enumerable:!0})},x=(e,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of L(t))!B.call(e,r)&&r!==i&&s(e,r,{get:()=>t[r],enumerable:!(o=C(t,r))||o.enumerable});return e};var h=(e,t,i)=>(i=e!=null?S(w(e)):{},x(t||!e||!e.__esModule?s(i,"default",{value:e,enumerable:!0}):i,e)),z=e=>x(s({},"__esModule",{value:!0}),e);var $={};T($,{default:()=>M});module.exports=z($);var a=require("react/jsx-runtime"),H=h(require("react")),n=require("../../helpers/index.js"),l=h(require("../../components/button.js")),d=require("../../components/text.js"),c=require("../../components/index.js");const y=H.forwardRef(({currentPrice:e,originalPrice:t,priceLabel:i,learnMoreText:o="Learn More",shopNowText:r="Shop Now",soldOutText:P="Sold out",onLearnMore:N,onShopNow:v,availableForSale:p,learnMoreLoading:b,shopNowLoading:O,className:k,trackingTitle:m,trackingDescription:g,trackingSku:u,classNames:f},A)=>(0,a.jsxs)("div",{ref:A,className:(0,n.cn)("flex w-full flex-col justify-center gap-2",k),children:[(0,a.jsx)("div",{className:"flex w-full items-center gap-2",children:p?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c.Heading,{size:2,className:(0,n.cn)("text-info-primary"),children:e}),t&&(0,a.jsx)(c.Heading,{size:2,className:(0,n.cn)("text-info-tertiary line-through",f?.productCardOriginalPrice),children:t})]}):(0,a.jsx)(d.Text,{size:4,className:(0,n.cn)("text-info-primary text-2xl leading-[1.2] tracking-[-0.48px]","tablet:text-xl tablet:tracking-[-0.4px]"),children:P})}),i&&(0,a.jsx)(d.Text,{size:4,className:(0,n.cn)("text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]",f?.productCardPriceLabel),children:i}),(0,a.jsxs)("div",{className:(0,n.cn)("flex w-full items-center gap-3","tablet:gap-2"),children:[(0,a.jsx)(l.default,{variant:"secondary",size:"lg",onClick:N,loading:b,"data-headless-type-name":"BuyOneGetOneShelf#ProductCard","data-headless-title-desc-button":`${m||""}#${g||""}#${o}`,"data-headless-sku":u,children:o}),(0,a.jsx)(l.default,{variant:"primary",size:"lg",onClick:v,disabled:!p,loading:O,"data-headless-type-name":"BuyOneGetOneShelf#ProductCard","data-headless-title-desc-button":`${m||""}#${g||""}#${r}`,"data-headless-sku":u,children:r})]})]}));y.displayName="PriceAndActions";var M=y;
2
2
  //# sourceMappingURL=PriceAndActions.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/PriceAndActions.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport Button from '../../components/button.js'\nimport { Text } from '../../components/text.js'\nimport { Heading } from '../../components/index.js'\nimport type { BuyOneGetOneShelfProductCardSemanticName } from './types.js'\n\nexport interface PriceAndActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPrice: string\n originalPrice?: string\n priceLabel?: string\n learnMoreText?: string\n shopNowText?: string\n onLearnMore?: () => void\n onShopNow?: () => void\n availableForSale: boolean\n learnMoreLoading?: boolean\n shopNowLoading?: boolean\n trackingTitle?: string\n trackingDescription?: string\n trackingSku?: string\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n}\n\nconst PriceAndActions = React.forwardRef<HTMLDivElement, PriceAndActionsProps>(\n (\n {\n currentPrice,\n originalPrice,\n priceLabel,\n learnMoreText = 'Learn More',\n shopNowText = 'Shop Now',\n onLearnMore,\n onShopNow,\n availableForSale,\n learnMoreLoading,\n shopNowLoading,\n className,\n trackingTitle,\n trackingDescription,\n trackingSku,\n classNames,\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn('flex w-full flex-col justify-center gap-2', className)}>\n <div className=\"flex w-full items-center gap-2\">\n {availableForSale ? (\n <>\n <Heading size={2} className={cn('text-info-primary')}>\n {currentPrice}\n </Heading>\n {originalPrice && (\n <Heading\n size={2}\n className={cn('text-info-tertiary line-through', classNames?.productCardOriginalPrice)}\n >\n {originalPrice}\n </Heading>\n )}\n </>\n ) : (\n <Text\n size={4}\n className={cn(\n 'text-info-primary text-2xl leading-[1.2] tracking-[-0.48px]',\n 'tablet:text-xl tablet:tracking-[-0.4px]'\n )}\n >\n Sold out\n </Text>\n )}\n </div>\n\n {priceLabel && (\n <Text\n size={4}\n className={cn(\n 'text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]',\n classNames?.productCardPriceLabel\n )}\n >\n {priceLabel}\n </Text>\n )}\n\n {/* \u6309\u94AE\u7EC4 */}\n <div className={cn('flex w-full items-center gap-3', 'tablet:gap-2')}>\n <Button\n variant=\"secondary\"\n size=\"lg\"\n onClick={onLearnMore}\n loading={learnMoreLoading}\n data-headless-type-name=\"BuyOneGetOneShelf#ProductCard\"\n data-headless-title-desc-button={`${trackingTitle || ''}#${trackingDescription || ''}#${learnMoreText}`}\n data-headless-sku={trackingSku}\n >\n {learnMoreText}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={onShopNow}\n disabled={!availableForSale}\n loading={shopNowLoading}\n data-headless-type-name=\"BuyOneGetOneShelf#ProductCard\"\n data-headless-title-desc-button={`${trackingTitle || ''}#${trackingDescription || ''}#${shopNowText}`}\n data-headless-sku={trackingSku}\n >\n {shopNowText}\n </Button>\n </div>\n </div>\n )\n }\n)\n\nPriceAndActions.displayName = 'PriceAndActions'\n\nexport default PriceAndActions\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAmDY,IAAAI,EAAA,6BAjDZC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAmB,yCACnBC,EAAqB,oCACrBC,EAAwB,qCAoBxB,MAAMC,EAAkBL,EAAM,WAC5B,CACE,CACE,aAAAM,EACA,cAAAC,EACA,WAAAC,EACA,cAAAC,EAAgB,aAChB,YAAAC,EAAc,WACd,YAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,UAAAC,EACA,cAAAC,EACA,oBAAAC,EACA,YAAAC,EACA,WAAAC,CACF,EACAC,OAGE,QAAC,OAAI,IAAKA,EAAK,aAAW,MAAG,4CAA6CL,CAAS,EACjF,oBAAC,OAAI,UAAU,iCACZ,SAAAH,KACC,oBACE,oBAAC,WAAQ,KAAM,EAAG,aAAW,MAAG,mBAAmB,EAChD,SAAAP,EACH,EACCC,MACC,OAAC,WACC,KAAM,EACN,aAAW,MAAG,kCAAmCa,GAAY,wBAAwB,EAEpF,SAAAb,EACH,GAEJ,KAEA,OAAC,QACC,KAAM,EACN,aAAW,MACT,8DACA,yCACF,EACD,oBAED,EAEJ,EAECC,MACC,OAAC,QACC,KAAM,EACN,aAAW,MACT,0EACAY,GAAY,qBACd,EAEC,SAAAZ,EACH,KAIF,QAAC,OAAI,aAAW,MAAG,iCAAkC,cAAc,EACjE,oBAAC,EAAAc,QAAA,CACC,QAAQ,YACR,KAAK,KACL,QAASX,EACT,QAASG,EACT,0BAAwB,gCACxB,kCAAiC,GAAGG,GAAiB,EAAE,IAAIC,GAAuB,EAAE,IAAIT,CAAa,GACrG,oBAAmBU,EAElB,SAAAV,EACH,KACA,OAAC,EAAAa,QAAA,CACC,QAAQ,UACR,KAAK,KACL,QAASV,EACT,SAAU,CAACC,EACX,QAASE,EACT,0BAAwB,gCACxB,kCAAiC,GAAGE,GAAiB,EAAE,IAAIC,GAAuB,EAAE,IAAIR,CAAW,GACnG,oBAAmBS,EAElB,SAAAT,EACH,GACF,GACF,CAGN,EAEAL,EAAgB,YAAc,kBAE9B,IAAOR,EAAQQ",
6
- "names": ["PriceAndActions_exports", "__export", "PriceAndActions_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_button", "import_text", "import_components", "PriceAndActions", "currentPrice", "originalPrice", "priceLabel", "learnMoreText", "shopNowText", "onLearnMore", "onShopNow", "availableForSale", "learnMoreLoading", "shopNowLoading", "className", "trackingTitle", "trackingDescription", "trackingSku", "classNames", "ref", "Button"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport Button from '../../components/button.js'\nimport { Text } from '../../components/text.js'\nimport { Heading } from '../../components/index.js'\nimport type { BuyOneGetOneShelfProductCardSemanticName } from './types.js'\n\nexport interface PriceAndActionsProps extends React.HTMLAttributes<HTMLDivElement> {\n currentPrice: string\n originalPrice?: string\n priceLabel?: string\n learnMoreText?: string\n shopNowText?: string\n soldOutText?: string\n onLearnMore?: () => void\n onShopNow?: () => void\n availableForSale: boolean\n learnMoreLoading?: boolean\n shopNowLoading?: boolean\n trackingTitle?: string\n trackingDescription?: string\n trackingSku?: string\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n}\n\nconst PriceAndActions = React.forwardRef<HTMLDivElement, PriceAndActionsProps>(\n (\n {\n currentPrice,\n originalPrice,\n priceLabel,\n learnMoreText = 'Learn More',\n shopNowText = 'Shop Now',\n soldOutText = 'Sold out',\n onLearnMore,\n onShopNow,\n availableForSale,\n learnMoreLoading,\n shopNowLoading,\n className,\n trackingTitle,\n trackingDescription,\n trackingSku,\n classNames,\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn('flex w-full flex-col justify-center gap-2', className)}>\n <div className=\"flex w-full items-center gap-2\">\n {availableForSale ? (\n <>\n <Heading size={2} className={cn('text-info-primary')}>\n {currentPrice}\n </Heading>\n {originalPrice && (\n <Heading\n size={2}\n className={cn('text-info-tertiary line-through', classNames?.productCardOriginalPrice)}\n >\n {originalPrice}\n </Heading>\n )}\n </>\n ) : (\n <Text\n size={4}\n className={cn(\n 'text-info-primary text-2xl leading-[1.2] tracking-[-0.48px]',\n 'tablet:text-xl tablet:tracking-[-0.4px]'\n )}\n >\n {soldOutText}\n </Text>\n )}\n </div>\n\n {priceLabel && (\n <Text\n size={4}\n className={cn(\n 'text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]',\n classNames?.productCardPriceLabel\n )}\n >\n {priceLabel}\n </Text>\n )}\n\n {/* \u6309\u94AE\u7EC4 */}\n <div className={cn('flex w-full items-center gap-3', 'tablet:gap-2')}>\n <Button\n variant=\"secondary\"\n size=\"lg\"\n onClick={onLearnMore}\n loading={learnMoreLoading}\n data-headless-type-name=\"BuyOneGetOneShelf#ProductCard\"\n data-headless-title-desc-button={`${trackingTitle || ''}#${trackingDescription || ''}#${learnMoreText}`}\n data-headless-sku={trackingSku}\n >\n {learnMoreText}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n onClick={onShopNow}\n disabled={!availableForSale}\n loading={shopNowLoading}\n data-headless-type-name=\"BuyOneGetOneShelf#ProductCard\"\n data-headless-title-desc-button={`${trackingTitle || ''}#${trackingDescription || ''}#${shopNowText}`}\n data-headless-sku={trackingSku}\n >\n {shopNowText}\n </Button>\n </div>\n </div>\n )\n }\n)\n\nPriceAndActions.displayName = 'PriceAndActions'\n\nexport default PriceAndActions\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAqDY,IAAAI,EAAA,6BAnDZC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAmB,yCACnBC,EAAqB,oCACrBC,EAAwB,qCAqBxB,MAAMC,EAAkBL,EAAM,WAC5B,CACE,CACE,aAAAM,EACA,cAAAC,EACA,WAAAC,EACA,cAAAC,EAAgB,aAChB,YAAAC,EAAc,WACd,YAAAC,EAAc,WACd,YAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,UAAAC,EACA,cAAAC,EACA,oBAAAC,EACA,YAAAC,EACA,WAAAC,CACF,EACAC,OAGE,QAAC,OAAI,IAAKA,EAAK,aAAW,MAAG,4CAA6CL,CAAS,EACjF,oBAAC,OAAI,UAAU,iCACZ,SAAAH,KACC,oBACE,oBAAC,WAAQ,KAAM,EAAG,aAAW,MAAG,mBAAmB,EAChD,SAAAR,EACH,EACCC,MACC,OAAC,WACC,KAAM,EACN,aAAW,MAAG,kCAAmCc,GAAY,wBAAwB,EAEpF,SAAAd,EACH,GAEJ,KAEA,OAAC,QACC,KAAM,EACN,aAAW,MACT,8DACA,yCACF,EAEC,SAAAI,EACH,EAEJ,EAECH,MACC,OAAC,QACC,KAAM,EACN,aAAW,MACT,0EACAa,GAAY,qBACd,EAEC,SAAAb,EACH,KAIF,QAAC,OAAI,aAAW,MAAG,iCAAkC,cAAc,EACjE,oBAAC,EAAAe,QAAA,CACC,QAAQ,YACR,KAAK,KACL,QAASX,EACT,QAASG,EACT,0BAAwB,gCACxB,kCAAiC,GAAGG,GAAiB,EAAE,IAAIC,GAAuB,EAAE,IAAIV,CAAa,GACrG,oBAAmBW,EAElB,SAAAX,EACH,KACA,OAAC,EAAAc,QAAA,CACC,QAAQ,UACR,KAAK,KACL,QAASV,EACT,SAAU,CAACC,EACX,QAASE,EACT,0BAAwB,gCACxB,kCAAiC,GAAGE,GAAiB,EAAE,IAAIC,GAAuB,EAAE,IAAIT,CAAW,GACnG,oBAAmBU,EAElB,SAAAV,EACH,GACF,GACF,CAGN,EAEAL,EAAgB,YAAc,kBAE9B,IAAOR,EAAQQ",
6
+ "names": ["PriceAndActions_exports", "__export", "PriceAndActions_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_button", "import_text", "import_components", "PriceAndActions", "currentPrice", "originalPrice", "priceLabel", "learnMoreText", "shopNowText", "soldOutText", "onLearnMore", "onShopNow", "availableForSale", "learnMoreLoading", "shopNowLoading", "className", "trackingTitle", "trackingDescription", "trackingSku", "classNames", "ref", "Button"]
7
7
  }
@@ -16,6 +16,7 @@ export interface ProductCardProps extends React.HTMLAttributes<HTMLDivElement> {
16
16
  /** 布局模式 */
17
17
  layout?: 'horizontal' | 'vertical';
18
18
  classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>;
19
+ soldOutText?: string;
19
20
  /** @deprecated Use `onProductImageClick` instead. */
20
21
  onProductClick?: (product: ProductCardData) => void;
21
22
  /** 产品图片点击回调 */
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var q=Object.create;var p=Object.defineProperty;var J=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var Q=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var X=(e,t)=>{for(var o in t)p(e,o,{get:t[o],enumerable:!0})},L=(e,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of K(t))!U.call(e,l)&&l!==o&&p(e,l,{get:()=>t[l],enumerable:!(s=J(t,l))||s.enumerable});return e};var d=(e,t,o)=>(o=e!=null?q(Q(e)):{},L(t||!e||!e.__esModule?p(o,"default",{value:e,enumerable:!0}):o,e)),Y=e=>L(p({},"__esModule",{value:!0}),e);var $={};X($,{default:()=>Z});module.exports=Y($);var n=require("react/jsx-runtime"),a=d(require("react")),S=require("../../helpers/index.js"),N=d(require("./ProductImage.js")),y=d(require("./ProductInfo.js")),M=d(require("./GiftSelection.js")),I=d(require("./PriceAndActions.js"));const g=a.forwardRef(({productData:e,gifts:t=[],giftType:o=1,selectedGiftSku:s,sceneImages:l,tags:O,layout:G="horizontal",className:T,onProductClick:P,onProductImageClick:b,onLearnMore:z,onShopNow:R,onGiftClick:k,onGiftSelectionChange:j,classNames:x,...A},B)=>{const[E,C]=a.useState(!1),[H,w]=a.useState(!1),[v,f]=a.useState(()=>!t||t.length===0?[]:o===2?t.map(r=>r.id):[t[0].id]),u=a.useMemo(()=>t?t.map(r=>({...r,selected:v.includes(r.id)})):[],[t,v]);a.useEffect(()=>{if(!t||t.length===0){f([]);return}f(o===2?t.map(r=>r.id):r=>{const i=r[0];return i&&t.some(h=>h.id===i)?[i]:[t[0].id]})},[t,o]);const m=a.useMemo(()=>({...e,gifts:t,gift_type:o}),[e,t,o]),W=r=>{if(o===2){const i=u.filter(c=>c.selected);k?.(r,i);return}f(()=>{const i=[r.id],c=t?.filter(h=>i.includes(h.id))||[];return k?.(r,c),j?.(c,m),i})},F=()=>{(b??P)?.(m)},V=async()=>{const r=u.filter(i=>i.selected);C(!0);try{await z?.(m,r)}finally{C(!1)}},_=async()=>{const r=u.filter(i=>i.selected);w(!0);try{await R?.(m,r)}finally{w(!1)}};return(0,n.jsxs)("div",{ref:B,className:(0,S.cn)("bg-container-primary rounded-box flex items-stretch overflow-hidden",G==="horizontal"?["laptop:flex-row lg-desktop:min-h-[560px] desktop:min-h-[448px] tablet:min-h-[526px] min-h-[610px] flex-col","laptop:col-span-2"]:["flex-col justify-between"],b??P?"cursor-pointer":"",T),...A,children:[(0,n.jsx)(N.default,{images:l,name:e.name,layout:G,tags:e.tags||O,onClick:F}),(0,n.jsx)("div",{className:(0,S.cn)("bg-container-primary desktop:p-6 flex flex-col justify-between p-4",G==="horizontal"?["rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none","laptop:basis-[39.1%]","desktop:basis-[42.1%]","lg-desktop:basis-[42.1%]","shrink-0"]:["rounded-b-box","w-full","grow"]),children:(0,n.jsxs)("div",{className:"flex flex-1 flex-col justify-between gap-6",children:[(0,n.jsx)(y.default,{name:e.name,onClick:F,description:e.description,classNames:x}),(0,n.jsx)(M.default,{freeGiftLabel:e.freeGiftLabel,freeGifts:u,onGiftClick:W,giftType:o,selectedGiftSku:s}),(0,n.jsx)(I.default,{currentPrice:e.currentPrice??"",originalPrice:e.originalPrice,priceLabel:e.priceLabel,learnMoreText:e.learnMoreText,shopNowText:e.shopNowText,onLearnMore:V,onShopNow:_,availableForSale:e.availableForSale,learnMoreLoading:E,shopNowLoading:H,trackingTitle:e.name,trackingDescription:e.description,trackingSku:e.sku,classNames:x})]})})]})});g.displayName="BuyOneGetOneShelf.ProductCard";var Z=g;
1
+ "use strict";"use client";var K=Object.create;var G=Object.defineProperty;var Q=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var X=Object.getPrototypeOf,Y=Object.prototype.hasOwnProperty;var Z=(e,t)=>{for(var o in t)G(e,o,{get:t[o],enumerable:!0})},N=(e,t,o,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of U(t))!Y.call(e,l)&&l!==o&&G(e,l,{get:()=>t[l],enumerable:!(s=Q(t,l))||s.enumerable});return e};var c=(e,t,o)=>(o=e!=null?K(X(e)):{},N(t||!e||!e.__esModule?G(o,"default",{value:e,enumerable:!0}):o,e)),D=e=>N(G({},"__esModule",{value:!0}),e);var te={};Z(te,{default:()=>ee});module.exports=D(te);var i=require("react/jsx-runtime"),a=c(require("react")),P=require("../../helpers/index.js"),M=c(require("./ProductImage.js")),I=c(require("./ProductInfo.js")),O=c(require("./GiftSelection.js")),T=c(require("./PriceAndActions.js"));const y=a.forwardRef(({productData:e,gifts:t=[],giftType:o=1,selectedGiftSku:s,sceneImages:l,tags:H,layout:h="horizontal",className:z,onProductClick:b,onProductImageClick:x,onLearnMore:R,onShopNow:j,onGiftClick:k,onGiftSelectionChange:A,classNames:C,soldOutText:B,...E},W)=>{const[V,w]=a.useState(!1),[_,v]=a.useState(!1),[g,f]=a.useState(()=>!t||t.length===0?[]:o===2?t.map(r=>r.id):[t[0].id]),u=a.useMemo(()=>t?t.map(r=>({...r,selected:g.includes(r.id)})):[],[t,g]);a.useEffect(()=>{if(!t||t.length===0){f([]);return}f(o===2?t.map(r=>r.id):r=>{const n=r[0];return n&&t.some(S=>S.id===n)?[n]:[t[0].id]})},[t,o]);const m=a.useMemo(()=>({...e,gifts:t,gift_type:o}),[e,t,o]),$=r=>{if(o===2){const n=u.filter(d=>d.selected);k?.(r,n);return}f(()=>{const n=[r.id],d=t?.filter(S=>n.includes(S.id))||[];return k?.(r,d),A?.(d,m),n})},p=!!(x??b),F=`/products/${e.handle}`,L=()=>{(x??b)?.(m)},q=async()=>{const r=u.filter(n=>n.selected);w(!0);try{await R?.(m,r)}finally{w(!1)}},J=async()=>{const r=u.filter(n=>n.selected);v(!0);try{await j?.(m,r)}finally{v(!1)}};return(0,i.jsxs)("div",{ref:W,className:(0,P.cn)("bg-container-primary rounded-box flex items-stretch overflow-hidden",h==="horizontal"?["laptop:flex-row lg-desktop:min-h-[560px] desktop:min-h-[448px] tablet:min-h-[526px] min-h-[610px] flex-col","laptop:col-span-2"]:["flex-col justify-between"],z),...E,children:[(0,i.jsx)(M.default,{images:l,name:e.name,layout:h,tags:e.tags||H,onClick:p?L:void 0,href:p?void 0:F}),(0,i.jsx)("div",{className:(0,P.cn)("bg-container-primary desktop:p-6 flex flex-col justify-between p-4",h==="horizontal"?["rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none","laptop:basis-[39.1%]","desktop:basis-[42.1%]","lg-desktop:basis-[42.1%]","shrink-0"]:["rounded-b-box","w-full","grow"]),children:(0,i.jsxs)("div",{className:"flex flex-1 flex-col justify-between gap-6",children:[(0,i.jsx)(I.default,{name:e.name,onClick:p?L:void 0,href:p?void 0:F,description:e.description,classNames:C}),(0,i.jsx)(O.default,{freeGiftLabel:e.freeGiftLabel,freeGifts:u,onGiftClick:$,giftType:o,selectedGiftSku:s}),(0,i.jsx)(T.default,{currentPrice:e.currentPrice??"",originalPrice:e.originalPrice,priceLabel:e.priceLabel,learnMoreText:e.learnMoreText,shopNowText:e.shopNowText,soldOutText:B,onLearnMore:q,onShopNow:J,availableForSale:e.availableForSale,learnMoreLoading:V,shopNowLoading:_,trackingTitle:e.name,trackingDescription:e.description,trackingSku:e.sku,classNames:C})]})})]})});y.displayName="BuyOneGetOneShelf.ProductCard";var ee=y;
2
2
  //# sourceMappingURL=ProductCard.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/ProductCard.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport ProductImage from './ProductImage.js'\nimport ProductInfo from './ProductInfo.js'\nimport GiftSelection from './GiftSelection.js'\nimport PriceAndActions from './PriceAndActions.js'\nimport type {\n FreeGift,\n FreeGiftWithSelection,\n ProductCardData,\n PureProductData,\n ProductTag,\n BuyOneGetOneShelfProductCardSemanticName,\n} from './types.js'\n\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4EA7\u54C1\u6570\u636E\uFF08\u4E0D\u5305\u542B\u8D60\u54C1\u4FE1\u606F\uFF09 */\n productData: PureProductData\n /** \u8D60\u54C1\u5217\u8868 */\n gifts?: FreeGift[]\n /** \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1 */\n giftType?: 1 | 2\n /** \u573A\u666F\u56FE\u7247 */\n sceneImages: any\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u5F53\u524D\u9009\u4E2D\u7684\u8D60\u54C1SKU\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n selectedGiftSku?: string\n /** \u5E03\u5C40\u6A21\u5F0F */\n layout?: 'horizontal' | 'vertical'\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More \u70B9\u51FB\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now \u70B9\u51FB\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u70B9\u51FB\u56DE\u8C03 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u56DE\u8C03 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n /** \u9009\u4E2D\u8D60\u54C1SKU\u53D8\u5316\u56DE\u8C03\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n onSelectedGiftSkuChange?: (selectedSku: string | null) => void\n}\n\n/**\n * ProductCard - \u4E70\u8D60\u8D27\u67B6\u4EA7\u54C1\u5361\u7247\n *\n * @description \u7528\u4E8E\u4E70\u4E00\u8D60\u4E00\u6D3B\u52A8\u7684\u4EA7\u54C1\u5C55\u793A\u5361\u7247\uFF0C\u5DE6\u4FA7\u5C55\u793A\u4EA7\u54C1\u56FE\u7247\u548C\u6807\u7B7E\uFF0C\u53F3\u4FA7\u5C55\u793A\u4EA7\u54C1\u4FE1\u606F\u3001\u8D60\u54C1\u548C\u8D2D\u4E70\u6309\u94AE\n */\nconst ProductCard = React.forwardRef<HTMLDivElement, ProductCardProps>(\n (\n {\n productData,\n gifts = [],\n giftType = 1,\n selectedGiftSku,\n sceneImages,\n tags,\n layout = 'horizontal',\n className,\n onProductClick,\n onProductImageClick,\n onLearnMore,\n onShopNow,\n onGiftClick,\n onGiftSelectionChange,\n classNames,\n ...props\n },\n ref\n ) => {\n const [learnMoreLoading, setLearnMoreLoading] = React.useState(false)\n const [shopNowLoading, setShopNowLoading] = React.useState(false)\n\n // \u5185\u90E8\u72B6\u6001\u7BA1\u7406\u8D60\u54C1\u7684\u9009\u62E9\u72B6\u6001 - \u4F7F\u7528\u9009\u4E2D\u7684ID\u6570\u7EC4\u800C\u4E0D\u662F\u4FEE\u6539gift\u5BF9\u8C61\n const [selectedGiftIds, setSelectedGiftIds] = React.useState<string[]>(() => {\n if (!gifts || gifts.length === 0) return []\n\n if (giftType === 2) {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u9009\u4E2D\u6240\u6709\u8D60\u54C1\n return gifts.map((gift: FreeGift) => gift.id)\n } else {\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F) - \u9ED8\u8BA4\u9009\u4E2D\u7B2C\u4E00\u4E2A\u8D60\u54C1\n return [gifts[0].id]\n }\n })\n\n // \u751F\u6210\u5E26\u6709\u9009\u62E9\u72B6\u6001\u7684\u8D60\u54C1\u5217\u8868\u7528\u4E8E\u6E32\u67D3\n const giftsWithSelection = React.useMemo(() => {\n if (!gifts) return []\n\n return gifts.map((gift: FreeGift) => ({\n ...gift,\n selected: selectedGiftIds.includes(gift.id),\n }))\n }, [gifts, selectedGiftIds])\n\n // \u5F53 gifts \u6216 giftType \u66F4\u65B0\u65F6\uFF0C\u540C\u6B65\u66F4\u65B0\u5185\u90E8\u72B6\u6001\n React.useEffect(() => {\n if (!gifts || gifts.length === 0) {\n setSelectedGiftIds([])\n return\n }\n\n if (giftType === 2) {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u9009\u4E2D\u6240\u6709\u8D60\u54C1\n setSelectedGiftIds(gifts.map((gift: FreeGift) => gift.id))\n } else {\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F) - \u667A\u80FD\u72B6\u6001\u7BA1\u7406\n setSelectedGiftIds(prevSelectedIds => {\n // \u68C0\u67E5\u5F53\u524D\u9009\u4E2D\u7684\u793C\u54C1\u662F\u5426\u4ECD\u7136\u5B58\u5728\u4E8E\u65B0\u7684 gifts \u5217\u8868\u4E2D\n const currentSelectedId = prevSelectedIds[0]\n const isCurrentSelectionValid =\n currentSelectedId && gifts.some((gift: FreeGift) => gift.id === currentSelectedId)\n\n // \u5982\u679C\u5F53\u524D\u9009\u4E2D\u72B6\u6001\u4ECD\u7136\u6709\u6548\uFF0C\u4FDD\u6301\u4E0D\u53D8\uFF1B\u5426\u5219\u9ED8\u8BA4\u9009\u4E2D\u7B2C\u4E00\u4E2A\n return isCurrentSelectionValid ? [currentSelectedId] : [gifts[0].id]\n })\n }\n }, [gifts, giftType])\n\n // \u6784\u9020\u5B8C\u6574\u7684\u4EA7\u54C1\u6570\u636E\u7528\u4E8E\u56DE\u8C03\n const fullProductData: ProductCardData = React.useMemo(\n () => ({\n ...productData,\n gifts,\n gift_type: giftType,\n }),\n [productData, gifts, giftType]\n )\n\n const handleGiftClick = (gift: FreeGift) => {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u4E0D\u5141\u8BB8\u53D6\u6D88\u9009\u62E9\uFF0C\u76F4\u63A5\u8FD4\u56DE\n if (giftType === 2) {\n // \u83B7\u53D6\u5F53\u524D\u6240\u6709\u9009\u4E2D\u7684gifts\u4F5C\u4E3A\u7B2C\u4E8C\u4E2A\u53C2\u6570\n const currentSelectedGifts = giftsWithSelection.filter((g: FreeGiftWithSelection) => g.selected)\n onGiftClick?.(gift, currentSelectedGifts)\n return\n }\n\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F)\n setSelectedGiftIds(() => {\n const newSelectedIds = [gift.id] // \u5355\u9009\uFF1A\u59CB\u7EC8\u9009\u4E2D\u5F53\u524D\u9879\uFF0C\u70B9\u51FB\u5DF2\u9009\u4E2D\u9879\u4FDD\u6301\u72B6\u6001\uFF0C\u70B9\u51FB\u672A\u9009\u4E2D\u9879\u5207\u6362\u5230\u8BE5\u9879\n\n // \u8BA1\u7B97\u65B0\u7684\u9009\u4E2Dgifts\u4F5C\u4E3A\u7B2C\u4E8C\u4E2A\u53C2\u6570\u4F20\u9012\u7ED9\u56DE\u8C03\n const newSelectedGifts = gifts?.filter((g: FreeGift) => newSelectedIds.includes(g.id)) || []\n\n // \u8C03\u7528\u56DE\u8C03\u51FD\u6570\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u5F53\u524D\u9009\u4E2D\u7684gifts\n onGiftClick?.(gift, newSelectedGifts)\n onGiftSelectionChange?.(newSelectedGifts, fullProductData)\n\n return newSelectedIds\n })\n }\n\n const handleProductImageClick = () => {\n const callback = onProductImageClick ?? onProductClick\n callback?.(fullProductData)\n }\n\n const handleLearnMoreClick = async () => {\n const selectedGifts = giftsWithSelection.filter(gift => gift.selected)\n setLearnMoreLoading(true)\n try {\n await onLearnMore?.(fullProductData, selectedGifts)\n } finally {\n setLearnMoreLoading(false)\n }\n }\n\n const handleShopNowClick = async () => {\n const selectedGifts = giftsWithSelection.filter(gift => gift.selected)\n setShopNowLoading(true)\n try {\n await onShopNow?.(fullProductData, selectedGifts)\n } finally {\n setShopNowLoading(false)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary rounded-box flex items-stretch overflow-hidden',\n // \u6839\u636E\u5E03\u5C40\u6A21\u5F0F\u8C03\u6574\u5BB9\u5668\n layout === 'horizontal'\n ? [\n 'laptop:flex-row lg-desktop:min-h-[560px] desktop:min-h-[448px] tablet:min-h-[526px] min-h-[610px] flex-col',\n 'laptop:col-span-2',\n ]\n : ['flex-col justify-between'],\n (onProductImageClick ?? onProductClick) ? 'cursor-pointer' : '',\n className\n )}\n {...props}\n >\n {/* \u4EA7\u54C1\u56FE\u7247\u533A\u57DF */}\n <ProductImage\n images={sceneImages}\n name={productData.name}\n layout={layout}\n tags={productData.tags || tags}\n onClick={handleProductImageClick}\n />\n\n {/* \u4EA7\u54C1\u4FE1\u606F\u533A\u57DF */}\n <div\n className={cn(\n 'bg-container-primary desktop:p-6 flex flex-col justify-between p-4',\n // \u6839\u636E\u5E03\u5C40\u6A21\u5F0F\u8C03\u6574\u5706\u89D2\u548C\u5C3A\u5BF8\n layout === 'horizontal'\n ? [\n 'rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none',\n // \u4F7F\u7528 flex-basis \u8BBE\u7F6E\u5BBD\u5EA6\u6BD4\u4F8B\n 'laptop:basis-[39.1%]', // 360px / 921px \u2248 39.1%\n 'desktop:basis-[42.1%]', // 552px / 1312px \u2248 42.1%\n 'lg-desktop:basis-[42.1%]', // 700px / 1664px \u2248 42.1%\n 'shrink-0',\n ]\n : ['rounded-b-box', 'w-full', 'grow']\n )}\n >\n <div className=\"flex flex-1 flex-col justify-between gap-6\">\n {/* \u4EA7\u54C1\u6807\u9898\u548C\u63CF\u8FF0 */}\n <ProductInfo\n name={productData.name}\n onClick={handleProductImageClick}\n description={productData.description}\n classNames={classNames}\n />\n\n {/* \u514D\u8D39\u8D60\u54C1\u533A\u57DF */}\n <GiftSelection\n freeGiftLabel={productData.freeGiftLabel}\n freeGifts={giftsWithSelection}\n onGiftClick={handleGiftClick}\n giftType={giftType}\n selectedGiftSku={selectedGiftSku}\n />\n <PriceAndActions\n currentPrice={productData.currentPrice ?? ''}\n originalPrice={productData.originalPrice}\n priceLabel={productData.priceLabel}\n learnMoreText={productData.learnMoreText}\n shopNowText={productData.shopNowText}\n onLearnMore={handleLearnMoreClick}\n onShopNow={handleShopNowClick}\n availableForSale={productData.availableForSale}\n learnMoreLoading={learnMoreLoading}\n shopNowLoading={shopNowLoading}\n trackingTitle={productData.name}\n trackingDescription={productData.description}\n trackingSku={productData.sku}\n classNames={classNames}\n />\n </div>\n </div>\n </div>\n )\n }\n)\n\nProductCard.displayName = 'BuyOneGetOneShelf.ProductCard'\n\nexport default ProductCard\n"],
5
- "mappings": "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",
6
- "names": ["ProductCard_exports", "__export", "ProductCard_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_ProductImage", "import_ProductInfo", "import_GiftSelection", "import_PriceAndActions", "ProductCard", "productData", "gifts", "giftType", "selectedGiftSku", "sceneImages", "tags", "layout", "className", "onProductClick", "onProductImageClick", "onLearnMore", "onShopNow", "onGiftClick", "onGiftSelectionChange", "classNames", "props", "ref", "learnMoreLoading", "setLearnMoreLoading", "shopNowLoading", "setShopNowLoading", "selectedGiftIds", "setSelectedGiftIds", "gift", "giftsWithSelection", "prevSelectedIds", "currentSelectedId", "fullProductData", "handleGiftClick", "currentSelectedGifts", "g", "newSelectedIds", "newSelectedGifts", "handleProductImageClick", "handleLearnMoreClick", "selectedGifts", "handleShopNowClick", "ProductImage", "ProductInfo", "GiftSelection", "PriceAndActions"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport ProductImage from './ProductImage.js'\nimport ProductInfo from './ProductInfo.js'\nimport GiftSelection from './GiftSelection.js'\nimport PriceAndActions from './PriceAndActions.js'\nimport type {\n FreeGift,\n FreeGiftWithSelection,\n ProductCardData,\n PureProductData,\n ProductTag,\n BuyOneGetOneShelfProductCardSemanticName,\n} from './types.js'\n\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4EA7\u54C1\u6570\u636E\uFF08\u4E0D\u5305\u542B\u8D60\u54C1\u4FE1\u606F\uFF09 */\n productData: PureProductData\n /** \u8D60\u54C1\u5217\u8868 */\n gifts?: FreeGift[]\n /** \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1 */\n giftType?: 1 | 2\n /** \u573A\u666F\u56FE\u7247 */\n sceneImages: any\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u5F53\u524D\u9009\u4E2D\u7684\u8D60\u54C1SKU\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n selectedGiftSku?: string\n /** \u5E03\u5C40\u6A21\u5F0F */\n layout?: 'horizontal' | 'vertical'\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n soldOutText?: string\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More \u70B9\u51FB\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now \u70B9\u51FB\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u70B9\u51FB\u56DE\u8C03 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u56DE\u8C03 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n /** \u9009\u4E2D\u8D60\u54C1SKU\u53D8\u5316\u56DE\u8C03\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n onSelectedGiftSkuChange?: (selectedSku: string | null) => void\n}\n\n/**\n * ProductCard - \u4E70\u8D60\u8D27\u67B6\u4EA7\u54C1\u5361\u7247\n *\n * @description \u7528\u4E8E\u4E70\u4E00\u8D60\u4E00\u6D3B\u52A8\u7684\u4EA7\u54C1\u5C55\u793A\u5361\u7247\uFF0C\u5DE6\u4FA7\u5C55\u793A\u4EA7\u54C1\u56FE\u7247\u548C\u6807\u7B7E\uFF0C\u53F3\u4FA7\u5C55\u793A\u4EA7\u54C1\u4FE1\u606F\u3001\u8D60\u54C1\u548C\u8D2D\u4E70\u6309\u94AE\n */\nconst ProductCard = React.forwardRef<HTMLDivElement, ProductCardProps>(\n (\n {\n productData,\n gifts = [],\n giftType = 1,\n selectedGiftSku,\n sceneImages,\n tags,\n layout = 'horizontal',\n className,\n onProductClick,\n onProductImageClick,\n onLearnMore,\n onShopNow,\n onGiftClick,\n onGiftSelectionChange,\n classNames,\n soldOutText,\n ...props\n },\n ref\n ) => {\n const [learnMoreLoading, setLearnMoreLoading] = React.useState(false)\n const [shopNowLoading, setShopNowLoading] = React.useState(false)\n\n // \u5185\u90E8\u72B6\u6001\u7BA1\u7406\u8D60\u54C1\u7684\u9009\u62E9\u72B6\u6001 - \u4F7F\u7528\u9009\u4E2D\u7684ID\u6570\u7EC4\u800C\u4E0D\u662F\u4FEE\u6539gift\u5BF9\u8C61\n const [selectedGiftIds, setSelectedGiftIds] = React.useState<string[]>(() => {\n if (!gifts || gifts.length === 0) return []\n\n if (giftType === 2) {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u9009\u4E2D\u6240\u6709\u8D60\u54C1\n return gifts.map((gift: FreeGift) => gift.id)\n } else {\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F) - \u9ED8\u8BA4\u9009\u4E2D\u7B2C\u4E00\u4E2A\u8D60\u54C1\n return [gifts[0].id]\n }\n })\n\n // \u751F\u6210\u5E26\u6709\u9009\u62E9\u72B6\u6001\u7684\u8D60\u54C1\u5217\u8868\u7528\u4E8E\u6E32\u67D3\n const giftsWithSelection = React.useMemo(() => {\n if (!gifts) return []\n\n return gifts.map((gift: FreeGift) => ({\n ...gift,\n selected: selectedGiftIds.includes(gift.id),\n }))\n }, [gifts, selectedGiftIds])\n\n // \u5F53 gifts \u6216 giftType \u66F4\u65B0\u65F6\uFF0C\u540C\u6B65\u66F4\u65B0\u5185\u90E8\u72B6\u6001\n React.useEffect(() => {\n if (!gifts || gifts.length === 0) {\n setSelectedGiftIds([])\n return\n }\n\n if (giftType === 2) {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u9009\u4E2D\u6240\u6709\u8D60\u54C1\n setSelectedGiftIds(gifts.map((gift: FreeGift) => gift.id))\n } else {\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F) - \u667A\u80FD\u72B6\u6001\u7BA1\u7406\n setSelectedGiftIds(prevSelectedIds => {\n // \u68C0\u67E5\u5F53\u524D\u9009\u4E2D\u7684\u793C\u54C1\u662F\u5426\u4ECD\u7136\u5B58\u5728\u4E8E\u65B0\u7684 gifts \u5217\u8868\u4E2D\n const currentSelectedId = prevSelectedIds[0]\n const isCurrentSelectionValid =\n currentSelectedId && gifts.some((gift: FreeGift) => gift.id === currentSelectedId)\n\n // \u5982\u679C\u5F53\u524D\u9009\u4E2D\u72B6\u6001\u4ECD\u7136\u6709\u6548\uFF0C\u4FDD\u6301\u4E0D\u53D8\uFF1B\u5426\u5219\u9ED8\u8BA4\u9009\u4E2D\u7B2C\u4E00\u4E2A\n return isCurrentSelectionValid ? [currentSelectedId] : [gifts[0].id]\n })\n }\n }, [gifts, giftType])\n\n // \u6784\u9020\u5B8C\u6574\u7684\u4EA7\u54C1\u6570\u636E\u7528\u4E8E\u56DE\u8C03\n const fullProductData: ProductCardData = React.useMemo(\n () => ({\n ...productData,\n gifts,\n gift_type: giftType,\n }),\n [productData, gifts, giftType]\n )\n\n const handleGiftClick = (gift: FreeGift) => {\n // gift_type 2 (\u5168\u9009\u6A21\u5F0F) - \u4E0D\u5141\u8BB8\u53D6\u6D88\u9009\u62E9\uFF0C\u76F4\u63A5\u8FD4\u56DE\n if (giftType === 2) {\n // \u83B7\u53D6\u5F53\u524D\u6240\u6709\u9009\u4E2D\u7684gifts\u4F5C\u4E3A\u7B2C\u4E8C\u4E2A\u53C2\u6570\n const currentSelectedGifts = giftsWithSelection.filter((g: FreeGiftWithSelection) => g.selected)\n onGiftClick?.(gift, currentSelectedGifts)\n return\n }\n\n // gift_type 1 (\u5355\u9009\u6A21\u5F0F)\n setSelectedGiftIds(() => {\n const newSelectedIds = [gift.id] // \u5355\u9009\uFF1A\u59CB\u7EC8\u9009\u4E2D\u5F53\u524D\u9879\uFF0C\u70B9\u51FB\u5DF2\u9009\u4E2D\u9879\u4FDD\u6301\u72B6\u6001\uFF0C\u70B9\u51FB\u672A\u9009\u4E2D\u9879\u5207\u6362\u5230\u8BE5\u9879\n\n // \u8BA1\u7B97\u65B0\u7684\u9009\u4E2Dgifts\u4F5C\u4E3A\u7B2C\u4E8C\u4E2A\u53C2\u6570\u4F20\u9012\u7ED9\u56DE\u8C03\n const newSelectedGifts = gifts?.filter((g: FreeGift) => newSelectedIds.includes(g.id)) || []\n\n // \u8C03\u7528\u56DE\u8C03\u51FD\u6570\uFF0C\u7B2C\u4E8C\u4E2A\u53C2\u6570\u662F\u5F53\u524D\u9009\u4E2D\u7684gifts\n onGiftClick?.(gift, newSelectedGifts)\n onGiftSelectionChange?.(newSelectedGifts, fullProductData)\n\n return newSelectedIds\n })\n }\n\n const hasClickHandler = !!(onProductImageClick ?? onProductClick)\n const productHref = `/products/${productData.handle}`\n\n const handleProductImageClick = () => {\n const callback = onProductImageClick ?? onProductClick\n callback?.(fullProductData)\n }\n\n const handleLearnMoreClick = async () => {\n const selectedGifts = giftsWithSelection.filter(gift => gift.selected)\n setLearnMoreLoading(true)\n try {\n await onLearnMore?.(fullProductData, selectedGifts)\n } finally {\n setLearnMoreLoading(false)\n }\n }\n\n const handleShopNowClick = async () => {\n const selectedGifts = giftsWithSelection.filter(gift => gift.selected)\n setShopNowLoading(true)\n try {\n await onShopNow?.(fullProductData, selectedGifts)\n } finally {\n setShopNowLoading(false)\n }\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary rounded-box flex items-stretch overflow-hidden',\n // \u6839\u636E\u5E03\u5C40\u6A21\u5F0F\u8C03\u6574\u5BB9\u5668\n layout === 'horizontal'\n ? [\n 'laptop:flex-row lg-desktop:min-h-[560px] desktop:min-h-[448px] tablet:min-h-[526px] min-h-[610px] flex-col',\n 'laptop:col-span-2',\n ]\n : ['flex-col justify-between'],\n className\n )}\n {...props}\n >\n {/* \u4EA7\u54C1\u56FE\u7247\u533A\u57DF */}\n <ProductImage\n images={sceneImages}\n name={productData.name}\n layout={layout}\n tags={productData.tags || tags}\n onClick={hasClickHandler ? handleProductImageClick : undefined}\n href={hasClickHandler ? undefined : productHref}\n />\n\n {/* \u4EA7\u54C1\u4FE1\u606F\u533A\u57DF */}\n <div\n className={cn(\n 'bg-container-primary desktop:p-6 flex flex-col justify-between p-4',\n // \u6839\u636E\u5E03\u5C40\u6A21\u5F0F\u8C03\u6574\u5706\u89D2\u548C\u5C3A\u5BF8\n layout === 'horizontal'\n ? [\n 'rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none',\n // \u4F7F\u7528 flex-basis \u8BBE\u7F6E\u5BBD\u5EA6\u6BD4\u4F8B\n 'laptop:basis-[39.1%]', // 360px / 921px \u2248 39.1%\n 'desktop:basis-[42.1%]', // 552px / 1312px \u2248 42.1%\n 'lg-desktop:basis-[42.1%]', // 700px / 1664px \u2248 42.1%\n 'shrink-0',\n ]\n : ['rounded-b-box', 'w-full', 'grow']\n )}\n >\n <div className=\"flex flex-1 flex-col justify-between gap-6\">\n {/* \u4EA7\u54C1\u6807\u9898\u548C\u63CF\u8FF0 */}\n <ProductInfo\n name={productData.name}\n onClick={hasClickHandler ? handleProductImageClick : undefined}\n href={hasClickHandler ? undefined : productHref}\n description={productData.description}\n classNames={classNames}\n />\n\n {/* \u514D\u8D39\u8D60\u54C1\u533A\u57DF */}\n <GiftSelection\n freeGiftLabel={productData.freeGiftLabel}\n freeGifts={giftsWithSelection}\n onGiftClick={handleGiftClick}\n giftType={giftType}\n selectedGiftSku={selectedGiftSku}\n />\n <PriceAndActions\n currentPrice={productData.currentPrice ?? ''}\n originalPrice={productData.originalPrice}\n priceLabel={productData.priceLabel}\n learnMoreText={productData.learnMoreText}\n shopNowText={productData.shopNowText}\n soldOutText={soldOutText}\n onLearnMore={handleLearnMoreClick}\n onShopNow={handleShopNowClick}\n availableForSale={productData.availableForSale}\n learnMoreLoading={learnMoreLoading}\n shopNowLoading={shopNowLoading}\n trackingTitle={productData.name}\n trackingDescription={productData.description}\n trackingSku={productData.sku}\n classNames={classNames}\n />\n </div>\n </div>\n </div>\n )\n }\n)\n\nProductCard.displayName = 'BuyOneGetOneShelf.ProductCard'\n\nexport default ProductCard\n"],
5
+ "mappings": "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",
6
+ "names": ["ProductCard_exports", "__export", "ProductCard_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_ProductImage", "import_ProductInfo", "import_GiftSelection", "import_PriceAndActions", "ProductCard", "productData", "gifts", "giftType", "selectedGiftSku", "sceneImages", "tags", "layout", "className", "onProductClick", "onProductImageClick", "onLearnMore", "onShopNow", "onGiftClick", "onGiftSelectionChange", "classNames", "soldOutText", "props", "ref", "learnMoreLoading", "setLearnMoreLoading", "shopNowLoading", "setShopNowLoading", "selectedGiftIds", "setSelectedGiftIds", "gift", "giftsWithSelection", "prevSelectedIds", "currentSelectedId", "fullProductData", "handleGiftClick", "currentSelectedGifts", "g", "newSelectedIds", "newSelectedGifts", "hasClickHandler", "productHref", "handleProductImageClick", "handleLearnMoreClick", "selectedGifts", "handleShopNowClick", "ProductImage", "ProductInfo", "GiftSelection", "PriceAndActions"]
7
7
  }
@@ -11,6 +11,8 @@ export interface ProductImageProps extends React.HTMLAttributes<HTMLDivElement>
11
11
  layout?: 'horizontal' | 'vertical';
12
12
  /** 点击回调 */
13
13
  onClick?: () => void;
14
+ /** 产品链接(无 onClick 回调时自动使用 a 标签跳转) */
15
+ href?: string;
14
16
  }
15
17
  /**
16
18
  * ProductImage - 产品图片区域
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var k=Object.create;var s=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var x=(e,o)=>{for(var t in o)s(e,t,{get:o[t],enumerable:!0})},c=(e,o,t,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of w(o))!$.call(e,r)&&r!==t&&s(e,r,{get:()=>o[r],enumerable:!(a=y(o,r))||a.enumerable});return e};var p=(e,o,t)=>(t=e!=null?k(N(e)):{},c(o||!e||!e.__esModule?s(t,"default",{value:e,enumerable:!0}):t,e)),I=e=>c(s({},"__esModule",{value:!0}),e);var L={};x(L,{default:()=>H});module.exports=I(L);var i=require("react/jsx-runtime"),D=p(require("react")),m=require("../../helpers/index.js"),u=p(require("../../components/picture.js")),f=p(require("../../components/badge.js"));const d=D.forwardRef(({images:e,name:o,tags:t,layout:a="horizontal",className:r,onClick:n},v)=>{const{laptop:g,mobile:b,tablet:h,desktop:P,lgDesktop:z}=e;return(0,i.jsxs)("div",{ref:v,className:(0,m.cn)("relative grow overflow-hidden",a==="horizontal"?["min-h-[240px]","laptop:basis-[60.9%]","desktop:basis-[57.9%]","lg-desktop:basis-[57.9%]"]:["h-fit grow-0"],n?"cursor-pointer":"",r),onClick:n,children:[(0,i.jsx)(u.default,{source:`${b?.url}, ${h?.url} 768, ${g?.url} 1024, ${P?.url} 1440, ${z?.url} 1920`,alt:o,className:(0,m.cn)({"laptop:absolute inset-0 size-full static":a==="horizontal","w-full h-auto":a==="vertical"}),imgClassName:"size-full object-cover"}),t&&t.length>0&&(0,i.jsx)("div",{className:"absolute left-4 top-4 flex gap-2",children:t.map((l,T)=>(0,i.jsx)(f.default,{variant:l.variant,size:"lg",promotionalType:l.variant==="promotional"?l.promotionalType:void 0,children:l.label},T))})]})});d.displayName="ProductImage";var H=d;
1
+ "use strict";"use client";var k=Object.create;var c=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var I=(e,t)=>{for(var o in t)c(e,o,{get:t[o],enumerable:!0})},g=(e,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of L(t))!T.call(e,i)&&i!==o&&c(e,i,{get:()=>t[i],enumerable:!(r=y(t,i))||r.enumerable});return e};var d=(e,t,o)=>(o=e!=null?k(N(e)):{},g(t||!e||!e.__esModule?c(o,"default",{value:e,enumerable:!0}):o,e)),w=e=>g(c({},"__esModule",{value:!0}),e);var C={};I(C,{default:()=>x});module.exports=w(C);var a=require("react/jsx-runtime"),$=d(require("react")),f=require("../../helpers/index.js"),P=d(require("../../components/picture.js")),b=d(require("../../components/badge.js")),h=require("../../shared/LocalizedLink.js");const u=({images:e,name:t,tags:o,layout:r})=>{const{laptop:i,mobile:l,tablet:s,desktop:n,lgDesktop:m}=e;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(P.default,{source:`${l?.url}, ${s?.url} 768, ${i?.url} 1024, ${n?.url} 1440, ${m?.url} 1920`,alt:t,className:(0,f.cn)({"laptop:absolute inset-0 size-full static":r==="horizontal","w-full h-auto":r==="vertical"}),imgClassName:"size-full object-cover"}),o&&o.length>0&&(0,a.jsx)("div",{className:"absolute left-4 top-4 flex gap-2",children:o.map((p,z)=>(0,a.jsx)(b.default,{variant:p.variant,size:"lg",promotionalType:p.variant==="promotional"?p.promotionalType:void 0,children:p.label},z))})]})},v=$.forwardRef(({images:e,name:t,tags:o,layout:r="horizontal",className:i,onClick:l,href:s},n)=>{const m=(0,f.cn)("relative grow overflow-hidden",r==="horizontal"?["min-h-[240px]","laptop:basis-[60.9%]","desktop:basis-[57.9%]","lg-desktop:basis-[57.9%]"]:["h-fit grow-0"],l||s?"cursor-pointer":"",i);return l?(0,a.jsx)("div",{ref:n,className:m,onClick:l,children:(0,a.jsx)(u,{images:e,name:t,tags:o,layout:r})}):s?(0,a.jsx)(h.LocalizedLink,{href:s,className:m,children:(0,a.jsx)("div",{ref:n,children:(0,a.jsx)(u,{images:e,name:t,tags:o,layout:r})})}):(0,a.jsx)("div",{ref:n,className:m,children:(0,a.jsx)(u,{images:e,name:t,tags:o,layout:r})})});v.displayName="ProductImage";var x=v;
2
2
  //# sourceMappingURL=ProductImage.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/ProductImage.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport Picture from '../../components/picture.js'\nimport Badge from '../../components/badge.js'\nimport type { ProductTag } from './types.js'\n\nexport interface ProductImageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u54CD\u5E94\u5F0F\u56FE\u7247\u96C6\u5408 */\n images: any\n /** \u4EA7\u54C1\u540D\u79F0\uFF0C\u7528\u4F5C alt \u6587\u672C */\n name: string\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u5E03\u5C40\u6A21\u5F0F */\n layout?: 'horizontal' | 'vertical'\n /** \u70B9\u51FB\u56DE\u8C03 */\n onClick?: () => void\n}\n\n/**\n * ProductImage - \u4EA7\u54C1\u56FE\u7247\u533A\u57DF\n */\nconst ProductImage = React.forwardRef<HTMLDivElement, ProductImageProps>(\n ({ images, name, tags, layout = 'horizontal', className, onClick }, ref) => {\n const { laptop, mobile, tablet, desktop, lgDesktop } = images\n\n return (\n <div\n ref={ref}\n className={cn(\n 'relative grow overflow-hidden',\n // \u6839\u636E\u5E03\u5C40\u6A21\u5F0F\u8C03\u6574\u5C3A\u5BF8\u548C\u5706\u89D2\n layout === 'horizontal'\n ? [\n // \u6C34\u5E73\u5E03\u5C40\uFF1A\u4F7F\u7528 flex-basis \u8BBE\u7F6E\u5BBD\u5EA6\u6BD4\u4F8B\n 'min-h-[240px]',\n 'laptop:basis-[60.9%]', // 561px / 921px \u2248 60.9%\n 'desktop:basis-[57.9%]', // 760px / 1312px \u2248 57.9%\n 'lg-desktop:basis-[57.9%]', // 964px / 1664px \u2248 57.9%\n ]\n : [\n // \u5782\u76F4\u5E03\u5C40\uFF1A\u4E0A\u9762\u56FE\u7247\uFF0C\u4E0B\u9762\u5185\u5BB9, \u4E0D\u9650\u5236\u9AD8\u5EA6\n 'h-fit grow-0',\n ],\n onClick ? 'cursor-pointer' : '',\n className\n )}\n onClick={onClick}\n >\n <Picture\n source={`${mobile?.url}, ${tablet?.url} 768, ${laptop?.url} 1024, ${desktop?.url} 1440, ${lgDesktop?.url} 1920`}\n alt={name}\n className={cn({\n 'laptop:absolute inset-0 size-full static': layout === 'horizontal',\n 'w-full h-auto': layout === 'vertical',\n })}\n imgClassName=\"size-full object-cover\"\n />\n\n {/* \u5DE6\u4E0A\u89D2\u6807\u7B7E */}\n {tags && tags.length > 0 && (\n <div className=\"absolute left-4 top-4 flex gap-2\">\n {tags.map((tag, index) => (\n <Badge\n key={index}\n variant={tag.variant}\n size=\"lg\"\n promotionalType={tag.variant === 'promotional' ? tag.promotionalType : undefined}\n >\n {tag.label}\n </Badge>\n ))}\n </div>\n )}\n </div>\n )\n }\n)\n\nProductImage.displayName = 'ProductImage'\n\nexport default ProductImage\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA6BM,IAAAI,EAAA,6BA3BNC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAoB,0CACpBC,EAAkB,wCAmBlB,MAAMC,EAAeJ,EAAM,WACzB,CAAC,CAAE,OAAAK,EAAQ,KAAAC,EAAM,KAAAC,EAAM,OAAAC,EAAS,aAAc,UAAAC,EAAW,QAAAC,CAAQ,EAAGC,IAAQ,CAC1E,KAAM,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,CAAU,EAAIX,EAEvD,SACE,QAAC,OACC,IAAKM,EACL,aAAW,MACT,gCAEAH,IAAW,aACP,CAEE,gBACA,uBACA,wBACA,0BACF,EACA,CAEE,cACF,EACJE,EAAU,iBAAmB,GAC7BD,CACF,EACA,QAASC,EAET,oBAAC,EAAAO,QAAA,CACC,OAAQ,GAAGJ,GAAQ,GAAG,KAAKC,GAAQ,GAAG,SAASF,GAAQ,GAAG,UAAUG,GAAS,GAAG,UAAUC,GAAW,GAAG,QACxG,IAAKV,EACL,aAAW,MAAG,CACZ,2CAA4CE,IAAW,aACvD,gBAAiBA,IAAW,UAC9B,CAAC,EACD,aAAa,yBACf,EAGCD,GAAQA,EAAK,OAAS,MACrB,OAAC,OAAI,UAAU,mCACZ,SAAAA,EAAK,IAAI,CAACW,EAAKC,OACd,OAAC,EAAAC,QAAA,CAEC,QAASF,EAAI,QACb,KAAK,KACL,gBAAiBA,EAAI,UAAY,cAAgBA,EAAI,gBAAkB,OAEtE,SAAAA,EAAI,OALAC,CAMP,CACD,EACH,GAEJ,CAEJ,CACF,EAEAf,EAAa,YAAc,eAE3B,IAAOP,EAAQO",
6
- "names": ["ProductImage_exports", "__export", "ProductImage_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_picture", "import_badge", "ProductImage", "images", "name", "tags", "layout", "className", "onClick", "ref", "laptop", "mobile", "tablet", "desktop", "lgDesktop", "Picture", "tag", "index", "Badge"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport Picture from '../../components/picture.js'\nimport Badge from '../../components/badge.js'\nimport { LocalizedLink } from '../../shared/LocalizedLink.js'\nimport type { ProductTag } from './types.js'\n\nexport interface ProductImageProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u54CD\u5E94\u5F0F\u56FE\u7247\u96C6\u5408 */\n images: any\n /** \u4EA7\u54C1\u540D\u79F0\uFF0C\u7528\u4F5C alt \u6587\u672C */\n name: string\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u5E03\u5C40\u6A21\u5F0F */\n layout?: 'horizontal' | 'vertical'\n /** \u70B9\u51FB\u56DE\u8C03 */\n onClick?: () => void\n /** \u4EA7\u54C1\u94FE\u63A5\uFF08\u65E0 onClick \u56DE\u8C03\u65F6\u81EA\u52A8\u4F7F\u7528 a \u6807\u7B7E\u8DF3\u8F6C\uFF09 */\n href?: string\n}\n\nconst ProductImageContent = ({\n images,\n name,\n tags,\n layout,\n}: Pick<ProductImageProps, 'images' | 'name' | 'tags' | 'layout'>) => {\n const { laptop, mobile, tablet, desktop, lgDesktop } = images\n\n return (\n <>\n <Picture\n source={`${mobile?.url}, ${tablet?.url} 768, ${laptop?.url} 1024, ${desktop?.url} 1440, ${lgDesktop?.url} 1920`}\n alt={name}\n className={cn({\n 'laptop:absolute inset-0 size-full static': layout === 'horizontal',\n 'w-full h-auto': layout === 'vertical',\n })}\n imgClassName=\"size-full object-cover\"\n />\n\n {tags && tags.length > 0 && (\n <div className=\"absolute left-4 top-4 flex gap-2\">\n {tags.map((tag, index) => (\n <Badge\n key={index}\n variant={tag.variant}\n size=\"lg\"\n promotionalType={tag.variant === 'promotional' ? tag.promotionalType : undefined}\n >\n {tag.label}\n </Badge>\n ))}\n </div>\n )}\n </>\n )\n}\n\n/**\n * ProductImage - \u4EA7\u54C1\u56FE\u7247\u533A\u57DF\n */\nconst ProductImage = React.forwardRef<HTMLDivElement, ProductImageProps>(\n ({ images, name, tags, layout = 'horizontal', className, onClick, href }, ref) => {\n const containerClass = cn(\n 'relative grow overflow-hidden',\n layout === 'horizontal'\n ? ['min-h-[240px]', 'laptop:basis-[60.9%]', 'desktop:basis-[57.9%]', 'lg-desktop:basis-[57.9%]']\n : ['h-fit grow-0'],\n onClick || href ? 'cursor-pointer' : '',\n className\n )\n\n if (onClick) {\n return (\n <div ref={ref} className={containerClass} onClick={onClick}>\n <ProductImageContent images={images} name={name} tags={tags} layout={layout} />\n </div>\n )\n }\n\n if (href) {\n return (\n <LocalizedLink href={href} className={containerClass}>\n <div ref={ref}>\n <ProductImageContent images={images} name={name} tags={tags} layout={layout} />\n </div>\n </LocalizedLink>\n )\n }\n\n return (\n <div ref={ref} className={containerClass}>\n <ProductImageContent images={images} name={name} tags={tags} layout={layout} />\n </div>\n )\n }\n)\n\nProductImage.displayName = 'ProductImage'\n\nexport default ProductImage\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAiCI,IAAAI,EAAA,6BA/BJC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAoB,0CACpBC,EAAkB,wCAClBC,EAA8B,yCAkB9B,MAAMC,EAAsB,CAAC,CAC3B,OAAAC,EACA,KAAAC,EACA,KAAAC,EACA,OAAAC,CACF,IAAsE,CACpE,KAAM,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,OAAAC,EAAQ,QAAAC,EAAS,UAAAC,CAAU,EAAIR,EAEvD,SACE,oBACE,oBAAC,EAAAS,QAAA,CACC,OAAQ,GAAGJ,GAAQ,GAAG,KAAKC,GAAQ,GAAG,SAASF,GAAQ,GAAG,UAAUG,GAAS,GAAG,UAAUC,GAAW,GAAG,QACxG,IAAKP,EACL,aAAW,MAAG,CACZ,2CAA4CE,IAAW,aACvD,gBAAiBA,IAAW,UAC9B,CAAC,EACD,aAAa,yBACf,EAECD,GAAQA,EAAK,OAAS,MACrB,OAAC,OAAI,UAAU,mCACZ,SAAAA,EAAK,IAAI,CAACQ,EAAKC,OACd,OAAC,EAAAC,QAAA,CAEC,QAASF,EAAI,QACb,KAAK,KACL,gBAAiBA,EAAI,UAAY,cAAgBA,EAAI,gBAAkB,OAEtE,SAAAA,EAAI,OALAC,CAMP,CACD,EACH,GAEJ,CAEJ,EAKME,EAAenB,EAAM,WACzB,CAAC,CAAE,OAAAM,EAAQ,KAAAC,EAAM,KAAAC,EAAM,OAAAC,EAAS,aAAc,UAAAW,EAAW,QAAAC,EAAS,KAAAC,CAAK,EAAGC,IAAQ,CAChF,MAAMC,KAAiB,MACrB,gCACAf,IAAW,aACP,CAAC,gBAAiB,uBAAwB,wBAAyB,0BAA0B,EAC7F,CAAC,cAAc,EACnBY,GAAWC,EAAO,iBAAmB,GACrCF,CACF,EAEA,OAAIC,KAEA,OAAC,OAAI,IAAKE,EAAK,UAAWC,EAAgB,QAASH,EACjD,mBAAChB,EAAA,CAAoB,OAAQC,EAAQ,KAAMC,EAAM,KAAMC,EAAM,OAAQC,EAAQ,EAC/E,EAIAa,KAEA,OAAC,iBAAc,KAAMA,EAAM,UAAWE,EACpC,mBAAC,OAAI,IAAKD,EACR,mBAAClB,EAAA,CAAoB,OAAQC,EAAQ,KAAMC,EAAM,KAAMC,EAAM,OAAQC,EAAQ,EAC/E,EACF,KAKF,OAAC,OAAI,IAAKc,EAAK,UAAWC,EACxB,mBAACnB,EAAA,CAAoB,OAAQC,EAAQ,KAAMC,EAAM,KAAMC,EAAM,OAAQC,EAAQ,EAC/E,CAEJ,CACF,EAEAU,EAAa,YAAc,eAE3B,IAAOtB,EAAQsB",
6
+ "names": ["ProductImage_exports", "__export", "ProductImage_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_picture", "import_badge", "import_LocalizedLink", "ProductImageContent", "images", "name", "tags", "layout", "laptop", "mobile", "tablet", "desktop", "lgDesktop", "Picture", "tag", "index", "Badge", "ProductImage", "className", "onClick", "href", "ref", "containerClass"]
7
7
  }
@@ -1,15 +1,12 @@
1
1
  import * as React from 'react';
2
2
  import type { BuyOneGetOneShelfProductCardSemanticName } from './types.js';
3
3
  export interface ProductInfoProps extends React.HTMLAttributes<HTMLDivElement> {
4
- /** 产品名称 */
5
4
  name: string;
6
- /** 产品描述 */
7
5
  description?: string;
8
6
  classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>;
9
7
  onClick?: () => void;
8
+ /** 产品链接(无 onClick 回调时自动使用 a 标签跳转) */
9
+ href?: string;
10
10
  }
11
- /**
12
- * ProductInfo - 产品信息区域
13
- */
14
11
  declare const ProductInfo: React.ForwardRefExoticComponent<ProductInfoProps & React.RefAttributes<HTMLDivElement>>;
15
12
  export default ProductInfo;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var f=Object.create;var n=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},l=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of x(t))!g.call(e,o)&&o!==r&&n(e,o,{get:()=>t[o],enumerable:!(a=u(t,o))||a.enumerable});return e};var C=(e,t,r)=>(r=e!=null?f(P(e)):{},l(t||!e||!e.__esModule?n(r,"default",{value:e,enumerable:!0}):r,e)),N=e=>l(n({},"__esModule",{value:!0}),e);var T={};y(T,{default:()=>v});module.exports=N(T);var i=require("react/jsx-runtime"),h=C(require("react")),c=require("../../helpers/index.js"),s=require("../../components/text.js"),d=require("../../components/heading.js");const m=h.forwardRef(({name:e,description:t,onClick:r,className:a,classNames:o={}},p)=>(0,i.jsxs)("div",{ref:p,className:(0,c.cn)("text-info-primary flex w-full flex-col gap-1",a),children:[(0,i.jsx)(d.Heading,{as:"h4",size:2,html:e,className:(0,c.cn)("line-clamp-1 ",o?.productCardTitle),onClick:()=>r?.()}),(0,i.jsx)(s.Text,{size:2,html:t,className:(0,c.cn)("desktop:text-[16px] lg-desktop:text-[18px] line-clamp-1",o?.productCardDescription)})]}));m.displayName="ProductInfo";var v=m;
1
+ "use strict";"use client";var h=Object.create;var n=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var L=(e,t)=>{for(var r in t)n(e,r,{get:t[r],enumerable:!0})},m=(e,t,r,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of P(t))!C.call(e,o)&&o!==r&&n(e,o,{get:()=>t[o],enumerable:!(l=x(t,o))||l.enumerable});return e};var N=(e,t,r)=>(r=e!=null?h(g(e)):{},m(t||!e||!e.__esModule?n(r,"default",{value:e,enumerable:!0}):r,e)),T=e=>m(n({},"__esModule",{value:!0}),e);var z={};L(z,{default:()=>y});module.exports=T(z);var i=require("react/jsx-runtime"),k=N(require("react")),a=require("../../helpers/index.js"),p=require("../../components/text.js"),d=require("../../components/heading.js"),f=require("../../shared/LocalizedLink.js");const s=k.forwardRef(({name:e,description:t,onClick:r,href:l,className:o,classNames:c={}},u)=>(0,i.jsxs)("div",{ref:u,className:(0,a.cn)("text-info-primary flex w-full flex-col gap-1",o),children:[r?(0,i.jsx)(d.Heading,{as:"h4",size:2,html:e,className:(0,a.cn)("line-clamp-1 ",c?.productCardTitle),onClick:()=>r?.()}):l?(0,i.jsx)(f.LocalizedLink,{href:l,className:"block",children:(0,i.jsx)(d.Heading,{as:"h4",size:2,html:e,className:(0,a.cn)("line-clamp-1 ",c?.productCardTitle)})}):(0,i.jsx)(d.Heading,{as:"h4",size:2,html:e,className:(0,a.cn)("line-clamp-1 ",c?.productCardTitle)}),(0,i.jsx)(p.Text,{size:2,html:t,className:(0,a.cn)("desktop:text-[16px] lg-desktop:text-[18px] line-clamp-1",c?.productCardDescription)})]}));s.displayName="ProductInfo";var y=s;
2
2
  //# sourceMappingURL=ProductInfo.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/ProductInfo.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Text } from '../../components/text.js'\nimport { Heading } from '../../components/heading.js'\nimport type { BuyOneGetOneShelfProductCardSemanticName } from './types.js'\n\nexport interface ProductInfoProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4EA7\u54C1\u540D\u79F0 */\n name: string\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n onClick?: () => void\n}\n\n/**\n * ProductInfo - \u4EA7\u54C1\u4FE1\u606F\u533A\u57DF\n */\nconst ProductInfo = React.forwardRef<HTMLDivElement, ProductInfoProps>(\n ({ name, description, onClick, className, classNames = {} }, ref) => {\n return (\n <div ref={ref} className={cn('text-info-primary flex w-full flex-col gap-1', className)}>\n <Heading\n as=\"h4\"\n size={2}\n html={name}\n className={cn('line-clamp-1 ', classNames?.productCardTitle)}\n onClick={() => onClick?.()}\n />\n <Text\n size={2}\n html={description}\n className={cn('desktop:text-[16px] lg-desktop:text-[18px] line-clamp-1', classNames?.productCardDescription)}\n />\n </div>\n )\n }\n)\n\nProductInfo.displayName = 'ProductInfo'\n\nexport default ProductInfo\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAuBM,IAAAI,EAAA,6BArBNC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAqB,oCACrBC,EAAwB,uCAexB,MAAMC,EAAcJ,EAAM,WACxB,CAAC,CAAE,KAAAK,EAAM,YAAAC,EAAa,QAAAC,EAAS,UAAAC,EAAW,WAAAC,EAAa,CAAC,CAAE,EAAGC,OAEzD,QAAC,OAAI,IAAKA,EAAK,aAAW,MAAG,+CAAgDF,CAAS,EACpF,oBAAC,WACC,GAAG,KACH,KAAM,EACN,KAAMH,EACN,aAAW,MAAG,gBAAiBI,GAAY,gBAAgB,EAC3D,QAAS,IAAMF,IAAU,EAC3B,KACA,OAAC,QACC,KAAM,EACN,KAAMD,EACN,aAAW,MAAG,0DAA2DG,GAAY,sBAAsB,EAC7G,GACF,CAGN,EAEAL,EAAY,YAAc,cAE1B,IAAOP,EAAQO",
6
- "names": ["ProductInfo_exports", "__export", "ProductInfo_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_text", "import_heading", "ProductInfo", "name", "description", "onClick", "className", "classNames", "ref"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Text } from '../../components/text.js'\nimport { Heading } from '../../components/heading.js'\nimport { LocalizedLink } from '../../shared/LocalizedLink.js'\nimport type { BuyOneGetOneShelfProductCardSemanticName } from './types.js'\n\nexport interface ProductInfoProps extends React.HTMLAttributes<HTMLDivElement> {\n name: string\n description?: string\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n onClick?: () => void\n /** \u4EA7\u54C1\u94FE\u63A5\uFF08\u65E0 onClick \u56DE\u8C03\u65F6\u81EA\u52A8\u4F7F\u7528 a \u6807\u7B7E\u8DF3\u8F6C\uFF09 */\n href?: string\n}\n\nconst ProductInfo = React.forwardRef<HTMLDivElement, ProductInfoProps>(\n ({ name, description, onClick, href, className, classNames = {} }, ref) => {\n return (\n <div ref={ref} className={cn('text-info-primary flex w-full flex-col gap-1', className)}>\n {onClick ? (\n <Heading\n as=\"h4\"\n size={2}\n html={name}\n className={cn('line-clamp-1 ', classNames?.productCardTitle)}\n onClick={() => onClick?.()}\n />\n ) : href ? (\n <LocalizedLink href={href} className=\"block\">\n <Heading as=\"h4\" size={2} html={name} className={cn('line-clamp-1 ', classNames?.productCardTitle)} />\n </LocalizedLink>\n ) : (\n <Heading as=\"h4\" size={2} html={name} className={cn('line-clamp-1 ', classNames?.productCardTitle)} />\n )}\n <Text\n size={2}\n html={description}\n className={cn('desktop:text-[16px] lg-desktop:text-[18px] line-clamp-1', classNames?.productCardDescription)}\n />\n </div>\n )\n }\n)\n\nProductInfo.displayName = 'ProductInfo'\n\nexport default ProductInfo\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAqBM,IAAAI,EAAA,6BAnBNC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAqB,oCACrBC,EAAwB,uCACxBC,EAA8B,yCAY9B,MAAMC,EAAcL,EAAM,WACxB,CAAC,CAAE,KAAAM,EAAM,YAAAC,EAAa,QAAAC,EAAS,KAAAC,EAAM,UAAAC,EAAW,WAAAC,EAAa,CAAC,CAAE,EAAGC,OAE/D,QAAC,OAAI,IAAKA,EAAK,aAAW,MAAG,+CAAgDF,CAAS,EACnF,UAAAF,KACC,OAAC,WACC,GAAG,KACH,KAAM,EACN,KAAMF,EACN,aAAW,MAAG,gBAAiBK,GAAY,gBAAgB,EAC3D,QAAS,IAAMH,IAAU,EAC3B,EACEC,KACF,OAAC,iBAAc,KAAMA,EAAM,UAAU,QACnC,mBAAC,WAAQ,GAAG,KAAK,KAAM,EAAG,KAAMH,EAAM,aAAW,MAAG,gBAAiBK,GAAY,gBAAgB,EAAG,EACtG,KAEA,OAAC,WAAQ,GAAG,KAAK,KAAM,EAAG,KAAML,EAAM,aAAW,MAAG,gBAAiBK,GAAY,gBAAgB,EAAG,KAEtG,OAAC,QACC,KAAM,EACN,KAAMJ,EACN,aAAW,MAAG,0DAA2DI,GAAY,sBAAsB,EAC7G,GACF,CAGN,EAEAN,EAAY,YAAc,cAE1B,IAAOR,EAAQQ",
6
+ "names": ["ProductInfo_exports", "__export", "ProductInfo_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_text", "import_heading", "import_LocalizedLink", "ProductInfo", "name", "description", "onClick", "href", "className", "classNames", "ref"]
7
7
  }
@@ -139,6 +139,7 @@ export interface CopyConfig {
139
139
  freeGiftLabel: string;
140
140
  learnMoreText: string;
141
141
  freeGiftHeading: string;
142
+ soldOutText?: string;
142
143
  }
143
144
  /**
144
145
  * 买赠项目接口
@@ -199,6 +200,7 @@ export interface BuyOneGetOneShelfCardProps extends Omit<React.HTMLAttributes<HT
199
200
  gifts?: FreeGift[];
200
201
  /** 赠品类型 1-> 赠送其中一个赠品, 2 -> 赠送所有赠品 */
201
202
  giftType?: 1 | 2;
203
+ soldOutText?: string;
202
204
  /** 场景图片 */
203
205
  sceneImages?: ResponsiveImages;
204
206
  /** 布局模式(通常由父组件自动决定) */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/types.ts"],
4
- "sourcesContent": ["import * as React from 'react'\nimport type { Theme } from '../../types/props'\n\n/**\n * \u514D\u8D39\u8D60\u54C1\u63A5\u53E3\n */\nexport interface FreeGift {\n /** \u8D60\u54C1ID */\n id: string\n /** \u8D60\u54C1\u56FE\u7247URL */\n image: string\n /** \u8D60\u54C1\u540D\u79F0 */\n name: string\n /** \u539F\u4EF7 */\n originalPrice: string\n /** \u73B0\u4EF7\uFF08\u901A\u5E38\u4E3AFree\uFF09 */\n currentPrice: string\n /** \u6570\u91CF */\n quantity: number\n /** \u53D8\u4F53ID */\n variantId: string\n /** SKU */\n sku: string\n /** \u53E5\u67C4 */\n handle: string\n /** \u8D60\u54C1tag */\n tag?: string\n}\n\n/**\n * \u5E26\u9009\u62E9\u72B6\u6001\u7684\u514D\u8D39\u8D60\u54C1\u63A5\u53E3\n */\nexport interface FreeGiftWithSelection extends FreeGift {\n /** \u662F\u5426\u5DF2\u9009\u4E2D */\n selected?: boolean\n}\n\n/**\n * \u4EA7\u54C1\u6807\u7B7E\u63A5\u53E3\n */\nexport interface ProductTag {\n /** \u6807\u7B7E\u6587\u672C */\n label: string\n /** \u6807\u7B7E\u6837\u5F0F\u53D8\u4F53 */\n variant: 'outline' | 'fill' | 'promotional'\n /** \u4FC3\u9500\u7C7B\u578B\uFF08\u4EC5\u5F53 variant \u4E3A 'promotional' \u65F6\u6709\u6548\uFF09 */\n promotionalType?: 'plus-member' | 'regular-member' | 'regular-discount' | 'time-limited-discount'\n}\n\n// Root \u7EC4\u4EF6\u76F8\u5173\u7684\u8BED\u4E49\u7C7B\u540D\nexport type BuyOneGetOneShelfRootSemanticName = 'root' | 'title' | 'description' | 'content' | 'viewMoreBtn'\n\n// ProductCard \u7EC4\u4EF6\u76F8\u5173\u7684\u8BED\u4E49\u7C7B\u540D\nexport type BuyOneGetOneShelfProductCardSemanticName =\n | 'productCard'\n | 'productCardImage'\n | 'productCardTitle'\n | 'productCardDescription'\n | 'productCardPriceLabel'\n | 'productCardPrice'\n | 'productCardOriginalPrice'\n | 'productCardGiftsContainer'\n | 'productCardBtnGroup'\n\n// \u5B8C\u6574\u7684\u8BED\u4E49\u7C7B\u540D\uFF08\u5411\u540E\u517C\u5BB9\uFF09\nexport type BuyOneGetOneShelfSemanticName = BuyOneGetOneShelfRootSemanticName | BuyOneGetOneShelfProductCardSemanticName\n\n/**\n * \u54CD\u5E94\u5F0F\u56FE\u7247\u63A5\u53E3\n */\nexport interface ResponsiveImage {\n id: number\n baseUrl?: string\n url: string\n thumbnailURL?: string\n filename?: string\n mimeType?: string\n width?: number\n height?: number\n}\n\n/**\n * \u54CD\u5E94\u5F0F\u56FE\u7247\u96C6\u5408\u63A5\u53E3\n */\nexport interface ResponsiveImages {\n laptop?: ResponsiveImage\n mobile?: ResponsiveImage\n tablet?: ResponsiveImage\n desktop?: ResponsiveImage\n lgDesktop?: ResponsiveImage\n}\n\n/**\n * \u4EA7\u54C1\u57FA\u7840\u6570\u636E\u63A5\u53E3\n */\nexport interface BaseProductData {\n sku: string\n name: string\n image: string\n value: string\n handle: string\n shopify_id: string\n}\n\nexport interface WithGiftData {\n /**\n * \u8D60\u54C1\n */\n gifts: FreeGift[]\n /**\n * \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1\n */\n gift_type: 1 | 2\n}\n\n/**\n * \u7EAF\u4EA7\u54C1\u6570\u636E\u63A5\u53E3\uFF08\u4E0D\u5305\u542B\u8D60\u54C1\u4FE1\u606F\uFF09\n */\nexport interface PureProductData extends BaseProductData {\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n /** \u5F53\u524D\u4EF7\u683C */\n currentPrice?: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** \u4EF7\u683C\u6807\u7B7E\u6587\u672C\uFF08\u5982 \"Plus Member Price\"\uFF09 */\n priceLabel?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n learnMoreText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n shopNowText?: string\n /** \u8D60\u54C1\u6807\u7B7E\u6587\u672C */\n freeGiftLabel?: string\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u8D60\u54C1\u9009\u62E9\u6A21\u5F0F */\n giftSelectionMode?: 'single' | 'multiple'\n availableForSale: boolean\n}\n\nexport interface ProductData extends BaseProductData, WithGiftData {\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n /** \u5F53\u524D\u4EF7\u683C */\n currentPrice?: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n learnMoreText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n shopNowText?: string\n /** \u8D60\u54C1\u6807\u7B7E\u6587\u672C */\n freeGiftLabel?: string\n /** \u8D60\u54C1\u9009\u62E9\u6A21\u5F0F */\n giftSelectionMode?: 'single' | 'multiple'\n}\n\n// Alias for consistency with other components\nexport type ProductCardData = ProductData\n\n/**\n * \u6587\u6848\u914D\u7F6E\u63A5\u53E3\n */\nexport interface CopyConfig {\n shopNowText: string\n freeGiftLabel: string\n learnMoreText: string\n freeGiftHeading: string\n}\n\n/**\n * \u4E70\u8D60\u9879\u76EE\u63A5\u53E3\n */\nexport interface BogoItem {\n id: string\n data: ProductData[]\n images: ResponsiveImages\n shopNowFun: string\n shopNowText: string\n learnMoreText: string\n layout?: 'horizontal' | 'vertical'\n}\n\n/**\n * BuyOneGetOneShelf \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3 - \u65B0\u683C\u5F0F\n */\nexport interface BuyOneGetOneShelfData {\n copy: CopyConfig\n theme: string\n title: string\n subtitle: string\n bogoItems: BogoItem[]\n /** \u8D85\u8FC7\u6B64\u6570\u91CF\u7684\u5546\u54C1\u65F6\u663E\u793A\"View More/View Less\"\u6309\u94AE\uFF0C\u9ED8\u8BA4 4 */\n viewMoreThreshold?: number\n /** View More \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View More' */\n viewMoreText?: string\n /** View Less \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View Less' */\n viewLessText?: string\n}\n\n// Root \u7EC4\u4EF6 Props\uFF08\u65B0\u7684\u7EC4\u5408\u5F0F\u8BBE\u8BA1\uFF09\nexport interface BuyOneGetOneShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u6807\u9898 */\n title?: string\n /** \u526F\u6807\u9898 */\n subtitle?: string\n theme?: Theme\n /** \u5B50\u7EC4\u4EF6 */\n children: React.ReactNode\n /** Root \u7EC4\u4EF6\u7684\u81EA\u5B9A\u4E49\u7C7B\u540D */\n classNames?: Partial<Record<BuyOneGetOneShelfRootSemanticName, string>>\n /** \u8D85\u8FC7\u6B64\u6570\u91CF\u7684\u5546\u54C1\u65F6\u663E\u793A\"View More/View Less\"\u6309\u94AE\uFF0C\u9ED8\u8BA4 4 */\n viewMoreThreshold?: number\n /** View More \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View More' */\n viewMoreText?: string\n /** View Less \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View Less' */\n viewLessText?: string\n}\n\n// \u5361\u7247\u7EC4\u4EF6Props - \u57FA\u4E8EProductCardProps\u4F46\u7B80\u5316\nexport interface BuyOneGetOneShelfCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> {\n /** \u4EA7\u54C1\u6570\u636E */\n productData: BaseProductData & {\n description?: string\n currentPrice?: string\n originalPrice?: string\n learnMoreText?: string\n shopNowText?: string\n freeGiftLabel?: string\n }\n /** \u8D60\u54C1\u5217\u8868 */\n gifts?: FreeGift[]\n /** \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1 */\n giftType?: 1 | 2\n /** \u573A\u666F\u56FE\u7247 */\n sceneImages?: ResponsiveImages\n /** \u5E03\u5C40\u6A21\u5F0F\uFF08\u901A\u5E38\u7531\u7236\u7EC4\u4EF6\u81EA\u52A8\u51B3\u5B9A\uFF09 */\n layout?: 'horizontal' | 'vertical'\n /** ProductCard \u7EC4\u4EF6\u7684\u81EA\u5B9A\u4E49\u7C7B\u540D */\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More \u70B9\u51FB\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now \u70B9\u51FB\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u70B9\u51FB\u56DE\u8C03 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u56DE\u8C03 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n /** \u9009\u4E2D\u8D60\u54C1SKU\u53D8\u5316\u56DE\u8C03\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n onSelectedGiftSkuChange?: (selectedSku: string | null) => void\n}\n\n// \u4FDD\u6301\u5411\u540E\u517C\u5BB9\u7684\u4F20\u7EDFProps\nexport interface BuyOneGetOneShelfLegacyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: BuyOneGetOneShelfData\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n onAddToCart?: (product: ProductCardData) => void\n /** \u8D60\u54C1\u70B9\u51FB\u4E8B\u4EF6 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u4E8B\u4EF6 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n classNames?: Partial<Record<BuyOneGetOneShelfSemanticName, string>>\n}\n"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport type { Theme } from '../../types/props'\n\n/**\n * \u514D\u8D39\u8D60\u54C1\u63A5\u53E3\n */\nexport interface FreeGift {\n /** \u8D60\u54C1ID */\n id: string\n /** \u8D60\u54C1\u56FE\u7247URL */\n image: string\n /** \u8D60\u54C1\u540D\u79F0 */\n name: string\n /** \u539F\u4EF7 */\n originalPrice: string\n /** \u73B0\u4EF7\uFF08\u901A\u5E38\u4E3AFree\uFF09 */\n currentPrice: string\n /** \u6570\u91CF */\n quantity: number\n /** \u53D8\u4F53ID */\n variantId: string\n /** SKU */\n sku: string\n /** \u53E5\u67C4 */\n handle: string\n /** \u8D60\u54C1tag */\n tag?: string\n}\n\n/**\n * \u5E26\u9009\u62E9\u72B6\u6001\u7684\u514D\u8D39\u8D60\u54C1\u63A5\u53E3\n */\nexport interface FreeGiftWithSelection extends FreeGift {\n /** \u662F\u5426\u5DF2\u9009\u4E2D */\n selected?: boolean\n}\n\n/**\n * \u4EA7\u54C1\u6807\u7B7E\u63A5\u53E3\n */\nexport interface ProductTag {\n /** \u6807\u7B7E\u6587\u672C */\n label: string\n /** \u6807\u7B7E\u6837\u5F0F\u53D8\u4F53 */\n variant: 'outline' | 'fill' | 'promotional'\n /** \u4FC3\u9500\u7C7B\u578B\uFF08\u4EC5\u5F53 variant \u4E3A 'promotional' \u65F6\u6709\u6548\uFF09 */\n promotionalType?: 'plus-member' | 'regular-member' | 'regular-discount' | 'time-limited-discount'\n}\n\n// Root \u7EC4\u4EF6\u76F8\u5173\u7684\u8BED\u4E49\u7C7B\u540D\nexport type BuyOneGetOneShelfRootSemanticName = 'root' | 'title' | 'description' | 'content' | 'viewMoreBtn'\n\n// ProductCard \u7EC4\u4EF6\u76F8\u5173\u7684\u8BED\u4E49\u7C7B\u540D\nexport type BuyOneGetOneShelfProductCardSemanticName =\n | 'productCard'\n | 'productCardImage'\n | 'productCardTitle'\n | 'productCardDescription'\n | 'productCardPriceLabel'\n | 'productCardPrice'\n | 'productCardOriginalPrice'\n | 'productCardGiftsContainer'\n | 'productCardBtnGroup'\n\n// \u5B8C\u6574\u7684\u8BED\u4E49\u7C7B\u540D\uFF08\u5411\u540E\u517C\u5BB9\uFF09\nexport type BuyOneGetOneShelfSemanticName = BuyOneGetOneShelfRootSemanticName | BuyOneGetOneShelfProductCardSemanticName\n\n/**\n * \u54CD\u5E94\u5F0F\u56FE\u7247\u63A5\u53E3\n */\nexport interface ResponsiveImage {\n id: number\n baseUrl?: string\n url: string\n thumbnailURL?: string\n filename?: string\n mimeType?: string\n width?: number\n height?: number\n}\n\n/**\n * \u54CD\u5E94\u5F0F\u56FE\u7247\u96C6\u5408\u63A5\u53E3\n */\nexport interface ResponsiveImages {\n laptop?: ResponsiveImage\n mobile?: ResponsiveImage\n tablet?: ResponsiveImage\n desktop?: ResponsiveImage\n lgDesktop?: ResponsiveImage\n}\n\n/**\n * \u4EA7\u54C1\u57FA\u7840\u6570\u636E\u63A5\u53E3\n */\nexport interface BaseProductData {\n sku: string\n name: string\n image: string\n value: string\n handle: string\n shopify_id: string\n}\n\nexport interface WithGiftData {\n /**\n * \u8D60\u54C1\n */\n gifts: FreeGift[]\n /**\n * \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1\n */\n gift_type: 1 | 2\n}\n\n/**\n * \u7EAF\u4EA7\u54C1\u6570\u636E\u63A5\u53E3\uFF08\u4E0D\u5305\u542B\u8D60\u54C1\u4FE1\u606F\uFF09\n */\nexport interface PureProductData extends BaseProductData {\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n /** \u5F53\u524D\u4EF7\u683C */\n currentPrice?: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** \u4EF7\u683C\u6807\u7B7E\u6587\u672C\uFF08\u5982 \"Plus Member Price\"\uFF09 */\n priceLabel?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n learnMoreText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n shopNowText?: string\n /** \u8D60\u54C1\u6807\u7B7E\u6587\u672C */\n freeGiftLabel?: string\n /** \u4EA7\u54C1\u6807\u7B7E */\n tags?: ProductTag[]\n /** \u8D60\u54C1\u9009\u62E9\u6A21\u5F0F */\n giftSelectionMode?: 'single' | 'multiple'\n availableForSale: boolean\n}\n\nexport interface ProductData extends BaseProductData, WithGiftData {\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n /** \u5F53\u524D\u4EF7\u683C */\n currentPrice?: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n learnMoreText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n shopNowText?: string\n /** \u8D60\u54C1\u6807\u7B7E\u6587\u672C */\n freeGiftLabel?: string\n /** \u8D60\u54C1\u9009\u62E9\u6A21\u5F0F */\n giftSelectionMode?: 'single' | 'multiple'\n}\n\n// Alias for consistency with other components\nexport type ProductCardData = ProductData\n\n/**\n * \u6587\u6848\u914D\u7F6E\u63A5\u53E3\n */\nexport interface CopyConfig {\n shopNowText: string\n freeGiftLabel: string\n learnMoreText: string\n freeGiftHeading: string\n soldOutText?: string\n}\n\n/**\n * \u4E70\u8D60\u9879\u76EE\u63A5\u53E3\n */\nexport interface BogoItem {\n id: string\n data: ProductData[]\n images: ResponsiveImages\n shopNowFun: string\n shopNowText: string\n learnMoreText: string\n layout?: 'horizontal' | 'vertical'\n}\n\n/**\n * BuyOneGetOneShelf \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3 - \u65B0\u683C\u5F0F\n */\nexport interface BuyOneGetOneShelfData {\n copy: CopyConfig\n theme: string\n title: string\n subtitle: string\n bogoItems: BogoItem[]\n /** \u8D85\u8FC7\u6B64\u6570\u91CF\u7684\u5546\u54C1\u65F6\u663E\u793A\"View More/View Less\"\u6309\u94AE\uFF0C\u9ED8\u8BA4 4 */\n viewMoreThreshold?: number\n /** View More \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View More' */\n viewMoreText?: string\n /** View Less \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View Less' */\n viewLessText?: string\n}\n\n// Root \u7EC4\u4EF6 Props\uFF08\u65B0\u7684\u7EC4\u5408\u5F0F\u8BBE\u8BA1\uFF09\nexport interface BuyOneGetOneShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u6807\u9898 */\n title?: string\n /** \u526F\u6807\u9898 */\n subtitle?: string\n theme?: Theme\n /** \u5B50\u7EC4\u4EF6 */\n children: React.ReactNode\n /** Root \u7EC4\u4EF6\u7684\u81EA\u5B9A\u4E49\u7C7B\u540D */\n classNames?: Partial<Record<BuyOneGetOneShelfRootSemanticName, string>>\n /** \u8D85\u8FC7\u6B64\u6570\u91CF\u7684\u5546\u54C1\u65F6\u663E\u793A\"View More/View Less\"\u6309\u94AE\uFF0C\u9ED8\u8BA4 4 */\n viewMoreThreshold?: number\n /** View More \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View More' */\n viewMoreText?: string\n /** View Less \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 'View Less' */\n viewLessText?: string\n}\n\n// \u5361\u7247\u7EC4\u4EF6Props - \u57FA\u4E8EProductCardProps\u4F46\u7B80\u5316\nexport interface BuyOneGetOneShelfCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onClick'> {\n /** \u4EA7\u54C1\u6570\u636E */\n productData: BaseProductData & {\n description?: string\n currentPrice?: string\n originalPrice?: string\n learnMoreText?: string\n shopNowText?: string\n freeGiftLabel?: string\n }\n /** \u8D60\u54C1\u5217\u8868 */\n gifts?: FreeGift[]\n /** \u8D60\u54C1\u7C7B\u578B 1-> \u8D60\u9001\u5176\u4E2D\u4E00\u4E2A\u8D60\u54C1\uFF0C 2 -> \u8D60\u9001\u6240\u6709\u8D60\u54C1 */\n giftType?: 1 | 2\n soldOutText?: string\n /** \u573A\u666F\u56FE\u7247 */\n sceneImages?: ResponsiveImages\n /** \u5E03\u5C40\u6A21\u5F0F\uFF08\u901A\u5E38\u7531\u7236\u7EC4\u4EF6\u81EA\u52A8\u51B3\u5B9A\uFF09 */\n layout?: 'horizontal' | 'vertical'\n /** ProductCard \u7EC4\u4EF6\u7684\u81EA\u5B9A\u4E49\u7C7B\u540D */\n classNames?: Partial<Record<BuyOneGetOneShelfProductCardSemanticName, string>>\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More \u70B9\u51FB\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now \u70B9\u51FB\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u70B9\u51FB\u56DE\u8C03 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u56DE\u8C03 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n /** \u9009\u4E2D\u8D60\u54C1SKU\u53D8\u5316\u56DE\u8C03\uFF08\u53D7\u63A7\u7EC4\u4EF6\uFF09 */\n onSelectedGiftSkuChange?: (selectedSku: string | null) => void\n}\n\n// \u4FDD\u6301\u5411\u540E\u517C\u5BB9\u7684\u4F20\u7EDFProps\nexport interface BuyOneGetOneShelfLegacyProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: BuyOneGetOneShelfData\n /** @deprecated Use `onProductImageClick` instead. */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onLearnMore?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n /** Shop Now\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onShopNow?: (product: ProductCardData, selectedGifts: FreeGift[]) => void\n onAddToCart?: (product: ProductCardData) => void\n /** \u8D60\u54C1\u70B9\u51FB\u4E8B\u4EF6 */\n onGiftClick?: (gift: FreeGift, selectedGifts: FreeGift[]) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u4E8B\u4EF6 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n classNames?: Partial<Record<BuyOneGetOneShelfSemanticName, string>>\n}\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD,GAAA,IAAAE,EAAuB",
6
6
  "names": ["types_exports", "__toCommonJS", "React"]
7
7
  }
@@ -6,7 +6,9 @@ declare const _default: React.ForwardRefExoticComponent<Omit<React.HTMLAttribute
6
6
  data: {
7
7
  shape?: import("../../types/props").Shape;
8
8
  sectionTitle?: string;
9
+ mode?: "grid" | "carousel";
9
10
  groupByTab?: boolean;
11
+ carouselConfig?: import("./types").MultiLayoutCarouselConfig;
10
12
  items: ({
11
13
  width?: "full" | "half" | "one-third";
12
14
  } & Item)[];
@@ -1,2 +1,2 @@
1
- "use strict";var W=Object.create;var _=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var ee=Object.getOwnPropertyNames;var te=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var se=(s,a)=>{for(var o in a)_(s,o,{get:a[o],enumerable:!0})},D=(s,a,o,k)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of ee(a))!ae.call(s,p)&&p!==o&&_(s,p,{get:()=>a[p],enumerable:!(k=X(a,p))||k.enumerable});return s};var C=(s,a,o)=>(o=s!=null?W(te(s)):{},D(a||!s||!s.__esModule?_(o,"default",{value:s,enumerable:!0}):o,s)),le=s=>D(_({},"__esModule",{value:!0}),s);var ie={};se(ie,{default:()=>oe});module.exports=le(ie);var e=require("react/jsx-runtime"),r=C(require("react")),Q=require("react-responsive"),Y=require("../../shared/Styles.js"),R=C(require("../../components/picture.js")),U=C(require("../../components/button.js")),E=require("../../components/heading.js"),q=require("../VideoModal/index.js"),I=require("../../components/grid.js"),O=C(require("../Title/index.js")),i=require("../../helpers/utils.js"),S=C(require("../SwiperBox/index.js")),H=require("../../shared/mimeType.js"),y=require("../../components/tabs.js"),Z=require("../../hooks/useExposure.js"),z=require("../../shared/trackUrlRef.js"),F=require("../AiuiProvider/index.js"),J=require("../../shared/track.js");const g="image",v="p1_banner",L=({data:s,configuration:a,jIndex:o,spanType:k,title:p,onSecondaryButtonClick:M,onPrimaryButtonClick:j})=>{const[w,n]=(0,r.useState)(!1),P=(0,Q.useMediaQuery)({query:"(max-width: 768px)"}),B=(0,r.useRef)(null),b=()=>{if(k)switch(k){case"full":return"tablet:aspect-w-[704] tablet:aspect-h-[400] laptop:aspect-w-[896] laptop:aspect-h-[384] desktop:aspect-w-[1312] desktop:aspect-h-[512] lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[640]";case"half":return"tablet:aspect-w-[704] tablet:aspect-h-[480] laptop:aspect-w-[440] laptop:aspect-h-[384] desktop:aspect-w-[648] desktop:aspect-h-[512] lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[640]";case"one-third":return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]";default:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]"}else switch(a?.num){case 1:return"tablet:aspect-w-[704] tablet:aspect-h-[400] laptop:aspect-w-[896] laptop:aspect-h-[384] desktop:aspect-w-[1312] desktop:aspect-h-[512] lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[640]";case 2:return"tablet:aspect-w-[704] tablet:aspect-h-[480] laptop:aspect-w-[440] laptop:aspect-h-[384] desktop:aspect-w-[648] desktop:aspect-h-[512] lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[640]";case 3:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]";default:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]"}};(0,Z.useExposure)(B,{componentType:g,componentName:v,position:o,componentTitle:s.title,componentDescription:s.description,navigation:a?.activeTab}),(0,r.useEffect)(()=>{n(P)},[P]);const{theme:G="light",title:c,description:h,imageUrl:d,primaryButton:x,secondaryButton:f,imageMobileUrl:u,blockLink:N,video:T,youtubeId:m,isYouTube:V,id:$}=s,t="lg-desktop:px-7 lg-desktop:pb-[14px] lg-desktop:pt-[15px] lg-desktop:text-[16px]";return(0,e.jsxs)("div",{className:(0,i.cn)("item-wrapper cursor-pointer","text-info-primary group relative box-border w-full overflow-hidden",b(),{"rounded-2xl":a?.shape==="rounded","aiui-dark":G==="dark","h-[400px]":w},"text-info-primary"),ref:B,children:[(N||f.link)&&(0,e.jsx)("a",{className:"absolute inset-0 z-10",href:(0,z.trackUrlRef)((0,i.getLocalizedPath)(N||f.link||"",a?.locale||"us"),`${g}_${v}`),"data-headless-type-name":`${g}#${v}`,"data-headless-title-desc-button":`${c}#${h}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,"aria-hidden":"true",tabIndex:-1}),(0,e.jsxs)("div",{className:"absolute inset-0",children:[(0,H.isVideo)(d?.mimeType)?(0,e.jsx)("video",{autoPlay:!0,muted:!0,playsInline:!0,loop:!0,className:"tablet:block hidden size-full overflow-hidden object-cover",children:(0,e.jsx)("source",{src:d?.url,type:"video/mp4"})}):(0,e.jsx)(R.default,{source:d?.url,alt:d?.alt||"",className:"tablet:block hidden h-full overflow-hidden",imgClassName:"h-full transition-all duration-300 group-hover:scale-105 object-cover",style:{aspectRatio:`${d?.width}/${d?.height}`}}),(0,H.isVideo)(u?.mimeType)?(0,e.jsx)("video",{autoPlay:!0,muted:!0,playsInline:!0,loop:!0,className:"tablet:hidden block size-full overflow-hidden object-cover",children:(0,e.jsx)("source",{src:u?.url,type:"video/mp4"})}):(0,e.jsx)(R.default,{source:u?.url||d?.url,alt:u?.alt||d?.alt||"",className:"tablet:hidden block h-full overflow-hidden",imgClassName:"h-full transition-all duration-300 object-cover"})]}),(0,e.jsxs)("div",{className:(0,i.cn)("pointer-events-none absolute inset-0 z-20 flex flex-col",k==="full"?"laptop:justify-center justify-end":"justify-end"),children:[(0,e.jsxs)("div",{className:"laptop:p-6 desktop:p-[32px] laptop:gap-4 desktop:gap-6 pointer-events-auto flex w-fit flex-col gap-6 p-4",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)(E.Heading,{size:3,as:"h3",className:"item-title",html:c}),(0,e.jsx)(E.Heading,{as:"h4",className:"item-description desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 text-[14px]",html:h})]}),(0,e.jsxs)("div",{className:"lg-desktop:gap-3 flex gap-2",children:[f&&f.text&&(0,e.jsxs)(U.default,{"aria-label":c??h,className:(0,i.cn)(t,"link-left"),variant:"secondary",as:"a","data-track":`${$}-link-left`,onClick:()=>{M?.(s)},href:(0,z.trackUrlRef)((0,i.getLocalizedPath)(f.link||"",a?.locale||"us"),`${g}_${v}`),"data-headless-type-name":`${g}#${v}`,"data-headless-title-desc-button":`${c}#${h}#${f.text}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,children:[f.text,(0,e.jsx)("span",{className:"sr-only",children:c??h})]}),x&&x.text&&(0,e.jsx)(U.default,{"aria-label":c??h,className:(0,i.cn)(t,"link-right"),variant:"primary","data-track":`${$}-link-right`,as:"a",onClick:()=>{j?.(s)},href:(0,z.trackUrlRef)((0,i.getLocalizedPath)(x.link||"",a?.locale||"us"),`${g}_${v}`),"data-headless-type-name":`${g}#${v}`,"data-headless-title-desc-button":`${c}#${h}#${x.text}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,children:x.text})]})]}),(T?.url||m)&&(0,e.jsx)("div",{className:"laptop:bottom-6 laptop:right-6 pointer-events-auto absolute bottom-4 right-4",children:(0,e.jsx)("button",{onClick:()=>{a?.onVideoPlayBtnClick?.(V&&m?m:T?.url||m,V)},className:"laptop:size-12 flex size-8 items-center justify-center rounded-full bg-white bg-opacity-20 hover:bg-black/75",children:(0,e.jsx)("svg",{width:"12",height:"14",viewBox:"0 0 12 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,e.jsx)("path",{d:"M12 7L0 14L0 0L12 7Z",fill:"white"})})})})]})]})},A=r.default.forwardRef((s,a)=>{const{data:o,className:k,onSecondaryButtonClick:p,onPrimaryButtonClick:M,...j}=s,{shape:w,sectionTitle:n,groupByTab:P=!1,items:B=[],carousel:b}=o,[G,c]=(0,r.useState)(!1),[h,d]=(0,r.useState)(""),[x,f]=(0,r.useState)(""),{locale:u="us"}=(0,F.useAiuiContext)(),N=t=>{switch(t){case"full":return 12;case"half":return 6;case"one-third":return 4}},T=B.map(t=>t.tabName).filter(Boolean).filter((t,l,K)=>K.indexOf(t)===l),m=(t,l)=>{c(!0),l?f?.(t||""):d?.(t||"")},V=(t,l)=>{switch(t){case 1:return 1;case 2:return 2;default:return l?2.3:3}},$=T.map(t=>({tabName:t,items:B.filter(l=>l.tabName===t)})).reduce((t,l)=>(t[l.tabName]=l.items,t),{});return(0,e.jsxs)("section",{"data-ui-component-id":"MultiLayoutGraphicBlock",ref:a,...j,className:(0,i.cn)("multiLayoutGraphicBlock","text-info-primary",k),children:[n&&(0,e.jsx)(O.default,{data:{title:n},className:"section-title"}),P?(0,e.jsxs)(y.Tabs,{shape:w,align:"left",defaultValue:(0,i.spaceToHyphen)(T[0]),children:[(0,e.jsx)(y.TabsList,{children:T.map((t,l)=>(0,e.jsx)(y.TabsTrigger,{value:(0,i.spaceToHyphen)(t),onClick:()=>{(0,J.gaTrack)({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:"Home Page",component_type:g,component_name:v,component_title:n,component_position:1,navigation:t,button_name:t}})},children:t},l))}),T.map((t,l)=>(0,e.jsx)(y.TabsContent,{value:(0,i.spaceToHyphen)(t),className:"desktop:mt-[36px] mt-[24px] w-full",children:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(S.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock1",data:{list:$?.[t]||[],configuration:{shape:w,isTab:P,activeTab:t,title:n,num:$?.[t]?.length||0,locale:u,onVideoPlayBtnClick:m,onSecondaryButtonClick:p,onPrimaryButtonClick:M}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:V($?.[t]?.length||0,!0)},1024:{spaceBetween:16,freeMode:!1,slidesPerView:V($?.[t]?.length||0)}}}),b&&b?.items.length>0?(0,e.jsx)(S.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock2",data:{list:b?.items||[],configuration:{shape:w,isTab:P,locale:u,onVideoPlayBtnClick:m,title:n,onSecondaryButtonClick:p,onPrimaryButtonClick:M}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:3.1},1440:{spaceBetween:16,freeMode:!1,slidesPerView:4}}}):null]})},l))]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(I.Grid,{className:"w-full",children:[B.map((t,l)=>(0,e.jsx)(I.GridItem,{span:N(t.width??"full"),className:"laptop:block hidden",children:(0,e.jsx)(L,{data:t,configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:n},jIndex:l,spanType:t.width,onSecondaryButtonClick:p,onPrimaryButtonClick:M})},`${t?.title||""}${l}`)),B.map((t,l)=>(0,e.jsx)(I.GridItem,{span:N("full"),className:"laptop:hidden block",children:(0,e.jsx)(L,{data:t,configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:n},jIndex:l,spanType:"full"})},`${t?.title||""}${l}`))]}),b&&b?.items.length>0?(0,e.jsx)(S.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock3",data:{list:b?.items||[],configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:n,onSecondaryButtonClick:p,onPrimaryButtonClick:M}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:3.1},1440:{spaceBetween:16,freeMode:!1,slidesPerView:4}}}):null]}),G&&(0,e.jsx)(q.VideoModal,{visible:G,youTubeId:x,videoUrl:h,onCloseModal:()=>c(!1)})]})});A.displayName="MultiLayoutGraphicBlock";var oe=(0,Y.withLayout)(A);
1
+ "use strict";var X=Object.create;var _=Object.defineProperty;var ee=Object.getOwnPropertyDescriptor;var te=Object.getOwnPropertyNames;var ae=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var le=(s,a)=>{for(var o in a)_(s,o,{get:a[o],enumerable:!0})},D=(s,a,o,h)=>{if(a&&typeof a=="object"||typeof a=="function")for(let p of te(a))!se.call(s,p)&&p!==o&&_(s,p,{get:()=>a[p],enumerable:!(h=ee(a,p))||h.enumerable});return s};var N=(s,a,o)=>(o=s!=null?X(ae(s)):{},D(a||!s||!s.__esModule?_(o,"default",{value:s,enumerable:!0}):o,s)),oe=s=>D(_({},"__esModule",{value:!0}),s);var pe={};le(pe,{default:()=>ie});module.exports=oe(pe);var e=require("react/jsx-runtime"),n=N(require("react")),Q=require("react-responsive"),Y=N(require("./MultiLayoutGraphicBlockCarousel.js")),q=require("../../shared/Styles.js"),j=N(require("../../components/picture.js")),E=N(require("../../components/button.js")),H=require("../../components/heading.js"),O=require("../VideoModal/index.js"),I=require("../../components/grid.js"),Z=N(require("../Title/index.js")),i=require("../../helpers/utils.js"),z=N(require("../SwiperBox/index.js")),U=require("../../shared/mimeType.js"),B=require("../../components/tabs.js"),F=require("../../hooks/useExposure.js"),R=require("../../shared/trackUrlRef.js"),J=require("../AiuiProvider/index.js"),K=require("../../shared/track.js");const y="image",v="p1_banner",L=({data:s,configuration:a,jIndex:o,spanType:h,title:p,onSecondaryButtonClick:x,onPrimaryButtonClick:G})=>{const[w,r]=(0,n.useState)(!1),$=(0,Q.useMediaQuery)({query:"(max-width: 768px)"}),b=(0,n.useRef)(null),g=()=>{if(h)switch(h){case"full":return"tablet:aspect-w-[704] tablet:aspect-h-[400] laptop:aspect-w-[896] laptop:aspect-h-[384] desktop:aspect-w-[1312] desktop:aspect-h-[512] lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[640]";case"half":return"tablet:aspect-w-[704] tablet:aspect-h-[480] laptop:aspect-w-[440] laptop:aspect-h-[384] desktop:aspect-w-[648] desktop:aspect-h-[512] lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[640]";case"one-third":return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]";default:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]"}else switch(a?.num){case 1:return"tablet:aspect-w-[704] tablet:aspect-h-[400] laptop:aspect-w-[896] laptop:aspect-h-[384] desktop:aspect-w-[1312] desktop:aspect-h-[512] lg-desktop:aspect-w-[1664] lg-desktop:aspect-h-[640]";case 2:return"tablet:aspect-w-[704] tablet:aspect-h-[480] laptop:aspect-w-[440] laptop:aspect-h-[384] desktop:aspect-w-[648] desktop:aspect-h-[512] lg-desktop:aspect-w-[824] lg-desktop:aspect-h-[640]";case 3:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]";default:return"tablet:aspect-w-[296] tablet:aspect-h-[400] laptop:aspect-w-[288] laptop:aspect-h-[384] desktop:aspect-w-[427] desktop:aspect-h-[512] lg-desktop:aspect-w-[544] lg-desktop:aspect-h-[640]"}};(0,F.useExposure)(b,{componentType:y,componentName:v,position:o,componentTitle:s.title,componentDescription:s.description,navigation:a?.activeTab}),(0,n.useEffect)(()=>{r($)},[$]);const{theme:S="light",title:c,description:f,imageUrl:d,primaryButton:T,secondaryButton:k,imageMobileUrl:u,blockLink:C,video:M,youtubeId:m,isYouTube:V,id:P}=s,t="lg-desktop:px-7 lg-desktop:pb-[14px] lg-desktop:pt-[15px] lg-desktop:text-[16px]";return(0,e.jsxs)("div",{className:(0,i.cn)("item-wrapper cursor-pointer","text-info-primary group relative box-border w-full overflow-hidden",g(),{"rounded-2xl":a?.shape==="rounded","aiui-dark":S==="dark","h-[400px]":w},"text-info-primary"),ref:b,children:[(C||k.link)&&(0,e.jsx)("a",{className:"absolute inset-0 z-10",href:(0,R.trackUrlRef)((0,i.getLocalizedPath)(C||k.link||"",a?.locale||"us"),`${y}_${v}`),"data-headless-type-name":`${y}#${v}`,"data-headless-title-desc-button":`${c}#${f}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,"aria-hidden":"true",tabIndex:-1}),(0,e.jsxs)("div",{className:"absolute inset-0",children:[(0,U.isVideo)(d?.mimeType)?(0,e.jsx)("video",{autoPlay:!0,muted:!0,playsInline:!0,loop:!0,className:"tablet:block hidden size-full overflow-hidden object-cover",children:(0,e.jsx)("source",{src:d?.url,type:"video/mp4"})}):(0,e.jsx)(j.default,{source:d?.url,alt:d?.alt||"",className:"tablet:block hidden h-full overflow-hidden",imgClassName:"h-full transition-all duration-300 group-hover:scale-105 object-cover",style:{aspectRatio:`${d?.width}/${d?.height}`}}),(0,U.isVideo)(u?.mimeType)?(0,e.jsx)("video",{autoPlay:!0,muted:!0,playsInline:!0,loop:!0,className:"tablet:hidden block size-full overflow-hidden object-cover",children:(0,e.jsx)("source",{src:u?.url,type:"video/mp4"})}):(0,e.jsx)(j.default,{source:u?.url||d?.url,alt:u?.alt||d?.alt||"",className:"tablet:hidden block h-full overflow-hidden",imgClassName:"h-full transition-all duration-300 object-cover"})]}),(0,e.jsxs)("div",{className:(0,i.cn)("pointer-events-none absolute inset-0 z-20 flex flex-col",h==="full"?"laptop:justify-center justify-end":"justify-end"),children:[(0,e.jsxs)("div",{className:"laptop:p-6 desktop:p-[32px] laptop:gap-4 desktop:gap-6 pointer-events-auto flex w-fit flex-col gap-6 p-4",children:[(0,e.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,e.jsx)(H.Heading,{size:3,as:"h3",className:"item-title",html:c}),(0,e.jsx)(H.Heading,{as:"h4",className:"item-description desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 text-[14px]",html:f})]}),(0,e.jsxs)("div",{className:"lg-desktop:gap-3 flex gap-2",children:[k&&k.text&&(0,e.jsxs)(E.default,{"aria-label":c??f,className:(0,i.cn)(t,"link-left"),variant:"secondary",as:"a","data-track":`${P}-link-left`,onClick:()=>{x?.(s)},href:(0,R.trackUrlRef)((0,i.getLocalizedPath)(k.link||"",a?.locale||"us"),`${y}_${v}`),"data-headless-type-name":`${y}#${v}`,"data-headless-title-desc-button":`${c}#${f}#${k.text}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,children:[k.text,(0,e.jsx)("span",{className:"sr-only",children:c??f})]}),T&&T.text&&(0,e.jsx)(E.default,{"aria-label":c??f,className:(0,i.cn)(t,"link-right"),variant:"primary","data-track":`${P}-link-right`,as:"a",onClick:()=>{G?.(s)},href:(0,R.trackUrlRef)((0,i.getLocalizedPath)(T.link||"",a?.locale||"us"),`${y}_${v}`),"data-headless-type-name":`${y}#${v}`,"data-headless-title-desc-button":`${c}#${f}#${T.text}`,"data-headless-nav-position":`${a?.activeTab}#${o}`,children:T.text})]})]}),(M?.url||m)&&(0,e.jsx)("div",{className:"laptop:bottom-6 laptop:right-6 pointer-events-auto absolute bottom-4 right-4",children:(0,e.jsx)("button",{onClick:()=>{a?.onVideoPlayBtnClick?.(V&&m?m:M?.url||m,V)},className:"laptop:size-12 flex size-8 items-center justify-center rounded-full bg-white bg-opacity-20 hover:bg-black/75",children:(0,e.jsx)("svg",{width:"12",height:"14",viewBox:"0 0 12 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,e.jsx)("path",{d:"M12 7L0 14L0 0L12 7Z",fill:"white"})})})})]})]})},A=n.default.forwardRef((s,a)=>{const{data:o,className:h,onSecondaryButtonClick:p,onPrimaryButtonClick:x,...G}=s,{shape:w,sectionTitle:r,groupByTab:$=!1,items:b=[],carousel:g}=o,[S,c]=(0,n.useState)(!1),[f,d]=(0,n.useState)(""),[T,k]=(0,n.useState)(""),{locale:u="us"}=(0,J.useAiuiContext)(),C=t=>{switch(t){case"full":return 12;case"half":return 6;case"one-third":return 4}},M=b.map(t=>t.tabName).filter(Boolean).filter((t,l,W)=>W.indexOf(t)===l),m=(t,l)=>{c(!0),l?k?.(t||""):d?.(t||"")},V=(t,l)=>{switch(t){case 1:return 1;case 2:return 2;default:return l?2.3:3}},P=M.map(t=>({tabName:t,items:b.filter(l=>l.tabName===t)})).reduce((t,l)=>(t[l.tabName]=l.items,t),{});return o.mode==="carousel"&&b.length>0?(0,e.jsx)(Y.default,{data:o,onPrimaryButtonClick:x,onSecondaryButtonClick:p,className:h,ref:a,...G}):(0,e.jsxs)("section",{"data-ui-component-id":"MultiLayoutGraphicBlock",ref:a,...G,className:(0,i.cn)("multiLayoutGraphicBlock","text-info-primary",h),children:[r&&(0,e.jsx)(Z.default,{data:{title:r},className:"section-title"}),$?(0,e.jsxs)(B.Tabs,{shape:w,align:"left",defaultValue:(0,i.spaceToHyphen)(M[0]),children:[(0,e.jsx)(B.TabsList,{children:M.map((t,l)=>(0,e.jsx)(B.TabsTrigger,{value:(0,i.spaceToHyphen)(t),onClick:()=>{(0,K.gaTrack)({event:"ga4Event",event_name:"component_click",event_parameters:{page_group:"Home Page",component_type:y,component_name:v,component_title:r,component_position:1,navigation:t,button_name:t}})},children:t},l))}),M.map((t,l)=>(0,e.jsx)(B.TabsContent,{value:(0,i.spaceToHyphen)(t),className:"desktop:mt-[36px] mt-[24px] w-full",children:(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(z.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock1",data:{list:P?.[t]||[],configuration:{shape:w,isTab:$,activeTab:t,title:r,num:P?.[t]?.length||0,locale:u,onVideoPlayBtnClick:m,onSecondaryButtonClick:p,onPrimaryButtonClick:x}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:V(P?.[t]?.length||0,!0)},1024:{spaceBetween:16,freeMode:!1,slidesPerView:V(P?.[t]?.length||0)}}}),g&&g?.items.length>0?(0,e.jsx)(z.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock2",data:{list:g?.items||[],configuration:{shape:w,isTab:$,locale:u,onVideoPlayBtnClick:m,title:r,onSecondaryButtonClick:p,onPrimaryButtonClick:x}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:3.1},1440:{spaceBetween:16,freeMode:!1,slidesPerView:4}}}):null]})},l))]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(I.Grid,{className:"w-full",children:[b.map((t,l)=>(0,e.jsx)(I.GridItem,{span:C(t.width??"full"),className:"laptop:block hidden",children:(0,e.jsx)(L,{data:t,configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:r},jIndex:l,spanType:t.width,onSecondaryButtonClick:p,onPrimaryButtonClick:x})},`${t?.title||""}${l}`)),b.map((t,l)=>(0,e.jsx)(I.GridItem,{span:C("full"),className:"laptop:hidden block",children:(0,e.jsx)(L,{data:t,configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:r},jIndex:l,spanType:"full"})},`${t?.title||""}${l}`))]}),g&&g?.items.length>0?(0,e.jsx)(z.default,{className:"!overflow-visible",id:"MultiLayoutGraphicBlock3",data:{list:g?.items||[],configuration:{shape:w,locale:u,onVideoPlayBtnClick:m,title:r,onSecondaryButtonClick:p,onPrimaryButtonClick:x}},Slide:L,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3},1024:{spaceBetween:16,freeMode:!1,slidesPerView:3.1},1440:{spaceBetween:16,freeMode:!1,slidesPerView:4}}}):null]}),S&&(0,e.jsx)(O.VideoModal,{visible:S,youTubeId:T,videoUrl:f,onCloseModal:()=>c(!1)})]})});A.displayName="MultiLayoutGraphicBlock";var ie=(0,q.withLayout)(A,{container:{desktopSpan:12,mobileSpan:12}});
2
2
  //# sourceMappingURL=MultiLayoutGraphicBlock.js.map