@anker-in/headless-ui 1.1.55 → 1.1.57

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 (213) hide show
  1. package/dist/cjs/biz-components/ActiveShelf/ProductCard.d.ts +1 -1
  2. package/dist/cjs/biz-components/ActiveShelf/ProductCard.js +1 -1
  3. package/dist/cjs/biz-components/ActiveShelf/ProductCard.js.map +2 -2
  4. package/dist/cjs/biz-components/ActiveShelf/index.js +1 -1
  5. package/dist/cjs/biz-components/ActiveShelf/index.js.map +2 -2
  6. package/dist/cjs/biz-components/BuyOneGetOneShelf/FreeGiftItem.js +1 -1
  7. package/dist/cjs/biz-components/BuyOneGetOneShelf/FreeGiftItem.js.map +2 -2
  8. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  9. package/dist/cjs/biz-components/BuyOneGetOneShelf/ProductCard.js.map +2 -2
  10. package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js +1 -1
  11. package/dist/cjs/biz-components/BuyOneGetOneShelf/index.js.map +2 -2
  12. package/dist/cjs/biz-components/Category/SwiperCategory.d.ts +2 -0
  13. package/dist/cjs/biz-components/Category/SwiperCategory.js +1 -1
  14. package/dist/cjs/biz-components/Category/SwiperCategory.js.map +3 -3
  15. package/dist/cjs/biz-components/Category/index.js +1 -1
  16. package/dist/cjs/biz-components/Category/index.js.map +3 -3
  17. package/dist/cjs/biz-components/CreditsShelf/ProductCard.d.ts +41 -0
  18. package/dist/cjs/biz-components/CreditsShelf/ProductCard.js +2 -0
  19. package/dist/cjs/biz-components/CreditsShelf/ProductCard.js.map +7 -0
  20. package/dist/cjs/biz-components/CreditsShelf/ProductsList.d.ts +20 -0
  21. package/dist/cjs/biz-components/CreditsShelf/ProductsList.js +2 -0
  22. package/dist/cjs/biz-components/CreditsShelf/ProductsList.js.map +7 -0
  23. package/dist/cjs/biz-components/CreditsShelf/Root.d.ts +43 -0
  24. package/dist/cjs/biz-components/CreditsShelf/Root.js +2 -0
  25. package/dist/cjs/biz-components/CreditsShelf/Root.js.map +7 -0
  26. package/dist/cjs/biz-components/CreditsShelf/context.d.ts +40 -0
  27. package/dist/cjs/biz-components/CreditsShelf/context.js +2 -0
  28. package/dist/cjs/biz-components/CreditsShelf/context.js.map +7 -0
  29. package/dist/cjs/biz-components/CreditsShelf/index.d.ts +15 -0
  30. package/dist/cjs/biz-components/CreditsShelf/index.js +2 -0
  31. package/dist/cjs/biz-components/CreditsShelf/index.js.map +7 -0
  32. package/dist/cjs/biz-components/CreditsShelf/types.d.ts +73 -0
  33. package/dist/cjs/biz-components/CreditsShelf/types.js +2 -0
  34. package/dist/cjs/biz-components/CreditsShelf/types.js.map +7 -0
  35. package/dist/cjs/biz-components/GiftBox/index.js +1 -1
  36. package/dist/cjs/biz-components/GiftBox/index.js.map +2 -2
  37. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js +1 -1
  38. package/dist/cjs/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  39. package/dist/cjs/biz-components/ImageOverlayShelf/ProductCard.js +1 -1
  40. package/dist/cjs/biz-components/ImageOverlayShelf/ProductCard.js.map +2 -2
  41. package/dist/cjs/biz-components/MediaPlayerBase/index.js +1 -1
  42. package/dist/cjs/biz-components/MediaPlayerBase/index.js.map +2 -2
  43. package/dist/cjs/biz-components/MediaPlayerSticky/index.js +1 -1
  44. package/dist/cjs/biz-components/MediaPlayerSticky/index.js.map +2 -2
  45. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js +2 -2
  46. package/dist/cjs/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js.map +2 -2
  47. package/dist/cjs/biz-components/MediaSceneSwitcher/types.d.ts +1 -0
  48. package/dist/cjs/biz-components/MediaSceneSwitcher/types.js +1 -1
  49. package/dist/cjs/biz-components/MediaSceneSwitcher/types.js.map +1 -1
  50. package/dist/cjs/biz-components/MediaShelf/ProductCard.js +1 -1
  51. package/dist/cjs/biz-components/MediaShelf/ProductCard.js.map +2 -2
  52. package/dist/cjs/biz-components/MiniCart/CircleProgress.d.ts +38 -0
  53. package/dist/cjs/biz-components/MiniCart/CircleProgress.js +2 -0
  54. package/dist/cjs/biz-components/MiniCart/CircleProgress.js.map +7 -0
  55. package/dist/cjs/biz-components/MiniCart/MiniCartDialog.js +1 -1
  56. package/dist/cjs/biz-components/MiniCart/MiniCartDialog.js.map +1 -1
  57. package/dist/cjs/biz-components/MiniCart/index.d.ts +31 -1
  58. package/dist/cjs/biz-components/MiniCart/index.js +1 -1
  59. package/dist/cjs/biz-components/MiniCart/index.js.map +3 -3
  60. package/dist/cjs/biz-components/SceneShelf/Footer.d.ts +21 -0
  61. package/dist/cjs/biz-components/SceneShelf/Footer.js +2 -0
  62. package/dist/cjs/biz-components/SceneShelf/Footer.js.map +7 -0
  63. package/dist/cjs/biz-components/SceneShelf/ProductCard.d.ts +23 -0
  64. package/dist/cjs/biz-components/SceneShelf/ProductCard.js +2 -0
  65. package/dist/cjs/biz-components/SceneShelf/ProductCard.js.map +7 -0
  66. package/dist/cjs/biz-components/SceneShelf/ProductsPanel.d.ts +26 -0
  67. package/dist/cjs/biz-components/SceneShelf/ProductsPanel.js +2 -0
  68. package/dist/cjs/biz-components/SceneShelf/ProductsPanel.js.map +7 -0
  69. package/dist/cjs/biz-components/SceneShelf/Root.d.ts +20 -0
  70. package/dist/cjs/biz-components/SceneShelf/Root.js +2 -0
  71. package/dist/cjs/biz-components/SceneShelf/Root.js.map +7 -0
  72. package/dist/cjs/biz-components/SceneShelf/Scene.d.ts +38 -0
  73. package/dist/cjs/biz-components/SceneShelf/Scene.js +2 -0
  74. package/dist/cjs/biz-components/SceneShelf/Scene.js.map +7 -0
  75. package/dist/cjs/biz-components/SceneShelf/SceneImage.d.ts +14 -0
  76. package/dist/cjs/biz-components/SceneShelf/SceneImage.js +2 -0
  77. package/dist/cjs/biz-components/SceneShelf/SceneImage.js.map +7 -0
  78. package/dist/cjs/biz-components/SceneShelf/context.d.ts +40 -0
  79. package/dist/cjs/biz-components/SceneShelf/context.js +2 -0
  80. package/dist/cjs/biz-components/SceneShelf/context.js.map +7 -0
  81. package/dist/cjs/biz-components/SceneShelf/index.d.ts +21 -0
  82. package/dist/cjs/biz-components/SceneShelf/index.js +2 -0
  83. package/dist/cjs/biz-components/SceneShelf/index.js.map +7 -0
  84. package/dist/cjs/biz-components/SceneShelf/types.d.ts +51 -0
  85. package/dist/cjs/biz-components/SceneShelf/types.js +2 -0
  86. package/dist/cjs/biz-components/SceneShelf/types.js.map +7 -0
  87. package/dist/cjs/biz-components/SecondaryBanner/index.d.ts +25 -0
  88. package/dist/cjs/biz-components/SecondaryBanner/index.js +1 -1
  89. package/dist/cjs/biz-components/SecondaryBanner/index.js.map +3 -3
  90. package/dist/cjs/biz-components/index.d.ts +8 -1
  91. package/dist/cjs/biz-components/index.js +1 -1
  92. package/dist/cjs/biz-components/index.js.map +3 -3
  93. package/dist/cjs/components/Countdown.js +1 -1
  94. package/dist/cjs/components/Countdown.js.map +2 -2
  95. package/dist/cjs/components/button.js +1 -1
  96. package/dist/cjs/components/button.js.map +2 -2
  97. package/dist/cjs/components/checkbox.js +1 -1
  98. package/dist/cjs/components/checkbox.js.map +2 -2
  99. package/dist/cjs/components/text.js +1 -1
  100. package/dist/cjs/components/text.js.map +2 -2
  101. package/dist/cjs/stories/decorators/dataPropsDecorator.d.ts +16 -0
  102. package/dist/cjs/stories/decorators/dataPropsDecorator.js +2 -0
  103. package/dist/cjs/stories/decorators/dataPropsDecorator.js.map +7 -0
  104. package/dist/esm/biz-components/ActiveShelf/ProductCard.d.ts +1 -1
  105. package/dist/esm/biz-components/ActiveShelf/ProductCard.js +1 -1
  106. package/dist/esm/biz-components/ActiveShelf/ProductCard.js.map +2 -2
  107. package/dist/esm/biz-components/ActiveShelf/index.js +1 -1
  108. package/dist/esm/biz-components/ActiveShelf/index.js.map +2 -2
  109. package/dist/esm/biz-components/BuyOneGetOneShelf/FreeGiftItem.js +1 -1
  110. package/dist/esm/biz-components/BuyOneGetOneShelf/FreeGiftItem.js.map +2 -2
  111. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js +1 -1
  112. package/dist/esm/biz-components/BuyOneGetOneShelf/ProductCard.js.map +2 -2
  113. package/dist/esm/biz-components/BuyOneGetOneShelf/index.js +1 -1
  114. package/dist/esm/biz-components/BuyOneGetOneShelf/index.js.map +2 -2
  115. package/dist/esm/biz-components/Category/SwiperCategory.d.ts +2 -0
  116. package/dist/esm/biz-components/Category/SwiperCategory.js +1 -1
  117. package/dist/esm/biz-components/Category/SwiperCategory.js.map +3 -3
  118. package/dist/esm/biz-components/Category/index.js +1 -1
  119. package/dist/esm/biz-components/Category/index.js.map +3 -3
  120. package/dist/esm/biz-components/CreditsShelf/ProductCard.d.ts +41 -0
  121. package/dist/esm/biz-components/CreditsShelf/ProductCard.js +2 -0
  122. package/dist/esm/biz-components/CreditsShelf/ProductCard.js.map +7 -0
  123. package/dist/esm/biz-components/CreditsShelf/ProductsList.d.ts +20 -0
  124. package/dist/esm/biz-components/CreditsShelf/ProductsList.js +2 -0
  125. package/dist/esm/biz-components/CreditsShelf/ProductsList.js.map +7 -0
  126. package/dist/esm/biz-components/CreditsShelf/Root.d.ts +43 -0
  127. package/dist/esm/biz-components/CreditsShelf/Root.js +2 -0
  128. package/dist/esm/biz-components/CreditsShelf/Root.js.map +7 -0
  129. package/dist/esm/biz-components/CreditsShelf/context.d.ts +40 -0
  130. package/dist/esm/biz-components/CreditsShelf/context.js +2 -0
  131. package/dist/esm/biz-components/CreditsShelf/context.js.map +7 -0
  132. package/dist/esm/biz-components/CreditsShelf/index.d.ts +15 -0
  133. package/dist/esm/biz-components/CreditsShelf/index.js +2 -0
  134. package/dist/esm/biz-components/CreditsShelf/index.js.map +7 -0
  135. package/dist/esm/biz-components/CreditsShelf/types.d.ts +73 -0
  136. package/dist/esm/biz-components/CreditsShelf/types.js +2 -0
  137. package/dist/esm/biz-components/CreditsShelf/types.js.map +7 -0
  138. package/dist/esm/biz-components/GiftBox/index.js +1 -1
  139. package/dist/esm/biz-components/GiftBox/index.js.map +2 -2
  140. package/dist/esm/biz-components/HeroBanner/HeroBanner.js +1 -1
  141. package/dist/esm/biz-components/HeroBanner/HeroBanner.js.map +3 -3
  142. package/dist/esm/biz-components/ImageOverlayShelf/ProductCard.js +1 -1
  143. package/dist/esm/biz-components/ImageOverlayShelf/ProductCard.js.map +2 -2
  144. package/dist/esm/biz-components/MediaPlayerBase/index.js +1 -1
  145. package/dist/esm/biz-components/MediaPlayerBase/index.js.map +2 -2
  146. package/dist/esm/biz-components/MediaPlayerSticky/index.js +1 -1
  147. package/dist/esm/biz-components/MediaPlayerSticky/index.js.map +2 -2
  148. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js +2 -2
  149. package/dist/esm/biz-components/MediaSceneSwitcher/MediaSceneSwitcher.js.map +2 -2
  150. package/dist/esm/biz-components/MediaSceneSwitcher/types.d.ts +1 -0
  151. package/dist/esm/biz-components/MediaShelf/ProductCard.js +1 -1
  152. package/dist/esm/biz-components/MediaShelf/ProductCard.js.map +2 -2
  153. package/dist/esm/biz-components/MiniCart/CircleProgress.d.ts +38 -0
  154. package/dist/esm/biz-components/MiniCart/CircleProgress.js +2 -0
  155. package/dist/esm/biz-components/MiniCart/CircleProgress.js.map +7 -0
  156. package/dist/esm/biz-components/MiniCart/MiniCartDialog.js +1 -1
  157. package/dist/esm/biz-components/MiniCart/MiniCartDialog.js.map +1 -1
  158. package/dist/esm/biz-components/MiniCart/index.d.ts +31 -1
  159. package/dist/esm/biz-components/MiniCart/index.js +1 -1
  160. package/dist/esm/biz-components/MiniCart/index.js.map +3 -3
  161. package/dist/esm/biz-components/SceneShelf/Footer.d.ts +21 -0
  162. package/dist/esm/biz-components/SceneShelf/Footer.js +2 -0
  163. package/dist/esm/biz-components/SceneShelf/Footer.js.map +7 -0
  164. package/dist/esm/biz-components/SceneShelf/ProductCard.d.ts +23 -0
  165. package/dist/esm/biz-components/SceneShelf/ProductCard.js +2 -0
  166. package/dist/esm/biz-components/SceneShelf/ProductCard.js.map +7 -0
  167. package/dist/esm/biz-components/SceneShelf/ProductsPanel.d.ts +26 -0
  168. package/dist/esm/biz-components/SceneShelf/ProductsPanel.js +2 -0
  169. package/dist/esm/biz-components/SceneShelf/ProductsPanel.js.map +7 -0
  170. package/dist/esm/biz-components/SceneShelf/Root.d.ts +20 -0
  171. package/dist/esm/biz-components/SceneShelf/Root.js +2 -0
  172. package/dist/esm/biz-components/SceneShelf/Root.js.map +7 -0
  173. package/dist/esm/biz-components/SceneShelf/Scene.d.ts +38 -0
  174. package/dist/esm/biz-components/SceneShelf/Scene.js +2 -0
  175. package/dist/esm/biz-components/SceneShelf/Scene.js.map +7 -0
  176. package/dist/esm/biz-components/SceneShelf/SceneImage.d.ts +14 -0
  177. package/dist/esm/biz-components/SceneShelf/SceneImage.js +2 -0
  178. package/dist/esm/biz-components/SceneShelf/SceneImage.js.map +7 -0
  179. package/dist/esm/biz-components/SceneShelf/context.d.ts +40 -0
  180. package/dist/esm/biz-components/SceneShelf/context.js +2 -0
  181. package/dist/esm/biz-components/SceneShelf/context.js.map +7 -0
  182. package/dist/esm/biz-components/SceneShelf/index.d.ts +21 -0
  183. package/dist/esm/biz-components/SceneShelf/index.js +2 -0
  184. package/dist/esm/biz-components/SceneShelf/index.js.map +7 -0
  185. package/dist/esm/biz-components/SceneShelf/types.d.ts +51 -0
  186. package/dist/esm/biz-components/SceneShelf/types.js +2 -0
  187. package/dist/esm/biz-components/SceneShelf/types.js.map +7 -0
  188. package/dist/esm/biz-components/SecondaryBanner/index.d.ts +25 -0
  189. package/dist/esm/biz-components/SecondaryBanner/index.js +1 -1
  190. package/dist/esm/biz-components/SecondaryBanner/index.js.map +3 -3
  191. package/dist/esm/biz-components/index.d.ts +8 -1
  192. package/dist/esm/biz-components/index.js +1 -1
  193. package/dist/esm/biz-components/index.js.map +3 -3
  194. package/dist/esm/components/Countdown.js +1 -1
  195. package/dist/esm/components/Countdown.js.map +2 -2
  196. package/dist/esm/components/button.js +1 -1
  197. package/dist/esm/components/button.js.map +2 -2
  198. package/dist/esm/components/checkbox.js +1 -1
  199. package/dist/esm/components/checkbox.js.map +2 -2
  200. package/dist/esm/components/text.js +1 -1
  201. package/dist/esm/components/text.js.map +2 -2
  202. package/dist/esm/stories/decorators/dataPropsDecorator.d.ts +16 -0
  203. package/dist/esm/stories/decorators/dataPropsDecorator.js +2 -0
  204. package/dist/esm/stories/decorators/dataPropsDecorator.js.map +7 -0
  205. package/dist/tokens/anker.css +1 -0
  206. package/dist/tokens/base.css +1 -0
  207. package/dist/tokens/eufy.css +1 -0
  208. package/dist/tokens/eufyMake.css +1 -0
  209. package/dist/tokens/solix.css +1 -0
  210. package/dist/tokens/soundcore.css +1 -0
  211. package/package.json +6 -2
  212. package/style.css +20 -3
  213. package/tailwind.config.js +1 -0
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var $=Object.create;var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var M=(e,t)=>{for(var a in t)d(e,a,{get:t[a],enumerable:!0})},w=(e,t,a,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of L(t))!T.call(e,i)&&i!==a&&d(e,i,{get:()=>t[i],enumerable:!(r=E(t,i))||r.enumerable});return e};var u=(e,t,a)=>(a=e!=null?$(S(e)):{},w(t||!e||!e.__esModule?d(a,"default",{value:e,enumerable:!0}):a,e)),D=e=>w(d({},"__esModule",{value:!0}),e);var z={};M(z,{default:()=>R});module.exports=D(z);var o=require("react/jsx-runtime"),l=u(require("react")),n=require("../../helpers/utils.js"),h=u(require("../../components/picture.js")),I=require("../../shared/Styles.js"),N=u(require("../Title/index.js")),f=u(require("./SwiperCategory.js")),x=require("../../hooks/useExposure.js"),y=require("../../shared/trackUrlRef.js");const p="image",c="category_banner",g=5,j=3,P=(e,t)=>{const a=[];for(let r=0;r<e.length;r+=t)a.push(e.slice(r,r+t));return a},H=({data:e,configuration:t})=>{const a=(0,l.useRef)(null);return(0,x.useExposure)(a,{componentType:p,componentName:c,componentTitle:e?.name,position:t?.index+1}),(0,o.jsx)("div",{className:(0,n.cn)("relative","aspect-w-[167] aspect-h-[120]","tablet:aspect-w-[167] tablet:aspect-h-[120]","laptop:aspect-w-[212] laptop:aspect-h-[144]","desktop:aspect-w-[205] desktop:aspect-h-[192]","lg-desktop:aspect-w-[264] lg-desktop:aspect-h-[240]"),children:(0,o.jsxs)("div",{ref:a,className:(0,n.cn)("tablet:p-3 laptop:p-4 desktop:p-6 absolute inset-0 justify-between","bg-container-primary hover:bg-info-white group box-border flex cursor-pointer flex-col overflow-hidden duration-300",t?.shape==="round"?"rounded-2xl":"rounded-none"),children:[(0,o.jsx)("div",{className:"transition-all duration-300 group-hover:scale-110",children:(0,o.jsx)("a",{"aria-label":e?.name,href:(0,y.trackUrlRef)(e?.link,`${p}_${c}`),"data-headless-type-name":`${p}#${c}`,"data-headless-title-desc-button":`${e?.name}`,onClick:()=>t?.event?.primaryButton(e,t?.index),children:(0,o.jsx)(h.default,{alt:e?.image?.alt||"",source:e?.image?.url||"",className:"laptop:size-[88px] tablet:size-[72px] desktop:size-[116px] lg-desktop:size-[146px] m-auto flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover"})})}),(0,o.jsx)("p",{className:"lg-desktop:text-lg lg-desktop:!leading-6 text-info-primary box-border line-clamp-2 text-center text-sm font-bold leading-4",children:e?.name})]})})},A=({data:e,configuration:t,index:a,isFirstItemLarger:r})=>{const i=(0,l.useRef)(null);(0,x.useExposure)(i,{componentType:p,componentName:c,componentTitle:e?.name,position:t?.index+1});const s=a===0;return(0,o.jsxs)("div",{ref:i,className:(0,n.cn)("bg-container-primary box-border flex w-full shrink-0 flex-col items-center justify-center overflow-hidden","hover:bg-info-white cursor-pointer duration-300",r?(0,n.cn)("p-4",s?"aspect-h-[252] row-span-2":"aspect-h-[120]"):"max-h-[126px] px-3 py-4",t?.shape==="round"?"rounded-2xl":"rounded-none"),children:[(0,o.jsx)("a",{href:(0,y.trackUrlRef)(e?.link,`${p}_${c}`),"data-headless-type-name":`${p}#${c}`,"data-headless-title-desc-button":`${e?.name}`,"data-headless-nav-postion":`''#${t?.index+1}`,onClick:()=>t?.event?.primaryButton(e,t?.index+1),children:(0,o.jsx)(h.default,{source:e?.image?.url||"",alt:e?.image?.alt||"",className:(0,n.cn)("m-auto mb-2 flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover",r?(0,n.cn)(s?"max-h-[146px] overflow-hidden":"max-h-[72px] max-w-[72px]"):"size-[72px]")})}),(0,o.jsx)("p",{className:(0,n.cn)("text-info-primary w-full text-center text-sm font-bold",r?"line-clamp-2":"shrink-0 truncate"),children:e?.name})]})},B=({data:e,configuration:t})=>{const r=(t?.totalCategories??0)<=g;return(0,o.jsx)("div",{className:`gap-3 ${r?"grid grid-cols-2":"flex h-full flex-col"}`,children:e?.map((i,s)=>(0,o.jsx)(A,{index:s,data:i,configuration:t,isFirstItemLarger:r},s))})},C=l.default.forwardRef((e,t)=>{const{data:a,className:r="",key:i,event:s}=e,m=(a?.isShowSelect?a?.products:a?.productData)||[],v=m.length>g,b=m.length,_=P(m,v?j:g),k=(0,l.useRef)(null);return(0,l.useImperativeHandle)(t,()=>k.current),(0,o.jsxs)("div",{ref:k,className:(0,n.cn)("w-full overflow-hidden",r,{"aiui-dark":a?.theme==="dark"}),children:[a?.title&&(0,o.jsx)(N.default,{data:{title:a?.title},className:"text-4xl"}),(0,o.jsx)("div",{className:"tablet:block hidden",children:(0,o.jsx)(f.default,{id:`Category${i}`,Slide:H,data:{list:m,configuration:{shape:a?.shape,event:s,title:a?.title,totalCategories:b}}})}),(0,o.jsx)("div",{className:"tablet:hidden block",children:(0,o.jsx)(f.default,{id:`Category1${i}`,Slide:B,data:{list:_,configuration:{shape:a?.shape,event:s,title:a?.title,totalCategories:b}},isHalf:v})}),(0,o.jsx)("div",{className:"h-7"})]})});C.displayName="Category";var R=(0,I.withLayout)(C);
1
+ "use strict";"use client";var $=Object.create;var d=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var M=(e,t)=>{for(var a in t)d(e,a,{get:t[a],enumerable:!0})},k=(e,t,a,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of L(t))!T.call(e,n)&&n!==a&&d(e,n,{get:()=>t[n],enumerable:!(i=E(t,n))||i.enumerable});return e};var u=(e,t,a)=>(a=e!=null?$(S(e)):{},k(t||!e||!e.__esModule?d(a,"default",{value:e,enumerable:!0}):a,e)),j=e=>k(d({},"__esModule",{value:!0}),e);var R={};M(R,{default:()=>z});module.exports=j(R);var o=require("react/jsx-runtime"),l=u(require("react")),r=require("../../helpers/utils.js"),h=u(require("../../components/picture.js")),N=require("../../shared/Styles.js"),_=u(require("../Title/index.js")),f=u(require("./SwiperCategory.js")),x=require("../../hooks/useExposure.js"),y=require("../../shared/trackUrlRef.js");const p="image",m="category_banner",g=5,D=3,P=(e,t)=>{const a=[];for(let i=0;i<e.length;i+=t)a.push(e.slice(i,i+t));return a},H=({data:e,configuration:t})=>{const a=(0,l.useRef)(null);return(0,x.useExposure)(a,{componentType:p,componentName:m,componentTitle:e?.name,position:t?.index+1}),(0,o.jsx)("div",{className:(0,r.cn)("relative max-h-[240px] overflow-hidden"),children:(0,o.jsx)("div",{className:(0,r.cn)("aspect-w-[167] aspect-h-[120]","tablet:aspect-w-[404] tablet:aspect-h-[240]","laptop:aspect-w-[212] laptop:aspect-h-[144]","desktop:aspect-w-[205] desktop:aspect-h-[192]","lg-desktop:aspect-w-[264] lg-desktop:aspect-h-[240]"),children:(0,o.jsxs)("div",{ref:a,className:(0,r.cn)("tablet:p-3 laptop:p-4 desktop:p-6 absolute inset-0 max-h-[240px] justify-between","bg-container-primary hover:bg-info-white group box-border flex cursor-pointer flex-col overflow-hidden duration-300",t?.shape==="round"?"rounded-2xl":"rounded-none"),children:[(0,o.jsx)("div",{className:"flex items-center justify-center transition-all duration-300 group-hover:scale-110",children:(0,o.jsx)("a",{"aria-label":e?.name,href:(0,y.trackUrlRef)(e?.link,`${p}_${m}`),"data-headless-type-name":`${p}#${m}`,"data-headless-title-desc-button":`${e?.name}`,onClick:()=>t?.event?.primaryButton(e,t?.index),children:(0,o.jsx)(h.default,{alt:e?.image?.alt||"",source:e?.image?.url||"",className:"laptop:size-1/2 tablet:size-[72px] desktop:size-[116px] lg-desktop:size-[146px] m-auto flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover"})})}),(0,o.jsx)("p",{className:"lg-desktop:text-lg lg-desktop:!leading-6 text-info-primary box-border line-clamp-2 text-center text-sm font-bold leading-4",children:e?.name})]})})})},A=({data:e,configuration:t,index:a,isFirstItemLarger:i})=>{const n=(0,l.useRef)(null);(0,x.useExposure)(n,{componentType:p,componentName:m,componentTitle:e?.name,position:t?.index+1});const s=a===0;return(0,o.jsxs)("div",{ref:n,className:(0,r.cn)("bg-container-primary box-border flex w-full shrink-0 flex-col items-center justify-center overflow-hidden","hover:bg-info-white cursor-pointer duration-300",i?(0,r.cn)("p-4",s?"aspect-h-[252] row-span-2":"aspect-h-[120]"):"max-h-[126px] px-3 py-4",t?.shape==="round"?"rounded-2xl":"rounded-none"),children:[(0,o.jsx)("a",{href:(0,y.trackUrlRef)(e?.link,`${p}_${m}`),"data-headless-type-name":`${p}#${m}`,"data-headless-title-desc-button":`${e?.name}`,"data-headless-nav-postion":`''#${t?.index+1}`,onClick:()=>t?.event?.primaryButton(e,t?.index+1),children:(0,o.jsx)(h.default,{source:e?.image?.url||"",alt:e?.image?.alt||"",className:(0,r.cn)("m-auto mb-2 flex justify-center object-contain [&_img]:h-full [&_img]:w-auto [&_img]:object-contain",i?(0,r.cn)(s?"size-full max-h-[146px] overflow-hidden":"max-h-[72px] max-w-[72px]"):"size-[72px]")})}),(0,o.jsx)("p",{className:(0,r.cn)("text-info-primary w-full text-center text-sm font-bold",i?"line-clamp-2":"shrink-0 truncate"),children:e?.name})]})},B=({data:e,configuration:t})=>{const i=(t?.totalCategories??0)<=g;return(0,o.jsx)("div",{className:`gap-3 ${i?"grid grid-cols-2":"flex h-full flex-col"}`,children:e?.map((n,s)=>(0,o.jsx)(A,{index:s,data:n,configuration:t,isFirstItemLarger:i},s))})},C=l.default.forwardRef((e,t)=>{const{data:a,className:i="",key:n,event:s}=e,c=(a?.isShowSelect?a?.products:a?.productData)||[],v=c.length>g,b=c.length,I=P(c,v?D:g),w=(0,l.useRef)(null);return(0,l.useImperativeHandle)(t,()=>w.current),(0,o.jsxs)("div",{ref:w,className:(0,r.cn)("w-full overflow-hidden",i,{"aiui-dark":a?.theme==="dark"}),children:[a?.title&&(0,o.jsx)(_.default,{data:{title:a?.title},className:"text-4xl"}),(0,o.jsx)("div",{className:"tablet:block hidden",children:(0,o.jsx)(f.default,{id:`Category${n}`,Slide:H,data:{list:c,configuration:{shape:a?.shape,event:s,title:a?.title,totalCategories:b}},paginationClassName:"[&_.swiper-pagination]:!-bottom-6"})}),(0,o.jsx)("div",{className:"tablet:hidden block",children:(0,o.jsx)(f.default,{id:`Category1${n}`,Slide:B,data:{list:I,configuration:{shape:a?.shape,event:s,title:a?.title,totalCategories:b}},isHalf:v,paginationClassName:"[&_.swiper-pagination]:!-bottom-6"})}),(0,o.jsx)("div",{className:"h-7"})]})});C.displayName="Category";var z=(0,N.withLayout)(C);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/Category/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from './SwiperCategory.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport type { Img } from '../../types/props.js'\n\nconst componentType = 'image'\nconst componentName = 'category_banner'\nconst MOBILE_FULL_PAGE_CAPACITY = 5\nconst MOBILE_COMPACT_PAGE_SIZE = 3\n\nexport interface CategoryItem {\n /** \u4EA7\u54C1\u56FE\u7247*/\n image: Img\n name: string\n link?: string\n}\n\nexport interface CategoryProps {\n className?: string\n /** \u4E3B\u9898\u8272*/\n data: {\n isShowSelect: boolean\n products: CategoryItem[]\n productData: CategoryItem[]\n /** \u5361\u7247\u5F62\u72B6 */\n shape?: 'round' | 'square'\n title?: string\n theme?: 'light' | 'dark'\n }\n buildData?: {\n categories: any[]\n products: any[]\n }\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: {\n primaryButton?: (_v: any, _index: number) => void\n }\n key?: string\n}\n\nconst chunkArray = (arr: any[], size: number) => {\n const chunks = []\n for (let i = 0; i < arr.length; i += size) {\n chunks.push(arr.slice(i, i + size))\n }\n return chunks\n}\n\nconst CategoryPcItem = ({ data, configuration }: { data: CategoryItem; configuration?: any }) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.name,\n position: configuration?.index + 1,\n })\n\n return (\n <div\n className={cn(\n 'relative',\n 'aspect-w-[167] aspect-h-[120]',\n 'tablet:aspect-w-[167] tablet:aspect-h-[120]',\n 'laptop:aspect-w-[212] laptop:aspect-h-[144]',\n 'desktop:aspect-w-[205] desktop:aspect-h-[192]',\n 'lg-desktop:aspect-w-[264] lg-desktop:aspect-h-[240]'\n )}\n >\n <div\n ref={ref}\n className={cn(\n 'tablet:p-3 laptop:p-4 desktop:p-6 absolute inset-0 justify-between',\n 'bg-container-primary hover:bg-info-white group box-border flex cursor-pointer flex-col overflow-hidden duration-300',\n configuration?.shape === 'round' ? 'rounded-2xl' : 'rounded-none'\n )}\n >\n <div className=\"transition-all duration-300 group-hover:scale-110\">\n <a\n aria-label={data?.name}\n href={trackUrlRef(data?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.name}`}\n onClick={() => configuration?.event?.primaryButton(data, configuration?.index)}\n >\n <Picture\n alt={data?.image?.alt || ''}\n source={data?.image?.url || ''}\n className=\"laptop:size-[88px] tablet:size-[72px] desktop:size-[116px] lg-desktop:size-[146px] m-auto flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover\"\n />\n </a>\n </div>\n <p className=\"lg-desktop:text-lg lg-desktop:!leading-6 text-info-primary box-border line-clamp-2 text-center text-sm font-bold leading-4\">\n {data?.name}\n </p>\n </div>\n </div>\n )\n}\n\n// \u79FB\u52A8\u7AEF\u54C1\u7C7B\u5C55\u793A\u7EC4\u4EF6\nconst SingleMobileItem = ({\n data,\n configuration,\n index,\n isFirstItemLarger,\n}: {\n data: CategoryItem\n configuration?: any\n index: number\n isFirstItemLarger: boolean\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.name,\n position: configuration?.index + 1,\n })\n\n const isFirstItem = index === 0\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary box-border flex w-full shrink-0 flex-col items-center justify-center overflow-hidden',\n 'hover:bg-info-white cursor-pointer duration-300',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u6837\u5F0F\n isFirstItemLarger\n ? cn('p-4', isFirstItem ? 'aspect-h-[252] row-span-2' : 'aspect-h-[120]')\n : 'max-h-[126px] px-3 py-4',\n configuration?.shape === 'round' ? 'rounded-2xl' : 'rounded-none'\n )}\n >\n <a\n href={trackUrlRef(data?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.name}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n onClick={() => configuration?.event?.primaryButton(data, configuration?.index + 1)}\n >\n <Picture\n source={data?.image?.url || ''}\n alt={data?.image?.alt || ''}\n className={cn(\n 'm-auto mb-2 flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u56FE\u7247\u5C3A\u5BF8\n isFirstItemLarger\n ? cn(isFirstItem ? 'max-h-[146px] overflow-hidden' : 'max-h-[72px] max-w-[72px]')\n : 'size-[72px]'\n )}\n />\n </a>\n <p\n className={cn(\n 'text-info-primary w-full text-center text-sm font-bold',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u6587\u5B57\u663E\u793A\n isFirstItemLarger ? 'line-clamp-2' : 'shrink-0 truncate'\n )}\n >\n {data?.name}\n </p>\n </div>\n )\n}\n\n// \u79FB\u52A8\u7AEF\u54C1\u7C7B\u5C55\u793A\nconst CategoryMobileItem = ({ data, configuration }: { data: CategoryItem[]; configuration?: any }) => {\n const totalCategories = configuration?.totalCategories ?? 0\n // \u5F53\u6570\u91CF\u5C11\u4E8E\u5BB9\u5668\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u9879\u76EE\u4F1A\u5360\u636E\u66F4\u5927\u7A7A\u95F4\n const isFirstItemLarger = totalCategories <= MOBILE_FULL_PAGE_CAPACITY\n return (\n <div className={`gap-3 ${isFirstItemLarger ? 'grid grid-cols-2' : 'flex h-full flex-col'}`}>\n {data?.map((item, index) => (\n <SingleMobileItem\n key={index}\n index={index}\n data={item}\n configuration={configuration}\n isFirstItemLarger={isFirstItemLarger}\n />\n ))}\n </div>\n )\n}\n\nconst Category = React.forwardRef<HTMLDivElement, CategoryProps>((props, ref) => {\n const { data, className = '', key, event } = props\n // soundcore\u54C1\u724C\u54C1\u7C7B\u4E0D\u8D85\u8FC75\u4E2A\uFF0C\u5355\u72EC\u505A\u6837\u5F0F\u5904\u7406\n const currentData = (data?.isShowSelect ? data?.products : data?.productData) || []\n const isCardShow = currentData.length > MOBILE_FULL_PAGE_CAPACITY\n const totalCategories = currentData.length\n const mobileSlides = chunkArray(currentData, isCardShow ? MOBILE_COMPACT_PAGE_SIZE : MOBILE_FULL_PAGE_CAPACITY)\n\n const innerRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n return (\n <div ref={innerRef} className={cn('w-full overflow-hidden', className, { 'aiui-dark': data?.theme === 'dark' })}>\n {data?.title && <Title data={{ title: data?.title }} className=\"text-4xl\" />}\n <div className=\"tablet:block hidden\">\n <SwiperBox\n id={`Category${key}`}\n Slide={CategoryPcItem}\n data={{\n list: currentData,\n configuration: { shape: data?.shape, event: event, title: data?.title, totalCategories },\n }}\n />\n </div>\n <div className=\"tablet:hidden block\">\n <SwiperBox\n id={`Category1${key}`}\n Slide={CategoryMobileItem}\n data={{\n list: mobileSlides,\n configuration: { shape: data?.shape, event: event, title: data?.title, totalCategories },\n }}\n isHalf={isCardShow}\n />\n </div>\n <div className=\"h-7\" />\n </div>\n )\n})\n\nCategory.displayName = 'Category'\n\nexport default withLayout(Category)\n"],
5
- "mappings": "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",
6
- "names": ["Category_exports", "__export", "Category_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_utils", "import_picture", "import_Styles", "import_Title", "import_SwiperCategory", "import_useExposure", "import_trackUrlRef", "componentType", "componentName", "MOBILE_FULL_PAGE_CAPACITY", "MOBILE_COMPACT_PAGE_SIZE", "chunkArray", "arr", "size", "chunks", "i", "CategoryPcItem", "data", "configuration", "ref", "Picture", "SingleMobileItem", "index", "isFirstItemLarger", "isFirstItem", "CategoryMobileItem", "item", "Category", "React", "props", "className", "key", "event", "currentData", "isCardShow", "totalCategories", "mobileSlides", "innerRef", "Title", "SwiperBox"]
4
+ "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef } from 'react'\nimport { cn } from '../../helpers/utils.js'\nimport Picture from '../../components/picture.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport Title from '../Title/index.js'\nimport SwiperBox from './SwiperCategory.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef } from '../../shared/trackUrlRef.js'\nimport type { Img } from '../../types/props.js'\n\nconst componentType = 'image'\nconst componentName = 'category_banner'\nconst MOBILE_FULL_PAGE_CAPACITY = 5\nconst MOBILE_COMPACT_PAGE_SIZE = 3\n\nexport interface CategoryItem {\n /** \u4EA7\u54C1\u56FE\u7247*/\n image: Img\n name: string\n link?: string\n}\n\nexport interface CategoryProps {\n className?: string\n /** \u4E3B\u9898\u8272*/\n data: {\n isShowSelect: boolean\n products: CategoryItem[]\n productData: CategoryItem[]\n /** \u5361\u7247\u5F62\u72B6 */\n shape?: 'round' | 'square'\n title?: string\n theme?: 'light' | 'dark'\n }\n buildData?: {\n categories: any[]\n products: any[]\n }\n /** \u6309\u94AE\u4E8B\u4EF6*/\n event?: {\n primaryButton?: (_v: any, _index: number) => void\n }\n key?: string\n}\n\nconst chunkArray = (arr: any[], size: number) => {\n const chunks = []\n for (let i = 0; i < arr.length; i += size) {\n chunks.push(arr.slice(i, i + size))\n }\n return chunks\n}\n\nconst CategoryPcItem = ({ data, configuration }: { data: CategoryItem; configuration?: any }) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.name,\n position: configuration?.index + 1,\n })\n\n return (\n <div className={cn('relative max-h-[240px] overflow-hidden')}>\n <div\n className={cn(\n 'aspect-w-[167] aspect-h-[120]',\n 'tablet:aspect-w-[404] tablet:aspect-h-[240]',\n 'laptop:aspect-w-[212] laptop:aspect-h-[144]',\n 'desktop:aspect-w-[205] desktop:aspect-h-[192]',\n 'lg-desktop:aspect-w-[264] lg-desktop:aspect-h-[240]'\n )}\n >\n <div\n ref={ref}\n className={cn(\n 'tablet:p-3 laptop:p-4 desktop:p-6 absolute inset-0 max-h-[240px] justify-between',\n 'bg-container-primary hover:bg-info-white group box-border flex cursor-pointer flex-col overflow-hidden duration-300',\n configuration?.shape === 'round' ? 'rounded-2xl' : 'rounded-none'\n )}\n >\n <div className=\"flex items-center justify-center transition-all duration-300 group-hover:scale-110\">\n <a\n aria-label={data?.name}\n href={trackUrlRef(data?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.name}`}\n onClick={() => configuration?.event?.primaryButton(data, configuration?.index)}\n >\n <Picture\n alt={data?.image?.alt || ''}\n source={data?.image?.url || ''}\n className=\"laptop:size-1/2 tablet:size-[72px] desktop:size-[116px] lg-desktop:size-[146px] m-auto flex justify-center object-cover [&_img]:h-full [&_img]:w-auto [&_img]:object-cover\"\n />\n </a>\n </div>\n <p className=\"lg-desktop:text-lg lg-desktop:!leading-6 text-info-primary box-border line-clamp-2 text-center text-sm font-bold leading-4\">\n {data?.name}\n </p>\n </div>\n </div>\n </div>\n )\n}\n\n// \u79FB\u52A8\u7AEF\u54C1\u7C7B\u5C55\u793A\u7EC4\u4EF6\nconst SingleMobileItem = ({\n data,\n configuration,\n index,\n isFirstItemLarger,\n}: {\n data: CategoryItem\n configuration?: any\n index: number\n isFirstItemLarger: boolean\n}) => {\n const ref = useRef<HTMLDivElement>(null)\n\n useExposure(ref, {\n componentType,\n componentName,\n componentTitle: data?.name,\n position: configuration?.index + 1,\n })\n\n const isFirstItem = index === 0\n\n return (\n <div\n ref={ref}\n className={cn(\n 'bg-container-primary box-border flex w-full shrink-0 flex-col items-center justify-center overflow-hidden',\n 'hover:bg-info-white cursor-pointer duration-300',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u6837\u5F0F\n isFirstItemLarger\n ? cn('p-4', isFirstItem ? 'aspect-h-[252] row-span-2' : 'aspect-h-[120]')\n : 'max-h-[126px] px-3 py-4',\n configuration?.shape === 'round' ? 'rounded-2xl' : 'rounded-none'\n )}\n >\n <a\n href={trackUrlRef(data?.link, `${componentType}_${componentName}`)}\n data-headless-type-name={`${componentType}#${componentName}`}\n data-headless-title-desc-button={`${data?.name}`}\n data-headless-nav-postion={`''#${configuration?.index + 1}`}\n onClick={() => configuration?.event?.primaryButton(data, configuration?.index + 1)}\n >\n <Picture\n source={data?.image?.url || ''}\n alt={data?.image?.alt || ''}\n className={cn(\n 'm-auto mb-2 flex justify-center object-contain [&_img]:h-full [&_img]:w-auto [&_img]:object-contain',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u56FE\u7247\u5C3A\u5BF8\n isFirstItemLarger\n ? cn(isFirstItem ? 'size-full max-h-[146px] overflow-hidden' : 'max-h-[72px] max-w-[72px]')\n : 'size-[72px]'\n )}\n />\n </a>\n <p\n className={cn(\n 'text-info-primary w-full text-center text-sm font-bold',\n // \u5F53\u7B2C\u4E00\u4E2A\u9879\u76EE\u9700\u8981\u66F4\u5927\u7A7A\u95F4\u65F6\u8C03\u6574\u6587\u5B57\u663E\u793A\n isFirstItemLarger ? 'line-clamp-2' : 'shrink-0 truncate'\n )}\n >\n {data?.name}\n </p>\n </div>\n )\n}\n\n// \u79FB\u52A8\u7AEF\u54C1\u7C7B\u5C55\u793A\nconst CategoryMobileItem = ({ data, configuration }: { data: CategoryItem[]; configuration?: any }) => {\n const totalCategories = configuration?.totalCategories ?? 0\n // \u5F53\u6570\u91CF\u5C11\u4E8E\u5BB9\u5668\u65F6\uFF0C\u7B2C\u4E00\u4E2A\u9879\u76EE\u4F1A\u5360\u636E\u66F4\u5927\u7A7A\u95F4\n const isFirstItemLarger = totalCategories <= MOBILE_FULL_PAGE_CAPACITY\n return (\n <div className={`gap-3 ${isFirstItemLarger ? 'grid grid-cols-2' : 'flex h-full flex-col'}`}>\n {data?.map((item, index) => (\n <SingleMobileItem\n key={index}\n index={index}\n data={item}\n configuration={configuration}\n isFirstItemLarger={isFirstItemLarger}\n />\n ))}\n </div>\n )\n}\n\nconst Category = React.forwardRef<HTMLDivElement, CategoryProps>((props, ref) => {\n const { data, className = '', key, event } = props\n // soundcore\u54C1\u724C\u54C1\u7C7B\u4E0D\u8D85\u8FC75\u4E2A\uFF0C\u5355\u72EC\u505A\u6837\u5F0F\u5904\u7406\n const currentData = (data?.isShowSelect ? data?.products : data?.productData) || []\n const isCardShow = currentData.length > MOBILE_FULL_PAGE_CAPACITY\n const totalCategories = currentData.length\n const mobileSlides = chunkArray(currentData, isCardShow ? MOBILE_COMPACT_PAGE_SIZE : MOBILE_FULL_PAGE_CAPACITY)\n\n const innerRef = useRef<HTMLDivElement>(null)\n\n useImperativeHandle(ref, () => innerRef.current as HTMLDivElement)\n\n return (\n <div ref={innerRef} className={cn('w-full overflow-hidden', className, { 'aiui-dark': data?.theme === 'dark' })}>\n {data?.title && <Title data={{ title: data?.title }} className=\"text-4xl\" />}\n <div className=\"tablet:block hidden\">\n <SwiperBox\n id={`Category${key}`}\n Slide={CategoryPcItem}\n data={{\n list: currentData,\n configuration: { shape: data?.shape, event: event, title: data?.title, totalCategories },\n }}\n paginationClassName=\"[&_.swiper-pagination]:!-bottom-6\"\n />\n </div>\n <div className=\"tablet:hidden block\">\n <SwiperBox\n id={`Category1${key}`}\n Slide={CategoryMobileItem}\n data={{\n list: mobileSlides,\n configuration: { shape: data?.shape, event: event, title: data?.title, totalCategories },\n }}\n isHalf={isCardShow}\n paginationClassName=\"[&_.swiper-pagination]:!-bottom-6\"\n />\n </div>\n <div className=\"h-7\" />\n </div>\n )\n})\n\nCategory.displayName = 'Category'\n\nexport default withLayout(Category)\n"],
5
+ "mappings": "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",
6
+ "names": ["Category_exports", "__export", "Category_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_utils", "import_picture", "import_Styles", "import_Title", "import_SwiperCategory", "import_useExposure", "import_trackUrlRef", "componentType", "componentName", "MOBILE_FULL_PAGE_CAPACITY", "MOBILE_COMPACT_PAGE_SIZE", "chunkArray", "arr", "size", "chunks", "CategoryPcItem", "data", "configuration", "ref", "Picture", "SingleMobileItem", "index", "isFirstItemLarger", "isFirstItem", "CategoryMobileItem", "item", "Category", "React", "props", "className", "key", "event", "currentData", "isCardShow", "totalCategories", "mobileSlides", "innerRef", "Title", "SwiperBox"]
7
7
  }
@@ -0,0 +1,41 @@
1
+ import * as React from 'react';
2
+ import type { ButtonFunctionType, CopyConfig, CreditsShelfSemanticName, CreditsProductCardData } from './types.js';
3
+ /**
4
+ * 产品卡片组件 Props
5
+ */
6
+ export interface CreditsProductCardProps {
7
+ /** 产品数据 */
8
+ product: CreditsProductCardData;
9
+ /** 样式类名 */
10
+ className?: string;
11
+ /** 是否展示标签系统 */
12
+ showTags?: boolean;
13
+ /** 点击了解更多回调 */
14
+ onLearnMore?: (product: CreditsProductCardData) => void;
15
+ /** 点击立即购买回调 */
16
+ onShopNow?: (product: CreditsProductCardData) => void;
17
+ /** 点击加入购物车回调 */
18
+ onAddToCart?: (product: CreditsProductCardData) => void;
19
+ /** 语义化类名 */
20
+ classNames?: Partial<Record<CreditsShelfSemanticName, string>>;
21
+ /** 了解更多按钮文本 */
22
+ secondaryButtonText?: string;
23
+ /** 了解更多按钮功能 */
24
+ secondaryButtonFun?: ButtonFunctionType;
25
+ /** 立即购买按钮文本 */
26
+ primaryButtonText?: string;
27
+ /** 立即购买按钮功能 */
28
+ primaryButtonFun?: ButtonFunctionType;
29
+ /** 是否展示原价(删除线价格) */
30
+ showOriginalPrice?: boolean;
31
+ /** 文案配置 */
32
+ copy?: CopyConfig;
33
+ /** 产品图片点击回调 */
34
+ onProductImageClick?: (product: CreditsProductCardData) => void;
35
+ }
36
+ /**
37
+ * CreditsShelf 产品卡片组件
38
+ */
39
+ declare const CreditsProductCard: React.ForwardRefExoticComponent<CreditsProductCardProps & React.RefAttributes<HTMLDivElement>>;
40
+ export { CreditsProductCard };
41
+ export default CreditsProductCard;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var J=Object.create;var u=Object.defineProperty;var K=Object.getOwnPropertyDescriptor;var Q=Object.getOwnPropertyNames;var U=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var W=(e,o)=>{for(var n in o)u(e,n,{get:o[n],enumerable:!0})},b=(e,o,n,m)=>{if(o&&typeof o=="object"||typeof o=="function")for(let c of Q(o))!V.call(e,c)&&c!==n&&u(e,c,{get:()=>o[c],enumerable:!(m=K(o,c))||m.enumerable});return e};var X=(e,o,n)=>(n=e!=null?J(U(e)):{},b(o||!e||!e.__esModule?u(n,"default",{value:e,enumerable:!0}):n,e)),Y=e=>b(u({},"__esModule",{value:!0}),e);var ae={};W(ae,{CreditsProductCard:()=>g,default:()=>ee});module.exports=Y(ae);var a=require("react/jsx-runtime"),d=X(require("react")),i=require("../../helpers/index.js"),t=require("../../components/index.js"),k=require("./context.js");const $=()=>(0,a.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,a.jsx)("path",{d:"M8 1L10.163 5.279L15 6.001L11.5 9.409L12.326 14.226L8 11.97L3.674 14.226L4.5 9.409L1 6.001L5.837 5.279L8 1Z",fill:"currentColor"})}),g=d.forwardRef(({product:e,className:o,showTags:n,onLearnMore:m,onShopNow:c,onAddToCart:T,classNames:B,secondaryButtonText:L,secondaryButtonFun:P,primaryButtonText:S,primaryButtonFun:F,showOriginalPrice:z,copy:M,onProductImageClick:D},A)=>{const r=(0,k.useCreditsShelfContext)(),O=n??r?.showTags??!0,j=z??r?.showOriginalPrice??!0,f=M??r?.copy,l=B??r?.classNames,y=L??r?.secondaryButtonText,x=P??r?.secondaryButtonFun,C=S??r?.primaryButtonText,v=F??r?.primaryButtonFun,H=m??r?.onLearnMore,I=c??r?.onShopNow,R=T??r?.onAddToCart,h=D??r?.onProductImageClick,[_,q]=d.useState(!1),[E,G]=d.useState(!1),w=async(s,p)=>{if(!s)return;const N=p==="primary"?q:G;N(!0);try{switch(s){case"buyNow":await I?.(e);break;case"addCart":await R?.(e);break;case"learnMore":await H?.(e);break;default:break}}finally{N(!1)}},Z=d.useMemo(()=>e.creditSavingAmount?(f?.creditsSavingLabel??"Save up to {amount} with Credits").replace("{amount}",e.creditSavingAmount):null,[e.creditSavingAmount,f?.creditsSavingLabel]);return(0,a.jsxs)(t.Card,{ref:A,className:(0,i.cn)("bg-container-primary hover:bg-container-secondary-0 flex h-full flex-col overflow-hidden border-none",o,l?.productCard),children:[(0,a.jsxs)(t.CardContent,{className:"lg-desktop:gap-[10px] lg-desktop:px-6 lg-desktop:py-4 relative flex flex-1 flex-col gap-2 p-4",children:[(0,a.jsx)("div",{className:"lg-desktop:h-[28px] flex h-[24px] gap-1",children:O&&e.tags?.map((s,p)=>s.label?(0,a.jsx)(t.Badge,{size:"sm",variant:s.variant||"outline",className:(0,i.cn)(s.variant==="promotional"?"ml-2":""),promotionalType:s.promotionalType,children:s.label},p):(0,a.jsx)(d.Fragment,{children:s},p))}),(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:()=>h?.(e),...!h&&{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:"lg-desktop:gap-6 flex flex-1 grow flex-col justify-between gap-4",children:[(0,a.jsxs)("div",{className:"lg-desktop:gap-1 flex flex-col gap-0.5",children:[(0,a.jsx)(t.Heading,{as:"h3",size:2,className:(0,i.cn)("text-info-primary line-clamp-2 min-h-[2.4em]",l?.productTitle),html:e.custom_name||e.name}),e?.description&&(0,a.jsx)(t.Text,{size:2,className:(0,i.cn)("text-info-secondary desktop:line-clamp-2 desktop:min-h-[2.4em] line-clamp-2 min-h-[2.4em]",l?.productDescription),html:e.custom_description||e.description})]}),(0,a.jsxs)("div",{className:"lg-desktop:gap-2 flex flex-col gap-1.5",children:[e?.priceLabel&&e?.availableForSale&&(0,a.jsx)(t.Text,{size:4,className:(0,i.cn)("text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]",l?.productPriceLabel),children:e.priceLabel}),(0,a.jsx)("div",{className:(0,i.cn)(l?.productPrice),children:(0,a.jsx)("div",{className:"flex items-baseline gap-1",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}),j&&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:f?.outOfStockLabel??"Sold Out"})})}),(0,a.jsxs)("div",{className:(0,i.cn)("lg-desktop:gap-3 tablet:flex-nowrap flex flex-wrap gap-2",l?.buttonGroup),children:[y&&(0,a.jsx)(t.Button,{variant:"secondary",size:"base",className:(0,i.cn)("tablet:w-fit w-full",l?.secondaryButton),onClick:()=>w(x,"secondary"),disabled:!e.availableForSale&&x!=="learnMore",loading:E,children:y}),C&&(0,a.jsx)(t.Button,{variant:"primary",size:"base",className:(0,i.cn)("tablet:w-fit w-full",l?.primaryButton),onClick:()=>w(v,"primary"),disabled:!e.availableForSale&&v!=="learnMore",loading:_,children:C})]})]})]})]}),(0,a.jsxs)("div",{className:(0,i.cn)("bg-container-secondary-0 lg-desktop:px-6 lg-desktop:py-4 flex items-center justify-center gap-1 px-4 py-3",l?.creditTip),children:[(0,a.jsx)("div",{className:"bg-info-primary flex size-6 items-center justify-center rounded-full p-1",children:(0,a.jsx)("span",{className:"text-info-white",children:(0,a.jsx)($,{})})}),(0,a.jsx)(t.Text,{size:2,className:"text-info-primary",children:Z})]})]})});g.displayName="CreditsShelf.ProductCard";var ee=g;
2
+ //# sourceMappingURL=ProductCard.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/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 } from '../../components/index.js'\n\nimport type { ButtonFunctionType, CopyConfig, CreditsShelfSemanticName, CreditsProductCardData } from './types.js'\nimport { useCreditsShelfContext } from './context.js'\n\n/**\n * \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6 Props\n */\nexport interface CreditsProductCardProps {\n /** \u4EA7\u54C1\u6570\u636E */\n product: CreditsProductCardData\n /** \u6837\u5F0F\u7C7B\u540D */\n className?: string\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E\u7CFB\u7EDF */\n showTags?: boolean\n /** \u70B9\u51FB\u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: CreditsProductCardData) => void\n /** \u70B9\u51FB\u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: CreditsProductCardData) => void\n /** \u70B9\u51FB\u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: CreditsProductCardData) => void\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<CreditsShelfSemanticName, 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 /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: CreditsProductCardData) => void\n}\n\n/**\n * \u661F\u661F\u56FE\u6807\u7EC4\u4EF6\n */\nconst StarIcon = () => (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M8 1L10.163 5.279L15 6.001L11.5 9.409L12.326 14.226L8 11.97L3.674 14.226L4.5 9.409L1 6.001L5.837 5.279L8 1Z\"\n fill=\"currentColor\"\n />\n </svg>\n)\n\n/**\n * CreditsShelf \u4EA7\u54C1\u5361\u7247\u7EC4\u4EF6\n */\nconst CreditsProductCard = React.forwardRef<HTMLDivElement, CreditsProductCardProps>(\n (\n {\n product,\n className,\n showTags: showTagsProp,\n onLearnMore: onLearnMoreProp,\n onShopNow: onShopNowProp,\n onAddToCart: onAddToCartProp,\n classNames: classNamesProp,\n secondaryButtonText: secondaryButtonTextProp,\n secondaryButtonFun: secondaryButtonFunProp,\n primaryButtonText: primaryButtonTextProp,\n primaryButtonFun: primaryButtonFunProp,\n showOriginalPrice: showOriginalPriceProp,\n copy: copyProp,\n onProductImageClick: onProductImageClickProp,\n },\n ref\n ) => {\n // \u4ECE Context \u8BFB\u53D6\u914D\u7F6E\n const context = useCreditsShelfContext()\n\n // Props \u4F18\u5148\u7EA7\u9AD8\u4E8E Context\n const showTags = showTagsProp ?? context?.showTags ?? true\n const showOriginalPrice = showOriginalPriceProp ?? context?.showOriginalPrice ?? true\n const copy = copyProp ?? context?.copy\n const classNames = classNamesProp ?? context?.classNames\n const secondaryButtonText = secondaryButtonTextProp ?? context?.secondaryButtonText\n const secondaryButtonFun = secondaryButtonFunProp ?? context?.secondaryButtonFun\n const primaryButtonText = primaryButtonTextProp ?? context?.primaryButtonText\n const primaryButtonFun = primaryButtonFunProp ?? context?.primaryButtonFun\n const onLearnMore = onLearnMoreProp ?? context?.onLearnMore\n const onShopNow = onShopNowProp ?? context?.onShopNow\n const onAddToCart = onAddToCartProp ?? context?.onAddToCart\n const onProductImageClick = onProductImageClickProp ?? context?.onProductImageClick\n\n const [primaryLoading, setPrimaryLoading] = React.useState(false)\n const [secondaryLoading, setSecondaryLoading] = React.useState(false)\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 // \u751F\u6210\u79EF\u5206\u62B5\u73B0\u63D0\u793A\u6587\u672C\n const creditTipText = React.useMemo(() => {\n if (!product.creditSavingAmount) return null\n const template = copy?.creditsSavingLabel ?? 'Save up to {amount} with Credits'\n return template.replace('{amount}', product.creditSavingAmount)\n }, [product.creditSavingAmount, copy?.creditsSavingLabel])\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 {/* \u4E3B\u5185\u5BB9\u533A\u57DF */}\n <CardContent className=\"lg-desktop:gap-[10px] lg-desktop:px-6 lg-desktop:py-4 relative flex flex-1 flex-col gap-2 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=\"lg-desktop:gap-6 flex flex-1 grow flex-col justify-between gap-4\">\n {/* \u4EA7\u54C1\u4FE1\u606F */}\n <div className=\"lg-desktop:gap-1 flex flex-col gap-0.5\">\n <Heading\n as=\"h3\"\n size={2}\n className={cn('text-info-primary 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] line-clamp-2 min-h-[2.4em]',\n classNames?.productDescription\n )}\n html={product.custom_description || product.description}\n />\n )}\n </div>\n\n {/* \u4EF7\u683C\u533A\u57DF */}\n <div className=\"lg-desktop:gap-2 flex flex-col gap-1.5\">\n {/** \u4EF7\u683C\u6807\u7B7E - Redeem Credits */}\n {product?.priceLabel && product?.availableForSale && (\n <Text\n size={4}\n className={cn(\n 'text-marketing-1 desktop:text-[16px] lg-desktop:text-[18px] text-[14px]',\n classNames?.productPriceLabel\n )}\n >\n {product.priceLabel}\n </Text>\n )}\n\n {/* \u4EF7\u683C */}\n <div className={cn(classNames?.productPrice)}>\n <div className=\"flex items-baseline gap-1\">\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 >\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 >\n {primaryButtonText}\n </Button>\n )}\n </div>\n </div>\n </div>\n </CardContent>\n\n {/* \u5E95\u90E8\u79EF\u5206\u62B5\u73B0\u63D0\u793A\u6761 */}\n <div\n className={cn(\n 'bg-container-secondary-0 lg-desktop:px-6 lg-desktop:py-4 flex items-center justify-center gap-1 px-4 py-3',\n classNames?.creditTip\n )}\n >\n <div className=\"bg-info-primary flex size-6 items-center justify-center rounded-full p-1\">\n <span className=\"text-info-white\">\n <StarIcon />\n </span>\n </div>\n <Text size={2} className=\"text-info-primary\">\n {creditTipText}\n </Text>\n </div>\n </Card>\n )\n }\n)\n\nCreditsProductCard.displayName = 'CreditsShelf.ProductCard'\n\nexport { CreditsProductCard }\nexport default CreditsProductCard\n"],
5
+ "mappings": "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",
6
+ "names": ["ProductCard_exports", "__export", "CreditsProductCard", "ProductCard_default", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "import_context", "StarIcon", "product", "className", "showTagsProp", "onLearnMoreProp", "onShopNowProp", "onAddToCartProp", "classNamesProp", "secondaryButtonTextProp", "secondaryButtonFunProp", "primaryButtonTextProp", "primaryButtonFunProp", "showOriginalPriceProp", "copyProp", "onProductImageClickProp", "ref", "context", "showTags", "showOriginalPrice", "copy", "classNames", "secondaryButtonText", "secondaryButtonFun", "primaryButtonText", "primaryButtonFun", "onLearnMore", "onShopNow", "onAddToCart", "onProductImageClick", "primaryLoading", "setPrimaryLoading", "secondaryLoading", "setSecondaryLoading", "handleButtonClick", "buttonFun", "buttonType", "setLoading", "creditTipText", "tag", "index"]
7
+ }
@@ -0,0 +1,20 @@
1
+ import * as React from 'react';
2
+ import 'swiper/css';
3
+ import 'swiper/css/navigation';
4
+ import type { CreditsShelfLayoutMode } from './types.js';
5
+ /**
6
+ * 产品列表组件 Props
7
+ */
8
+ export interface CreditsShelfProductsListProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ /** 布局模式:网格布局或横向滑动 */
10
+ layoutMode?: CreditsShelfLayoutMode;
11
+ /** 子组件(ProductCard 或自定义卡片) */
12
+ children: React.ReactNode;
13
+ }
14
+ /**
15
+ * CreditsShelf 产品列表组件
16
+ *
17
+ * @description 支持网格布局和横向滑动两种布局模式
18
+ */
19
+ declare const CreditsShelfProductsList: React.ForwardRefExoticComponent<CreditsShelfProductsListProps & React.RefAttributes<HTMLDivElement>>;
20
+ export { CreditsShelfProductsList };
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var E=Object.create;var c=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var H=(e,s)=>{for(var o in s)c(e,o,{get:s[o],enumerable:!0})},S=(e,s,o,p)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of M(s))!z.call(e,n)&&n!==o&&c(e,n,{get:()=>s[n],enumerable:!(p=N(s,n))||p.enumerable});return e};var P=(e,s,o)=>(o=e!=null?E(B(e)):{},S(s||!e||!e.__esModule?c(o,"default",{value:e,enumerable:!0}):o,e)),R=e=>S(c({},"__esModule",{value:!0}),e);var A={};H(A,{CreditsShelfProductsList:()=>m});module.exports=R(A);var i=require("react/jsx-runtime"),l=P(require("react")),q=require("../../helpers/index.js"),g=require("swiper/react"),y=require("swiper/modules"),O=require("swiper/css"),W=require("swiper/css/navigation"),C=require("./context.js");const T=({disabled:e})=>(0,i.jsxs)("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"lg-desktop:size-[56px] laptop:block hidden size-[40px]",children:[(0,i.jsx)("path",{d:"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z",fill:"black",fillOpacity:e?"0.2":"0.6"}),(0,i.jsx)("path",{d:"M31 22L25 28L31 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),$=({disabled:e})=>(0,i.jsxs)("svg",{width:"56",height:"56",viewBox:"0 0 56 56",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:"lg-desktop:size-[56px] laptop:block hidden size-[40px]",children:[(0,i.jsx)("path",{d:"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z",fill:"black",fillOpacity:e?"0.2":"0.6"}),(0,i.jsx)("path",{d:"M25 22L31 28L25 34",stroke:"white",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),m=l.forwardRef(({layoutMode:e="flex",className:s,children:o,...p},n)=>{const f=(0,C.useCreditsShelfContext)()?.copy,w=l.useId().replace(/:/g,""),v=`swiper-button-next-custom-${w}`,b=`swiper-button-prev-custom-${w}`,[r,x]=l.useState({isBeginning:!0,isEnd:!1}),k=l.useRef(null),u=l.useCallback(()=>{const t=k.current;if(!t?.slides||t.slides.length===0)return;t.slides.forEach(d=>{d.style.height="auto"});const a=Array.from(t.slides).map(d=>d.scrollHeight),L=Math.max(...a);L>0&&t.slides.forEach(d=>{d.style.height=`${L}px`})},[]);l.useEffect(()=>{const t=()=>{requestAnimationFrame(u)};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[u]);const h=l.Children.toArray(o);return h.length===0?null:(0,i.jsx)("div",{ref:n,className:s,...p,children:e==="flex"?(0,i.jsx)("div",{className:"lg-desktop:gap-6 tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4 grid grid-cols-1 justify-start gap-4",children:h.map((t,a)=>(0,i.jsx)("div",{className:"shrink-0",children:t},a))}):(0,i.jsxs)("div",{className:"group relative",children:[(0,i.jsx)(g.Swiper,{modules:[y.Navigation],spaceBetween:16,slidesPerView:"auto",navigation:{nextEl:`.${v}`,prevEl:`.${b}`},onSwiper:t=>{k.current=t,x({isBeginning:t.isBeginning,isEnd:t.isEnd}),setTimeout(u,100)},onSlideChange:t=>{x({isBeginning:t.isBeginning,isEnd:t.isEnd})},className:"!overflow-visible",children:h.map((t,a)=>(0,i.jsx)(g.SwiperSlide,{className:"tablet:!w-[288px] desktop:!w-[316px] lg-desktop:!w-[404px] rounded-box h-fit !w-[296px] overflow-hidden",children:(0,i.jsx)("div",{className:"w-full max-w-full",children:t})},a))}),!r.isBeginning&&(0,i.jsx)("button",{className:`${b} tablet:group-hover:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`,"aria-label":f?.previousSlideLabel,disabled:r.isBeginning,children:(0,i.jsx)(T,{disabled:r.isBeginning})}),!r.isEnd&&(0,i.jsx)("button",{className:`${v} tablet:group-hover:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`,"aria-label":f?.nextSlideLabel,disabled:r.isEnd,children:(0,i.jsx)($,{disabled:r.isEnd})})]})})});m.displayName="CreditsShelf.ProductsList";
2
+ //# sourceMappingURL=ProductsList.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/ProductsList.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Swiper, SwiperSlide } from 'swiper/react'\nimport { Navigation } from 'swiper/modules'\n\n// Import Swiper styles\nimport 'swiper/css'\nimport 'swiper/css/navigation'\n\nimport { useCreditsShelfContext } from './context.js'\nimport type { CreditsShelfLayoutMode } from './types.js'\n\nconst PrevIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"lg-desktop:size-[56px] laptop:block hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 43.464 12.536 56 28 56C43.464 56 56 43.464 56 28C56 12.536 43.464 0 28 0C12.536 0 0 12.536 0 28Z\"\n fill=\"black\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M31 22L25 28L31 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\nconst NextIcon = ({ disabled }: { disabled: boolean }) => (\n <svg\n width=\"56\"\n height=\"56\"\n viewBox=\"0 0 56 56\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"lg-desktop:size-[56px] laptop:block hidden size-[40px]\"\n >\n <path\n d=\"M0 28C0 12.536 12.536 0 28 0C43.464 0 56 12.536 56 28C56 43.464 43.464 56 28 56C12.536 56 0 43.464 0 28Z\"\n fill=\"black\"\n fillOpacity={disabled ? '0.2' : '0.6'}\n />\n <path d=\"M25 22L31 28L25 34\" stroke=\"white\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n)\n\n/**\n * \u4EA7\u54C1\u5217\u8868\u7EC4\u4EF6 Props\n */\nexport interface CreditsShelfProductsListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u5E03\u5C40\u6A21\u5F0F\uFF1A\u7F51\u683C\u5E03\u5C40\u6216\u6A2A\u5411\u6ED1\u52A8 */\n layoutMode?: CreditsShelfLayoutMode\n /** \u5B50\u7EC4\u4EF6\uFF08ProductCard \u6216\u81EA\u5B9A\u4E49\u5361\u7247\uFF09 */\n children: React.ReactNode\n}\n\n/**\n * CreditsShelf \u4EA7\u54C1\u5217\u8868\u7EC4\u4EF6\n *\n * @description \u652F\u6301\u7F51\u683C\u5E03\u5C40\u548C\u6A2A\u5411\u6ED1\u52A8\u4E24\u79CD\u5E03\u5C40\u6A21\u5F0F\n */\nconst CreditsShelfProductsList = React.forwardRef<HTMLDivElement, CreditsShelfProductsListProps>(\n ({ layoutMode = 'flex', className, children, ...props }, ref) => {\n const context = useCreditsShelfContext()\n const copy = context?.copy\n\n // \u751F\u6210\u552F\u4E00 ID\uFF0C\u79FB\u9664\u7279\u6B8A\u5B57\u7B26\u4EE5\u786E\u4FDD\u53EF\u7528\u4E8E CSS \u9009\u62E9\u5668\n const id = React.useId().replace(/:/g, '')\n // \u9884\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE\u9009\u62E9\u5668\uFF0C\u907F\u514D\u591A\u6B21\u62FC\u63A5\n const nextButtonClass = `swiper-button-next-custom-${id}`\n const prevButtonClass = `swiper-button-prev-custom-${id}`\n\n // Swiper \u5BFC\u822A\u72B6\u6001\n const [swiperState, setSwiperState] = React.useState({\n isBeginning: true,\n isEnd: false,\n })\n\n // Swiper \u5B9E\u4F8B\u5F15\u7528\n const swiperRef = React.useRef<any>(null)\n\n // \u8BA1\u7B97\u5E76\u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u9AD8\u9AD8\u5EA6\n const equalizeSlideHeights = React.useCallback(() => {\n const swiper = swiperRef.current\n if (!swiper?.slides || swiper.slides.length === 0) return\n\n // \u5148\u91CD\u7F6E\u6240\u6709 slide \u9AD8\u5EA6\u4EE5\u83B7\u53D6\u771F\u5B9E\u5185\u5BB9\u9AD8\u5EA6\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = 'auto'\n })\n\n // \u8BA1\u7B97\u6700\u5927\u9AD8\u5EA6\n // @ts-ignore\n const heights = Array.from(swiper.slides).map((slide: HTMLElement) => slide.scrollHeight)\n const maxHeight = Math.max(...heights)\n\n // \u8BBE\u7F6E\u6240\u6709 slide \u4E3A\u6700\u5927\u9AD8\u5EA6\n if (maxHeight > 0) {\n swiper.slides.forEach((slide: HTMLElement) => {\n slide.style.height = `${maxHeight}px`\n })\n }\n }, [])\n\n // \u76D1\u542C\u7A97\u53E3 resize \u91CD\u65B0\u8BA1\u7B97\u9AD8\u5EA6\n React.useEffect(() => {\n const handleResize = () => {\n // \u4F7F\u7528 requestAnimationFrame \u786E\u4FDD DOM \u66F4\u65B0\u5B8C\u6210\n requestAnimationFrame(equalizeSlideHeights)\n }\n\n window.addEventListener('resize', handleResize)\n return () => window.removeEventListener('resize', handleResize)\n }, [equalizeSlideHeights])\n\n // \u5C06 children \u8F6C\u6362\u4E3A\u6570\u7EC4\n const childrenArray = React.Children.toArray(children)\n\n if (childrenArray.length === 0) {\n return null\n }\n\n return (\n <div ref={ref} className={className} {...props}>\n {layoutMode === 'flex' ? (\n /* \u7F51\u683C\u5E03\u5C40 */\n <div className=\"lg-desktop:gap-6 tablet:grid-cols-2 laptop:grid-cols-3 desktop:grid-cols-4 grid grid-cols-1 justify-start gap-4\">\n {childrenArray.map((child, index) => (\n <div key={index} className=\"shrink-0\">\n {child}\n </div>\n ))}\n </div>\n ) : (\n /* Swiper \u6A2A\u5411\u6ED1\u52A8\u5E03\u5C40 */\n <div className=\"group relative\">\n <Swiper\n modules={[Navigation]}\n spaceBetween={16}\n slidesPerView=\"auto\"\n navigation={{\n nextEl: `.${nextButtonClass}`,\n prevEl: `.${prevButtonClass}`,\n }}\n onSwiper={swiper => {\n swiperRef.current = swiper\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n // \u5EF6\u8FDF\u6267\u884C\u4EE5\u786E\u4FDD\u5185\u5BB9\u6E32\u67D3\u5B8C\u6210\n setTimeout(equalizeSlideHeights, 100)\n }}\n onSlideChange={swiper => {\n setSwiperState({\n isBeginning: swiper.isBeginning,\n isEnd: swiper.isEnd,\n })\n }}\n className=\"!overflow-visible\"\n >\n {childrenArray.map((child, index) => (\n <SwiperSlide\n key={index}\n className=\"tablet:!w-[288px] desktop:!w-[316px] lg-desktop:!w-[404px] rounded-box h-fit !w-[296px] overflow-hidden\"\n >\n <div className=\"w-full max-w-full\">{child}</div>\n </SwiperSlide>\n ))}\n </Swiper>\n\n {/* \u81EA\u5B9A\u4E49\u5BFC\u822A\u6309\u94AE - hover \u65F6\u663E\u793A\uFF0C\u5230\u5934\u65F6\u9690\u85CF */}\n {!swiperState.isBeginning && (\n <button\n className={`${prevButtonClass} tablet:group-hover:block absolute left-4 top-1/2 z-10 hidden -translate-y-1/2`}\n aria-label={copy?.previousSlideLabel}\n disabled={swiperState.isBeginning}\n >\n <PrevIcon disabled={swiperState.isBeginning} />\n </button>\n )}\n {!swiperState.isEnd && (\n <button\n className={`${nextButtonClass} tablet:group-hover:block absolute right-4 top-1/2 z-10 hidden -translate-y-1/2`}\n aria-label={copy?.nextSlideLabel}\n disabled={swiperState.isEnd}\n >\n <NextIcon disabled={swiperState.isEnd} />\n </button>\n )}\n </div>\n )}\n </div>\n )\n }\n)\n\nCreditsShelfProductsList.displayName = 'CreditsShelf.ProductsList'\n\nexport { CreditsShelfProductsList }\n"],
5
+ "mappings": "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",
6
+ "names": ["ProductsList_exports", "__export", "CreditsShelfProductsList", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_react", "import_modules", "import_css", "import_navigation", "import_context", "PrevIcon", "disabled", "NextIcon", "layoutMode", "className", "children", "props", "ref", "copy", "id", "nextButtonClass", "prevButtonClass", "swiperState", "setSwiperState", "swiperRef", "equalizeSlideHeights", "swiper", "slide", "heights", "maxHeight", "handleResize", "childrenArray", "child", "index"]
7
+ }
@@ -0,0 +1,43 @@
1
+ import * as React from 'react';
2
+ import { type CreditsShelfContextValue } from './context.js';
3
+ export interface CreditsShelfRootProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ /** 主标题 */
5
+ title?: string;
6
+ /** 副标题 */
7
+ subtitle?: string;
8
+ /** 主题 */
9
+ theme?: 'light' | 'dark';
10
+ /** 文案配置 */
11
+ copy?: CreditsShelfContextValue['copy'];
12
+ /** 是否展示标签 */
13
+ showTags?: boolean;
14
+ /** 是否展示原价 */
15
+ showOriginalPrice?: boolean;
16
+ /** 语义化类名 */
17
+ classNames?: CreditsShelfContextValue['classNames'];
18
+ /** 次要按钮文案 */
19
+ secondaryButtonText?: string;
20
+ /** 次要按钮功能 */
21
+ secondaryButtonFun?: CreditsShelfContextValue['secondaryButtonFun'];
22
+ /** 主要按钮文案 */
23
+ primaryButtonText?: string;
24
+ /** 主要按钮功能 */
25
+ primaryButtonFun?: CreditsShelfContextValue['primaryButtonFun'];
26
+ /** 了解更多回调 */
27
+ onLearnMore?: CreditsShelfContextValue['onLearnMore'];
28
+ /** 立即购买回调 */
29
+ onShopNow?: CreditsShelfContextValue['onShopNow'];
30
+ /** 加入购物车回调 */
31
+ onAddToCart?: CreditsShelfContextValue['onAddToCart'];
32
+ /** 产品图片点击回调 */
33
+ onProductImageClick?: CreditsShelfContextValue['onProductImageClick'];
34
+ /** 子组件 */
35
+ children: React.ReactNode;
36
+ }
37
+ /**
38
+ * CreditsShelf Root 组件
39
+ *
40
+ * @description 组合式组件的容器,提供 Context 配置
41
+ */
42
+ declare const CreditsShelfRoot: React.ForwardRefExoticComponent<CreditsShelfRootProps & React.RefAttributes<HTMLDivElement>>;
43
+ export { CreditsShelfRoot };
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var k=Object.create;var d=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var z=(e,t)=>{for(var o in t)d(e,o,{get:t[o],enumerable:!0})},v=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of L(t))!w.call(e,r)&&r!==o&&d(e,r,{get:()=>t[r],enumerable:!(n=H(t,r))||n.enumerable});return e};var A=(e,t,o)=>(o=e!=null?k(N(e)):{},v(t||!e||!e.__esModule?d(o,"default",{value:e,enumerable:!0}):o,e)),B=e=>v(d({},"__esModule",{value:!0}),e);var D={};z(D,{CreditsShelfRoot:()=>C});module.exports=B(D);var i=require("react/jsx-runtime"),R=A(require("react")),a=require("../../helpers/index.js"),s=require("../../components/index.js"),g=require("./context.js");const C=R.forwardRef(({title:e,subtitle:t,theme:o="light",copy:n,showTags:r,showOriginalPrice:f,classNames:l,secondaryButtonText:h,secondaryButtonFun:u,primaryButtonText:m,primaryButtonFun:x,onLearnMore:S,onShopNow:p,onAddToCart:c,onProductImageClick:V,className:y,children:b,...M},P)=>{const T=R.useMemo(()=>({theme:o,copy:n,showTags:r,showOriginalPrice:f,classNames:l,secondaryButtonText:h,secondaryButtonFun:u,primaryButtonText:m,primaryButtonFun:x,onLearnMore:S,onShopNow:p,onAddToCart:c,onProductImageClick:V}),[o,n,r,f,l,h,u,m,x,S,p,c,V]);return(0,i.jsx)(g.CreditsShelfContext.Provider,{value:T,children:(0,i.jsxs)("div",{ref:P,className:(0,a.cn)("text-info-primary w-full",{"aiui-dark":o==="dark"},y,l?.root),...M,children:[(e||t)&&(0,i.jsxs)("div",{className:(0,a.cn)("mb-6",l?.header),children:[e&&(0,i.jsx)(s.Heading,{as:"h2",size:4,className:(0,a.cn)("text-info-primary mb-2",l?.title),html:e}),t&&(0,i.jsx)(s.Text,{as:"p",size:3,className:(0,a.cn)("",l?.subtitle),html:t})]}),b]})})});C.displayName="CreditsShelf.Root";
2
+ //# sourceMappingURL=Root.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/Root.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { Heading, Text } from '../../components/index.js'\nimport { CreditsShelfContext, type CreditsShelfContextValue } from './context.js'\n\nexport interface CreditsShelfRootProps extends React.HTMLAttributes<HTMLDivElement> {\n /** \u4E3B\u6807\u9898 */\n title?: string\n /** \u526F\u6807\u9898 */\n subtitle?: string\n /** \u4E3B\u9898 */\n theme?: 'light' | 'dark'\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CreditsShelfContextValue['copy']\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E */\n showTags?: boolean\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7 */\n showOriginalPrice?: boolean\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: CreditsShelfContextValue['classNames']\n /** \u6B21\u8981\u6309\u94AE\u6587\u6848 */\n secondaryButtonText?: string\n /** \u6B21\u8981\u6309\u94AE\u529F\u80FD */\n secondaryButtonFun?: CreditsShelfContextValue['secondaryButtonFun']\n /** \u4E3B\u8981\u6309\u94AE\u6587\u6848 */\n primaryButtonText?: string\n /** \u4E3B\u8981\u6309\u94AE\u529F\u80FD */\n primaryButtonFun?: CreditsShelfContextValue['primaryButtonFun']\n /** \u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: CreditsShelfContextValue['onLearnMore']\n /** \u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: CreditsShelfContextValue['onShopNow']\n /** \u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: CreditsShelfContextValue['onAddToCart']\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: CreditsShelfContextValue['onProductImageClick']\n /** \u5B50\u7EC4\u4EF6 */\n children: React.ReactNode\n}\n\n/**\n * CreditsShelf Root \u7EC4\u4EF6\n *\n * @description \u7EC4\u5408\u5F0F\u7EC4\u4EF6\u7684\u5BB9\u5668\uFF0C\u63D0\u4F9B Context \u914D\u7F6E\n */\nconst CreditsShelfRoot = React.forwardRef<HTMLDivElement, CreditsShelfRootProps>(\n (\n {\n title,\n subtitle,\n theme = 'light',\n copy,\n showTags,\n showOriginalPrice,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n onLearnMore,\n onShopNow,\n onAddToCart,\n onProductImageClick,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const contextValue = React.useMemo<CreditsShelfContextValue>(\n () => ({\n theme,\n copy,\n showTags,\n showOriginalPrice,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n onLearnMore,\n onShopNow,\n onAddToCart,\n onProductImageClick,\n }),\n [\n theme,\n copy,\n showTags,\n showOriginalPrice,\n classNames,\n secondaryButtonText,\n secondaryButtonFun,\n primaryButtonText,\n primaryButtonFun,\n onLearnMore,\n onShopNow,\n onAddToCart,\n onProductImageClick,\n ]\n )\n\n return (\n <CreditsShelfContext.Provider value={contextValue}>\n <div\n ref={ref}\n className={cn(\n 'text-info-primary w-full',\n {\n 'aiui-dark': theme === 'dark',\n },\n className,\n classNames?.root\n )}\n {...props}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n {(title || subtitle) && (\n <div className={cn('mb-6', classNames?.header)}>\n {title && (\n <Heading as=\"h2\" size={4} className={cn('text-info-primary mb-2', classNames?.title)} html={title} />\n )}\n {subtitle && <Text as=\"p\" size={3} className={cn('', classNames?.subtitle)} html={subtitle} />}\n </div>\n )}\n\n {children}\n </div>\n </CreditsShelfContext.Provider>\n )\n }\n)\n\nCreditsShelfRoot.displayName = 'CreditsShelf.Root'\n\nexport { CreditsShelfRoot }\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAwHY,IAAAI,EAAA,6BAtHZC,EAAuB,oBACvBC,EAAmB,kCACnBC,EAA8B,qCAC9BC,EAAmE,wBA0CnE,MAAMN,EAAmBG,EAAM,WAC7B,CACE,CACE,MAAAI,EACA,SAAAC,EACA,MAAAC,EAAQ,QACR,KAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,WAAAC,EACA,oBAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,UAAAC,EACA,YAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,SAAAC,EACA,GAAGC,CACL,EACAC,IACG,CACH,MAAMC,EAAevB,EAAM,QACzB,KAAO,CACL,MAAAM,EACA,KAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,WAAAC,EACA,oBAAAC,EACA,mBAAAC,EACA,kBAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,UAAAC,EACA,YAAAC,EACA,oBAAAC,CACF,GACA,CACEZ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CACF,EAEA,SACE,OAAC,sBAAoB,SAApB,CAA6B,MAAOK,EACnC,oBAAC,OACC,IAAKD,EACL,aAAW,MACT,2BACA,CACE,YAAahB,IAAU,MACzB,EACAa,EACAT,GAAY,IACd,EACC,GAAGW,EAGF,WAAAjB,GAASC,OACT,QAAC,OAAI,aAAW,MAAG,OAAQK,GAAY,MAAM,EAC1C,UAAAN,MACC,OAAC,WAAQ,GAAG,KAAK,KAAM,EAAG,aAAW,MAAG,yBAA0BM,GAAY,KAAK,EAAG,KAAMN,EAAO,EAEpGC,MAAY,OAAC,QAAK,GAAG,IAAI,KAAM,EAAG,aAAW,MAAG,GAAIK,GAAY,QAAQ,EAAG,KAAML,EAAU,GAC9F,EAGDe,GACH,EACF,CAEJ,CACF,EAEAvB,EAAiB,YAAc",
6
+ "names": ["Root_exports", "__export", "CreditsShelfRoot", "__toCommonJS", "import_jsx_runtime", "React", "import_helpers", "import_components", "import_context", "title", "subtitle", "theme", "copy", "showTags", "showOriginalPrice", "classNames", "secondaryButtonText", "secondaryButtonFun", "primaryButtonText", "primaryButtonFun", "onLearnMore", "onShopNow", "onAddToCart", "onProductImageClick", "className", "children", "props", "ref", "contextValue"]
7
+ }
@@ -0,0 +1,40 @@
1
+ import * as React from 'react';
2
+ import type { ButtonFunctionType, CopyConfig, CreditsShelfSemanticName, CreditsProductCardData } from './types.js';
3
+ /**
4
+ * CreditsShelf Context 值类型
5
+ */
6
+ export interface CreditsShelfContextValue {
7
+ /** 主题 */
8
+ theme?: 'light' | 'dark';
9
+ /** 文案配置 */
10
+ copy?: CopyConfig;
11
+ /** 是否展示标签 */
12
+ showTags?: boolean;
13
+ /** 是否展示原价 */
14
+ showOriginalPrice?: boolean;
15
+ /** 语义化类名 */
16
+ classNames?: Partial<Record<CreditsShelfSemanticName, string>>;
17
+ /** 次要按钮文案 */
18
+ secondaryButtonText?: string;
19
+ /** 次要按钮功能 */
20
+ secondaryButtonFun?: ButtonFunctionType;
21
+ /** 主要按钮文案 */
22
+ primaryButtonText?: string;
23
+ /** 主要按钮功能 */
24
+ primaryButtonFun?: ButtonFunctionType;
25
+ /** 了解更多回调 */
26
+ onLearnMore?: (product: CreditsProductCardData) => void;
27
+ /** 立即购买回调 */
28
+ onShopNow?: (product: CreditsProductCardData) => void;
29
+ /** 加入购物车回调 */
30
+ onAddToCart?: (product: CreditsProductCardData) => void;
31
+ /** 产品图片点击回调 */
32
+ onProductImageClick?: (product: CreditsProductCardData) => void;
33
+ }
34
+ declare const CreditsShelfContext: React.Context<CreditsShelfContextValue | null>;
35
+ /**
36
+ * 获取 CreditsShelf Context
37
+ * @returns Context 值,如果在 Root 外使用则返回 null
38
+ */
39
+ export declare function useCreditsShelfContext(): CreditsShelfContextValue | null;
40
+ export { CreditsShelfContext };
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var s=Object.create;var n=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var l=Object.getPrototypeOf,p=Object.prototype.hasOwnProperty;var m=(t,e)=>{for(var o in e)n(t,o,{get:e[o],enumerable:!0})},d=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of C(e))!p.call(t,r)&&r!==o&&n(t,r,{get:()=>e[r],enumerable:!(i=c(e,r))||i.enumerable});return t};var f=(t,e,o)=>(o=t!=null?s(l(t)):{},d(e||!t||!t.__esModule?n(o,"default",{value:t,enumerable:!0}):o,t)),y=t=>d(n({},"__esModule",{value:!0}),t);var x={};m(x,{CreditsShelfContext:()=>a,useCreditsShelfContext:()=>h});module.exports=y(x);var u=f(require("react"));const a=u.createContext(null);function h(){return u.useContext(a)}
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/context.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport * as React from 'react'\nimport type { ButtonFunctionType, CopyConfig, CreditsShelfSemanticName, CreditsProductCardData } from './types.js'\n\n/**\n * CreditsShelf Context \u503C\u7C7B\u578B\n */\nexport interface CreditsShelfContextValue {\n /** \u4E3B\u9898 */\n theme?: 'light' | 'dark'\n /** \u6587\u6848\u914D\u7F6E */\n copy?: CopyConfig\n /** \u662F\u5426\u5C55\u793A\u6807\u7B7E */\n showTags?: boolean\n /** \u662F\u5426\u5C55\u793A\u539F\u4EF7 */\n showOriginalPrice?: boolean\n /** \u8BED\u4E49\u5316\u7C7B\u540D */\n classNames?: Partial<Record<CreditsShelfSemanticName, string>>\n /** \u6B21\u8981\u6309\u94AE\u6587\u6848 */\n secondaryButtonText?: string\n /** \u6B21\u8981\u6309\u94AE\u529F\u80FD */\n secondaryButtonFun?: ButtonFunctionType\n /** \u4E3B\u8981\u6309\u94AE\u6587\u6848 */\n primaryButtonText?: string\n /** \u4E3B\u8981\u6309\u94AE\u529F\u80FD */\n primaryButtonFun?: ButtonFunctionType\n /** \u4E86\u89E3\u66F4\u591A\u56DE\u8C03 */\n onLearnMore?: (product: CreditsProductCardData) => void\n /** \u7ACB\u5373\u8D2D\u4E70\u56DE\u8C03 */\n onShopNow?: (product: CreditsProductCardData) => void\n /** \u52A0\u5165\u8D2D\u7269\u8F66\u56DE\u8C03 */\n onAddToCart?: (product: CreditsProductCardData) => void\n /** \u4EA7\u54C1\u56FE\u7247\u70B9\u51FB\u56DE\u8C03 */\n onProductImageClick?: (product: CreditsProductCardData) => void\n}\n\nconst CreditsShelfContext = React.createContext<CreditsShelfContextValue | null>(null)\n\n/**\n * \u83B7\u53D6 CreditsShelf Context\n * @returns Context \u503C\uFF0C\u5982\u679C\u5728 Root \u5916\u4F7F\u7528\u5219\u8FD4\u56DE null\n */\nexport function useCreditsShelfContext() {\n return React.useContext(CreditsShelfContext)\n}\n\nexport { CreditsShelfContext }\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,EAAA,2BAAAC,IAAA,eAAAC,EAAAJ,GAEA,IAAAK,EAAuB,oBAmCvB,MAAMH,EAAsBG,EAAM,cAA+C,IAAI,EAM9E,SAASF,GAAyB,CACvC,OAAOE,EAAM,WAAWH,CAAmB,CAC7C",
6
+ "names": ["context_exports", "__export", "CreditsShelfContext", "useCreditsShelfContext", "__toCommonJS", "React"]
7
+ }
@@ -0,0 +1,15 @@
1
+ import { CreditsShelfRoot } from './Root.js';
2
+ import { CreditsShelfProductsList } from './ProductsList.js';
3
+ import { CreditsProductCard } from './ProductCard.js';
4
+ export type { CreditsShelfSemanticName, CreditsProductCardData, CopyConfig, ButtonFunctionType, CreditsShelfLayoutMode, } from './types.js';
5
+ export type { CreditsShelfRootProps } from './Root.js';
6
+ export type { CreditsShelfProductsListProps } from './ProductsList.js';
7
+ export type { CreditsProductCardProps } from './ProductCard.js';
8
+ export type { CreditsShelfContextValue } from './context.js';
9
+ export { CreditsShelfRoot, CreditsShelfProductsList, CreditsProductCard };
10
+ declare const CreditsShelf: {
11
+ Root: import("react").ForwardRefExoticComponent<import("./Root.js").CreditsShelfRootProps & import("react").RefAttributes<HTMLDivElement>>;
12
+ ProductsList: import("react").ForwardRefExoticComponent<import("./ProductsList.js").CreditsShelfProductsListProps & import("react").RefAttributes<HTMLDivElement>>;
13
+ ProductCard: import("react").ForwardRefExoticComponent<import("./ProductCard.js").CreditsProductCardProps & import("react").RefAttributes<HTMLDivElement>>;
14
+ };
15
+ export default CreditsShelf;
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(o,t)=>{for(var e in t)p(o,e,{get:t[e],enumerable:!0})},a=(o,t,e,C)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of u(t))!c.call(o,r)&&r!==e&&p(o,r,{get:()=>t[r],enumerable:!(C=f(t,r))||C.enumerable});return o};var P=o=>a(p({},"__esModule",{value:!0}),o);var x={};m(x,{CreditsProductCard:()=>i.CreditsProductCard,CreditsShelfProductsList:()=>d.CreditsShelfProductsList,CreditsShelfRoot:()=>s.CreditsShelfRoot,default:()=>n});module.exports=P(x);var s=require("./Root.js"),d=require("./ProductsList.js"),i=require("./ProductCard.js");const l={Root:s.CreditsShelfRoot,ProductsList:d.CreditsShelfProductsList,ProductCard:i.CreditsProductCard};var n=l;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/index.tsx"],
4
+ "sourcesContent": ["'use client'\n\nimport { CreditsShelfRoot } from './Root.js'\nimport { CreditsShelfProductsList } from './ProductsList.js'\nimport { CreditsProductCard } from './ProductCard.js'\n\n// \u5BFC\u51FA\u7C7B\u578B\nexport type {\n CreditsShelfSemanticName,\n CreditsProductCardData,\n CopyConfig,\n ButtonFunctionType,\n CreditsShelfLayoutMode,\n} from './types.js'\n\nexport type { CreditsShelfRootProps } from './Root.js'\nexport type { CreditsShelfProductsListProps } from './ProductsList.js'\nexport type { CreditsProductCardProps } from './ProductCard.js'\nexport type { CreditsShelfContextValue } from './context.js'\n\n// \u5BFC\u51FA\u5B50\u7EC4\u4EF6\nexport { CreditsShelfRoot, CreditsShelfProductsList, CreditsProductCard }\n\n// \u7EC4\u5408\u5F0F\u7EC4\u4EF6\nconst CreditsShelf = {\n Root: CreditsShelfRoot,\n ProductsList: CreditsShelfProductsList,\n ProductCard: CreditsProductCard,\n}\n\nexport default CreditsShelf\n"],
5
+ "mappings": "sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yJAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAiC,qBACjCC,EAAyC,6BACzCC,EAAmC,4BAoBnC,MAAMC,EAAe,CACnB,KAAM,mBACN,aAAc,2BACd,YAAa,oBACf,EAEA,IAAOL,EAAQK",
6
+ "names": ["CreditsShelf_exports", "__export", "CreditsShelf_default", "__toCommonJS", "import_Root", "import_ProductsList", "import_ProductCard", "CreditsShelf"]
7
+ }
@@ -0,0 +1,73 @@
1
+ import type { BadgeProps } from '../../components/badge.js';
2
+ /**
3
+ * 按钮功能类型
4
+ */
5
+ export type ButtonFunctionType = 'buyNow' | 'addCart' | 'learnMore';
6
+ /**
7
+ * CreditShelf 文案配置接口
8
+ */
9
+ export interface CopyConfig {
10
+ /** 积分兑换标签文本 */
11
+ redeemLabel?: string;
12
+ /** 积分抵现提示文本模板,支持 {amount} 占位符 */
13
+ creditsSavingLabel?: string;
14
+ /** 上一页滑动按钮的无障碍标签 */
15
+ previousSlideLabel?: string;
16
+ /** 下一页滑动按钮的无障碍标签 */
17
+ nextSlideLabel?: string;
18
+ /** 售罄标签文本 */
19
+ outOfStockLabel?: string;
20
+ }
21
+ /**
22
+ * 语义化类名
23
+ */
24
+ export type CreditsShelfSemanticName = 'root' | 'header' | 'title' | 'subtitle' | 'description' | 'productCard' | 'productTitle' | 'productDescription' | 'productPriceLabel' | 'productPrice' | 'buttonGroup' | 'secondaryButton' | 'primaryButton' | 'creditTip';
25
+ /**
26
+ * 组件布局模式
27
+ */
28
+ export type CreditsShelfLayoutMode = 'flex' | 'horizontal';
29
+ /**
30
+ * 基础产品数据接口(来自外部数据源)
31
+ */
32
+ export interface BaseProductData {
33
+ sku: string;
34
+ name: string;
35
+ image: string;
36
+ value: string;
37
+ handle: string;
38
+ shopify_id: string;
39
+ custom_name?: string;
40
+ custom_description?: string;
41
+ }
42
+ /**
43
+ * Shopify 变体数据接口
44
+ */
45
+ export interface VariantData {
46
+ /** 产品描述 */
47
+ description?: string;
48
+ /** 变体id */
49
+ variantId: string;
50
+ /** 产品链接, 点击图片的时候跳转到该链接 */
51
+ listingLink: string;
52
+ /** 原价 */
53
+ originalPrice?: string;
54
+ /** 现价 */
55
+ price: string;
56
+ /** 价格上面展示的标签文本(如 Redeem Credits) */
57
+ priceLabel?: string;
58
+ /** 是否可售 */
59
+ availableForSale: boolean;
60
+ /** 积分抵现金额(用于底部提示) */
61
+ creditSavingAmount?: string;
62
+ /** tags 列表(会员价,折扣,new, hot等标签信息) */
63
+ tags: Array<{
64
+ label: string;
65
+ variant: BadgeProps['variant'];
66
+ promotionalType?: BadgeProps['promotionalType'];
67
+ } | React.ReactNode>;
68
+ }
69
+ /**
70
+ * 完整的产品卡片数据接口
71
+ */
72
+ export interface CreditsProductCardData extends BaseProductData, VariantData {
73
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";"use client";var a=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of s(t))!p.call(e,r)&&r!==n&&a(e,r,{get:()=>t[r],enumerable:!(i=o(t,r))||i.enumerable});return e};var c=e=>d(a({},"__esModule",{value:!0}),e);var g={};module.exports=c(g);
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/biz-components/CreditsShelf/types.ts"],
4
+ "sourcesContent": ["'use client'\n\nimport type { BadgeProps } from '../../components/badge.js'\n\n/**\n * \u6309\u94AE\u529F\u80FD\u7C7B\u578B\n */\nexport type ButtonFunctionType = 'buyNow' | 'addCart' | 'learnMore'\n\n/**\n * CreditShelf \u6587\u6848\u914D\u7F6E\u63A5\u53E3\n */\nexport interface CopyConfig {\n /** \u79EF\u5206\u5151\u6362\u6807\u7B7E\u6587\u672C */\n redeemLabel?: string\n /** \u79EF\u5206\u62B5\u73B0\u63D0\u793A\u6587\u672C\u6A21\u677F\uFF0C\u652F\u6301 {amount} \u5360\u4F4D\u7B26 */\n creditsSavingLabel?: string\n /** \u4E0A\u4E00\u9875\u6ED1\u52A8\u6309\u94AE\u7684\u65E0\u969C\u788D\u6807\u7B7E */\n previousSlideLabel?: string\n /** \u4E0B\u4E00\u9875\u6ED1\u52A8\u6309\u94AE\u7684\u65E0\u969C\u788D\u6807\u7B7E */\n nextSlideLabel?: string\n /** \u552E\u7F44\u6807\u7B7E\u6587\u672C */\n outOfStockLabel?: string\n}\n\n/**\n * \u8BED\u4E49\u5316\u7C7B\u540D\n */\nexport type CreditsShelfSemanticName =\n | 'root'\n | 'header'\n | 'title'\n | 'subtitle'\n | 'description'\n | 'productCard'\n | 'productTitle'\n | 'productDescription'\n | 'productPriceLabel'\n | 'productPrice'\n | 'buttonGroup'\n | 'secondaryButton'\n | 'primaryButton'\n | 'creditTip'\n\n/**\n * \u7EC4\u4EF6\u5E03\u5C40\u6A21\u5F0F\n */\nexport type CreditsShelfLayoutMode = 'flex' | 'horizontal'\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 /** \u4EA7\u54C1\u63CF\u8FF0 */\n description?: string\n /** \u53D8\u4F53id */\n variantId: string\n /** \u4EA7\u54C1\u94FE\u63A5, \u70B9\u51FB\u56FE\u7247\u7684\u65F6\u5019\u8DF3\u8F6C\u5230\u8BE5\u94FE\u63A5 */\n listingLink: string\n /** \u539F\u4EF7 */\n originalPrice?: string\n /** \u73B0\u4EF7 */\n price: string\n /** \u4EF7\u683C\u4E0A\u9762\u5C55\u793A\u7684\u6807\u7B7E\u6587\u672C\uFF08\u5982 Redeem Credits\uFF09 */\n priceLabel?: string\n /** \u662F\u5426\u53EF\u552E */\n availableForSale: boolean\n /** \u79EF\u5206\u62B5\u73B0\u91D1\u989D\uFF08\u7528\u4E8E\u5E95\u90E8\u63D0\u793A\uFF09 */\n creditSavingAmount?: string\n /** tags \u5217\u8868(\u4F1A\u5458\u4EF7\uFF0C\u6298\u6263\uFF0Cnew, hot\u7B49\u6807\u7B7E\u4FE1\u606F) */\n tags: Array<\n | {\n label: string\n variant: BadgeProps['variant']\n promotionalType?: BadgeProps['promotionalType']\n }\n | React.ReactNode\n >\n}\n\n/**\n * \u5B8C\u6574\u7684\u4EA7\u54C1\u5361\u7247\u6570\u636E\u63A5\u53E3\n */\nexport interface CreditsProductCardData extends BaseProductData, VariantData {}\n"],
5
+ "mappings": "4XAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["types_exports", "__toCommonJS"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var p=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var c=(e,t)=>{for(var o in t)p(e,o,{get:t[o],enumerable:!0})},x=(e,t,o,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of r(t))!g.call(e,s)&&s!==o&&p(e,s,{get:()=>t[s],enumerable:!(l=d(t,s))||l.enumerable});return e};var f=e=>x(p({},"__esModule",{value:!0}),e);var y={};c(y,{default:()=>u});module.exports=f(y);var a=require("react/jsx-runtime"),m=require("../../shared/Styles.js"),i=require("../../components/index.js");const n=e=>{const{data:t}=e,{list:o}=t;return(0,a.jsx)("div",{className:"w-full rounded-2xl bg-[#EAEAEC]",children:(0,a.jsx)("div",{className:"laptop:gap-4 tablet:grid-cols-4 laptop:grid-cols-3 desktop:grid-cols-5 lg-desktop:grid-cols-6 grid grid-cols-2 gap-3",children:o.map((l,s)=>(0,a.jsxs)("div",{className:"laptop:p-[20px] flex flex-col items-center justify-center p-[12px]",children:[(0,a.jsxs)("div",{children:[l?.img?.url&&(0,a.jsx)(i.Picture,{className:"l-tablet:hidden aspect-[194/194]",imgClassName:"",source:l?.img?.url,alt:l?.img?.alt||""}),l?.mobileImg?.url&&(0,a.jsx)(i.Picture,{className:"laptop:hidden aspect-[120/120]",imgClassName:"",source:l?.mobileImg?.url,alt:l?.mobileImg?.alt||""})]}),(0,a.jsx)(i.Text,{html:l?.title,className:"laptop:text-[18px] text-[14px] font-bold leading-[1.4]"})]},s))})})};var u=(0,m.withLayout)(n);
1
+ "use strict";"use client";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var c=(a,t)=>{for(var s in t)i(a,s,{get:t[s],enumerable:!0})},x=(a,t,s,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of r(t))!g.call(a,o)&&o!==s&&i(a,o,{get:()=>t[o],enumerable:!(l=d(t,o))||l.enumerable});return a};var f=a=>x(i({},"__esModule",{value:!0}),a);var y={};c(y,{default:()=>u});module.exports=f(y);var e=require("react/jsx-runtime"),m=require("../../shared/Styles.js"),p=require("../../components/index.js");const n=a=>{const{data:t}=a,{list:s}=t;return(0,e.jsx)("div",{className:"w-full rounded-2xl bg-[#EAEAEC]",children:(0,e.jsx)("div",{className:"laptop:gap-4 tablet:grid-cols-4 laptop:grid-cols-3 desktop:grid-cols-5 lg-desktop:grid-cols-6 grid grid-cols-2 gap-3",children:s.map((l,o)=>(0,e.jsxs)("div",{className:"laptop:p-[20px] flex flex-col items-center justify-center p-[12px]",children:[(0,e.jsxs)("div",{children:[l?.img?.url&&(0,e.jsx)(p.Picture,{className:"laptop:hidden aspect-[194/194]",imgClassName:"",source:l?.img?.url,alt:l?.img?.alt||""}),l?.mobileImg?.url&&(0,e.jsx)(p.Picture,{className:"laptop:hidden aspect-[120/120]",imgClassName:"",source:l?.mobileImg?.url,alt:l?.mobileImg?.alt||""})]}),(0,e.jsx)(p.Text,{html:l?.title,className:"laptop:text-[18px] text-[14px] font-bold leading-[1.4]"})]},o))})})};var u=(0,m.withLayout)(n);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/GiftBox/index.tsx"],
4
- "sourcesContent": ["'use client'\nimport type { Img } from '../../types/props.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Picture, Text } from '../../components/index.js'\n\nexport type GiftBoxDataType = {\n img: Img\n mobileImg: Img\n title: string\n}\n\ntype GiftBoxType = {\n data: {\n list: GiftBoxDataType[]\n }\n className?: string\n}\n\nconst GiftBox = (props: GiftBoxType) => {\n const { data } = props\n const { list } = data\n\n return (\n <div className=\"w-full rounded-2xl bg-[#EAEAEC]\">\n <div className=\"laptop:gap-4 tablet:grid-cols-4 laptop:grid-cols-3 desktop:grid-cols-5 lg-desktop:grid-cols-6 grid grid-cols-2 gap-3\">\n {list.map((item, index) => (\n <div key={index} className=\"laptop:p-[20px] flex flex-col items-center justify-center p-[12px]\">\n <div>\n {item?.img?.url && (\n <Picture\n className=\"l-tablet:hidden aspect-[194/194]\"\n imgClassName=\"\"\n source={item?.img?.url}\n alt={item?.img?.alt || ''}\n />\n )}\n {item?.mobileImg?.url && (\n <Picture\n className=\"laptop:hidden aspect-[120/120]\"\n imgClassName=\"\"\n source={item?.mobileImg?.url}\n alt={item?.mobileImg?.alt || ''}\n />\n )}\n </div>\n <Text html={item?.title} className=\"laptop:text-[18px] text-[14px] font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport default withLayout(GiftBox)\n"],
5
- "mappings": "sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA2BY,IAAAI,EAAA,6BAzBZC,EAA2B,kCAC3BC,EAA8B,qCAe9B,MAAMC,EAAWC,GAAuB,CACtC,KAAM,CAAE,KAAAC,CAAK,EAAID,EACX,CAAE,KAAAE,CAAK,EAAID,EAEjB,SACE,OAAC,OAAI,UAAU,kCACb,mBAAC,OAAI,UAAU,uHACZ,SAAAC,EAAK,IAAI,CAACC,EAAMC,OACf,QAAC,OAAgB,UAAU,qEACzB,qBAAC,OACE,UAAAD,GAAM,KAAK,QACV,OAAC,WACC,UAAU,mCACV,aAAa,GACb,OAAQA,GAAM,KAAK,IACnB,IAAKA,GAAM,KAAK,KAAO,GACzB,EAEDA,GAAM,WAAW,QAChB,OAAC,WACC,UAAU,iCACV,aAAa,GACb,OAAQA,GAAM,WAAW,IACzB,IAAKA,GAAM,WAAW,KAAO,GAC/B,GAEJ,KACA,OAAC,QAAK,KAAMA,GAAM,MAAO,UAAU,yDAAyD,IAnBpFC,CAoBV,CACD,EACH,EACF,CAEJ,EAEA,IAAOV,KAAQ,cAAWK,CAAO",
4
+ "sourcesContent": ["'use client'\nimport type { Img } from '../../types/props.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { Picture, Text } from '../../components/index.js'\n\nexport type GiftBoxDataType = {\n img: Img\n mobileImg: Img\n title: string\n}\n\ntype GiftBoxType = {\n data: {\n list: GiftBoxDataType[]\n }\n className?: string\n}\n\nconst GiftBox = (props: GiftBoxType) => {\n const { data } = props\n const { list } = data\n\n return (\n <div className=\"w-full rounded-2xl bg-[#EAEAEC]\">\n <div className=\"laptop:gap-4 tablet:grid-cols-4 laptop:grid-cols-3 desktop:grid-cols-5 lg-desktop:grid-cols-6 grid grid-cols-2 gap-3\">\n {list.map((item, index) => (\n <div key={index} className=\"laptop:p-[20px] flex flex-col items-center justify-center p-[12px]\">\n <div>\n {item?.img?.url && (\n <Picture\n className=\"laptop:hidden aspect-[194/194]\"\n imgClassName=\"\"\n source={item?.img?.url}\n alt={item?.img?.alt || ''}\n />\n )}\n {item?.mobileImg?.url && (\n <Picture\n className=\"laptop:hidden aspect-[120/120]\"\n imgClassName=\"\"\n source={item?.mobileImg?.url}\n alt={item?.mobileImg?.alt || ''}\n />\n )}\n </div>\n <Text html={item?.title} className=\"laptop:text-[18px] text-[14px] font-bold leading-[1.4]\" />\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nexport default withLayout(GiftBox)\n"],
5
+ "mappings": "sbAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GA2BY,IAAAI,EAAA,6BAzBZC,EAA2B,kCAC3BC,EAA8B,qCAe9B,MAAMC,EAAWC,GAAuB,CACtC,KAAM,CAAE,KAAAC,CAAK,EAAID,EACX,CAAE,KAAAE,CAAK,EAAID,EAEjB,SACE,OAAC,OAAI,UAAU,kCACb,mBAAC,OAAI,UAAU,uHACZ,SAAAC,EAAK,IAAI,CAACC,EAAMC,OACf,QAAC,OAAgB,UAAU,qEACzB,qBAAC,OACE,UAAAD,GAAM,KAAK,QACV,OAAC,WACC,UAAU,iCACV,aAAa,GACb,OAAQA,GAAM,KAAK,IACnB,IAAKA,GAAM,KAAK,KAAO,GACzB,EAEDA,GAAM,WAAW,QAChB,OAAC,WACC,UAAU,iCACV,aAAa,GACb,OAAQA,GAAM,WAAW,IACzB,IAAKA,GAAM,WAAW,KAAO,GAC/B,GAEJ,KACA,OAAC,QAAK,KAAMA,GAAM,MAAO,UAAU,yDAAyD,IAnBpFC,CAoBV,CACD,EACH,EACF,CAEJ,EAEA,IAAOV,KAAQ,cAAWK,CAAO",
6
6
  "names": ["GiftBox_exports", "__export", "GiftBox_default", "__toCommonJS", "import_jsx_runtime", "import_Styles", "import_components", "GiftBox", "props", "data", "list", "item", "index"]
7
7
  }