@anker-in/headless-ui 1.3.19 → 1.3.21

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 (70) 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/EventSchedule/index.d.ts +2 -2
  16. package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
  17. package/dist/cjs/biz-components/EventSchedule/index.js.map +3 -3
  18. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  19. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  20. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  21. package/dist/cjs/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  22. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -0
  23. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  24. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  25. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.d.ts +22 -0
  26. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +2 -0
  27. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +7 -0
  28. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.d.ts +18 -0
  29. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.js +1 -1
  30. package/dist/cjs/biz-components/MultiLayoutGraphicBlock/types.js.map +1 -1
  31. package/dist/cjs/biz-components/Specs/index.js +1 -1
  32. package/dist/cjs/biz-components/Specs/index.js.map +3 -3
  33. package/dist/cjs/shared/Styles.d.ts +2 -0
  34. package/dist/cjs/shared/Styles.js +1 -1
  35. package/dist/cjs/shared/Styles.js.map +3 -3
  36. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.d.ts +1 -0
  37. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.js +1 -1
  38. package/dist/esm/biz-components/BuyOneGetOneShelf/PriceAndActions.js.map +3 -3
  39. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +1 -0
  40. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  41. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +3 -3
  42. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.d.ts +2 -0
  43. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.js +1 -1
  44. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductImage.js.map +3 -3
  45. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.d.ts +2 -5
  46. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.js +1 -1
  47. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductInfo.js.map +3 -3
  48. package/dist/esm/biz-components/BuyOneGetOneShelf/types.d.ts +2 -0
  49. package/dist/esm/biz-components/BuyOneGetOneShelf/types.js.map +1 -1
  50. package/dist/esm/biz-components/EventSchedule/index.d.ts +2 -2
  51. package/dist/esm/biz-components/EventSchedule/index.js +1 -1
  52. package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
  53. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js +1 -1
  54. package/dist/esm/biz-components/Listing/components/ProductCard/ProductSummary/index.js.map +3 -3
  55. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js +1 -1
  56. package/dist/esm/biz-components/Listing/components/PurchaseBar/ProductActions/index.js.map +3 -3
  57. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.d.ts +2 -0
  58. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js +1 -1
  59. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlock.js.map +3 -3
  60. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.d.ts +22 -0
  61. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js +2 -0
  62. package/dist/esm/biz-components/MultiLayoutGraphicBlock/MultiLayoutGraphicBlockCarousel.js.map +7 -0
  63. package/dist/esm/biz-components/MultiLayoutGraphicBlock/types.d.ts +18 -0
  64. package/dist/esm/biz-components/Specs/index.js +1 -1
  65. package/dist/esm/biz-components/Specs/index.js.map +3 -3
  66. package/dist/esm/shared/Styles.d.ts +2 -0
  67. package/dist/esm/shared/Styles.js +1 -1
  68. package/dist/esm/shared/Styles.js.map +3 -3
  69. package/package.json +1 -1
  70. 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
  }
@@ -22,9 +22,9 @@ export interface StateIcon {
22
22
  export interface EventScheduleItem {
23
23
  /** 标题 */
24
24
  title: string;
25
- /** 开始日期(ISO 8601 格式或任何 dayjs 支持的格式,如 '2024-12-01') */
25
+ /** 开始日期(ISO 8601 格式,如 '2024-12-01T00:00:00Z') */
26
26
  startDate: string;
27
- /** 结束日期(ISO 8601 格式或任何 dayjs 支持的格式,如 '2024-12-31') */
27
+ /** 结束日期(ISO 8601 格式,如 '2024-12-31T23:59:59Z') */
28
28
  endDate: string;
29
29
  /**
30
30
  * 卡片背景图标配置,状态化图标(必须包含 active 和 inactive)
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var R=Object.create;var S=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var q=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},L=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of j(t))!O.call(e,i)&&i!==n&&S(e,i,{get:()=>t[i],enumerable:!(o=z(t,i))||o.enumerable});return e};var F=(e,t,n)=>(n=e!=null?R(H(e)):{},L(t||!e||!e.__esModule?S(n,"default",{value:e,enumerable:!0}):n,e)),G=e=>L(S({},"__esModule",{value:!0}),e);var Z={};q(Z,{default:()=>Y});module.exports=G(Z);var s=require("react/jsx-runtime"),l=F(require("react")),u=require("../../helpers/index.js"),$=require("../../shared/Styles.js"),m=require("../../components/index.js"),f=require("swiper/react"),k=F(require("dayjs")),v=require("class-variance-authority");const E=(e,t)=>{const n=(0,k.default)(),o=(0,k.default)(e).startOf("day"),i=(0,k.default)(t).endOf("day");return n.isAfter(i)?"completed":n.isBefore(o)?"not-started":"in-progress"},J=(0,v.cva)("h-1 w-full overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),K=(0,v.cva)("size-4 rounded-full transition-colors",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),T=(0,v.cva)("font-bold leading-[1.2]",{variants:{state:{"in-progress-light":"text-[#080A0F]","in-progress-dark":"text-white","not-started-light":"text-[#080A0F]","not-started-dark":"text-[#F5F6F7]","completed-light":"text-[#4A4C56]/60","completed-dark":"text-[#F5F6F7]/60"}},defaultVariants:{state:"not-started-light"}}),Q=(0,v.cva)("laptop:h-[160px] rounded-box relative flex h-[120px] min-w-0 flex-col justify-between gap-2 overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F4E8BC]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F4E8BC]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),U=({timeStatus:e,theme:t="light",className:n,index:o,nodeLength:i})=>{const p=`${e}-${t}`,a=o===0,d=o===i-1;return(0,s.jsxs)("div",{className:(0,u.cn)(`event-schedule-timeline-node event-schedule-timeline-node--${e} relative my-2 flex h-1 w-full items-center justify-center`,n),children:[(0,s.jsx)("div",{className:(0,u.cn)(`event-schedule-timeline-progress event-schedule-timeline-progress--${e}`,J({state:p}),a&&"rounded-l-full",d&&"rounded-r-full")}),(0,s.jsx)("div",{className:"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2",children:(0,s.jsx)("div",{className:(0,u.cn)(`event-schedule-timeline-dot event-schedule-timeline-dot--${e}`,K({state:p}))})})]})},W=(e,t)=>{if(e)return t==="in-progress"?e.active:t==="completed"&&e.completed||e.inactive},X=({timeStatus:e,item:t,theme:n="light",className:o,scheduleCount:i})=>{const p=l.useMemo(()=>W(t.icon,e),[t.icon,e]),a=`${e}-${n}`;return(0,s.jsxs)("div",{className:(0,u.cn)(`event-schedule-card event-schedule-card--${e}`,Q({state:a}),o),children:[p&&(0,s.jsx)("div",{className:`event-schedule-card__background-icon event-schedule-card__background-icon--${e} laptop:w-[128px] desktop:w-[160px] absolute bottom-0 right-0 z-10 w-[120px]`,children:(0,s.jsx)(m.Picture,{source:p.url,alt:p.alt,className:"aspect-square"})}),(0,s.jsxs)("div",{className:`event-schedule-card__content event-schedule-card__content--${e} tablet:px-4 tablet:py-3 desktop:pl-6 desktop:pr-16 relative z-20 flex h-full flex-col justify-between p-4 pr-8`,children:[(0,s.jsx)(m.Heading,{html:t.title,className:(0,u.cn)(`event-schedule-card__title event-schedule-card__title--${e}`,i>=4?"desktop:text-[24px]":"desktop:text-[32px]","laptop:text-[24px] line-clamp-1 text-[20px]",T({state:a}))}),(0,s.jsx)("div",{className:`event-schedule-card__details event-schedule-card__details--${e} flex flex-col gap-0.5`,children:t.items.map((d,c)=>(0,s.jsxs)("div",{className:`event-schedule-card__detail-item event-schedule-card__detail-item--${e} flex items-center gap-2`,children:[d.icon&&(0,s.jsx)(m.Text,{className:(0,u.cn)(`event-schedule-card__detail-icon event-schedule-card__detail-icon--${e} desktop:size-6 size-5 shrink-0`,T({state:a})),html:d.icon}),(0,s.jsx)(m.Text,{html:d.label,className:(0,u.cn)(`event-schedule-card__detail-text event-schedule-card__detail-text--${e} lg-desktop:text-[18px] desktop:text-[16px] line-clamp-1 flex-1 text-[14px] leading-[1.4]`,T({state:a}))})]},c))})]})]})},V=l.forwardRef(({classNames:e={},data:t,className:n,...o},i)=>{const p=t.theme||"light",a=l.useRef(null),d=l.useRef(null),c=l.useRef(!1),b=l.useMemo(()=>t?.scheduleList?.length||2,[t?.scheduleList]),x=l.useMemo(()=>t.scheduleList.findIndex(r=>E(r.startDate,r.endDate)==="in-progress"),[t.scheduleList]),w=l.useCallback((r,g=!1)=>{const h=P=>{switch(P){case"mobile":return{slidesPerView:1.17};case"tablet":return r===2?{slidesPerView:2}:{slidesPerView:2.4};case"laptop":return r===2?{}:r===4?{slidesPerView:3.2}:{slidesPerView:r};case"desktop":return r===2?{slidesPerView:2}:{slidesPerView:r}}},N=h("mobile"),_=h("tablet"),y=h("laptop"),D=h("desktop");return g?{0:{...N,spaceBetween:12},768:{..._,spaceBetween:12},1024:{...y,spaceBetween:16},1440:{...D,spaceBetween:16}}:{0:N,768:_,1024:y,1440:D}},[]),A=l.useMemo(()=>w(b,!0),[b,w]),I=l.useMemo(()=>w(b,!1),[b,w]),C=t.showTimeline!==!1,M=l.useCallback(r=>{c.current||!d.current||(c.current=!0,d.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]),B=l.useCallback(r=>{c.current||!a.current||(c.current=!0,a.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]);return l.useEffect(()=>{a.current&&d.current&&x>=0&&setTimeout(()=>{c.current=!0,a.current?.slideTo(x,500),d.current?.slideTo(x,500),setTimeout(()=>{c.current=!1},600)},100)},[x]),(0,s.jsxs)(m.Container,{...o,ref:i,className:(0,u.cn)("event-schedule-root overflow-hidden",e?.root,n),children:[C&&(0,s.jsx)(f.Swiper,{breakpoints:I,className:"event-schedule-timeline h-4 w-full !overflow-visible",onSwiper:r=>{d.current=r},onSlideChange:B,children:t.scheduleList.map((r,g)=>{const h=E(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{className:"",children:(0,s.jsx)(U,{className:e?.timeline,timeStatus:h,theme:p,index:g,nodeLength:t.scheduleList.length})},"timelineNode"+g)})}),(0,s.jsx)(f.Swiper,{breakpoints:A,className:"event-schedule-cards w-full !overflow-visible",onSwiper:r=>{a.current=r},onSlideChange:M,children:t.scheduleList.map((r,g)=>{const h=E(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{children:(0,s.jsx)(X,{timeStatus:h,className:(0,u.cn)(C?"laptop:mt-4 mt-2":"",e?.eventScheduleCard),item:r,theme:p,scheduleCount:t.scheduleList.length})},"SwiperSlideItem"+g)})})]})});V.displayName="EventSchedule";var Y=(0,$.withLayout)(V);
1
+ "use strict";"use client";var B=Object.create;var S=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,H=Object.prototype.hasOwnProperty;var j=(e,t)=>{for(var n in t)S(e,n,{get:t[n],enumerable:!0})},y=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of R(t))!H.call(e,i)&&i!==n&&S(e,i,{get:()=>t[i],enumerable:!(o=P(t,i))||o.enumerable});return e};var q=(e,t,n)=>(n=e!=null?B(z(e)):{},y(t||!e||!e.__esModule?S(n,"default",{value:e,enumerable:!0}):n,e)),G=e=>y(S({},"__esModule",{value:!0}),e);var Y={};j(Y,{default:()=>X});module.exports=G(Y);var s=require("react/jsx-runtime"),l=q(require("react")),u=require("../../helpers/index.js"),F=require("../../shared/Styles.js"),m=require("../../components/index.js"),f=require("swiper/react"),v=require("class-variance-authority");const k=(e,t)=>{const n=Date.now(),o=new Date(e).getTime(),i=new Date(t).getTime();return n>i?"completed":n<o?"not-started":"in-progress"},J=(0,v.cva)("h-1 w-full overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),K=(0,v.cva)("size-4 rounded-full transition-colors",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),T=(0,v.cva)("font-bold leading-[1.2]",{variants:{state:{"in-progress-light":"text-[#080A0F]","in-progress-dark":"text-white","not-started-light":"text-[#080A0F]","not-started-dark":"text-[#F5F6F7]","completed-light":"text-[#4A4C56]/60","completed-dark":"text-[#F5F6F7]/60"}},defaultVariants:{state:"not-started-light"}}),O=(0,v.cva)("laptop:h-[160px] rounded-box relative flex h-[120px] min-w-0 flex-col justify-between gap-2 overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F4E8BC]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F4E8BC]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),Q=({timeStatus:e,theme:t="light",className:n,index:o,nodeLength:i})=>{const p=`${e}-${t}`,a=o===0,d=o===i-1;return(0,s.jsxs)("div",{className:(0,u.cn)(`event-schedule-timeline-node event-schedule-timeline-node--${e} relative my-2 flex h-1 w-full items-center justify-center`,n),children:[(0,s.jsx)("div",{className:(0,u.cn)(`event-schedule-timeline-progress event-schedule-timeline-progress--${e}`,J({state:p}),a&&"rounded-l-full",d&&"rounded-r-full")}),(0,s.jsx)("div",{className:"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2",children:(0,s.jsx)("div",{className:(0,u.cn)(`event-schedule-timeline-dot event-schedule-timeline-dot--${e}`,K({state:p}))})})]})},U=(e,t)=>{if(e)return t==="in-progress"?e.active:t==="completed"&&e.completed||e.inactive},W=({timeStatus:e,item:t,theme:n="light",className:o,scheduleCount:i})=>{const p=l.useMemo(()=>U(t.icon,e),[t.icon,e]),a=`${e}-${n}`;return(0,s.jsxs)("div",{className:(0,u.cn)(`event-schedule-card event-schedule-card--${e}`,O({state:a}),o),children:[p&&(0,s.jsx)("div",{className:`event-schedule-card__background-icon event-schedule-card__background-icon--${e} laptop:w-[128px] desktop:w-[160px] absolute bottom-0 right-0 z-10 w-[120px]`,children:(0,s.jsx)(m.Picture,{source:p.url,alt:p.alt,className:"aspect-square"})}),(0,s.jsxs)("div",{className:`event-schedule-card__content event-schedule-card__content--${e} tablet:px-4 tablet:py-3 desktop:pl-6 desktop:pr-16 relative z-20 flex h-full flex-col justify-between p-4 pr-8`,children:[(0,s.jsx)(m.Heading,{html:t.title,className:(0,u.cn)(`event-schedule-card__title event-schedule-card__title--${e}`,i>=4?"desktop:text-[24px]":"desktop:text-[32px]","laptop:text-[24px] line-clamp-1 text-[20px]",T({state:a}))}),(0,s.jsx)("div",{className:`event-schedule-card__details event-schedule-card__details--${e} flex flex-col gap-0.5`,children:t.items.map((d,c)=>(0,s.jsxs)("div",{className:`event-schedule-card__detail-item event-schedule-card__detail-item--${e} flex items-center gap-2`,children:[d.icon&&(0,s.jsx)(m.Text,{className:(0,u.cn)(`event-schedule-card__detail-icon event-schedule-card__detail-icon--${e} desktop:size-6 size-5 shrink-0`,T({state:a})),html:d.icon}),(0,s.jsx)(m.Text,{html:d.label,className:(0,u.cn)(`event-schedule-card__detail-text event-schedule-card__detail-text--${e} lg-desktop:text-[18px] desktop:text-[16px] line-clamp-1 flex-1 text-[14px] leading-[1.4]`,T({state:a}))})]},c))})]})]})},L=l.forwardRef(({classNames:e={},data:t,className:n,...o},i)=>{const p=t.theme||"light",a=l.useRef(null),d=l.useRef(null),c=l.useRef(!1),w=l.useMemo(()=>t?.scheduleList?.length||2,[t?.scheduleList]),b=l.useMemo(()=>t.scheduleList.findIndex(r=>k(r.startDate,r.endDate)==="in-progress"),[t.scheduleList]),x=l.useCallback((r,g=!1)=>{const h=A=>{switch(A){case"mobile":return{slidesPerView:1.17};case"tablet":return r===2?{slidesPerView:2}:{slidesPerView:2.4};case"laptop":return r===2?{}:r===4?{slidesPerView:3.2}:{slidesPerView:r};case"desktop":return r===2?{slidesPerView:2}:{slidesPerView:r}}},C=h("mobile"),N=h("tablet"),_=h("laptop"),D=h("desktop");return g?{0:{...C,spaceBetween:12},768:{...N,spaceBetween:12},1024:{..._,spaceBetween:16},1440:{...D,spaceBetween:16}}:{0:C,768:N,1024:_,1440:D}},[]),V=l.useMemo(()=>x(w,!0),[w,x]),$=l.useMemo(()=>x(w,!1),[w,x]),E=t.showTimeline!==!1,I=l.useCallback(r=>{c.current||!d.current||(c.current=!0,d.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]),M=l.useCallback(r=>{c.current||!a.current||(c.current=!0,a.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]);return l.useEffect(()=>{a.current&&d.current&&b>=0&&setTimeout(()=>{c.current=!0,a.current?.slideTo(b,500),d.current?.slideTo(b,500),setTimeout(()=>{c.current=!1},600)},100)},[b]),(0,s.jsxs)(m.Container,{...o,ref:i,className:(0,u.cn)("event-schedule-root overflow-hidden",e?.root,n),children:[E&&(0,s.jsx)(f.Swiper,{breakpoints:$,className:"event-schedule-timeline h-4 w-full !overflow-visible",onSwiper:r=>{d.current=r},onSlideChange:M,children:t.scheduleList.map((r,g)=>{const h=k(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{className:"",children:(0,s.jsx)(Q,{className:e?.timeline,timeStatus:h,theme:p,index:g,nodeLength:t.scheduleList.length})},"timelineNode"+g)})}),(0,s.jsx)(f.Swiper,{breakpoints:V,className:"event-schedule-cards w-full !overflow-visible",onSwiper:r=>{a.current=r},onSlideChange:I,children:t.scheduleList.map((r,g)=>{const h=k(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{children:(0,s.jsx)(W,{timeStatus:h,className:(0,u.cn)(E?"laptop:mt-4 mt-2":"",e?.eventScheduleCard),item:r,theme:p,scheduleCount:t.scheduleList.length})},"SwiperSlideItem"+g)})})]})});L.displayName="EventSchedule";var X=(0,F.withLayout)(L);
2
2
  //# sourceMappingURL=index.js.map