@anker-in/headless-ui 1.1.16-beta.3 → 1.1.17-alpha-1765978730

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 (129) hide show
  1. package/dist/cjs/biz-components/AccordionCards/index.d.ts +17 -0
  2. package/dist/cjs/biz-components/AccordionCards/index.js +1 -1
  3. package/dist/cjs/biz-components/AccordionCards/index.js.map +3 -3
  4. package/dist/cjs/biz-components/AnchorNavigation/index.d.ts +22 -0
  5. package/dist/cjs/biz-components/AnchorNavigation/index.js +2 -0
  6. package/dist/cjs/biz-components/AnchorNavigation/index.js.map +7 -0
  7. package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.d.ts +2 -0
  8. package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.js +2 -0
  9. package/dist/cjs/biz-components/AnchorNavigation/useAnchorPosition.js.map +7 -0
  10. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +83 -0
  11. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js +2 -0
  12. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js.map +7 -0
  13. package/dist/cjs/biz-components/BuyOneGetOneShelf/index.d.ts +40 -0
  14. package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js +2 -0
  15. package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js.map +7 -0
  16. package/dist/cjs/biz-components/EventSchedule/index.d.ts +39 -0
  17. package/dist/cjs/biz-components/EventSchedule/index.js +2 -0
  18. package/dist/cjs/biz-components/EventSchedule/index.js.map +7 -0
  19. package/dist/cjs/biz-components/HeroBanner/Countdown.js +1 -1
  20. package/dist/cjs/biz-components/HeroBanner/Countdown.js.map +2 -2
  21. package/dist/cjs/biz-components/HeroBanner/HeroBanner.d.ts +4 -1
  22. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  23. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  24. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js +3 -3
  25. package/dist/cjs/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js.map +2 -2
  26. package/dist/cjs/biz-components/Media/index.d.ts +32 -0
  27. package/dist/cjs/biz-components/Media/index.js +2 -0
  28. package/dist/cjs/biz-components/Media/index.js.map +7 -0
  29. package/dist/cjs/biz-components/PromotionalBar/index.d.ts +35 -0
  30. package/dist/cjs/biz-components/PromotionalBar/index.js +2 -0
  31. package/dist/cjs/biz-components/PromotionalBar/index.js.map +7 -0
  32. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +61 -0
  33. package/dist/cjs/biz-components/SecondaryBanner/index.js +2 -0
  34. package/dist/cjs/biz-components/SecondaryBanner/index.js.map +7 -0
  35. package/dist/cjs/biz-components/StockShelf/index.d.ts +21 -0
  36. package/dist/cjs/biz-components/StockShelf/index.js +2 -0
  37. package/dist/cjs/biz-components/StockShelf/index.js.map +7 -0
  38. package/dist/cjs/biz-components/index.d.ts +5 -0
  39. package/dist/cjs/biz-components/index.js +1 -1
  40. package/dist/cjs/biz-components/index.js.map +3 -3
  41. package/dist/cjs/stories/HeroBanner.stories.d.ts +4 -1
  42. package/dist/cjs/stories/HeroBanner.stories.js +2 -2
  43. package/dist/cjs/stories/HeroBanner.stories.js.map +3 -3
  44. package/dist/cjs/stories/accordionCards.stories.d.ts +21 -0
  45. package/dist/cjs/stories/accordionCards.stories.js +1 -1
  46. package/dist/cjs/stories/accordionCards.stories.js.map +3 -3
  47. package/dist/cjs/stories/anchorNavigation.stories.d.ts +27 -0
  48. package/dist/cjs/stories/anchorNavigation.stories.js +2 -0
  49. package/dist/cjs/stories/anchorNavigation.stories.js.map +7 -0
  50. package/dist/cjs/stories/buyOneGetOneShelf.stories.d.ts +56 -0
  51. package/dist/cjs/stories/buyOneGetOneShelf.stories.js +2 -0
  52. package/dist/cjs/stories/buyOneGetOneShelf.stories.js.map +7 -0
  53. package/dist/cjs/stories/eventSchedule.stories.d.ts +47 -0
  54. package/dist/cjs/stories/eventSchedule.stories.js +2 -0
  55. package/dist/cjs/stories/eventSchedule.stories.js.map +7 -0
  56. package/dist/cjs/stories/promotionalBar.stories.d.ts +26 -0
  57. package/dist/cjs/stories/promotionalBar.stories.js +2 -0
  58. package/dist/cjs/stories/promotionalBar.stories.js.map +7 -0
  59. package/dist/cjs/stories/secondaryBanner.stories.d.ts +47 -0
  60. package/dist/cjs/stories/secondaryBanner.stories.js +2 -0
  61. package/dist/cjs/stories/secondaryBanner.stories.js.map +7 -0
  62. package/dist/cjs/stories/stockShelf.stories.d.ts +27 -0
  63. package/dist/cjs/stories/stockShelf.stories.js +2 -0
  64. package/dist/cjs/stories/stockShelf.stories.js.map +7 -0
  65. package/dist/esm/biz-components/AccordionCards/index.d.ts +17 -0
  66. package/dist/esm/biz-components/AccordionCards/index.js +1 -1
  67. package/dist/esm/biz-components/AccordionCards/index.js.map +3 -3
  68. package/dist/esm/biz-components/AnchorNavigation/index.d.ts +22 -0
  69. package/dist/esm/biz-components/AnchorNavigation/index.js +2 -0
  70. package/dist/esm/biz-components/AnchorNavigation/index.js.map +7 -0
  71. package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.d.ts +2 -0
  72. package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.js +2 -0
  73. package/dist/esm/biz-components/AnchorNavigation/useAnchorPosition.js.map +7 -0
  74. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.d.ts +83 -0
  75. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +2 -0
  76. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +7 -0
  77. package/dist/esm/biz-components/BuyOneGetOneShelf/index.d.ts +40 -0
  78. package/dist/esm/biz-components/BuyOneGetOneShelf/index.js +2 -0
  79. package/dist/esm/biz-components/BuyOneGetOneShelf/index.js.map +7 -0
  80. package/dist/esm/biz-components/EventSchedule/index.d.ts +39 -0
  81. package/dist/esm/biz-components/EventSchedule/index.js +2 -0
  82. package/dist/esm/biz-components/EventSchedule/index.js.map +7 -0
  83. package/dist/esm/biz-components/HeroBanner/Countdown.js +1 -1
  84. package/dist/esm/biz-components/HeroBanner/Countdown.js.map +2 -2
  85. package/dist/esm/biz-components/HeroBanner/HeroBanner.d.ts +4 -1
  86. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  87. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  88. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js +2 -2
  89. package/dist/esm/biz-components/Listing/components/ProductCard/ProductDetail/ProductHighlight/index.js.map +2 -2
  90. package/dist/esm/biz-components/Media/index.d.ts +32 -0
  91. package/dist/esm/biz-components/Media/index.js +2 -0
  92. package/dist/esm/biz-components/Media/index.js.map +7 -0
  93. package/dist/esm/biz-components/PromotionalBar/index.d.ts +35 -0
  94. package/dist/esm/biz-components/PromotionalBar/index.js +2 -0
  95. package/dist/esm/biz-components/PromotionalBar/index.js.map +7 -0
  96. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +61 -0
  97. package/dist/esm/biz-components/SecondaryBanner/index.js +2 -0
  98. package/dist/esm/biz-components/SecondaryBanner/index.js.map +7 -0
  99. package/dist/esm/biz-components/StockShelf/index.d.ts +21 -0
  100. package/dist/esm/biz-components/StockShelf/index.js +2 -0
  101. package/dist/esm/biz-components/StockShelf/index.js.map +7 -0
  102. package/dist/esm/biz-components/index.d.ts +5 -0
  103. package/dist/esm/biz-components/index.js +1 -1
  104. package/dist/esm/biz-components/index.js.map +2 -2
  105. package/dist/esm/stories/HeroBanner.stories.d.ts +4 -1
  106. package/dist/esm/stories/HeroBanner.stories.js +2 -2
  107. package/dist/esm/stories/HeroBanner.stories.js.map +3 -3
  108. package/dist/esm/stories/accordionCards.stories.d.ts +21 -0
  109. package/dist/esm/stories/accordionCards.stories.js +1 -1
  110. package/dist/esm/stories/accordionCards.stories.js.map +3 -3
  111. package/dist/esm/stories/anchorNavigation.stories.d.ts +27 -0
  112. package/dist/esm/stories/anchorNavigation.stories.js +2 -0
  113. package/dist/esm/stories/anchorNavigation.stories.js.map +7 -0
  114. package/dist/esm/stories/buyOneGetOneShelf.stories.d.ts +56 -0
  115. package/dist/esm/stories/buyOneGetOneShelf.stories.js +2 -0
  116. package/dist/esm/stories/buyOneGetOneShelf.stories.js.map +7 -0
  117. package/dist/esm/stories/eventSchedule.stories.d.ts +47 -0
  118. package/dist/esm/stories/eventSchedule.stories.js +2 -0
  119. package/dist/esm/stories/eventSchedule.stories.js.map +7 -0
  120. package/dist/esm/stories/promotionalBar.stories.d.ts +26 -0
  121. package/dist/esm/stories/promotionalBar.stories.js +2 -0
  122. package/dist/esm/stories/promotionalBar.stories.js.map +7 -0
  123. package/dist/esm/stories/secondaryBanner.stories.d.ts +47 -0
  124. package/dist/esm/stories/secondaryBanner.stories.js +2 -0
  125. package/dist/esm/stories/secondaryBanner.stories.js.map +7 -0
  126. package/dist/esm/stories/stockShelf.stories.d.ts +27 -0
  127. package/dist/esm/stories/stockShelf.stories.js +2 -0
  128. package/dist/esm/stories/stockShelf.stories.js.map +7 -0
  129. package/package.json +2 -1
@@ -26,6 +26,23 @@ export type AccordionCardsType = {
26
26
  primaryButton?: string;
27
27
  theme?: 'light' | 'dark';
28
28
  };
29
+ /**
30
+ * 自动播放配置
31
+ */
32
+ autoplay?: {
33
+ /**
34
+ * 是否开启自动播放
35
+ */
36
+ enabled: boolean;
37
+ /**
38
+ * 是否循环播放
39
+ */
40
+ loop?: boolean;
41
+ /**
42
+ * 自动播放间隔时间,单位毫秒
43
+ */
44
+ interval?: number;
45
+ };
29
46
  /** 按钮事件*/
30
47
  event?: {
31
48
  primaryButton?: (_v: any, _index: number) => void;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var C=Object.create;var g=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var o in t)g(e,o,{get:t[o],enumerable:!0})},R=(e,t,o,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of S(t))!j.call(e,s)&&s!==o&&g(e,s,{get:()=>t[s],enumerable:!(p=D(t,s))||p.enumerable});return e};var f=(e,t,o)=>(o=e!=null?C(A(e)):{},R(t||!e||!e.__esModule?g(o,"default",{value:e,enumerable:!0}):o,e)),P=e=>R(g({},"__esModule",{value:!0}),e);var O={};z(O,{default:()=>q});module.exports=P(O);var i=require("react/jsx-runtime"),M=f(require("../Title/index.js")),l=require("../../helpers/utils.js"),$=f(require("../../components/picture.js")),N=f(require("../../components/button.js")),B=f(require("../SwiperBox/index.js")),E=require("../../shared/Styles.js"),n=f(require("react")),I=require("../../hooks/useExposure.js"),v=require("../../shared/trackUrlRef.js"),H=f(require("../../shared/throttle.js")),_=require("../../components/heading.js");const a="image",m="scene_banner",V=({item:e,idx:t,itemShape:o,hoverIndex:p,getRef:s,handleSwiperItemClick:h,isAnimation:b,contentWidth:c,primaryButton:u,event:w,data:T,accordionRef:y})=>{const x=p===t,k=x?8:1;return(0,I.useExposure)({current:y.current[t]},{componentType:a,componentName:m,componentTitle:e?.title,position:t+1,componentDescription:e?.subTitle}),(0,i.jsxs)("div",{style:{flex:`${k} 1 0%`,transition:"all 0.6s"},ref:r=>{r&&s(t,r)},className:(0,l.cn)("relative cursor-pointer overflow-hidden",o==="round"?"rounded-2xl":""),onMouseEnter:()=>h(t),onMouseLeave:()=>{b.current=!1},onClick:()=>{h(t)},children:[(0,i.jsx)("a",{href:(0,v.trackUrlRef)(e?.imgLink,`${a}_${m}`),"data-headless-type-name":`${a}#${m}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}`,children:(0,i.jsx)($.default,{source:e?.img?.url,className:"size-full object-cover [&_img]:h-full [&_img]:object-cover",alt:e?.img?.alt||""})}),(0,i.jsxs)("div",{style:{width:c},className:(0,l.cn)("absolute inset-x-0 bottom-0 flex w-full items-end justify-between overflow-hidden px-8 pb-8 opacity-0 transition-opacity duration-[600ms] ease-in",x&&c?"opacity-100":"opacity-0"),children:[(0,i.jsxs)("div",{className:"mr-16 flex-1 overflow-hidden",children:[(0,i.jsx)(_.Heading,{as:"h3",className:"laptop:text-2xl desktop:text-[32px] text-info-primary mb-1 text-xl font-bold",children:e?.title}),(0,i.jsx)(_.Heading,{as:"h4",className:"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary line-clamp-2 text-[14px] font-[700]",children:e?.subTitle})]}),(0,i.jsxs)(N.default,{className:(0,l.cn)("mb-1.5 font-bold"),as:"a",href:(0,v.trackUrlRef)(e?.link,`${a}_${m}`),"data-headless-type-name":`${a}#${m}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}#${u}`,onClick:()=>w?.primaryButton?.(T,t),children:[u,(0,i.jsx)("span",{className:"sr-only",children:e?.title??e?.subTitle})]})]})]},t)},W=({data:e,configuration:t})=>{const o=(0,n.useRef)(null);return(0,I.useExposure)(o,{componentType:a,componentName:m,componentTitle:e?.title,position:t?.index+1,componentDescription:e?.subTitle}),(0,i.jsxs)("div",{ref:o,className:(0,l.cn)("bg-container-secondary-1 relative w-full shrink-0 grow-0 overflow-hidden border border-solid",t?.itemShape==="round"?"rounded-2xl":""),children:[(0,i.jsx)("a",{href:(0,v.trackUrlRef)(e?.imgLink,`${a}_${m}`),"data-headless-type-name":`${a}#${m}`,"data-headless-title-desc-button":`${e?.title}@${e?.subTitle}`,"data-headless-nav-postion":`''#${t?.index+1}`,children:(0,i.jsx)($.default,{className:"size-full object-cover [&_img]:h-full [&_img]:object-cover",source:e?.mobileImg?.url||"",alt:e?.mobileImg?.alt||""})}),(0,i.jsxs)("div",{className:(0,l.cn)("absolute inset-x-0 bottom-0 overflow-hidden px-4 pb-4"),children:[(0,i.jsxs)("div",{className:"tablet:mb-6 mb-4 flex-1 overflow-hidden",children:[(0,i.jsx)("p",{className:"text-info-primary text-2xl font-bold leading-[1.2]",children:e?.title}),(0,i.jsx)("h3",{className:"text-info-primary line-clamp-2 text-sm font-semibold",children:e?.subTitle})]}),(0,i.jsx)(N.default,{as:"a",variant:"secondary","aria-label":e?.title??e?.subTitle,className:(0,l.cn)("text-info-primary text-sm font-bold"),href:(0,v.trackUrlRef)(e.link,`${a}_${m}`),"data-headless-type-name":`${a}#${m}`,"data-headless-nav-postion":`''#${t?.index+1}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}#${t?.primaryButton}`,children:t?.primaryButton})]})]})},L=n.default.forwardRef(({data:e,className:t="",event:o},p)=>{const[s,h]=(0,n.useState)(0),b=(0,n.useRef)(0),c=(0,n.useRef)([]),u=(0,n.useRef)(!1),[w,T]=(0,n.useState)(0),y=(0,n.useRef)(null);(0,n.useImperativeHandle)(p,()=>y.current);const x=(r,d)=>{d&&(c.current[r]=d)};(0,n.useEffect)(()=>{const r=()=>{c.current[b.current]&&T(c.current[b.current].offsetWidth)};r();const d=(0,H.default)(r,300);return window.addEventListener("resize",d),()=>window.removeEventListener("resize",d)},[]);const k=(0,n.useCallback)(r=>{s===r||u.current||(u.current=!0,h(r),b.current=r)},[e?.products,s]);return(0,i.jsxs)(i.Fragment,{children:[e?.title&&(0,i.jsx)(M.default,{data:{title:e?.title}}),(0,i.jsx)("div",{ref:y,className:(0,l.cn)("laptop:block hidden",{"aiui-dark":e?.theme==="dark"}),children:(0,i.jsx)("div",{className:(0,l.cn)("lg-desktop:h-[calc(560_/_1920*100vw)] desktop:h-[calc(448_/_1440*100vw)] laptop:h-[calc(336_/_1025*100vw)] flex max-h-[560px] min-h-[336px] w-full gap-4 overflow-hidden",t),children:e?.products?.map((r,d)=>(0,i.jsx)(V,{item:r,idx:d,itemShape:e?.itemShape,hoverIndex:s,getRef:x,handleSwiperItemClick:k,isAnimation:u,contentWidth:w,primaryButton:e?.primaryButton,event:o,data:e,accordionRef:c},d))})}),(0,i.jsx)("div",{className:(0,l.cn)("laptop:hidden block",{"aiui-dark":e?.theme==="dark"}),children:(0,i.jsx)(B.default,{className:(0,l.cn)("h-[400px] !overflow-visible",t),id:"AccordionCards"+e?.key,data:{list:e?.products,configuration:{shape:e?.shape,itemShape:e?.itemShape,primaryButton:e?.primaryButton,event:o,title:e?.title}},Slide:W,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3}}})})]})});L.displayName="AccordionCards";var q=(0,E.withLayout)(L);
1
+ "use strict";"use client";var D=Object.create;var T=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var V=(e,t)=>{for(var i in t)T(e,i,{get:t[i],enumerable:!0})},E=(e,t,i,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let m of A(t))!P.call(e,m)&&m!==i&&T(e,m,{get:()=>t[m],enumerable:!(p=j(t,m))||p.enumerable});return e};var v=(e,t,i)=>(i=e!=null?D(z(e)):{},E(t||!e||!e.__esModule?T(i,"default",{value:e,enumerable:!0}):i,e)),W=e=>E(T({},"__esModule",{value:!0}),e);var U={};V(U,{default:()=>J});module.exports=W(U);var n=require("react/jsx-runtime"),M=v(require("../Title/index.js")),l=require("../../helpers/utils.js"),N=v(require("../../components/picture.js")),_=v(require("../../components/button.js")),H=v(require("../SwiperBox/index.js")),C=require("../../shared/Styles.js"),r=v(require("react")),R=require("../../hooks/useExposure.js"),g=require("../../shared/trackUrlRef.js"),S=v(require("../../shared/throttle.js")),B=require("../../components/heading.js");const a="image",d="scene_banner",q=({item:e,idx:t,itemShape:i,hoverIndex:p,getRef:m,handleSwiperItemClick:u,contentWidth:h,primaryButton:c,event:f,data:w,accordionRef:k})=>{const y=p===t,$=y?8:1;return(0,R.useExposure)({current:k.current[t]},{componentType:a,componentName:d,componentTitle:e?.title,position:t+1,componentDescription:e?.subTitle}),(0,n.jsxs)("div",{style:{flex:`${$} 1 0%`,transition:"all 0.6s"},ref:x=>{x&&m(t,x)},className:(0,l.cn)("relative cursor-pointer overflow-hidden",i==="round"?"rounded-2xl":""),onMouseEnter:()=>u(t),onClick:()=>{u(t)},children:[(0,n.jsx)("a",{href:(0,g.trackUrlRef)(e?.imgLink,`${a}_${d}`),"data-headless-type-name":`${a}#${d}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}`,children:(0,n.jsx)(N.default,{source:e?.img?.url,className:"size-full object-cover [&_img]:h-full [&_img]:object-cover",alt:e?.img?.alt||""})}),(0,n.jsxs)("div",{style:{width:h},className:(0,l.cn)("absolute inset-x-0 bottom-0 flex w-full items-end justify-between overflow-hidden px-8 pb-8 opacity-0 transition-opacity duration-[600ms] ease-in",y&&h?"opacity-100":"opacity-0"),children:[(0,n.jsxs)("div",{className:"mr-16 flex-1 overflow-hidden",children:[(0,n.jsx)(B.Heading,{as:"h3",className:"laptop:text-2xl desktop:text-[32px] text-info-primary mb-1 text-xl font-bold",children:e?.title}),(0,n.jsx)(B.Heading,{as:"h4",className:"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary line-clamp-2 text-[14px] font-[700]",children:e?.subTitle})]}),c&&(0,n.jsxs)(_.default,{className:(0,l.cn)("mb-1.5 font-bold"),as:"a",href:(0,g.trackUrlRef)(e?.link,`${a}_${d}`),"data-headless-type-name":`${a}#${d}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}#${c}`,onClick:()=>f?.primaryButton?.(w,t),children:[c,(0,n.jsx)("span",{className:"sr-only",children:e?.title??e?.subTitle})]})]})]},t)},O=({data:e,configuration:t})=>{const i=(0,r.useRef)(null);return(0,R.useExposure)(i,{componentType:a,componentName:d,componentTitle:e?.title,position:t?.index+1,componentDescription:e?.subTitle}),(0,n.jsxs)("div",{ref:i,className:(0,l.cn)("bg-container-secondary-1 relative w-full shrink-0 grow-0 overflow-hidden border border-solid",t?.itemShape==="round"?"rounded-2xl":""),children:[(0,n.jsx)("a",{href:(0,g.trackUrlRef)(e?.imgLink,`${a}_${d}`),"data-headless-type-name":`${a}#${d}`,"data-headless-title-desc-button":`${e?.title}@${e?.subTitle}`,"data-headless-nav-postion":`''#${t?.index+1}`,children:(0,n.jsx)(N.default,{className:"size-full object-cover [&_img]:h-full [&_img]:object-cover",source:e?.mobileImg?.url||"",alt:e?.mobileImg?.alt||""})}),(0,n.jsxs)("div",{className:(0,l.cn)("absolute inset-x-0 bottom-0 overflow-hidden px-4 pb-4"),children:[(0,n.jsxs)("div",{className:"tablet:mb-6 mb-4 flex-1 overflow-hidden",children:[(0,n.jsx)("p",{className:"text-info-primary text-2xl font-bold leading-[1.2]",children:e?.title}),(0,n.jsx)("h3",{className:"text-info-primary line-clamp-2 text-sm font-semibold",children:e?.subTitle})]}),t?.primaryButton&&(0,n.jsx)(_.default,{as:"a",variant:"secondary","aria-label":e?.title??e?.subTitle,className:(0,l.cn)("text-info-primary text-sm font-bold"),href:(0,g.trackUrlRef)(e.link,`${a}_${d}`),"data-headless-type-name":`${a}#${d}`,"data-headless-nav-postion":`''#${t?.index+1}`,"data-headless-title-desc-button":`${e?.title}#${e?.subTitle}#${t?.primaryButton}`,children:t?.primaryButton})]})]})},L=r.default.forwardRef(({data:e,autoplay:t={enabled:!1,loop:!1,interval:1500},className:i="",event:p},m)=>{const[u,h]=(0,r.useState)(0),c=(0,r.useRef)(0),f=(0,r.useRef)([]),[w,k]=(0,r.useState)(0),y=(0,r.useRef)(null);(0,r.useImperativeHandle)(m,()=>y.current);const $=(o,s)=>{s&&(f.current[o]=s)};(0,r.useEffect)(()=>{const o=()=>{f.current[c.current]&&k(f.current[c.current].offsetWidth)};o();const s=(0,S.default)(o,300);return window.addEventListener("resize",s),()=>window.removeEventListener("resize",s)},[]);const x=(0,r.useCallback)(o=>{u!==o&&(h(o),c.current=o)},[e?.products,u]);return(0,r.useEffect)(()=>{let o;return t?.enabled&&(o=setInterval(()=>{h(s=>{const I=s??0;let b;if(t.loop!==!1)b=(I+1)%e?.products?.length;else if(b=I+1,b>=e?.products?.length)return b=e?.products?.length-1,o&&clearInterval(o),I;return c.current=b,b})},t?.interval)),()=>{o&&clearInterval(o)}},[t?.enabled,t?.interval,t?.loop,e?.products?.length,x]),(0,n.jsxs)(n.Fragment,{children:[e?.title&&(0,n.jsx)(M.default,{data:{title:e?.title}}),(0,n.jsx)("div",{ref:y,className:(0,l.cn)("laptop:block hidden",{"aiui-dark":e?.theme==="dark"}),children:(0,n.jsx)("div",{className:(0,l.cn)("lg-desktop:h-[calc(560_/_1920*100vw)] desktop:h-[calc(448_/_1440*100vw)] laptop:h-[calc(336_/_1025*100vw)] flex max-h-[560px] min-h-[336px] w-full gap-4 overflow-hidden",i),children:e?.products?.map((o,s)=>(0,n.jsx)(q,{item:o,idx:s,itemShape:e?.itemShape,hoverIndex:u,getRef:$,handleSwiperItemClick:x,contentWidth:w,primaryButton:e?.primaryButton,event:p,data:e,accordionRef:f},s))})}),(0,n.jsx)("div",{className:(0,l.cn)("laptop:hidden block",{"aiui-dark":e?.theme==="dark"}),children:(0,n.jsx)(H.default,{className:(0,l.cn)("h-[400px] !overflow-visible",i),id:"AccordionCards"+e?.key,data:{list:e?.products,configuration:{shape:e?.shape,itemShape:e?.itemShape,primaryButton:e?.primaryButton,event:p,title:e?.title}},Slide:O,breakpoints:{0:{spaceBetween:12,freeMode:!1,slidesPerView:1},374:{spaceBetween:12,freeMode:!1,slidesPerView:1.2},768:{spaceBetween:16,freeMode:!1,slidesPerView:2.3}}})})]})});L.displayName="AccordionCards";var J=(0,C.withLayout)(L);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/AccordionCards/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport Title from '../Title/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport Button from '../../components/button.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport React, { useState, useRef, useCallback, useImperativeHandle, useEffect, type RefObject } from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport type { Img } from '../../types/props.js'\nimport throttle from '../../shared/throttle.js'\nimport { Heading } from '../../components/heading.js'\n\nconst componentType = 'image'\nconst componentName = 'scene_banner'\n\n/** Hook\uFF1A\u76D1\u542C\u7A97\u53E3\u5BBD\u5EA6 */\ntype ItemType = {\n /** \u6807\u9898\u6587\u672C */\n title: string\n /** \u56FE\u7247*/\n img: Img\n mobileImg?: Img\n /** \u5185\u5BB9\u8282\u70B9 */\n subTitle: string\n link?: string\n imgLink?: string\n}\n\nexport type AccordionCardsType = {\n className?: string\n data: {\n key?: string\n title?: string\n products: Array<ItemType>\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n theme?: 'light' | 'dark'\n }\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: {\n primaryButton?: (_v: any, _index: number) => void\n }\n}\n\nconst AccordionCardsPcItem = ({\n item,\n idx,\n itemShape,\n hoverIndex,\n getRef,\n handleSwiperItemClick,\n isAnimation,\n contentWidth,\n primaryButton,\n event,\n data,\n accordionRef,\n}: {\n item: ItemType\n idx: number\n itemShape: 'round' | 'square' | undefined\n hoverIndex: number | null\n getRef: (_idx: number, _el: HTMLDivElement) => void\n handleSwiperItemClick: (_idx: number) => void\n isAnimation: any\n contentWidth: number\n primaryButton: string | undefined\n event: any\n data: AccordionCardsType['data']\n accordionRef: React.MutableRefObject<HTMLDivElement[]>\n}) => {\n const isExpanded = hoverIndex === idx\n const flexValue = isExpanded ? 8 : 1\n\n useExposure({ current: accordionRef.current[idx] } as RefObject<HTMLDivElement>, {\n componentType,\n componentName,\n componentTitle: item?.title,\n position: idx + 1,\n componentDescription: item?.subTitle,\n })\n\n return (\n <div\n key={idx}\n style={{\n flex: `${flexValue} 1 0%`,\n transition: 'all 0.6s',\n }}\n ref={(el: HTMLDivElement | null) => {\n if (el) getRef(idx, el)\n }}\n className={cn('relative cursor-pointer overflow-hidden', itemShape === 'round' ? 'rounded-2xl' : '')}\n onMouseEnter={() => handleSwiperItemClick(idx)}\n onMouseLeave={() => {\n isAnimation.current = false\n }}\n onClick={() => {\n handleSwiperItemClick(idx)\n }}\n >\n <a\n href={trackUrlRef(item?.imgLink, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${item?.title}#${item?.subTitle}`}\n >\n <Picture\n source={item?.img?.url}\n className=\"size-full object-cover [&_img]:h-full [&_img]:object-cover\"\n alt={item?.img?.alt || ''}\n />\n </a>\n <div\n style={{\n width: contentWidth,\n }}\n className={cn(\n 'absolute inset-x-0 bottom-0 flex w-full items-end justify-between overflow-hidden px-8 pb-8 opacity-0 transition-opacity duration-[600ms] ease-in',\n isExpanded && contentWidth ? 'opacity-100' : 'opacity-0'\n )}\n >\n <div className=\"mr-16 flex-1 overflow-hidden\">\n <Heading as=\"h3\" className=\"laptop:text-2xl desktop:text-[32px] text-info-primary mb-1 text-xl font-bold\">\n {item?.title}\n </Heading>\n <Heading\n as=\"h4\"\n className=\"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary line-clamp-2 text-[14px] font-[700]\"\n >\n {item?.subTitle}\n </Heading>\n </div>\n <Button\n className={cn('mb-1.5 font-bold')}\n as=\"a\"\n href={trackUrlRef(item?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${item?.title}#${item?.subTitle}#${primaryButton}`}\n onClick={() => event?.primaryButton?.(data, idx)}\n >\n {primaryButton}\n <span className=\"sr-only\">{item?.title ?? item?.subTitle}</span>\n </Button>\n </div>\n </div>\n )\n}\n\nconst MobileItem = ({ data, configuration }: { data: ItemType; configuration?: any }) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.title,\n position: configuration?.index + 1,\n componentDescription: data?.subTitle,\n })\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-secondary-1 relative w-full shrink-0 grow-0 overflow-hidden border border-solid',\n configuration?.itemShape === 'round' ? 'rounded-2xl' : ''\n )}\n >\n <a\n href={trackUrlRef(data?.imgLink, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.title}@${data?.subTitle}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n >\n <Picture\n className=\"size-full object-cover [&_img]:h-full [&_img]:object-cover\"\n source={data?.mobileImg?.url || ''}\n alt={data?.mobileImg?.alt || ''}\n />\n </a>\n <div className={cn('absolute inset-x-0 bottom-0 overflow-hidden px-4 pb-4')}>\n <div className=\"tablet:mb-6 mb-4 flex-1 overflow-hidden\">\n <p className=\"text-info-primary text-2xl font-bold leading-[1.2]\">{data?.title}</p>\n <h3 className=\"text-info-primary line-clamp-2 text-sm font-semibold\">{data?.subTitle}</h3>\n </div>\n\n <Button\n as=\"a\"\n variant=\"secondary\"\n aria-label={data?.title ?? data?.subTitle}\n className={cn('text-info-primary text-sm font-bold')}\n href={trackUrlRef(data.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n data-headless-title-desc-button={`${data?.title}#${data?.subTitle}#${configuration?.primaryButton}`}\n >\n {configuration?.primaryButton}\n </Button>\n </div>\n </div>\n )\n}\n\nconst AccordionCards = React.forwardRef<HTMLDivElement, AccordionCardsType>(({ data, className = '', event }, ref) => {\n const [hoverIndex, setHoverIndex] = useState<number | null>(0)\n\n const hoverIndexRef = useRef<number>(0)\n const accordionRef = useRef<HTMLDivElement[]>([])\n const isAnimation = useRef<boolean>(false)\n const [contentWidth, setContentWidth] = useState<number>(0)\n\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n const getRef = (index: number, el: HTMLDivElement) => {\n if (el) {\n accordionRef.current[index] = el\n }\n }\n\n useEffect(() => {\n const handleResize = () => {\n if (accordionRef.current[hoverIndexRef.current]) {\n setContentWidth(accordionRef.current[hoverIndexRef.current].offsetWidth)\n }\n }\n handleResize()\n const throttleResize = throttle(handleResize, 300)\n window.addEventListener('resize', throttleResize)\n return () => window.removeEventListener('resize', throttleResize)\n }, [])\n\n const handleSwiperItemClick = useCallback(\n (idx: number) => {\n if (hoverIndex === idx || isAnimation.current) return\n isAnimation.current = true\n // \u66F4\u65B0\u5BBD\u5EA6\u76F8\u5173\u72B6\u6001\n setHoverIndex(idx)\n hoverIndexRef.current = idx\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [data?.products, hoverIndex]\n )\n\n return (\n <>\n {data?.title && <Title data={{ title: data?.title }} />}\n <div ref={innerRef} className={cn('laptop:block hidden', { 'aiui-dark': data?.theme === 'dark' })}>\n <div\n className={cn(\n 'lg-desktop:h-[calc(560_/_1920*100vw)] desktop:h-[calc(448_/_1440*100vw)] laptop:h-[calc(336_/_1025*100vw)] flex max-h-[560px] min-h-[336px] w-full gap-4 overflow-hidden',\n className\n )}\n >\n {data?.products?.map((item, idx) => (\n <AccordionCardsPcItem\n key={idx}\n item={item}\n idx={idx}\n itemShape={data?.itemShape}\n hoverIndex={hoverIndex}\n getRef={getRef}\n handleSwiperItemClick={handleSwiperItemClick}\n isAnimation={isAnimation}\n contentWidth={contentWidth}\n primaryButton={data?.primaryButton}\n event={event}\n data={data}\n accordionRef={accordionRef}\n />\n ))}\n </div>\n </div>\n <div className={cn('laptop:hidden block', { 'aiui-dark': data?.theme === 'dark' })}>\n <SwiperBox\n className={cn('h-[400px] !overflow-visible', className)}\n id={'AccordionCards' + data?.key}\n data={{\n list: data?.products,\n configuration: {\n shape: data?.shape,\n itemShape: data?.itemShape,\n primaryButton: data?.primaryButton,\n event: event,\n title: data?.title,\n },\n }}\n Slide={MobileItem}\n breakpoints={{\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 2.3,\n },\n }}\n />\n </div>\n </>\n )\n})\n\nAccordionCards.displayName = 'AccordionCards'\nexport default withLayout(AccordionCards)\n"],
5
- "mappings": "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",
6
- "names": ["AccordionCards_exports", "__export", "AccordionCards_default", "__toCommonJS", "import_jsx_runtime", "import_Title", "import_utils", "import_picture", "import_button", "import_SwiperBox", "import_Styles", "import_react", "import_useExposure", "import_trackUrlRef", "import_throttle", "import_heading", "componentType", "componentName", "AccordionCardsPcItem", "item", "idx", "itemShape", "hoverIndex", "getRef", "handleSwiperItemClick", "isAnimation", "contentWidth", "primaryButton", "event", "data", "accordionRef", "isExpanded", "flexValue", "el", "Picture", "Button", "MobileItem", "configuration", "ref", "AccordionCards", "React", "className", "setHoverIndex", "hoverIndexRef", "setContentWidth", "innerRef", "index", "handleResize", "throttleResize", "throttle", "Title", "SwiperBox"]
4
+ "sourcesContent": ["'use client'\nimport Title from '../Title/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport Button from '../../components/button.js'\nimport SwiperBox from '../SwiperBox/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport React, { useState, useRef, useCallback, useImperativeHandle, useEffect, type RefObject } from 'react'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport type { Img } from '../../types/props.js'\nimport throttle from '../../shared/throttle.js'\nimport { Heading } from '../../components/heading.js'\n\nconst componentType = 'image'\nconst componentName = 'scene_banner'\n\n/** Hook\uFF1A\u76D1\u542C\u7A97\u53E3\u5BBD\u5EA6 */\ntype ItemType = {\n /** \u6807\u9898\u6587\u672C */\n title: string\n /** \u56FE\u7247*/\n img: Img\n mobileImg?: Img\n /** \u5185\u5BB9\u8282\u70B9 */\n subTitle: string\n link?: string\n imgLink?: string\n}\n\nexport type AccordionCardsType = {\n className?: string\n data: {\n key?: string\n title?: string\n products: Array<ItemType>\n /** \u6309\u94AE\u5F62\u72B6 */\n shape?: 'round' | 'square'\n /** \u5361\u7247\u5F62\u72B6 */\n itemShape?: 'round' | 'square'\n /** \u4E3B\u6309\u94AE\u914D\u7F6E */\n primaryButton?: string\n theme?: 'light' | 'dark'\n }\n /**\n * \u81EA\u52A8\u64AD\u653E\u914D\u7F6E\n */\n autoplay?: {\n /**\n * \u662F\u5426\u5F00\u542F\u81EA\u52A8\u64AD\u653E\n */\n enabled: boolean\n /**\n * \u662F\u5426\u5FAA\u73AF\u64AD\u653E\n */\n loop?: boolean\n /**\n * \u81EA\u52A8\u64AD\u653E\u95F4\u9694\u65F6\u95F4\uFF0C\u5355\u4F4D\u6BEB\u79D2\n */\n interval?: number\n }\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: {\n primaryButton?: (_v: any, _index: number) => void\n }\n}\n\nconst AccordionCardsPcItem = ({\n item,\n idx,\n itemShape,\n hoverIndex,\n getRef,\n handleSwiperItemClick,\n contentWidth,\n primaryButton,\n event,\n data,\n accordionRef,\n}: {\n item: ItemType\n idx: number\n itemShape: 'round' | 'square' | undefined\n hoverIndex: number | null\n getRef: (_idx: number, _el: HTMLDivElement) => void\n handleSwiperItemClick: (_idx: number) => void\n contentWidth: number\n primaryButton: string | undefined\n event: any\n data: AccordionCardsType['data']\n accordionRef: React.MutableRefObject<HTMLDivElement[]>\n}) => {\n const isExpanded = hoverIndex === idx\n const flexValue = isExpanded ? 8 : 1\n\n useExposure({ current: accordionRef.current[idx] } as RefObject<HTMLDivElement>, {\n componentType,\n componentName,\n componentTitle: item?.title,\n position: idx + 1,\n componentDescription: item?.subTitle,\n })\n\n return (\n <div\n key={idx}\n style={{\n flex: `${flexValue} 1 0%`,\n transition: 'all 0.6s',\n }}\n ref={(el: HTMLDivElement | null) => {\n if (el) getRef(idx, el)\n }}\n className={cn('relative cursor-pointer overflow-hidden', itemShape === 'round' ? 'rounded-2xl' : '')}\n onMouseEnter={() => handleSwiperItemClick(idx)}\n onClick={() => {\n handleSwiperItemClick(idx)\n }}\n >\n <a\n href={trackUrlRef(item?.imgLink, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${item?.title}#${item?.subTitle}`}\n >\n <Picture\n source={item?.img?.url}\n className=\"size-full object-cover [&_img]:h-full [&_img]:object-cover\"\n alt={item?.img?.alt || ''}\n />\n </a>\n <div\n style={{\n width: contentWidth,\n }}\n className={cn(\n 'absolute inset-x-0 bottom-0 flex w-full items-end justify-between overflow-hidden px-8 pb-8 opacity-0 transition-opacity duration-[600ms] ease-in',\n isExpanded && contentWidth ? 'opacity-100' : 'opacity-0'\n )}\n >\n <div className=\"mr-16 flex-1 overflow-hidden\">\n <Heading as=\"h3\" className=\"laptop:text-2xl desktop:text-[32px] text-info-primary mb-1 text-xl font-bold\">\n {item?.title}\n </Heading>\n <Heading\n as=\"h4\"\n className=\"lg-desktop:text-[18px] desktop:text-[16px] text-info-primary line-clamp-2 text-[14px] font-[700]\"\n >\n {item?.subTitle}\n </Heading>\n </div>\n {primaryButton && (\n <Button\n className={cn('mb-1.5 font-bold')}\n as=\"a\"\n href={trackUrlRef(item?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${item?.title}#${item?.subTitle}#${primaryButton}`}\n onClick={() => event?.primaryButton?.(data, idx)}\n >\n {primaryButton}\n <span className=\"sr-only\">{item?.title ?? item?.subTitle}</span>\n </Button>\n )}\n </div>\n </div>\n )\n}\n\nconst MobileItem = ({ data, configuration }: { data: ItemType; configuration?: any }) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.title,\n position: configuration?.index + 1,\n componentDescription: data?.subTitle,\n })\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-secondary-1 relative w-full shrink-0 grow-0 overflow-hidden border border-solid',\n configuration?.itemShape === 'round' ? 'rounded-2xl' : ''\n )}\n >\n <a\n href={trackUrlRef(data?.imgLink, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.title}@${data?.subTitle}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n >\n <Picture\n className=\"size-full object-cover [&_img]:h-full [&_img]:object-cover\"\n source={data?.mobileImg?.url || ''}\n alt={data?.mobileImg?.alt || ''}\n />\n </a>\n <div className={cn('absolute inset-x-0 bottom-0 overflow-hidden px-4 pb-4')}>\n <div className=\"tablet:mb-6 mb-4 flex-1 overflow-hidden\">\n <p className=\"text-info-primary text-2xl font-bold leading-[1.2]\">{data?.title}</p>\n <h3 className=\"text-info-primary line-clamp-2 text-sm font-semibold\">{data?.subTitle}</h3>\n </div>\n\n {configuration?.primaryButton && (\n <Button\n as=\"a\"\n variant=\"secondary\"\n aria-label={data?.title ?? data?.subTitle}\n className={cn('text-info-primary text-sm font-bold')}\n href={trackUrlRef(data.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n data-headless-title-desc-button={`${data?.title}#${data?.subTitle}#${configuration?.primaryButton}`}\n >\n {configuration?.primaryButton}\n </Button>\n )}\n </div>\n </div>\n )\n}\n\nconst AccordionCards = React.forwardRef<HTMLDivElement, AccordionCardsType>(\n ({ data, autoplay = { enabled: false, loop: false, interval: 1500 }, className = '', event }, ref) => {\n const [hoverIndex, setHoverIndex] = useState<number | null>(0)\n\n const hoverIndexRef = useRef<number>(0)\n const accordionRef = useRef<HTMLDivElement[]>([])\n const [contentWidth, setContentWidth] = useState<number>(0)\n\n const innerRef = useRef<HTMLDivElement>(null)\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n const getRef = (index: number, el: HTMLDivElement) => {\n if (el) {\n accordionRef.current[index] = el\n }\n }\n\n useEffect(() => {\n const handleResize = () => {\n if (accordionRef.current[hoverIndexRef.current]) {\n setContentWidth(accordionRef.current[hoverIndexRef.current].offsetWidth)\n }\n }\n handleResize()\n const throttleResize = throttle(handleResize, 300)\n window.addEventListener('resize', throttleResize)\n return () => window.removeEventListener('resize', throttleResize)\n }, [])\n\n const handleSwiperItemClick = useCallback(\n (idx: number) => {\n if (hoverIndex === idx) return\n // \u66F4\u65B0\u5BBD\u5EA6\u76F8\u5173\u72B6\u6001\n setHoverIndex(idx)\n hoverIndexRef.current = idx\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [data?.products, hoverIndex]\n )\n\n useEffect(() => {\n let autoPlayTimer: NodeJS.Timeout\n if (autoplay?.enabled) {\n autoPlayTimer = setInterval(() => {\n setHoverIndex(prev => {\n const currentIndex = prev ?? 0\n let nextIndex: number\n\n if (autoplay.loop !== false) {\n // \u9ED8\u8BA4\u5FAA\u73AF\u64AD\u653E\n nextIndex = (currentIndex + 1) % data?.products?.length\n } else {\n // \u4E0D\u5FAA\u73AF\uFF1A\u64AD\u653E\u5230\u6700\u540E\u4E00\u4E2A\u540E\u505C\u6B62\n nextIndex = currentIndex + 1\n if (nextIndex >= data?.products?.length) {\n nextIndex = data?.products?.length - 1\n // \u505C\u6B62\u81EA\u52A8\u64AD\u653E\n if (autoPlayTimer) {\n clearInterval(autoPlayTimer)\n }\n return currentIndex // \u4FDD\u6301\u5728\u6700\u540E\u4E00\u4E2A\n }\n }\n\n hoverIndexRef.current = nextIndex\n return nextIndex\n })\n }, autoplay?.interval)\n }\n return () => {\n if (autoPlayTimer) {\n clearInterval(autoPlayTimer)\n }\n }\n }, [autoplay?.enabled, autoplay?.interval, autoplay?.loop, data?.products?.length, handleSwiperItemClick])\n\n return (\n <>\n {data?.title && <Title data={{ title: data?.title }} />}\n <div ref={innerRef} className={cn('laptop:block hidden', { 'aiui-dark': data?.theme === 'dark' })}>\n <div\n className={cn(\n 'lg-desktop:h-[calc(560_/_1920*100vw)] desktop:h-[calc(448_/_1440*100vw)] laptop:h-[calc(336_/_1025*100vw)] flex max-h-[560px] min-h-[336px] w-full gap-4 overflow-hidden',\n className\n )}\n >\n {data?.products?.map((item, idx) => (\n <AccordionCardsPcItem\n key={idx}\n item={item}\n idx={idx}\n itemShape={data?.itemShape}\n hoverIndex={hoverIndex}\n getRef={getRef}\n handleSwiperItemClick={handleSwiperItemClick}\n contentWidth={contentWidth}\n primaryButton={data?.primaryButton}\n event={event}\n data={data}\n accordionRef={accordionRef}\n />\n ))}\n </div>\n </div>\n <div className={cn('laptop:hidden block', { 'aiui-dark': data?.theme === 'dark' })}>\n <SwiperBox\n className={cn('h-[400px] !overflow-visible', className)}\n id={'AccordionCards' + data?.key}\n data={{\n list: data?.products,\n configuration: {\n shape: data?.shape,\n itemShape: data?.itemShape,\n primaryButton: data?.primaryButton,\n event: event,\n title: data?.title,\n },\n }}\n Slide={MobileItem}\n breakpoints={{\n 0: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1,\n },\n 374: {\n spaceBetween: 12,\n freeMode: false,\n slidesPerView: 1.2,\n },\n 768: {\n spaceBetween: 16,\n freeMode: false,\n slidesPerView: 2.3,\n },\n }}\n />\n </div>\n </>\n )\n }\n)\n\nAccordionCards.displayName = 'AccordionCards'\nexport default withLayout(AccordionCards)\n"],
5
+ "mappings": "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",
6
+ "names": ["AccordionCards_exports", "__export", "AccordionCards_default", "__toCommonJS", "import_jsx_runtime", "import_Title", "import_utils", "import_picture", "import_button", "import_SwiperBox", "import_Styles", "import_react", "import_useExposure", "import_trackUrlRef", "import_throttle", "import_heading", "componentType", "componentName", "AccordionCardsPcItem", "item", "idx", "itemShape", "hoverIndex", "getRef", "handleSwiperItemClick", "contentWidth", "primaryButton", "event", "data", "accordionRef", "isExpanded", "flexValue", "el", "Picture", "Button", "MobileItem", "configuration", "ref", "AccordionCards", "React", "autoplay", "className", "setHoverIndex", "hoverIndexRef", "setContentWidth", "innerRef", "index", "handleResize", "throttleResize", "throttle", "autoPlayTimer", "prev", "currentIndex", "nextIndex", "Title", "SwiperBox"]
7
7
  }
@@ -0,0 +1,22 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * AnchorNavigation 业务组件数据接口
4
+ */
5
+ export interface AnchorNavigationData {
6
+ /** 锚点列表 */
7
+ sectionIds: {
8
+ id: string;
9
+ label: string;
10
+ }[];
11
+ }
12
+ export interface AnchorNavigationProps extends React.HTMLAttributes<HTMLDivElement> {
13
+ /** 业务数据 */
14
+ data: AnchorNavigationData;
15
+ }
16
+ /**
17
+ * AnchorNavigation - 锚点导航
18
+ *
19
+ * @description 锚点导航
20
+ */
21
+ declare const AnchorNavigation: React.ForwardRefExoticComponent<AnchorNavigationProps & React.RefAttributes<HTMLDivElement>>;
22
+ export default AnchorNavigation;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var R=Object.create;var l=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var w=(t,e)=>{for(var o in e)l(t,o,{get:e[o],enumerable:!0})},p=(t,e,o,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of I(e))!T.call(t,r)&&r!==o&&l(t,r,{get:()=>e[r],enumerable:!(c=x(e,r))||c.enumerable});return t};var v=(t,e,o)=>(o=t!=null?R(L(t)):{},p(e||!t||!t.__esModule?l(o,"default",{value:t,enumerable:!0}):o,t)),y=t=>p(l({},"__esModule",{value:!0}),t);var D={};w(D,{default:()=>C});module.exports=y(D);var s=require("react/jsx-runtime"),f=v(require("react")),b=require("../../helpers/utils.js"),g=require("../../components/container.js"),A=v(require("./useAnchorPosition.js"));const h=f.forwardRef(({className:t,data:e,...o},c)=>{const r=(0,A.default)(e.sectionIds?.map(n=>n.id)||[]),d=f.useRef(null),m=f.useRef([]),N=f.useCallback(n=>{const i=m.current[n];if(i&&d.current){const a=d.current,u=i,k=u.offsetLeft-a.offsetWidth/2+u.offsetWidth/2;a.scrollTo({left:k,behavior:"smooth"})}},[]);return(0,s.jsx)("div",{ref:c,className:(0,b.cn)("sticky top-0 z-10 w-full bg-white",t),...o,children:(0,s.jsx)(g.Container,{children:(0,s.jsx)("div",{ref:d,className:"anchor-navigation-content desktop:gap-6 flex items-center gap-4 overflow-x-auto [&::-webkit-scrollbar]:hidden",children:e.sectionIds?.map((n,i)=>(0,s.jsx)("button",{ref:a=>{a&&(m.current[i]=a)},onClick:()=>{N(i),document.getElementById(n.id)?.scrollIntoView({behavior:"smooth"})},className:(0,b.cn)("anchor-navigation-item desktop:py-4 shrink-0 border-b-4 border-b-transparent py-3 text-base font-bold text-[#4A4C56]",{"border-b-brand text-[#080A0F]":r===n.id}),children:n.label},n.id))})})})});h.displayName="AnchorNavigation";var C=h;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/AnchorNavigation/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { Container } from '../../components/container.js'\nimport useAnchorPosition from './useAnchorPosition.js'\n/**\n * AnchorNavigation \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface AnchorNavigationData {\n /** \u951A\u70B9\u5217\u8868 */\n sectionIds: {\n id: string\n label: string\n }[]\n}\n\nexport interface AnchorNavigationProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: AnchorNavigationData\n}\n\n/**\n * AnchorNavigation - \u951A\u70B9\u5BFC\u822A\n *\n * @description \u951A\u70B9\u5BFC\u822A\n */\nconst AnchorNavigation = React.forwardRef<HTMLDivElement, AnchorNavigationProps>(\n ({ className, data, ...props }, ref) => {\n const activeId = useAnchorPosition(data.sectionIds?.map(item => item.id) || [])\n const containerRef = React.useRef<HTMLDivElement>(null)\n const sectionRefs = React.useRef<HTMLButtonElement[]>([])\n\n const autoScrollToActiveItem = React.useCallback((activeIdIndex: number) => {\n const curRef = sectionRefs.current[activeIdIndex]\n\n if (curRef && containerRef.current) {\n const container = containerRef.current\n const button = curRef\n const scrollLeft = button.offsetLeft - container.offsetWidth / 2 + button.offsetWidth / 2\n\n container.scrollTo({\n left: scrollLeft,\n behavior: 'smooth',\n })\n }\n }, [])\n\n return (\n <div ref={ref} className={cn('sticky top-0 z-10 w-full bg-white', className)} {...props}>\n <Container>\n <div\n ref={containerRef}\n className=\"anchor-navigation-content desktop:gap-6 flex items-center gap-4 overflow-x-auto [&::-webkit-scrollbar]:hidden\"\n >\n {data.sectionIds?.map((item, index) => (\n <button\n key={item.id}\n ref={el => {\n if (el) {\n sectionRefs.current[index] = el\n }\n }}\n onClick={() => {\n autoScrollToActiveItem(index)\n document.getElementById(item.id)?.scrollIntoView({ behavior: 'smooth' })\n }}\n className={cn(\n 'anchor-navigation-item desktop:py-4 shrink-0 border-b-4 border-b-transparent py-3 text-base font-bold text-[#4A4C56]',\n {\n 'border-b-brand text-[#080A0F]': activeId === item.id,\n }\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n </Container>\n </div>\n )\n }\n)\n\nAnchorNavigation.displayName = 'AnchorNavigation'\nexport default AnchorNavigation\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAwDc,IAAAI,EAAA,6BAtDdC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAA0B,yCAC1BC,EAA8B,qCAsB9B,MAAMC,EAAmBJ,EAAM,WAC7B,CAAC,CAAE,UAAAK,EAAW,KAAAC,EAAM,GAAGC,CAAM,EAAGC,IAAQ,CACtC,MAAMC,KAAW,EAAAC,SAAkBJ,EAAK,YAAY,IAAIK,GAAQA,EAAK,EAAE,GAAK,CAAC,CAAC,EACxEC,EAAeZ,EAAM,OAAuB,IAAI,EAChDa,EAAcb,EAAM,OAA4B,CAAC,CAAC,EAElDc,EAAyBd,EAAM,YAAae,GAA0B,CAC1E,MAAMC,EAASH,EAAY,QAAQE,CAAa,EAEhD,GAAIC,GAAUJ,EAAa,QAAS,CAClC,MAAMK,EAAYL,EAAa,QACzBM,EAASF,EACTG,EAAaD,EAAO,WAAaD,EAAU,YAAc,EAAIC,EAAO,YAAc,EAExFD,EAAU,SAAS,CACjB,KAAME,EACN,SAAU,QACZ,CAAC,CACH,CACF,EAAG,CAAC,CAAC,EAEL,SACE,OAAC,OAAI,IAAKX,EAAK,aAAW,MAAG,oCAAqCH,CAAS,EAAI,GAAGE,EAChF,mBAAC,aACC,mBAAC,OACC,IAAKK,EACL,UAAU,gHAET,SAAAN,EAAK,YAAY,IAAI,CAACK,EAAMS,OAC3B,OAAC,UAEC,IAAKC,GAAM,CACLA,IACFR,EAAY,QAAQO,CAAK,EAAIC,EAEjC,EACA,QAAS,IAAM,CACbP,EAAuBM,CAAK,EAC5B,SAAS,eAAeT,EAAK,EAAE,GAAG,eAAe,CAAE,SAAU,QAAS,CAAC,CACzE,EACA,aAAW,MACT,uHACA,CACE,gCAAiCF,IAAaE,EAAK,EACrD,CACF,EAEC,SAAAA,EAAK,OAjBDA,EAAK,EAkBZ,CACD,EACH,EACF,EACF,CAEJ,CACF,EAEAP,EAAiB,YAAc,mBAC/B,IAAOP,EAAQO",
6
+ "names": ["AnchorNavigation_exports", "__export", "AnchorNavigation_default", "__toCommonJS", "import_jsx_runtime", "React", "import_utils", "import_container", "import_useAnchorPosition", "AnchorNavigation", "className", "data", "props", "ref", "activeId", "useAnchorPosition", "item", "containerRef", "sectionRefs", "autoScrollToActiveItem", "activeIdIndex", "curRef", "container", "button", "scrollLeft", "index", "el"]
7
+ }
@@ -0,0 +1,2 @@
1
+ declare const useAnchorPosition: (sectionIds: string[], offset?: number) => string;
2
+ export default useAnchorPosition;
@@ -0,0 +1,2 @@
1
+ "use strict";var i=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var p=(o,e)=>{for(var n in e)i(o,n,{get:e[n],enumerable:!0})},h=(o,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of m(e))!g.call(o,t)&&t!==n&&i(o,t,{get:()=>e[t],enumerable:!(l=w(e,t))||l.enumerable});return o};var v=o=>h(i({},"__esModule",{value:!0}),o);var S={};p(S,{default:()=>b});module.exports=v(S);var r=require("react"),u=require("es-toolkit");const E=(o,e=100)=>{const[n,l]=(0,r.useState)("");return(0,r.useEffect)(()=>{const t=()=>{const a=Math.ceil(window.scrollY+e+10);for(let c=o.length-1;c>=0;c--){const d=document.getElementById(o[c]);if(d){const f=Math.ceil(d.getBoundingClientRect().top+window.scrollY);if(console.log(f,"offsetTop"),a>=f){l(o[c]);break}}}};t();const s=(0,u.debounce)(t,50);return window.addEventListener("scroll",s),()=>{window.removeEventListener("scroll",s)}},[o,e]),n};var b=E;
2
+ //# sourceMappingURL=useAnchorPosition.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/AnchorNavigation/useAnchorPosition.tsx"],
4
+ "sourcesContent": ["import { useState, useEffect } from 'react'\nimport { debounce } from 'es-toolkit'\n\nconst useAnchorPosition = (sectionIds: string[], offset = 100) => {\n const [activeId, setActiveId] = useState('')\n\n useEffect(() => {\n const handleScroll = () => {\n const scrollPosition = Math.ceil(window.scrollY + offset + 10)\n\n // \u904D\u5386\u6240\u6709section\uFF0C\u627E\u5230\u5F53\u524D\u53EF\u89C6\u533A\u57DF\u5185\u7684section\n for (let i = sectionIds.length - 1; i >= 0; i--) {\n const section = document.getElementById(sectionIds[i])\n if (section) {\n const offsetTop = Math.ceil(section.getBoundingClientRect().top + window.scrollY)\n console.log(offsetTop, 'offsetTop')\n if (scrollPosition >= offsetTop) {\n setActiveId(sectionIds[i])\n break\n }\n }\n }\n }\n\n // \u521D\u59CB\u5316\u65F6\u6267\u884C\u4E00\u6B21\n handleScroll()\n\n // \u521B\u5EFAdebounce\u51FD\u6570\u5E76\u4FDD\u5B58\u5F15\u7528\uFF0C\u786E\u4FDD\u80FD\u6B63\u786E\u79FB\u9664\u76D1\u542C\u5668\n const debouncedHandleScroll = debounce(handleScroll, 50)\n window.addEventListener('scroll', debouncedHandleScroll)\n\n return () => {\n window.removeEventListener('scroll', debouncedHandleScroll)\n }\n }, [sectionIds, offset])\n\n return activeId\n}\n\nexport default useAnchorPosition\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAoC,iBACpCC,EAAyB,sBAEzB,MAAMC,EAAoB,CAACC,EAAsBC,EAAS,MAAQ,CAChE,KAAM,CAACC,EAAUC,CAAW,KAAI,YAAS,EAAE,EAE3C,sBAAU,IAAM,CACd,MAAMC,EAAe,IAAM,CACzB,MAAMC,EAAiB,KAAK,KAAK,OAAO,QAAUJ,EAAS,EAAE,EAG7D,QAASK,EAAIN,EAAW,OAAS,EAAGM,GAAK,EAAGA,IAAK,CAC/C,MAAMC,EAAU,SAAS,eAAeP,EAAWM,CAAC,CAAC,EACrD,GAAIC,EAAS,CACX,MAAMC,EAAY,KAAK,KAAKD,EAAQ,sBAAsB,EAAE,IAAM,OAAO,OAAO,EAEhF,GADA,QAAQ,IAAIC,EAAW,WAAW,EAC9BH,GAAkBG,EAAW,CAC/BL,EAAYH,EAAWM,CAAC,CAAC,EACzB,KACF,CACF,CACF,CACF,EAGAF,EAAa,EAGb,MAAMK,KAAwB,YAASL,EAAc,EAAE,EACvD,cAAO,iBAAiB,SAAUK,CAAqB,EAEhD,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAqB,CAC5D,CACF,EAAG,CAACT,EAAYC,CAAM,CAAC,EAEhBC,CACT,EAEA,IAAOP,EAAQI",
6
+ "names": ["useAnchorPosition_exports", "__export", "useAnchorPosition_default", "__toCommonJS", "import_react", "import_es_toolkit", "useAnchorPosition", "sectionIds", "offset", "activeId", "setActiveId", "handleScroll", "scrollPosition", "i", "section", "offsetTop", "debouncedHandleScroll"]
7
+ }
@@ -0,0 +1,83 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * 产品标签接口
4
+ */
5
+ export interface ProductTag {
6
+ /** 标签文本 */
7
+ text: string;
8
+ /** 标签类型 */
9
+ type?: 'discount' | 'new' | 'default';
10
+ /** 标签样式变体 */
11
+ variant?: 'filled' | 'outlined';
12
+ }
13
+ /**
14
+ * 免费赠品接口
15
+ */
16
+ export interface FreeGift {
17
+ /** 赠品ID */
18
+ id: string;
19
+ /** 赠品图片URL */
20
+ image: string;
21
+ /** 赠品名称 */
22
+ name: string;
23
+ /** 原价 */
24
+ originalPrice: string;
25
+ /** 现价(通常为Free) */
26
+ currentPrice: string;
27
+ /** 是否为新品 */
28
+ isNew?: boolean;
29
+ /** 是否被选中 */
30
+ selected?: boolean;
31
+ }
32
+ /**
33
+ * 产品卡片数据接口
34
+ */
35
+ export interface ProductCardData {
36
+ /** 产品图片URL */
37
+ image: string;
38
+ /** 产品标签列表 */
39
+ tags?: ProductTag[];
40
+ /** 产品名称 */
41
+ name: string;
42
+ /** 产品描述 */
43
+ description: string;
44
+ /** 免费赠品说明文字 */
45
+ freeGiftLabel?: string;
46
+ /** 免费赠品列表 */
47
+ freeGifts?: FreeGift[];
48
+ /** 赠品选择模式:单选或多选 */
49
+ giftSelectionMode?: 'single' | 'multiple';
50
+ /** 当前价格 */
51
+ currentPrice: string;
52
+ /** 原价 */
53
+ originalPrice?: string;
54
+ /** Learn More按钮文本 */
55
+ learnMoreText?: string;
56
+ /** Shop Now按钮文本 */
57
+ shopNowText?: string;
58
+ }
59
+ export interface ProductCardProps extends React.HTMLAttributes<HTMLDivElement> {
60
+ /** 产品数据 */
61
+ data: ProductCardData;
62
+ /** 布局模式:一排一个或一排两个 */
63
+ layout?: 'single' | 'double';
64
+ /** 产品卡片点击事件 */
65
+ onProductClick?: (product: ProductCardData) => void;
66
+ /** 产品图片点击事件 */
67
+ onProductImageClick?: (product: ProductCardData) => void;
68
+ /** Learn More按钮点击事件 */
69
+ onLearnMore?: (product: ProductCardData) => void;
70
+ /** Shop Now按钮点击事件 */
71
+ onShopNow?: (product: ProductCardData) => void;
72
+ /** 赠品点击事件 */
73
+ onGiftClick?: (gift: FreeGift, product: ProductCardData) => void;
74
+ /** 赠品选择变化事件 */
75
+ onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void;
76
+ }
77
+ /**
78
+ * ProductCard - 买赠货架产品卡片
79
+ *
80
+ * @description 用于买一赠一活动的产品展示卡片,左侧展示产品图片和标签,右侧展示产品信息、赠品和购买按钮
81
+ */
82
+ declare const ProductCard: React.ForwardRefExoticComponent<ProductCardProps & React.RefAttributes<HTMLDivElement>>;
83
+ export default ProductCard;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var E=Object.create;var f=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,j=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var r in e)f(t,r,{get:e[r],enumerable:!0})},w=(t,e,r,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of A(e))!j.call(t,n)&&n!==r&&f(t,n,{get:()=>e[n],enumerable:!(l=B(e,n))||l.enumerable});return t};var p=(t,e,r)=>(r=t!=null?E(W(t)):{},w(e||!t||!t.__esModule?f(r,"default",{value:t,enumerable:!0}):r,t)),J=t=>w(f({},"__esModule",{value:!0}),t);var O={};q(O,{default:()=>K});module.exports=J(O);var i=require("react/jsx-runtime"),m=p(require("react")),a=require("../../helpers/index.js"),u=p(require("../../components/picture.js")),b=p(require("../../components/button.js")),s=require("../../components/text.js"),G=require("../../components/heading.js"),v=p(require("../../components/badge.js"));const N=t=>t.type==="discount"||t.type==="new"?t.variant==="outlined"?"border-[1.6px] border-brand-0 text-brand-0 bg-container-primary":"bg-brand-0 text-info-white border-none":"bg-info-primary text-info-white border-none",h=m.forwardRef(({image:t,name:e,tags:r,layout:l="single",className:n,onClick:o},c)=>(0,i.jsxs)("div",{ref:c,className:(0,a.cn)("rounded-l-box laptop:rounded-l-box tablet:rounded-t-box tablet:rounded-r-none relative flex items-start gap-6 overflow-hidden p-6",l==="single"?"w-[964px]":"w-[482px]",l==="single"?" tablet:w-full tablet:p-4":"",o?"cursor-pointer":"",n),onClick:o,children:[(0,i.jsx)(u.default,{source:t,alt:e,className:"absolute inset-0 w-full max-w-none",imgClassName:"h-full object-cover"}),r&&r.length>0&&(0,i.jsx)("div",{className:"relative z-10 flex flex-wrap items-start gap-1",children:r.map((g,x)=>(0,i.jsx)(v.default,{size:"lg",className:(0,a.cn)(N(g),"tracking-[-0.64px]","tablet:text-sm tablet:px-[6px] tablet:py-[3px] tablet:tracking-[-0.56px]"),children:g.text},x))})]}));h.displayName="ProductImage";const P=m.forwardRef(({name:t,description:e,layout:r="single",className:l},n)=>(0,i.jsxs)("div",{ref:n,className:(0,a.cn)("flex w-full flex-col gap-1",l),children:[(0,i.jsx)(G.Heading,{as:"h4",size:4,weight:"semibold",className:(0,a.cn)("text-info-primary w-full text-2xl leading-[1.2] tracking-[-0.96px]","tablet:text-[20px] tablet:tracking-[-0.8px]"),children:t}),(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)("text-info-primary w-full leading-[1.4] tracking-[-0.36px]","tablet:text-sm tablet:tracking-[-0.28px]"),children:e})]}));P.displayName="ProductInfo";const y=m.forwardRef(({gift:t,onClick:e,className:r},l)=>(0,i.jsx)("div",{ref:l,className:(0,a.cn)("bg-container-primary rounded-box relative flex w-full cursor-pointer flex-col border-2 transition-all hover:shadow-sm",t.selected?"border-brand-0":"border-container-secondary-1",r),onClick:()=>e?.(t),children:(0,i.jsxs)("div",{className:"flex w-full flex-col items-end",children:[t.isNew&&(0,i.jsx)("div",{className:"absolute right-0 top-0 flex items-start",children:(0,i.jsx)(v.default,{size:"lg",className:(0,a.cn)(N({text:"New",type:"new",variant:"filled"}),"tracking-[-0.64px]"),children:"New"})}),(0,i.jsxs)("div",{className:(0,a.cn)("flex w-full items-center gap-4 p-4","tablet:p-2"),children:[(0,i.jsx)("div",{className:(0,a.cn)("size-14 shrink-0","tablet:size-12"),children:(0,i.jsx)(u.default,{source:t.image,alt:t.name,className:"size-full object-cover"})}),(0,i.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)("text-info-primary truncate leading-[1.4] tracking-[-0.36px]","tablet:text-sm tablet:tracking-[-0.28px]"),children:t.name}),(0,i.jsxs)("div",{className:"flex items-center gap-1",children:[(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)(),children:t.currentPrice}),(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)(),children:t.originalPrice})]})]})]})]})}));y.displayName="FreeGiftItem";const k=m.forwardRef(({freeGiftLabel:t,freeGifts:e,onGiftClick:r,layout:l="single",className:n},o)=>!e||e.length===0?null:(0,i.jsxs)("div",{ref:o,className:(0,a.cn)("flex w-full flex-col gap-2",n),children:[t&&(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)("text-info-primary w-full leading-[1.4] tracking-[-0.36px]","tablet:text-sm tablet:tracking-[-0.28px]"),children:t}),(0,i.jsx)("div",{className:(0,a.cn)("tablet:flex-row laptop:flex-col flex flex-col gap-2"),children:e.map((c,d)=>(0,i.jsx)("div",{children:(0,i.jsx)(y,{gift:c,onClick:r})},c.id||d))})]}));k.displayName="GiftSelection";const C=m.forwardRef(({currentPrice:t,originalPrice:e,learnMoreText:r="Learn More",shopNowText:l="Shop Now",onLearnMore:n,onShopNow:o,layout:c="single",className:d},g)=>(0,i.jsxs)("div",{ref:g,className:(0,a.cn)("flex w-full flex-col justify-center gap-2",d),children:[(0,i.jsxs)("div",{className:"flex w-full items-center gap-1",children:[(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)(),children:t}),e&&(0,i.jsx)(s.Text,{size:4,weight:"semibold",className:(0,a.cn)("line-through"),children:e})]}),(0,i.jsxs)("div",{className:(0,a.cn)("flex items-start gap-3","tablet:gap-2"),children:[(0,i.jsx)(b.default,{variant:"secondary",size:"lg",className:(0,a.cn)("tablet:px-5 tablet:py-[10px] tablet:text-sm tablet:tracking-[-0.56px]"),onClick:n,children:r}),(0,i.jsx)(b.default,{variant:"primary",size:"lg",className:(0,a.cn)("tablet:px-5 tablet:py-[10px] tablet:text-sm tablet:tracking-[-0.56px]"),onClick:o,children:l})]})]}));C.displayName="PriceAndActions";const T=m.forwardRef(({className:t,data:e,layout:r="single",onProductClick:l,onProductImageClick:n,onLearnMore:o,onShopNow:c,onGiftClick:d,onGiftSelectionChange:g,...x},M)=>{const z=r==="single"?"w-full max-w-[1664px]":"w-full",L=r==="single"?"w-[700px]":"w-[350px]",D=()=>{l?.(e)},F=()=>{n?.(e)},S=()=>{o?.(e)},H=()=>{c?.(e)},I=R=>{d?.(R,e)};return(0,i.jsxs)("div",{ref:M,className:(0,a.cn)("bg-container-primary laptop:flex-row rounded-box flex flex-col items-stretch",z,r==="single"?"tablet:flex-col tablet:max-w-[704px]":"",l?"cursor-pointer":"",t),onClick:D,...x,children:[(0,i.jsx)(h,{image:e.image,name:e.name,tags:e.tags,layout:r,onClick:F}),(0,i.jsxs)("div",{className:(0,a.cn)("bg-container-secondary-1 rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none flex flex-col justify-between p-6",L,r==="single"?"tablet:w-full tablet:p-4 tablet:gap-4":""),children:[(0,i.jsx)(P,{name:e.name,description:e.description,layout:r}),(0,i.jsx)(k,{freeGiftLabel:e.freeGiftLabel,freeGifts:e.freeGifts,onGiftClick:I,layout:r}),(0,i.jsx)(C,{currentPrice:e.currentPrice,originalPrice:e.originalPrice,learnMoreText:e.learnMoreText,shopNowText:e.shopNowText,onLearnMore:S,onShopNow:H,layout:r})]})]})});T.displayName="ProductCard";var K=T;
2
+ //# sourceMappingURL=ProductCard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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 Picture from '../../components/picture.js'\nimport Button from '../../components/button.js'\nimport { Text } from '../../components/text.js'\nimport { Heading } from '../../components/heading.js'\nimport Badge from '../../components/badge.js'\n\n/**\n * \u4EA7\u54C1\u6807\u7B7E\u63A5\u53E3\n */\nexport interface ProductTag {\n /** \u6807\u7B7E\u6587\u672C */\n text: string\n /** \u6807\u7B7E\u7C7B\u578B */\n type?: 'discount' | 'new' | 'default'\n /** \u6807\u7B7E\u6837\u5F0F\u53D8\u4F53 */\n variant?: 'filled' | 'outlined'\n}\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 /** \u662F\u5426\u4E3A\u65B0\u54C1 */\n isNew?: boolean\n /** \u662F\u5426\u88AB\u9009\u4E2D */\n selected?: boolean\n}\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u6570\u636E\u63A5\u53E3\n */\nexport interface ProductCardData {\n /** \u4EA7\u54C1\u56FE\u7247URL */\n image: string\n /** \u4EA7\u54C1\u6807\u7B7E\u5217\u8868 */\n tags?: ProductTag[]\n /** \u4EA7\u54C1\u540D\u79F0 */\n name: string\n /** \u4EA7\u54C1\u63CF\u8FF0 */\n description: string\n /** \u514D\u8D39\u8D60\u54C1\u8BF4\u660E\u6587\u5B57 */\n freeGiftLabel?: string\n /** \u514D\u8D39\u8D60\u54C1\u5217\u8868 */\n freeGifts?: FreeGift[]\n /** \u8D60\u54C1\u9009\u62E9\u6A21\u5F0F\uFF1A\u5355\u9009\u6216\u591A\u9009 */\n giftSelectionMode?: 'single' | 'multiple'\n /** \u5F53\u524D\u4EF7\u683C */\n currentPrice: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** Learn More\u6309\u94AE\u6587\u672C */\n learnMoreText?: string\n /** Shop Now\u6309\u94AE\u6587\u672C */\n shopNowText?: string\n}\n\nexport interface ProductCardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4EA7\u54C1\u6570\u636E */\n data: ProductCardData\n /** \u5E03\u5C40\u6A21\u5F0F\uFF1A\u4E00\u6392\u4E00\u4E2A\u6216\u4E00\u6392\u4E24\u4E2A */\n layout?: 'single' | 'double'\n /** \u4EA7\u54C1\u5361\u7247\u70B9\u51FB\u4E8B\u4EF6 */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u4E8B\u4EF6 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onLearnMore?: (product: ProductCardData) => void\n /** Shop Now\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onShopNow?: (product: ProductCardData) => void\n /** \u8D60\u54C1\u70B9\u51FB\u4E8B\u4EF6 */\n onGiftClick?: (gift: FreeGift, product: ProductCardData) => void\n /** \u8D60\u54C1\u9009\u62E9\u53D8\u5316\u4E8B\u4EF6 */\n onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void\n}\n\n/**\n * \u83B7\u53D6\u6807\u7B7E\u6837\u5F0F\n */\nconst getTagStyles = (tag: ProductTag) => {\n if (tag.type === 'discount') {\n return tag.variant === 'outlined'\n ? 'border-[1.6px] border-brand-0 text-brand-0 bg-container-primary'\n : 'bg-brand-0 text-info-white border-none'\n }\n\n if (tag.type === 'new') {\n return tag.variant === 'outlined'\n ? 'border-[1.6px] border-brand-0 text-brand-0 bg-container-primary'\n : 'bg-brand-0 text-info-white border-none'\n }\n\n return 'bg-info-primary text-info-white border-none'\n}\n\n/**\n * ProductImage - \u4EA7\u54C1\u56FE\u7247\u533A\u57DF\n */\nconst ProductImage = React.forwardRef<\n HTMLDivElement,\n {\n image: string\n name: string\n tags?: ProductTag[]\n layout?: 'single' | 'double'\n className?: string\n onClick?: () => void\n }\n>(({ image, name, tags, layout = 'single', className, onClick }, ref) => {\n const imageWidth = layout === 'single' ? 'w-[964px]' : 'w-[482px]'\n\n return (\n <div\n ref={ref}\n className={cn(\n 'rounded-l-box laptop:rounded-l-box tablet:rounded-t-box tablet:rounded-r-none relative flex items-start gap-6 overflow-hidden p-6',\n imageWidth,\n // \u79FB\u52A8\u7AEF\u6837\u5F0F\n layout === 'single' ? ' tablet:w-full tablet:p-4' : '',\n onClick ? 'cursor-pointer' : '',\n className\n )}\n onClick={onClick}\n >\n {/* \u80CC\u666F\u56FE\u7247 */}\n\n <Picture\n source={image}\n alt={name}\n className=\"absolute inset-0 w-full max-w-none\"\n imgClassName=\"h-full object-cover\"\n />\n\n {/* \u4EA7\u54C1\u6807\u7B7E */}\n {tags && tags.length > 0 && (\n <div className=\"relative z-10 flex flex-wrap items-start gap-1\">\n {tags.map((tag, index) => (\n <Badge\n key={index}\n size=\"lg\"\n className={cn(\n getTagStyles(tag),\n 'tracking-[-0.64px]',\n 'tablet:text-sm tablet:px-[6px] tablet:py-[3px] tablet:tracking-[-0.56px]'\n )}\n >\n {tag.text}\n </Badge>\n ))}\n </div>\n )}\n </div>\n )\n})\n\nProductImage.displayName = 'ProductImage'\n\n/**\n * ProductInfo - \u4EA7\u54C1\u4FE1\u606F\u533A\u57DF\n */\nconst ProductInfo = React.forwardRef<\n HTMLDivElement,\n {\n name: string\n description: string\n layout?: 'single' | 'double'\n className?: string\n }\n>(({ name, description, layout = 'single', className }, ref) => {\n return (\n <div ref={ref} className={cn('flex w-full flex-col gap-1', className)}>\n <Heading\n as=\"h4\"\n size={4}\n weight=\"semibold\"\n className={cn(\n 'text-info-primary w-full text-2xl leading-[1.2] tracking-[-0.96px]',\n 'tablet:text-[20px] tablet:tracking-[-0.8px]'\n )}\n >\n {name}\n </Heading>\n <Text\n size={4}\n weight=\"semibold\"\n className={cn(\n 'text-info-primary w-full leading-[1.4] tracking-[-0.36px]',\n 'tablet:text-sm tablet:tracking-[-0.28px]'\n )}\n >\n {description}\n </Text>\n </div>\n )\n})\n\nProductInfo.displayName = 'ProductInfo'\n\n/**\n * FreeGiftItem - \u514D\u8D39\u8D60\u54C1\u9879\n */\nconst FreeGiftItem = React.forwardRef<\n HTMLDivElement,\n {\n gift: FreeGift\n onClick?: (gift: FreeGift) => void\n className?: string\n }\n>(({ gift, onClick, className }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary rounded-box relative flex w-full cursor-pointer flex-col border-2 transition-all hover:shadow-sm',\n gift.selected ? 'border-brand-0' : 'border-container-secondary-1',\n className\n )}\n onClick={() => onClick?.(gift)}\n >\n <div className=\"flex w-full flex-col items-end\">\n {gift.isNew && (\n <div className=\"absolute right-0 top-0 flex items-start\">\n <Badge\n size=\"lg\"\n className={cn(getTagStyles({ text: 'New', type: 'new', variant: 'filled' }), 'tracking-[-0.64px]')}\n >\n New\n </Badge>\n </div>\n )}\n <div className={cn('flex w-full items-center gap-4 p-4', 'tablet:p-2')}>\n <div className={cn('size-14 shrink-0', 'tablet:size-12')}>\n <Picture source={gift.image} alt={gift.name} className=\"size-full object-cover\" />\n </div>\n <div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <Text\n size={4}\n weight=\"semibold\"\n className={cn(\n 'text-info-primary truncate leading-[1.4] tracking-[-0.36px]',\n 'tablet:text-sm tablet:tracking-[-0.28px]'\n )}\n >\n {gift.name}\n </Text>\n <div className=\"flex items-center gap-1\">\n <Text size={4} weight=\"semibold\" className={cn()}>\n {gift.currentPrice}\n </Text>\n <Text size={4} weight=\"semibold\" className={cn()}>\n {gift.originalPrice}\n </Text>\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n})\n\nFreeGiftItem.displayName = 'FreeGiftItem'\n\n/**\n * GiftSelection - \u8D60\u54C1\u9009\u62E9\u533A\u57DF\n */\nconst GiftSelection = React.forwardRef<\n HTMLDivElement,\n {\n freeGiftLabel?: string\n freeGifts?: FreeGift[]\n onGiftClick?: (gift: FreeGift) => void\n layout?: 'single' | 'double'\n className?: string\n }\n>(({ freeGiftLabel, freeGifts, onGiftClick, layout = 'single', className }, ref) => {\n if (!freeGifts || freeGifts.length === 0) {\n return null\n }\n\n return (\n <div ref={ref} className={cn('flex w-full flex-col gap-2', className)}>\n {freeGiftLabel && (\n <Text\n size={4}\n weight=\"semibold\"\n className={cn(\n 'text-info-primary w-full leading-[1.4] tracking-[-0.36px]',\n 'tablet:text-sm tablet:tracking-[-0.28px]'\n )}\n >\n {freeGiftLabel}\n </Text>\n )}\n <div className={cn('tablet:flex-row laptop:flex-col flex flex-col gap-2')}>\n {freeGifts.map((gift, index) => (\n <div key={gift.id || index}>\n <FreeGiftItem gift={gift} onClick={onGiftClick} />\n </div>\n ))}\n </div>\n </div>\n )\n})\n\nGiftSelection.displayName = 'GiftSelection'\n\n/**\n * PriceAndActions - \u4EF7\u683C\u548C\u64CD\u4F5C\u533A\u57DF\n */\nconst PriceAndActions = React.forwardRef<\n HTMLDivElement,\n {\n currentPrice: string\n originalPrice?: string\n learnMoreText?: string\n shopNowText?: string\n onLearnMore?: () => void\n onShopNow?: () => void\n layout?: 'single' | 'double'\n className?: string\n }\n>(\n (\n {\n currentPrice,\n originalPrice,\n learnMoreText = 'Learn More',\n shopNowText = 'Shop Now',\n onLearnMore,\n onShopNow,\n layout = 'single',\n className,\n },\n ref\n ) => {\n return (\n <div ref={ref} className={cn('flex w-full flex-col justify-center gap-2', className)}>\n {/* \u4EF7\u683C */}\n <div className=\"flex w-full items-center gap-1\">\n <Text size={4} weight=\"semibold\" className={cn()}>\n {currentPrice}\n </Text>\n {originalPrice && (\n <Text size={4} weight=\"semibold\" className={cn('line-through')}>\n {originalPrice}\n </Text>\n )}\n </div>\n\n {/* \u6309\u94AE\u7EC4 */}\n <div className={cn('flex items-start gap-3', 'tablet:gap-2')}>\n <Button\n variant=\"secondary\"\n size=\"lg\"\n className={cn('tablet:px-5 tablet:py-[10px] tablet:text-sm tablet:tracking-[-0.56px]')}\n onClick={onLearnMore}\n >\n {learnMoreText}\n </Button>\n <Button\n variant=\"primary\"\n size=\"lg\"\n className={cn('tablet:px-5 tablet:py-[10px] tablet:text-sm tablet:tracking-[-0.56px]')}\n onClick={onShopNow}\n >\n {shopNowText}\n </Button>\n </div>\n </div>\n )\n }\n)\n\nPriceAndActions.displayName = 'PriceAndActions'\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 className,\n data,\n layout = 'single',\n onProductClick,\n onProductImageClick,\n onLearnMore,\n onShopNow,\n onGiftClick,\n onGiftSelectionChange,\n ...props\n },\n ref\n ) => {\n const containerWidth = layout === 'single' ? 'w-full max-w-[1664px]' : 'w-full'\n const contentWidth = layout === 'single' ? 'w-[700px]' : 'w-[350px]'\n\n const handleProductClick = () => {\n onProductClick?.(data)\n }\n\n const handleProductImageClick = () => {\n onProductImageClick?.(data)\n }\n\n const handleLearnMoreClick = () => {\n onLearnMore?.(data)\n }\n\n const handleShopNowClick = () => {\n onShopNow?.(data)\n }\n\n const handleGiftClick = (gift: FreeGift) => {\n onGiftClick?.(gift, data)\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary laptop:flex-row rounded-box flex flex-col items-stretch',\n containerWidth,\n layout === 'single' ? 'tablet:flex-col tablet:max-w-[704px]' : '',\n onProductClick ? 'cursor-pointer' : '',\n className\n )}\n onClick={handleProductClick}\n {...props}\n >\n {/* \u4EA7\u54C1\u56FE\u7247\u533A\u57DF */}\n <ProductImage\n image={data.image}\n name={data.name}\n tags={data.tags}\n layout={layout}\n onClick={handleProductImageClick}\n />\n\n {/* \u4EA7\u54C1\u4FE1\u606F\u533A\u57DF */}\n <div\n className={cn(\n 'bg-container-secondary-1 rounded-r-box laptop:rounded-r-box tablet:rounded-b-box tablet:rounded-l-none flex flex-col justify-between p-6',\n contentWidth,\n // \u79FB\u52A8\u7AEF\u6837\u5F0F\n layout === 'single' ? 'tablet:w-full tablet:p-4 tablet:gap-4' : ''\n )}\n >\n {/* \u4EA7\u54C1\u6807\u9898\u548C\u63CF\u8FF0 */}\n <ProductInfo name={data.name} description={data.description} layout={layout} />\n\n {/* \u514D\u8D39\u8D60\u54C1\u533A\u57DF */}\n <GiftSelection\n freeGiftLabel={data.freeGiftLabel}\n freeGifts={data.freeGifts}\n onGiftClick={handleGiftClick}\n layout={layout}\n />\n\n {/* \u4EF7\u683C\u548C\u6309\u94AE\u533A\u57DF */}\n <PriceAndActions\n currentPrice={data.currentPrice}\n originalPrice={data.originalPrice}\n learnMoreText={data.learnMoreText}\n shopNowText={data.shopNowText}\n onLearnMore={handleLearnMoreClick}\n onShopNow={handleShopNowClick}\n layout={layout}\n />\n </div>\n </div>\n )\n }\n)\n\nProductCard.displayName = '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_picture", "import_button", "import_text", "import_heading", "import_badge", "getTagStyles", "tag", "ProductImage", "image", "name", "tags", "layout", "className", "onClick", "ref", "Picture", "index", "Badge", "ProductInfo", "description", "FreeGiftItem", "gift", "GiftSelection", "freeGiftLabel", "freeGifts", "onGiftClick", "PriceAndActions", "currentPrice", "originalPrice", "learnMoreText", "shopNowText", "onLearnMore", "onShopNow", "Button", "ProductCard", "data", "onProductClick", "onProductImageClick", "onGiftSelectionChange", "props", "containerWidth", "contentWidth", "handleProductClick", "handleProductImageClick", "handleLearnMoreClick", "handleShopNowClick", "handleGiftClick"]
7
+ }
@@ -0,0 +1,40 @@
1
+ import * as React from 'react';
2
+ import { type ProductCardData, type FreeGift } from './ProductCard.js';
3
+ export type BuyOneGetOneShelfSemanticName = 'root' | 'title' | 'description' | 'content' | 'productCard' | 'productCardImage' | 'productCardTitle' | 'productCardDescription' | 'productCardPrice' | 'productCardGiftsContainer' | 'productCardBtnGroup';
4
+ /**
5
+ * BuyOneGetOneShelf 业务组件数据接口
6
+ */
7
+ export interface BuyOneGetOneShelfData {
8
+ /** 组件标题 */
9
+ title?: string;
10
+ /** 组件描述 */
11
+ description?: string;
12
+ /** 产品列表 */
13
+ products?: ProductCardData[];
14
+ /** 布局模式:一排一个或一排两个 */
15
+ layout?: 'single' | 'double';
16
+ }
17
+ export interface BuyOneGetOneShelfProps extends React.HTMLAttributes<HTMLDivElement> {
18
+ /** 业务数据 */
19
+ data: BuyOneGetOneShelfData;
20
+ /** 产品卡片点击事件 */
21
+ onProductClick?: (product: ProductCardData) => void;
22
+ /** 产品图片点击事件 */
23
+ onProductImageClick?: (product: ProductCardData) => void;
24
+ /** Learn More按钮点击事件 */
25
+ onLearnMore?: (product: ProductCardData) => void;
26
+ /** Shop Now按钮点击事件 */
27
+ onShopNow?: (product: ProductCardData) => void;
28
+ /** 赠品点击事件 */
29
+ onGiftClick?: (gift: FreeGift, product: ProductCardData) => void;
30
+ /** 赠品选择变化事件 */
31
+ onGiftSelectionChange?: (selectedGifts: FreeGift[], product: ProductCardData) => void;
32
+ classNames?: Partial<Record<BuyOneGetOneShelfSemanticName, string>>;
33
+ }
34
+ /**
35
+ * BuyOneGetOneShelf - 买赠货架
36
+ *
37
+ * @description 这是一个买主商品赠送赠品的活动组件,展示产品卡片,支持一排一个或一排两个的布局
38
+ */
39
+ declare const BuyOneGetOneShelf: React.ForwardRefExoticComponent<BuyOneGetOneShelfProps & React.RefAttributes<HTMLDivElement>>;
40
+ export default BuyOneGetOneShelf;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var S=Object.create;var n=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var N=(t,e)=>{for(var o in e)n(t,o,{get:e[o],enumerable:!0})},l=(t,e,o,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of v(e))!B.call(t,r)&&r!==o&&n(t,r,{get:()=>e[r],enumerable:!(d=D(e,r))||d.enumerable});return t};var p=(t,e,o)=>(o=t!=null?S(x(t)):{},l(e||!t||!t.__esModule?n(o,"default",{value:t,enumerable:!0}):o,t)),k=t=>l(n({},"__esModule",{value:!0}),t);var L={};N(L,{default:()=>b});module.exports=k(L);var a=require("react/jsx-runtime"),w=p(require("react")),i=require("../../helpers/index.js"),f=p(require("./ProductCard.js"));const u=w.forwardRef(({className:t,classNames:e={},data:o,onProductClick:d,onProductImageClick:r,onLearnMore:s,onShopNow:C,onGiftClick:m,onGiftSelectionChange:y,...G},P)=>{const{products:O=[],layout:c="single"}=o;return(0,a.jsxs)("div",{ref:P,className:(0,i.cn)("w-full px-32 py-0",t,e?.root),...G,children:[o.title&&(0,a.jsx)("h2",{className:(0,i.cn)("mb-4 text-2xl font-bold",e?.title),children:o.title}),o.description&&(0,a.jsx)("p",{className:(0,i.cn)("mb-6 text-gray-600",e?.description),children:o.description}),(0,a.jsx)("div",{className:(0,i.cn)("flex flex-wrap",c==="single"?"flex-col gap-6":"flex-row gap-6"),children:O.map((g,h)=>(0,a.jsx)(f.default,{data:g,layout:c,onProductClick:d,onProductImageClick:r,onLearnMore:s,onShopNow:C,onGiftClick:m,onGiftSelectionChange:y},h))})]})});u.displayName="BuyOneGetOneShelf";var b=u;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/BuyOneGetOneShelf/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport ProductCard, { type ProductCardData, type FreeGift } from './ProductCard.js'\n\nexport type BuyOneGetOneShelfSemanticName =\n | 'root'\n | 'title'\n | 'description'\n | 'content'\n | 'productCard'\n | 'productCardImage'\n | 'productCardTitle'\n | 'productCardDescription'\n | 'productCardPrice'\n | 'productCardGiftsContainer'\n | 'productCardBtnGroup'\n\n/**\n * BuyOneGetOneShelf \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface BuyOneGetOneShelfData {\n /** \u7EC4\u4EF6\u6807\u9898 */\n title?: string\n /** \u7EC4\u4EF6\u63CF\u8FF0 */\n description?: string\n /** \u4EA7\u54C1\u5217\u8868 */\n products?: ProductCardData[]\n /** \u5E03\u5C40\u6A21\u5F0F\uFF1A\u4E00\u6392\u4E00\u4E2A\u6216\u4E00\u6392\u4E24\u4E2A */\n layout?: 'single' | 'double'\n}\n\nexport interface BuyOneGetOneShelfProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: BuyOneGetOneShelfData\n /** \u4EA7\u54C1\u5361\u7247\u70B9\u51FB\u4E8B\u4EF6 */\n onProductClick?: (product: ProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u4E8B\u4EF6 */\n onProductImageClick?: (product: ProductCardData) => void\n /** Learn More\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onLearnMore?: (product: ProductCardData) => void\n /** Shop Now\u6309\u94AE\u70B9\u51FB\u4E8B\u4EF6 */\n onShopNow?: (product: ProductCardData) => void\n /** \u8D60\u54C1\u70B9\u51FB\u4E8B\u4EF6 */\n onGiftClick?: (gift: FreeGift, product: ProductCardData) => 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\n/**\n * BuyOneGetOneShelf - \u4E70\u8D60\u8D27\u67B6\n *\n * @description \u8FD9\u662F\u4E00\u4E2A\u4E70\u4E3B\u5546\u54C1\u8D60\u9001\u8D60\u54C1\u7684\u6D3B\u52A8\u7EC4\u4EF6\uFF0C\u5C55\u793A\u4EA7\u54C1\u5361\u7247\uFF0C\u652F\u6301\u4E00\u6392\u4E00\u4E2A\u6216\u4E00\u6392\u4E24\u4E2A\u7684\u5E03\u5C40\n */\nconst BuyOneGetOneShelf = React.forwardRef<HTMLDivElement, BuyOneGetOneShelfProps>(\n (\n {\n className,\n classNames = {},\n data,\n onProductClick,\n onProductImageClick,\n onLearnMore,\n onShopNow,\n onGiftClick,\n onGiftSelectionChange,\n ...props\n },\n ref\n ) => {\n const { products = [], layout = 'single' } = data\n\n return (\n <div ref={ref} className={cn('w-full px-32 py-0', className, classNames?.root)} {...props}>\n {data.title && <h2 className={cn('mb-4 text-2xl font-bold', classNames?.title)}>{data.title}</h2>}\n {data.description && <p className={cn('mb-6 text-gray-600', classNames?.description)}>{data.description}</p>}\n\n {/* \u4E70\u8D60\u8D27\u67B6\u4EA7\u54C1\u533A\u57DF */}\n <div className={cn('flex flex-wrap', layout === 'single' ? 'flex-col gap-6' : 'flex-row gap-6')}>\n {products.map((product, index) => (\n <ProductCard\n key={index}\n data={product}\n layout={layout}\n onProductClick={onProductClick}\n onProductImageClick={onProductImageClick}\n onLearnMore={onLearnMore}\n onShopNow={onShopNow}\n onGiftClick={onGiftClick}\n onGiftSelectionChange={onGiftSelectionChange}\n />\n ))}\n </div>\n </div>\n )\n }\n)\n\nBuyOneGetOneShelf.displayName = 'BuyOneGetOneShelf'\nexport default BuyOneGetOneShelf\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA2EM,IAAAI,EAAA,6BAzENC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAiE,+BAoDjE,MAAMC,EAAoBH,EAAM,WAC9B,CACE,CACE,UAAAI,EACA,WAAAC,EAAa,CAAC,EACd,KAAAC,EACA,eAAAC,EACA,oBAAAC,EACA,YAAAC,EACA,UAAAC,EACA,YAAAC,EACA,sBAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,KAAM,CAAE,SAAAC,EAAW,CAAC,EAAG,OAAAC,EAAS,QAAS,EAAIV,EAE7C,SACE,QAAC,OAAI,IAAKQ,EAAK,aAAW,MAAG,oBAAqBV,EAAWC,GAAY,IAAI,EAAI,GAAGQ,EACjF,UAAAP,EAAK,UAAS,OAAC,MAAG,aAAW,MAAG,0BAA2BD,GAAY,KAAK,EAAI,SAAAC,EAAK,MAAM,EAC3FA,EAAK,gBAAe,OAAC,KAAE,aAAW,MAAG,qBAAsBD,GAAY,WAAW,EAAI,SAAAC,EAAK,YAAY,KAGxG,OAAC,OAAI,aAAW,MAAG,iBAAkBU,IAAW,SAAW,iBAAmB,gBAAgB,EAC3F,SAAAD,EAAS,IAAI,CAACE,EAASC,OACtB,OAAC,EAAAC,QAAA,CAEC,KAAMF,EACN,OAAQD,EACR,eAAgBT,EAChB,oBAAqBC,EACrB,YAAaC,EACb,UAAWC,EACX,YAAaC,EACb,sBAAuBC,GARlBM,CASP,CACD,EACH,GACF,CAEJ,CACF,EAEAf,EAAkB,YAAc,oBAChC,IAAON,EAAQM",
6
+ "names": ["BuyOneGetOneShelf_exports", "__export", "BuyOneGetOneShelf_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_ProductCard", "BuyOneGetOneShelf", "className", "classNames", "data", "onProductClick", "onProductImageClick", "onLearnMore", "onShopNow", "onGiftClick", "onGiftSelectionChange", "props", "ref", "products", "layout", "product", "index", "ProductCard"]
7
+ }
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ /**
3
+ * 活动日程项数据接口
4
+ */
5
+ export interface EventScheduleItem {
6
+ /** 标题 */
7
+ title: string;
8
+ /** 日期 */
9
+ date: string;
10
+ /** 是否激活状态 */
11
+ active: boolean;
12
+ /** 背景图片 URL */
13
+ backgroundImage?: string;
14
+ /** 详细信息列表 */
15
+ items: {
16
+ /** 图标 (SVG 字符串或 URL) */
17
+ icon: React.ReactNode;
18
+ /** 文本内容 */
19
+ label: string;
20
+ }[];
21
+ }
22
+ /**
23
+ * EventSchedule 业务组件数据接口
24
+ */
25
+ export interface EventScheduleData {
26
+ /** 日程列表 */
27
+ scheduleList: EventScheduleItem[];
28
+ }
29
+ export interface EventScheduleProps extends React.HTMLAttributes<HTMLDivElement> {
30
+ /** 业务数据 */
31
+ data: EventScheduleData;
32
+ }
33
+ /**
34
+ * EventSchedule - 活动日程组件
35
+ *
36
+ * @description 显示活动日程时间轴和活动卡片列表
37
+ */
38
+ declare const EventSchedule: React.ForwardRefExoticComponent<EventScheduleProps & React.RefAttributes<HTMLDivElement>>;
39
+ export default EventSchedule;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var v=Object.create;var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var E=(e,l)=>{for(var a in l)n(e,a,{get:l[a],enumerable:!0})},o=(e,l,a,r)=>{if(l&&typeof l=="object"||typeof l=="function")for(let s of u(l))!x.call(e,s)&&s!==a&&n(e,s,{get:()=>l[s],enumerable:!(r=p(l,s))||r.enumerable});return e};var h=(e,l,a)=>(a=e!=null?v(f(e)):{},o(l||!e||!e.__esModule?n(a,"default",{value:e,enumerable:!0}):a,e)),b=e=>o(n({},"__esModule",{value:!0}),e);var k={};E(k,{default:()=>S});module.exports=b(k);var t=require("react/jsx-runtime"),g=h(require("react")),i=require("../../helpers/index.js"),d=require("../../components/index.js"),c=require("swiper/react");const N=({active:e})=>(0,t.jsxs)("div",{className:"relative flex h-2 flex-1 items-center justify-center",children:[(0,t.jsx)("div",{className:(0,i.cn)("h-2 w-full",{"bg-[#F6CD4E]":e,"bg-[#EAEAEC]":!e})}),(0,t.jsx)("div",{className:"absolute inset-0 flex items-center justify-center",children:(0,t.jsx)("div",{className:(0,i.cn)("size-4 rounded-full border-2 transition-colors",{"border-[#F6CD4E] bg-[#F6CD4E]":e,"border-[#EAEAEC] bg-[#EAEAEC]":!e})})})]}),C=({scheduleList:e})=>(0,t.jsx)("div",{className:"relative flex h-4 w-full items-center",children:(0,t.jsx)("div",{className:"flex h-2 w-full items-center gap-4 bg-[#EAEAEC]",children:e.map(l=>(0,t.jsx)(N,{active:l.active},l.date))})}),w=({item:e})=>(0,t.jsxs)("div",{className:(0,i.cn)("rounded-box laptop:h-[160px] relative flex h-[120px] min-w-0 flex-1 flex-col justify-between gap-2 overflow-hidden bg-[#F4E8BC] p-4"),children:[e.backgroundImage&&(0,t.jsx)("div",{className:"pointer-events-none absolute inset-0 overflow-hidden",children:(0,t.jsx)(d.Picture,{source:e.backgroundImage,alt:"",className:"absolute right-0 top-[9.69%] h-[91.29%] w-auto max-w-none"})}),(0,t.jsx)("div",{className:"relative z-10",children:(0,t.jsx)("h2",{className:(0,i.cn)("desktop:text-[24px] text-[20px] font-bold leading-[1.2] text-[#080A0F]"),children:e.title})}),(0,t.jsx)("div",{className:"relative z-10 flex flex-col gap-0.5",children:e.items.map((l,a)=>(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[l.icon&&(0,t.jsx)("div",{className:"desktop:size-6 size-5 shrink-0",children:(0,t.jsx)(d.Picture,{source:l.icon,alt:"",className:"size-full"})}),(0,t.jsx)(d.Text,{html:l.label,className:(0,i.cn)("desktop:text-[18px] flex-1 text-[14px] font-bold leading-[1.4] text-[#080A0F]")})]},a))})]}),m=g.forwardRef(({className:e,data:l,...a},r)=>(0,t.jsx)("div",{ref:r,className:(0,i.cn)("desktop:px-16 laptop:px-16 tablet:px-8 w-full px-4",e),...a,children:(0,t.jsx)("div",{className:"flex w-full flex-col gap-4",children:(0,t.jsx)(c.Swiper,{spaceBetween:12,slidesPerView:1,className:"w-full",children:l.scheduleList.map(s=>(0,t.jsx)(c.SwiperSlide,{children:(0,t.jsx)(w,{item:s})},s.date))})})}));m.displayName="EventSchedule";var S=m;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/EventSchedule/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Text, Picture } from '../../components/index.js'\nimport { Swiper, SwiperSlide } from 'swiper/react'\n\n/**\n * \u6D3B\u52A8\u65E5\u7A0B\u9879\u6570\u636E\u63A5\u53E3\n */\nexport interface EventScheduleItem {\n /** \u6807\u9898 */\n title: string\n /** \u65E5\u671F */\n date: string\n /** \u662F\u5426\u6FC0\u6D3B\u72B6\u6001 */\n active: boolean\n /** \u80CC\u666F\u56FE\u7247 URL */\n backgroundImage?: string\n /** \u8BE6\u7EC6\u4FE1\u606F\u5217\u8868 */\n items: {\n /** \u56FE\u6807 (SVG \u5B57\u7B26\u4E32\u6216 URL) */\n icon: React.ReactNode\n /** \u6587\u672C\u5185\u5BB9 */\n label: string\n }[]\n}\n\n/**\n * EventSchedule \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface EventScheduleData {\n /** \u65E5\u7A0B\u5217\u8868 */\n scheduleList: EventScheduleItem[]\n}\n\nexport interface EventScheduleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: EventScheduleData\n}\n\n/**\n * \u65F6\u95F4\u8F74\u8282\u70B9\u7EC4\u4EF6\n */\nconst TimelineNode = ({ active }: { active: boolean }) => {\n return (\n <div className=\"relative flex h-2 flex-1 items-center justify-center\">\n {/* \u8FDB\u5EA6\u6761 */}\n <div\n className={cn('h-2 w-full', {\n 'bg-[#F6CD4E]': active,\n 'bg-[#EAEAEC]': !active,\n })}\n />\n {/* \u65F6\u95F4\u8282\u70B9 */}\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div\n className={cn('size-4 rounded-full border-2 transition-colors', {\n 'border-[#F6CD4E] bg-[#F6CD4E]': active,\n 'border-[#EAEAEC] bg-[#EAEAEC]': !active,\n })}\n />\n </div>\n </div>\n )\n}\n\n/**\n * \u65F6\u95F4\u8F74\u7EC4\u4EF6\n */\nconst Timeline = ({ scheduleList }: { scheduleList: EventScheduleItem[] }) => {\n return (\n <div className=\"relative flex h-4 w-full items-center\">\n <div className=\"flex h-2 w-full items-center gap-4 bg-[#EAEAEC]\">\n {scheduleList.map(item => (\n <TimelineNode key={item.date} active={item.active} />\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * \u6D3B\u52A8\u65E5\u7A0B\u5361\u7247\u7EC4\u4EF6\n */\nconst EventScheduleCard = ({ item }: { item: EventScheduleItem }) => {\n return (\n <div\n className={cn(\n 'rounded-box laptop:h-[160px] relative flex h-[120px] min-w-0 flex-1 flex-col justify-between gap-2 overflow-hidden bg-[#F4E8BC] p-4'\n )}\n >\n {/* \u80CC\u666F\u88C5\u9970\u56FE */}\n {item.backgroundImage && (\n <div className=\"pointer-events-none absolute inset-0 overflow-hidden\">\n <Picture\n source={item.backgroundImage}\n alt=\"\"\n className=\"absolute right-0 top-[9.69%] h-[91.29%] w-auto max-w-none\"\n />\n </div>\n )}\n\n {/* \u5185\u5BB9\u533A\u57DF */}\n <div className=\"relative z-10\">\n <h2 className={cn('desktop:text-[24px] text-[20px] font-bold leading-[1.2] text-[#080A0F]')}>{item.title}</h2>\n </div>\n\n {/* \u8BE6\u7EC6\u4FE1\u606F\u5217\u8868 */}\n <div className=\"relative z-10 flex flex-col gap-0.5\">\n {item.items.map((detail, index) => (\n <div key={index} className=\"flex items-center gap-2\">\n {/* \u56FE\u6807 */}\n {detail.icon && (\n <div className=\"desktop:size-6 size-5 shrink-0\">\n <Picture source={detail.icon as string} alt=\"\" className=\"size-full\" />\n </div>\n )}\n {/* \u6587\u672C */}\n <Text\n html={detail.label}\n className={cn('desktop:text-[18px] flex-1 text-[14px] font-bold leading-[1.4] text-[#080A0F]')}\n />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\n/**\n * EventSchedule - \u6D3B\u52A8\u65E5\u7A0B\u7EC4\u4EF6\n *\n * @description \u663E\u793A\u6D3B\u52A8\u65E5\u7A0B\u65F6\u95F4\u8F74\u548C\u6D3B\u52A8\u5361\u7247\u5217\u8868\n */\nconst EventSchedule = React.forwardRef<HTMLDivElement, EventScheduleProps>(({ className, data, ...props }, ref) => {\n return (\n <div ref={ref} className={cn('desktop:px-16 laptop:px-16 tablet:px-8 w-full px-4', className)} {...props}>\n <div className=\"flex w-full flex-col gap-4\">\n {/* \u65F6\u95F4\u8F74 */}\n {/* <Timeline scheduleList={data.scheduleList} /> */}\n <Swiper spaceBetween={12} slidesPerView={1} className=\"w-full\">\n {data.scheduleList.map(item => (\n <SwiperSlide key={item.date}>\n <EventScheduleCard item={item} />\n </SwiperSlide>\n ))}\n </Swiper>\n </div>\n </div>\n )\n})\n\nEventSchedule.displayName = 'EventSchedule'\nexport default EventSchedule\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA8CI,IAAAI,EAAA,6BA5CJC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAA8B,qCAC9BC,EAAoC,wBAuCpC,MAAMC,EAAe,CAAC,CAAE,OAAAC,CAAO,OAE3B,QAAC,OAAI,UAAU,uDAEb,oBAAC,OACC,aAAW,MAAG,aAAc,CAC1B,eAAgBA,EAChB,eAAgB,CAACA,CACnB,CAAC,EACH,KAEA,OAAC,OAAI,UAAU,oDACb,mBAAC,OACC,aAAW,MAAG,iDAAkD,CAC9D,gCAAiCA,EACjC,gCAAiC,CAACA,CACpC,CAAC,EACH,EACF,GACF,EAOEC,EAAW,CAAC,CAAE,aAAAC,CAAa,OAE7B,OAAC,OAAI,UAAU,wCACb,mBAAC,OAAI,UAAU,kDACZ,SAAAA,EAAa,IAAIC,MAChB,OAACJ,EAAA,CAA6B,OAAQI,EAAK,QAAxBA,EAAK,IAA2B,CACpD,EACH,EACF,EAOEC,EAAoB,CAAC,CAAE,KAAAD,CAAK,OAE9B,QAAC,OACC,aAAW,MACT,qIACF,EAGC,UAAAA,EAAK,oBACJ,OAAC,OAAI,UAAU,uDACb,mBAAC,WACC,OAAQA,EAAK,gBACb,IAAI,GACJ,UAAU,4DACZ,EACF,KAIF,OAAC,OAAI,UAAU,gBACb,mBAAC,MAAG,aAAW,MAAG,wEAAwE,EAAI,SAAAA,EAAK,MAAM,EAC3G,KAGA,OAAC,OAAI,UAAU,sCACZ,SAAAA,EAAK,MAAM,IAAI,CAACE,EAAQC,OACvB,QAAC,OAAgB,UAAU,0BAExB,UAAAD,EAAO,SACN,OAAC,OAAI,UAAU,iCACb,mBAAC,WAAQ,OAAQA,EAAO,KAAgB,IAAI,GAAG,UAAU,YAAY,EACvE,KAGF,OAAC,QACC,KAAMA,EAAO,MACb,aAAW,MAAG,+EAA+E,EAC/F,IAXQC,CAYV,CACD,EACH,GACF,EASEC,EAAgBZ,EAAM,WAA+C,CAAC,CAAE,UAAAa,EAAW,KAAAC,EAAM,GAAGC,CAAM,EAAGC,OAEvG,OAAC,OAAI,IAAKA,EAAK,aAAW,MAAG,qDAAsDH,CAAS,EAAI,GAAGE,EACjG,mBAAC,OAAI,UAAU,6BAGb,mBAAC,UAAO,aAAc,GAAI,cAAe,EAAG,UAAU,SACnD,SAAAD,EAAK,aAAa,IAAIN,MACrB,OAAC,eACC,mBAACC,EAAA,CAAkB,KAAMD,EAAM,GADfA,EAAK,IAEvB,CACD,EACH,EACF,EACF,CAEH,EAEDI,EAAc,YAAc,gBAC5B,IAAOf,EAAQe",
6
+ "names": ["EventSchedule_exports", "__export", "EventSchedule_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "import_react", "TimelineNode", "active", "Timeline", "scheduleList", "item", "EventScheduleCard", "detail", "index", "EventSchedule", "className", "data", "props", "ref"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var N=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var j=(n,s)=>{for(var c in s)N(n,c,{get:s[c],enumerable:!0})},B=(n,s,c,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of W(s))!Z.call(n,i)&&i!==c&&N(n,i,{get:()=>s[i],enumerable:!(l=P(s,i))||l.enumerable});return n};var J=n=>B(N({},"__esModule",{value:!0}),n);var _={};j(_,{CountdownByEndDate:()=>k,default:()=>L});module.exports=J(_);var t=require("react/jsx-runtime"),d=require("../../helpers/index.js"),o=require("react");const m=(n,s=2)=>String(Math.abs(n)).padStart(s,"0"),f="h-full flex-1 max-w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box",p="w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold",k=({endDate:n,endDate_tz:s,locale:c,dateFormat:l,onExpire:i})=>{const g=()=>({day:"Day",hour:"Hours",minute:"Mins",second:"Secs"});function C(e){try{let a=e?.trim?.();return!a?.startsWith?.("{")||!a?.endsWith?.("}")?{}:(a=a?.replace?.(/(\w+)\s*:/g,'"$1":'),JSON.parse(a))}catch{return g()}}const u=(0,o.useMemo)(()=>l?C(l):g(),[l]),r=(0,o.useRef)(Date.parse(n)),[I,h]=(0,o.useState)(()=>{const e=r.current;return isNaN(e)?0:Math.max(0,e-Date.now())}),[x,w]=(0,o.useState)(()=>{const e=r.current;return!isNaN(e)&&e<=Date.now()});(0,o.useEffect)(()=>{r.current=Date.parse(n),h(isNaN(r.current)?0:Math.max(0,r.current-Date.now()));const e=r.current;w(!isNaN(e)&&e<=Date.now())},[n]),(0,o.useEffect)(()=>{if(x||isNaN(r.current))return;let e=!1;const a=()=>{const F=Date.now(),S=Math.max(0,r.current-F);h(S),S<=0&&!e&&(e=!0,w(!0),i?.())};a();const E=window.setInterval(a,1e3);return()=>clearInterval(E)},[i,x]);const b=Math.floor(I/1e3),R=b%60,D=Math.floor(b/60),T=D%60,y=Math.floor(D/60),H=y%24,O=Math.floor(y/24),z=s||Intl.DateTimeFormat().resolvedOptions().timeZone;let M="\u2014";const v=r.current;if(!isNaN(v))try{const e=new Date(v);M=new Intl.DateTimeFormat(c||navigator.language,{timeZone:z,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(e)}catch{M=new Date(v).toISOString()}return x?null:(0,t.jsxs)("div",{className:"countdown-box flex w-full items-center gap-1","aria-live":"polite",children:[(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-days-box"),children:[(0,t.jsx)("p",{className:p,children:m(O,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.day||"Day"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-hours-box"),children:[(0,t.jsx)("p",{className:p,children:m(H,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.hour||"Hours"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-minutes-box"),children:[(0,t.jsx)("p",{className:p,children:m(T,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.minute||"Mins"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-seconds-box"),children:[(0,t.jsx)("p",{className:p,children:m(R,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.second||"Secs"})]})]})};var L=k;
1
+ "use strict";"use client";var N=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var Z=Object.prototype.hasOwnProperty;var j=(n,s)=>{for(var c in s)N(n,c,{get:s[c],enumerable:!0})},B=(n,s,c,l)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of W(s))!Z.call(n,i)&&i!==c&&N(n,i,{get:()=>s[i],enumerable:!(l=P(s,i))||l.enumerable});return n};var J=n=>B(N({},"__esModule",{value:!0}),n);var _={};j(_,{CountdownByEndDate:()=>k,default:()=>L});module.exports=J(_);var t=require("react/jsx-runtime"),d=require("../../helpers/index.js"),o=require("react");const m=(n,s=2)=>String(Math.abs(n)).padStart(s,"0"),f="h-full flex-1 w-12 text-center bg-info-white text-xs text-info-primary overflow-hidden lg-desktop:p-1 p-0.5 font-semibold border-box",p="w-full lg-desktop:text-2xl lg-desktop:h-7 text-xl text-center h-6 lg-desktop:w-10 w-9 font-bold whitespace-nowrap",k=({endDate:n,endDate_tz:s,locale:c,dateFormat:l,onExpire:i})=>{const h=()=>({day:"Day",hour:"Hours",minute:"Mins",second:"Secs"});function C(e){try{let a=e?.trim?.();return!a?.startsWith?.("{")||!a?.endsWith?.("}")?{}:(a=a?.replace?.(/(\w+)\s*:/g,'"$1":'),JSON.parse(a))}catch{return h()}}const u=(0,o.useMemo)(()=>l?C(l):h(),[l]),r=(0,o.useRef)(Date.parse(n)),[I,g]=(0,o.useState)(()=>{const e=r.current;return isNaN(e)?0:Math.max(0,e-Date.now())}),[x,w]=(0,o.useState)(()=>{const e=r.current;return!isNaN(e)&&e<=Date.now()});(0,o.useEffect)(()=>{r.current=Date.parse(n),g(isNaN(r.current)?0:Math.max(0,r.current-Date.now()));const e=r.current;w(!isNaN(e)&&e<=Date.now())},[n]),(0,o.useEffect)(()=>{if(x||isNaN(r.current))return;let e=!1;const a=()=>{const F=Date.now(),S=Math.max(0,r.current-F);g(S),S<=0&&!e&&(e=!0,w(!0),i?.())};a();const E=window.setInterval(a,1e3);return()=>clearInterval(E)},[i,x]);const b=Math.floor(I/1e3),R=b%60,D=Math.floor(b/60),T=D%60,y=Math.floor(D/60),H=y%24,O=Math.floor(y/24),z=s||Intl.DateTimeFormat().resolvedOptions().timeZone;let M="\u2014";const v=r.current;if(!isNaN(v))try{const e=new Date(v);M=new Intl.DateTimeFormat(c||navigator.language,{timeZone:z,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"}).format(e)}catch{M=new Date(v).toISOString()}return x?null:(0,t.jsxs)("div",{className:"countdown-box flex w-full items-center gap-1","aria-live":"polite",children:[(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-days-box"),children:[(0,t.jsx)("p",{className:p,children:m(O,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.day||"Day"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-hours-box"),children:[(0,t.jsx)("p",{className:p,children:m(H,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.hour||"Hours"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-minutes-box"),children:[(0,t.jsx)("p",{className:p,children:m(T,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.minute||"Mins"})]}),(0,t.jsx)("div",{className:"text-info-white text-2xl font-bold",children:":"}),(0,t.jsxs)("div",{className:(0,d.cn)(f,"time-seconds-box"),children:[(0,t.jsx)("p",{className:p,children:m(R,2)}),(0,t.jsx)("div",{className:"truncate",children:u?.second||"Secs"})]})]})};var L=k;
2
2
  //# sourceMappingURL=Countdown.js.map