@anker-in/headless-ui 1.1.74 → 1.1.75

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 (201) hide show
  1. package/dist/cjs/biz-components/ActiveShelf/ProductCard.js +1 -1
  2. package/dist/cjs/biz-components/ActiveShelf/ProductCard.js.map +2 -2
  3. package/dist/cjs/biz-components/ActivityMechanism/index.d.ts +9 -0
  4. package/dist/cjs/biz-components/ActivityMechanism/index.js +2 -0
  5. package/dist/cjs/biz-components/ActivityMechanism/index.js.map +7 -0
  6. package/dist/cjs/biz-components/ActivityMechanism/types.d.ts +43 -0
  7. package/dist/cjs/biz-components/ActivityMechanism/types.js +2 -0
  8. package/dist/cjs/biz-components/ActivityMechanism/types.js.map +7 -0
  9. package/dist/cjs/biz-components/ActivitySchedule/index.d.ts +3 -0
  10. package/dist/cjs/biz-components/ActivitySchedule/index.js +2 -0
  11. package/dist/cjs/biz-components/ActivitySchedule/index.js.map +7 -0
  12. package/dist/cjs/biz-components/ActivitySchedule/types.d.ts +44 -0
  13. package/dist/cjs/biz-components/ActivitySchedule/types.js +2 -0
  14. package/dist/cjs/biz-components/ActivitySchedule/types.js.map +7 -0
  15. package/dist/cjs/biz-components/AnchorNavigation/index.js +1 -1
  16. package/dist/cjs/biz-components/AnchorNavigation/index.js.map +3 -3
  17. package/dist/cjs/biz-components/EventSchedule/index.js +1 -1
  18. package/dist/cjs/biz-components/EventSchedule/index.js.map +2 -2
  19. package/dist/cjs/biz-components/GiftShelf/index.d.ts +3 -0
  20. package/dist/cjs/biz-components/GiftShelf/index.js +2 -0
  21. package/dist/cjs/biz-components/GiftShelf/index.js.map +7 -0
  22. package/dist/cjs/biz-components/GiftShelf/types.d.ts +120 -0
  23. package/dist/cjs/biz-components/GiftShelf/types.js +2 -0
  24. package/dist/cjs/biz-components/GiftShelf/types.js.map +7 -0
  25. package/dist/cjs/biz-components/GiftTierShelf/index.d.ts +3 -0
  26. package/dist/cjs/biz-components/GiftTierShelf/index.js +2 -0
  27. package/dist/cjs/biz-components/GiftTierShelf/index.js.map +7 -0
  28. package/dist/cjs/biz-components/GiftTierShelf/types.d.ts +75 -0
  29. package/dist/cjs/biz-components/GiftTierShelf/types.js +2 -0
  30. package/dist/cjs/biz-components/GiftTierShelf/types.js.map +7 -0
  31. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  32. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +2 -2
  33. package/dist/cjs/biz-components/HeroBanner/types.d.ts +2 -0
  34. package/dist/cjs/biz-components/HeroBanner/types.js +1 -1
  35. package/dist/cjs/biz-components/HeroBanner/types.js.map +1 -1
  36. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js +1 -1
  37. package/dist/cjs/biz-components/ImageWithText/ImageWithText.js.map +2 -2
  38. package/dist/cjs/biz-components/Ksp/index.d.ts +45 -6
  39. package/dist/cjs/biz-components/Ksp/index.js +1 -1
  40. package/dist/cjs/biz-components/Ksp/index.js.map +3 -3
  41. package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
  42. package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +3 -3
  43. package/dist/cjs/biz-components/PromotionalBar/index.js +1 -1
  44. package/dist/cjs/biz-components/PromotionalBar/index.js.map +3 -3
  45. package/dist/cjs/biz-components/Title/index.js +1 -1
  46. package/dist/cjs/biz-components/Title/index.js.map +3 -3
  47. package/dist/cjs/biz-components/Title/types.d.ts +10 -1
  48. package/dist/cjs/biz-components/Title/types.js +1 -1
  49. package/dist/cjs/biz-components/Title/types.js.map +1 -1
  50. package/dist/cjs/biz-components/VideoModal/index.js +1 -1
  51. package/dist/cjs/biz-components/VideoModal/index.js.map +2 -2
  52. package/dist/cjs/biz-components/WheelLottery/BaseModal.d.ts +61 -0
  53. package/dist/cjs/biz-components/WheelLottery/BaseModal.js +2 -0
  54. package/dist/cjs/biz-components/WheelLottery/BaseModal.js.map +7 -0
  55. package/dist/cjs/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
  56. package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js +2 -0
  57. package/dist/cjs/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
  58. package/dist/cjs/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
  59. package/dist/cjs/biz-components/WheelLottery/ErrorModal.js +2 -0
  60. package/dist/cjs/biz-components/WheelLottery/ErrorModal.js.map +7 -0
  61. package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
  62. package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js +2 -0
  63. package/dist/cjs/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
  64. package/dist/cjs/biz-components/WheelLottery/PrizePool.d.ts +29 -0
  65. package/dist/cjs/biz-components/WheelLottery/PrizePool.js +2 -0
  66. package/dist/cjs/biz-components/WheelLottery/PrizePool.js.map +7 -0
  67. package/dist/cjs/biz-components/WheelLottery/RulesModal.d.ts +56 -0
  68. package/dist/cjs/biz-components/WheelLottery/RulesModal.js +2 -0
  69. package/dist/cjs/biz-components/WheelLottery/RulesModal.js.map +7 -0
  70. package/dist/cjs/biz-components/WheelLottery/ShareModal.d.ts +79 -0
  71. package/dist/cjs/biz-components/WheelLottery/ShareModal.js +2 -0
  72. package/dist/cjs/biz-components/WheelLottery/ShareModal.js.map +7 -0
  73. package/dist/cjs/biz-components/WheelLottery/Wheel.d.ts +27 -0
  74. package/dist/cjs/biz-components/WheelLottery/Wheel.js +2 -0
  75. package/dist/cjs/biz-components/WheelLottery/Wheel.js.map +7 -0
  76. package/dist/cjs/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
  77. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +2 -0
  78. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +7 -0
  79. package/dist/cjs/biz-components/WheelLottery/index.d.ts +48 -0
  80. package/dist/cjs/biz-components/WheelLottery/index.js +2 -0
  81. package/dist/cjs/biz-components/WheelLottery/index.js.map +7 -0
  82. package/dist/cjs/biz-components/WheelLottery/types.d.ts +1229 -0
  83. package/dist/cjs/biz-components/WheelLottery/types.js +2 -0
  84. package/dist/cjs/biz-components/WheelLottery/types.js.map +7 -0
  85. package/dist/cjs/biz-components/index.d.ts +11 -0
  86. package/dist/cjs/biz-components/index.js +1 -1
  87. package/dist/cjs/biz-components/index.js.map +3 -3
  88. package/dist/cjs/components/Countdown.d.ts +27 -4
  89. package/dist/cjs/components/Countdown.js +1 -1
  90. package/dist/cjs/components/Countdown.js.map +3 -3
  91. package/dist/cjs/hooks/useCountDown.js +1 -1
  92. package/dist/cjs/hooks/useCountDown.js.map +3 -3
  93. package/dist/cjs/hooks/useDraggableScroll.d.ts +77 -0
  94. package/dist/cjs/hooks/useDraggableScroll.js +2 -0
  95. package/dist/cjs/hooks/useDraggableScroll.js.map +7 -0
  96. package/dist/esm/biz-components/ActiveShelf/ProductCard.js +1 -1
  97. package/dist/esm/biz-components/ActiveShelf/ProductCard.js.map +2 -2
  98. package/dist/esm/biz-components/ActivityMechanism/index.d.ts +9 -0
  99. package/dist/esm/biz-components/ActivityMechanism/index.js +2 -0
  100. package/dist/esm/biz-components/ActivityMechanism/index.js.map +7 -0
  101. package/dist/esm/biz-components/ActivityMechanism/types.d.ts +43 -0
  102. package/dist/esm/biz-components/ActivityMechanism/types.js +1 -0
  103. package/dist/esm/biz-components/ActivityMechanism/types.js.map +7 -0
  104. package/dist/esm/biz-components/ActivitySchedule/index.d.ts +3 -0
  105. package/dist/esm/biz-components/ActivitySchedule/index.js +2 -0
  106. package/dist/esm/biz-components/ActivitySchedule/index.js.map +7 -0
  107. package/dist/esm/biz-components/ActivitySchedule/types.d.ts +44 -0
  108. package/dist/esm/biz-components/ActivitySchedule/types.js +1 -0
  109. package/dist/esm/biz-components/ActivitySchedule/types.js.map +7 -0
  110. package/dist/esm/biz-components/AnchorNavigation/index.js +1 -1
  111. package/dist/esm/biz-components/AnchorNavigation/index.js.map +3 -3
  112. package/dist/esm/biz-components/EventSchedule/index.js +1 -1
  113. package/dist/esm/biz-components/EventSchedule/index.js.map +3 -3
  114. package/dist/esm/biz-components/GiftShelf/index.d.ts +3 -0
  115. package/dist/esm/biz-components/GiftShelf/index.js +2 -0
  116. package/dist/esm/biz-components/GiftShelf/index.js.map +7 -0
  117. package/dist/esm/biz-components/GiftShelf/types.d.ts +120 -0
  118. package/dist/esm/biz-components/GiftShelf/types.js +1 -0
  119. package/dist/esm/biz-components/GiftShelf/types.js.map +7 -0
  120. package/dist/esm/biz-components/GiftTierShelf/index.d.ts +3 -0
  121. package/dist/esm/biz-components/GiftTierShelf/index.js +2 -0
  122. package/dist/esm/biz-components/GiftTierShelf/index.js.map +7 -0
  123. package/dist/esm/biz-components/GiftTierShelf/types.d.ts +75 -0
  124. package/dist/esm/biz-components/GiftTierShelf/types.js +1 -0
  125. package/dist/esm/biz-components/GiftTierShelf/types.js.map +7 -0
  126. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  127. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +2 -2
  128. package/dist/esm/biz-components/HeroBanner/types.d.ts +2 -0
  129. package/dist/esm/biz-components/ImageWithText/ImageWithText.js +1 -1
  130. package/dist/esm/biz-components/ImageWithText/ImageWithText.js.map +2 -2
  131. package/dist/esm/biz-components/Ksp/index.d.ts +45 -6
  132. package/dist/esm/biz-components/Ksp/index.js +1 -1
  133. package/dist/esm/biz-components/Ksp/index.js.map +3 -3
  134. package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
  135. package/dist/esm/biz-components/MediaPlayerBase/index.js.map +3 -3
  136. package/dist/esm/biz-components/PromotionalBar/index.js +1 -1
  137. package/dist/esm/biz-components/PromotionalBar/index.js.map +3 -3
  138. package/dist/esm/biz-components/Title/index.js +1 -1
  139. package/dist/esm/biz-components/Title/index.js.map +3 -3
  140. package/dist/esm/biz-components/Title/types.d.ts +10 -1
  141. package/dist/esm/biz-components/VideoModal/index.js +1 -1
  142. package/dist/esm/biz-components/VideoModal/index.js.map +2 -2
  143. package/dist/esm/biz-components/WheelLottery/BaseModal.d.ts +61 -0
  144. package/dist/esm/biz-components/WheelLottery/BaseModal.js +2 -0
  145. package/dist/esm/biz-components/WheelLottery/BaseModal.js.map +7 -0
  146. package/dist/esm/biz-components/WheelLottery/ChanceMethods.d.ts +25 -0
  147. package/dist/esm/biz-components/WheelLottery/ChanceMethods.js +2 -0
  148. package/dist/esm/biz-components/WheelLottery/ChanceMethods.js.map +7 -0
  149. package/dist/esm/biz-components/WheelLottery/ErrorModal.d.ts +47 -0
  150. package/dist/esm/biz-components/WheelLottery/ErrorModal.js +2 -0
  151. package/dist/esm/biz-components/WheelLottery/ErrorModal.js.map +7 -0
  152. package/dist/esm/biz-components/WheelLottery/MyRewardsModal.d.ts +101 -0
  153. package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js +2 -0
  154. package/dist/esm/biz-components/WheelLottery/MyRewardsModal.js.map +7 -0
  155. package/dist/esm/biz-components/WheelLottery/PrizePool.d.ts +29 -0
  156. package/dist/esm/biz-components/WheelLottery/PrizePool.js +2 -0
  157. package/dist/esm/biz-components/WheelLottery/PrizePool.js.map +7 -0
  158. package/dist/esm/biz-components/WheelLottery/RulesModal.d.ts +56 -0
  159. package/dist/esm/biz-components/WheelLottery/RulesModal.js +2 -0
  160. package/dist/esm/biz-components/WheelLottery/RulesModal.js.map +7 -0
  161. package/dist/esm/biz-components/WheelLottery/ShareModal.d.ts +79 -0
  162. package/dist/esm/biz-components/WheelLottery/ShareModal.js +2 -0
  163. package/dist/esm/biz-components/WheelLottery/ShareModal.js.map +7 -0
  164. package/dist/esm/biz-components/WheelLottery/Wheel.d.ts +27 -0
  165. package/dist/esm/biz-components/WheelLottery/Wheel.js +2 -0
  166. package/dist/esm/biz-components/WheelLottery/Wheel.js.map +7 -0
  167. package/dist/esm/biz-components/WheelLottery/WinnerModal.d.ts +27 -0
  168. package/dist/esm/biz-components/WheelLottery/WinnerModal.js +2 -0
  169. package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +7 -0
  170. package/dist/esm/biz-components/WheelLottery/index.d.ts +48 -0
  171. package/dist/esm/biz-components/WheelLottery/index.js +2 -0
  172. package/dist/esm/biz-components/WheelLottery/index.js.map +7 -0
  173. package/dist/esm/biz-components/WheelLottery/types.d.ts +1229 -0
  174. package/dist/esm/biz-components/WheelLottery/types.js +2 -0
  175. package/dist/esm/biz-components/WheelLottery/types.js.map +7 -0
  176. package/dist/esm/biz-components/index.d.ts +11 -0
  177. package/dist/esm/biz-components/index.js +1 -1
  178. package/dist/esm/biz-components/index.js.map +2 -2
  179. package/dist/esm/components/Countdown.d.ts +27 -4
  180. package/dist/esm/components/Countdown.js +1 -1
  181. package/dist/esm/components/Countdown.js.map +3 -3
  182. package/dist/esm/hooks/useCountDown.js +1 -1
  183. package/dist/esm/hooks/useCountDown.js.map +3 -3
  184. package/dist/esm/hooks/useDraggableScroll.d.ts +77 -0
  185. package/dist/esm/hooks/useDraggableScroll.js +2 -0
  186. package/dist/esm/hooks/useDraggableScroll.js.map +7 -0
  187. package/package.json +1 -1
  188. package/style.css +6252 -862
  189. package/tailwind.config.js +18 -2
  190. package/dist/cjs/biz-components/HeroBanner/Countdown.d.ts +0 -10
  191. package/dist/cjs/biz-components/HeroBanner/Countdown.js +0 -2
  192. package/dist/cjs/biz-components/HeroBanner/Countdown.js.map +0 -7
  193. package/dist/cjs/biz-components/Title/Countdown.d.ts +0 -14
  194. package/dist/cjs/biz-components/Title/Countdown.js +0 -2
  195. package/dist/cjs/biz-components/Title/Countdown.js.map +0 -7
  196. package/dist/esm/biz-components/HeroBanner/Countdown.d.ts +0 -10
  197. package/dist/esm/biz-components/HeroBanner/Countdown.js +0 -2
  198. package/dist/esm/biz-components/HeroBanner/Countdown.js.map +0 -7
  199. package/dist/esm/biz-components/Title/Countdown.d.ts +0 -14
  200. package/dist/esm/biz-components/Title/Countdown.js +0 -2
  201. package/dist/esm/biz-components/Title/Countdown.js.map +0 -7
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var q=Object.create;var p=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var E=(e,i)=>{for(var r in i)p(e,r,{get:i[r],enumerable:!0})},C=(e,i,r,d)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of _(i))!$.call(e,s)&&s!==r&&p(e,s,{get:()=>i[s],enumerable:!(d=M(i,s))||d.enumerable});return e};var I=(e,i,r)=>(r=e!=null?q(R(e)):{},C(i||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),j=e=>C(p({},"__esModule",{value:!0}),e);var K={};E(K,{ProductCard:()=>u,default:()=>G});module.exports=j(K);var a=require("react/jsx-runtime"),c=I(require("react")),n=require("../../helpers/index.js"),t=require("../../components/index.js");const H=5;function O(e,i,r,d){if(e===void 0)return!0;switch(e){case"always":return!0;case"never":return!1;case"below-quantity":return i===void 0?!0:r<=i;case"below-percentage":return i===void 0?!0:r/d*100<=i;default:return!0}}const u=c.forwardRef(({product:e,className:i,showTags:r=!0,stockDisplayMode:d,stockThresholdValue:s,onLearnMore:P,onShopNow:S,onAddToCart:w,classNames:o,secondaryButtonText:f,secondaryButtonFun:y,primaryButtonText:g,primaryButtonFun:v,showOriginalPrice:N,copy:b,onProductImageClick:x},B)=>{const[D,L]=c.useState(!1),[T,F]=c.useState(!1),z=c.useMemo(()=>e?.availableForSale&&e?.quantityAvailable<=0?H:e?.availableForSale?(e?.quantityAvailable??0)/(e?.totalInventory??1)*100:0,[e?.availableForSale,e?.quantityAvailable,e?.totalInventory]),k=async(l,m)=>{if(!l)return;const h=m==="primary"?L:F;h(!0);try{switch(l){case"buyNow":await S?.(e);break;case"addCart":await w?.(e);break;case"learnMore":await P?.(e);break;default:break}}finally{h(!1)}},A=e.availableForSale&&e.quantityAvailable<=0;return(0,a.jsx)(t.Card,{ref:B,className:(0,n.cn)("bg-container-primary hover:bg-container-secondary-0 flex h-full flex-col overflow-hidden border-none",i,o?.productCard),children:(0,a.jsxs)(t.CardContent,{className:"desktop:p-6 relative flex flex-1 flex-col justify-between p-4",children:[(0,a.jsx)("div",{className:"lg-desktop:h-[28px] flex h-[24px] gap-1",children:r&&e.tags?.map((l,m)=>l.label?(0,a.jsx)(t.Badge,{size:"sm",variant:l.variant||"outline",className:(0,n.cn)(l.variant==="promotional"?"ml-2":""),promotionalType:l.promotionalType,children:l.label},m):(0,a.jsx)(c.Fragment,{children:l},m))}),(0,a.jsx)("div",{className:"product-image-wrapper lg-desktop:size-[196px] mx-auto size-[138px] cursor-pointer overflow-hidden",children:(0,a.jsx)("a",{onClick:()=>x?.(e),...!x&&{href:e?.listingLink},rel:"noreferrer",children:(0,a.jsx)(t.Picture,{source:e.image,alt:e.name,className:"aspect-square size-full object-contain",imgClassName:"w-full h-full object-contain"})})}),(0,a.jsxs)("div",{className:"flex h-full flex-1 grow flex-col justify-between",children:[(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)(t.Heading,{as:"h3",size:2,className:(0,n.cn)("text-info-primary mb-2 line-clamp-2 min-h-[2.4em]",o?.productTitle),html:e.custom_name||e.name}),e?.description&&(0,a.jsx)(t.Text,{size:2,className:(0,n.cn)("text-info-secondary desktop:line-clamp-2 desktop:min-h-[2.4em] desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 min-h-[2.4em] text-[14px]",o?.productDescription),html:e.custom_description||e.description})]}),e?.priceLabel&&e?.availableForSale&&(0,a.jsx)(t.Text,{size:4,className:(0,n.cn)("text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] mt-2 text-[14px]",o?.productPriceLabel),children:e.priceLabel}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:(0,n.cn)("mb-2",o?.productPrice),children:(0,a.jsx)("div",{className:"flex items-baseline gap-2",children:e.availableForSale?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.Heading,{size:2,className:"text-info-primary",as:"h6",children:e.price}),N&&e.originalPrice&&(0,a.jsx)(t.Heading,{size:2,className:"text-info-tertiary line-through",as:"h6",children:e.originalPrice})]}):(0,a.jsx)(t.Heading,{size:2,className:"text-info-tertiary",children:b?.outOfStockLabel??"Sold Out"})})}),(0,a.jsxs)("div",{className:(0,n.cn)("lg-desktop:gap-3 tablet:flex-nowrap flex flex-wrap gap-2",o?.buttonGroup),children:[f&&(0,a.jsx)(t.Button,{variant:"secondary",size:"base",className:(0,n.cn)("tablet:w-fit w-full",o?.secondaryButton),onClick:()=>k(y,"secondary"),disabled:!e.availableForSale&&y!=="learnMore",loading:T,"data-headless-type-name":"ActiveShelf#ProductCard","data-headless-title-desc-button":`${e.custom_name||e.name}#${e.description||""}#${f}`,"data-headless-sku":e.sku,children:f}),g&&(0,a.jsx)(t.Button,{variant:"primary",size:"base",className:(0,n.cn)("tablet:w-fit w-full",o?.primaryButton),onClick:()=>k(v,"primary"),disabled:!e.availableForSale&&v!=="learnMore",loading:D,"data-headless-type-name":"ActiveShelf#ProductCard","data-headless-title-desc-button":`${e.custom_name||e.name}#${e.description||""}#${g}`,"data-headless-sku":e.sku,children:g})]}),O(d,s,e?.quantityAvailable??0,e?.totalInventory??0)&&(0,a.jsxs)("div",{className:"mt-4 space-y-2",children:[(0,a.jsx)(t.Progress,{value:z,max:100,min:0,size:"base",variant:"default","aria-label":"stock progress",classNames:{root:(0,n.cn)("bg-[var(--progress-track-bg)]",o?.stockTrack),progressBar:(0,n.cn)("bg-brand-0 transition-all duration-300 ease-in-out",o?.stockBar)}}),(0,a.jsx)(t.Text,{size:3,className:"text-info-tertiary text-[14px]",children:A?b?.limitedStock:b?.stockDisplayText?.replace("{count}",`${e.availableForSale?e.quantityAvailable:0}`)})]})]})]})]})})});u.displayName="ActiveShelf.ProductCard";var G=u;
1
+ "use strict";"use client";var q=Object.create;var p=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var E=(e,i)=>{for(var r in i)p(e,r,{get:i[r],enumerable:!0})},C=(e,i,r,d)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of _(i))!$.call(e,s)&&s!==r&&p(e,s,{get:()=>i[s],enumerable:!(d=M(i,s))||d.enumerable});return e};var I=(e,i,r)=>(r=e!=null?q(R(e)):{},C(i||!e||!e.__esModule?p(r,"default",{value:e,enumerable:!0}):r,e)),j=e=>C(p({},"__esModule",{value:!0}),e);var K={};E(K,{ProductCard:()=>u,default:()=>G});module.exports=j(K);var a=require("react/jsx-runtime"),c=I(require("react")),n=require("../../helpers/index.js"),t=require("../../components/index.js");const H=5;function O(e,i,r,d){if(e===void 0)return!0;switch(e){case"always":return!0;case"never":return!1;case"below-quantity":return i===void 0?!0:r<=i;case"below-percentage":return i===void 0?!0:r/d*100<=i;default:return!0}}const u=c.forwardRef(({product:e,className:i,showTags:r=!0,stockDisplayMode:d,stockThresholdValue:s,onLearnMore:P,onShopNow:S,onAddToCart:w,classNames:o,secondaryButtonText:f,secondaryButtonFun:y,primaryButtonText:g,primaryButtonFun:v,showOriginalPrice:N,copy:b,onProductImageClick:x},B)=>{const[D,L]=c.useState(!1),[T,F]=c.useState(!1),z=c.useMemo(()=>e?.availableForSale&&e?.quantityAvailable<=0?H:e?.availableForSale?(e?.quantityAvailable??0)/(e?.totalInventory??1)*100:0,[e?.availableForSale,e?.quantityAvailable,e?.totalInventory]),k=async(l,m)=>{if(!l)return;const h=m==="primary"?L:F;h(!0);try{switch(l){case"buyNow":await S?.(e);break;case"addCart":await w?.(e);break;case"learnMore":await P?.(e);break;default:break}}finally{h(!1)}},A=e.availableForSale&&e.quantityAvailable<=0;return(0,a.jsx)(t.Card,{ref:B,className:(0,n.cn)("bg-container-primary hover:bg-container-secondary-0 flex h-full flex-col overflow-hidden border-none",i,o?.productCard),children:(0,a.jsxs)(t.CardContent,{className:"desktop:p-6 relative flex flex-1 flex-col justify-between p-4",children:[(0,a.jsx)("div",{className:"lg-desktop:h-[28px] flex h-[24px] gap-1",children:r&&e.tags?.map((l,m)=>l.label?(0,a.jsx)(t.Badge,{size:"sm",variant:l.variant||"outline",className:(0,n.cn)(l.variant==="promotional"?"ml-2":""),promotionalType:l.promotionalType,children:l.label},m):(0,a.jsx)(c.Fragment,{children:l},m))}),(0,a.jsx)("div",{className:"product-image-wrapper lg-desktop:size-[196px] mx-auto size-[138px] cursor-pointer overflow-hidden",children:(0,a.jsx)("a",{onClick:()=>x?.(e),...!x&&{href:e?.listingLink},rel:"noreferrer",children:(0,a.jsx)(t.Picture,{source:e.image,alt:e.name,className:"aspect-square size-full object-contain",imgClassName:"w-full h-full object-contain"})})}),(0,a.jsxs)("div",{className:"flex h-full flex-1 grow flex-col justify-between",children:[(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)(t.Heading,{as:"h3",size:2,className:(0,n.cn)("text-info-primary mb-2 line-clamp-2 min-h-[2.4em]",o?.productTitle),html:e.custom_name||e.name}),e?.description&&(0,a.jsx)(t.Text,{size:2,className:(0,n.cn)("text-info-secondary desktop:line-clamp-2 desktop:min-h-[2.4em] desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 min-h-[2.4em] text-[14px]",o?.productDescription),html:e.custom_description||e.description})]}),e?.priceLabel&&e?.availableForSale&&(0,a.jsx)(t.Text,{size:4,className:(0,n.cn)("text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] mt-2 text-[14px]",o?.productPriceLabel),children:e.priceLabel}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:(0,n.cn)("mb-2",o?.productPrice),children:(0,a.jsx)("div",{className:"flex items-baseline gap-2",children:e.availableForSale?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.Heading,{size:2,className:"text-info-primary",as:"h6",children:e.price}),N&&e.originalPrice&&(0,a.jsx)(t.Heading,{size:2,className:"text-info-tertiary line-through",as:"h6",children:e.originalPrice})]}):(0,a.jsx)(t.Heading,{size:2,className:"text-info-tertiary",children:b?.outOfStockLabel??"Sold Out"})})}),(0,a.jsxs)("div",{className:(0,n.cn)("lg-desktop:gap-3 tablet:flex-nowrap flex flex-wrap gap-2",o?.buttonGroup),children:[f&&(0,a.jsx)(t.Button,{variant:"secondary",size:"base",className:(0,n.cn)("tablet:w-fit w-full",o?.secondaryButton),onClick:()=>k(y,"secondary"),disabled:!e.availableForSale&&y!=="learnMore",loading:T,"data-headless-type-name":"ActiveShelf#ProductCard","data-headless-title-desc-button":`${e.custom_name||e.name}#${e.description||""}#${f}`,"data-headless-sku":e.sku,children:f}),g&&(0,a.jsx)(t.Button,{variant:"primary",size:"base",className:(0,n.cn)("tablet:w-fit w-full",o?.primaryButton),onClick:()=>k(v,"primary"),disabled:!e.availableForSale&&v!=="learnMore",loading:D,"data-headless-type-name":"ActiveShelf#ProductCard","data-headless-title-desc-button":`${e.custom_name||e.name}#${e.description||""}#${g}`,"data-headless-sku":e.sku,children:g})]}),O(d,s,e?.quantityAvailable??0,e?.totalInventory??0)&&(0,a.jsxs)("div",{className:"mt-4 space-y-2",children:[(0,a.jsx)(t.Progress,{value:z,max:100,min:0,size:"base",variant:"default","aria-label":"stock progress",classNames:{root:(0,n.cn)("bg-[var(--progress-track-bg,rgba(0,0,0,0.2))]",o?.stockTrack),progressBar:(0,n.cn)("bg-brand-0 transition-all duration-300 ease-in-out",o?.stockBar)}}),(0,a.jsx)(t.Text,{size:3,className:"text-info-tertiary text-[14px]",children:A?b?.limitedStock:b?.stockDisplayText?.replace("{count}",`${e.availableForSale?e.quantityAvailable:0}`)})]})]})]})]})})});u.displayName="ActiveShelf.ProductCard";var G=u;
2
2
  //# sourceMappingURL=ProductCard.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ActiveShelf/ProductCard.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Button, Badge, Card, CardContent, Picture, Text, Heading, Progress } from '../../components/index.js'\n\nimport type { ButtonFunctionType, CopyConfig } from './types.js'\nimport type { BadgeProps } from '../../components/badge.js'\n\n/**\n * \u8D85\u5356\u65F6\u5E93\u5B58\u6761\u663E\u793A\u7684\u6700\u5C0F\u767E\u5206\u6BD4\n * \u9632\u6B62\u8D85\u5356\u65F6\u5E93\u5B58\u6761\u663E\u793A\u4E3A\u6EE1\u683C\uFF08100%\uFF09\u6216\u5B8C\u5168\u7A7A\uFF080%\uFF09\n */\nconst OVERSELLING_STOCK_PERCENTAGE = 5\n\n/**\n * \u8BED\u4E49\u5316\u7C7B\u540D\n */\nexport type ActiveShelfSemanticName =\n | 'root'\n | 'title'\n | 'description'\n | 'productCard'\n | 'productTitle'\n | 'productDescription'\n | 'productPriceLabel'\n | 'productPrice'\n | 'buttonGroup'\n | 'secondaryButton'\n | 'primaryButton'\n | 'stockTrack'\n | 'stockBar'\n\n/**\n * \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F\n */\nexport type StockDisplayMode = 'always' | 'never' | 'below-quantity' | 'below-percentage'\n\n/**\n * \u57FA\u7840\u4EA7\u54C1\u6570\u636E\u63A5\u53E3\uFF08\u6765\u81EA\u5916\u90E8\u6570\u636E\u6E90\uFF09\n */\nexport interface BaseProductData {\n sku: string\n name: string\n image: string\n value: string\n handle: string\n shopify_id: string\n custom_name?: string\n custom_description?: string\n}\n\n/**\n * Shopify \u53D8\u4F53\u6570\u636E\u63A5\u53E3\n */\nexport interface VariantData {\n /**\n * \u4EA7\u54C1\u63CF\u8FF0\n */\n description?: string\n /**\n * \u53D8\u4F53id\n */\n variantId: string\n\n /**\n * \u4EA7\u54C1\u94FE\u63A5, \u70B9\u51FB\u56FE\u7247\u7684\u65F6\u5019\u8DF3\u8F6C\u5230\u8BE5\u94FE\u63A5\n */\n listingLink: string\n /**\n * \u539F\u4EF7\n */\n originalPrice: string\n /**\n * \u73B0\u4EF7\n */\n price: string\n /**\n * \u4EF7\u683C\u4E0A\u9762\u5C55\u793A\u7684\u6807\u7B7E\u6587\u672C\n */\n priceLabel?: string\n /**\n * \u603B\u5E93\u5B58\n */\n totalInventory: number\n /**\n * \u53EF\u7528\u5E93\u5B58\u6570\u91CF\n */\n quantityAvailable: number\n /**\n * \u662F\u5426\u53EF\u552E\n */\n availableForSale: boolean\n\n /**\n * tags \u5217\u8868(\u4F1A\u5458\u4EF7\uFF0C\u6298\u6263\uFF0Cnew, hot\u7B49\u6807\u7B7E\u4FE1\u606F)\n */\n tags: Array<\n | {\n label: string\n variant: BadgeProps['variant']\n promotionalType?: BadgeProps['promotionalType']\n }\n | React.ReactNode\n >\n /**\n * \u901A\u7528\u6298\u6263\u6570\u636E\uFF0C\u5305\u62EC\u6298\u6263title, \u7C7B\u578B\u548C\u503C\n */\n coupon: any\n}\n\n/**\n * \u5B8C\u6574\u7684\u4EA7\u54C1\u5361\u7247\u6570\u636E\u63A5\u53E3\n */\nexport interface ProductCardData extends BaseProductData, VariantData {}\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6 Props\n */\nexport interface ProductCardProps {\n /** \u4EA7\u54C1\u6570\u636E */\n product: ProductCardData\n /** \u6837\u5F0F\u7C7B\u540D */\n className?: string\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<ActiveShelfSemanticName, string>>\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u529F\u80FD */\n secondaryButtonFun?: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u529F\u80FD */\n primaryButtonFun?: ButtonFunctionType\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CopyConfig\n onProductImageClick?: (product: ProductCardData) => void\n}\n\n/**\n * \u5224\u65AD\u662F\u5426\u5E94\u8BE5\u663E\u793A\u5E93\u5B58\u4FE1\u606F\n * @param stockDisplayMode \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F\n * @param stockThresholdValue \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09\n * @param quantityAvailable \u53EF\u7528\u5E93\u5B58\u6570\u91CF\n * @param totalInventory \u603B\u5E93\u5B58\n * @returns \u662F\u5426\u663E\u793A\u5E93\u5B58\u4FE1\u606F\n */\nfunction shouldShowStock(\n stockDisplayMode: StockDisplayMode | undefined,\n stockThresholdValue: number | undefined,\n quantityAvailable: number,\n totalInventory: number\n): boolean {\n // \u672A\u914D\u7F6E\u65F6\u9ED8\u8BA4\u663E\u793A\n if (stockDisplayMode === undefined) {\n return true\n }\n\n // \u6839\u636E\u5C55\u793A\u6A21\u5F0F\u5224\u65AD\n switch (stockDisplayMode) {\n case 'always':\n // \u603B\u662F\u663E\u793A\n return true\n\n case 'never':\n // \u6C38\u4E0D\u663E\u793A\n return false\n\n case 'below-quantity':\n // \u5F53\u5E93\u5B58\u6570\u91CF\u4F4E\u4E8E\u9608\u503C\u65F6\u663E\u793A\n if (stockThresholdValue === undefined) {\n return true // \u6CA1\u6709\u8BBE\u7F6E\u9608\u503C\u65F6\u9ED8\u8BA4\u663E\u793A\n }\n\n return quantityAvailable <= stockThresholdValue\n\n case 'below-percentage':\n // \u5F53\u5E93\u5B58\u767E\u5206\u6BD4\u4F4E\u4E8E\u9608\u503C\u65F6\u663E\u793A\n if (stockThresholdValue === undefined) {\n return true // \u6CA1\u6709\u8BBE\u7F6E\u9608\u503C\u65F6\u9ED8\u8BA4\u663E\u793A\n }\n return (quantityAvailable / totalInventory) * 100 <= stockThresholdValue\n\n default:\n // \u672A\u77E5\u6A21\u5F0F\u65F6\u9ED8\u8BA4\u663E\u793A\n return true\n }\n}\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6\n */\nconst ProductCard = React.forwardRef<HTMLDivElement, ProductCardProps>(\n (\n {\n product,\n className,\n showTags = true,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n showOriginalPrice,\n copy,\n onProductImageClick,\n },\n ref\n ) => {\n const [primaryLoading, setPrimaryLoading] = React.useState(false)\n const [secondaryLoading, setSecondaryLoading] = React.useState(false)\n\n const stockPercentage = React.useMemo(() => {\n if (product?.availableForSale && product?.quantityAvailable <= 0) {\n return OVERSELLING_STOCK_PERCENTAGE\n }\n // \u4E0D\u53EF\u552E\u65F6\u663E\u793A0%\n if (!product?.availableForSale) {\n return 0\n }\n return ((product?.quantityAvailable ?? 0) / (product?.totalInventory ?? 1)) * 100\n }, [product?.availableForSale, product?.quantityAvailable, product?.totalInventory])\n\n // \u6839\u636E\u6309\u94AE\u529F\u80FD\u7C7B\u578B\u8C03\u7528\u76F8\u5E94\u7684\u56DE\u8C03\u51FD\u6570\n const handleButtonClick = async (buttonFun?: ButtonFunctionType, buttonType?: 'primary' | 'secondary') => {\n if (!buttonFun) return\n\n const setLoading = buttonType === 'primary' ? setPrimaryLoading : setSecondaryLoading\n setLoading(true)\n\n try {\n switch (buttonFun) {\n case 'buyNow':\n await onShopNow?.(product)\n break\n case 'addCart':\n await onAddToCart?.(product)\n break\n case 'learnMore':\n await onLearnMore?.(product)\n break\n default:\n break\n }\n } finally {\n setLoading(false)\n }\n }\n\n const overselling = product.availableForSale && product.quantityAvailable <= 0\n\n return (\n <Card\n ref={ref}\n className={cn(\n 'bg-container-primary hover:bg-container-secondary-0 flex h-full flex-col overflow-hidden border-none',\n className,\n classNames?.productCard\n )}\n >\n <CardContent className=\"desktop:p-6 relative flex flex-1 flex-col justify-between p-4\">\n {/* \u6807\u7B7E */}\n <div className=\"lg-desktop:h-[28px] flex h-[24px] gap-1\">\n {showTags &&\n product.tags?.map((tag: any, index) =>\n (tag as any).label ? (\n <Badge\n key={index}\n size=\"sm\"\n variant={(tag.variant as any) || 'outline'}\n className={cn(tag.variant === 'promotional' ? 'ml-2' : '')}\n promotionalType={tag.promotionalType}\n >\n {tag.label}\n </Badge>\n ) : (\n <React.Fragment key={index}>{tag}</React.Fragment>\n )\n )}\n </div>\n\n {/* \u4EA7\u54C1\u56FE\u533A\u57DF */}\n <div className=\"product-image-wrapper lg-desktop:size-[196px] mx-auto size-[138px] cursor-pointer overflow-hidden\">\n <a\n onClick={() => onProductImageClick?.(product)}\n {...(!onProductImageClick && {\n href: product?.listingLink,\n })}\n rel=\"noreferrer\"\n >\n <Picture\n source={product.image}\n alt={product.name}\n className=\"aspect-square size-full object-contain\"\n imgClassName=\"w-full h-full object-contain\"\n />\n </a>\n </div>\n\n {/* \u5185\u5BB9\u533A\u57DF */}\n <div className=\"flex h-full flex-1 grow flex-col justify-between\">\n {/* \u4EA7\u54C1\u4FE1\u606F */}\n <div className=\"mb-4\">\n <Heading\n as=\"h3\"\n size={2}\n className={cn('text-info-primary mb-2 line-clamp-2 min-h-[2.4em]', classNames?.productTitle)}\n html={product.custom_name || product.name}\n />\n {product?.description && (\n <Text\n size={2}\n className={cn(\n 'text-info-secondary desktop:line-clamp-2 desktop:min-h-[2.4em] desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 min-h-[2.4em] text-[14px]',\n classNames?.productDescription\n )}\n html={product.custom_description || product.description}\n />\n )}\n </div>\n\n {/** \u4EF7\u683C\u6807\u7B7E */}\n\n {product?.priceLabel && product?.availableForSale && (\n <Text\n size={4}\n className={cn(\n 'text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] mt-2 text-[14px]',\n classNames?.productPriceLabel\n )}\n >\n {product.priceLabel}\n </Text>\n )}\n\n {/* \u4EF7\u683C\u533A\u57DF */}\n <div>\n <div className={cn('mb-2', classNames?.productPrice)}>\n <div className=\"flex items-baseline gap-2\">\n {product.availableForSale ? (\n <>\n <Heading size={2} className=\"text-info-primary\" as=\"h6\">\n {product.price}\n </Heading>\n {showOriginalPrice && product.originalPrice && (\n <Heading size={2} className=\"text-info-tertiary line-through\" as=\"h6\">\n {product.originalPrice}\n </Heading>\n )}\n </>\n ) : (\n <Heading size={2} className=\"text-info-tertiary\">\n {copy?.outOfStockLabel ?? 'Sold Out'}\n </Heading>\n )}\n </div>\n </div>\n\n {/* \u6309\u94AE\u533A\u57DF */}\n <div className={cn('lg-desktop:gap-3 tablet:flex-nowrap flex flex-wrap gap-2', classNames?.buttonGroup)}>\n {secondaryButtonText && (\n <Button\n variant=\"secondary\"\n size=\"base\"\n className={cn('tablet:w-fit w-full', classNames?.secondaryButton)}\n onClick={() => handleButtonClick(secondaryButtonFun, 'secondary')}\n disabled={!product.availableForSale && secondaryButtonFun !== 'learnMore'}\n loading={secondaryLoading}\n data-headless-type-name=\"ActiveShelf#ProductCard\"\n data-headless-title-desc-button={`${product.custom_name || product.name}#${product.description || ''}#${secondaryButtonText}`}\n data-headless-sku={product.sku}\n >\n {secondaryButtonText}\n </Button>\n )}\n {primaryButtonText && (\n <Button\n variant=\"primary\"\n size=\"base\"\n className={cn('tablet:w-fit w-full', classNames?.primaryButton)}\n onClick={() => handleButtonClick(primaryButtonFun, 'primary')}\n disabled={!product.availableForSale && primaryButtonFun !== 'learnMore'}\n loading={primaryLoading}\n data-headless-type-name=\"ActiveShelf#ProductCard\"\n data-headless-title-desc-button={`${product.custom_name || product.name}#${product.description || ''}#${primaryButtonText}`}\n data-headless-sku={product.sku}\n >\n {primaryButtonText}\n </Button>\n )}\n </div>\n\n {/* \u5E93\u5B58\u4FE1\u606F */}\n {shouldShowStock(\n stockDisplayMode,\n stockThresholdValue,\n product?.quantityAvailable ?? 0,\n product?.totalInventory ?? 0\n ) && (\n <div className=\"mt-4 space-y-2\">\n <Progress\n value={stockPercentage}\n max={100}\n min={0}\n size=\"base\"\n variant=\"default\"\n aria-label=\"stock progress\"\n classNames={{\n root: cn('bg-[var(--progress-track-bg)]', classNames?.stockTrack),\n progressBar: cn('bg-brand-0 transition-all duration-300 ease-in-out', classNames?.stockBar),\n }}\n />\n <Text size={3} className=\"text-info-tertiary text-[14px]\">\n {overselling\n ? copy?.limitedStock\n : copy?.stockDisplayText?.replace(\n '{count}',\n `${product.availableForSale ? product.quantityAvailable : 0}`\n )}\n </Text>\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n )\n }\n)\n\nProductCard.displayName = 'ActiveShelf.ProductCard'\n\nexport { ProductCard }\nexport default ProductCard\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Button, Badge, Card, CardContent, Picture, Text, Heading, Progress } from '../../components/index.js'\n\nimport type { ButtonFunctionType, CopyConfig } from './types.js'\nimport type { BadgeProps } from '../../components/badge.js'\n\n/**\n * \u8D85\u5356\u65F6\u5E93\u5B58\u6761\u663E\u793A\u7684\u6700\u5C0F\u767E\u5206\u6BD4\n * \u9632\u6B62\u8D85\u5356\u65F6\u5E93\u5B58\u6761\u663E\u793A\u4E3A\u6EE1\u683C\uFF08100%\uFF09\u6216\u5B8C\u5168\u7A7A\uFF080%\uFF09\n */\nconst OVERSELLING_STOCK_PERCENTAGE = 5\n\n/**\n * \u8BED\u4E49\u5316\u7C7B\u540D\n */\nexport type ActiveShelfSemanticName =\n | 'root'\n | 'title'\n | 'description'\n | 'productCard'\n | 'productTitle'\n | 'productDescription'\n | 'productPriceLabel'\n | 'productPrice'\n | 'buttonGroup'\n | 'secondaryButton'\n | 'primaryButton'\n | 'stockTrack'\n | 'stockBar'\n\n/**\n * \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F\n */\nexport type StockDisplayMode = 'always' | 'never' | 'below-quantity' | 'below-percentage'\n\n/**\n * \u57FA\u7840\u4EA7\u54C1\u6570\u636E\u63A5\u53E3\uFF08\u6765\u81EA\u5916\u90E8\u6570\u636E\u6E90\uFF09\n */\nexport interface BaseProductData {\n sku: string\n name: string\n image: string\n value: string\n handle: string\n shopify_id: string\n custom_name?: string\n custom_description?: string\n}\n\n/**\n * Shopify \u53D8\u4F53\u6570\u636E\u63A5\u53E3\n */\nexport interface VariantData {\n /**\n * \u4EA7\u54C1\u63CF\u8FF0\n */\n description?: string\n /**\n * \u53D8\u4F53id\n */\n variantId: string\n\n /**\n * \u4EA7\u54C1\u94FE\u63A5, \u70B9\u51FB\u56FE\u7247\u7684\u65F6\u5019\u8DF3\u8F6C\u5230\u8BE5\u94FE\u63A5\n */\n listingLink: string\n /**\n * \u539F\u4EF7\n */\n originalPrice: string\n /**\n * \u73B0\u4EF7\n */\n price: string\n /**\n * \u4EF7\u683C\u4E0A\u9762\u5C55\u793A\u7684\u6807\u7B7E\u6587\u672C\n */\n priceLabel?: string\n /**\n * \u603B\u5E93\u5B58\n */\n totalInventory: number\n /**\n * \u53EF\u7528\u5E93\u5B58\u6570\u91CF\n */\n quantityAvailable: number\n /**\n * \u662F\u5426\u53EF\u552E\n */\n availableForSale: boolean\n\n /**\n * tags \u5217\u8868(\u4F1A\u5458\u4EF7\uFF0C\u6298\u6263\uFF0Cnew, hot\u7B49\u6807\u7B7E\u4FE1\u606F)\n */\n tags: Array<\n | {\n label: string\n variant: BadgeProps['variant']\n promotionalType?: BadgeProps['promotionalType']\n }\n | React.ReactNode\n >\n /**\n * \u901A\u7528\u6298\u6263\u6570\u636E\uFF0C\u5305\u62EC\u6298\u6263title, \u7C7B\u578B\u548C\u503C\n */\n coupon: any\n}\n\n/**\n * \u5B8C\u6574\u7684\u4EA7\u54C1\u5361\u7247\u6570\u636E\u63A5\u53E3\n */\nexport interface ProductCardData extends BaseProductData, VariantData {}\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6 Props\n */\nexport interface ProductCardProps {\n /** \u4EA7\u54C1\u6570\u636E */\n product: ProductCardData\n /** \u6837\u5F0F\u7C7B\u540D */\n className?: string\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F */\n stockDisplayMode?: StockDisplayMode\n /** \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09 */\n stockThresholdValue?: number\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: ProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: ProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<ActiveShelfSemanticName, string>>\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u6587\u672C */\n secondaryButtonText?: string\n /** \u4E86\u89E3\u66F4\u591A\u6309\u94AE\u529F\u80FD */\n secondaryButtonFun?: ButtonFunctionType\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u6587\u672C */\n primaryButtonText?: string\n /** \u7ACB\u5373\u8D2D\u4E70\u6309\u94AE\u529F\u80FD */\n primaryButtonFun?: ButtonFunctionType\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7\uFF08\u5220\u9664\u7EBF\u4EF7\u683C\uFF09 */\n showOriginalPrice?: boolean\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CopyConfig\n onProductImageClick?: (product: ProductCardData) => void\n}\n\n/**\n * \u5224\u65AD\u662F\u5426\u5E94\u8BE5\u663E\u793A\u5E93\u5B58\u4FE1\u606F\n * @param stockDisplayMode \u5E93\u5B58\u5C55\u793A\u6A21\u5F0F\n * @param stockThresholdValue \u5E93\u5B58\u9608\u503C\uFF08\u5F53\u6A21\u5F0F\u4E3A below-quantity \u6216 below-percentage \u65F6\u4F7F\u7528\uFF09\n * @param quantityAvailable \u53EF\u7528\u5E93\u5B58\u6570\u91CF\n * @param totalInventory \u603B\u5E93\u5B58\n * @returns \u662F\u5426\u663E\u793A\u5E93\u5B58\u4FE1\u606F\n */\nfunction shouldShowStock(\n stockDisplayMode: StockDisplayMode | undefined,\n stockThresholdValue: number | undefined,\n quantityAvailable: number,\n totalInventory: number\n): boolean {\n // \u672A\u914D\u7F6E\u65F6\u9ED8\u8BA4\u663E\u793A\n if (stockDisplayMode === undefined) {\n return true\n }\n\n // \u6839\u636E\u5C55\u793A\u6A21\u5F0F\u5224\u65AD\n switch (stockDisplayMode) {\n case 'always':\n // \u603B\u662F\u663E\u793A\n return true\n\n case 'never':\n // \u6C38\u4E0D\u663E\u793A\n return false\n\n case 'below-quantity':\n // \u5F53\u5E93\u5B58\u6570\u91CF\u4F4E\u4E8E\u9608\u503C\u65F6\u663E\u793A\n if (stockThresholdValue === undefined) {\n return true // \u6CA1\u6709\u8BBE\u7F6E\u9608\u503C\u65F6\u9ED8\u8BA4\u663E\u793A\n }\n\n return quantityAvailable <= stockThresholdValue\n\n case 'below-percentage':\n // \u5F53\u5E93\u5B58\u767E\u5206\u6BD4\u4F4E\u4E8E\u9608\u503C\u65F6\u663E\u793A\n if (stockThresholdValue === undefined) {\n return true // \u6CA1\u6709\u8BBE\u7F6E\u9608\u503C\u65F6\u9ED8\u8BA4\u663E\u793A\n }\n return (quantityAvailable / totalInventory) * 100 <= stockThresholdValue\n\n default:\n // \u672A\u77E5\u6A21\u5F0F\u65F6\u9ED8\u8BA4\u663E\u793A\n return true\n }\n}\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6\n */\nconst ProductCard = React.forwardRef<HTMLDivElement, ProductCardProps>(\n (\n {\n product,\n className,\n showTags = true,\n stockDisplayMode,\n stockThresholdValue,\n onLearnMore,\n onShopNow,\n onAddToCart,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n showOriginalPrice,\n copy,\n onProductImageClick,\n },\n ref\n ) => {\n const [primaryLoading, setPrimaryLoading] = React.useState(false)\n const [secondaryLoading, setSecondaryLoading] = React.useState(false)\n\n const stockPercentage = React.useMemo(() => {\n if (product?.availableForSale && product?.quantityAvailable <= 0) {\n return OVERSELLING_STOCK_PERCENTAGE\n }\n // \u4E0D\u53EF\u552E\u65F6\u663E\u793A0%\n if (!product?.availableForSale) {\n return 0\n }\n return ((product?.quantityAvailable ?? 0) / (product?.totalInventory ?? 1)) * 100\n }, [product?.availableForSale, product?.quantityAvailable, product?.totalInventory])\n\n // \u6839\u636E\u6309\u94AE\u529F\u80FD\u7C7B\u578B\u8C03\u7528\u76F8\u5E94\u7684\u56DE\u8C03\u51FD\u6570\n const handleButtonClick = async (buttonFun?: ButtonFunctionType, buttonType?: 'primary' | 'secondary') => {\n if (!buttonFun) return\n\n const setLoading = buttonType === 'primary' ? setPrimaryLoading : setSecondaryLoading\n setLoading(true)\n\n try {\n switch (buttonFun) {\n case 'buyNow':\n await onShopNow?.(product)\n break\n case 'addCart':\n await onAddToCart?.(product)\n break\n case 'learnMore':\n await onLearnMore?.(product)\n break\n default:\n break\n }\n } finally {\n setLoading(false)\n }\n }\n\n const overselling = product.availableForSale && product.quantityAvailable <= 0\n\n return (\n <Card\n ref={ref}\n className={cn(\n 'bg-container-primary hover:bg-container-secondary-0 flex h-full flex-col overflow-hidden border-none',\n className,\n classNames?.productCard\n )}\n >\n <CardContent className=\"desktop:p-6 relative flex flex-1 flex-col justify-between p-4\">\n {/* \u6807\u7B7E */}\n <div className=\"lg-desktop:h-[28px] flex h-[24px] gap-1\">\n {showTags &&\n product.tags?.map((tag: any, index) =>\n (tag as any).label ? (\n <Badge\n key={index}\n size=\"sm\"\n variant={(tag.variant as any) || 'outline'}\n className={cn(tag.variant === 'promotional' ? 'ml-2' : '')}\n promotionalType={tag.promotionalType}\n >\n {tag.label}\n </Badge>\n ) : (\n <React.Fragment key={index}>{tag}</React.Fragment>\n )\n )}\n </div>\n\n {/* \u4EA7\u54C1\u56FE\u533A\u57DF */}\n <div className=\"product-image-wrapper lg-desktop:size-[196px] mx-auto size-[138px] cursor-pointer overflow-hidden\">\n <a\n onClick={() => onProductImageClick?.(product)}\n {...(!onProductImageClick && {\n href: product?.listingLink,\n })}\n rel=\"noreferrer\"\n >\n <Picture\n source={product.image}\n alt={product.name}\n className=\"aspect-square size-full object-contain\"\n imgClassName=\"w-full h-full object-contain\"\n />\n </a>\n </div>\n\n {/* \u5185\u5BB9\u533A\u57DF */}\n <div className=\"flex h-full flex-1 grow flex-col justify-between\">\n {/* \u4EA7\u54C1\u4FE1\u606F */}\n <div className=\"mb-4\">\n <Heading\n as=\"h3\"\n size={2}\n className={cn('text-info-primary mb-2 line-clamp-2 min-h-[2.4em]', classNames?.productTitle)}\n html={product.custom_name || product.name}\n />\n {product?.description && (\n <Text\n size={2}\n className={cn(\n 'text-info-secondary desktop:line-clamp-2 desktop:min-h-[2.4em] desktop:text-[16px] lg-desktop:text-[18px] line-clamp-2 min-h-[2.4em] text-[14px]',\n classNames?.productDescription\n )}\n html={product.custom_description || product.description}\n />\n )}\n </div>\n\n {/** \u4EF7\u683C\u6807\u7B7E */}\n\n {product?.priceLabel && product?.availableForSale && (\n <Text\n size={4}\n className={cn(\n 'text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] mt-2 text-[14px]',\n classNames?.productPriceLabel\n )}\n >\n {product.priceLabel}\n </Text>\n )}\n\n {/* \u4EF7\u683C\u533A\u57DF */}\n <div>\n <div className={cn('mb-2', classNames?.productPrice)}>\n <div className=\"flex items-baseline gap-2\">\n {product.availableForSale ? (\n <>\n <Heading size={2} className=\"text-info-primary\" as=\"h6\">\n {product.price}\n </Heading>\n {showOriginalPrice && product.originalPrice && (\n <Heading size={2} className=\"text-info-tertiary line-through\" as=\"h6\">\n {product.originalPrice}\n </Heading>\n )}\n </>\n ) : (\n <Heading size={2} className=\"text-info-tertiary\">\n {copy?.outOfStockLabel ?? 'Sold Out'}\n </Heading>\n )}\n </div>\n </div>\n\n {/* \u6309\u94AE\u533A\u57DF */}\n <div className={cn('lg-desktop:gap-3 tablet:flex-nowrap flex flex-wrap gap-2', classNames?.buttonGroup)}>\n {secondaryButtonText && (\n <Button\n variant=\"secondary\"\n size=\"base\"\n className={cn('tablet:w-fit w-full', classNames?.secondaryButton)}\n onClick={() => handleButtonClick(secondaryButtonFun, 'secondary')}\n disabled={!product.availableForSale && secondaryButtonFun !== 'learnMore'}\n loading={secondaryLoading}\n data-headless-type-name=\"ActiveShelf#ProductCard\"\n data-headless-title-desc-button={`${product.custom_name || product.name}#${product.description || ''}#${secondaryButtonText}`}\n data-headless-sku={product.sku}\n >\n {secondaryButtonText}\n </Button>\n )}\n {primaryButtonText && (\n <Button\n variant=\"primary\"\n size=\"base\"\n className={cn('tablet:w-fit w-full', classNames?.primaryButton)}\n onClick={() => handleButtonClick(primaryButtonFun, 'primary')}\n disabled={!product.availableForSale && primaryButtonFun !== 'learnMore'}\n loading={primaryLoading}\n data-headless-type-name=\"ActiveShelf#ProductCard\"\n data-headless-title-desc-button={`${product.custom_name || product.name}#${product.description || ''}#${primaryButtonText}`}\n data-headless-sku={product.sku}\n >\n {primaryButtonText}\n </Button>\n )}\n </div>\n\n {/* \u5E93\u5B58\u4FE1\u606F */}\n {shouldShowStock(\n stockDisplayMode,\n stockThresholdValue,\n product?.quantityAvailable ?? 0,\n product?.totalInventory ?? 0\n ) && (\n <div className=\"mt-4 space-y-2\">\n <Progress\n value={stockPercentage}\n max={100}\n min={0}\n size=\"base\"\n variant=\"default\"\n aria-label=\"stock progress\"\n classNames={{\n root: cn('bg-[var(--progress-track-bg,rgba(0,0,0,0.2))]', classNames?.stockTrack),\n progressBar: cn('bg-brand-0 transition-all duration-300 ease-in-out', classNames?.stockBar),\n }}\n />\n <Text size={3} className=\"text-info-tertiary text-[14px]\">\n {overselling\n ? copy?.limitedStock\n : copy?.stockDisplayText?.replace(\n '{count}',\n `${product.availableForSale ? product.quantityAvailable : 0}`\n )}\n </Text>\n </div>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n )\n }\n)\n\nProductCard.displayName = 'ActiveShelf.ProductCard'\n\nexport { ProductCard }\nexport default ProductCard\n"],
5
+ "mappings": "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",
6
6
  "names": ["ProductCard_exports", "__export", "ProductCard", "ProductCard_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "OVERSELLING_STOCK_PERCENTAGE", "shouldShowStock", "stockDisplayMode", "stockThresholdValue", "quantityAvailable", "totalInventory", "product", "className", "showTags", "onLearnMore", "onShopNow", "onAddToCart", "classNames", "secondaryButtonText", "secondaryButtonFun", "primaryButtonText", "primaryButtonFun", "showOriginalPrice", "copy", "onProductImageClick", "ref", "primaryLoading", "setPrimaryLoading", "secondaryLoading", "setSecondaryLoading", "stockPercentage", "handleButtonClick", "buttonFun", "buttonType", "setLoading", "overselling", "tag", "index"]
7
7
  }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { ActivityMechanismProps } from './types.js';
3
+ /**
4
+ * ActivityMechanism - 活动机制组件
5
+ *
6
+ * @description 展示活动机制/会员权益等卡片列表的组件,支持响应式布局和主题切换
7
+ */
8
+ declare const ActivityMechanism: React.ForwardRefExoticComponent<ActivityMechanismProps & React.RefAttributes<HTMLDivElement>>;
9
+ export default ActivityMechanism;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var V=Object.create;var h=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var D=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var w=(t,e)=>{for(var i in e)h(t,i,{get:e[i],enumerable:!0})},A=(t,e,i,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of N(e))!P.call(t,a)&&a!==i&&h(t,a,{get:()=>e[a],enumerable:!(s=C(e,a))||s.enumerable});return t};var H=(t,e,i)=>(i=t!=null?V(D(t)):{},A(e||!t||!t.__esModule?h(i,"default",{value:t,enumerable:!0}):i,t)),L=t=>A(h({},"__esModule",{value:!0}),t);var b={};w(b,{default:()=>j});module.exports=L(b);var l=require("react/jsx-runtime"),c=H(require("react")),o=require("../../components/index.js"),O=require("../../shared/Styles.js"),r=require("../../helpers/utils.js"),R=require("../../hooks/useExposure.js"),x=require("../../shared/trackUrlRef.js"),g=require("class-variance-authority"),y=require("../../helpers/index.js"),T=require("../AiuiProvider/index.js");const u="image",f="activity_mechanism",B=(0,g.cva)("line-clamp-2",{variants:{theme:{light:"text-[#080A0F]",dark:"text-white"}},defaultVariants:{theme:"light"}}),z=(0,g.cva)("desktop:text-[16px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] tracking-[-0.02em]",{variants:{theme:{light:"text-[#080A0F]",dark:"text-white/80"}},defaultVariants:{theme:"light"}}),E=(0,g.cva)("mt-2 !p-0 text-[14px]",{variants:{theme:{light:"text-[#080A0F]",dark:"text-white"}},defaultVariants:{theme:"light"}}),v={default:767,tablet:1024,laptop:1439,desktop:1919,lgDesktop:9999},S=t=>{if(!t)return"";const e=[];return t.lgDesktop?.url&&e.push(`${t.lgDesktop.url}`),t.desktop?.url&&e.push(`${t.desktop.url} ${v.desktop}`),t.laptop?.url&&e.push(`${t.laptop.url} ${v.laptop}`),t.tablet?.url&&e.push(`${t.tablet.url} ${v.tablet}`),t.default?.url&&e.push(`${t.default.url} ${v.default}`),e.join(", ")},F=t=>t&&(t.default?.alt||t.tablet?.alt||t.laptop?.alt||t.desktop?.alt||t.lgDesktop?.alt)||"",_=({item:t,theme:e,classNames:i})=>{const{title:s,description:a,linkText:n,linkHref:p,backgroundImage:m}=t,d=S(m),k=F(m),{locale:$="us"}=(0,T.useAiuiContext)();return(0,l.jsx)("div",{className:(0,r.cn)("rounded-card relative flex flex-col overflow-hidden","desktop:px-6 h-[280px] p-4","laptop:gap-4 gap-3","laptop:h-[320px] lg-desktop:[400px]",i?.card),"data-headless-type-name":`${u}#${f}`,children:(0,l.jsxs)(o.Link,{asChild:!p,href:(0,y.getLocalizedPath)((0,x.trackUrlRef)(p,`${u}_${f}`),$),className:"no-underline",children:[d&&(0,l.jsx)(o.Picture,{source:d,alt:k||s,className:(0,r.cn)("absolute inset-0 size-full",i?.background),imgClassName:"size-full object-cover"}),(0,l.jsxs)("div",{className:"relative z-10",children:[(0,l.jsx)(o.Heading,{as:"h3",size:3,className:(0,r.cn)(B({theme:e}),i?.title),children:s}),(0,l.jsx)(o.Text,{as:"p",className:(0,r.cn)(z({theme:e}),i?.description),children:a}),n&&p&&(0,l.jsx)(o.Button,{variant:"link",as:"a",href:(0,y.getLocalizedPath)((0,x.trackUrlRef)(p,`${u}_${f}`),$),className:(0,r.cn)(E({theme:e}),i?.link),"data-headless-title-desc-button":`${s}#${a}#${n}`,children:n})]})]})})},M=c.default.forwardRef(({data:t,classNames:e},i)=>{const{items:s=[],theme:a="light"}=t,n=(0,c.useRef)(null);if((0,c.useImperativeHandle)(i,()=>n.current),(0,R.useExposure)(n,{componentType:u,componentName:f,componentTitle:s[0]?.title||"",componentDescription:s[0]?.description||""}),!s||s.length===0)return null;const p={1:"laptop:grid-cols-1 desktop:grid-cols-1 lg-desktop:grid-cols-1",2:"laptop:grid-cols-2 desktop:grid-cols-2 lg-desktop:grid-cols-2",3:"tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-3 lg-desktop:grid-cols-3",4:"laptop:grid-cols-4 desktop:grid-cols-4 lg-desktop:grid-cols-4"},m=p[Math.min(s.length,4)]||p[4];return(0,l.jsx)(o.Container,{"data-ui-component-id":"ActivityMechanism",className:(0,r.cn)("activity-mechanism","w-full",e?.root),ref:n,children:(0,l.jsx)("div",{className:(0,r.cn)("tablet:grid-cols-2 laptop:gap-4 grid grid-cols-1 gap-3",m,e?.grid),children:s.map((d,k)=>(0,l.jsx)(_,{item:d,theme:a,classNames:{...e,...s?.length===3&&{card:e?.card+" first:tablet:col-span-full first:laptop:col-span-1"}}},`${d.title}-${k}`))})})});M.displayName="ActivityMechanism";var j=M;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/ActivityMechanism/index.tsx"],
4
+ "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef } from 'react'\nimport { Heading, Picture, Text, Button, Link, Container } from '../../components/index.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport type {\n ActivityMechanismProps,\n ActivityMechanismItem,\n ActivityMechanismSemanticName,\n ResponsiveBackgroundImage,\n} from './types.js'\nimport { cn } from '../../helpers/utils.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport { getLocalizedPath } from '../../helpers/index.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\n\nconst componentType = 'image'\nconst componentName = 'activity_mechanism'\n\n/**\n * \u6807\u9898\u6837\u5F0F\u53D8\u4F53\n */\nconst titleVariants = cva('line-clamp-2', {\n variants: {\n theme: {\n light: 'text-[#080A0F]',\n dark: 'text-white',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\n/**\n * \u63CF\u8FF0\u6837\u5F0F\u53D8\u4F53\n */\nconst descriptionVariants = cva(\n 'desktop:text-[16px] mt-1 line-clamp-2 text-[14px] font-bold leading-[1.4] tracking-[-0.02em]',\n {\n variants: {\n theme: {\n light: 'text-[#080A0F]',\n dark: 'text-white/80',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\n/**\n * \u94FE\u63A5\u6837\u5F0F\u53D8\u4F53\n */\nconst linkVariants = cva('mt-2 !p-0 text-[14px]', {\n variants: {\n theme: {\n light: 'text-[#080A0F]',\n dark: 'text-white',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\ntype ThemeVariants = VariantProps<typeof titleVariants>\n\n/**\n * \u65AD\u70B9\u914D\u7F6E\uFF08\u4E0E Tailwind \u65AD\u70B9\u5BF9\u5E94\uFF09\n * Picture \u7EC4\u4EF6\u4F7F\u7528 max-width \u5A92\u4F53\u67E5\u8BE2\uFF0C\u6240\u4EE5\u9700\u8981\u6309\u4ECE\u5C0F\u5230\u5927\u7684\u987A\u5E8F\u6392\u5217\n */\nconst BREAKPOINTS = {\n default: 767, // <768px (\u79FB\u52A8\u7AEF)\n tablet: 1024, // 768px - 1024px\n laptop: 1439, // 1025px - 1439px\n desktop: 1919, // 1440px - 1919px\n lgDesktop: 9999, // \u22651920px (\u6700\u5927\u503C\uFF0C\u4F5C\u4E3A\u9ED8\u8BA4\u56FE\u7247)\n} as const\n\n/**\n * \u5C06\u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u5BF9\u8C61\u8F6C\u6362\u4E3A Picture \u7EC4\u4EF6\u7684 source \u5B57\u7B26\u4E32\n * \u683C\u5F0F: \"url1 767, url2 1024, url3 1439, url4 1919, url5\"\n */\nconst buildResponsiveSource = (backgroundImage?: ResponsiveBackgroundImage): string => {\n if (!backgroundImage) return ''\n\n const sources: string[] = []\n\n // \u6309\u65AD\u70B9\u987A\u5E8F\u6DFB\u52A0\u56FE\u7247 URL\n // lgDesktop \u4F5C\u4E3A\u9ED8\u8BA4\u56FE\u7247\uFF0C\u4E0D\u9700\u8981\u65AD\u70B9\u503C\n if (backgroundImage.lgDesktop?.url) {\n sources.push(`${backgroundImage.lgDesktop.url}`)\n }\n if (backgroundImage.desktop?.url) {\n sources.push(`${backgroundImage.desktop.url} ${BREAKPOINTS.desktop}`)\n }\n if (backgroundImage.laptop?.url) {\n sources.push(`${backgroundImage.laptop.url} ${BREAKPOINTS.laptop}`)\n }\n if (backgroundImage.tablet?.url) {\n sources.push(`${backgroundImage.tablet.url} ${BREAKPOINTS.tablet}`)\n }\n if (backgroundImage.default?.url) {\n sources.push(`${backgroundImage.default.url} ${BREAKPOINTS.default}`)\n }\n\n return sources.join(', ')\n}\n\n/**\n * \u83B7\u53D6\u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u7684\u9ED8\u8BA4 alt \u6587\u672C\n */\nconst getDefaultAlt = (backgroundImage?: ResponsiveBackgroundImage): string => {\n if (!backgroundImage) return ''\n return (\n backgroundImage.default?.alt ||\n backgroundImage.tablet?.alt ||\n backgroundImage.laptop?.alt ||\n backgroundImage.desktop?.alt ||\n backgroundImage.lgDesktop?.alt ||\n ''\n )\n}\n\n/**\n * \u5355\u4E2A\u6D3B\u52A8\u673A\u5236\u5361\u7247\u7EC4\u4EF6\n */\nconst ActivityMechanismCard: React.FC<{\n item: ActivityMechanismItem\n theme?: ThemeVariants['theme']\n classNames?: Partial<Record<ActivityMechanismSemanticName, string>>\n}> = ({ item, theme, classNames }) => {\n const { title, description, linkText, linkHref, backgroundImage } = item\n const responsiveSource = buildResponsiveSource(backgroundImage)\n const defaultAlt = getDefaultAlt(backgroundImage)\n const { locale = 'us' } = useAiuiContext()\n\n return (\n <div\n className={cn(\n 'rounded-card relative flex flex-col overflow-hidden',\n 'desktop:px-6 h-[280px] p-4',\n 'laptop:gap-4 gap-3',\n 'laptop:h-[320px] lg-desktop:[400px]',\n classNames?.card\n )}\n data-headless-type-name={`${componentType}#${componentName}`}\n >\n <Link\n asChild={!linkHref}\n href={getLocalizedPath(trackUrlRef(linkHref, `${componentType}_${componentName}`), locale)}\n className=\"no-underline\"\n >\n {/* \u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247 */}\n {responsiveSource && (\n <Picture\n source={responsiveSource}\n alt={defaultAlt || title}\n className={cn('absolute inset-0 size-full', classNames?.background)}\n imgClassName=\"size-full object-cover\"\n />\n )}\n\n {/* \u6587\u672C\u5185\u5BB9\u533A\u57DF */}\n <div className=\"relative z-10\">\n <Heading as=\"h3\" size={3} className={cn(titleVariants({ theme }), classNames?.title)}>\n {title}\n </Heading>\n <Text as=\"p\" className={cn(descriptionVariants({ theme }), classNames?.description)}>\n {description}\n </Text>\n {linkText && linkHref && (\n <Button\n variant=\"link\"\n as=\"a\"\n href={getLocalizedPath(trackUrlRef(linkHref, `${componentType}_${componentName}`), locale)}\n className={cn(linkVariants({ theme }), classNames?.link)}\n data-headless-title-desc-button={`${title}#${description}#${linkText}`}\n >\n {linkText}\n </Button>\n )}\n </div>\n </Link>\n </div>\n )\n}\n\n/**\n * ActivityMechanism - \u6D3B\u52A8\u673A\u5236\u7EC4\u4EF6\n *\n * @description \u5C55\u793A\u6D3B\u52A8\u673A\u5236/\u4F1A\u5458\u6743\u76CA\u7B49\u5361\u7247\u5217\u8868\u7684\u7EC4\u4EF6\uFF0C\u652F\u6301\u54CD\u5E94\u5F0F\u5E03\u5C40\u548C\u4E3B\u9898\u5207\u6362\n */\nconst ActivityMechanism = React.forwardRef<HTMLDivElement, ActivityMechanismProps>(({ data, classNames }, ref) => {\n const { items = [], theme = 'light' } = data\n\n const innerRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n useExposure(innerRef, {\n componentType,\n componentName,\n componentTitle: items[0]?.title || '',\n componentDescription: items[0]?.description || '',\n })\n\n if (!items || items.length === 0) {\n return null\n }\n\n // \u6839\u636E items \u6570\u91CF\u6620\u5C04 laptop/desktop/lg-desktop \u7684\u5217\u6570\u7C7B\u540D\n // \u4F7F\u7528\u663E\u5F0F\u7C7B\u540D\u6620\u5C04\u4EE5\u786E\u4FDD Tailwind \u80FD\u6B63\u786E\u626B\u63CF\n const gridColsMap: Record<number, string> = {\n 1: 'laptop:grid-cols-1 desktop:grid-cols-1 lg-desktop:grid-cols-1',\n 2: 'laptop:grid-cols-2 desktop:grid-cols-2 lg-desktop:grid-cols-2',\n 3: 'tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-3 lg-desktop:grid-cols-3',\n 4: 'laptop:grid-cols-4 desktop:grid-cols-4 lg-desktop:grid-cols-4',\n }\n const gridColsClass = gridColsMap[Math.min(items.length, 4)] || gridColsMap[4]\n\n return (\n <Container\n data-ui-component-id=\"ActivityMechanism\"\n className={cn('activity-mechanism', 'w-full', classNames?.root)}\n ref={innerRef}\n >\n <div className={cn('tablet:grid-cols-2 laptop:gap-4 grid grid-cols-1 gap-3', gridColsClass, classNames?.grid)}>\n {items.map((item, index) => (\n <ActivityMechanismCard\n key={`${item.title}-${index}`}\n item={item}\n theme={theme}\n classNames={{\n ...classNames,\n ...(items?.length === 3 && {\n card: classNames?.card + ' ' + 'first:tablet:col-span-full first:laptop:col-span-1',\n }),\n }}\n />\n ))}\n </div>\n </Container>\n )\n})\n\nActivityMechanism.displayName = 'ActivityMechanism'\n\nexport default ActivityMechanism\n"],
5
+ "mappings": "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",
6
+ "names": ["ActivityMechanism_exports", "__export", "ActivityMechanism_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_Styles", "import_utils", "import_useExposure", "import_trackUrlRef", "import_class_variance_authority", "import_helpers", "import_AiuiProvider", "componentType", "componentName", "titleVariants", "descriptionVariants", "linkVariants", "BREAKPOINTS", "buildResponsiveSource", "backgroundImage", "sources", "getDefaultAlt", "ActivityMechanismCard", "item", "theme", "classNames", "title", "description", "linkText", "linkHref", "responsiveSource", "defaultAlt", "locale", "ActivityMechanism", "React", "data", "ref", "items", "innerRef", "gridColsMap", "gridColsClass", "index"]
7
+ }
@@ -0,0 +1,43 @@
1
+ import type { ComponentCommonProps, Media, Theme } from '../../types/props.js';
2
+ /**
3
+ * 响应式背景图片类型
4
+ * 支持 5 个断点的图片配置
5
+ */
6
+ export interface ResponsiveBackgroundImage {
7
+ /** 默认图片 (<768px 移动端) */
8
+ default?: Media;
9
+ /** tablet 断点图片 (≥768px) */
10
+ tablet?: Media;
11
+ /** laptop 断点图片 (≥1025px) */
12
+ laptop?: Media;
13
+ /** desktop 断点图片 (≥1440px) */
14
+ desktop?: Media;
15
+ /** lg-desktop 断点图片 (≥1920px) */
16
+ lgDesktop?: Media;
17
+ }
18
+ export interface ActivityMechanismItem {
19
+ /** 标题 */
20
+ title: string;
21
+ /** 描述文本 */
22
+ description: string;
23
+ /** 链接文本 */
24
+ linkText?: string;
25
+ /** 链接地址 */
26
+ linkHref?: string;
27
+ /** 响应式背景图片(支持 5 个断点) */
28
+ backgroundImage?: ResponsiveBackgroundImage;
29
+ }
30
+ /**
31
+ * 语义化类名
32
+ */
33
+ export type ActivityMechanismSemanticName = 'root' | 'grid' | 'card' | 'background' | 'title' | 'description' | 'link';
34
+ export interface ActivityMechanismProps extends ComponentCommonProps {
35
+ data: {
36
+ /** 活动机制列表 */
37
+ items: ActivityMechanismItem[];
38
+ /** 主题 */
39
+ theme?: Theme;
40
+ };
41
+ /** 语义化类名 */
42
+ classNames?: Partial<Record<ActivityMechanismSemanticName, string>>;
43
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var c=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of s(e))!m.call(t,i)&&i!==o&&n(t,i,{get:()=>e[i],enumerable:!(a=r(e,i))||a.enumerable});return t};var p=t=>c(n({},"__esModule",{value:!0}),t);var d={};module.exports=p(d);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/ActivityMechanism/types.ts"],
4
+ "sourcesContent": ["import type { ComponentCommonProps, Media, Theme } from '../../types/props.js'\n\n/**\n * \u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\u7C7B\u578B\n * \u652F\u6301 5 \u4E2A\u65AD\u70B9\u7684\u56FE\u7247\u914D\u7F6E\n */\nexport interface ResponsiveBackgroundImage {\n /** \u9ED8\u8BA4\u56FE\u7247 (<768px \u79FB\u52A8\u7AEF) */\n default?: Media\n /** tablet \u65AD\u70B9\u56FE\u7247 (\u2265768px) */\n tablet?: Media\n /** laptop \u65AD\u70B9\u56FE\u7247 (\u22651025px) */\n laptop?: Media\n /** desktop \u65AD\u70B9\u56FE\u7247 (\u22651440px) */\n desktop?: Media\n /** lg-desktop \u65AD\u70B9\u56FE\u7247 (\u22651920px) */\n lgDesktop?: Media\n}\n\nexport interface ActivityMechanismItem {\n /** \u6807\u9898 */\n title: string\n /** \u63CF\u8FF0\u6587\u672C */\n description: string\n /** \u94FE\u63A5\u6587\u672C */\n linkText?: string\n /** \u94FE\u63A5\u5730\u5740 */\n linkHref?: string\n /** \u54CD\u5E94\u5F0F\u80CC\u666F\u56FE\u7247\uFF08\u652F\u6301 5 \u4E2A\u65AD\u70B9\uFF09 */\n backgroundImage?: ResponsiveBackgroundImage\n}\n\n/**\n * \u8BED\u4E49\u5316\u7C7B\u540D\n */\nexport type ActivityMechanismSemanticName = 'root' | 'grid' | 'card' | 'background' | 'title' | 'description' | 'link'\n\nexport interface ActivityMechanismProps extends ComponentCommonProps {\n data: {\n /** \u6D3B\u52A8\u673A\u5236\u5217\u8868 */\n items: ActivityMechanismItem[]\n /** \u4E3B\u9898 */\n theme?: Theme\n }\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<ActivityMechanismSemanticName, string>>\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["types_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: any;
2
+ export default _default;
3
+ export type { ActivityScheduleProps, ActivityScheduleData, ActivityScheduleItem } from './types.js';
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var C=Object.create;var p=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var B=(e,t)=>{for(var a in t)p(e,a,{get:t[a],enumerable:!0})},g=(e,t,a,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of V(t))!I.call(e,s)&&s!==a&&p(e,s,{get:()=>t[s],enumerable:!(c=P(t,s))||c.enumerable});return e};var L=(e,t,a)=>(a=e!=null?C(z(e)):{},g(t||!e||!e.__esModule?p(a,"default",{value:e,enumerable:!0}):a,e)),E=e=>g(p({},"__esModule",{value:!0}),e);var R={};B(R,{default:()=>M});module.exports=E(R);var i=require("react/jsx-runtime"),v=L(require("react")),d=require("../../helpers/index.js"),l=require("../../components/index.js"),f=require("class-variance-authority"),h=require("swiper/react"),y=require("../../shared/Styles.js");const j=(0,f.cva)("rounded-card laptop:px-6 laptop:py-4 relative flex min-w-0 flex-col justify-between gap-2 overflow-hidden px-4 py-3",{variants:{state:{"active-light":"bg-gradient-to-r from-[#3555aa] to-[#6988e3]","active-dark":"bg-gradient-to-r from-[#3555aa] to-[#6988e3]","inactive-light":"bg-[#EAEAEC]","inactive-dark":"bg-[#1E2024]"},size:{small:"laptop:h-[160px] h-[120px]",large:"laptop:h-[240px] h-[200px]"}},defaultVariants:{state:"inactive-light",size:"small"}}),m=(0,f.cva)("font-bold leading-[1.2]",{variants:{state:{"active-light":"text-white","active-dark":"text-white","inactive-light":"text-[#080A0F]","inactive-dark":"text-white"}},defaultVariants:{state:"inactive-light"}}),w=v.memo(({item:e,theme:t="light",className:a,size:c})=>{const s=e.isActive||!1,o=`${s?"active":"inactive"}-${t}`;return(0,i.jsx)("div",{className:(0,d.cn)(j({state:o,size:c}),a),"data-ui-component-id":"ActivityScheduleCard",children:(0,i.jsxs)(l.Link,{asChild:!e?.link,href:e?.link,className:"size-full no-underline hover:text-current",children:[(s?e.activeIcon:e.inactiveIcon)&&(0,i.jsx)("div",{className:"laptop:w-[160px] aspect-1 absolute right-0 top-0 z-10 w-[120px]",children:(0,i.jsx)(l.Picture,{source:s?e.activeIcon.url:e.inactiveIcon.url,alt:s?e.activeIcon.alt:e.inactiveIcon.alt,className:"aspect-square"})}),(0,i.jsxs)("div",{className:"relative z-20 flex h-full flex-col justify-between",children:[(0,i.jsx)(l.Heading,{as:"h3",size:3,html:e.title,className:(0,d.cn)(m({state:o}))}),(0,i.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,i.jsx)("div",{className:"flex flex-col justify-end overflow-hidden",children:(0,i.jsx)(l.Heading,{as:"h4",size:2,html:e.subtitle,className:(0,d.cn)(" line-clamp-2",m({state:o}))})}),c==="large"&&e.description&&(0,i.jsx)(l.Text,{html:e.description,className:(0,d.cn)("lg-desktop:text-[18px] desktop:text-[16px] line-clamp-3 text-[14px] leading-[1.4]",m({state:o}))})]})]})]})})});w.displayName="ActivityScheduleCard";const x=v.forwardRef(({classNames:e={},data:t,...a},c)=>{const s=t.theme||"light",o=t.size||"large",r=v.useMemo(()=>t?.scheduleList?.length||2,[t?.scheduleList]),k=v.useMemo(()=>{const n=N=>{switch(N){case"mobile":return{slidesPerView:1.17,spaceBetween:12};case"tablet":return r===2?{slidesPerView:2,spaceBetween:12}:{slidesPerView:2.4,spaceBetween:12};case"laptop":return r===2?{}:r===4?{slidesPerView:3.2,spaceBetween:16}:{slidesPerView:r,spaceBetween:16};case"desktop":return r===2?{slidesPerView:2,spaceBetween:16}:{slidesPerView:r,spaceBetween:16}}},u=n("mobile"),S=n("tablet"),b=n("laptop"),A=n("desktop");return{0:u,768:S,1024:b,1440:A}},[r]);return(0,i.jsx)(l.Container,{ref:c,className:(0,d.cn)(e?.root),childClassName:"overflow-hidden","data-ui-component-id":"ActivitySchedule",...a,children:(0,i.jsx)(h.Swiper,{breakpoints:k,className:"w-full !overflow-visible",children:t.scheduleList.map((n,u)=>(0,i.jsx)(h.SwiperSlide,{children:(0,i.jsx)(w,{item:n,theme:s,size:o,className:e?.card})},"activityScheduleCardItem"+u))})})});x.displayName="ActivitySchedule";var M=(0,y.withLayout)(x);
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/ActivitySchedule/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Text, Picture, Heading, Container, Link } from '../../components/index.js'\nimport { cva } from 'class-variance-authority'\nimport type { ActivityScheduleProps, ActivityScheduleItem } from './types.js'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { withLayout } from '../../shared/Styles.js'\n\n/**\n * Card style variants for activity schedule\n */\nconst activityCardVariants = cva(\n 'rounded-card laptop:px-6 laptop:py-4 relative flex min-w-0 flex-col justify-between gap-2 overflow-hidden px-4 py-3',\n {\n variants: {\n state: {\n // Active state - gradient background\n 'active-light': 'bg-gradient-to-r from-[#3555aa] to-[#6988e3]',\n 'active-dark': 'bg-gradient-to-r from-[#3555aa] to-[#6988e3]',\n // Inactive state - solid background\n 'inactive-light': 'bg-[#EAEAEC]',\n 'inactive-dark': 'bg-[#1E2024]',\n },\n size: {\n // Small size - 120px height with responsive scaling\n small: 'laptop:h-[160px] h-[120px]',\n // Large size - 200px height with responsive scaling\n large: 'laptop:h-[240px] h-[200px]',\n },\n },\n defaultVariants: {\n state: 'inactive-light',\n size: 'small',\n },\n }\n)\n\n/**\n * Text style variants for card\n */\nconst cardTextVariants = cva('font-bold leading-[1.2]', {\n variants: {\n state: {\n // Active state - white text\n 'active-light': 'text-white',\n 'active-dark': 'text-white',\n // Inactive state - dark text\n 'inactive-light': 'text-[#080A0F]',\n 'inactive-dark': 'text-white',\n },\n },\n defaultVariants: {\n state: 'inactive-light',\n },\n})\n\n/**\n * Activity Schedule Card Component\n */\nconst ActivityScheduleCard = React.memo(\n ({\n item,\n theme = 'light',\n className,\n size,\n }: {\n item: ActivityScheduleItem\n theme?: 'light' | 'dark'\n className?: string\n size: 'small' | 'large'\n }) => {\n const isActive = item.isActive || false\n\n // Calculate combined state\n const cardState = `${isActive ? 'active' : 'inactive'}-${theme}` as\n | 'active-light'\n | 'active-dark'\n | 'inactive-light'\n | 'inactive-dark'\n\n return (\n <div\n className={cn(activityCardVariants({ state: cardState, size }), className)}\n data-ui-component-id=\"ActivityScheduleCard\"\n >\n <Link asChild={!item?.link} href={item?.link} className=\"size-full no-underline hover:text-current\">\n {/* Background decoration icon - show activeIcon when active, inactiveIcon when inactive */}\n {(isActive ? item.activeIcon : item.inactiveIcon) && (\n <div className=\"laptop:w-[160px] aspect-1 absolute right-0 top-0 z-10 w-[120px]\">\n <Picture\n source={isActive ? item.activeIcon!.url : item.inactiveIcon!.url}\n alt={isActive ? item.activeIcon!.alt : item.inactiveIcon!.alt}\n className=\"aspect-square\"\n />\n </div>\n )}\n\n {/* Content area */}\n <div className=\"relative z-20 flex h-full flex-col justify-between\">\n {/* Title */}\n <Heading as=\"h3\" size={3} html={item.title} className={cn(cardTextVariants({ state: cardState }))} />\n\n <div className=\"flex flex-col gap-1\">\n {/* Subtitle */}\n <div className=\"flex flex-col justify-end overflow-hidden\">\n <Heading\n as=\"h4\"\n size={2}\n html={item.subtitle}\n className={cn(' line-clamp-2', cardTextVariants({ state: cardState }))}\n />\n </div>\n {/* Detailed description - only show when size is large */}\n {size === 'large' && item.description && (\n <Text\n html={item.description}\n className={cn(\n 'lg-desktop:text-[18px] desktop:text-[16px] line-clamp-3 text-[14px] leading-[1.4]',\n cardTextVariants({ state: cardState })\n )}\n />\n )}\n </div>\n </div>\n </Link>\n </div>\n )\n }\n)\n\nActivityScheduleCard.displayName = 'ActivityScheduleCard'\n\n/**\n * ActivitySchedule - Activity Schedule Component\n *\n * @description Display activity schedule card list with active/inactive states, theme switching, and responsive layout\n */\nconst ActivitySchedule = React.forwardRef<HTMLDivElement, ActivityScheduleProps>(\n ({ classNames = {}, data, ...rest }, ref) => {\n const theme = data.theme || 'light'\n const size = data.size || 'large'\n\n const itemsPerRow = React.useMemo(() => {\n return data?.scheduleList?.length || 2\n }, [data?.scheduleList])\n\n const swiperBreakpoints = React.useMemo(() => {\n const getBreakpointConfig = (breakpoint: 'mobile' | 'tablet' | 'laptop' | 'desktop') => {\n switch (breakpoint) {\n case 'mobile':\n return { slidesPerView: 1.17, spaceBetween: 12 }\n case 'tablet':\n if (itemsPerRow === 2) return { slidesPerView: 2, spaceBetween: 12 }\n return { slidesPerView: 2.4, spaceBetween: 12 }\n case 'laptop':\n if (itemsPerRow === 2) return {}\n if (itemsPerRow === 4) return { slidesPerView: 3.2, spaceBetween: 16 }\n return { slidesPerView: itemsPerRow, spaceBetween: 16 }\n case 'desktop':\n if (itemsPerRow === 2) return { slidesPerView: 2, spaceBetween: 16 }\n return { slidesPerView: itemsPerRow, spaceBetween: 16 }\n }\n }\n\n const mobileConfig = getBreakpointConfig('mobile')\n const tabletConfig = getBreakpointConfig('tablet')\n const laptopConfig = getBreakpointConfig('laptop')\n const desktopConfig = getBreakpointConfig('desktop')\n\n return {\n 0: mobileConfig,\n 768: tabletConfig,\n 1024: laptopConfig,\n 1440: desktopConfig,\n }\n }, [itemsPerRow])\n\n return (\n <Container\n ref={ref}\n className={cn(classNames?.root)}\n childClassName=\"overflow-hidden\"\n data-ui-component-id=\"ActivitySchedule\"\n {...rest}\n >\n <Swiper breakpoints={swiperBreakpoints} className=\"w-full !overflow-visible\">\n {data.scheduleList.map((item, index) => (\n <SwiperSlide key={'activityScheduleCardItem' + index}>\n <ActivityScheduleCard item={item} theme={theme} size={size} className={classNames?.card} />\n </SwiperSlide>\n ))}\n </Swiper>\n </Container>\n )\n }\n)\n\nActivitySchedule.displayName = 'ActivitySchedule'\n\nexport default withLayout(ActivitySchedule)\nexport type { ActivityScheduleProps, ActivityScheduleData, ActivityScheduleItem } from './types.js'\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA2Fc,IAAAI,EAAA,6BAzFdC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAAwD,qCACxDC,EAAoB,oCAEpBC,EAAoC,wBACpCC,EAA2B,kCAK3B,MAAMC,KAAuB,OAC3B,sHACA,CACE,SAAU,CACR,MAAO,CAEL,eAAgB,+CAChB,cAAe,+CAEf,iBAAkB,eAClB,gBAAiB,cACnB,EACA,KAAM,CAEJ,MAAO,6BAEP,MAAO,4BACT,CACF,EACA,gBAAiB,CACf,MAAO,iBACP,KAAM,OACR,CACF,CACF,EAKMC,KAAmB,OAAI,0BAA2B,CACtD,SAAU,CACR,MAAO,CAEL,eAAgB,aAChB,cAAe,aAEf,iBAAkB,iBAClB,gBAAiB,YACnB,CACF,EACA,gBAAiB,CACf,MAAO,gBACT,CACF,CAAC,EAKKC,EAAuBR,EAAM,KACjC,CAAC,CACC,KAAAS,EACA,MAAAC,EAAQ,QACR,UAAAC,EACA,KAAAC,CACF,IAKM,CACJ,MAAMC,EAAWJ,EAAK,UAAY,GAG5BK,EAAY,GAAGD,EAAW,SAAW,UAAU,IAAIH,CAAK,GAM9D,SACE,OAAC,OACC,aAAW,MAAGJ,EAAqB,CAAE,MAAOQ,EAAW,KAAAF,CAAK,CAAC,EAAGD,CAAS,EACzE,uBAAqB,uBAErB,oBAAC,QAAK,QAAS,CAACF,GAAM,KAAM,KAAMA,GAAM,KAAM,UAAU,4CAEpD,WAAAI,EAAWJ,EAAK,WAAaA,EAAK,kBAClC,OAAC,OAAI,UAAU,kEACb,mBAAC,WACC,OAAQI,EAAWJ,EAAK,WAAY,IAAMA,EAAK,aAAc,IAC7D,IAAKI,EAAWJ,EAAK,WAAY,IAAMA,EAAK,aAAc,IAC1D,UAAU,gBACZ,EACF,KAIF,QAAC,OAAI,UAAU,qDAEb,oBAAC,WAAQ,GAAG,KAAK,KAAM,EAAG,KAAMA,EAAK,MAAO,aAAW,MAAGF,EAAiB,CAAE,MAAOO,CAAU,CAAC,CAAC,EAAG,KAEnG,QAAC,OAAI,UAAU,sBAEb,oBAAC,OAAI,UAAU,4CACb,mBAAC,WACC,GAAG,KACH,KAAM,EACN,KAAML,EAAK,SACX,aAAW,MAAG,gBAAiBF,EAAiB,CAAE,MAAOO,CAAU,CAAC,CAAC,EACvE,EACF,EAECF,IAAS,SAAWH,EAAK,gBACxB,OAAC,QACC,KAAMA,EAAK,YACX,aAAW,MACT,oFACAF,EAAiB,CAAE,MAAOO,CAAU,CAAC,CACvC,EACF,GAEJ,GACF,GACF,EACF,CAEJ,CACF,EAEAN,EAAqB,YAAc,uBAOnC,MAAMO,EAAmBf,EAAM,WAC7B,CAAC,CAAE,WAAAgB,EAAa,CAAC,EAAG,KAAAC,EAAM,GAAGC,CAAK,EAAGC,IAAQ,CAC3C,MAAMT,EAAQO,EAAK,OAAS,QACtBL,EAAOK,EAAK,MAAQ,QAEpBG,EAAcpB,EAAM,QAAQ,IACzBiB,GAAM,cAAc,QAAU,EACpC,CAACA,GAAM,YAAY,CAAC,EAEjBI,EAAoBrB,EAAM,QAAQ,IAAM,CAC5C,MAAMsB,EAAuBC,GAA2D,CACtF,OAAQA,EAAY,CAClB,IAAK,SACH,MAAO,CAAE,cAAe,KAAM,aAAc,EAAG,EACjD,IAAK,SACH,OAAIH,IAAgB,EAAU,CAAE,cAAe,EAAG,aAAc,EAAG,EAC5D,CAAE,cAAe,IAAK,aAAc,EAAG,EAChD,IAAK,SACH,OAAIA,IAAgB,EAAU,CAAC,EAC3BA,IAAgB,EAAU,CAAE,cAAe,IAAK,aAAc,EAAG,EAC9D,CAAE,cAAeA,EAAa,aAAc,EAAG,EACxD,IAAK,UACH,OAAIA,IAAgB,EAAU,CAAE,cAAe,EAAG,aAAc,EAAG,EAC5D,CAAE,cAAeA,EAAa,aAAc,EAAG,CAC1D,CACF,EAEMI,EAAeF,EAAoB,QAAQ,EAC3CG,EAAeH,EAAoB,QAAQ,EAC3CI,EAAeJ,EAAoB,QAAQ,EAC3CK,EAAgBL,EAAoB,SAAS,EAEnD,MAAO,CACL,EAAGE,EACH,IAAKC,EACL,KAAMC,EACN,KAAMC,CACR,CACF,EAAG,CAACP,CAAW,CAAC,EAEhB,SACE,OAAC,aACC,IAAKD,EACL,aAAW,MAAGH,GAAY,IAAI,EAC9B,eAAe,kBACf,uBAAqB,mBACpB,GAAGE,EAEJ,mBAAC,UAAO,YAAaG,EAAmB,UAAU,2BAC/C,SAAAJ,EAAK,aAAa,IAAI,CAACR,EAAMmB,OAC5B,OAAC,eACC,mBAACpB,EAAA,CAAqB,KAAMC,EAAM,MAAOC,EAAO,KAAME,EAAM,UAAWI,GAAY,KAAM,GADzE,2BAA6BY,CAE/C,CACD,EACH,EACF,CAEJ,CACF,EAEAb,EAAiB,YAAc,mBAE/B,IAAOlB,KAAQ,cAAWkB,CAAgB",
6
+ "names": ["ActivitySchedule_exports", "__export", "ActivitySchedule_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "import_class_variance_authority", "import_react", "import_Styles", "activityCardVariants", "cardTextVariants", "ActivityScheduleCard", "item", "theme", "className", "size", "isActive", "cardState", "ActivitySchedule", "classNames", "data", "rest", "ref", "itemsPerRow", "swiperBreakpoints", "getBreakpointConfig", "breakpoint", "mobileConfig", "tabletConfig", "laptopConfig", "desktopConfig", "index"]
7
+ }
@@ -0,0 +1,44 @@
1
+ import type { Media } from '../../types/props.js';
2
+ /**
3
+ * 活动日程项数据接口
4
+ */
5
+ export interface ActivityScheduleItem {
6
+ /** 活动标题 */
7
+ title: string;
8
+ /** 活动副标题 */
9
+ subtitle: string;
10
+ /** 活动详细描述(可选,用于完整版) */
11
+ description?: string;
12
+ /** 跳转链接 */
13
+ link?: string;
14
+ /** 激活状态装饰图标 */
15
+ activeIcon?: Media;
16
+ /** 非激活状态装饰图标 */
17
+ inactiveIcon?: Media;
18
+ /** 是否为激活状态(激活状态显示渐变背景) */
19
+ isActive?: boolean;
20
+ }
21
+ /**
22
+ * 活动日程组件数据接口
23
+ */
24
+ export interface ActivityScheduleData {
25
+ /** 活动列表 */
26
+ scheduleList: ActivityScheduleItem[];
27
+ /** 主题模式,默认为 light */
28
+ theme?: 'light' | 'dark';
29
+ /** 卡片尺寸,默认为 small */
30
+ size?: 'small' | 'large';
31
+ }
32
+ /**
33
+ * 语义化类名
34
+ */
35
+ export type ActivityScheduleSemanticName = 'root' | 'card';
36
+ /**
37
+ * 活动日程组件 Props
38
+ */
39
+ export interface ActivityScheduleProps extends React.HTMLAttributes<HTMLDivElement> {
40
+ /** 业务数据 */
41
+ data: ActivityScheduleData;
42
+ /** 语义化类名 */
43
+ classNames?: Partial<Record<ActivityScheduleSemanticName, string>>;
44
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var d=(t,e,r,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of l(e))!n.call(t,i)&&i!==r&&a(t,i,{get:()=>e[i],enumerable:!(c=s(e,i))||c.enumerable});return t};var o=t=>d(a({},"__esModule",{value:!0}),t);var m={};module.exports=o(m);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/ActivitySchedule/types.ts"],
4
+ "sourcesContent": ["import type { Media } from '../../types/props.js'\n\n/**\n * \u6D3B\u52A8\u65E5\u7A0B\u9879\u6570\u636E\u63A5\u53E3\n */\nexport interface ActivityScheduleItem {\n /** \u6D3B\u52A8\u6807\u9898 */\n title: string\n /** \u6D3B\u52A8\u526F\u6807\u9898 */\n subtitle: string\n /** \u6D3B\u52A8\u8BE6\u7EC6\u63CF\u8FF0\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u5B8C\u6574\u7248\uFF09 */\n description?: string\n /** \u8DF3\u8F6C\u94FE\u63A5 */\n link?: string\n /** \u6FC0\u6D3B\u72B6\u6001\u88C5\u9970\u56FE\u6807 */\n activeIcon?: Media\n /** \u975E\u6FC0\u6D3B\u72B6\u6001\u88C5\u9970\u56FE\u6807 */\n inactiveIcon?: Media\n /** \u662F\u5426\u4E3A\u6FC0\u6D3B\u72B6\u6001\uFF08\u6FC0\u6D3B\u72B6\u6001\u663E\u793A\u6E10\u53D8\u80CC\u666F\uFF09 */\n isActive?: boolean\n}\n\n/**\n * \u6D3B\u52A8\u65E5\u7A0B\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface ActivityScheduleData {\n /** \u6D3B\u52A8\u5217\u8868 */\n scheduleList: ActivityScheduleItem[]\n /** \u4E3B\u9898\u6A21\u5F0F\uFF0C\u9ED8\u8BA4\u4E3A light */\n theme?: 'light' | 'dark'\n /** \u5361\u7247\u5C3A\u5BF8\uFF0C\u9ED8\u8BA4\u4E3A small */\n size?: 'small' | 'large'\n}\n\n/**\n * \u8BED\u4E49\u5316\u7C7B\u540D\n */\nexport type ActivityScheduleSemanticName = 'root' | 'card'\n\n/**\n * \u6D3B\u52A8\u65E5\u7A0B\u7EC4\u4EF6 Props\n */\nexport interface ActivityScheduleProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: ActivityScheduleData\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<ActivityScheduleSemanticName, string>>\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["types_exports", "__toCommonJS"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var D=Object.create;var u=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var P=(t,e)=>{for(var a in e)u(t,a,{get:e[a],enumerable:!0})},y=(t,e,a,f)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of V(e))!M.call(t,i)&&i!==a&&u(t,i,{get:()=>e[i],enumerable:!(f=L(e,i))||f.enumerable});return t};var N=(t,e,a)=>(a=t!=null?D(z(t)):{},y(e||!t||!t.__esModule?u(a,"default",{value:t,enumerable:!0}):a,t)),S=t=>y(u({},"__esModule",{value:!0}),t);var F={};P(F,{default:()=>W});module.exports=S(F);var h=require("react/jsx-runtime"),l=N(require("react")),g=require("../../helpers/utils.js"),p=require("class-variance-authority"),w=N(require("./useAnchorPosition.js"));const C=(0,p.cva)("anchor-navigation-content flex items-center overflow-x-auto [&::-webkit-scrollbar]:hidden",{variants:{alignment:{start:"tablet:justify-start",center:"tablet:justify-center",end:"tablet:justify-end"},size:{small:"gap-3",large:"gap-6"}},defaultVariants:{alignment:"start",size:"small"}}),B=(0,p.cva)("anchor-navigation-item after:bg-brand-0 relative shrink-0 text-sm font-bold after:absolute after:bottom-0 after:left-0 after:h-1 after:w-0 after:opacity-0 after:transition-all after:duration-300",{variants:{size:{small:"py-3",large:"py-4"}},defaultVariants:{size:"small"}}),j=(0,p.cva)("tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] sticky top-0 z-40 w-full px-4",{variants:{theme:{light:"bg-white",dark:"bg-[#1E2024]"}},defaultVariants:{theme:"light"}}),k=l.forwardRef(({classNames:t={},data:e,onItemClick:a,className:f,...i},R)=>{const{alignment:T="start",theme:I="light",size:x="small"}=e,m=(0,w.default)(e.sectionIds?.map(n=>n.targetId)||[]),d=l.useRef(null),v=l.useRef(null),A=l.useRef([]);l.useImperativeHandle(R,()=>d.current);const b=l.useCallback(n=>{const o=A.current[n];if(o&&v.current){const r=v.current,s=o,c=s.offsetLeft-r.offsetWidth/2+s.offsetWidth/2;typeof r.scrollTo=="function"&&r.scrollTo({left:c,behavior:"smooth"})}},[]);return l.useEffect(()=>{if(!m)return;const n=e.sectionIds?.findIndex(o=>o.targetId===m);n!==void 0&&n!==-1&&b(n)},[m,e.sectionIds,b]),(0,h.jsx)("div",{...i,ref:d,className:(0,g.cn)(j({theme:I}),t?.root,f),children:(0,h.jsx)("div",{ref:v,className:(0,g.cn)(C({alignment:T,size:x}),"relative",t?.content),children:e.sectionIds?.map((n,o)=>{const r=m===n.targetId,s=I==="dark";return(0,h.jsx)("button",{ref:c=>{c&&(A.current[o]=c)},onClick:()=>{if(b(o),a){a(n,o);return}const c=document.getElementById(n.targetId);if(c&&d.current){const E=d.current.offsetHeight,H=c.getBoundingClientRect().top+window.scrollY-E;window.scrollTo({top:H,behavior:"smooth"})}},className:(0,g.cn)(B({size:x}),{"text-[#4A4C56]":!s&&!r,"text-[#080A0F] after:w-full after:opacity-100":!s&&r,"text-[#8A8D92]":s&&!r,"text-white after:w-full after:opacity-100":s&&r},t?.item),children:n.label},n.targetId)})})})});k.displayName="AnchorNavigation";var W=k;
1
+ "use strict";"use client";var V=Object.create;var u=Object.defineProperty;var z=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var S=(t,e)=>{for(var o in e)u(t,o,{get:e[o],enumerable:!0})},N=(t,e,o,v)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of M(e))!C.call(t,a)&&a!==o&&u(t,a,{get:()=>e[a],enumerable:!(v=z(e,a))||v.enumerable});return t};var w=(t,e,o)=>(o=t!=null?V(P(t)):{},N(e||!t||!t.__esModule?u(o,"default",{value:t,enumerable:!0}):o,t)),B=t=>N(u({},"__esModule",{value:!0}),t);var Y={};S(Y,{default:()=>F});module.exports=B(Y);var h=require("react/jsx-runtime"),l=w(require("react")),g=require("../../helpers/utils.js"),d=require("class-variance-authority"),k=w(require("./useAnchorPosition.js")),T=require("../../components/container.js");const j=(0,d.cva)("anchor-navigation-content flex items-center overflow-x-auto [&::-webkit-scrollbar]:hidden",{variants:{alignment:{start:"tablet:justify-start",center:"tablet:justify-center",end:"tablet:justify-end"},size:{small:"gap-3",large:"gap-6"}},defaultVariants:{alignment:"start",size:"small"}}),W=(0,d.cva)("anchor-navigation-item after:bg-brand-0 relative shrink-0 text-sm font-bold after:absolute after:bottom-0 after:left-0 after:h-1 after:w-0 after:opacity-0 after:transition-all after:duration-300",{variants:{size:{small:"py-3",large:"py-4"}},defaultVariants:{size:"small"}}),x=(0,d.cva)("!sticky top-0 !z-40 w-full",{variants:{theme:{light:"bg-white",dark:"bg-[#1E2024]"}},defaultVariants:{theme:"light"}}),R=l.forwardRef(({classNames:t={},data:e,onItemClick:o,className:v,...a},E)=>{const{alignment:H="start",theme:p="light",size:A="small"}=e,f=(0,k.default)(e.sectionIds?.map(n=>n.targetId)||[]),m=l.useRef(null),b=l.useRef(null),y=l.useRef([]);l.useImperativeHandle(E,()=>m.current);const I=l.useCallback(n=>{const r=y.current[n];if(r&&b.current){const i=b.current,s=r,c=s.offsetLeft-i.offsetWidth/2+s.offsetWidth/2;typeof i.scrollTo=="function"&&i.scrollTo({left:c,behavior:"smooth"})}},[]);return l.useEffect(()=>{if(!f)return;const n=e.sectionIds?.findIndex(r=>r.targetId===f);n!==void 0&&n!==-1&&I(n)},[f,e.sectionIds,I]),console.log(t?.root,"classNames?.root",a,x({theme:p})),(0,h.jsx)(T.Container,{ref:m,className:(0,g.cn)(x({theme:p}),t?.root),...a,children:(0,h.jsx)("div",{ref:b,className:(0,g.cn)(j({alignment:H,size:A}),"relative",t?.content),children:e.sectionIds?.map((n,r)=>{const i=f===n.targetId,s=p==="dark";return(0,h.jsx)("button",{ref:c=>{c&&(y.current[r]=c)},onClick:()=>{if(I(r),o){o(n,r);return}const c=document.getElementById(n.targetId);if(c&&m.current){const D=m.current.offsetHeight,L=c.getBoundingClientRect().top+window.scrollY-D;window.scrollTo({top:L,behavior:"smooth"})}},className:(0,g.cn)(W({size:A}),{"text-[#4A4C56]":!s&&!i,"text-[#080A0F] after:w-full after:opacity-100":!s&&i,"text-[#8A8D92]":s&&!i,"text-white after:w-full after:opacity-100":s&&i},t?.item),children:n.label},n.targetId)})})})});R.displayName="AnchorNavigation";var F=R;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 { cva, type VariantProps } from 'class-variance-authority'\nimport useAnchorPosition from './useAnchorPosition.js'\n\nexport interface AnchorNavigationSemanticName {\n root: 'root'\n content: 'content'\n item: 'item'\n}\n\n/**\n * \u5BFC\u822A\u9879\u5BF9\u9F50\u65B9\u5411\u6837\u5F0F\u53D8\u4F53\n */\nconst anchorNavigationVariants = cva(\n 'anchor-navigation-content flex items-center overflow-x-auto [&::-webkit-scrollbar]:hidden',\n {\n variants: {\n alignment: {\n start: 'tablet:justify-start',\n center: 'tablet:justify-center',\n end: 'tablet:justify-end',\n },\n size: {\n small: 'gap-3',\n large: 'gap-6',\n },\n },\n defaultVariants: {\n alignment: 'start',\n size: 'small',\n },\n }\n)\n\n/**\n * \u5BFC\u822A\u9879\u6837\u5F0F\u53D8\u4F53\n */\nconst anchorItemVariants = cva(\n 'anchor-navigation-item after:bg-brand-0 relative shrink-0 text-sm font-bold after:absolute after:bottom-0 after:left-0 after:h-1 after:w-0 after:opacity-0 after:transition-all after:duration-300',\n {\n variants: {\n size: {\n small: 'py-3',\n large: 'py-4',\n },\n },\n defaultVariants: {\n size: 'small',\n },\n }\n)\n\n/**\n * \u5BB9\u5668\u4E3B\u9898\u6837\u5F0F\u53D8\u4F53\n */\nconst containerVariants = cva(\n 'tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] sticky top-0 z-40 w-full px-4',\n {\n variants: {\n theme: {\n light: 'bg-white',\n dark: 'bg-[#1E2024]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n)\n\n/**\n * \u951A\u70B9\u9879\u63A5\u53E3\n */\nexport interface AnchorSectionItem {\n targetId: string\n label: string\n}\n\n/**\n * AnchorNavigation \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface AnchorNavigationData {\n /** \u951A\u70B9\u5217\u8868 */\n sectionIds: AnchorSectionItem[]\n /** \u5BFC\u822A\u9879\u6C34\u5E73\u5BF9\u9F50\u65B9\u5F0F */\n alignment?: 'start' | 'center' | 'end'\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: 'light' | 'dark'\n /** \u5BFC\u822A\u5927\u5C0F */\n size?: 'small' | 'large'\n}\n\nexport interface AnchorNavigationProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof anchorNavigationVariants> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: AnchorNavigationData\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<keyof AnchorNavigationSemanticName, string>>\n /** \u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u4F20\u5165\u65F6\u4F1A\u66FF\u4EE3\u9ED8\u8BA4\u7684\u6EDA\u52A8\u884C\u4E3A */\n onItemClick?: (item: AnchorSectionItem, index: number) => void\n}\n\n/**\n * AnchorNavigation - \u951A\u70B9\u5BFC\u822A\n *\n * @description \u951A\u70B9\u5BFC\u822A\n */\nconst AnchorNavigation = React.forwardRef<HTMLDivElement, AnchorNavigationProps>(\n ({ classNames = {}, data, onItemClick, className, ...rest }, ref) => {\n const { alignment = 'start', theme = 'light', size = 'small' } = data\n const activeId = useAnchorPosition(data.sectionIds?.map(item => item.targetId) || [])\n const rootRef = React.useRef<HTMLDivElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const sectionRefs = React.useRef<HTMLButtonElement[]>([])\n\n // \u66B4\u9732 rootRef \u7ED9\u5916\u90E8 ref\n React.useImperativeHandle(ref, () => rootRef.current as HTMLDivElement)\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 // \u68C0\u67E5 scrollTo \u65B9\u6CD5\u662F\u5426\u5B58\u5728\uFF08\u517C\u5BB9\u6D4B\u8BD5\u73AF\u5883\u548C\u65E7\u6D4F\u89C8\u5668\uFF09\n if (typeof container.scrollTo === 'function') {\n container.scrollTo({\n left: scrollLeft,\n behavior: 'smooth',\n })\n }\n }\n }, [])\n\n // \u5F53\u5C4F\u5E55\u6EDA\u52A8\u5BFC\u81F4 activeId \u53D8\u5316\u65F6\uFF0C\u81EA\u52A8\u6EDA\u52A8\u5BFC\u822A\u680F\u5230\u5BF9\u5E94\u9879\n React.useEffect(() => {\n if (!activeId) return\n\n const activeIndex = data.sectionIds?.findIndex(item => item.targetId === activeId)\n if (activeIndex !== undefined && activeIndex !== -1) {\n autoScrollToActiveItem(activeIndex)\n }\n }, [activeId, data.sectionIds, autoScrollToActiveItem])\n\n return (\n <div {...rest} ref={rootRef} className={cn(containerVariants({ theme }), classNames?.root, className)}>\n <div\n ref={containerRef}\n className={cn(anchorNavigationVariants({ alignment, size }), 'relative', classNames?.content)}\n >\n {data.sectionIds?.map((item, index) => {\n const isActive = activeId === item.targetId\n const isDark = theme === 'dark'\n\n return (\n <button\n key={item.targetId}\n ref={el => {\n if (el) {\n sectionRefs.current[index] = el\n }\n }}\n onClick={() => {\n // \u9ED8\u8BA4\u884C\u4E3A\uFF1A\u6EDA\u52A8\u5230\u5BF9\u5E94\u951A\u70B9\n autoScrollToActiveItem(index)\n\n // \u5982\u679C\u6709\u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u4F7F\u7528\u81EA\u5B9A\u4E49\u4E8B\u4EF6\n if (onItemClick) {\n onItemClick(item, index)\n return\n }\n\n // \u624B\u52A8\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u8003\u8651\u5BFC\u822A\u680F\u9AD8\u5EA6\n const targetElement = document.getElementById(item.targetId)\n if (targetElement && rootRef.current) {\n const navHeight = rootRef.current.offsetHeight\n const targetPosition = targetElement.getBoundingClientRect().top + window.scrollY - navHeight\n\n window.scrollTo({\n top: targetPosition,\n behavior: 'smooth',\n })\n }\n }}\n className={cn(\n anchorItemVariants({ size }),\n {\n // Light theme colors\n 'text-[#4A4C56]': !isDark && !isActive,\n 'text-[#080A0F] after:w-full after:opacity-100': !isDark && isActive,\n // Dark theme colors\n 'text-[#8A8D92]': isDark && !isActive,\n 'text-white after:w-full after:opacity-100': isDark && isActive,\n },\n classNames?.item\n )}\n >\n {item.label}\n </button>\n )\n })}\n </div>\n </div>\n )\n }\n)\n\nAnchorNavigation.displayName = 'AnchorNavigation'\nexport default AnchorNavigation\n"],
5
- "mappings": "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",
6
- "names": ["AnchorNavigation_exports", "__export", "AnchorNavigation_default", "__toCommonJS", "import_jsx_runtime", "React", "import_utils", "import_class_variance_authority", "import_useAnchorPosition", "anchorNavigationVariants", "anchorItemVariants", "containerVariants", "AnchorNavigation", "classNames", "data", "onItemClick", "className", "rest", "ref", "alignment", "theme", "size", "activeId", "useAnchorPosition", "item", "rootRef", "containerRef", "sectionRefs", "autoScrollToActiveItem", "activeIdIndex", "curRef", "container", "button", "scrollLeft", "activeIndex", "index", "isActive", "isDark", "el", "targetElement", "navHeight", "targetPosition"]
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport useAnchorPosition from './useAnchorPosition.js'\nimport { Container } from '../../components/container.js'\n\nexport interface AnchorNavigationSemanticName {\n root: 'root'\n content: 'content'\n item: 'item'\n}\n\n/**\n * \u5BFC\u822A\u9879\u5BF9\u9F50\u65B9\u5411\u6837\u5F0F\u53D8\u4F53\n */\nconst anchorNavigationVariants = cva(\n 'anchor-navigation-content flex items-center overflow-x-auto [&::-webkit-scrollbar]:hidden',\n {\n variants: {\n alignment: {\n start: 'tablet:justify-start',\n center: 'tablet:justify-center',\n end: 'tablet:justify-end',\n },\n size: {\n small: 'gap-3',\n large: 'gap-6',\n },\n },\n defaultVariants: {\n alignment: 'start',\n size: 'small',\n },\n }\n)\n\n/**\n * \u5BFC\u822A\u9879\u6837\u5F0F\u53D8\u4F53\n */\nconst anchorItemVariants = cva(\n 'anchor-navigation-item after:bg-brand-0 relative shrink-0 text-sm font-bold after:absolute after:bottom-0 after:left-0 after:h-1 after:w-0 after:opacity-0 after:transition-all after:duration-300',\n {\n variants: {\n size: {\n small: 'py-3',\n large: 'py-4',\n },\n },\n defaultVariants: {\n size: 'small',\n },\n }\n)\n\n/**\n * \u5BB9\u5668\u4E3B\u9898\u6837\u5F0F\u53D8\u4F53\n */\nconst containerVariants = cva('!sticky top-0 !z-40 w-full', {\n variants: {\n theme: {\n light: 'bg-white',\n dark: 'bg-[#1E2024]',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n})\n\n/**\n * \u951A\u70B9\u9879\u63A5\u53E3\n */\nexport interface AnchorSectionItem {\n targetId: string\n label: string\n}\n\n/**\n * AnchorNavigation \u4E1A\u52A1\u7EC4\u4EF6\u6570\u636E\u63A5\u53E3\n */\nexport interface AnchorNavigationData {\n /** \u951A\u70B9\u5217\u8868 */\n sectionIds: AnchorSectionItem[]\n /** \u5BFC\u822A\u9879\u6C34\u5E73\u5BF9\u9F50\u65B9\u5F0F */\n alignment?: 'start' | 'center' | 'end'\n /** \u4E3B\u9898\u6A21\u5F0F */\n theme?: 'light' | 'dark'\n /** \u5BFC\u822A\u5927\u5C0F */\n size?: 'small' | 'large'\n}\n\nexport interface AnchorNavigationProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof anchorNavigationVariants> {\n /** \u4E1A\u52A1\u6570\u636E */\n data: AnchorNavigationData\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<keyof AnchorNavigationSemanticName, string>>\n /** \u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u4F20\u5165\u65F6\u4F1A\u66FF\u4EE3\u9ED8\u8BA4\u7684\u6EDA\u52A8\u884C\u4E3A */\n onItemClick?: (item: AnchorSectionItem, index: number) => void\n}\n\n/**\n * AnchorNavigation - \u951A\u70B9\u5BFC\u822A\n *\n * @description \u951A\u70B9\u5BFC\u822A\n */\nconst AnchorNavigation = React.forwardRef<HTMLDivElement, AnchorNavigationProps>(\n ({ classNames = {}, data, onItemClick, className, ...rest }, ref) => {\n const { alignment = 'start', theme = 'light', size = 'small' } = data\n const activeId = useAnchorPosition(data.sectionIds?.map(item => item.targetId) || [])\n const rootRef = React.useRef<HTMLDivElement>(null)\n const containerRef = React.useRef<HTMLDivElement>(null)\n const sectionRefs = React.useRef<HTMLButtonElement[]>([])\n\n // \u66B4\u9732 rootRef \u7ED9\u5916\u90E8 ref\n React.useImperativeHandle(ref, () => rootRef.current as HTMLDivElement)\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 // \u68C0\u67E5 scrollTo \u65B9\u6CD5\u662F\u5426\u5B58\u5728\uFF08\u517C\u5BB9\u6D4B\u8BD5\u73AF\u5883\u548C\u65E7\u6D4F\u89C8\u5668\uFF09\n if (typeof container.scrollTo === 'function') {\n container.scrollTo({\n left: scrollLeft,\n behavior: 'smooth',\n })\n }\n }\n }, [])\n\n // \u5F53\u5C4F\u5E55\u6EDA\u52A8\u5BFC\u81F4 activeId \u53D8\u5316\u65F6\uFF0C\u81EA\u52A8\u6EDA\u52A8\u5BFC\u822A\u680F\u5230\u5BF9\u5E94\u9879\n React.useEffect(() => {\n if (!activeId) return\n\n const activeIndex = data.sectionIds?.findIndex(item => item.targetId === activeId)\n if (activeIndex !== undefined && activeIndex !== -1) {\n autoScrollToActiveItem(activeIndex)\n }\n }, [activeId, data.sectionIds, autoScrollToActiveItem])\n\n console.log(classNames?.root, 'classNames?.root', rest, containerVariants({ theme }))\n\n return (\n <Container ref={rootRef} className={cn(containerVariants({ theme }), classNames?.root)} {...rest}>\n <div\n ref={containerRef}\n className={cn(anchorNavigationVariants({ alignment, size }), 'relative', classNames?.content)}\n >\n {data.sectionIds?.map((item, index) => {\n const isActive = activeId === item.targetId\n const isDark = theme === 'dark'\n\n return (\n <button\n key={item.targetId}\n ref={el => {\n if (el) {\n sectionRefs.current[index] = el\n }\n }}\n onClick={() => {\n // \u9ED8\u8BA4\u884C\u4E3A\uFF1A\u6EDA\u52A8\u5230\u5BF9\u5E94\u951A\u70B9\n autoScrollToActiveItem(index)\n\n // \u5982\u679C\u6709\u81EA\u5B9A\u4E49\u70B9\u51FB\u4E8B\u4EF6\uFF0C\u4F7F\u7528\u81EA\u5B9A\u4E49\u4E8B\u4EF6\n if (onItemClick) {\n onItemClick(item, index)\n return\n }\n\n // \u624B\u52A8\u8BA1\u7B97\u6EDA\u52A8\u4F4D\u7F6E\uFF0C\u8003\u8651\u5BFC\u822A\u680F\u9AD8\u5EA6\n const targetElement = document.getElementById(item.targetId)\n if (targetElement && rootRef.current) {\n const navHeight = rootRef.current.offsetHeight\n const targetPosition = targetElement.getBoundingClientRect().top + window.scrollY - navHeight\n\n window.scrollTo({\n top: targetPosition,\n behavior: 'smooth',\n })\n }\n }}\n className={cn(\n anchorItemVariants({ size }),\n {\n // Light theme colors\n 'text-[#4A4C56]': !isDark && !isActive,\n 'text-[#080A0F] after:w-full after:opacity-100': !isDark && isActive,\n // Dark theme colors\n 'text-[#8A8D92]': isDark && !isActive,\n 'text-white after:w-full after:opacity-100': isDark && isActive,\n },\n classNames?.item\n )}\n >\n {item.label}\n </button>\n )\n })}\n </div>\n </Container>\n )\n }\n)\n\nAnchorNavigation.displayName = 'AnchorNavigation'\nexport default AnchorNavigation\n"],
5
+ "mappings": "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",
6
+ "names": ["AnchorNavigation_exports", "__export", "AnchorNavigation_default", "__toCommonJS", "import_jsx_runtime", "React", "import_utils", "import_class_variance_authority", "import_useAnchorPosition", "import_container", "anchorNavigationVariants", "anchorItemVariants", "containerVariants", "AnchorNavigation", "classNames", "data", "onItemClick", "className", "rest", "ref", "alignment", "theme", "size", "activeId", "useAnchorPosition", "item", "rootRef", "containerRef", "sectionRefs", "autoScrollToActiveItem", "activeIdIndex", "curRef", "container", "button", "scrollLeft", "activeIndex", "index", "isActive", "isDark", "el", "targetElement", "navHeight", "targetPosition"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var z=Object.create;var w=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var i in e)w(t,i,{get:e[i],enumerable:!0})},L=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of H(e))!O.call(t,n)&&n!==i&&w(t,n,{get:()=>e[n],enumerable:!(o=j(e,n))||o.enumerable});return t};var V=(t,e,i)=>(i=t!=null?z($(t)):{},L(e||!t||!t.__esModule?w(i,"default",{value:t,enumerable:!0}):i,t)),G=t=>L(w({},"__esModule",{value:!0}),t);var Z={};q(Z,{default:()=>Y});module.exports=G(Z);var r=require("react/jsx-runtime"),a=V(require("react")),m=require("../../helpers/index.js"),h=require("../../components/index.js"),f=require("swiper/react"),k=V(require("dayjs")),S=require("class-variance-authority");const E=(t,e)=>{const i=(0,k.default)(),o=(0,k.default)(t).startOf("day"),n=(0,k.default)(e).endOf("day");return i.isAfter(n)?"completed":i.isBefore(o)?"not-started":"in-progress"},J=(0,S.cva)("h-1 w-full overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),K=(0,S.cva)("size-4 rounded-full transition-colors",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),T=(0,S.cva)("font-bold leading-[1.2]",{variants:{state:{"in-progress-light":"text-[#080A0F]","in-progress-dark":"text-white","not-started-light":"text-[#080A0F]","not-started-dark":"text-[#F5F6F7]","completed-light":"text-[#4A4C56]/60","completed-dark":"text-[#F5F6F7]/60"}},defaultVariants:{state:"not-started-light"}}),Q=(0,S.cva)("laptop:h-[160px] rounded-box relative flex h-[120px] min-w-0 flex-col justify-between gap-2 overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F4E8BC]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F4E8BC]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),U=({timeStatus:t,theme:e="light",className:i,index:o,nodeLength:n})=>{const p=`${t}-${e}`,l=o===0,d=o===n-1;return(0,r.jsxs)("div",{className:"relative my-2 flex h-1 w-full items-center justify-center",children:[(0,r.jsx)("div",{className:(0,m.cn)(J({state:p}),l&&"rounded-l-full",d&&"rounded-r-full",i)}),(0,r.jsx)("div",{className:"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2",children:(0,r.jsx)("div",{className:K({state:p})})})]})},W=(t,e)=>{if(t)return e==="in-progress"?t.active:e==="completed"&&t.completed||t.inactive},X=({timeStatus:t,item:e,theme:i="light",className:o,scheduleCount:n})=>{const p=a.useMemo(()=>W(e.icon,t),[e.icon,t]),l=`${t}-${i}`;return(0,r.jsxs)("div",{className:(0,m.cn)(Q({state:l}),o),children:[p&&(0,r.jsx)("div",{className:"laptop:w-[128px] desktop:w-[160px] absolute bottom-0 right-0 z-10 w-[120px]",children:(0,r.jsx)(h.Picture,{source:p.url,alt:p.alt,className:"aspect-square"})}),(0,r.jsxs)("div",{className:"tablet:px-4 tablet:py-3 desktop:pl-6 desktop:pr-16 relative z-20 flex h-full flex-col justify-between p-4 pr-8",children:[(0,r.jsx)(h.Heading,{html:e.title,className:(0,m.cn)(n>=4?"desktop:text-[24px]":"desktop:text-[32px]","laptop:text-[24px] line-clamp-1 text-[20px]",T({state:l}))}),(0,r.jsx)("div",{className:"flex flex-col gap-0.5",children:e.items.map((d,c)=>(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[d.icon&&(0,r.jsx)(h.Text,{className:(0,m.cn)("desktop:size-6 size-5 shrink-0",T({state:l})),html:d.icon}),(0,r.jsx)(h.Text,{html:d.label,className:(0,m.cn)("lg-desktop:text-[18px] desktop:text-[16px] line-clamp-1 flex-1 text-[14px] leading-[1.4]",T({state:l}))})]},c))})]})]})},A=a.forwardRef(({classNames:t={},data:e,className:i,...o},n)=>{const p=e.theme||"light",l=a.useRef(null),d=a.useRef(null),c=a.useRef(!1),v=a.useMemo(()=>e?.scheduleList?.length||2,[e?.scheduleList]),x=a.useMemo(()=>e.scheduleList.findIndex(s=>E(s.startDate,s.endDate)==="in-progress"),[e.scheduleList]),b=a.useCallback((s,g=!1)=>{const u=R=>{switch(R){case"mobile":return{slidesPerView:1.17};case"tablet":return s===2?{slidesPerView:2}:{slidesPerView:2.4};case"laptop":return s===2?{}:s===4?{slidesPerView:3.2}:{slidesPerView:s};case"desktop":return s===2?{slidesPerView:2}:{slidesPerView:s}}},N=u("mobile"),y=u("tablet"),D=u("laptop"),F=u("desktop");return g?{0:{...N,spaceBetween:12},768:{...y,spaceBetween:12},1024:{...D,spaceBetween:16},1440:{...F,spaceBetween:16}}:{0:N,768:y,1024:D,1440:F}},[]),I=a.useMemo(()=>b(v,!0),[v,b]),M=a.useMemo(()=>b(v,!1),[v,b]),C=e.showTimeline!==!1,B=a.useCallback(s=>{c.current||!d.current||(c.current=!0,d.current.slideTo(s.activeIndex,s.params.speed),setTimeout(()=>{c.current=!1},50))},[]),P=a.useCallback(s=>{c.current||!l.current||(c.current=!0,l.current.slideTo(s.activeIndex,s.params.speed),setTimeout(()=>{c.current=!1},50))},[]);return a.useEffect(()=>{l.current&&d.current&&x>=0&&setTimeout(()=>{c.current=!0,l.current?.slideTo(x,500),d.current?.slideTo(x,500),setTimeout(()=>{c.current=!1},600)},100)},[x]),(0,r.jsxs)("div",{...o,ref:n,className:(0,m.cn)("tablet:px-8 laptop:px-16 desktop:px-16 lg-desktop:px-[calc(50%-832px)] overflow-hidden px-4",t?.root,i),children:[C&&(0,r.jsx)(f.Swiper,{breakpoints:M,className:"h-4 w-full !overflow-visible",onSwiper:s=>{d.current=s},onSlideChange:P,children:e.scheduleList.map((s,g)=>{const u=E(s.startDate,s.endDate);return(0,r.jsx)(f.SwiperSlide,{className:"",children:(0,r.jsx)(U,{className:t?.timeline,timeStatus:u,theme:p,index:g,nodeLength:e.scheduleList.length})},"timelineNode"+g)})}),(0,r.jsx)(f.Swiper,{breakpoints:I,className:"w-full !overflow-visible",onSwiper:s=>{l.current=s},onSlideChange:B,children:e.scheduleList.map((s,g)=>{const u=E(s.startDate,s.endDate);return(0,r.jsx)(f.SwiperSlide,{children:(0,r.jsx)(X,{timeStatus:u,className:(0,m.cn)(C?"laptop:mt-4 mt-2":"",t?.eventScheduleCard),item:s,theme:p,scheduleCount:e.scheduleList.length})},"SwiperSlideItem"+g)})})]})});A.displayName="EventSchedule";var Y=A;
1
+ "use strict";"use client";var z=Object.create;var x=Object.defineProperty;var j=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var i in e)x(t,i,{get:e[i],enumerable:!0})},L=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of H(e))!O.call(t,n)&&n!==i&&x(t,n,{get:()=>e[n],enumerable:!(o=j(e,n))||o.enumerable});return t};var V=(t,e,i)=>(i=t!=null?z($(t)):{},L(e||!t||!t.__esModule?x(i,"default",{value:t,enumerable:!0}):i,t)),G=t=>L(x({},"__esModule",{value:!0}),t);var Z={};q(Z,{default:()=>Y});module.exports=G(Z);var s=require("react/jsx-runtime"),a=V(require("react")),g=require("../../helpers/index.js"),u=require("../../components/index.js"),f=require("swiper/react"),k=V(require("dayjs")),S=require("class-variance-authority");const E=(t,e)=>{const i=(0,k.default)(),o=(0,k.default)(t).startOf("day"),n=(0,k.default)(e).endOf("day");return i.isAfter(n)?"completed":i.isBefore(o)?"not-started":"in-progress"},J=(0,S.cva)("h-1 w-full overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),K=(0,S.cva)("size-4 rounded-full transition-colors",{variants:{state:{"in-progress-light":"bg-[#F6CD4E]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F6CD4E]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),T=(0,S.cva)("font-bold leading-[1.2]",{variants:{state:{"in-progress-light":"text-[#080A0F]","in-progress-dark":"text-white","not-started-light":"text-[#080A0F]","not-started-dark":"text-[#F5F6F7]","completed-light":"text-[#4A4C56]/60","completed-dark":"text-[#F5F6F7]/60"}},defaultVariants:{state:"not-started-light"}}),Q=(0,S.cva)("laptop:h-[160px] rounded-box relative flex h-[120px] min-w-0 flex-col justify-between gap-2 overflow-hidden",{variants:{state:{"in-progress-light":"bg-[#F4E8BC]","in-progress-dark":"bg-[#D79941]","not-started-light":"bg-[#EAEAEC]","not-started-dark":"bg-[#1E2024]","completed-light":"bg-[#F4E8BC]","completed-dark":"bg-[#D79941]"}},defaultVariants:{state:"not-started-light"}}),U=({timeStatus:t,theme:e="light",className:i,index:o,nodeLength:n})=>{const p=`${t}-${e}`,l=o===0,d=o===n-1;return(0,s.jsxs)("div",{className:"relative my-2 flex h-1 w-full items-center justify-center",children:[(0,s.jsx)("div",{className:(0,g.cn)(J({state:p}),l&&"rounded-l-full",d&&"rounded-r-full",i)}),(0,s.jsx)("div",{className:"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2",children:(0,s.jsx)("div",{className:K({state:p})})})]})},W=(t,e)=>{if(t)return e==="in-progress"?t.active:e==="completed"&&t.completed||t.inactive},X=({timeStatus:t,item:e,theme:i="light",className:o,scheduleCount:n})=>{const p=a.useMemo(()=>W(e.icon,t),[e.icon,t]),l=`${t}-${i}`;return(0,s.jsxs)("div",{className:(0,g.cn)(Q({state:l}),o),children:[p&&(0,s.jsx)("div",{className:"laptop:w-[128px] desktop:w-[160px] absolute bottom-0 right-0 z-10 w-[120px]",children:(0,s.jsx)(u.Picture,{source:p.url,alt:p.alt,className:"aspect-square"})}),(0,s.jsxs)("div",{className:"tablet:px-4 tablet:py-3 desktop:pl-6 desktop:pr-16 relative z-20 flex h-full flex-col justify-between p-4 pr-8",children:[(0,s.jsx)(u.Heading,{html:e.title,className:(0,g.cn)(n>=4?"desktop:text-[24px]":"desktop:text-[32px]","laptop:text-[24px] line-clamp-1 text-[20px]",T({state:l}))}),(0,s.jsx)("div",{className:"flex flex-col gap-0.5",children:e.items.map((d,c)=>(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[d.icon&&(0,s.jsx)(u.Text,{className:(0,g.cn)("desktop:size-6 size-5 shrink-0",T({state:l})),html:d.icon}),(0,s.jsx)(u.Text,{html:d.label,className:(0,g.cn)("lg-desktop:text-[18px] desktop:text-[16px] line-clamp-1 flex-1 text-[14px] leading-[1.4]",T({state:l}))})]},c))})]})]})},A=a.forwardRef(({classNames:t={},data:e,className:i,...o},n)=>{const p=e.theme||"light",l=a.useRef(null),d=a.useRef(null),c=a.useRef(!1),v=a.useMemo(()=>e?.scheduleList?.length||2,[e?.scheduleList]),b=a.useMemo(()=>e.scheduleList.findIndex(r=>E(r.startDate,r.endDate)==="in-progress"),[e.scheduleList]),w=a.useCallback((r,h=!1)=>{const m=R=>{switch(R){case"mobile":return{slidesPerView:1.17};case"tablet":return r===2?{slidesPerView:2}:{slidesPerView:2.4};case"laptop":return r===2?{}:r===4?{slidesPerView:3.2}:{slidesPerView:r};case"desktop":return r===2?{slidesPerView:2}:{slidesPerView:r}}},N=m("mobile"),y=m("tablet"),D=m("laptop"),F=m("desktop");return h?{0:{...N,spaceBetween:12},768:{...y,spaceBetween:12},1024:{...D,spaceBetween:16},1440:{...F,spaceBetween:16}}:{0:N,768:y,1024:D,1440:F}},[]),I=a.useMemo(()=>w(v,!0),[v,w]),M=a.useMemo(()=>w(v,!1),[v,w]),C=e.showTimeline!==!1,B=a.useCallback(r=>{c.current||!d.current||(c.current=!0,d.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]),P=a.useCallback(r=>{c.current||!l.current||(c.current=!0,l.current.slideTo(r.activeIndex,r.params.speed),setTimeout(()=>{c.current=!1},50))},[]);return a.useEffect(()=>{l.current&&d.current&&b>=0&&setTimeout(()=>{c.current=!0,l.current?.slideTo(b,500),d.current?.slideTo(b,500),setTimeout(()=>{c.current=!1},600)},100)},[b]),(0,s.jsxs)(u.Container,{...o,ref:n,className:(0,g.cn)("overflow-hidden",t?.root,i),children:[C&&(0,s.jsx)(f.Swiper,{breakpoints:M,className:"h-4 w-full !overflow-visible",onSwiper:r=>{d.current=r},onSlideChange:P,children:e.scheduleList.map((r,h)=>{const m=E(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{className:"",children:(0,s.jsx)(U,{className:t?.timeline,timeStatus:m,theme:p,index:h,nodeLength:e.scheduleList.length})},"timelineNode"+h)})}),(0,s.jsx)(f.Swiper,{breakpoints:I,className:"w-full !overflow-visible",onSwiper:r=>{l.current=r},onSlideChange:B,children:e.scheduleList.map((r,h)=>{const m=E(r.startDate,r.endDate);return(0,s.jsx)(f.SwiperSlide,{children:(0,s.jsx)(X,{timeStatus:m,className:(0,g.cn)(C?"laptop:mt-4 mt-2":"",t?.eventScheduleCard),item:r,theme:p,scheduleCount:e.scheduleList.length})},"SwiperSlideItem"+h)})})]})});A.displayName="EventSchedule";var Y=A;
2
2
  //# sourceMappingURL=index.js.map