@anker-in/headless-ui 1.3.11 → 1.3.12

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.
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var T=Object.create;var o=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var p in t)o(e,p,{get:t[p],enumerable:!0})},u=(e,t,p,x)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of y(t))!F.call(e,i)&&i!==p&&o(e,i,{get:()=>t[i],enumerable:!(x=v(t,i))||x.enumerable});return e};var j=(e,t,p)=>(p=e!=null?T(w(e)):{},u(t||!e||!e.__esModule?o(p,"default",{value:e,enumerable:!0}):p,e)),z=e=>u(o({},"__esModule",{value:!0}),e);var P={};H(P,{default:()=>L});module.exports=z(P);var a=require("react/jsx-runtime"),l=j(require("react")),m=require("../../components/index.js"),f=require("../../helpers/utils.js"),d=require("../../shared/Styles.js"),_=require("../../hooks/useExposure.js");const D="image",E="image_text_feature",c=l.default.forwardRef(({data:e,className:t},p)=>{const{title:x,subtitle:i,pcImage:r,mobileImage:h,padImage:b,items:k=[],imagePosition:s="left",theme:I="light"}=e,g=(0,l.useRef)(null);return(0,_.useExposure)(g,{componentType:D,componentName:E,componentTitle:x,componentDescription:i}),(0,l.useImperativeHandle)(p,()=>g.current),(0,a.jsxs)("section",{ref:g,"data-ui-component-id":"ImageTextFeature",className:(0,f.cn)("image-text-feature",I==="dark"?"aiui-dark":"","text-info-primary laptop:flex-row laptop:gap-[32px] desktop:gap-[48px] lg-desktop:gap-[64px] flex flex-col items-center gap-[24px]",t),children:[(0,a.jsx)(m.Picture,{source:`${r?.url}, ${b?.url||r?.url} 1024, ${h?.url||r?.url} 768`,alt:r?.alt,className:(0,f.cn)("image-text-feature__image tablet:aspect-[704/360] laptop:aspect-[824/560] aspect-[716/720] max-h-[560px] max-w-[824px] shrink-0",{"image-text-feature__image--left order-2 laptop:order-1 laptop:basis-[63%] desktop:basis-[57%]":s==="left","image-text-feature__image--right order-2 laptop:basis-[63%] desktop:basis-[57%]":s==="right"})}),(0,a.jsxs)("div",{className:(0,f.cn)("image-text-feature__content laptop:w-fit flex w-full flex-col items-start justify-center",{"order-1 laptop:order-2":s==="left","order-1":s==="right"}),children:[(0,a.jsx)(m.Heading,{size:4,html:x,as:"h3",className:"image-text-feature__title w-full text-left"}),i&&(0,a.jsx)(m.Text,{size:4,html:i,as:"p",className:"image-text-feature__subtitle min-xxl:mt-[8px] laptop:text-[16px] lg-desktop:text-[18px] mt-[4px] text-left text-[14px]"}),(0,a.jsx)("div",{className:"image-text-feature__items tablet:flex-row tablet:justify-start tablet:gap-[90px] laptop:w-fit laptop:flex-col laptop:justify-around laptop:gap-0 flex w-full flex-col justify-around gap-0",children:k.map((n,N)=>(0,a.jsxs)("div",{className:"image-text-feature__item laptop:mt-[32px] desktop:mt-[48px] mt-[24px]",children:[(0,a.jsxs)("div",{className:"image-text-feature__item-header flex flex-row items-center gap-[8px]",children:[(0,a.jsx)("img",{src:n.icon,alt:"icon",className:"image-text-feature__item-icon min-md:text-[40px] min-l:text-[40px] min-xl:text-[56px] min-xxl:text-[64px] desktop:h-[44px] lg-desktop:h-[52px] h-[28px] -translate-y-[12%] md:text-[40px]"}),(0,a.jsx)(m.Heading,{size:5,as:"h6",className:"image-text-feature__item-text bg-gradient-to-r from-[#3ad1ff] to-[#008cd6] bg-clip-text text-transparent",children:n.text})]}),(0,a.jsx)(m.Text,{size:4,as:"p",html:n.desc,className:"image-text-feature__item-desc tablet:text-[14px] laptop:text-[14px] desktop:text-[16px] lg-desktop:text-[18px] -mt-[2px] text-[14px]"})]},N))})]})]})});c.displayName="ImageTextFeature";var L=(0,d.withLayout)(c);
1
+ "use strict";"use client";var T=Object.create;var f=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var H=(e,t)=>{for(var p in t)f(e,p,{get:t[p],enumerable:!0})},g=(e,t,p,x)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of y(t))!F.call(e,i)&&i!==p&&f(e,i,{get:()=>t[i],enumerable:!(x=v(t,i))||x.enumerable});return e};var j=(e,t,p)=>(p=e!=null?T(w(e)):{},g(t||!e||!e.__esModule?f(p,"default",{value:e,enumerable:!0}):p,e)),z=e=>g(f({},"__esModule",{value:!0}),e);var P={};H(P,{default:()=>L});module.exports=z(P);var a=require("react/jsx-runtime"),m=j(require("react")),l=require("../../components/index.js"),n=require("../../helpers/utils.js"),d=require("../../shared/Styles.js"),_=require("../../hooks/useExposure.js");const D="image",E="image_text_feature",c=m.default.forwardRef(({data:e,className:t},p)=>{const{title:x,subtitle:i,pcImage:r,mobileImage:h,padImage:b,items:k=[],imagePosition:o="left",theme:I="light"}=e,u=(0,m.useRef)(null);return(0,_.useExposure)(u,{componentType:D,componentName:E,componentTitle:x,componentDescription:i}),(0,m.useImperativeHandle)(p,()=>u.current),(0,a.jsxs)("section",{ref:u,"data-ui-component-id":"ImageTextFeature",className:(0,n.cn)("image-text-feature",I==="dark"?"aiui-dark":"","text-info-primary laptop:flex-row laptop:gap-[32px] desktop:gap-[48px] lg-desktop:gap-[64px] flex flex-col items-center gap-[24px]",t),children:[r?.url&&(0,a.jsx)(l.Picture,{source:`${r.url}, ${b?.url||r.url} 1024, ${h?.url||r.url} 768`,alt:r?.alt,className:(0,n.cn)("image-text-feature__image tablet:aspect-[704/360] laptop:aspect-[824/560] aspect-[716/720] max-h-[560px] max-w-[824px] shrink-0",{"image-text-feature__image--left order-2 laptop:order-1 laptop:basis-[63%] desktop:basis-[57%]":o==="left","image-text-feature__image--right order-2 laptop:basis-[63%] desktop:basis-[57%]":o==="right"})}),(0,a.jsxs)("div",{className:(0,n.cn)("image-text-feature__content laptop:w-fit flex w-full flex-col items-start justify-center",{"order-1 laptop:order-2":o==="left","order-1":o==="right"}),children:[(0,a.jsx)(l.Heading,{size:4,html:x,as:"h3",className:"image-text-feature__title w-full text-left"}),i&&(0,a.jsx)(l.Text,{size:4,html:i,as:"p",className:"image-text-feature__subtitle min-xxl:mt-[8px] laptop:text-[16px] lg-desktop:text-[18px] mt-[4px] text-left text-[14px]"}),(0,a.jsx)("div",{className:"image-text-feature__items tablet:flex-row tablet:justify-start tablet:gap-[90px] laptop:w-fit laptop:flex-col laptop:justify-around laptop:gap-0 flex w-full flex-col justify-around gap-0",children:k.map((s,N)=>(0,a.jsxs)("div",{className:"image-text-feature__item laptop:mt-[32px] desktop:mt-[48px] mt-[24px]",children:[(0,a.jsxs)("div",{className:"image-text-feature__item-header flex flex-row items-center gap-[8px]",children:[s.icon&&(0,a.jsx)("img",{src:s.icon,alt:"icon",className:"image-text-feature__item-icon min-md:text-[40px] min-l:text-[40px] min-xl:text-[56px] min-xxl:text-[64px] desktop:h-[44px] lg-desktop:h-[52px] h-[28px] -translate-y-[12%] md:text-[40px]"}),(0,a.jsx)(l.Heading,{size:5,as:"h6",className:"image-text-feature__item-text bg-gradient-to-r from-[#3ad1ff] to-[#008cd6] bg-clip-text text-transparent",children:s.text})]}),(0,a.jsx)(l.Text,{size:4,as:"p",html:s.desc,className:"image-text-feature__item-desc tablet:text-[14px] laptop:text-[14px] desktop:text-[16px] lg-desktop:text-[18px] -mt-[2px] text-[14px]"})]},N))})]})]})});c.displayName="ImageTextFeature";var L=(0,d.withLayout)(c);
2
2
  //# sourceMappingURL=ImageTextFeature.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ImageTextFeature/ImageTextFeature.tsx"],
4
- "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef } from 'react'\nimport { Heading, Picture, Text } from '../../components/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport type { ImageTextFeatureProps, ImageTextFeatureItem } from './types.js'\n\nconst componentType = 'image'\nconst componentName = 'image_text_feature'\n\nconst ImageTextFeature = React.forwardRef<HTMLDivElement, ImageTextFeatureProps>(({ data, className }, ref) => {\n const { title, subtitle, pcImage, mobileImage, padImage, items = [], imagePosition = 'left', theme = 'light' } = data\n\n const boxRef = useRef<HTMLDivElement>(null)\n\n useExposure(boxRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subtitle,\n })\n\n useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n return (\n <section\n ref={boxRef}\n data-ui-component-id=\"ImageTextFeature\"\n className={cn(\n 'image-text-feature',\n theme === 'dark' ? 'aiui-dark' : '',\n 'text-info-primary laptop:flex-row laptop:gap-[32px] desktop:gap-[48px] lg-desktop:gap-[64px] flex flex-col items-center gap-[24px]',\n className\n )}\n >\n {/* \u56FE\u7247\u533A\u57DF */}\n <Picture\n source={`${pcImage?.url}, ${padImage?.url || pcImage?.url} 1024, ${mobileImage?.url || pcImage?.url} 768`}\n alt={pcImage?.alt}\n className={cn(\n 'image-text-feature__image tablet:aspect-[704/360] laptop:aspect-[824/560] aspect-[716/720] max-h-[560px] max-w-[824px] shrink-0',\n {\n 'image-text-feature__image--left order-2 laptop:order-1 laptop:basis-[63%] desktop:basis-[57%]':\n imagePosition === 'left',\n 'image-text-feature__image--right order-2 laptop:basis-[63%] desktop:basis-[57%]':\n imagePosition === 'right',\n }\n )}\n />\n\n {/* \u5185\u5BB9\u533A\u57DF */}\n <div\n className={cn('image-text-feature__content laptop:w-fit flex w-full flex-col items-start justify-center', {\n 'order-1 laptop:order-2': imagePosition === 'left',\n 'order-1': imagePosition === 'right',\n })}\n >\n {/* \u6807\u9898 */}\n <Heading size={4} html={title} as=\"h3\" className=\"image-text-feature__title w-full text-left\" />\n\n {/* \u526F\u6807\u9898 */}\n {subtitle && (\n <Text\n size={4}\n html={subtitle}\n as=\"p\"\n className=\"image-text-feature__subtitle min-xxl:mt-[8px] laptop:text-[16px] lg-desktop:text-[18px] mt-[4px] text-left text-[14px]\"\n />\n )}\n\n {/* \u529F\u80FD\u5217\u8868 */}\n <div className=\"image-text-feature__items tablet:flex-row tablet:justify-start tablet:gap-[90px] laptop:w-fit laptop:flex-col laptop:justify-around laptop:gap-0 flex w-full flex-col justify-around gap-0\">\n {items.map((item: ImageTextFeatureItem, index: number) => (\n <div key={index} className=\"image-text-feature__item laptop:mt-[32px] desktop:mt-[48px] mt-[24px]\">\n <div className=\"image-text-feature__item-header flex flex-row items-center gap-[8px]\">\n <img\n src={item.icon}\n alt=\"icon\"\n className=\"image-text-feature__item-icon min-md:text-[40px] min-l:text-[40px] min-xl:text-[56px] min-xxl:text-[64px] desktop:h-[44px] lg-desktop:h-[52px] h-[28px] -translate-y-[12%] md:text-[40px]\"\n />\n <Heading\n size={5}\n as=\"h6\"\n className=\"image-text-feature__item-text bg-gradient-to-r from-[#3ad1ff] to-[#008cd6] bg-clip-text text-transparent\"\n >\n {item.text}\n </Heading>\n </div>\n <Text\n size={4}\n as=\"p\"\n html={item.desc}\n className=\"image-text-feature__item-desc tablet:text-[14px] laptop:text-[14px] desktop:text-[16px] lg-desktop:text-[18px] -mt-[2px] text-[14px]\"\n />\n </div>\n ))}\n </div>\n </div>\n </section>\n )\n})\n\nImageTextFeature.displayName = 'ImageTextFeature'\n\nexport default withLayout(ImageTextFeature)\n"],
5
- "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAqCM,IAAAI,EAAA,6BApCNC,EAAmD,oBACnDC,EAAuC,qCACvCC,EAAmB,kCACnBC,EAA2B,kCAC3BC,EAA4B,sCAG5B,MAAMC,EAAgB,QAChBC,EAAgB,qBAEhBC,EAAmB,EAAAC,QAAM,WAAkD,CAAC,CAAE,KAAAC,EAAM,UAAAC,CAAU,EAAGC,IAAQ,CAC7G,KAAM,CAAE,MAAAC,EAAO,SAAAC,EAAU,QAAAC,EAAS,YAAAC,EAAa,SAAAC,EAAU,MAAAC,EAAQ,CAAC,EAAG,cAAAC,EAAgB,OAAQ,MAAAC,EAAQ,OAAQ,EAAIV,EAE3GW,KAAS,UAAuB,IAAI,EAE1C,wBAAYA,EAAQ,CAClB,cAAAf,EACA,cAAAC,EACA,eAAgBM,EAChB,qBAAsBC,CACxB,CAAC,KAED,uBAAoBF,EAAK,IAAMS,EAAO,OAAyB,KAG7D,QAAC,WACC,IAAKA,EACL,uBAAqB,mBACrB,aAAW,MACT,qBACAD,IAAU,OAAS,YAAc,GACjC,qIACAT,CACF,EAGA,oBAAC,WACC,OAAQ,GAAGI,GAAS,GAAG,KAAKE,GAAU,KAAOF,GAAS,GAAG,UAAUC,GAAa,KAAOD,GAAS,GAAG,OACnG,IAAKA,GAAS,IACd,aAAW,MACT,kIACA,CACE,gGACEI,IAAkB,OACpB,kFACEA,IAAkB,OACtB,CACF,EACF,KAGA,QAAC,OACC,aAAW,MAAG,2FAA4F,CACxG,yBAA0BA,IAAkB,OAC5C,UAAWA,IAAkB,OAC/B,CAAC,EAGD,oBAAC,WAAQ,KAAM,EAAG,KAAMN,EAAO,GAAG,KAAK,UAAU,6CAA6C,EAG7FC,MACC,OAAC,QACC,KAAM,EACN,KAAMA,EACN,GAAG,IACH,UAAU,yHACZ,KAIF,OAAC,OAAI,UAAU,6LACZ,SAAAI,EAAM,IAAI,CAACI,EAA4BC,OACtC,QAAC,OAAgB,UAAU,wEACzB,qBAAC,OAAI,UAAU,uEACb,oBAAC,OACC,IAAKD,EAAK,KACV,IAAI,OACJ,UAAU,4LACZ,KACA,OAAC,WACC,KAAM,EACN,GAAG,KACH,UAAU,2GAET,SAAAA,EAAK,KACR,GACF,KACA,OAAC,QACC,KAAM,EACN,GAAG,IACH,KAAMA,EAAK,KACX,UAAU,uIACZ,IApBQC,CAqBV,CACD,EACH,GACF,GACF,CAEJ,CAAC,EAEDf,EAAiB,YAAc,mBAE/B,IAAOV,KAAQ,cAAWU,CAAgB",
4
+ "sourcesContent": ["'use client'\nimport React, { useImperativeHandle, useRef } from 'react'\nimport { Heading, Picture, Text } from '../../components/index.js'\nimport { cn } from '../../helpers/utils.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport type { ImageTextFeatureProps, ImageTextFeatureItem } from './types.js'\n\nconst componentType = 'image'\nconst componentName = 'image_text_feature'\n\nconst ImageTextFeature = React.forwardRef<HTMLDivElement, ImageTextFeatureProps>(({ data, className }, ref) => {\n const { title, subtitle, pcImage, mobileImage, padImage, items = [], imagePosition = 'left', theme = 'light' } = data\n\n const boxRef = useRef<HTMLDivElement>(null)\n\n useExposure(boxRef, {\n componentType,\n componentName,\n componentTitle: title,\n componentDescription: subtitle,\n })\n\n useImperativeHandle(ref, () => boxRef.current as HTMLDivElement)\n\n return (\n <section\n ref={boxRef}\n data-ui-component-id=\"ImageTextFeature\"\n className={cn(\n 'image-text-feature',\n theme === 'dark' ? 'aiui-dark' : '',\n 'text-info-primary laptop:flex-row laptop:gap-[32px] desktop:gap-[48px] lg-desktop:gap-[64px] flex flex-col items-center gap-[24px]',\n className\n )}\n >\n {/* \u56FE\u7247\u533A\u57DF */}\n {pcImage?.url && (\n <Picture\n source={`${pcImage.url}, ${padImage?.url || pcImage.url} 1024, ${mobileImage?.url || pcImage.url} 768`}\n alt={pcImage?.alt}\n className={cn(\n 'image-text-feature__image tablet:aspect-[704/360] laptop:aspect-[824/560] aspect-[716/720] max-h-[560px] max-w-[824px] shrink-0',\n {\n 'image-text-feature__image--left order-2 laptop:order-1 laptop:basis-[63%] desktop:basis-[57%]':\n imagePosition === 'left',\n 'image-text-feature__image--right order-2 laptop:basis-[63%] desktop:basis-[57%]':\n imagePosition === 'right',\n }\n )}\n />\n )}\n\n {/* \u5185\u5BB9\u533A\u57DF */}\n <div\n className={cn('image-text-feature__content laptop:w-fit flex w-full flex-col items-start justify-center', {\n 'order-1 laptop:order-2': imagePosition === 'left',\n 'order-1': imagePosition === 'right',\n })}\n >\n {/* \u6807\u9898 */}\n <Heading size={4} html={title} as=\"h3\" className=\"image-text-feature__title w-full text-left\" />\n\n {/* \u526F\u6807\u9898 */}\n {subtitle && (\n <Text\n size={4}\n html={subtitle}\n as=\"p\"\n className=\"image-text-feature__subtitle min-xxl:mt-[8px] laptop:text-[16px] lg-desktop:text-[18px] mt-[4px] text-left text-[14px]\"\n />\n )}\n\n {/* \u529F\u80FD\u5217\u8868 */}\n <div className=\"image-text-feature__items tablet:flex-row tablet:justify-start tablet:gap-[90px] laptop:w-fit laptop:flex-col laptop:justify-around laptop:gap-0 flex w-full flex-col justify-around gap-0\">\n {items.map((item: ImageTextFeatureItem, index: number) => (\n <div key={index} className=\"image-text-feature__item laptop:mt-[32px] desktop:mt-[48px] mt-[24px]\">\n <div className=\"image-text-feature__item-header flex flex-row items-center gap-[8px]\">\n {item.icon && (\n <img\n src={item.icon}\n alt=\"icon\"\n className=\"image-text-feature__item-icon min-md:text-[40px] min-l:text-[40px] min-xl:text-[56px] min-xxl:text-[64px] desktop:h-[44px] lg-desktop:h-[52px] h-[28px] -translate-y-[12%] md:text-[40px]\"\n />\n )}\n <Heading\n size={5}\n as=\"h6\"\n className=\"image-text-feature__item-text bg-gradient-to-r from-[#3ad1ff] to-[#008cd6] bg-clip-text text-transparent\"\n >\n {item.text}\n </Heading>\n </div>\n <Text\n size={4}\n as=\"p\"\n html={item.desc}\n className=\"image-text-feature__item-desc tablet:text-[14px] laptop:text-[14px] desktop:text-[16px] lg-desktop:text-[18px] -mt-[2px] text-[14px]\"\n />\n </div>\n ))}\n </div>\n </div>\n </section>\n )\n})\n\nImageTextFeature.displayName = 'ImageTextFeature'\n\nexport default withLayout(ImageTextFeature)\n"],
5
+ "mappings": "ukBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAsCQ,IAAAI,EAAA,6BArCRC,EAAmD,oBACnDC,EAAuC,qCACvCC,EAAmB,kCACnBC,EAA2B,kCAC3BC,EAA4B,sCAG5B,MAAMC,EAAgB,QAChBC,EAAgB,qBAEhBC,EAAmB,EAAAC,QAAM,WAAkD,CAAC,CAAE,KAAAC,EAAM,UAAAC,CAAU,EAAGC,IAAQ,CAC7G,KAAM,CAAE,MAAAC,EAAO,SAAAC,EAAU,QAAAC,EAAS,YAAAC,EAAa,SAAAC,EAAU,MAAAC,EAAQ,CAAC,EAAG,cAAAC,EAAgB,OAAQ,MAAAC,EAAQ,OAAQ,EAAIV,EAE3GW,KAAS,UAAuB,IAAI,EAE1C,wBAAYA,EAAQ,CAClB,cAAAf,EACA,cAAAC,EACA,eAAgBM,EAChB,qBAAsBC,CACxB,CAAC,KAED,uBAAoBF,EAAK,IAAMS,EAAO,OAAyB,KAG7D,QAAC,WACC,IAAKA,EACL,uBAAqB,mBACrB,aAAW,MACT,qBACAD,IAAU,OAAS,YAAc,GACjC,qIACAT,CACF,EAGC,UAAAI,GAAS,QACR,OAAC,WACC,OAAQ,GAAGA,EAAQ,GAAG,KAAKE,GAAU,KAAOF,EAAQ,GAAG,UAAUC,GAAa,KAAOD,EAAQ,GAAG,OAChG,IAAKA,GAAS,IACd,aAAW,MACT,kIACA,CACE,gGACEI,IAAkB,OACpB,kFACEA,IAAkB,OACtB,CACF,EACF,KAIF,QAAC,OACC,aAAW,MAAG,2FAA4F,CACxG,yBAA0BA,IAAkB,OAC5C,UAAWA,IAAkB,OAC/B,CAAC,EAGD,oBAAC,WAAQ,KAAM,EAAG,KAAMN,EAAO,GAAG,KAAK,UAAU,6CAA6C,EAG7FC,MACC,OAAC,QACC,KAAM,EACN,KAAMA,EACN,GAAG,IACH,UAAU,yHACZ,KAIF,OAAC,OAAI,UAAU,6LACZ,SAAAI,EAAM,IAAI,CAACI,EAA4BC,OACtC,QAAC,OAAgB,UAAU,wEACzB,qBAAC,OAAI,UAAU,uEACZ,UAAAD,EAAK,SACJ,OAAC,OACC,IAAKA,EAAK,KACV,IAAI,OACJ,UAAU,4LACZ,KAEF,OAAC,WACC,KAAM,EACN,GAAG,KACH,UAAU,2GAET,SAAAA,EAAK,KACR,GACF,KACA,OAAC,QACC,KAAM,EACN,GAAG,IACH,KAAMA,EAAK,KACX,UAAU,uIACZ,IAtBQC,CAuBV,CACD,EACH,GACF,GACF,CAEJ,CAAC,EAEDf,EAAiB,YAAc,mBAE/B,IAAOV,KAAQ,cAAWU,CAAgB",
6
6
  "names": ["ImageTextFeature_exports", "__export", "ImageTextFeature_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_components", "import_utils", "import_Styles", "import_useExposure", "componentType", "componentName", "ImageTextFeature", "React", "data", "className", "ref", "title", "subtitle", "pcImage", "mobileImage", "padImage", "items", "imagePosition", "theme", "boxRef", "item", "index"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var A=Object.create;var w=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var I=(t,e)=>{for(var n in e)w(t,n,{get:e[n],enumerable:!0})},D=(t,e,n,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of S(e))!F.call(t,d)&&d!==n&&w(t,d,{get:()=>e[d],enumerable:!(c=M(e,d))||c.enumerable});return t};var B=(t,e,n)=>(n=t!=null?A(E(t)):{},D(e||!t||!t.__esModule?w(n,"default",{value:t,enumerable:!0}):n,t)),P=t=>D(w({},"__esModule",{value:!0}),t);var L={};I(L,{ChanceMethods:()=>T,default:()=>_});module.exports=P(L);var a=require("react/jsx-runtime"),h=B(require("react")),s=require("../../helpers/index.js"),l=require("../../components/index.js");const T=({theme:t,methods:e,title:n="Want more chances to win?",subtitle:c,footerNote:d,className:r,userData:g,onOpenShareModal:o,chanceBadgeText:p="Chance +1",completedText:m="Completed",usedText:i="Used",loadingText:u="Loading...",mechanismType:y="methods",inputConfig:k,isAgreementChecked:v,onAgreementCheckedChange:f,agreementErrorText:N})=>y==="input"&&k?(0,a.jsxs)("div",{className:(0,s.cn)("chance-methods-container","flex flex-col overflow-y-auto","p-[16px]","desktop:px-[24px] desktop:pt-[24px]","lg-desktop:px-[32px]","gap-[16px]","lg-desktop:gap-[16px]",t==="dark"?"aiui-dark":"",r),children:[(0,a.jsxs)("div",{className:"chance-methods-header flex flex-col gap-[4px]",children:[(0,a.jsx)(l.Heading,{size:2,className:(0,s.cn)("chance-methods-title","text-info-primary tracking-[-0.32px]"),children:n}),c&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-subtitle","text-[14px] font-semibold leading-[1.4]","lg-desktop:text-[18px] desktop:text-[16px]",t==="dark"?"text-[#8A8D92]":"text-[#4A4C56]"),children:c})]}),(0,a.jsx)(R,{theme:t,inputConfig:k,isAgreementChecked:v,onAgreementCheckedChange:f,agreementErrorText:N}),d&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-footer","font-semibold","text-[14px] leading-[1.4] ","desktop:pt-[24px] pt-[16px]",t==="dark"?"text-[#75787F]":"text-[#767880]"),children:d})]}):!e||e.length===0?null:(0,a.jsxs)("div",{className:(0,s.cn)("chance-methods-container","flex flex-col overflow-y-auto","p-[16px]","desktop:px-[24px] desktop:pt-[24px]","lg-desktop:px-[32px]","gap-[16px]","lg-desktop:gap-[16px]",t==="dark"?"aiui-dark":"",r),children:[(0,a.jsxs)("div",{className:"chance-methods-header flex flex-col gap-[4px]",children:[(0,a.jsx)(l.Heading,{size:2,className:(0,s.cn)("chance-methods-title","text-info-primary tracking-[-0.32px]"),children:n}),c&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-subtitle","text-[14px] font-semibold leading-[1.4]","lg-desktop:text-[18px] desktop:text-[16px]",t==="dark"?"text-[#8A8D92]":"text-[#4A4C56]"),children:c})]}),(0,a.jsx)("div",{className:"chance-methods-list flex grow flex-col gap-[16px]",children:e.map(b=>(0,a.jsx)(V,{method:b,userData:g,onOpenShareModal:o,chanceBadgeText:p,completedText:m,usedText:i,loadingText:u},b.methodKey))}),d&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-footer","font-semibold","text-[14px] leading-[1.4] ","desktop:pt-[24px] pt-[16px]",t==="dark"?"text-[#75787F]":"text-[#767880]"),children:d})]}),R=({theme:t,inputConfig:e,isAgreementChecked:n,onAgreementCheckedChange:c,agreementErrorText:d})=>{const[r,g]=h.default.useState(e.defaultValue||""),[o,p]=h.default.useState(""),[m,i]=h.default.useState(""),[u,y]=h.default.useState(!1),k=!!e.agreementNotice,v=n??u,f=!e.isSubmitting&&!!r.trim(),N=e.validationPattern??(e.inputType==="email"?"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$":void 0);h.default.useEffect(()=>{e.defaultValue&&!r&&g(e.defaultValue)},[e.defaultValue]),h.default.useEffect(()=>{d&&i(d)},[d]);const b=async()=>{if(f){if(k&&!v){i(e.agreementWarningText||"Please agree to the terms before continuing");return}if(N&&!new RegExp(N).test(r.trim())){p(e.validationErrorText||"Invalid input");return}p(""),i("");try{await e.onSubmit?.(r.trim())}catch(x){console.error("[ChanceInputMode] onSubmit error:",x)}}};return(0,a.jsxs)("div",{className:"chance-input-mode flex grow flex-col gap-[16px]",children:[(0,a.jsx)("input",{type:e.inputType||"text",value:r,onChange:x=>{g(x.target.value),p("")},placeholder:e.placeholder||"Enter your order number",disabled:e.isSubmitting||e.disabled,autoComplete:e.disableAutofill?"new-password":void 0,name:e.disableAutofill?"lottery-input":void 0,readOnly:e.disabled,className:(0,s.cn)("rounded-btn laptop:h-[54px] laptop:px-[16px] h-[44px] w-full border bg-transparent px-[12px]","lg-desktop:text-[16px] text-[14px] leading-[1.4]","outline-none transition-colors focus:ring-0 focus-visible:outline-none focus-visible:ring-0","border-[#D1D5DB] placeholder:text-[#9CA3AF]",o?"border-red-500":"",t==="dark"?"text-white":"text-[#1E2024]"),onKeyDown:x=>{x.key==="Enter"&&f&&b()}}),(0,a.jsx)(l.Button,{size:"lg",variant:t==="dark"?"primary":"secondary",onClick:b,disabled:!f,className:"w-fit","data-headless-type-name":e.submitTrackTypeName,"data-headless-title-desc-button":e.submitTrackTitleDescButton,children:e.isSubmitting?"Loading...":e.submitText||"Spin and Win"}),o&&(0,a.jsx)("p",{className:"text-[12px] text-red-500",children:o}),m&&(0,a.jsx)("p",{className:"text-[12px] text-red-500",children:m}),k&&(0,a.jsxs)("label",{className:"flex items-start gap-[8px] pt-[4px]",children:[(0,a.jsx)(l.Checkbox,{checked:v,onCheckedChange:x=>{const C=!!x;c?.(C),y(C),C&&i("")},className:(0,s.cn)("mt-[2px] shrink-0",t==="dark"?"border-white/60 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=checked]:text-[#1D1D1F]":"border-[#1D1D1F]/40 data-[state=checked]:border-[#1D1D1F] data-[state=checked]:bg-[#1D1D1F] data-[state=checked]:text-white")}),(0,a.jsx)(l.Text,{html:e.agreementNotice,className:(0,s.cn)("text-[14px] font-[700] leading-[1.4]","[&_a]:underline [&_a]:underline-offset-2",t==="dark"?"text-white/95 [&_a]:text-white [&_a]:hover:text-white/80":"text-[#1E2024] [&_a]:text-[#1E2024] [&_a]:hover:text-[#1E2024]/80")})]})]})},V=({method:t,userData:e,onOpenShareModal:n,chanceBadgeText:c,completedText:d,usedText:r,loadingText:g})=>{const o=t.status||"pending",p=t.loading||!1,m=t.disabled||o==="completed"||o==="used"||p,i=()=>{if(!e?.isLoggedIn){t.onLoginRequired?.();return}t.openShareModal&&n&&n(),t.onClick()},u={pending:p?g:t?.buttonText||"Redeem now",completed:d,used:r};return(0,a.jsxs)("div",{className:(0,s.cn)("chance-method-item","flex flex-col items-start gap-[8px]","tablet:flex-row tablet:items-center tablet:gap-4","transition-all",{"opacity-60":m}),children:[(0,a.jsxs)("div",{className:(0,s.cn)("chance-method-info","flex flex-1 flex-col gap-[4px]","min-w-0"),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-[4px]",children:[(0,a.jsx)("p",{className:(0,s.cn)("chance-method-title","text-info-primary","text-[14px] font-[700] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]"),children:t.title}),(0,a.jsx)("span",{className:(0,s.cn)("chance-badge","text-[14px] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]","font-[700]","shrink-0",{"text-[#ff6b35]":o==="pending","text-[#4caf50]":o==="completed","text-[#75787F]":o==="used"}),children:c})]}),(0,a.jsx)("p",{className:(0,s.cn)("chance-method-description","text-info-primary","text-[14px] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]","font-[700]"),children:t.description})]}),(0,a.jsx)("div",{className:"chance-method-action shrink-0",children:(0,a.jsx)(l.Button,{onClick:i,disabled:m,className:(0,s.cn)("chance-button","lg-desktop:min-w-[162px] min-w-[132px]",{"bg-[#4caf50]":o==="completed","bg-[#75787F]":o==="used"}),children:u[o]})})]})};var _=T;
1
+ "use strict";"use client";var A=Object.create;var w=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var I=(t,e)=>{for(var d in e)w(t,d,{get:e[d],enumerable:!0})},T=(t,e,d,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of S(e))!F.call(t,n)&&n!==d&&w(t,n,{get:()=>e[n],enumerable:!(c=M(e,n))||c.enumerable});return t};var B=(t,e,d)=>(d=t!=null?A(E(t)):{},T(e||!t||!t.__esModule?w(d,"default",{value:t,enumerable:!0}):d,t)),P=t=>T(w({},"__esModule",{value:!0}),t);var L={};I(L,{ChanceMethods:()=>D,default:()=>_});module.exports=P(L);var a=require("react/jsx-runtime"),h=B(require("react")),s=require("../../helpers/index.js"),l=require("../../components/index.js");const D=({theme:t,methods:e,title:d="Want more chances to win?",subtitle:c,footerNote:n,className:r,userData:g,onOpenShareModal:o,chanceBadgeText:p="Chance +1",completedText:m="Completed",usedText:i="Used",loadingText:u="Loading...",mechanismType:y="methods",inputConfig:k,isAgreementChecked:v,onAgreementCheckedChange:f,agreementErrorText:N})=>y==="input"&&k?(0,a.jsxs)("div",{className:(0,s.cn)("chance-methods-container","flex flex-col overflow-y-auto","p-[16px]","desktop:px-[24px] desktop:pt-[24px]","lg-desktop:px-[32px]","gap-[16px]","lg-desktop:gap-[16px]",t==="dark"?"aiui-dark":"",r),children:[(0,a.jsxs)("div",{className:"chance-methods-header flex flex-col gap-[4px]",children:[(0,a.jsx)(l.Heading,{size:2,className:(0,s.cn)("chance-methods-title","text-info-primary tracking-[-0.32px]"),children:d}),c&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-subtitle","text-[14px] font-semibold leading-[1.4]","lg-desktop:text-[18px] desktop:text-[16px]",t==="dark"?"text-[#8A8D92]":"text-[#4A4C56]"),children:c})]}),(0,a.jsx)(R,{theme:t,inputConfig:k,isAgreementChecked:v,onAgreementCheckedChange:f,agreementErrorText:N}),n&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-footer","font-semibold","text-[14px] leading-[1.4] ","desktop:pt-[24px] pt-[16px]",t==="dark"?"text-[#75787F]":"text-[#767880]"),children:n})]}):!e||e.length===0?null:(0,a.jsxs)("div",{className:(0,s.cn)("chance-methods-container","flex flex-col overflow-y-auto","p-[16px]","desktop:px-[24px] desktop:pt-[24px]","lg-desktop:px-[32px]","gap-[16px]","lg-desktop:gap-[16px]",t==="dark"?"aiui-dark":"",r),children:[(0,a.jsxs)("div",{className:"chance-methods-header flex flex-col gap-[4px]",children:[(0,a.jsx)(l.Heading,{size:2,className:(0,s.cn)("chance-methods-title","text-info-primary tracking-[-0.32px]"),children:d}),c&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-subtitle","text-[14px] font-semibold leading-[1.4]","lg-desktop:text-[18px] desktop:text-[16px]",t==="dark"?"text-[#8A8D92]":"text-[#4A4C56]"),children:c})]}),(0,a.jsx)("div",{className:"chance-methods-list flex grow flex-col gap-[16px]",children:e.map(b=>(0,a.jsx)(V,{method:b,userData:g,onOpenShareModal:o,chanceBadgeText:p,completedText:m,usedText:i,loadingText:u},b.methodKey))}),n&&(0,a.jsx)("p",{className:(0,s.cn)("chance-methods-footer","font-semibold","text-[14px] leading-[1.4] ","desktop:pt-[24px] pt-[16px]",t==="dark"?"text-[#75787F]":"text-[#767880]"),children:n})]}),R=({theme:t,inputConfig:e,isAgreementChecked:d,onAgreementCheckedChange:c,agreementErrorText:n})=>{const[r,g]=h.default.useState(e.defaultValue||""),[o,p]=h.default.useState(""),[m,i]=h.default.useState(""),[u,y]=h.default.useState(!1),k=!!e.agreementNotice,v=d??u,f=!e.isSubmitting&&!!r.trim(),N=e.validationPattern??(e.inputType==="email"?"^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$":void 0);h.default.useEffect(()=>{e.defaultValue&&!r&&g(e.defaultValue)},[e.defaultValue]),h.default.useEffect(()=>{n&&i(n)},[n]);const b=async()=>{if(f){if(k&&!v){i(e.agreementWarningText||"Please agree to the terms before continuing");return}if(N&&!new RegExp(N).test(r.trim())){p(e.validationErrorText||"Invalid input");return}p(""),i("");try{await e.onSubmit?.(r.trim())}catch(x){console.error("[ChanceInputMode] onSubmit error:",x)}}};return(0,a.jsxs)("div",{className:"chance-input-mode flex grow flex-col gap-[16px]",children:[(0,a.jsx)("input",{type:e.inputType||"text",value:r,onChange:x=>{g(x.target.value),p("")},placeholder:e.placeholder||"Enter your order number",disabled:e.isSubmitting||e.disabled,autoComplete:e.disableAutofill?"new-password":void 0,name:e.disableAutofill?"lottery-input":void 0,readOnly:e.disabled,className:(0,s.cn)("rounded-btn laptop:h-[54px] laptop:px-[16px] h-[44px] w-full border bg-transparent px-[12px]","lg-desktop:text-[16px] text-[14px] leading-[1.4]","outline-none transition-colors focus:ring-0 focus-visible:outline-none focus-visible:ring-0","border-[#D1D5DB] placeholder:text-[#9CA3AF]",o?"border-red-500":"",t==="dark"?"text-white":"text-[#1E2024]"),onKeyDown:x=>{x.key==="Enter"&&f&&b()}}),(0,a.jsx)(l.Button,{size:"lg",variant:t==="dark"?"primary":"secondary",onClick:b,disabled:!f,className:"w-fit","data-headless-type-name":e.submitTrackTypeName,"data-headless-title-desc-button":e.submitTrackTitleDescButton,children:e.isSubmitting?e.loadingText||"Loading...":e.submitText||"Spin and Win"}),o&&(0,a.jsx)("p",{className:"text-[12px] text-red-500",children:o}),m&&(0,a.jsx)("p",{className:"text-[12px] text-red-500",children:m}),k&&(0,a.jsxs)("label",{className:"flex items-start gap-[8px] pt-[4px]",children:[(0,a.jsx)(l.Checkbox,{checked:v,onCheckedChange:x=>{const C=!!x;c?.(C),y(C),C&&i("")},className:(0,s.cn)("mt-[2px] shrink-0",t==="dark"?"border-white/60 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=checked]:text-[#1D1D1F]":"border-[#1D1D1F]/40 data-[state=checked]:border-[#1D1D1F] data-[state=checked]:bg-[#1D1D1F] data-[state=checked]:text-white")}),(0,a.jsx)(l.Text,{html:e.agreementNotice,className:(0,s.cn)("text-[14px] font-[700] leading-[1.4]","[&_a]:underline [&_a]:underline-offset-2",t==="dark"?"text-white/95 [&_a]:text-white [&_a]:hover:text-white/80":"text-[#1E2024] [&_a]:text-[#1E2024] [&_a]:hover:text-[#1E2024]/80")})]})]})},V=({method:t,userData:e,onOpenShareModal:d,chanceBadgeText:c,completedText:n,usedText:r,loadingText:g})=>{const o=t.status||"pending",p=t.loading||!1,m=t.disabled||o==="completed"||o==="used"||p,i=()=>{if(!e?.isLoggedIn){t.onLoginRequired?.();return}t.openShareModal&&d&&d(),t.onClick()},u={pending:p?g:t?.buttonText||"Redeem now",completed:n,used:r};return(0,a.jsxs)("div",{className:(0,s.cn)("chance-method-item","flex flex-col items-start gap-[8px]","tablet:flex-row tablet:items-center tablet:gap-4","transition-all",{"opacity-60":m}),children:[(0,a.jsxs)("div",{className:(0,s.cn)("chance-method-info","flex flex-1 flex-col gap-[4px]","min-w-0"),children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-[4px]",children:[(0,a.jsx)("p",{className:(0,s.cn)("chance-method-title","text-info-primary","text-[14px] font-[700] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]"),children:t.title}),(0,a.jsx)("span",{className:(0,s.cn)("chance-badge","text-[14px] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]","font-[700]","shrink-0",{"text-[#ff6b35]":o==="pending","text-[#4caf50]":o==="completed","text-[#75787F]":o==="used"}),children:c})]}),(0,a.jsx)("p",{className:(0,s.cn)("chance-method-description","text-info-primary","text-[14px] leading-[1.4] ","lg-desktop:text-[18px] desktop:text-[16px]","font-[700]"),children:t.description})]}),(0,a.jsx)("div",{className:"chance-method-action shrink-0",children:(0,a.jsx)(l.Button,{onClick:i,disabled:m,className:(0,s.cn)("chance-button","lg-desktop:min-w-[162px] min-w-[132px]",{"bg-[#4caf50]":o==="completed","bg-[#75787F]":o==="used"}),children:u[o]})})]})};var _=D;
2
2
  //# sourceMappingURL=ChanceMethods.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/LotteryShared/ChanceMethods.tsx"],
4
- "sourcesContent": ["/**\n * ChanceMethods - \u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u65B9\u5F0F\u7EC4\u4EF6\n *\n * \u5C55\u793A\u7528\u6237\u83B7\u53D6\u989D\u5916\u62BD\u5956\u673A\u4F1A\u7684\u591A\u79CD\u65B9\u5F0F(\u5982\u5206\u4EAB\u3001\u79EF\u5206\u5151\u6362\u3001\u63A8\u8350\u7B49)\u3002\n * \u57FA\u4E8E Figma \u8BBE\u8BA1\u7A3F\u5B9E\u73B0\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\n *\n * Figma \u8BBE\u8BA1\u7A3F: https://www.figma.com/design/DhWsPamqTM76eMHS0aIQqw\n * \u8BBE\u8BA1\u8282\u70B9: 498:6185 (Chance Methods section)\n *\n * @module ChanceMethods\n * @date 2025-12-17\n */\n\n'use client'\n\nimport React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport type { ChanceInputConfig, ChanceMethod, ChanceMethodsProps, UserData } from './types.js'\nimport { Button, Checkbox, Heading, Text } from '../../components/index.js'\n\n// ============================================================================\n// ChanceMethods \u7EC4\u4EF6\n// ============================================================================\n\n/**\n * ChanceMethods - \u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u65B9\u5F0F\u7EC4\u4EF6\n *\n * \u7279\u6027:\n * - \u5C55\u793A\u591A\u79CD\u83B7\u53D6\u673A\u4F1A\u7684\u65B9\u5F0F(\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49)\n * - \u6BCF\u79CD\u65B9\u5F0F\u663E\u793A\u6807\u9898\u3001\u63CF\u8FF0\u3001Chance +1 \u5FBD\u7AE0\u548C\u884C\u52A8\u6309\u94AE\n * - \u652F\u6301\u7981\u7528\u72B6\u6001\n * - \u54CD\u5E94\u5F0F\u5E03\u5C40\n */\nexport const ChanceMethods: React.FC<ChanceMethodsProps> = ({\n theme,\n methods,\n title = 'Want more chances to win?',\n subtitle,\n footerNote,\n className,\n userData,\n onOpenShareModal,\n chanceBadgeText = 'Chance +1',\n completedText = 'Completed',\n usedText = 'Used',\n loadingText = 'Loading...',\n mechanismType = 'methods',\n inputConfig,\n isAgreementChecked,\n onAgreementCheckedChange,\n agreementErrorText,\n}) => {\n // \u8F93\u5165\u6846\u6A21\u5F0F\n if (mechanismType === 'input' && inputConfig) {\n return (\n <div\n className={cn(\n 'chance-methods-container',\n 'flex flex-col overflow-y-auto',\n 'p-[16px]',\n 'desktop:px-[24px] desktop:pt-[24px]',\n 'lg-desktop:px-[32px]',\n 'gap-[16px]',\n 'lg-desktop:gap-[16px]',\n theme === 'dark' ? 'aiui-dark' : '',\n className\n )}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n <div className=\"chance-methods-header flex flex-col gap-[4px]\">\n <Heading size={2} className={cn('chance-methods-title', 'text-info-primary tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n {subtitle && (\n <p\n className={cn(\n 'chance-methods-subtitle',\n 'text-[14px] font-semibold leading-[1.4]',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n theme === 'dark' ? 'text-[#8A8D92]' : 'text-[#4A4C56]'\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n\n {/* \u8F93\u5165\u6846 + \u63D0\u4EA4\u6309\u94AE */}\n <ChanceInputMode\n theme={theme}\n inputConfig={inputConfig}\n isAgreementChecked={isAgreementChecked}\n onAgreementCheckedChange={onAgreementCheckedChange}\n agreementErrorText={agreementErrorText}\n />\n\n {/* \u5E95\u90E8\u63D0\u793A */}\n {footerNote && (\n <p\n className={cn(\n 'chance-methods-footer',\n 'font-semibold',\n 'text-[14px] leading-[1.4] ',\n 'desktop:pt-[24px] pt-[16px]',\n theme === 'dark' ? 'text-[#75787F]' : 'text-[#767880]'\n )}\n >\n {footerNote}\n </p>\n )}\n </div>\n )\n }\n\n // \u9632\u5FA1\u6027\u7F16\u7A0B:\u5904\u7406 undefined \u6216\u7A7A\u6570\u7EC4\n if (!methods || methods.length === 0) {\n return null\n }\n\n return (\n <div\n className={cn(\n 'chance-methods-container',\n 'flex flex-col overflow-y-auto',\n 'p-[16px]',\n 'desktop:px-[24px] desktop:pt-[24px]',\n 'lg-desktop:px-[32px]',\n 'gap-[16px]', // \u9ED8\u8BA4\u95F4\u8DDD\n 'lg-desktop:gap-[16px]', // lg-desktop: Figma \u8BBE\u8BA1\u7A3F\u95F4\u8DDD\n theme === 'dark' ? 'aiui-dark' : '',\n className\n )}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n <div className=\"chance-methods-header flex flex-col gap-[4px]\">\n <Heading size={2} className={cn('chance-methods-title', 'text-info-primary tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n {subtitle && (\n <p\n className={cn(\n 'chance-methods-subtitle',\n 'text-[14px] font-semibold leading-[1.4]',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n theme === 'dark' ? 'text-[#8A8D92]' : 'text-[#4A4C56]'\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n\n {/* \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868 */}\n <div className=\"chance-methods-list flex grow flex-col gap-[16px]\">\n {methods.map(method => (\n <ChanceMethodItem\n key={method.methodKey}\n method={method}\n userData={userData}\n onOpenShareModal={onOpenShareModal}\n chanceBadgeText={chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={loadingText}\n />\n ))}\n </div>\n\n {/* \u5E95\u90E8\u63D0\u793A */}\n {footerNote && (\n <p\n className={cn(\n 'chance-methods-footer',\n 'font-semibold',\n 'text-[14px] leading-[1.4] ',\n 'desktop:pt-[24px] pt-[16px]',\n theme === 'dark' ? 'text-[#75787F]' : 'text-[#767880]'\n )}\n >\n {footerNote}\n </p>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// ChanceInputMode \u5B50\u7EC4\u4EF6 - \u8F93\u5165\u6846\u6A21\u5F0F\n// ============================================================================\n\ninterface ChanceInputModeProps {\n theme?: 'light' | 'dark'\n inputConfig: ChanceInputConfig\n isAgreementChecked?: boolean\n onAgreementCheckedChange?: (checked: boolean) => void\n agreementErrorText?: string\n}\n\nconst ChanceInputMode: React.FC<ChanceInputModeProps> = ({\n theme,\n inputConfig,\n isAgreementChecked: controlledAgreementChecked,\n onAgreementCheckedChange,\n agreementErrorText,\n}) => {\n const [value, setValue] = React.useState(inputConfig.defaultValue || '')\n const [error, setError] = React.useState('')\n const [agreementError, setAgreementError] = React.useState('')\n const [internalAgreementChecked, setInternalAgreementChecked] = React.useState(false)\n\n const hasAgreementNotice = Boolean(inputConfig.agreementNotice)\n const isAgreementChecked = controlledAgreementChecked ?? internalAgreementChecked\n\n // Single source of truth for submit eligibility \u2014 shared by button, Enter key, and handleSubmit\n const canSubmit = !inputConfig.isSubmitting && Boolean(value.trim())\n\n const resolvedValidationPattern =\n inputConfig.validationPattern ?? (inputConfig.inputType === 'email' ? '^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$' : undefined)\n\n React.useEffect(() => {\n if (inputConfig.defaultValue && !value) {\n setValue(inputConfig.defaultValue)\n }\n }, [inputConfig.defaultValue])\n\n React.useEffect(() => {\n if (agreementErrorText) {\n setAgreementError(agreementErrorText)\n }\n }, [agreementErrorText])\n\n const handleSubmit = async () => {\n if (!canSubmit) return\n\n if (hasAgreementNotice && !isAgreementChecked) {\n setAgreementError(inputConfig.agreementWarningText || 'Please agree to the terms before continuing')\n return\n }\n\n if (resolvedValidationPattern) {\n const regex = new RegExp(resolvedValidationPattern)\n if (!regex.test(value.trim())) {\n setError(inputConfig.validationErrorText || 'Invalid input')\n return\n }\n }\n setError('')\n setAgreementError('')\n try {\n await inputConfig.onSubmit?.(value.trim())\n } catch (error) {\n // \u9519\u8BEF\u5F39\u7A97\u7531\u7236\u7EC4\u4EF6 (showError / onDrawError) \u5904\u7406\uFF0C\u6B64\u5904\u4EC5\u9632\u6B62 unhandled rejection\n console.error('[ChanceInputMode] onSubmit error:', error)\n }\n }\n\n return (\n <div className=\"chance-input-mode flex grow flex-col gap-[16px]\">\n <input\n type={inputConfig.inputType || 'text'}\n value={value}\n onChange={e => {\n setValue(e.target.value)\n setError('')\n }}\n placeholder={inputConfig.placeholder || 'Enter your order number'}\n disabled={inputConfig.isSubmitting || inputConfig.disabled}\n autoComplete={inputConfig.disableAutofill ? 'new-password' : undefined}\n name={inputConfig.disableAutofill ? 'lottery-input' : undefined}\n readOnly={inputConfig.disabled}\n className={cn(\n 'rounded-btn laptop:h-[54px] laptop:px-[16px] h-[44px] w-full border bg-transparent px-[12px]',\n 'lg-desktop:text-[16px] text-[14px] leading-[1.4]',\n 'outline-none transition-colors focus:ring-0 focus-visible:outline-none focus-visible:ring-0',\n 'border-[#D1D5DB] placeholder:text-[#9CA3AF]',\n error ? 'border-red-500' : '',\n theme === 'dark' ? 'text-white' : 'text-[#1E2024]'\n )}\n onKeyDown={e => {\n if (e.key === 'Enter' && canSubmit) handleSubmit()\n }}\n />\n <Button\n size=\"lg\"\n variant={theme === 'dark' ? 'primary' : 'secondary'}\n onClick={handleSubmit}\n disabled={!canSubmit}\n className=\"w-fit\"\n data-headless-type-name={inputConfig.submitTrackTypeName}\n data-headless-title-desc-button={inputConfig.submitTrackTitleDescButton}\n >\n {inputConfig.isSubmitting ? 'Loading...' : inputConfig.submitText || 'Spin and Win'}\n </Button>\n {error && <p className=\"text-[12px] text-red-500\">{error}</p>}\n {agreementError && <p className=\"text-[12px] text-red-500\">{agreementError}</p>}\n\n {hasAgreementNotice && (\n <label className=\"flex items-start gap-[8px] pt-[4px]\">\n <Checkbox\n checked={isAgreementChecked}\n onCheckedChange={checked => {\n const nextChecked = Boolean(checked)\n onAgreementCheckedChange?.(nextChecked)\n setInternalAgreementChecked(nextChecked)\n if (nextChecked) {\n setAgreementError('')\n }\n }}\n className={cn(\n 'mt-[2px] shrink-0',\n theme === 'dark'\n ? 'border-white/60 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=checked]:text-[#1D1D1F]'\n : 'border-[#1D1D1F]/40 data-[state=checked]:border-[#1D1D1F] data-[state=checked]:bg-[#1D1D1F] data-[state=checked]:text-white'\n )}\n />\n <Text\n html={inputConfig.agreementNotice}\n className={cn(\n 'text-[14px] font-[700] leading-[1.4]',\n '[&_a]:underline [&_a]:underline-offset-2',\n theme === 'dark'\n ? 'text-white/95 [&_a]:text-white [&_a]:hover:text-white/80'\n : 'text-[#1E2024] [&_a]:text-[#1E2024] [&_a]:hover:text-[#1E2024]/80'\n )}\n />\n </label>\n )}\n </div>\n )\n}\n\n// ChanceMethodItem \u5B50\u7EC4\u4EF6 - \u5355\u4E2A\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5361\u7247\n// ============================================================================\n\ninterface ChanceMethodItemProps {\n method: ChanceMethod\n userData?: UserData\n onOpenShareModal?: () => void\n chanceBadgeText: string\n completedText: string\n usedText: string\n loadingText: string\n}\n\n/**\n * ChanceMethodItem - \u5355\u4E2A\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5361\u7247\n *\n * \u5C55\u793A\u65B9\u5F0F\u540D\u79F0\u3001\u63CF\u8FF0\u3001Chance +1 \u5FBD\u7AE0\u548C\u884C\u52A8\u6309\u94AE\u3002\n * \u652F\u6301\u4E09\u79CD\u72B6\u6001\uFF1Apending\uFF08\u672A\u5B8C\u6210\uFF09\u3001completed\uFF08\u5DF2\u5B8C\u6210\uFF09\u3001used\uFF08\u5DF2\u4F7F\u7528\uFF09\n */\nconst ChanceMethodItem: React.FC<ChanceMethodItemProps> = ({\n method,\n userData,\n onOpenShareModal,\n chanceBadgeText,\n completedText,\n usedText,\n loadingText,\n}) => {\n const status = method.status || 'pending'\n const isLoading = method.loading || false\n const isDisabledOrCompleted = method.disabled || status === 'completed' || status === 'used' || isLoading\n\n // \u5904\u7406\u6309\u94AE\u70B9\u51FB\n const handleClick = () => {\n // \u68C0\u67E5\u767B\u5F55\u72B6\u6001\n if (!userData?.isLoggedIn) {\n // \u672A\u767B\u5F55\u65F6\uFF0C\u53EA\u8C03\u7528\u767B\u5F55\u56DE\u8C03\uFF0C\u4E0D\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n method.onLoginRequired?.()\n return\n }\n\n // \u5DF2\u767B\u5F55\u65F6\uFF0C\u6267\u884C\u6B63\u5E38\u903B\u8F91\n // \u5982\u679C\u914D\u7F6E\u4E86 openShareModal\uFF0C\u5219\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n if (method.openShareModal && onOpenShareModal) {\n onOpenShareModal()\n }\n // \u6267\u884C\u539F\u6709\u7684 onClick \u56DE\u8C03\n method.onClick()\n }\n\n // \u72B6\u6001\u6587\u672C\u6620\u5C04\n const statusTextMap = {\n pending: isLoading ? loadingText : method?.buttonText || 'Redeem now',\n completed: completedText,\n used: usedText,\n }\n\n return (\n <div\n className={cn(\n 'chance-method-item',\n 'flex flex-col items-start gap-[8px]',\n 'tablet:flex-row tablet:items-center tablet:gap-4',\n 'transition-all',\n {\n 'opacity-60': isDisabledOrCompleted,\n }\n )}\n >\n {/* \u5DE6\u4FA7:\u65B9\u5F0F\u4FE1\u606F */}\n <div\n className={cn(\n 'chance-method-info',\n 'flex flex-1 flex-col gap-[4px]',\n 'min-w-0' // \u786E\u4FDD\u6587\u672C\u53EF\u4EE5\u88AB\u622A\u65AD\n )}\n >\n {/* \u6807\u9898 + Chance +1 \u5FBD\u7AE0 */}\n <div className=\"flex flex-wrap items-center gap-[4px]\">\n <p\n className={cn(\n 'chance-method-title',\n 'text-info-primary',\n 'text-[14px] font-[700] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]'\n )}\n >\n {method.title}\n </p>\n\n <span\n className={cn(\n 'chance-badge',\n 'text-[14px] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n 'font-[700]',\n 'shrink-0',\n {\n 'text-[#ff6b35]': status === 'pending',\n 'text-[#4caf50]': status === 'completed',\n 'text-[#75787F]': status === 'used',\n }\n )}\n >\n {chanceBadgeText}\n </span>\n </div>\n\n {/* \u63CF\u8FF0\u6587\u672C */}\n <p\n className={cn(\n 'chance-method-description',\n 'text-info-primary',\n 'text-[14px] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n 'font-[700]'\n )}\n >\n {method.description}\n </p>\n </div>\n\n {/* \u53F3\u4FA7:\u884C\u52A8\u6309\u94AE */}\n <div className=\"chance-method-action shrink-0\">\n <Button\n onClick={handleClick}\n disabled={isDisabledOrCompleted}\n className={cn('chance-button', 'lg-desktop:min-w-[162px] min-w-[132px]', {\n 'bg-[#4caf50]': status === 'completed',\n 'bg-[#75787F]': status === 'used',\n })}\n >\n {statusTextMap[status]}\n </Button>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u5BFC\u51FA\n// ============================================================================\n\nexport default ChanceMethods\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * ChanceMethods - \u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u65B9\u5F0F\u7EC4\u4EF6\n *\n * \u5C55\u793A\u7528\u6237\u83B7\u53D6\u989D\u5916\u62BD\u5956\u673A\u4F1A\u7684\u591A\u79CD\u65B9\u5F0F(\u5982\u5206\u4EAB\u3001\u79EF\u5206\u5151\u6362\u3001\u63A8\u8350\u7B49)\u3002\n * \u57FA\u4E8E Figma \u8BBE\u8BA1\u7A3F\u5B9E\u73B0\u54CD\u5E94\u5F0F\u5E03\u5C40\u3002\n *\n * Figma \u8BBE\u8BA1\u7A3F: https://www.figma.com/design/DhWsPamqTM76eMHS0aIQqw\n * \u8BBE\u8BA1\u8282\u70B9: 498:6185 (Chance Methods section)\n *\n * @module ChanceMethods\n * @date 2025-12-17\n */\n\n'use client'\n\nimport React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport type { ChanceInputConfig, ChanceMethod, ChanceMethodsProps, UserData } from './types.js'\nimport { Button, Checkbox, Heading, Text } from '../../components/index.js'\n\n// ============================================================================\n// ChanceMethods \u7EC4\u4EF6\n// ============================================================================\n\n/**\n * ChanceMethods - \u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u65B9\u5F0F\u7EC4\u4EF6\n *\n * \u7279\u6027:\n * - \u5C55\u793A\u591A\u79CD\u83B7\u53D6\u673A\u4F1A\u7684\u65B9\u5F0F(\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49)\n * - \u6BCF\u79CD\u65B9\u5F0F\u663E\u793A\u6807\u9898\u3001\u63CF\u8FF0\u3001Chance +1 \u5FBD\u7AE0\u548C\u884C\u52A8\u6309\u94AE\n * - \u652F\u6301\u7981\u7528\u72B6\u6001\n * - \u54CD\u5E94\u5F0F\u5E03\u5C40\n */\nexport const ChanceMethods: React.FC<ChanceMethodsProps> = ({\n theme,\n methods,\n title = 'Want more chances to win?',\n subtitle,\n footerNote,\n className,\n userData,\n onOpenShareModal,\n chanceBadgeText = 'Chance +1',\n completedText = 'Completed',\n usedText = 'Used',\n loadingText = 'Loading...',\n mechanismType = 'methods',\n inputConfig,\n isAgreementChecked,\n onAgreementCheckedChange,\n agreementErrorText,\n}) => {\n // \u8F93\u5165\u6846\u6A21\u5F0F\n if (mechanismType === 'input' && inputConfig) {\n return (\n <div\n className={cn(\n 'chance-methods-container',\n 'flex flex-col overflow-y-auto',\n 'p-[16px]',\n 'desktop:px-[24px] desktop:pt-[24px]',\n 'lg-desktop:px-[32px]',\n 'gap-[16px]',\n 'lg-desktop:gap-[16px]',\n theme === 'dark' ? 'aiui-dark' : '',\n className\n )}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n <div className=\"chance-methods-header flex flex-col gap-[4px]\">\n <Heading size={2} className={cn('chance-methods-title', 'text-info-primary tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n {subtitle && (\n <p\n className={cn(\n 'chance-methods-subtitle',\n 'text-[14px] font-semibold leading-[1.4]',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n theme === 'dark' ? 'text-[#8A8D92]' : 'text-[#4A4C56]'\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n\n {/* \u8F93\u5165\u6846 + \u63D0\u4EA4\u6309\u94AE */}\n <ChanceInputMode\n theme={theme}\n inputConfig={inputConfig}\n isAgreementChecked={isAgreementChecked}\n onAgreementCheckedChange={onAgreementCheckedChange}\n agreementErrorText={agreementErrorText}\n />\n\n {/* \u5E95\u90E8\u63D0\u793A */}\n {footerNote && (\n <p\n className={cn(\n 'chance-methods-footer',\n 'font-semibold',\n 'text-[14px] leading-[1.4] ',\n 'desktop:pt-[24px] pt-[16px]',\n theme === 'dark' ? 'text-[#75787F]' : 'text-[#767880]'\n )}\n >\n {footerNote}\n </p>\n )}\n </div>\n )\n }\n\n // \u9632\u5FA1\u6027\u7F16\u7A0B:\u5904\u7406 undefined \u6216\u7A7A\u6570\u7EC4\n if (!methods || methods.length === 0) {\n return null\n }\n\n return (\n <div\n className={cn(\n 'chance-methods-container',\n 'flex flex-col overflow-y-auto',\n 'p-[16px]',\n 'desktop:px-[24px] desktop:pt-[24px]',\n 'lg-desktop:px-[32px]',\n 'gap-[16px]', // \u9ED8\u8BA4\u95F4\u8DDD\n 'lg-desktop:gap-[16px]', // lg-desktop: Figma \u8BBE\u8BA1\u7A3F\u95F4\u8DDD\n theme === 'dark' ? 'aiui-dark' : '',\n className\n )}\n >\n {/* \u6807\u9898\u533A\u57DF */}\n <div className=\"chance-methods-header flex flex-col gap-[4px]\">\n <Heading size={2} className={cn('chance-methods-title', 'text-info-primary tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n {subtitle && (\n <p\n className={cn(\n 'chance-methods-subtitle',\n 'text-[14px] font-semibold leading-[1.4]',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n theme === 'dark' ? 'text-[#8A8D92]' : 'text-[#4A4C56]'\n )}\n >\n {subtitle}\n </p>\n )}\n </div>\n\n {/* \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868 */}\n <div className=\"chance-methods-list flex grow flex-col gap-[16px]\">\n {methods.map(method => (\n <ChanceMethodItem\n key={method.methodKey}\n method={method}\n userData={userData}\n onOpenShareModal={onOpenShareModal}\n chanceBadgeText={chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={loadingText}\n />\n ))}\n </div>\n\n {/* \u5E95\u90E8\u63D0\u793A */}\n {footerNote && (\n <p\n className={cn(\n 'chance-methods-footer',\n 'font-semibold',\n 'text-[14px] leading-[1.4] ',\n 'desktop:pt-[24px] pt-[16px]',\n theme === 'dark' ? 'text-[#75787F]' : 'text-[#767880]'\n )}\n >\n {footerNote}\n </p>\n )}\n </div>\n )\n}\n\n// ============================================================================\n// ChanceInputMode \u5B50\u7EC4\u4EF6 - \u8F93\u5165\u6846\u6A21\u5F0F\n// ============================================================================\n\ninterface ChanceInputModeProps {\n theme?: 'light' | 'dark'\n inputConfig: ChanceInputConfig\n isAgreementChecked?: boolean\n onAgreementCheckedChange?: (checked: boolean) => void\n agreementErrorText?: string\n}\n\nconst ChanceInputMode: React.FC<ChanceInputModeProps> = ({\n theme,\n inputConfig,\n isAgreementChecked: controlledAgreementChecked,\n onAgreementCheckedChange,\n agreementErrorText,\n}) => {\n const [value, setValue] = React.useState(inputConfig.defaultValue || '')\n const [error, setError] = React.useState('')\n const [agreementError, setAgreementError] = React.useState('')\n const [internalAgreementChecked, setInternalAgreementChecked] = React.useState(false)\n\n const hasAgreementNotice = Boolean(inputConfig.agreementNotice)\n const isAgreementChecked = controlledAgreementChecked ?? internalAgreementChecked\n\n // Single source of truth for submit eligibility \u2014 shared by button, Enter key, and handleSubmit\n const canSubmit = !inputConfig.isSubmitting && Boolean(value.trim())\n\n const resolvedValidationPattern =\n inputConfig.validationPattern ?? (inputConfig.inputType === 'email' ? '^[^\\\\s@]+@[^\\\\s@]+\\\\.[^\\\\s@]+$' : undefined)\n\n React.useEffect(() => {\n if (inputConfig.defaultValue && !value) {\n setValue(inputConfig.defaultValue)\n }\n }, [inputConfig.defaultValue])\n\n React.useEffect(() => {\n if (agreementErrorText) {\n setAgreementError(agreementErrorText)\n }\n }, [agreementErrorText])\n\n const handleSubmit = async () => {\n if (!canSubmit) return\n\n if (hasAgreementNotice && !isAgreementChecked) {\n setAgreementError(inputConfig.agreementWarningText || 'Please agree to the terms before continuing')\n return\n }\n\n if (resolvedValidationPattern) {\n const regex = new RegExp(resolvedValidationPattern)\n if (!regex.test(value.trim())) {\n setError(inputConfig.validationErrorText || 'Invalid input')\n return\n }\n }\n setError('')\n setAgreementError('')\n try {\n await inputConfig.onSubmit?.(value.trim())\n } catch (error) {\n // \u9519\u8BEF\u5F39\u7A97\u7531\u7236\u7EC4\u4EF6 (showError / onDrawError) \u5904\u7406\uFF0C\u6B64\u5904\u4EC5\u9632\u6B62 unhandled rejection\n console.error('[ChanceInputMode] onSubmit error:', error)\n }\n }\n\n return (\n <div className=\"chance-input-mode flex grow flex-col gap-[16px]\">\n <input\n type={inputConfig.inputType || 'text'}\n value={value}\n onChange={e => {\n setValue(e.target.value)\n setError('')\n }}\n placeholder={inputConfig.placeholder || 'Enter your order number'}\n disabled={inputConfig.isSubmitting || inputConfig.disabled}\n autoComplete={inputConfig.disableAutofill ? 'new-password' : undefined}\n name={inputConfig.disableAutofill ? 'lottery-input' : undefined}\n readOnly={inputConfig.disabled}\n className={cn(\n 'rounded-btn laptop:h-[54px] laptop:px-[16px] h-[44px] w-full border bg-transparent px-[12px]',\n 'lg-desktop:text-[16px] text-[14px] leading-[1.4]',\n 'outline-none transition-colors focus:ring-0 focus-visible:outline-none focus-visible:ring-0',\n 'border-[#D1D5DB] placeholder:text-[#9CA3AF]',\n error ? 'border-red-500' : '',\n theme === 'dark' ? 'text-white' : 'text-[#1E2024]'\n )}\n onKeyDown={e => {\n if (e.key === 'Enter' && canSubmit) handleSubmit()\n }}\n />\n <Button\n size=\"lg\"\n variant={theme === 'dark' ? 'primary' : 'secondary'}\n onClick={handleSubmit}\n disabled={!canSubmit}\n className=\"w-fit\"\n data-headless-type-name={inputConfig.submitTrackTypeName}\n data-headless-title-desc-button={inputConfig.submitTrackTitleDescButton}\n >\n {inputConfig.isSubmitting ? inputConfig.loadingText || 'Loading...' : inputConfig.submitText || 'Spin and Win'}\n </Button>\n {error && <p className=\"text-[12px] text-red-500\">{error}</p>}\n {agreementError && <p className=\"text-[12px] text-red-500\">{agreementError}</p>}\n\n {hasAgreementNotice && (\n <label className=\"flex items-start gap-[8px] pt-[4px]\">\n <Checkbox\n checked={isAgreementChecked}\n onCheckedChange={checked => {\n const nextChecked = Boolean(checked)\n onAgreementCheckedChange?.(nextChecked)\n setInternalAgreementChecked(nextChecked)\n if (nextChecked) {\n setAgreementError('')\n }\n }}\n className={cn(\n 'mt-[2px] shrink-0',\n theme === 'dark'\n ? 'border-white/60 data-[state=checked]:border-white data-[state=checked]:bg-white data-[state=checked]:text-[#1D1D1F]'\n : 'border-[#1D1D1F]/40 data-[state=checked]:border-[#1D1D1F] data-[state=checked]:bg-[#1D1D1F] data-[state=checked]:text-white'\n )}\n />\n <Text\n html={inputConfig.agreementNotice}\n className={cn(\n 'text-[14px] font-[700] leading-[1.4]',\n '[&_a]:underline [&_a]:underline-offset-2',\n theme === 'dark'\n ? 'text-white/95 [&_a]:text-white [&_a]:hover:text-white/80'\n : 'text-[#1E2024] [&_a]:text-[#1E2024] [&_a]:hover:text-[#1E2024]/80'\n )}\n />\n </label>\n )}\n </div>\n )\n}\n\n// ChanceMethodItem \u5B50\u7EC4\u4EF6 - \u5355\u4E2A\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5361\u7247\n// ============================================================================\n\ninterface ChanceMethodItemProps {\n method: ChanceMethod\n userData?: UserData\n onOpenShareModal?: () => void\n chanceBadgeText: string\n completedText: string\n usedText: string\n loadingText: string\n}\n\n/**\n * ChanceMethodItem - \u5355\u4E2A\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5361\u7247\n *\n * \u5C55\u793A\u65B9\u5F0F\u540D\u79F0\u3001\u63CF\u8FF0\u3001Chance +1 \u5FBD\u7AE0\u548C\u884C\u52A8\u6309\u94AE\u3002\n * \u652F\u6301\u4E09\u79CD\u72B6\u6001\uFF1Apending\uFF08\u672A\u5B8C\u6210\uFF09\u3001completed\uFF08\u5DF2\u5B8C\u6210\uFF09\u3001used\uFF08\u5DF2\u4F7F\u7528\uFF09\n */\nconst ChanceMethodItem: React.FC<ChanceMethodItemProps> = ({\n method,\n userData,\n onOpenShareModal,\n chanceBadgeText,\n completedText,\n usedText,\n loadingText,\n}) => {\n const status = method.status || 'pending'\n const isLoading = method.loading || false\n const isDisabledOrCompleted = method.disabled || status === 'completed' || status === 'used' || isLoading\n\n // \u5904\u7406\u6309\u94AE\u70B9\u51FB\n const handleClick = () => {\n // \u68C0\u67E5\u767B\u5F55\u72B6\u6001\n if (!userData?.isLoggedIn) {\n // \u672A\u767B\u5F55\u65F6\uFF0C\u53EA\u8C03\u7528\u767B\u5F55\u56DE\u8C03\uFF0C\u4E0D\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n method.onLoginRequired?.()\n return\n }\n\n // \u5DF2\u767B\u5F55\u65F6\uFF0C\u6267\u884C\u6B63\u5E38\u903B\u8F91\n // \u5982\u679C\u914D\u7F6E\u4E86 openShareModal\uFF0C\u5219\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n if (method.openShareModal && onOpenShareModal) {\n onOpenShareModal()\n }\n // \u6267\u884C\u539F\u6709\u7684 onClick \u56DE\u8C03\n method.onClick()\n }\n\n // \u72B6\u6001\u6587\u672C\u6620\u5C04\n const statusTextMap = {\n pending: isLoading ? loadingText : method?.buttonText || 'Redeem now',\n completed: completedText,\n used: usedText,\n }\n\n return (\n <div\n className={cn(\n 'chance-method-item',\n 'flex flex-col items-start gap-[8px]',\n 'tablet:flex-row tablet:items-center tablet:gap-4',\n 'transition-all',\n {\n 'opacity-60': isDisabledOrCompleted,\n }\n )}\n >\n {/* \u5DE6\u4FA7:\u65B9\u5F0F\u4FE1\u606F */}\n <div\n className={cn(\n 'chance-method-info',\n 'flex flex-1 flex-col gap-[4px]',\n 'min-w-0' // \u786E\u4FDD\u6587\u672C\u53EF\u4EE5\u88AB\u622A\u65AD\n )}\n >\n {/* \u6807\u9898 + Chance +1 \u5FBD\u7AE0 */}\n <div className=\"flex flex-wrap items-center gap-[4px]\">\n <p\n className={cn(\n 'chance-method-title',\n 'text-info-primary',\n 'text-[14px] font-[700] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]'\n )}\n >\n {method.title}\n </p>\n\n <span\n className={cn(\n 'chance-badge',\n 'text-[14px] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n 'font-[700]',\n 'shrink-0',\n {\n 'text-[#ff6b35]': status === 'pending',\n 'text-[#4caf50]': status === 'completed',\n 'text-[#75787F]': status === 'used',\n }\n )}\n >\n {chanceBadgeText}\n </span>\n </div>\n\n {/* \u63CF\u8FF0\u6587\u672C */}\n <p\n className={cn(\n 'chance-method-description',\n 'text-info-primary',\n 'text-[14px] leading-[1.4] ',\n 'lg-desktop:text-[18px] desktop:text-[16px]',\n 'font-[700]'\n )}\n >\n {method.description}\n </p>\n </div>\n\n {/* \u53F3\u4FA7:\u884C\u52A8\u6309\u94AE */}\n <div className=\"chance-method-action shrink-0\">\n <Button\n onClick={handleClick}\n disabled={isDisabledOrCompleted}\n className={cn('chance-button', 'lg-desktop:min-w-[162px] min-w-[132px]', {\n 'bg-[#4caf50]': status === 'completed',\n 'bg-[#75787F]': status === 'used',\n })}\n >\n {statusTextMap[status]}\n </Button>\n </div>\n </div>\n )\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u5BFC\u51FA\n// ============================================================================\n\nexport default ChanceMethods\n"],
5
+ "mappings": "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",
6
6
  "names": ["ChanceMethods_exports", "__export", "ChanceMethods", "ChanceMethods_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_components", "theme", "methods", "title", "subtitle", "footerNote", "className", "userData", "onOpenShareModal", "chanceBadgeText", "completedText", "usedText", "loadingText", "mechanismType", "inputConfig", "isAgreementChecked", "onAgreementCheckedChange", "agreementErrorText", "ChanceInputMode", "method", "ChanceMethodItem", "controlledAgreementChecked", "value", "setValue", "React", "error", "setError", "agreementError", "setAgreementError", "internalAgreementChecked", "setInternalAgreementChecked", "hasAgreementNotice", "canSubmit", "resolvedValidationPattern", "handleSubmit", "e", "checked", "nextChecked", "status", "isLoading", "isDisabledOrCompleted", "handleClick", "statusTextMap"]
7
7
  }
@@ -710,6 +710,8 @@ export interface ChanceInputConfig {
710
710
  onSubmit?: (value: string) => void | Promise<void>;
711
711
  /** 是否正在提交 */
712
712
  isSubmitting?: boolean;
713
+ /** 提交中的 loading 按钮文案 @default "Loading..." */
714
+ loadingText?: string;
713
715
  /** 输入框类型 @default "text" */
714
716
  inputType?: 'text' | 'email' | 'number';
715
717
  /** 验证正则 (可选) */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/LotteryShared/types.ts"],
4
- "sourcesContent": ["/**\n * \u62BD\u5956\u7EC4\u4EF6\u5171\u4EAB\u7C7B\u578B\u5B9A\u4E49\n *\n * \u5305\u542B\u6240\u6709\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery, ProductLottery \u7B49\uFF09\u5171\u7528\u7684\u7C7B\u578B\u3001\u63A5\u53E3\u548C\u5E38\u91CF\u3002\n *\n * @module LotterySharedTypes\n * @date 2026-04-07\n */\n\nimport type { Theme, Img } from '../../types/props.js'\nimport type { SerializedEditorState, SerializedLexicalNode } from '@payloadcms/richtext-lexical/lexical'\n\n// Re-export Theme and Img for convenience\nexport type { Theme, Img }\n\n// ============================================================================\n// \u6838\u5FC3\u5B9E\u4F53\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5956\u54C1\uFF08Prize\uFF09\n *\n * \u4EE3\u8868\u62BD\u5956\u6D3B\u52A8\u4E2D\u7684\u4E00\u4E2A\u5956\u54C1\uFF0C\u5305\u542B\u663E\u793A\u6240\u9700\u7684\u6240\u6709\u4FE1\u606F\u3002\n *\n * @example\n * ```tsx\n * const prize: Prize = {\n * prizeKey: 'prize-001',\n * name: 'Anker Prime Charger (100W, 3 Ports, GaN)',\n * image: { url: 'https://images.unsplash.com/photo-123', alt: 'Charger' },\n * rank: '1st',\n * price: '$79.99'\n * }\n * ```\n */\nexport interface Prize {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\uFF0C\u7528\u4E8E React key \u548C\u4E2D\u5956\u7ED3\u679C\u5339\u914D\n */\n prizeKey: string\n\n /**\n * \u5956\u54C1\u540D\u79F0\uFF0C\u663E\u793A\u5728\u8F6C\u76D8\u548C\u5956\u6C60\u4E2D\n * @maxLength 100\n */\n name: string\n\n /**\n * \u5956\u54C1\u56FE\u7247\u5BF9\u8C61\uFF0C\u5305\u542B url \u548C alt\n */\n image: Img\n\n /**\n * \u6392\u540D\u6807\u8BC6\uFF0C\u4EC5\u5728 Prize Pool \u4E2D\u663E\u793A\n * @optional\n */\n rank?: '1st' | '2nd' | '3rd'\n\n /**\n * \u4EF7\u683C\u6216\u6298\u6263\u4FE1\u606F\uFF0C\u663E\u793A\u5728\u5956\u6C60\u4E2D\n * @example \"$99.99\" | \"12% Off\"\n * @optional\n */\n price?: string\n\n /** \u5956\u54C1\u7EF4\u5EA6\u7684\u4E2D\u5956\u5F39\u7A97\u8986\u76D6\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E\u65F6\u7531\u63A5\u5165\u5C42\u56DE\u9000\u5230\u5168\u5C40\u914D\u7F6E */\n winnerModalConfig?: {\n winnerNote?: string\n confirmText?: string\n confirmUrl?: string\n learnMoreUrl?: string\n learnMoreText?: string\n }\n}\n\n/**\n * \u4E2D\u5956\u4FE1\u606F\uFF08WinningInfo\uFF09\n *\n * \u4EE3\u8868\u4E00\u6761\u4E2D\u5956\u8BB0\u5F55\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\uFF0C\u8425\u9020\u6D3B\u52A8\u6C1B\u56F4\u3002\n *\n * @example\n * ```tsx\n * const winningInfo: WinningInfo = {\n * winningKey: 'win-001',\n * userName: 'Shuqi***',\n * prizeName: '12% Off Discount',\n * timestamp: 1702800000000\n * }\n * ```\n */\nexport interface WinningInfo {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n winningKey: string\n\n /**\n * \u7528\u6237\u540D\uFF08\u5DF2\u8131\u654F\uFF09\uFF0C\u5982 \"Shuqi***\"\n * @note \u5047\u8BBE\u4F20\u5165\u7684\u7528\u6237\u540D\u5DF2\u7ECF\u8FC7\u8131\u654F\u5904\u7406\uFF0C\u7EC4\u4EF6\u5185\u90E8\u4E0D\u518D\u5904\u7406\n */\n userName: string\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u540D\u79F0\n */\n prizeName: string\n\n /**\n * \u4E2D\u5956\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n * @optional\n */\n timestamp?: number\n}\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7C7B\u578B\n */\nexport type ChanceMethodType = 'share' | 'points' | 'refer' | string\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u72B6\u6001\n */\nexport type ChanceMethodStatus = 'pending' | 'completed' | 'used'\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF08ChanceMethod\uFF09\n *\n * \u4EE3\u8868\u4E00\u79CD\u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u7684\u65B9\u5F0F\uFF0C\u652F\u6301\u7075\u6D3B\u914D\u7F6E\uFF08\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49\uFF09\u3002\n *\n * @example\n * ```tsx\n * const chanceMethod: ChanceMethod = {\n * methodKey: 'share-001',\n * type: 'share',\n * title: 'Share on your socials',\n * description: 'Share this event on your social media',\n * buttonText: 'Redeem now',\n * onClick: () => console.log('Share clicked'),\n * disabled: false,\n * status: 'pending'\n * }\n * ```\n */\nexport interface ChanceMethod {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n methodKey: string\n\n /**\n * \u65B9\u5F0F\u7C7B\u578B\uFF0C\u652F\u6301\u9884\u5B9A\u4E49\u7C7B\u578B\uFF08'share', 'points', 'refer'\uFF09\u6216\u81EA\u5B9A\u4E49\u7C7B\u578B\n */\n type: ChanceMethodType\n\n /**\n * \u65B9\u5F0F\u6807\u9898\uFF0C\u5982 \"Share on your socials\"\n */\n title: string\n\n /**\n * \u8BE6\u7EC6\u8BF4\u660E\u6587\u5B57\n */\n description: string\n\n /**\n * \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 \"Redeem now\"\n * @default \"Redeem now\"\n * @optional\n */\n buttonText?: string\n\n completed?: string\n\n used?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n /**\n * \u70B9\u51FB\u6309\u94AE\u65F6\u7684\u56DE\u8C03\u51FD\u6570\n * @note \u4E1A\u52A1\u903B\u8F91\uFF08\u5982\u79EF\u5206\u6263\u9664\u3001\u5206\u4EAB\u9A8C\u8BC1\uFF09\u7531\u7236\u7EC4\u4EF6\u5904\u7406\n */\n onClick: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\u8BE5\u65B9\u5F0F\n * @default false\n * @optional\n */\n disabled?: boolean\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7684\u72B6\u6001\n * - pending: \u672A\u5B8C\u6210\uFF08\u9ED8\u8BA4\u72B6\u6001\uFF09\n * - completed: \u5DF2\u5B8C\u6210/\u5DF2\u83B7\u5F97\n * - used: \u5DF2\u4F7F\u7528\n * @default \"pending\"\n * @optional\n */\n status?: ChanceMethodStatus\n\n /**\n * \u662F\u5426\u663E\u793A\u52A0\u8F7D\u72B6\u6001\n * @default false\n * @optional\n */\n loading?: boolean\n\n /**\n * \u662F\u5426\u5728\u70B9\u51FB\u65F6\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n * @default false\n * @optional\n */\n openShareModal?: boolean\n}\n\n/**\n * \u7528\u6237\u6570\u636E\uFF08UserData\uFF09\n *\n * \u4EE3\u8868\u5F53\u524D\u7528\u6237\u7684\u62BD\u5956\u76F8\u5173\u6570\u636E\n *\n * @example\n * ```tsx\n * const userData: UserData = {\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [\n * { id: 'prize-001', name: 'Charger', image: 'https://...', timestamp: 1702800000000 }\n * ]\n * }\n * ```\n */\nexport interface UserData {\n /**\n * \u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n */\n isLoggedIn: boolean\n\n /**\n * \u5F53\u524D\u53EF\u4F7F\u7528\u7684\u62BD\u5956\u6B21\u6570\n * @default 0\n */\n availableChances: number\n\n /**\n * \u603B\u673A\u4F1A\u6570\uFF08\u7528\u4E8E\u663E\u793A\u8FDB\u5EA6\uFF0C\u4F8B\u5982 \"3/5\"\uFF09\n * @default undefined\n * @optional\n */\n totalChances?: number\n\n /**\n * \u5DF2\u83B7\u5F97\u7684\u5956\u54C1\u5217\u8868\n * @optional\n */\n wonPrizes?: Array<Prize & { timestamp?: number }>\n\n /** * \u7528\u6237\u7535\u5B50\u90AE\u7BB1\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u53D1\u9001\u4E2D\u5956\u901A\u77E5\u7B49\uFF09\n * @optional\n */\n email?: string\n\n /**\n * \u673A\u4F1A\u6570\u636E\u662F\u5426\u6B63\u5728\u52A0\u8F7D\u4E2D\n * @optional\n */\n isChancesLoading?: boolean\n}\n\n/**\n * \u7F13\u52A8\u51FD\u6570\u7C7B\u578B\n */\nexport type EasingFunction = 'ease-out' | 'ease-in-out' | 'linear'\n\n// ============================================================================\n// \u516C\u5171\u6587\u6848\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u590D\u5236\u64CD\u4F5C\u76F8\u5173\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5305\u542B\u590D\u5236\u529F\u80FD\u7684\u7EC4\u4EF6\n */\nexport interface CopyTextConfig {\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n}\n\n/**\n * \u4F18\u60E0\u7801\u76F8\u5173\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5C55\u793A\u4F18\u60E0\u7801\u7684\u7EC4\u4EF6\n */\nexport interface CouponConfig {\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u4F18\u60E0\u7801\n */\n couponCode?: string\n\n /**\n * \u4F18\u60E0\u7801\u8FC7\u671F\u65F6\u95F4\n */\n expiresAt?: string\n\n /**\n * \u6709\u6548\u671F\u6807\u7B7E\u6587\u6848\n * @default \"Valid until:\"\n */\n expiresAtLabel?: string\n\n /**\n * \u4F18\u60E0\u5238\u6298\u6263\u6587\u672C\uFF08\u4F8B\u5982 \"20%\"\uFF09\n */\n couponDiscount?: string\n\n /**\n * \u4F18\u60E0\u5238\u5355\u4F4D\u6587\u672C\n * @default \"Off\"\n */\n couponUnit?: string\n}\n\n/**\n * \u5956\u52B1\u65F6\u95F4\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n */\nexport interface PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n}\n\n/**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08WinnerModalConfig\uFF09\n *\n * \u7528\u4E8E\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u7684\u5C55\u793A\u5185\u5BB9\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n *\n * @example\n * ```tsx\n * const winnerModalConfig: WinnerModalConfig = {\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging for all your devices',\n * learnMoreUrl: 'https://...',\n * learnMoreText: 'View Details',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * couponUnit: 'Off',\n * confirmText: 'Claim Now'\n * }\n * ```\n */\nexport interface WinnerModalConfig extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"You Have Won\"\n * @optional\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u6807\u9898\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.name\uFF09\n * @optional\n */\n prizeTitle?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u56FE\u7247 URL\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.image\uFF09\n * @optional\n */\n prizeImage?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n * @optional\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u94FE\u63A5\n * @optional\n */\n learnMoreUrl?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u6309\u94AE\u6587\u672C\n * @default \"Learn More\"\n * @optional\n */\n learnMoreText?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"Okay, Got It\"\n * @optional\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5\uFF0C\u914D\u7F6E\u540E\u70B9\u51FB\u6309\u94AE\u5C06\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u6B64\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n}\n\n/**\n * Rules \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * rulesModalConfig={{\n * rulesData: [\n * { item: '$100 instead of $200, 10 tickets/day.' },\n * { item: '$100 for $120, 50 tickets/day.' }\n * ],\n * rulesText: 'Game Rules',\n * rulesTitle: 'Activity Rules'\n * }}\n * ```\n */\nexport interface RulesModalConfig {\n /**\n * \u89C4\u5219\u6570\u636E\u5217\u8868\n * @optional\n */\n rulesData?: Array<{\n /**\n * \u89C4\u5219\u9879\u5185\u5BB9\n */\n item: string\n }>\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Rules\"\n * @optional\n */\n rulesTitle?: string\n}\n\n/**\n * ProductLottery \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\n */\nexport interface ActionButtonConfig {\n /**\n * \u6309\u94AE\u6587\u672C\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n text?: string\n\n /**\n * \u8DF3\u8F6C\u94FE\u63A5\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n url?: string\n}\n\n/**\n * My Rewards \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * myRewardsModalConfig={{\n * rewardsData: [\n * {\n * id: '1',\n * name: 'Anker Charger',\n * code: 'ANKER2024',\n * status: 'Available',\n * prizeTime: '2024-01-01',\n * showCopyCode: true\n * }\n * ],\n * myRewardsText: 'My Prizes',\n * codeText: 'CODE:',\n * copyText: 'COPY',\n * prizeText: 'Prize time:',\n * emptyText: 'No rewards yet'\n * }}\n * ```\n */\nexport interface MyRewardsModalConfig extends CopyTextConfig, PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u6570\u636E\u5217\u8868\n * @optional\n */\n rewardsData?: Array<{\n /**\n * \u5956\u52B1 ID\n */\n id: string\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n /**\n * \u72B6\u6001\n */\n status: 'Available' | 'Expired' | 'Used'\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 status label \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /**\n * \u662F\u5426\u53EF\u7528\uFF08\u7528\u4E8E\u63A7\u5236\u989C\u8272\u548C\u590D\u5236\u6309\u94AE\u72B6\u6001\uFF09\n * @optional\n */\n available?: boolean\n }>\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsTitle?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n * @optional\n */\n codeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n emptyText?: string\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6587\u6848\n * @default \"Available\"\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6587\u6848\n * @default \"Expired\"\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u77E5\u72B6\u6001\u6587\u6848\n * @optional\n */\n notFoundText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n * @example\n * ```tsx\n * errorModalConfig={{\n * title: 'Oops!',\n * message: 'Something went wrong during the lottery process.',\n * confirmText: 'OK, I get'\n * }}\n * ```\n */\nexport interface ErrorModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Oops!\"\n * @optional\n */\n title?: string\n /**\n * \u9519\u8BEF\u6D88\u606F\u5185\u5BB9\n * @default \"Something went wrong during the lottery process.\"\n * @optional\n */\n message?: string\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"OK, I get\"\n * @optional\n */\n confirmText?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u5F39\u7A97\u6807\u9898\uFF08\u6765\u81EA CMS error.exchangeFailedTitle\uFF09 @optional */\n exchangeFailedTitle?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u9519\u8BEF\u6D88\u606F\uFF08\u6765\u81EA CMS error.exchangeFailedMessage\uFF09 @optional */\n exchangeFailedMessage?: string\n}\n\n/**\n * \u672A\u4E2D\u5956 / Try Again \u5F39\u7A97\u914D\u7F6E\uFF08\u6765\u81EA CMS tryAgain group\uFF09\n */\nexport interface TryAgainConfig {\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898 @optional */\n title?: string\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6D88\u606F\u5185\u5BB9 @optional */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u6848 @optional */\n confirmText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: error group\uFF09\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u7C7B\u578B\n */\nexport type SocialPlatform = 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'youtube'\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\n */\nexport interface SharePlatformConfig {\n /**\n * \u5E73\u53F0\u7C7B\u578B\n */\n platform: SocialPlatform\n\n /**\n * \u5E73\u53F0\u540D\u79F0\n */\n name: string\n\n /**\n * \u5206\u4EAB URL\uFF08\u53EF\u9009\uFF0C\u5982\u679C\u63D0\u4F9B\u5219\u76F4\u63A5\u8DF3\u8F6C\uFF09\n */\n url?: string\n\n /**\n * \u70B9\u51FB\u56DE\u8C03\uFF08\u5982\u679C\u63D0\u4F9B url \u5219\u6B64\u56DE\u8C03\u4F1A\u5728\u8DF3\u8F6C\u524D\u6267\u884C\uFF09\n */\n onClick?: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\n */\n disabled?: boolean\n}\n\n/**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n */\nexport interface ShareModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Share to Get More Chances\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898/\u5F15\u5BFC\u6587\u6848\n * @default \"Share to Play Again Keep Trying! You Could Still Win Big!\"\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u6848\n * @default \"Note: Maximum of 3 times per participant.\"\n */\n note?: string\n\n /**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\u5217\u8868\n */\n platforms?: SharePlatformConfig[]\n\n /**\n * \u5206\u4EAB\u6210\u529F\u56DE\u8C03\n */\n onShareSuccess?: (platform: SocialPlatform) => void\n}\n\n// ============================================================================\n// \u5B50\u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * PrizePool \u5956\u54C1\u6C60\u7EC4\u4EF6 Props\n */\nexport interface PrizePoolProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u5956\u54C1\u5217\u8868(\u901A\u5E38\u662F\u5168\u90E8 8 \u4E2A\u5956\u54C1)\n */\n prizes: Prize[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Prize Pool\"\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\n * \u652F\u6301\u53D8\u91CF\uFF1A{{name}} \u83B7\u5956\u8005\u6635\u79F0\uFF0C{{prize}} \u5956\u54C1\u540D\u79F0\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n}\n\n/** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F */\nexport type ChanceMechanismType = 'methods' | 'input'\n\n/** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\nexport interface ChanceInputConfig {\n /** \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C @default \"Enter your order number\" */\n placeholder?: string\n /** \u63D0\u4EA4\u6309\u94AE\u6587\u6848 @default \"Spin and Win\" */\n submitText?: string\n /** \u8F93\u5165\u503C\u63D0\u4EA4\u56DE\u8C03 */\n onSubmit?: (value: string) => void | Promise<void>\n /** \u662F\u5426\u6B63\u5728\u63D0\u4EA4 */\n isSubmitting?: boolean\n /** \u8F93\u5165\u6846\u7C7B\u578B @default \"text\" */\n inputType?: 'text' | 'email' | 'number'\n /** \u9A8C\u8BC1\u6B63\u5219 (\u53EF\u9009) */\n validationPattern?: string\n /** \u9A8C\u8BC1\u5931\u8D25\u63D0\u793A\u6587\u6848 */\n validationErrorText?: string\n /** \u8F93\u5165\u6846\u9ED8\u8BA4\u503C\uFF08\u5982\u767B\u5F55\u7528\u6237 email\uFF0C\u652F\u6301\u5F02\u6B65\u586B\u5145\uFF09 @optional */\n defaultValue?: string\n\n /** \u63A5\u5165\u65B9\u6309\u9700\u7981\u7528\u8F93\u5165\u6846\u5185\u5BB9\u66F4\u6539 */\n disabled?: boolean\n\n /** \u662F\u5426\u7981\u6B62\u6D4F\u89C8\u5668\u81EA\u52A8\u586B\u5145\uFF08\u5C24\u5176\u662F email \u81EA\u52A8\u586B\u5145\uFF09 */\n disableAutofill?: boolean\n\n /** \u534F\u8BAE\u544A\u77E5\u5BCC\u6587\u672C\uFF1B\u914D\u7F6E\u65F6\u624D\u5C55\u793A\u534F\u8BAE\u52FE\u9009 UI */\n agreementNotice?: string | SerializedEditorState<SerializedLexicalNode>\n\n /** \u534F\u8BAE\u672A\u52FE\u9009\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF1B\u914D\u7F6E\u534F\u8BAE\u540E\u70B9\u51FB\u63D0\u4EA4\u4F46\u672A\u52FE\u9009\u65F6\u5C55\u793A */\n agreementWarningText?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-type-name */\n submitTrackTypeName?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-title-desc-button */\n submitTrackTitleDescButton?: string\n}\n\n/**\n * ChanceMethods \u83B7\u53D6\u673A\u4F1A\u7EC4\u4EF6 Props\n */\nexport interface ChanceMethodsProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868\n */\n methods: ChanceMethod[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Want more chances to win?\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898(\u53EF\u9009)\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u672C(\u53EF\u9009)\n */\n footerNote?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u5FBD\u7AE0\u6587\u6848\n * @default \"Chance +1\"\n */\n chanceBadgeText?: string\n\n /**\n * \u5DF2\u5B8C\u6210\u72B6\u6001\u6587\u6848\n * @default \"Completed\"\n */\n completedText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n */\n usedText?: string\n\n /**\n * \u52A0\u8F7D\u4E2D\u6587\u6848\n * @default \"Loading...\"\n */\n loadingText?: string\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F @default 'methods' */\n mechanismType?: ChanceMechanismType\n /** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\n inputConfig?: ChanceInputConfig\n\n /** \u534F\u8BAE\u662F\u5426\u5DF2\u52FE\u9009\uFF08\u4F9B\u5916\u5C42\u7EDF\u4E00\u63A7\u5236\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\uFF09 */\n isAgreementChecked?: boolean\n\n /** \u534F\u8BAE\u52FE\u9009\u72B6\u6001\u53D8\u66F4\u56DE\u8C03 */\n onAgreementCheckedChange?: (checked: boolean) => void\n\n /** \u5916\u5C42\u6CE8\u5165\u7684\u534F\u8BAE\u63D0\u793A\u6587\u6848\uFF08\u7528\u4E8E\u7EDF\u4E00\u62E6\u622A\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\u65F6\u5C55\u793A\u5728\u6309\u94AE\u4E0B\u65B9\uFF09 */\n agreementErrorText?: string\n}\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6 Props\n */\nexport interface WinnerModalProps extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u4FE1\u606F\n */\n prize: Prize | null\n\n /**\n * \u5F39\u7A97\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"You Have Won\"\uFF09\n */\n title?: string\n\n /**\n * \u5956\u54C1\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.name\uFF09\n */\n prizeTitle?: string\n\n /**\n * \u5956\u54C1\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.image\uFF09\n */\n prizeImage?: string\n\n /**\n * \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * Learn More \u94FE\u63A5\uFF08\u53EF\u9009\uFF09\n */\n learnMoreUrl?: string\n\n /**\n * Learn More \u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Learn More\"\uFF09\n */\n learnMoreText?: string\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Okay, Got It\"\uFF09\n */\n confirmText?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n */\n onConfirm?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF083\u79CD\uFF09\n * @note \u7236\u7EC4\u4EF6\u9700\u8981\u8986\u76D6 onClick \u56DE\u8C03\u4EE5\u5B9E\u73B0\u5177\u4F53\u4E1A\u52A1\u903B\u8F91\n */\nexport const DEFAULT_CHANCE_METHODS: ChanceMethod[] = [\n {\n methodKey: 'default-share',\n type: 'share',\n title: 'Share on your socials',\n description: 'Share this event on your social media',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-points',\n type: 'points',\n title: 'Spend 100 points',\n description: 'Use your reward points to get a chance',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-refer',\n type: 'refer',\n title: 'Refer a friend',\n description: 'Invite your friends to join',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n]\n\n// ============================================================================\n// \u7C7B\u578B\u5B88\u536B\n// ============================================================================\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 Prize \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 Prize\n */\nexport function isPrize(value: unknown): value is Prize {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'prizeKey' in value &&\n 'name' in value &&\n 'image' in value &&\n typeof (value as Prize).prizeKey === 'string' &&\n typeof (value as Prize).name === 'string' &&\n typeof (value as Prize).image === 'object'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod\n */\nexport function isChanceMethod(value: unknown): value is ChanceMethod {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'methodKey' in value &&\n 'type' in value &&\n 'title' in value &&\n 'description' in value &&\n 'onClick' in value &&\n typeof (value as ChanceMethod).methodKey === 'string' &&\n typeof (value as ChanceMethod).type === 'string' &&\n typeof (value as ChanceMethod).title === 'string' &&\n typeof (value as ChanceMethod).description === 'string' &&\n typeof (value as ChanceMethod).onClick === 'function'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo\n */\nexport function isWinningInfo(value: unknown): value is WinningInfo {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'winningKey' in value &&\n 'userName' in value &&\n 'prizeName' in value &&\n typeof (value as WinningInfo).winningKey === 'string' &&\n typeof (value as WinningInfo).userName === 'string' &&\n typeof (value as WinningInfo).prizeName === 'string'\n )\n}\n\n// ============================================================================\n// \u5BFC\u51FA\u7C7B\u578B\u522B\u540D\uFF08\u7528\u4E8E\u7B80\u5316\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u62BD\u5956\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnSpinEndCallback = (prize: Prize) => void\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u70B9\u51FB\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnChanceMethodClick = () => void\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,mBAAAC,EAAA,YAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAN,GAkgCO,MAAME,EAAyC,CACpD,CACE,UAAW,gBACX,KAAM,QACN,MAAO,wBACP,YAAa,wCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,iBACX,KAAM,SACN,MAAO,mBACP,YAAa,yCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,gBACX,KAAM,QACN,MAAO,iBACP,YAAa,8BACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,CACF,EAWO,SAASE,EAAQG,EAAgC,CACtD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,aAAcA,GACd,SAAUA,GACV,UAAWA,GACX,OAAQA,EAAgB,UAAa,UACrC,OAAQA,EAAgB,MAAS,UACjC,OAAQA,EAAgB,OAAU,QAEtC,CAOO,SAASJ,EAAeI,EAAuC,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,SAAUA,GACV,UAAWA,GACX,gBAAiBA,GACjB,YAAaA,GACb,OAAQA,EAAuB,WAAc,UAC7C,OAAQA,EAAuB,MAAS,UACxC,OAAQA,EAAuB,OAAU,UACzC,OAAQA,EAAuB,aAAgB,UAC/C,OAAQA,EAAuB,SAAY,UAE/C,CAOO,SAASF,EAAcE,EAAsC,CAClE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,aAAcA,GACd,cAAeA,GACf,OAAQA,EAAsB,YAAe,UAC7C,OAAQA,EAAsB,UAAa,UAC3C,OAAQA,EAAsB,WAAc,QAEhD",
4
+ "sourcesContent": ["/**\n * \u62BD\u5956\u7EC4\u4EF6\u5171\u4EAB\u7C7B\u578B\u5B9A\u4E49\n *\n * \u5305\u542B\u6240\u6709\u62BD\u5956\u7EC4\u4EF6\uFF08WheelLottery, ProductLottery \u7B49\uFF09\u5171\u7528\u7684\u7C7B\u578B\u3001\u63A5\u53E3\u548C\u5E38\u91CF\u3002\n *\n * @module LotterySharedTypes\n * @date 2026-04-07\n */\n\nimport type { Theme, Img } from '../../types/props.js'\nimport type { SerializedEditorState, SerializedLexicalNode } from '@payloadcms/richtext-lexical/lexical'\n\n// Re-export Theme and Img for convenience\nexport type { Theme, Img }\n\n// ============================================================================\n// \u6838\u5FC3\u5B9E\u4F53\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u5956\u54C1\uFF08Prize\uFF09\n *\n * \u4EE3\u8868\u62BD\u5956\u6D3B\u52A8\u4E2D\u7684\u4E00\u4E2A\u5956\u54C1\uFF0C\u5305\u542B\u663E\u793A\u6240\u9700\u7684\u6240\u6709\u4FE1\u606F\u3002\n *\n * @example\n * ```tsx\n * const prize: Prize = {\n * prizeKey: 'prize-001',\n * name: 'Anker Prime Charger (100W, 3 Ports, GaN)',\n * image: { url: 'https://images.unsplash.com/photo-123', alt: 'Charger' },\n * rank: '1st',\n * price: '$79.99'\n * }\n * ```\n */\nexport interface Prize {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\uFF0C\u7528\u4E8E React key \u548C\u4E2D\u5956\u7ED3\u679C\u5339\u914D\n */\n prizeKey: string\n\n /**\n * \u5956\u54C1\u540D\u79F0\uFF0C\u663E\u793A\u5728\u8F6C\u76D8\u548C\u5956\u6C60\u4E2D\n * @maxLength 100\n */\n name: string\n\n /**\n * \u5956\u54C1\u56FE\u7247\u5BF9\u8C61\uFF0C\u5305\u542B url \u548C alt\n */\n image: Img\n\n /**\n * \u6392\u540D\u6807\u8BC6\uFF0C\u4EC5\u5728 Prize Pool \u4E2D\u663E\u793A\n * @optional\n */\n rank?: '1st' | '2nd' | '3rd'\n\n /**\n * \u4EF7\u683C\u6216\u6298\u6263\u4FE1\u606F\uFF0C\u663E\u793A\u5728\u5956\u6C60\u4E2D\n * @example \"$99.99\" | \"12% Off\"\n * @optional\n */\n price?: string\n\n /** \u5956\u54C1\u7EF4\u5EA6\u7684\u4E2D\u5956\u5F39\u7A97\u8986\u76D6\u914D\u7F6E\uFF1B\u672A\u914D\u7F6E\u65F6\u7531\u63A5\u5165\u5C42\u56DE\u9000\u5230\u5168\u5C40\u914D\u7F6E */\n winnerModalConfig?: {\n winnerNote?: string\n confirmText?: string\n confirmUrl?: string\n learnMoreUrl?: string\n learnMoreText?: string\n }\n}\n\n/**\n * \u4E2D\u5956\u4FE1\u606F\uFF08WinningInfo\uFF09\n *\n * \u4EE3\u8868\u4E00\u6761\u4E2D\u5956\u8BB0\u5F55\uFF0C\u7528\u4E8E\u5E95\u90E8\u6EDA\u52A8\u6761\u5C55\u793A\uFF0C\u8425\u9020\u6D3B\u52A8\u6C1B\u56F4\u3002\n *\n * @example\n * ```tsx\n * const winningInfo: WinningInfo = {\n * winningKey: 'win-001',\n * userName: 'Shuqi***',\n * prizeName: '12% Off Discount',\n * timestamp: 1702800000000\n * }\n * ```\n */\nexport interface WinningInfo {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n winningKey: string\n\n /**\n * \u7528\u6237\u540D\uFF08\u5DF2\u8131\u654F\uFF09\uFF0C\u5982 \"Shuqi***\"\n * @note \u5047\u8BBE\u4F20\u5165\u7684\u7528\u6237\u540D\u5DF2\u7ECF\u8FC7\u8131\u654F\u5904\u7406\uFF0C\u7EC4\u4EF6\u5185\u90E8\u4E0D\u518D\u5904\u7406\n */\n userName: string\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u540D\u79F0\n */\n prizeName: string\n\n /**\n * \u4E2D\u5956\u65F6\u95F4\u6233\uFF08\u6BEB\u79D2\uFF09\n * @optional\n */\n timestamp?: number\n}\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7C7B\u578B\n */\nexport type ChanceMethodType = 'share' | 'points' | 'refer' | string\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u72B6\u6001\n */\nexport type ChanceMethodStatus = 'pending' | 'completed' | 'used'\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF08ChanceMethod\uFF09\n *\n * \u4EE3\u8868\u4E00\u79CD\u83B7\u53D6\u62BD\u5956\u673A\u4F1A\u7684\u65B9\u5F0F\uFF0C\u652F\u6301\u7075\u6D3B\u914D\u7F6E\uFF08\u5206\u4EAB\u3001\u79EF\u5206\u3001\u63A8\u8350\u7B49\uFF09\u3002\n *\n * @example\n * ```tsx\n * const chanceMethod: ChanceMethod = {\n * methodKey: 'share-001',\n * type: 'share',\n * title: 'Share on your socials',\n * description: 'Share this event on your social media',\n * buttonText: 'Redeem now',\n * onClick: () => console.log('Share clicked'),\n * disabled: false,\n * status: 'pending'\n * }\n * ```\n */\nexport interface ChanceMethod {\n /**\n * \u552F\u4E00\u6807\u8BC6\u7B26\n */\n methodKey: string\n\n /**\n * \u65B9\u5F0F\u7C7B\u578B\uFF0C\u652F\u6301\u9884\u5B9A\u4E49\u7C7B\u578B\uFF08'share', 'points', 'refer'\uFF09\u6216\u81EA\u5B9A\u4E49\u7C7B\u578B\n */\n type: ChanceMethodType\n\n /**\n * \u65B9\u5F0F\u6807\u9898\uFF0C\u5982 \"Share on your socials\"\n */\n title: string\n\n /**\n * \u8BE6\u7EC6\u8BF4\u660E\u6587\u5B57\n */\n description: string\n\n /**\n * \u6309\u94AE\u6587\u6848\uFF0C\u9ED8\u8BA4 \"Redeem now\"\n * @default \"Redeem now\"\n * @optional\n */\n buttonText?: string\n\n completed?: string\n\n used?: string\n\n /**\n * \u672A\u767B\u5F55\u65F6\u70B9\u51FB GO \u6309\u94AE\u7684\u56DE\u8C03\n * @example\n * ```tsx\n * onLoginRequired={() => {\n * // \u6253\u5F00\u767B\u5F55\u5F39\u7A97\u6216\u8DF3\u8F6C\u767B\u5F55\u9875\n * router.push('/login')\n * }}\n * ```\n */\n onLoginRequired?: () => void\n\n /**\n * \u70B9\u51FB\u6309\u94AE\u65F6\u7684\u56DE\u8C03\u51FD\u6570\n * @note \u4E1A\u52A1\u903B\u8F91\uFF08\u5982\u79EF\u5206\u6263\u9664\u3001\u5206\u4EAB\u9A8C\u8BC1\uFF09\u7531\u7236\u7EC4\u4EF6\u5904\u7406\n */\n onClick: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\u8BE5\u65B9\u5F0F\n * @default false\n * @optional\n */\n disabled?: boolean\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u7684\u72B6\u6001\n * - pending: \u672A\u5B8C\u6210\uFF08\u9ED8\u8BA4\u72B6\u6001\uFF09\n * - completed: \u5DF2\u5B8C\u6210/\u5DF2\u83B7\u5F97\n * - used: \u5DF2\u4F7F\u7528\n * @default \"pending\"\n * @optional\n */\n status?: ChanceMethodStatus\n\n /**\n * \u662F\u5426\u663E\u793A\u52A0\u8F7D\u72B6\u6001\n * @default false\n * @optional\n */\n loading?: boolean\n\n /**\n * \u662F\u5426\u5728\u70B9\u51FB\u65F6\u6253\u5F00\u5206\u4EAB\u5F39\u7A97\n * @default false\n * @optional\n */\n openShareModal?: boolean\n}\n\n/**\n * \u7528\u6237\u6570\u636E\uFF08UserData\uFF09\n *\n * \u4EE3\u8868\u5F53\u524D\u7528\u6237\u7684\u62BD\u5956\u76F8\u5173\u6570\u636E\n *\n * @example\n * ```tsx\n * const userData: UserData = {\n * isLoggedIn: true,\n * availableChances: 3,\n * wonPrizes: [\n * { id: 'prize-001', name: 'Charger', image: 'https://...', timestamp: 1702800000000 }\n * ]\n * }\n * ```\n */\nexport interface UserData {\n /**\n * \u7528\u6237\u662F\u5426\u5DF2\u767B\u5F55\n */\n isLoggedIn: boolean\n\n /**\n * \u5F53\u524D\u53EF\u4F7F\u7528\u7684\u62BD\u5956\u6B21\u6570\n * @default 0\n */\n availableChances: number\n\n /**\n * \u603B\u673A\u4F1A\u6570\uFF08\u7528\u4E8E\u663E\u793A\u8FDB\u5EA6\uFF0C\u4F8B\u5982 \"3/5\"\uFF09\n * @default undefined\n * @optional\n */\n totalChances?: number\n\n /**\n * \u5DF2\u83B7\u5F97\u7684\u5956\u54C1\u5217\u8868\n * @optional\n */\n wonPrizes?: Array<Prize & { timestamp?: number }>\n\n /** * \u7528\u6237\u7535\u5B50\u90AE\u7BB1\uFF08\u53EF\u9009\uFF0C\u7528\u4E8E\u53D1\u9001\u4E2D\u5956\u901A\u77E5\u7B49\uFF09\n * @optional\n */\n email?: string\n\n /**\n * \u673A\u4F1A\u6570\u636E\u662F\u5426\u6B63\u5728\u52A0\u8F7D\u4E2D\n * @optional\n */\n isChancesLoading?: boolean\n}\n\n/**\n * \u7F13\u52A8\u51FD\u6570\u7C7B\u578B\n */\nexport type EasingFunction = 'ease-out' | 'ease-in-out' | 'linear'\n\n// ============================================================================\n// \u516C\u5171\u6587\u6848\u914D\u7F6E\u7C7B\u578B\n// ============================================================================\n\n/**\n * \u590D\u5236\u64CD\u4F5C\u76F8\u5173\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5305\u542B\u590D\u5236\u529F\u80FD\u7684\u7EC4\u4EF6\n */\nexport interface CopyTextConfig {\n /**\n * \u590D\u5236\u6309\u94AE\u6587\u672C\n * @default \"COPY\"\n */\n copyText?: string\n\n /**\n * \u590D\u5236\u6210\u529F\u540E\u7684\u6309\u94AE\u6587\u672C\n * @default \"COPIED\"\n */\n copiedText?: string\n}\n\n/**\n * \u4F18\u60E0\u7801\u76F8\u5173\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n * \u7528\u4E8E\u6240\u6709\u5C55\u793A\u4F18\u60E0\u7801\u7684\u7EC4\u4EF6\n */\nexport interface CouponConfig {\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n */\n codeText?: string\n\n /**\n * \u4F18\u60E0\u7801\n */\n couponCode?: string\n\n /**\n * \u4F18\u60E0\u7801\u8FC7\u671F\u65F6\u95F4\n */\n expiresAt?: string\n\n /**\n * \u6709\u6548\u671F\u6807\u7B7E\u6587\u6848\n * @default \"Valid until:\"\n */\n expiresAtLabel?: string\n\n /**\n * \u4F18\u60E0\u5238\u6298\u6263\u6587\u672C\uFF08\u4F8B\u5982 \"20%\"\uFF09\n */\n couponDiscount?: string\n\n /**\n * \u4F18\u60E0\u5238\u5355\u4F4D\u6587\u672C\n * @default \"Off\"\n */\n couponUnit?: string\n}\n\n/**\n * \u5956\u52B1\u65F6\u95F4\u6587\u6848\u914D\u7F6E\uFF08\u516C\u5171\u7C7B\u578B\uFF09\n */\nexport interface PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u65F6\u95F4\u6587\u672C\u524D\u7F00\n * @default \"Prize time:\"\n */\n prizeText?: string\n}\n\n/**\n * \u4E2D\u5956\u5F39\u7A97\u914D\u7F6E\uFF08WinnerModalConfig\uFF09\n *\n * \u7528\u4E8E\u914D\u7F6E\u4E2D\u5956\u5F39\u7A97\u7684\u5C55\u793A\u5185\u5BB9\uFF0C\u901A\u5E38\u7531\u62BD\u5956\u63A5\u53E3\u8FD4\u56DE\u63D0\u4F9B\n *\n * @example\n * ```tsx\n * const winnerModalConfig: WinnerModalConfig = {\n * title: 'Congratulations!',\n * prizeTitle: 'Anker Prime Charger',\n * prizeImage: 'https://...',\n * prizeDescription: 'High-speed charging for all your devices',\n * learnMoreUrl: 'https://...',\n * learnMoreText: 'View Details',\n * couponCode: 'ANKER2024',\n * expiresAt: '2024-12-31',\n * couponDiscount: '20%',\n * couponUnit: 'Off',\n * confirmText: 'Claim Now'\n * }\n * ```\n */\nexport interface WinnerModalConfig extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u4E2D\u5956\u5F39\u7A97\u6807\u9898\n * @default \"You Have Won\"\n * @optional\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u6807\u9898\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.name\uFF09\n * @optional\n */\n prizeTitle?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u56FE\u7247 URL\uFF08\u4F18\u5148\u7EA7\u9AD8\u4E8E prize.image\uFF09\n * @optional\n */\n prizeImage?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n * @optional\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u94FE\u63A5\n * @optional\n */\n learnMoreUrl?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97 Learn More \u6309\u94AE\u6587\u672C\n * @default \"Learn More\"\n * @optional\n */\n learnMoreText?: string\n\n /**\n * \u4E2D\u5956\u5F39\u7A97\u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"Okay, Got It\"\n * @optional\n */\n confirmText?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5\uFF0C\u914D\u7F6E\u540E\u70B9\u51FB\u6309\u94AE\u5C06\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00\u6B64\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n}\n\n/**\n * Rules \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * rulesModalConfig={{\n * rulesData: [\n * { item: '$100 instead of $200, 10 tickets/day.' },\n * { item: '$100 for $120, 50 tickets/day.' }\n * ],\n * rulesText: 'Game Rules',\n * rulesTitle: 'Activity Rules'\n * }}\n * ```\n */\nexport interface RulesModalConfig {\n /**\n * \u89C4\u5219\u6570\u636E\u5217\u8868\n * @optional\n */\n rulesData?: Array<{\n /**\n * \u89C4\u5219\u9879\u5185\u5BB9\n */\n item: string\n }>\n\n /**\n * Rules \u6309\u94AE\u6587\u672C\n * @default \"Rules\"\n * @optional\n */\n rulesText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Rules\"\n * @optional\n */\n rulesTitle?: string\n}\n\n/**\n * ProductLottery \u9876\u680F\u53F3\u4FA7\u8DF3\u8F6C\u6309\u94AE\u914D\u7F6E\n */\nexport interface ActionButtonConfig {\n /**\n * \u6309\u94AE\u6587\u672C\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n text?: string\n\n /**\n * \u8DF3\u8F6C\u94FE\u63A5\uFF1B\u4E3A\u7A7A\u65F6\u4E0D\u5C55\u793A\n */\n url?: string\n}\n\n/**\n * My Rewards \u5F39\u7A97\u914D\u7F6E\n *\n * @example\n * ```tsx\n * myRewardsModalConfig={{\n * rewardsData: [\n * {\n * id: '1',\n * name: 'Anker Charger',\n * code: 'ANKER2024',\n * status: 'Available',\n * prizeTime: '2024-01-01',\n * showCopyCode: true\n * }\n * ],\n * myRewardsText: 'My Prizes',\n * codeText: 'CODE:',\n * copyText: 'COPY',\n * prizeText: 'Prize time:',\n * emptyText: 'No rewards yet'\n * }}\n * ```\n */\nexport interface MyRewardsModalConfig extends CopyTextConfig, PrizeTimeTextConfig {\n /**\n * \u5956\u52B1\u6570\u636E\u5217\u8868\n * @optional\n */\n rewardsData?: Array<{\n /**\n * \u5956\u52B1 ID\n */\n id: string\n /**\n * \u5956\u52B1\u540D\u79F0\n */\n name: string\n /**\n * \u4F18\u60E0\u7801\uFF08\u53EF\u9009\uFF09\n */\n code?: string\n /**\n * \u72B6\u6001\n */\n status: 'Available' | 'Expired' | 'Used'\n /**\n * \u5956\u52B1\u65F6\u95F4\n */\n prizeTime?: string\n /**\n * \u662F\u5426\u53EF\u590D\u5236\u7801\n */\n showCopyCode?: boolean\n /**\n * \u6BCF\u5956\u52B1\u53EF\u914D\u7F6E\u7684\u663E\u793A\u6587\u6848\uFF08\u8986\u76D6\u5168\u5C40 status label \u6620\u5C04\uFF09\n * @optional\n */\n statusText?: string\n\n /**\n * \u662F\u5426\u53EF\u7528\uFF08\u7528\u4E8E\u63A7\u5236\u989C\u8272\u548C\u590D\u5236\u6309\u94AE\u72B6\u6001\uFF09\n * @optional\n */\n available?: boolean\n }>\n\n /**\n * My Rewards \u6309\u94AE\u6587\u672C\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsText?: string\n\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"My Rewards\"\n * @optional\n */\n myRewardsTitle?: string\n\n /**\n * \u4EE3\u7801\u6587\u672C\u524D\u7F00\n * @default \"CODE:\"\n * @optional\n */\n codeText?: string\n\n /**\n * \u7A7A\u72B6\u6001\u63D0\u793A\u6587\u672C\n * @default \"No rewards yet\"\n * @optional\n */\n emptyText?: string\n\n /**\n * \u590D\u5236\u5931\u8D25\u63D0\u793A\u6587\u6848\n * @optional\n */\n copyError?: string\n\n /**\n * \u53EF\u7528\u72B6\u6001\u6587\u6848\n * @default \"Available\"\n * @optional\n */\n availableText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n * @optional\n */\n usedStatusText?: string\n\n /**\n * \u5DF2\u8FC7\u671F\u72B6\u6001\u6587\u6848\n * @default \"Expired\"\n * @optional\n */\n expiredText?: string\n\n /**\n * \u672A\u77E5\u72B6\u6001\u6587\u6848\n * @optional\n */\n notFoundText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\n * @example\n * ```tsx\n * errorModalConfig={{\n * title: 'Oops!',\n * message: 'Something went wrong during the lottery process.',\n * confirmText: 'OK, I get'\n * }}\n * ```\n */\nexport interface ErrorModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Oops!\"\n * @optional\n */\n title?: string\n /**\n * \u9519\u8BEF\u6D88\u606F\u5185\u5BB9\n * @default \"Something went wrong during the lottery process.\"\n * @optional\n */\n message?: string\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\n * @default \"OK, I get\"\n * @optional\n */\n confirmText?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u5F39\u7A97\u6807\u9898\uFF08\u6765\u81EA CMS error.exchangeFailedTitle\uFF09 @optional */\n exchangeFailedTitle?: string\n /** \u5151\u6362\u5931\u8D25\u65F6\u663E\u793A\u7684\u9519\u8BEF\u6D88\u606F\uFF08\u6765\u81EA CMS error.exchangeFailedMessage\uFF09 @optional */\n exchangeFailedMessage?: string\n}\n\n/**\n * \u672A\u4E2D\u5956 / Try Again \u5F39\u7A97\u914D\u7F6E\uFF08\u6765\u81EA CMS tryAgain group\uFF09\n */\nexport interface TryAgainConfig {\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6807\u9898 @optional */\n title?: string\n /** \u672A\u4E2D\u5956\u5F39\u7A97\u6D88\u606F\u5185\u5BB9 @optional */\n message?: string\n /** \u786E\u8BA4\u6309\u94AE\u6587\u6848 @optional */\n confirmText?: string\n}\n\n/**\n * \u9519\u8BEF\u5F39\u7A97\u914D\u7F6E\uFF08CMS: error group\uFF09\n */\nexport interface ErrorConfig {\n title?: string\n defaultMessage?: string\n confirmButton?: string\n exchangeFailedTitle?: string\n exchangeFailedMessage?: string\n}\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u7C7B\u578B\n */\nexport type SocialPlatform = 'facebook' | 'twitter' | 'instagram' | 'linkedin' | 'tiktok' | 'youtube'\n\n/**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\n */\nexport interface SharePlatformConfig {\n /**\n * \u5E73\u53F0\u7C7B\u578B\n */\n platform: SocialPlatform\n\n /**\n * \u5E73\u53F0\u540D\u79F0\n */\n name: string\n\n /**\n * \u5206\u4EAB URL\uFF08\u53EF\u9009\uFF0C\u5982\u679C\u63D0\u4F9B\u5219\u76F4\u63A5\u8DF3\u8F6C\uFF09\n */\n url?: string\n\n /**\n * \u70B9\u51FB\u56DE\u8C03\uFF08\u5982\u679C\u63D0\u4F9B url \u5219\u6B64\u56DE\u8C03\u4F1A\u5728\u8DF3\u8F6C\u524D\u6267\u884C\uFF09\n */\n onClick?: () => void\n\n /**\n * \u662F\u5426\u7981\u7528\n */\n disabled?: boolean\n}\n\n/**\n * \u5206\u4EAB\u5F39\u7A97\u914D\u7F6E\n */\nexport interface ShareModalConfig {\n /**\n * \u5F39\u7A97\u6807\u9898\n * @default \"Share to Get More Chances\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898/\u5F15\u5BFC\u6587\u6848\n * @default \"Share to Play Again Keep Trying! You Could Still Win Big!\"\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u6848\n * @default \"Note: Maximum of 3 times per participant.\"\n */\n note?: string\n\n /**\n * \u793E\u4EA4\u5E73\u53F0\u914D\u7F6E\u5217\u8868\n */\n platforms?: SharePlatformConfig[]\n\n /**\n * \u5206\u4EAB\u6210\u529F\u56DE\u8C03\n */\n onShareSuccess?: (platform: SocialPlatform) => void\n}\n\n// ============================================================================\n// \u5B50\u7EC4\u4EF6 Props \u63A5\u53E3\n// ============================================================================\n\n/**\n * PrizePool \u5956\u54C1\u6C60\u7EC4\u4EF6 Props\n */\nexport interface PrizePoolProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u5956\u54C1\u5217\u8868(\u901A\u5E38\u662F\u5168\u90E8 8 \u4E2A\u5956\u54C1)\n */\n prizes: Prize[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Prize Pool\"\n */\n title?: string\n\n /**\n * \u4E2D\u5956\u4EBA\u540D\u5355\u6570\u636E\n * @optional\n */\n winningInfos?: WinningInfo[]\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /**\n * \u4E2D\u5956\u6EDA\u52A8 Ticker \u6587\u6848\u6A21\u677F\n * \u652F\u6301\u53D8\u91CF\uFF1A{{name}} \u83B7\u5956\u8005\u6635\u79F0\uFF0C{{prize}} \u5956\u54C1\u540D\u79F0\n * @default \"{{name}} just won {{prize}}!\"\n * @optional\n */\n winnerNameTemplate?: string\n}\n\n/** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F */\nexport type ChanceMechanismType = 'methods' | 'input'\n\n/** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\nexport interface ChanceInputConfig {\n /** \u8F93\u5165\u6846\u5360\u4F4D\u6587\u672C @default \"Enter your order number\" */\n placeholder?: string\n /** \u63D0\u4EA4\u6309\u94AE\u6587\u6848 @default \"Spin and Win\" */\n submitText?: string\n /** \u8F93\u5165\u503C\u63D0\u4EA4\u56DE\u8C03 */\n onSubmit?: (value: string) => void | Promise<void>\n /** \u662F\u5426\u6B63\u5728\u63D0\u4EA4 */\n isSubmitting?: boolean\n /** \u63D0\u4EA4\u4E2D\u7684 loading \u6309\u94AE\u6587\u6848 @default \"Loading...\" */\n loadingText?: string\n /** \u8F93\u5165\u6846\u7C7B\u578B @default \"text\" */\n inputType?: 'text' | 'email' | 'number'\n /** \u9A8C\u8BC1\u6B63\u5219 (\u53EF\u9009) */\n validationPattern?: string\n /** \u9A8C\u8BC1\u5931\u8D25\u63D0\u793A\u6587\u6848 */\n validationErrorText?: string\n /** \u8F93\u5165\u6846\u9ED8\u8BA4\u503C\uFF08\u5982\u767B\u5F55\u7528\u6237 email\uFF0C\u652F\u6301\u5F02\u6B65\u586B\u5145\uFF09 @optional */\n defaultValue?: string\n\n /** \u63A5\u5165\u65B9\u6309\u9700\u7981\u7528\u8F93\u5165\u6846\u5185\u5BB9\u66F4\u6539 */\n disabled?: boolean\n\n /** \u662F\u5426\u7981\u6B62\u6D4F\u89C8\u5668\u81EA\u52A8\u586B\u5145\uFF08\u5C24\u5176\u662F email \u81EA\u52A8\u586B\u5145\uFF09 */\n disableAutofill?: boolean\n\n /** \u534F\u8BAE\u544A\u77E5\u5BCC\u6587\u672C\uFF1B\u914D\u7F6E\u65F6\u624D\u5C55\u793A\u534F\u8BAE\u52FE\u9009 UI */\n agreementNotice?: string | SerializedEditorState<SerializedLexicalNode>\n\n /** \u534F\u8BAE\u672A\u52FE\u9009\u65F6\u7684\u63D0\u793A\u6587\u6848\uFF1B\u914D\u7F6E\u534F\u8BAE\u540E\u70B9\u51FB\u63D0\u4EA4\u4F46\u672A\u52FE\u9009\u65F6\u5C55\u793A */\n agreementWarningText?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-type-name */\n submitTrackTypeName?: string\n\n /** \u8F93\u5165\u6A21\u5F0F\u63D0\u4EA4\u6309\u94AE\u70B9\u51FB\u57CB\u70B9\uFF1Adata-headless-title-desc-button */\n submitTrackTitleDescButton?: string\n}\n\n/**\n * ChanceMethods \u83B7\u53D6\u673A\u4F1A\u7EC4\u4EF6 Props\n */\nexport interface ChanceMethodsProps {\n /**\n * \u4E3B\u9898\u6A21\u5F0F\n * @optional\n */\n theme?: Theme\n\n /**\n * \u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\u5217\u8868\n */\n methods: ChanceMethod[]\n\n /**\n * \u6807\u9898\u6587\u672C\n * @default \"Want more chances to win?\"\n */\n title?: string\n\n /**\n * \u526F\u6807\u9898(\u53EF\u9009)\n */\n subtitle?: string\n\n /**\n * \u5E95\u90E8\u63D0\u793A\u6587\u672C(\u53EF\u9009)\n */\n footerNote?: string\n\n /**\n * \u767B\u5F55\u7528\u6237\u6570\u636E\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n userData?: UserData\n\n /**\n * \u6253\u5F00\u5206\u4EAB\u5F39\u7A97\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n * @optional\n */\n onOpenShareModal?: () => void\n\n /**\n * \u5FBD\u7AE0\u6587\u6848\n * @default \"Chance +1\"\n */\n chanceBadgeText?: string\n\n /**\n * \u5DF2\u5B8C\u6210\u72B6\u6001\u6587\u6848\n * @default \"Completed\"\n */\n completedText?: string\n\n /**\n * \u5DF2\u4F7F\u7528\u72B6\u6001\u6587\u6848\n * @default \"Used\"\n */\n usedText?: string\n\n /**\n * \u52A0\u8F7D\u4E2D\u6587\u6848\n * @default \"Loading...\"\n */\n loadingText?: string\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n\n /** \u6D3B\u52A8\u673A\u5236\u6A21\u5F0F @default 'methods' */\n mechanismType?: ChanceMechanismType\n /** \u8F93\u5165\u6846\u914D\u7F6E\uFF08\u4EC5 mechanismType='input' \u65F6\u4F7F\u7528\uFF09 */\n inputConfig?: ChanceInputConfig\n\n /** \u534F\u8BAE\u662F\u5426\u5DF2\u52FE\u9009\uFF08\u4F9B\u5916\u5C42\u7EDF\u4E00\u63A7\u5236\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\uFF09 */\n isAgreementChecked?: boolean\n\n /** \u534F\u8BAE\u52FE\u9009\u72B6\u6001\u53D8\u66F4\u56DE\u8C03 */\n onAgreementCheckedChange?: (checked: boolean) => void\n\n /** \u5916\u5C42\u6CE8\u5165\u7684\u534F\u8BAE\u63D0\u793A\u6587\u6848\uFF08\u7528\u4E8E\u7EDF\u4E00\u62E6\u622A\u5DE6\u53F3\u4E24\u4FA7\u62BD\u5956\u5165\u53E3\u65F6\u5C55\u793A\u5728\u6309\u94AE\u4E0B\u65B9\uFF09 */\n agreementErrorText?: string\n}\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6 Props\n */\nexport interface WinnerModalProps extends CopyTextConfig, CouponConfig, PrizeTimeTextConfig {\n /**\n * \u662F\u5426\u663E\u793A\u5F39\u7A97\n */\n isOpen: boolean\n\n /**\n * \u4E2D\u5956\u5956\u54C1\u4FE1\u606F\n */\n prize: Prize | null\n\n /**\n * \u5F39\u7A97\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"You Have Won\"\uFF09\n */\n title?: string\n\n /**\n * \u5956\u54C1\u6807\u9898\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.name\uFF09\n */\n prizeTitle?: string\n\n /**\n * \u5956\u54C1\u56FE\u7247 URL\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4\u4F7F\u7528 prize.image\uFF09\n */\n prizeImage?: string\n\n /**\n * \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08\u53EF\u9009\uFF09\n * @deprecated \u8BED\u4E49\u4E0D\u660E\u786E\uFF0C\u8BF7\u6539\u7528 `winnerNote`\uFF08code/copy \u4E0B\u65B9\u4E13\u7528\u8BF4\u660E\u6587\u5B57\uFF09\n */\n prizeDescription?: string\n\n /**\n * code/copy \u533A\u57DF\u6B63\u4E0B\u65B9\u7684\u4E13\u7528\u8BF4\u660E\u6587\u5B57\u3002\n * \u4EC5\u5728\u660E\u786E\u914D\u7F6E\u65F6\u5C55\u793A\uFF1B\u672A\u914D\u7F6E\u65F6\u4E0D\u6E32\u67D3\u4EFB\u4F55\u5185\u5BB9\u3002\n * \u4F18\u5148\u7EA7\u9AD8\u4E8E `prizeDescription`\u3002\n * @optional\n */\n winnerNote?: string\n\n /**\n * Learn More \u94FE\u63A5\uFF08\u53EF\u9009\uFF09\n */\n learnMoreUrl?: string\n\n /**\n * Learn More \u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Learn More\"\uFF09\n */\n learnMoreText?: string\n\n /**\n * \u590D\u5236\u7801\u70B9\u51FB\u56DE\u8C03\n */\n onCopyCode?: (code: string) => void\n\n /**\n * \u5173\u95ED\u5F39\u7A97\u56DE\u8C03\n */\n onClose: () => void\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u672C\uFF08\u53EF\u9009\uFF0C\u9ED8\u8BA4 \"Okay, Got It\"\uFF09\n */\n confirmText?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u6587\u6848\u522B\u540D\uFF08\u6765\u81EA CMS winningInfos.confirmButton\uFF0C\u7B49\u540C\u4E8E confirmText\uFF09\n * \u5F53\u540C\u65F6\u63D0\u4F9B\u65F6\uFF0CconfirmButton \u4F18\u5148\u7EA7\u9AD8\u4E8E confirmText\n * @optional\n */\n confirmButton?: string\n\n /** \u786E\u8BA4\u6309\u94AE\u8DF3\u8F6C\u94FE\u63A5 @optional */\n confirmUrl?: string\n\n /**\n * \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u56DE\u8C03\uFF08\u53EF\u9009\uFF09\n */\n onConfirm?: () => void\n\n /**\n * \u81EA\u5B9A\u4E49\u7C7B\u540D\n */\n className?: string\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u914D\u7F6E\n// ============================================================================\n\n/**\n * \u9ED8\u8BA4\u83B7\u53D6\u673A\u4F1A\u65B9\u5F0F\uFF083\u79CD\uFF09\n * @note \u7236\u7EC4\u4EF6\u9700\u8981\u8986\u76D6 onClick \u56DE\u8C03\u4EE5\u5B9E\u73B0\u5177\u4F53\u4E1A\u52A1\u903B\u8F91\n */\nexport const DEFAULT_CHANCE_METHODS: ChanceMethod[] = [\n {\n methodKey: 'default-share',\n type: 'share',\n title: 'Share on your socials',\n description: 'Share this event on your social media',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-points',\n type: 'points',\n title: 'Spend 100 points',\n description: 'Use your reward points to get a chance',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n {\n methodKey: 'default-refer',\n type: 'refer',\n title: 'Refer a friend',\n description: 'Invite your friends to join',\n buttonText: 'Redeem now',\n onLoginRequired: () => {\n alert('Please log in to share and get a chance!')\n },\n onClick: () => {\n console.warn('ChanceMethod.onClick not implemented. Please provide a custom onClick handler.')\n },\n disabled: false,\n },\n]\n\n// ============================================================================\n// \u7C7B\u578B\u5B88\u536B\n// ============================================================================\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 Prize \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 Prize\n */\nexport function isPrize(value: unknown): value is Prize {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'prizeKey' in value &&\n 'name' in value &&\n 'image' in value &&\n typeof (value as Prize).prizeKey === 'string' &&\n typeof (value as Prize).name === 'string' &&\n typeof (value as Prize).image === 'object'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 ChanceMethod\n */\nexport function isChanceMethod(value: unknown): value is ChanceMethod {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'methodKey' in value &&\n 'type' in value &&\n 'title' in value &&\n 'description' in value &&\n 'onClick' in value &&\n typeof (value as ChanceMethod).methodKey === 'string' &&\n typeof (value as ChanceMethod).type === 'string' &&\n typeof (value as ChanceMethod).title === 'string' &&\n typeof (value as ChanceMethod).description === 'string' &&\n typeof (value as ChanceMethod).onClick === 'function'\n )\n}\n\n/**\n * \u68C0\u67E5\u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo \u5BF9\u8C61\n * @param value \u5F85\u68C0\u67E5\u7684\u503C\n * @returns \u662F\u5426\u4E3A\u6709\u6548\u7684 WinningInfo\n */\nexport function isWinningInfo(value: unknown): value is WinningInfo {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'winningKey' in value &&\n 'userName' in value &&\n 'prizeName' in value &&\n typeof (value as WinningInfo).winningKey === 'string' &&\n typeof (value as WinningInfo).userName === 'string' &&\n typeof (value as WinningInfo).prizeName === 'string'\n )\n}\n\n// ============================================================================\n// \u5BFC\u51FA\u7C7B\u578B\u522B\u540D\uFF08\u7528\u4E8E\u7B80\u5316\u4F7F\u7528\uFF09\n// ============================================================================\n\n/**\n * \u62BD\u5956\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnSpinEndCallback = (prize: Prize) => void\n\n/**\n * \u83B7\u53D6\u673A\u4F1A\u70B9\u51FB\u56DE\u8C03\u51FD\u6570\u7C7B\u578B\n */\nexport type OnChanceMethodClick = () => void\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,mBAAAC,EAAA,YAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAN,GAogCO,MAAME,EAAyC,CACpD,CACE,UAAW,gBACX,KAAM,QACN,MAAO,wBACP,YAAa,wCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,iBACX,KAAM,SACN,MAAO,mBACP,YAAa,yCACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,EACA,CACE,UAAW,gBACX,KAAM,QACN,MAAO,iBACP,YAAa,8BACb,WAAY,aACZ,gBAAiB,IAAM,CACrB,MAAM,0CAA0C,CAClD,EACA,QAAS,IAAM,CACb,QAAQ,KAAK,gFAAgF,CAC/F,EACA,SAAU,EACZ,CACF,EAWO,SAASE,EAAQG,EAAgC,CACtD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,aAAcA,GACd,SAAUA,GACV,UAAWA,GACX,OAAQA,EAAgB,UAAa,UACrC,OAAQA,EAAgB,MAAS,UACjC,OAAQA,EAAgB,OAAU,QAEtC,CAOO,SAASJ,EAAeI,EAAuC,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,SAAUA,GACV,UAAWA,GACX,gBAAiBA,GACjB,YAAaA,GACb,OAAQA,EAAuB,WAAc,UAC7C,OAAQA,EAAuB,MAAS,UACxC,OAAQA,EAAuB,OAAU,UACzC,OAAQA,EAAuB,aAAgB,UAC/C,OAAQA,EAAuB,SAAY,UAE/C,CAOO,SAASF,EAAcE,EAAsC,CAClE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,aAAcA,GACd,cAAeA,GACf,OAAQA,EAAsB,YAAe,UAC7C,OAAQA,EAAsB,UAAa,UAC3C,OAAQA,EAAsB,WAAc,QAEhD",
6
6
  "names": ["types_exports", "__export", "DEFAULT_CHANCE_METHODS", "isChanceMethod", "isPrize", "isWinningInfo", "__toCommonJS", "value"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var re=Object.defineProperty;var zt=Object.getOwnPropertyDescriptor;var It=Object.getOwnPropertyNames;var Dt=Object.prototype.hasOwnProperty;var $t=(s,l)=>{for(var r in l)re(s,r,{get:l[r],enumerable:!0})},Ht=(s,l,r,P)=>{if(l&&typeof l=="object"||typeof l=="function")for(let m of It(l))!Dt.call(s,m)&&m!==r&&re(s,m,{get:()=>l[m],enumerable:!(P=zt(l,m))||P.enumerable});return s};var Ut=s=>Ht(re({},"__esModule",{value:!0}),s);var Gt={};$t(Gt,{BaseModal:()=>je.BaseModal,ErrorModal:()=>Ue.ErrorModal,MyRewardsModal:()=>He.MyRewardsModal,ProductLottery:()=>ae,RulesModal:()=>$e.RulesModal,ShareModal:()=>Fe.ShareModal,WinnerModal:()=>De.WinnerModal,default:()=>jt});module.exports=Ut(Gt);var t=require("react/jsx-runtime"),e=require("react"),g=require("../../helpers/index.js"),be=require("./types.js"),Ce=require("../LotteryShared/types.js"),z=require("../../components/grid.js"),Ne=require("./MediaDrawArea.js"),Se=require("../LotteryShared/PrizePool.js"),Le=require("../LotteryShared/ChanceMethods.js"),ke=require("../LotteryShared/WinnerModal.js"),Ae=require("../LotteryShared/RulesModal.js"),We=require("../LotteryShared/MyRewardsModal.js"),ne=require("../LotteryShared/ErrorModal.js"),Re=require("../LotteryShared/ShareModal.js"),Oe=require("../../shared/Styles.js"),T=require("../../shared/track.js"),ze=require("../AiuiProvider/index.js"),Ie=require("../../hooks/useExposure.js"),_=require("../../shared/trackUrlRef.js"),De=require("../LotteryShared/WinnerModal.js"),$e=require("../LotteryShared/RulesModal.js"),He=require("../LotteryShared/MyRewardsModal.js"),Ue=require("../LotteryShared/ErrorModal.js"),Fe=require("../LotteryShared/ShareModal.js"),je=require("../LotteryShared/BaseModal.js");const Ft="image",c="lottery_banner",w="\u4EA7\u54C1\u62BD\u5956",x="copy",v="lottery_pop",E="image",ae=(0,e.forwardRef)(({prizes:s,media:l,theme:r,ctaButton:P,videoAutoPlay:m,videoMuted:Ge,videoLoop:Be,chanceMethods:se=Ce.DEFAULT_CHANCE_METHODS,chanceTitle:Ye=be.DEFAULT_CHANCE_TITLE,chanceSubtitle:Ke,chanceFooterNote:Je,chanceMethodsText:I,mechanismType:H,inputConfig:p,inputPlaceholder:ie,inputSubmitText:le,inputType:pe,inputValidationErrorText:de,winnerTickerData:Qe=[],winningInfos:ce,winnerNameTemplate:Xe,prizesTitle:Ze,onDrawStart:U,onDrawEnd:F,onDrawError:me,winnerModalConfig:fe,rulesModalConfig:Ve={},actionButtonConfig:f,myRewardsModalConfig:qe={},errorModalConfig:D={},shareModalConfig:b={},error:h,tryAgain:j,userData:y,loginPrompt:et,loginPromptText:tt="Please log in to participate",loginButtonText:Bt="Log In",onLoginRequired:C,onCopyCode:ot,opportunitiesPrefix:ue,opportunitiesText:rt=["Number of draws remaining today:"],dealsType:Yt,className:nt},at)=>{const Kt=et??tt??"Please log in to participate",xe=ue?[ue]:rt??["Number of draws remaining today:"],ge=ie||le||pe||de?{...p??{},placeholder:ie??p?.placeholder??"Enter your order number",submitText:le??p?.submitText??"Spin and Win",inputType:pe??p?.inputType??"text",validationErrorText:de??p?.validationErrorText}:p,N=h?{title:h.title??D?.title,message:h.defaultMessage??D?.message,confirmText:h.confirmButton??D?.confirmText,exchangeFailedTitle:h.exchangeFailedTitle,exchangeFailedMessage:h.exchangeFailedMessage}:D,n={...ce,...fe,confirmText:fe?.confirmText??ce?.confirmButton},{rulesData:S,rulesText:G="Rules"}=Ve,st=!!(f?.text&&f?.url),{rewardsData:B,myRewardsText:Y="My Rewards",codeText:it="CODE:",copyText:Te="COPY",copiedText:he="COPIED",prizeText:lt="Prize time:",emptyText:pt,copyError:dt,availableText:ct,usedStatusText:mt,expiredText:ft,notFoundText:ut}=qe,xt=I?.completedText,gt=I?.usedText,K=y?.isLoggedIn??!1,Tt=y?.availableChances??0,ye=se.length>0||H==="input",Me=H==="input"&&!!p?.agreementNotice,[L,J]=(0,e.useState)(!1),[d,we]=(0,e.useState)(null),[Q,k]=(0,e.useState)(!1),[X,A]=(0,e.useState)(!1),[Z,W]=(0,e.useState)(!1),[V,M]=(0,e.useState)(!1),[q,R]=(0,e.useState)(!1),[ee,O]=(0,e.useState)(!1),[ve,$]=(0,e.useState)(""),[ht,yt]=(0,e.useState)(),[Mt,wt]=(0,e.useState)(),[vt,Et]=(0,e.useState)(),[_t,Pt]=(0,e.useState)(),[bt,Ct]=(0,e.useState)(),[a,Nt]=(0,e.useState)(),[te,St]=(0,e.useState)(!1),Ee=(0,e.useRef)(null);(0,Ie.useExposure)(Ee,{componentType:Ft,componentName:c,componentTitle:w});const{trackingData:i,pageHandle:_e}=(0,ze.useAiuiContext)();(0,e.useEffect)(()=>{Q&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Winner"}})},[Q,i]),(0,e.useEffect)(()=>{q&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Better Luck Next Time"}})},[q,i]),(0,e.useEffect)(()=>{X&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Rules"}})},[X,i]),(0,e.useEffect)(()=>{Z&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"My Rewards"}})},[Z,i]),(0,e.useEffect)(()=>{ee&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Share"}})},[ee,i]),(0,e.useEffect)(()=>{V&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Error"}})},[V,i]),(0,e.useImperativeHandle)(at,()=>({showError:({message:o,title:u,confirmText:oe})=>{$(o),yt(u),wt(oe),M(!0)},hideError:()=>{M(!1)},showNoWin:o=>{Et(o?.title),Pt(o?.message),Ct(o?.confirmText),R(!0)},hideNoWin:()=>{R(!1)},showWinner:(o,u)=>{we(o),Nt(u),k(!0)},hideWinner:()=>{k(!1)},showRules:()=>{A(!0)},hideRules:()=>{A(!1)},showRewards:()=>{W(!0)},hideRewards:()=>{W(!1)},showShare:()=>{O(!0)},hideShare:()=>{O(!1)},hideAllModals:()=>{k(!1),A(!1),W(!1),M(!1),R(!1),O(!1)}}),[]);const Pe=(0,e.useCallback)(async()=>{if(!L){if(Me&&!te){$(p?.agreementWarningText||"Please agree to the terms before continuing"),M(!1);return}if(!y?.isLoggedIn){C?.();return}if(!(y.availableChances<=0)){J(!0);try{let o;U&&(o=await U());const u=s.find(oe=>oe.prizeKey===o)||s[0];we(u),J(!1),F?F(u):setTimeout(()=>{u.prizeKey==="try-again"?R(!0):k(!0)},300)}catch(o){J(!1),$(o.message||"An error occurred"),M(!0),me?.(o)}}}},[Me,p?.agreementWarningText,te,L,s,U,F,me,y,C]),Lt=(0,e.useCallback)(()=>{if(!K){C?.();return}Pe()},[Pe,K,C]),kt=(0,e.useCallback)(()=>{k(!1)},[]),At=(0,e.useCallback)(()=>{R(!1)},[]),Wt=vt||j?.title,Rt=_t||j?.message,Ot=bt||j?.confirmText;return(0,t.jsxs)("div",{ref:Ee,className:(0,g.cn)("product-lottery-container","w-full",r==="dark"?"aiui-dark":"",nt),children:[(0,t.jsxs)("div",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:[L&&"Drawing in progress...",d&&!L&&`Prize won: ${d.name}`]}),(0,t.jsxs)(z.Grid,{className:(0,g.cn)("product-lottery-main","tablet:mb-4 mb-3"),children:[(0,t.jsx)(z.GridItem,{span:ye?7:12,className:(0,g.cn)("media-section","relative flex w-full flex-1 items-center justify-center overflow-hidden","rounded-box","laptop:min-h-[288px] min-h-[240px]","lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]","desktop:aspect-w-[759] desktop:aspect-h-[384]","laptop:aspect-w-[516] laptop:aspect-h-[288]","l-tablet:col-span-12","l-tablet:mb-3",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsxs)("div",{className:(0,g.cn)("size-full px-[16px] pt-[16px]","lg-desktop:pb-[32px] lg-desktop:px-[32px]","desktop:pt-[24px] desktop:px-[24px]","laptop:pt-[16px] laptop:px-[16px]","tablet:px-[24px]","l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10","flex flex-col"),children:[(0,t.jsxs)("div",{className:"relative z-30 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3",children:[(0,t.jsx)("div",{children:(0,t.jsxs)("p",{className:"text-info-primary font-[700]",children:[xe?.[0],(0,t.jsx)("span",{className:"ml-1 text-[#FF6B35]",children:Tt}),xe?.[1]||""]})}),(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[S&&S.length>0&&(0,t.jsx)("button",{onClick:o=>{o.preventDefault(),o.stopPropagation(),A(!0)},className:"cursor-pointer touch-manipulation",type:"button","data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${G}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:G})}),B&&(0,t.jsx)("button",{onClick:o=>{if(o.preventDefault(),o.stopPropagation(),!K){C?.();return}W(!0)},className:"cursor-pointer touch-manipulation whitespace-nowrap",type:"button","data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${Y}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:Y})}),st&&(0,t.jsx)("a",{href:(0,_.trackUrlRef)(f?.url??"",(0,_.buildTrackingRef)(_e??"",x,c)),className:"cursor-pointer touch-manipulation whitespace-nowrap",onClick:o=>{o.preventDefault(),o.stopPropagation(),f?.url&&(window.location.href=(0,_.trackUrlRef)(f.url,(0,_.buildTrackingRef)(_e??"",x,c)))},"data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${f?.text}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:f?.text})})]})]}),(0,t.jsx)(Ne.MediaDrawArea,{className:"min-h-0 w-full flex-1",theme:r,media:l,ctaButton:P,videoAutoPlay:m,videoMuted:Ge,videoLoop:Be,isDrawing:L,onClick:Lt,ctaTrackTypeName:`${x}#${c}`,ctaTrackTitleDescButton:`${w}##${P?.text??""}`})]})}),ye&&(0,t.jsx)(z.GridItem,{span:5,className:(0,g.cn)("info-section","rounded-box","relative flex flex-col overflow-hidden","lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]","desktop:aspect-w-[536] desktop:aspect-h-[384]","laptop:aspect-w-[364] laptop:aspect-h-[288]","l-tablet:min-h-[280px] laptop:max-h-[320px]","w-full","l-tablet:col-span-12",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsx)(Le.ChanceMethods,{theme:r,userData:y,methods:se,title:Ye,subtitle:Ke,footerNote:Je,onOpenShareModal:()=>O(!0),chanceBadgeText:I?.chanceBadgeText,completedText:xt,usedText:gt,loadingText:I?.loadingText,mechanismType:H,inputConfig:{...ge,submitTrackTypeName:`${x}#${c}`,submitTrackTitleDescButton:`${w}##${ge?.submitText??"Spin and Win"}`},isAgreementChecked:te,onAgreementCheckedChange:o=>{St(o),o&&$("")},agreementErrorText:ve})})]}),(0,t.jsx)("div",{className:(0,g.cn)("product-lottery-footer","rounded-box","flex flex-col overflow-hidden",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsx)(Se.PrizePool,{theme:r,prizes:s,title:Ze,winningInfos:Qe,winnerNameTemplate:Xe})}),(0,t.jsx)(ke.WinnerModal,{isOpen:Q,prize:d,title:a?.title||n.title,prizeTitle:a?.prizeTitle||n.prizeTitle,prizeImage:a?.prizeImage||n.prizeImage,prizeDescription:a?.prizeDescription||n.prizeDescription,winnerNote:a?.winnerNote??d?.winnerModalConfig?.winnerNote??n.winnerNote,learnMoreUrl:a?.learnMoreUrl||d?.winnerModalConfig?.learnMoreUrl||n.learnMoreUrl,learnMoreText:a?.learnMoreText||d?.winnerModalConfig?.learnMoreText||n.learnMoreText,couponCode:a?.couponCode||n.couponCode,expiresAt:a?.expiresAt||n.expiresAt,expiresAtLabel:a?.expiresAtLabel||n.expiresAtLabel,couponDiscount:a?.couponDiscount||n.couponDiscount,couponUnit:a?.couponUnit||n.couponUnit,confirmText:a?.confirmText||d?.winnerModalConfig?.confirmText||n.confirmText,confirmUrl:a?.confirmUrl||d?.winnerModalConfig?.confirmUrl||n.confirmUrl,copyText:a?.copyText||n.copyText||Te,copiedText:a?.copiedText||n.copiedText||he,onClose:kt,theme:r}),S&&S.length>0&&(0,t.jsx)(Ae.RulesModal,{title:G,isOpen:X,onClose:()=>A(!1),rules:S,theme:r}),B&&(0,t.jsx)(We.MyRewardsModal,{isOpen:Z,onClose:()=>W(!1),rewards:B,onCopyCode:ot,codeText:it,copyText:Te,copiedText:he,prizeText:lt,emptyText:pt,copyError:dt,availableText:ct,usedStatusText:mt,expiredText:ft,notFoundText:ut,theme:r,title:Y}),(0,t.jsx)(ne.ErrorModal,{isOpen:V,onClose:()=>M(!1),title:ht||N?.title,message:ve||N?.message,confirmText:Mt||N?.confirmText,exchangeFailedTitle:N?.exchangeFailedTitle,exchangeFailedMessage:N?.exchangeFailedMessage,theme:r}),(0,t.jsx)(ne.ErrorModal,{isOpen:q,onClose:At,title:Wt,message:Rt,confirmText:Ot,theme:r}),(0,t.jsx)(Re.ShareModal,{isOpen:ee,onClose:()=>O(!1),title:b?.title,subtitle:b?.subtitle,note:b?.note,platforms:b?.platforms,onShareSuccess:b?.onShareSuccess,theme:r})]})});ae.displayName="ProductLottery";var jt=(0,Oe.withLayout)(ae);
1
+ "use strict";"use client";var re=Object.defineProperty;var It=Object.getOwnPropertyDescriptor;var Dt=Object.getOwnPropertyNames;var $t=Object.prototype.hasOwnProperty;var Ht=(s,l)=>{for(var r in l)re(s,r,{get:l[r],enumerable:!0})},Ut=(s,l,r,P)=>{if(l&&typeof l=="object"||typeof l=="function")for(let m of Dt(l))!$t.call(s,m)&&m!==r&&re(s,m,{get:()=>l[m],enumerable:!(P=It(l,m))||P.enumerable});return s};var Ft=s=>Ut(re({},"__esModule",{value:!0}),s);var Bt={};Ht(Bt,{BaseModal:()=>Ge.BaseModal,ErrorModal:()=>Fe.ErrorModal,MyRewardsModal:()=>Ue.MyRewardsModal,ProductLottery:()=>ae,RulesModal:()=>He.RulesModal,ShareModal:()=>je.ShareModal,WinnerModal:()=>$e.WinnerModal,default:()=>Gt});module.exports=Ft(Bt);var t=require("react/jsx-runtime"),e=require("react"),g=require("../../helpers/index.js"),Ce=require("./types.js"),Ne=require("../LotteryShared/types.js"),z=require("../../components/grid.js"),Se=require("./MediaDrawArea.js"),ke=require("../LotteryShared/PrizePool.js"),Le=require("../LotteryShared/ChanceMethods.js"),Ae=require("../LotteryShared/WinnerModal.js"),We=require("../LotteryShared/RulesModal.js"),Re=require("../LotteryShared/MyRewardsModal.js"),ne=require("../LotteryShared/ErrorModal.js"),Oe=require("../LotteryShared/ShareModal.js"),ze=require("../../shared/Styles.js"),T=require("../../shared/track.js"),Ie=require("../AiuiProvider/index.js"),De=require("../../hooks/useExposure.js"),_=require("../../shared/trackUrlRef.js"),$e=require("../LotteryShared/WinnerModal.js"),He=require("../LotteryShared/RulesModal.js"),Ue=require("../LotteryShared/MyRewardsModal.js"),Fe=require("../LotteryShared/ErrorModal.js"),je=require("../LotteryShared/ShareModal.js"),Ge=require("../LotteryShared/BaseModal.js");const jt="image",c="lottery_banner",w="\u4EA7\u54C1\u62BD\u5956",x="copy",v="lottery_pop",E="image",ae=(0,e.forwardRef)(({prizes:s,media:l,theme:r,ctaButton:P,videoAutoPlay:m,videoMuted:Be,videoLoop:Ye,chanceMethods:se=Ne.DEFAULT_CHANCE_METHODS,chanceTitle:Ke=Ce.DEFAULT_CHANCE_TITLE,chanceSubtitle:Je,chanceFooterNote:Qe,chanceMethodsText:I,mechanismType:H,inputConfig:p,inputPlaceholder:ie,inputSubmitText:le,inputType:pe,inputValidationErrorText:de,inputLoadingText:ce,winnerTickerData:Xe=[],winningInfos:me,winnerNameTemplate:Ze,prizesTitle:Ve,onDrawStart:U,onDrawEnd:F,onDrawError:fe,winnerModalConfig:ue,rulesModalConfig:qe={},actionButtonConfig:f,myRewardsModalConfig:et={},errorModalConfig:D={},shareModalConfig:b={},error:h,tryAgain:j,userData:y,loginPrompt:tt,loginPromptText:ot="Please log in to participate",loginButtonText:Yt="Log In",onLoginRequired:C,onCopyCode:rt,opportunitiesPrefix:xe,opportunitiesText:nt=["Number of draws remaining today:"],dealsType:Kt,className:at},st)=>{const Jt=tt??ot??"Please log in to participate",ge=xe?[xe]:nt??["Number of draws remaining today:"],Te=ie||le||pe||de||ce?{...p??{},placeholder:ie??p?.placeholder??"Enter your order number",submitText:le??p?.submitText??"Spin and Win",inputType:pe??p?.inputType??"text",validationErrorText:de??p?.validationErrorText,loadingText:ce??p?.loadingText}:p,N=h?{title:h.title??D?.title,message:h.defaultMessage??D?.message,confirmText:h.confirmButton??D?.confirmText,exchangeFailedTitle:h.exchangeFailedTitle,exchangeFailedMessage:h.exchangeFailedMessage}:D,n={...me,...ue,confirmText:ue?.confirmText??me?.confirmButton},{rulesData:S,rulesText:G="Rules"}=qe,it=!!(f?.text&&f?.url),{rewardsData:B,myRewardsText:Y="My Rewards",codeText:lt="CODE:",copyText:he="COPY",copiedText:ye="COPIED",prizeText:pt="Prize time:",emptyText:dt,copyError:ct,availableText:mt,usedStatusText:ft,expiredText:ut,notFoundText:xt}=et,gt=I?.completedText,Tt=I?.usedText,K=y?.isLoggedIn??!1,ht=y?.availableChances??0,Me=se.length>0||H==="input",we=H==="input"&&!!p?.agreementNotice,[k,J]=(0,e.useState)(!1),[d,ve]=(0,e.useState)(null),[Q,L]=(0,e.useState)(!1),[X,A]=(0,e.useState)(!1),[Z,W]=(0,e.useState)(!1),[V,M]=(0,e.useState)(!1),[q,R]=(0,e.useState)(!1),[ee,O]=(0,e.useState)(!1),[Ee,$]=(0,e.useState)(""),[yt,Mt]=(0,e.useState)(),[wt,vt]=(0,e.useState)(),[Et,_t]=(0,e.useState)(),[Pt,bt]=(0,e.useState)(),[Ct,Nt]=(0,e.useState)(),[a,St]=(0,e.useState)(),[te,kt]=(0,e.useState)(!1),_e=(0,e.useRef)(null);(0,De.useExposure)(_e,{componentType:jt,componentName:c,componentTitle:w});const{trackingData:i,pageHandle:Pe}=(0,Ie.useAiuiContext)();(0,e.useEffect)(()=>{Q&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Winner"}})},[Q,i]),(0,e.useEffect)(()=>{q&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Better Luck Next Time"}})},[q,i]),(0,e.useEffect)(()=>{X&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Rules"}})},[X,i]),(0,e.useEffect)(()=>{Z&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"My Rewards"}})},[Z,i]),(0,e.useEffect)(()=>{ee&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Share"}})},[ee,i]),(0,e.useEffect)(()=>{V&&(0,T.gaTrack)({event:"ga4Event",event_name:"component_impression",event_parameters:{page_group:i?.pageGroup||"Home Page",component_type:E,component_name:v,component_title:"Error"}})},[V,i]),(0,e.useImperativeHandle)(st,()=>({showError:({message:o,title:u,confirmText:oe})=>{$(o),Mt(u),vt(oe),M(!0)},hideError:()=>{M(!1)},showNoWin:o=>{_t(o?.title),bt(o?.message),Nt(o?.confirmText),R(!0)},hideNoWin:()=>{R(!1)},showWinner:(o,u)=>{ve(o),St(u),L(!0)},hideWinner:()=>{L(!1)},showRules:()=>{A(!0)},hideRules:()=>{A(!1)},showRewards:()=>{W(!0)},hideRewards:()=>{W(!1)},showShare:()=>{O(!0)},hideShare:()=>{O(!1)},hideAllModals:()=>{L(!1),A(!1),W(!1),M(!1),R(!1),O(!1)}}),[]);const be=(0,e.useCallback)(async()=>{if(!k){if(we&&!te){$(p?.agreementWarningText||"Please agree to the terms before continuing"),M(!1);return}if(!y?.isLoggedIn){C?.();return}if(!(y.availableChances<=0)){J(!0);try{let o;U&&(o=await U());const u=s.find(oe=>oe.prizeKey===o)||s[0];ve(u),J(!1),F?F(u):setTimeout(()=>{u.prizeKey==="try-again"?R(!0):L(!0)},300)}catch(o){J(!1),$(o.message||"An error occurred"),M(!0),fe?.(o)}}}},[we,p?.agreementWarningText,te,k,s,U,F,fe,y,C]),Lt=(0,e.useCallback)(()=>{if(!K){C?.();return}be()},[be,K,C]),At=(0,e.useCallback)(()=>{L(!1)},[]),Wt=(0,e.useCallback)(()=>{R(!1)},[]),Rt=Et||j?.title,Ot=Pt||j?.message,zt=Ct||j?.confirmText;return(0,t.jsxs)("div",{ref:_e,className:(0,g.cn)("product-lottery-container","w-full",r==="dark"?"aiui-dark":"",at),children:[(0,t.jsxs)("div",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:[k&&"Drawing in progress...",d&&!k&&`Prize won: ${d.name}`]}),(0,t.jsxs)(z.Grid,{className:(0,g.cn)("product-lottery-main","tablet:mb-4 mb-3"),children:[(0,t.jsx)(z.GridItem,{span:Me?7:12,className:(0,g.cn)("media-section","relative flex w-full flex-1 items-center justify-center overflow-hidden","rounded-box","laptop:min-h-[288px] min-h-[240px]","lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]","desktop:aspect-w-[759] desktop:aspect-h-[384]","laptop:aspect-w-[516] laptop:aspect-h-[288]","l-tablet:col-span-12","l-tablet:mb-3",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsxs)("div",{className:(0,g.cn)("size-full px-[16px] pt-[16px]","lg-desktop:pb-[32px] lg-desktop:px-[32px]","desktop:pt-[24px] desktop:px-[24px]","laptop:pt-[16px] laptop:px-[16px]","tablet:px-[24px]","l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10","flex flex-col"),children:[(0,t.jsxs)("div",{className:"relative z-30 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3",children:[(0,t.jsx)("div",{children:(0,t.jsxs)("p",{className:"text-info-primary font-[700]",children:[ge?.[0],(0,t.jsx)("span",{className:"ml-1 text-[#FF6B35]",children:ht}),ge?.[1]||""]})}),(0,t.jsxs)("div",{className:"flex items-center gap-4",children:[S&&S.length>0&&(0,t.jsx)("button",{onClick:o=>{o.preventDefault(),o.stopPropagation(),A(!0)},className:"cursor-pointer touch-manipulation",type:"button","data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${G}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:G})}),B&&(0,t.jsx)("button",{onClick:o=>{if(o.preventDefault(),o.stopPropagation(),!K){C?.();return}W(!0)},className:"cursor-pointer touch-manipulation whitespace-nowrap",type:"button","data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${Y}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:Y})}),it&&(0,t.jsx)("a",{href:(0,_.trackUrlRef)(f?.url??"",(0,_.buildTrackingRef)(Pe??"",x,c)),className:"cursor-pointer touch-manipulation whitespace-nowrap",onClick:o=>{o.preventDefault(),o.stopPropagation(),f?.url&&(window.location.href=(0,_.trackUrlRef)(f.url,(0,_.buildTrackingRef)(Pe??"",x,c)))},"data-headless-type-name":`${x}#${c}`,"data-headless-title-desc-button":`${w}##${f?.text}`,children:(0,t.jsx)("span",{className:"text-info-primary font-[700] underline",children:f?.text})})]})]}),(0,t.jsx)(Se.MediaDrawArea,{className:"min-h-0 w-full flex-1",theme:r,media:l,ctaButton:P,videoAutoPlay:m,videoMuted:Be,videoLoop:Ye,isDrawing:k,onClick:Lt,ctaTrackTypeName:`${x}#${c}`,ctaTrackTitleDescButton:`${w}##${P?.text??""}`})]})}),Me&&(0,t.jsx)(z.GridItem,{span:5,className:(0,g.cn)("info-section","rounded-box","relative flex flex-col overflow-hidden","lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]","desktop:aspect-w-[536] desktop:aspect-h-[384]","laptop:aspect-w-[364] laptop:aspect-h-[288]","l-tablet:min-h-[280px] laptop:max-h-[320px]","w-full","l-tablet:col-span-12",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsx)(Le.ChanceMethods,{theme:r,userData:y,methods:se,title:Ke,subtitle:Je,footerNote:Qe,onOpenShareModal:()=>O(!0),chanceBadgeText:I?.chanceBadgeText,completedText:gt,usedText:Tt,loadingText:I?.loadingText,mechanismType:H,inputConfig:{...Te,submitTrackTypeName:`${x}#${c}`,submitTrackTitleDescButton:`${w}##${Te?.submitText??"Spin and Win"}`},isAgreementChecked:te,onAgreementCheckedChange:o=>{kt(o),o&&$("")},agreementErrorText:Ee})})]}),(0,t.jsx)("div",{className:(0,g.cn)("product-lottery-footer","rounded-box","flex flex-col overflow-hidden",r==="dark"?"bg-[#1E2024]":"bg-[#EAEAEC]"),children:(0,t.jsx)(ke.PrizePool,{theme:r,prizes:s,title:Ve,winningInfos:Xe,winnerNameTemplate:Ze})}),(0,t.jsx)(Ae.WinnerModal,{isOpen:Q,prize:d,title:a?.title||n.title,prizeTitle:a?.prizeTitle||n.prizeTitle,prizeImage:a?.prizeImage||n.prizeImage,prizeDescription:a?.prizeDescription||n.prizeDescription,winnerNote:a?.winnerNote??d?.winnerModalConfig?.winnerNote??n.winnerNote,learnMoreUrl:a?.learnMoreUrl||d?.winnerModalConfig?.learnMoreUrl||n.learnMoreUrl,learnMoreText:a?.learnMoreText||d?.winnerModalConfig?.learnMoreText||n.learnMoreText,couponCode:a?.couponCode||n.couponCode,expiresAt:a?.expiresAt||n.expiresAt,expiresAtLabel:a?.expiresAtLabel||n.expiresAtLabel,couponDiscount:a?.couponDiscount||n.couponDiscount,couponUnit:a?.couponUnit||n.couponUnit,confirmText:a?.confirmText||d?.winnerModalConfig?.confirmText||n.confirmText,confirmUrl:a?.confirmUrl||d?.winnerModalConfig?.confirmUrl||n.confirmUrl,copyText:a?.copyText||n.copyText||he,copiedText:a?.copiedText||n.copiedText||ye,onClose:At,theme:r}),S&&S.length>0&&(0,t.jsx)(We.RulesModal,{title:G,isOpen:X,onClose:()=>A(!1),rules:S,theme:r}),B&&(0,t.jsx)(Re.MyRewardsModal,{isOpen:Z,onClose:()=>W(!1),rewards:B,onCopyCode:rt,codeText:lt,copyText:he,copiedText:ye,prizeText:pt,emptyText:dt,copyError:ct,availableText:mt,usedStatusText:ft,expiredText:ut,notFoundText:xt,theme:r,title:Y}),(0,t.jsx)(ne.ErrorModal,{isOpen:V,onClose:()=>M(!1),title:yt||N?.title,message:Ee||N?.message,confirmText:wt||N?.confirmText,exchangeFailedTitle:N?.exchangeFailedTitle,exchangeFailedMessage:N?.exchangeFailedMessage,theme:r}),(0,t.jsx)(ne.ErrorModal,{isOpen:q,onClose:Wt,title:Rt,message:Ot,confirmText:zt,theme:r}),(0,t.jsx)(Oe.ShareModal,{isOpen:ee,onClose:()=>O(!1),title:b?.title,subtitle:b?.subtitle,note:b?.note,platforms:b?.platforms,onShareSuccess:b?.onShareSuccess,theme:r})]})});ae.displayName="ProductLottery";var Gt=(0,ze.withLayout)(ae);
2
2
  //# sourceMappingURL=index.js.map