@anker-in/headless-ui 1.1.97 → 1.1.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/dist/cjs/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
  2. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js +1 -1
  3. package/dist/cjs/biz-components/LotteryShared/WinnerModal.js.map +3 -3
  4. package/dist/cjs/biz-components/LotteryShared/types.d.ts +5 -0
  5. package/dist/cjs/biz-components/LotteryShared/types.js +1 -1
  6. package/dist/cjs/biz-components/LotteryShared/types.js.map +2 -2
  7. package/dist/cjs/biz-components/ProductLottery/index.js +1 -1
  8. package/dist/cjs/biz-components/ProductLottery/index.js.map +2 -2
  9. package/dist/cjs/biz-components/WheelLottery/WinnerModal.d.ts +1 -1
  10. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js +1 -1
  11. package/dist/cjs/biz-components/WheelLottery/WinnerModal.js.map +3 -3
  12. package/dist/cjs/biz-components/WheelLottery/index.js +1 -1
  13. package/dist/cjs/biz-components/WheelLottery/index.js.map +2 -2
  14. package/dist/esm/biz-components/LotteryShared/WinnerModal.d.ts +1 -1
  15. package/dist/esm/biz-components/LotteryShared/WinnerModal.js +1 -1
  16. package/dist/esm/biz-components/LotteryShared/WinnerModal.js.map +3 -3
  17. package/dist/esm/biz-components/LotteryShared/types.d.ts +5 -0
  18. package/dist/esm/biz-components/LotteryShared/types.js.map +2 -2
  19. package/dist/esm/biz-components/ProductLottery/index.js +1 -1
  20. package/dist/esm/biz-components/ProductLottery/index.js.map +2 -2
  21. package/dist/esm/biz-components/WheelLottery/WinnerModal.d.ts +1 -1
  22. package/dist/esm/biz-components/WheelLottery/WinnerModal.js +1 -1
  23. package/dist/esm/biz-components/WheelLottery/WinnerModal.js.map +3 -3
  24. package/dist/esm/biz-components/WheelLottery/index.js +1 -1
  25. package/dist/esm/biz-components/WheelLottery/index.js.map +2 -2
  26. package/package.json +1 -1
@@ -21,7 +21,7 @@ import type { WinnerModalProps } from './types.js';
21
21
  * - 确认按钮
22
22
  * - 右上角关闭按钮
23
23
  */
24
- export declare const WinnerModal: ({ isOpen, prize, title, prizeTitle, prizeImage, prizeDescription, winnerNote, learnMoreUrl, learnMoreText, onClose, confirmText, onConfirm, confirmUrl, confirmButton, className, couponCode, couponDiscount, couponUnit, expiresAt, codeText, copyText, copiedText, onCopyCode, theme, }: WinnerModalProps & {
24
+ export declare const WinnerModal: ({ isOpen, prize, title, prizeTitle, prizeImage, prizeDescription, winnerNote, learnMoreUrl, learnMoreText, onClose, confirmText, onConfirm, confirmUrl, confirmButton, className, couponCode, couponDiscount, couponUnit, expiresAt, codeText, copyText, copiedText, expiresAtLabel, onCopyCode, theme, }: WinnerModalProps & {
25
25
  theme?: "light" | "dark";
26
26
  }) => import("react/jsx-runtime").JSX.Element | null;
27
27
  export default WinnerModal;
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var j=Object.create;var x=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var F=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,I=Object.prototype.hasOwnProperty;var J=(a,e)=>{for(var l in e)x(a,l,{get:e[l],enumerable:!0})},k=(a,e,l,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of F(e))!I.call(a,p)&&p!==l&&x(a,p,{get:()=>e[p],enumerable:!(o=D(e,p))||o.enumerable});return a};var q=(a,e,l)=>(l=a!=null?j(G(a)):{},k(e||!a||!a.__esModule?x(l,"default",{value:a,enumerable:!0}):l,a)),K=a=>k(x({},"__esModule",{value:!0}),a);var V={};J(V,{WinnerModal:()=>W,default:()=>Q});module.exports=K(V);var t=require("react/jsx-runtime"),i=q(require("react")),n=require("../../helpers/index.js"),s=require("../../components/index.js"),y=require("./BaseModal.js");const W=({isOpen:a,prize:e,title:l="You Have Won",prizeTitle:o,prizeImage:p,prizeDescription:d,winnerNote:f,learnMoreUrl:u,learnMoreText:B="Learn More",onClose:b,confirmText:M="Okay, Got It",onConfirm:O,confirmUrl:N,confirmButton:P,className:T,couponCode:r,couponDiscount:c,couponUnit:C="Off",expiresAt:v,codeText:E="CODE:",copyText:H="COPY",copiedText:R="COPIED",onCopyCode:h,theme:L="light"})=>{const[S,g]=i.default.useState(!1),m=i.default.useRef(null);i.default.useEffect(()=>()=>{m.current&&clearTimeout(m.current)},[]);const Y=w=>{m.current&&clearTimeout(m.current),navigator.clipboard.writeText(w),h&&h?.(w),g(!0),m.current=setTimeout(()=>{g(!1)},3e3)};if(!a||!e)return null;const _=()=>{N&&window.open(N,"_blank","noopener,noreferrer"),O?.(),b()};return(0,t.jsxs)(y.BaseModal,{isOpen:a,onClose:b,className:T,maxWidth:"max-w-[358px] laptop:max-w-[480px]",ariaLabelledBy:"winner-modal-title",theme:L,children:[(0,t.jsxs)("div",{className:"laptop:px-8 laptop:pt-4 flex flex-col items-center px-6 pt-2",children:[(0,t.jsxs)("div",{className:"w-full",children:[(0,t.jsx)(s.Heading,{size:2,className:(0,n.cn)("laptop:mb-2 mb-1 text-center tracking-[-0.32px]"),children:l}),(0,t.jsx)("p",{className:"laptop:text-[18px] desktop:text-[16px] text-center text-[14px] font-[700] text-[#1D1D1F]",children:o||e.name}),u&&(0,t.jsx)("div",{className:"laptop:mt-4 mt-3 hidden text-center",children:(0,t.jsx)("a",{href:u,target:"_blank",rel:"noopener noreferrer",className:(0,n.cn)("laptop:text-[14px] text-center text-[12px]","text-blue-600 hover:text-blue-700","font-medium underline","transition-colors"),children:B})})]}),(0,t.jsx)("div",{className:(0,n.cn)("mx-auto flex items-center justify-center","laptop:my-6 laptop:size-[200px] my-4 size-[160px]"),children:(p||e.image)&&(0,t.jsx)(s.Picture,{source:p||e?.image?.url,alt:e?.image?.alt||o||e?.name,className:(0,n.cn)("h-auto w-full")})}),(c||r)&&(0,t.jsxs)("div",{className:"laptop:mb-4 mb-2 flex w-full flex-col items-center",children:[c&&(0,t.jsxs)("span",{className:"text-brand-0 laptop:mb-2 laptop:text-[18px] mb-1 text-[16px] font-bold",children:[c," ",C]}),r&&(0,t.jsxs)("div",{className:"text-brand-0 laptop:text-[16px] flex items-center gap-2 text-center text-[14px] font-bold",children:[(0,t.jsxs)("span",{className:"max-w-[300px] truncate",children:[E,r]}),(0,t.jsx)("button",{onClick:()=>Y(r),className:"underline",style:{minWidth:60},children:S?R:H})]}),v&&(0,t.jsxs)("span",{className:"laptop:mt-2 mt-1 text-[12px] text-[#767880]",children:["\u6709\u6548\u671F\u81F3\uFF1A",v]})]}),f??d?(0,t.jsx)("p",{className:(0,n.cn)("laptop:text-[16px] laptop:mb-2 mb-1 px-4 text-center text-[14px] font-[700] text-[#767880]"),children:f??d}):null]}),(0,t.jsx)("div",{className:"laptop:px-8 laptop:pb-8 px-6 pb-6",children:(0,t.jsx)(s.Button,{onClick:_,className:(0,n.cn)("w-full"),children:P??M})})]})};var Q=W;
1
+ "use strict";"use client";var D=Object.create;var x=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var G=Object.getOwnPropertyNames;var I=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var V=(a,e)=>{for(var l in e)x(a,l,{get:e[l],enumerable:!0})},k=(a,e,l,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of G(e))!J.call(a,p)&&p!==l&&x(a,p,{get:()=>e[p],enumerable:!(o=F(e,p))||o.enumerable});return a};var q=(a,e,l)=>(l=a!=null?D(I(a)):{},k(e||!a||!a.__esModule?x(l,"default",{value:a,enumerable:!0}):l,a)),K=a=>k(x({},"__esModule",{value:!0}),a);var X={};V(X,{WinnerModal:()=>W,default:()=>Q});module.exports=K(X);var t=require("react/jsx-runtime"),i=q(require("react")),n=require("../../helpers/index.js"),s=require("../../components/index.js"),y=require("./BaseModal.js");const W=({isOpen:a,prize:e,title:l="You Have Won",prizeTitle:o,prizeImage:p,prizeDescription:d,winnerNote:f,learnMoreUrl:u,learnMoreText:B="Learn More",onClose:b,confirmText:M="Okay, Got It",onConfirm:O,confirmUrl:N,confirmButton:P,className:T,couponCode:r,couponDiscount:c,couponUnit:C="Off",expiresAt:v,codeText:E="CODE:",copyText:H="COPY",copiedText:R="COPIED",expiresAtLabel:L="Valid until:",onCopyCode:h,theme:S="light"})=>{const[Y,g]=i.default.useState(!1),m=i.default.useRef(null);i.default.useEffect(()=>()=>{m.current&&clearTimeout(m.current)},[]);const _=w=>{m.current&&clearTimeout(m.current),navigator.clipboard.writeText(w),h&&h?.(w),g(!0),m.current=setTimeout(()=>{g(!1)},3e3)};if(!a||!e)return null;const j=()=>{N&&window.open(N,"_blank","noopener,noreferrer"),O?.(),b()};return(0,t.jsxs)(y.BaseModal,{isOpen:a,onClose:b,className:T,maxWidth:"max-w-[358px] laptop:max-w-[480px]",ariaLabelledBy:"winner-modal-title",theme:S,children:[(0,t.jsxs)("div",{className:"laptop:px-8 laptop:pt-4 flex flex-col items-center px-6 pt-2",children:[(0,t.jsxs)("div",{className:"w-full",children:[(0,t.jsx)(s.Heading,{size:2,className:(0,n.cn)("laptop:mb-2 mb-1 text-center tracking-[-0.32px]"),children:l}),(0,t.jsx)("p",{className:"laptop:text-[18px] desktop:text-[16px] text-center text-[14px] font-[700] text-[#1D1D1F]",children:o||e.name}),u&&(0,t.jsx)("div",{className:"laptop:mt-4 mt-3 hidden text-center",children:(0,t.jsx)("a",{href:u,target:"_blank",rel:"noopener noreferrer",className:(0,n.cn)("laptop:text-[14px] text-center text-[12px]","text-blue-600 hover:text-blue-700","font-medium underline","transition-colors"),children:B})})]}),(0,t.jsx)("div",{className:(0,n.cn)("mx-auto flex items-center justify-center","laptop:my-6 laptop:size-[200px] my-4 size-[160px]"),children:(p||e.image)&&(0,t.jsx)(s.Picture,{source:p||e?.image?.url,alt:e?.image?.alt||o||e?.name,className:(0,n.cn)("h-auto w-full")})}),(c||r)&&(0,t.jsxs)("div",{className:"laptop:mb-4 mb-2 flex w-full flex-col items-center",children:[c&&(0,t.jsxs)("span",{className:"text-brand-0 laptop:mb-2 laptop:text-[18px] mb-1 text-[16px] font-bold",children:[c," ",C]}),r&&(0,t.jsxs)("div",{className:"text-brand-0 laptop:text-[16px] flex items-center gap-2 text-center text-[14px] font-bold",children:[(0,t.jsxs)("span",{className:"max-w-[300px] truncate",children:[E,r]}),(0,t.jsx)("button",{onClick:()=>_(r),className:"underline",style:{minWidth:60},children:Y?R:H})]}),v&&(0,t.jsxs)("span",{className:"laptop:mt-2 mt-1 text-[12px] text-[#767880]",children:[L," ",v]})]}),f??d?(0,t.jsx)("p",{className:(0,n.cn)("laptop:text-[16px] laptop:mb-2 mb-1 px-4 text-center text-[14px] font-[700] text-[#767880]"),children:f??d}):null]}),(0,t.jsx)("div",{className:"laptop:px-8 laptop:pb-8 px-6 pb-6",children:(0,t.jsx)(s.Button,{onClick:j,className:(0,n.cn)("w-full"),children:P??M})})]})};var Q=W;
2
2
  //# sourceMappingURL=WinnerModal.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/LotteryShared/WinnerModal.tsx"],
4
- "sourcesContent": ["/**\n * WinnerModal - \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u57FA\u4E8E\u622A\u56FE\u8BBE\u8BA1\u5B9E\u73B0\u7684\u4E2D\u5956\u7ED3\u679C\u5C55\u793A\u5F39\u7A97\u3002\n * \u5305\u542B\u6807\u9898\u3001\u5956\u54C1\u4FE1\u606F\u3001\u4F18\u60E0\u7801\u548C\u786E\u8BA4\u6309\u94AE\u3002\n *\n * @module WinnerModal\n * @date 2025-12-24\n */\n\n'use client'\n\nimport React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport type { WinnerModalProps } from './types.js'\nimport { Picture, Heading, Button } from '../../components/index.js'\nimport { BaseModal } from './BaseModal.js'\n\n// ============================================================================\n// WinnerModal \u7EC4\u4EF6\n// ============================================================================\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u6839\u636E\u8BBE\u8BA1\u7A3F\u5B9E\u73B0\u7684\u4E2D\u5956\u7ED3\u679C\u5C55\u793A\u5F39\u7A97,\u5305\u542B:\n * - \u534A\u900F\u660E\u906E\u7F69\u5C42\n * - \u767D\u8272\u5706\u89D2\u5361\u7247\u5BB9\u5668\n * - \u6807\u9898 \"You Have Won\"\n * - \u5956\u54C1\u540D\u79F0\n * - \u4F18\u60E0\u5238\u56FE\u7247\uFF0820% Off\uFF09\n * - \u4F18\u60E0\u7801\u548C\u8FC7\u671F\u65F6\u95F4\n * - \u786E\u8BA4\u6309\u94AE\n * - \u53F3\u4E0A\u89D2\u5173\u95ED\u6309\u94AE\n */\nexport const WinnerModal = ({\n isOpen,\n prize,\n title = 'You Have Won',\n prizeTitle,\n prizeImage,\n prizeDescription,\n winnerNote,\n learnMoreUrl,\n learnMoreText = 'Learn More',\n onClose,\n confirmText = 'Okay, Got It',\n onConfirm,\n confirmUrl,\n confirmButton,\n className,\n couponCode,\n couponDiscount,\n couponUnit = 'Off',\n expiresAt,\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n onCopyCode,\n theme = 'light',\n}: WinnerModalProps & { theme?: 'light' | 'dark' }) => {\n // \u590D\u5236\u72B6\u6001\n const [copied, setCopied] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timeout | null>(null)\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n // \u590D\u5236\u64CD\u4F5C\n const handleCopy = (code: string) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n\n navigator.clipboard.writeText(code)\n if (onCopyCode) onCopyCode?.(code)\n setCopied(true)\n timerRef.current = setTimeout(() => {\n setCopied(false)\n }, 3000)\n }\n\n // \u4E0D\u663E\u793A\u5F39\u7A97\u6216\u65E0\u5956\u54C1\u6570\u636E\u65F6\u8FD4\u56DE null\n if (!isOpen || !prize) {\n return null\n }\n\n // \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u5904\u7406\n const handleConfirm = () => {\n if (confirmUrl) {\n window.open(confirmUrl, '_blank', 'noopener,noreferrer')\n }\n onConfirm?.()\n onClose()\n }\n\n return (\n <BaseModal\n isOpen={isOpen}\n onClose={onClose}\n className={className}\n maxWidth=\"max-w-[358px] laptop:max-w-[480px]\"\n ariaLabelledBy=\"winner-modal-title\"\n theme={theme}\n >\n <div className=\"laptop:px-8 laptop:pt-4 flex flex-col items-center px-6 pt-2\">\n {/* =================================================================\n \u5F39\u7A97\u6807\u9898\n ================================================================= */}\n <div className=\"w-full\">\n <Heading size={2} className={cn('laptop:mb-2 mb-1 text-center tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n <p className=\"laptop:text-[18px] desktop:text-[16px] text-center text-[14px] font-[700] text-[#1D1D1F]\">\n {prizeTitle || prize.name}\n </p>\n\n {/* =================================================================\n Learn More \u6309\u94AE\n ================================================================= */}\n {learnMoreUrl && (\n <div className=\"laptop:mt-4 mt-3 hidden text-center\">\n <a\n href={learnMoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'laptop:text-[14px] text-center text-[12px]',\n 'text-blue-600 hover:text-blue-700',\n 'font-medium underline',\n 'transition-colors'\n )}\n >\n {learnMoreText}\n </a>\n </div>\n )}\n </div>\n\n {/* =================================================================\n \u5956\u54C1\u56FE\u7247\n ================================================================= */}\n\n <div\n className={cn(\n 'mx-auto flex items-center justify-center',\n 'laptop:my-6 laptop:size-[200px] my-4 size-[160px]'\n )}\n >\n {(prizeImage || prize.image) && (\n <Picture\n source={prizeImage || prize?.image?.url}\n alt={prize?.image?.alt || prizeTitle || prize?.name}\n className={cn('h-auto w-full')}\n />\n )}\n </div>\n\n {/* =================================================================\n \u6298\u6263\u548C\u4F18\u60E0\u7801\u590D\u5236\n ================================================================= */}\n {(couponDiscount || couponCode) && (\n <div className=\"laptop:mb-4 mb-2 flex w-full flex-col items-center\">\n {couponDiscount && (\n <span className=\"text-brand-0 laptop:mb-2 laptop:text-[18px] mb-1 text-[16px] font-bold\">\n {couponDiscount} {couponUnit}\n </span>\n )}\n {couponCode && (\n <div className=\"text-brand-0 laptop:text-[16px] flex items-center gap-2 text-center text-[14px] font-bold\">\n <span className=\"max-w-[300px] truncate\">\n {codeText}\n {couponCode}\n </span>\n <button onClick={() => handleCopy(couponCode!)} className=\"underline\" style={{ minWidth: 60 }}>\n {copied ? copiedText : copyText}\n </button>\n </div>\n )}\n {expiresAt && <span className=\"laptop:mt-2 mt-1 text-[12px] text-[#767880]\">\u6709\u6548\u671F\u81F3\uFF1A{expiresAt}</span>}\n </div>\n )}\n\n {/* =================================================================\n \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08winner note\uFF09\n ================================================================= */}\n {(winnerNote ?? prizeDescription) ? (\n <p\n className={cn('laptop:text-[16px] laptop:mb-2 mb-1 px-4 text-center text-[14px] font-[700] text-[#767880]')}\n >\n {winnerNote ?? prizeDescription}\n </p>\n ) : null}\n </div>\n\n {/* =================================================================\n \u786E\u8BA4\u6309\u94AE\n ================================================================= */}\n <div className=\"laptop:px-8 laptop:pb-8 px-6 pb-6\">\n <Button onClick={handleConfirm} className={cn('w-full')}>\n {confirmButton ?? confirmText}\n </Button>\n </div>\n </BaseModal>\n )\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u5BFC\u51FA\n// ============================================================================\n\nexport default WinnerModal\n"],
5
- "mappings": "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",
6
- "names": ["WinnerModal_exports", "__export", "WinnerModal", "WinnerModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_components", "import_BaseModal", "isOpen", "prize", "title", "prizeTitle", "prizeImage", "prizeDescription", "winnerNote", "learnMoreUrl", "learnMoreText", "onClose", "confirmText", "onConfirm", "confirmUrl", "confirmButton", "className", "couponCode", "couponDiscount", "couponUnit", "expiresAt", "codeText", "copyText", "copiedText", "onCopyCode", "theme", "copied", "setCopied", "React", "timerRef", "handleCopy", "code", "handleConfirm"]
4
+ "sourcesContent": ["/**\n * WinnerModal - \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u57FA\u4E8E\u622A\u56FE\u8BBE\u8BA1\u5B9E\u73B0\u7684\u4E2D\u5956\u7ED3\u679C\u5C55\u793A\u5F39\u7A97\u3002\n * \u5305\u542B\u6807\u9898\u3001\u5956\u54C1\u4FE1\u606F\u3001\u4F18\u60E0\u7801\u548C\u786E\u8BA4\u6309\u94AE\u3002\n *\n * @module WinnerModal\n * @date 2025-12-24\n */\n\n'use client'\n\nimport React from 'react'\nimport { cn } from '../../helpers/index.js'\nimport type { WinnerModalProps } from './types.js'\nimport { Picture, Heading, Button } from '../../components/index.js'\nimport { BaseModal } from './BaseModal.js'\n\n// ============================================================================\n// WinnerModal \u7EC4\u4EF6\n// ============================================================================\n\n/**\n * WinnerModal \u4E2D\u5956\u5F39\u7A97\u7EC4\u4EF6\n *\n * \u6839\u636E\u8BBE\u8BA1\u7A3F\u5B9E\u73B0\u7684\u4E2D\u5956\u7ED3\u679C\u5C55\u793A\u5F39\u7A97,\u5305\u542B:\n * - \u534A\u900F\u660E\u906E\u7F69\u5C42\n * - \u767D\u8272\u5706\u89D2\u5361\u7247\u5BB9\u5668\n * - \u6807\u9898 \"You Have Won\"\n * - \u5956\u54C1\u540D\u79F0\n * - \u4F18\u60E0\u5238\u56FE\u7247\uFF0820% Off\uFF09\n * - \u4F18\u60E0\u7801\u548C\u8FC7\u671F\u65F6\u95F4\n * - \u786E\u8BA4\u6309\u94AE\n * - \u53F3\u4E0A\u89D2\u5173\u95ED\u6309\u94AE\n */\nexport const WinnerModal = ({\n isOpen,\n prize,\n title = 'You Have Won',\n prizeTitle,\n prizeImage,\n prizeDescription,\n winnerNote,\n learnMoreUrl,\n learnMoreText = 'Learn More',\n onClose,\n confirmText = 'Okay, Got It',\n onConfirm,\n confirmUrl,\n confirmButton,\n className,\n couponCode,\n couponDiscount,\n couponUnit = 'Off',\n expiresAt,\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n expiresAtLabel = 'Valid until:',\n onCopyCode,\n theme = 'light',\n}: WinnerModalProps & { theme?: 'light' | 'dark' }) => {\n // \u590D\u5236\u72B6\u6001\n const [copied, setCopied] = React.useState(false)\n const timerRef = React.useRef<NodeJS.Timeout | null>(null)\n\n React.useEffect(() => {\n return () => {\n if (timerRef.current) clearTimeout(timerRef.current)\n }\n }, [])\n\n // \u590D\u5236\u64CD\u4F5C\n const handleCopy = (code: string) => {\n if (timerRef.current) clearTimeout(timerRef.current)\n\n navigator.clipboard.writeText(code)\n if (onCopyCode) onCopyCode?.(code)\n setCopied(true)\n timerRef.current = setTimeout(() => {\n setCopied(false)\n }, 3000)\n }\n\n // \u4E0D\u663E\u793A\u5F39\u7A97\u6216\u65E0\u5956\u54C1\u6570\u636E\u65F6\u8FD4\u56DE null\n if (!isOpen || !prize) {\n return null\n }\n\n // \u786E\u8BA4\u6309\u94AE\u70B9\u51FB\u5904\u7406\n const handleConfirm = () => {\n if (confirmUrl) {\n window.open(confirmUrl, '_blank', 'noopener,noreferrer')\n }\n onConfirm?.()\n onClose()\n }\n\n return (\n <BaseModal\n isOpen={isOpen}\n onClose={onClose}\n className={className}\n maxWidth=\"max-w-[358px] laptop:max-w-[480px]\"\n ariaLabelledBy=\"winner-modal-title\"\n theme={theme}\n >\n <div className=\"laptop:px-8 laptop:pt-4 flex flex-col items-center px-6 pt-2\">\n {/* =================================================================\n \u5F39\u7A97\u6807\u9898\n ================================================================= */}\n <div className=\"w-full\">\n <Heading size={2} className={cn('laptop:mb-2 mb-1 text-center tracking-[-0.32px]')}>\n {title}\n </Heading>\n\n <p className=\"laptop:text-[18px] desktop:text-[16px] text-center text-[14px] font-[700] text-[#1D1D1F]\">\n {prizeTitle || prize.name}\n </p>\n\n {/* =================================================================\n Learn More \u6309\u94AE\n ================================================================= */}\n {learnMoreUrl && (\n <div className=\"laptop:mt-4 mt-3 hidden text-center\">\n <a\n href={learnMoreUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n 'laptop:text-[14px] text-center text-[12px]',\n 'text-blue-600 hover:text-blue-700',\n 'font-medium underline',\n 'transition-colors'\n )}\n >\n {learnMoreText}\n </a>\n </div>\n )}\n </div>\n\n {/* =================================================================\n \u5956\u54C1\u56FE\u7247\n ================================================================= */}\n\n <div\n className={cn(\n 'mx-auto flex items-center justify-center',\n 'laptop:my-6 laptop:size-[200px] my-4 size-[160px]'\n )}\n >\n {(prizeImage || prize.image) && (\n <Picture\n source={prizeImage || prize?.image?.url}\n alt={prize?.image?.alt || prizeTitle || prize?.name}\n className={cn('h-auto w-full')}\n />\n )}\n </div>\n\n {/* =================================================================\n \u6298\u6263\u548C\u4F18\u60E0\u7801\u590D\u5236\n ================================================================= */}\n {(couponDiscount || couponCode) && (\n <div className=\"laptop:mb-4 mb-2 flex w-full flex-col items-center\">\n {couponDiscount && (\n <span className=\"text-brand-0 laptop:mb-2 laptop:text-[18px] mb-1 text-[16px] font-bold\">\n {couponDiscount} {couponUnit}\n </span>\n )}\n {couponCode && (\n <div className=\"text-brand-0 laptop:text-[16px] flex items-center gap-2 text-center text-[14px] font-bold\">\n <span className=\"max-w-[300px] truncate\">\n {codeText}\n {couponCode}\n </span>\n <button onClick={() => handleCopy(couponCode!)} className=\"underline\" style={{ minWidth: 60 }}>\n {copied ? copiedText : copyText}\n </button>\n </div>\n )}\n {expiresAt && (\n <span className=\"laptop:mt-2 mt-1 text-[12px] text-[#767880]\">\n {expiresAtLabel} {expiresAt}\n </span>\n )}\n </div>\n )}\n\n {/* =================================================================\n \u5956\u54C1\u8BE6\u60C5\u63CF\u8FF0\uFF08winner note\uFF09\n ================================================================= */}\n {(winnerNote ?? prizeDescription) ? (\n <p\n className={cn('laptop:text-[16px] laptop:mb-2 mb-1 px-4 text-center text-[14px] font-[700] text-[#767880]')}\n >\n {winnerNote ?? prizeDescription}\n </p>\n ) : null}\n </div>\n\n {/* =================================================================\n \u786E\u8BA4\u6309\u94AE\n ================================================================= */}\n <div className=\"laptop:px-8 laptop:pb-8 px-6 pb-6\">\n <Button onClick={handleConfirm} className={cn('w-full')}>\n {confirmButton ?? confirmText}\n </Button>\n </div>\n </BaseModal>\n )\n}\n\n// ============================================================================\n// \u9ED8\u8BA4\u5BFC\u51FA\n// ============================================================================\n\nexport default WinnerModal\n"],
5
+ "mappings": "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",
6
+ "names": ["WinnerModal_exports", "__export", "WinnerModal", "WinnerModal_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_components", "import_BaseModal", "isOpen", "prize", "title", "prizeTitle", "prizeImage", "prizeDescription", "winnerNote", "learnMoreUrl", "learnMoreText", "onClose", "confirmText", "onConfirm", "confirmUrl", "confirmButton", "className", "couponCode", "couponDiscount", "couponUnit", "expiresAt", "codeText", "copyText", "copiedText", "expiresAtLabel", "onCopyCode", "theme", "copied", "setCopied", "React", "timerRef", "handleCopy", "code", "handleConfirm"]
7
7
  }
@@ -277,6 +277,11 @@ export interface CouponConfig {
277
277
  * 优惠码过期时间
278
278
  */
279
279
  expiresAt?: string;
280
+ /**
281
+ * 有效期标签文案
282
+ * @default "Valid until:"
283
+ */
284
+ expiresAtLabel?: string;
280
285
  /**
281
286
  * 优惠券折扣文本(例如 "20%")
282
287
  */
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var l=(e,t)=>{for(var i in t)r(e,i,{get:t[i],enumerable:!0})},c=(e,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of a(t))!g.call(e,n)&&n!==i&&r(e,n,{get:()=>t[n],enumerable:!(o=s(t,n))||o.enumerable});return e};var p=e=>c(r({},"__esModule",{value:!0}),e);var x={};l(x,{DEFAULT_CHANCE_METHODS:()=>d,isChanceMethod:()=>f,isPrize:()=>m,isWinningInfo:()=>h});module.exports=p(x);const d=[{methodKey:"default-share",type:"share",title:"Share on your socials",description:"Share this event on your social media",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-points",type:"points",title:"Spend 100 points",description:"Use your reward points to get a chance",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-refer",type:"refer",title:"Refer a friend",description:"Invite your friends to join",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1}];function m(e){return typeof e=="object"&&e!==null&&"prizeKey"in e&&"name"in e&&"image"in e&&typeof e.prizeKey=="string"&&typeof e.name=="string"&&typeof e.image=="object"}function f(e){return typeof e=="object"&&e!==null&&"methodKey"in e&&"type"in e&&"title"in e&&"description"in e&&"onClick"in e&&typeof e.methodKey=="string"&&typeof e.type=="string"&&typeof e.title=="string"&&typeof e.description=="string"&&typeof e.onClick=="function"}function h(e){return typeof e=="object"&&e!==null&&"winningKey"in e&&"userName"in e&&"prizeName"in e&&typeof e.winningKey=="string"&&typeof e.userName=="string"&&typeof e.prizeName=="string"}
1
+ "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var l=(e,t)=>{for(var i in t)r(e,i,{get:t[i],enumerable:!0})},p=(e,t,i,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of a(t))!g.call(e,n)&&n!==i&&r(e,n,{get:()=>t[n],enumerable:!(o=s(t,n))||o.enumerable});return e};var c=e=>p(r({},"__esModule",{value:!0}),e);var x={};l(x,{DEFAULT_CHANCE_METHODS:()=>d,isChanceMethod:()=>f,isPrize:()=>m,isWinningInfo:()=>h});module.exports=c(x);const d=[{methodKey:"default-share",type:"share",title:"Share on your socials",description:"Share this event on your social media",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-points",type:"points",title:"Spend 100 points",description:"Use your reward points to get a chance",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1},{methodKey:"default-refer",type:"refer",title:"Refer a friend",description:"Invite your friends to join",buttonText:"Redeem now",onLoginRequired:()=>{alert("Please log in to share and get a chance!")},onClick:()=>{console.warn("ChanceMethod.onClick not implemented. Please provide a custom onClick handler.")},disabled:!1}];function m(e){return typeof e=="object"&&e!==null&&"prizeKey"in e&&"name"in e&&"image"in e&&typeof e.prizeKey=="string"&&typeof e.name=="string"&&typeof e.image=="object"}function f(e){return typeof e=="object"&&e!==null&&"methodKey"in e&&"type"in e&&"title"in e&&"description"in e&&"onClick"in e&&typeof e.methodKey=="string"&&typeof e.type=="string"&&typeof e.title=="string"&&typeof e.description=="string"&&typeof e.onClick=="function"}function h(e){return typeof e=="object"&&e!==null&&"winningKey"in e&&"userName"in e&&"prizeName"in e&&typeof e.winningKey=="string"&&typeof e.userName=="string"&&typeof e.prizeName=="string"}
2
2
  //# sourceMappingURL=types.js.map
@@ -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 * \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,GA4/BO,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 /** \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",
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"),Ce=require("./types.js"),Ne=require("../LotteryShared/types.js"),z=require("../../components/grid.js"),be=require("./MediaDrawArea.js"),Se=require("../LotteryShared/PrizePool.js"),ke=require("../LotteryShared/ChanceMethods.js"),Le=require("../LotteryShared/WinnerModal.js"),We=require("../LotteryShared/RulesModal.js"),Re=require("../LotteryShared/MyRewardsModal.js"),ne=require("../LotteryShared/ErrorModal.js"),Ae=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=Ne.DEFAULT_CHANCE_METHODS,chanceTitle:Ye=Ce.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:C={},error:h,tryAgain:j,userData:y,loginPrompt:et,loginPromptText:tt="Please log in to participate",loginButtonText:Bt="Log In",onLoginRequired:N,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,b=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,[k,J]=(0,e.useState)(!1),[d,we]=(0,e.useState)(null),[Q,L]=(0,e.useState)(!1),[X,W]=(0,e.useState)(!1),[Z,R]=(0,e.useState)(!1),[V,M]=(0,e.useState)(!1),[q,A]=(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)(),[Ct,Nt]=(0,e.useState)(),[a,bt]=(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),Nt(o?.confirmText),A(!0)},hideNoWin:()=>{A(!1)},showWinner:(o,u)=>{we(o),bt(u),L(!0)},hideWinner:()=>{L(!1)},showRules:()=>{W(!0)},hideRules:()=>{W(!1)},showRewards:()=>{R(!0)},hideRewards:()=>{R(!1)},showShare:()=>{O(!0)},hideShare:()=>{O(!1)},hideAllModals:()=>{L(!1),W(!1),R(!1),M(!1),A(!1),O(!1)}}),[]);const Pe=(0,e.useCallback)(async()=>{if(!k){if(Me&&!te){$(p?.agreementWarningText||"Please agree to the terms before continuing"),M(!1);return}if(!y?.isLoggedIn){N?.();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"?A(!0):L(!0)},300)}catch(o){J(!1),$(o.message||"An error occurred"),M(!0),me?.(o)}}}},[Me,p?.agreementWarningText,te,k,s,U,F,me,y,N]),kt=(0,e.useCallback)(()=>{if(!K){N?.();return}Pe()},[Pe,K,N]),Lt=(0,e.useCallback)(()=>{L(!1)},[]),Wt=(0,e.useCallback)(()=>{A(!1)},[]),Rt=vt||j?.title,At=_t||j?.message,Ot=Ct||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:[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: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(),W(!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){N?.();return}R(!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)(be.MediaDrawArea,{className:"min-h-0 w-full flex-1",theme:r,media:l,ctaButton:P,videoAutoPlay:m,videoMuted:Ge,videoLoop:Be,isDrawing:k,onClick:kt,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)(ke.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)(Le.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,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:Lt,theme:r}),S&&S.length>0&&(0,t.jsx)(We.RulesModal,{title:G,isOpen:X,onClose:()=>W(!1),rules:S,theme:r}),B&&(0,t.jsx)(Re.MyRewardsModal,{isOpen:Z,onClose:()=>R(!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||b?.title,message:ve||b?.message,confirmText:Mt||b?.confirmText,exchangeFailedTitle:b?.exchangeFailedTitle,exchangeFailedMessage:b?.exchangeFailedMessage,theme:r}),(0,t.jsx)(ne.ErrorModal,{isOpen:q,onClose:Wt,title:Rt,message:At,confirmText:Ot,theme:r}),(0,t.jsx)(Ae.ShareModal,{isOpen:ee,onClose:()=>O(!1),title:C?.title,subtitle:C?.subtitle,note:C?.note,platforms:C?.platforms,onShareSuccess:C?.onShareSuccess,theme:r})]})});ae.displayName="ProductLottery";var jt=(0,Oe.withLayout)(ae);
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);
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/biz-components/ProductLottery/index.tsx"],
4
- "sourcesContent": ["'use client'\n\nimport { useState, useCallback, useImperativeHandle, forwardRef, useEffect, useRef } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { DEFAULT_CHANCE_TITLE } from './types.js'\nimport { DEFAULT_CHANCE_METHODS } from '../LotteryShared/types.js'\nimport { Grid, GridItem } from '../../components/grid.js'\nimport { MediaDrawArea } from './MediaDrawArea.js'\nimport { PrizePool } from '../LotteryShared/PrizePool.js'\nimport { ChanceMethods } from '../LotteryShared/ChanceMethods.js'\nimport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nimport { RulesModal } from '../LotteryShared/RulesModal.js'\nimport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nimport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nimport { ShareModal } from '../LotteryShared/ShareModal.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef, buildTrackingRef } from '../../shared/trackUrlRef.js'\n\nimport type { ProductLotteryProps, ProductLotteryHandle } from './types.js'\nimport type { Prize, WinnerModalConfig, ChanceInputConfig } from '../LotteryShared/types.js'\n\nconst LOTTERY_COMPONENT_TYPE = 'image'\nconst LOTTERY_COMPONENT_NAME = 'lottery_banner'\nconst LOTTERY_COMPONENT_TITLE = '\u4EA7\u54C1\u62BD\u5956'\nconst LOTTERY_CLICK_TYPE = 'copy'\nconst LOTTERY_MODAL_COMPONENT_NAME = 'lottery_pop'\nconst LOTTERY_MODAL_COMPONENT_TYPE = 'image'\n\nexport const ProductLottery = forwardRef<ProductLotteryHandle, ProductLotteryProps>(\n (\n {\n prizes,\n media,\n theme,\n ctaButton,\n videoAutoPlay,\n videoMuted,\n videoLoop,\n chanceMethods = DEFAULT_CHANCE_METHODS,\n chanceTitle = DEFAULT_CHANCE_TITLE,\n chanceSubtitle,\n chanceFooterNote,\n chanceMethodsText,\n mechanismType,\n inputConfig,\n inputPlaceholder,\n inputSubmitText,\n inputType,\n inputValidationErrorText,\n winnerTickerData = [],\n winningInfos,\n winnerNameTemplate,\n prizesTitle,\n onDrawStart,\n onDrawEnd,\n onDrawError,\n winnerModalConfig,\n rulesModalConfig = {},\n actionButtonConfig,\n myRewardsModalConfig = {},\n errorModalConfig = {},\n shareModalConfig = {},\n error,\n tryAgain,\n userData,\n loginPrompt,\n loginPromptText = 'Please log in to participate',\n loginButtonText = 'Log In',\n onLoginRequired,\n onCopyCode,\n opportunitiesPrefix,\n opportunitiesText = ['Number of draws remaining today:'],\n dealsType,\n className,\n },\n ref\n ) => {\n // \u2500\u2500 CMS field normalization \u2500\u2500\n // CMS-primary strategy: CMS fields take precedence over legacy backward-compat fields.\n // If a CMS field is provided, it overrides the corresponding legacy field.\n const resolvedLoginPrompt = loginPrompt ?? loginPromptText ?? 'Please log in to participate'\n const resolvedOpportunitiesText: string[] = opportunitiesPrefix\n ? [opportunitiesPrefix]\n : (opportunitiesText ?? ['Number of draws remaining today:'])\n const resolvedInputConfig: ChanceInputConfig | undefined =\n inputPlaceholder || inputSubmitText || inputType || inputValidationErrorText\n ? {\n ...(inputConfig ?? {}),\n placeholder: inputPlaceholder ?? inputConfig?.placeholder ?? 'Enter your order number',\n submitText: inputSubmitText ?? inputConfig?.submitText ?? 'Spin and Win',\n inputType: inputType ?? inputConfig?.inputType ?? 'text',\n validationErrorText: inputValidationErrorText ?? inputConfig?.validationErrorText,\n }\n : inputConfig\n const resolvedErrorConfig = error\n ? {\n title: error.title ?? errorModalConfig?.title,\n message: error.defaultMessage ?? errorModalConfig?.message,\n confirmText: error.confirmButton ?? errorModalConfig?.confirmText,\n exchangeFailedTitle: error.exchangeFailedTitle,\n exchangeFailedMessage: error.exchangeFailedMessage,\n }\n : errorModalConfig\n const resolvedWinnerConfig: WinnerModalConfig = {\n ...winningInfos,\n ...winnerModalConfig,\n confirmText: winnerModalConfig?.confirmText ?? winningInfos?.confirmButton,\n }\n\n const { rulesData, rulesText = 'Rules' } = rulesModalConfig\n const shouldShowActionButton = Boolean(actionButtonConfig?.text && actionButtonConfig?.url)\n const {\n rewardsData,\n myRewardsText = 'My Rewards',\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n emptyText,\n copyError,\n availableText,\n usedStatusText,\n expiredText,\n notFoundText,\n } = myRewardsModalConfig\n const completedText = chanceMethodsText?.completedText\n const usedText = chanceMethodsText?.usedText\n const isLoggedIn = userData?.isLoggedIn ?? false\n const availableChances = userData?.availableChances ?? 0\n const hasRightPanel = chanceMethods.length > 0 || mechanismType === 'input'\n const hasAgreementNotice = mechanismType === 'input' && Boolean(inputConfig?.agreementNotice)\n\n // State\n const [isDrawing, setIsDrawing] = useState(false)\n const [winningPrize, setWinningPrize] = useState<Prize | null>(null)\n const [showWinnerModal, setShowWinnerModal] = useState(false)\n const [showRulesModal, setShowRulesModal] = useState(false)\n const [showRewardsModal, setShowRewardsModal] = useState(false)\n const [showErrorModal, setShowErrorModal] = useState(false)\n const [showNoWinModal, setShowNoWinModal] = useState(false)\n const [showShareModal, setShowShareModal] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [errorTitle, setErrorTitle] = useState<string | undefined>()\n const [errorConfirmText, setErrorConfirmText] = useState<string | undefined>()\n const [noWinTitle, setNoWinTitle] = useState<string | undefined>()\n const [noWinMessage, setNoWinMessage] = useState<string | undefined>()\n const [noWinConfirmText, setNoWinConfirmText] = useState<string | undefined>()\n const [externalWinnerConfig, setExternalWinnerConfig] = useState<Partial<WinnerModalConfig> | undefined>()\n const [isAgreementChecked, setIsAgreementChecked] = useState(false)\n\n // Exposure tracking\n const containerRef = useRef<HTMLDivElement>(null)\n useExposure(containerRef, {\n componentType: LOTTERY_COMPONENT_TYPE,\n componentName: LOTTERY_COMPONENT_NAME,\n componentTitle: LOTTERY_COMPONENT_TITLE,\n })\n\n // Tracking\n const { trackingData, pageHandle } = useAiuiContext()\n\n // Modal impression tracking \u2014 fires once per open\n useEffect(() => {\n if (!showWinnerModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Winner',\n },\n })\n }, [showWinnerModal, trackingData])\n\n useEffect(() => {\n if (!showNoWinModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Better Luck Next Time',\n },\n })\n }, [showNoWinModal, trackingData])\n\n useEffect(() => {\n if (!showRulesModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Rules',\n },\n })\n }, [showRulesModal, trackingData])\n\n useEffect(() => {\n if (!showRewardsModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'My Rewards',\n },\n })\n }, [showRewardsModal, trackingData])\n\n useEffect(() => {\n if (!showShareModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Share',\n },\n })\n }, [showShareModal, trackingData])\n\n useEffect(() => {\n if (!showErrorModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Error',\n },\n })\n }, [showErrorModal, trackingData])\n\n useImperativeHandle(\n ref,\n () => ({\n showError: ({ message, title, confirmText }) => {\n setErrorMessage(message)\n setErrorTitle(title)\n setErrorConfirmText(confirmText)\n setShowErrorModal(true)\n },\n hideError: () => {\n setShowErrorModal(false)\n },\n showNoWin: config => {\n setNoWinTitle(config?.title)\n setNoWinMessage(config?.message)\n setNoWinConfirmText(config?.confirmText)\n setShowNoWinModal(true)\n },\n hideNoWin: () => {\n setShowNoWinModal(false)\n },\n showWinner: (prize, config) => {\n setWinningPrize(prize)\n setExternalWinnerConfig(config)\n setShowWinnerModal(true)\n },\n hideWinner: () => {\n setShowWinnerModal(false)\n },\n showRules: () => {\n setShowRulesModal(true)\n },\n hideRules: () => {\n setShowRulesModal(false)\n },\n showRewards: () => {\n setShowRewardsModal(true)\n },\n hideRewards: () => {\n setShowRewardsModal(false)\n },\n showShare: () => {\n setShowShareModal(true)\n },\n hideShare: () => {\n setShowShareModal(false)\n },\n hideAllModals: () => {\n setShowWinnerModal(false)\n setShowRulesModal(false)\n setShowRewardsModal(false)\n setShowErrorModal(false)\n setShowNoWinModal(false)\n setShowShareModal(false)\n },\n }),\n []\n )\n\n const handleDrawStart = useCallback(async () => {\n if (isDrawing) return\n\n if (hasAgreementNotice && !isAgreementChecked) {\n setErrorMessage(inputConfig?.agreementWarningText || 'Please agree to the terms before continuing')\n setShowErrorModal(false)\n return\n }\n\n if (!userData?.isLoggedIn) {\n onLoginRequired?.()\n return\n }\n\n if (userData.availableChances <= 0) {\n return\n }\n\n setIsDrawing(true)\n\n try {\n let prizeId: string | undefined\n\n if (onDrawStart) {\n prizeId = await onDrawStart()\n }\n\n const prize = prizes.find(p => p.prizeKey === prizeId) || prizes[0]\n setWinningPrize(prize)\n setIsDrawing(false)\n\n if (onDrawEnd) {\n onDrawEnd(prize)\n } else {\n setTimeout(() => {\n if (prize.prizeKey === 'try-again') {\n setShowNoWinModal(true)\n } else {\n setShowWinnerModal(true)\n }\n }, 300)\n }\n } catch (error) {\n setIsDrawing(false)\n setErrorMessage((error as Error).message || 'An error occurred')\n setShowErrorModal(true)\n onDrawError?.(error as Error)\n }\n }, [\n hasAgreementNotice,\n inputConfig?.agreementWarningText,\n isAgreementChecked,\n isDrawing,\n prizes,\n onDrawStart,\n onDrawEnd,\n onDrawError,\n userData,\n onLoginRequired,\n ])\n\n const handleDrawClick = useCallback(() => {\n if (!isLoggedIn) {\n onLoginRequired?.()\n return\n }\n void handleDrawStart()\n }, [handleDrawStart, isLoggedIn, onLoginRequired])\n\n const handleCloseWinnerModal = useCallback(() => {\n setShowWinnerModal(false)\n }, [])\n\n const handleCloseNoWinModal = useCallback(() => {\n setShowNoWinModal(false)\n }, [])\n\n // \u2500\u2500 TryAgain / no-win modal normalization \u2500\u2500\n const resolvedTryAgainTitle = noWinTitle || tryAgain?.title\n const resolvedTryAgainMessage = noWinMessage || tryAgain?.message\n const resolvedTryAgainConfirmText = noWinConfirmText || tryAgain?.confirmText\n\n return (\n <div\n ref={containerRef}\n className={cn('product-lottery-container', 'w-full', theme === 'dark' ? 'aiui-dark' : '', className)}\n >\n {/* ARIA Live Region */}\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {isDrawing && 'Drawing in progress...'}\n {winningPrize && !isDrawing && `Prize won: ${winningPrize.name}`}\n </div>\n\n {/* Main Content \u2014 Responsive Grid */}\n <Grid className={cn('product-lottery-main', 'tablet:mb-4 mb-3')}>\n {/* Left: Media Draw Area */}\n <GridItem\n span={hasRightPanel ? 7 : 12}\n className={cn(\n 'media-section',\n 'relative flex w-full flex-1 items-center justify-center overflow-hidden',\n 'rounded-box',\n 'laptop:min-h-[288px] min-h-[240px]',\n 'lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[759] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[516] laptop:aspect-h-[288]',\n 'l-tablet:col-span-12',\n 'l-tablet:mb-3',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <div\n className={cn(\n 'size-full px-[16px] pt-[16px]',\n 'lg-desktop:pb-[32px] lg-desktop:px-[32px]',\n 'desktop:pt-[24px] desktop:px-[24px]',\n 'laptop:pt-[16px] laptop:px-[16px]',\n 'tablet:px-[24px]',\n 'l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10',\n 'flex flex-col'\n )}\n >\n {/* Top bar: chances + rules/rewards links */}\n <div className=\"relative z-30 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3\">\n <div>\n <p className=\"text-info-primary font-[700]\">\n {resolvedOpportunitiesText?.[0]}\n <span className=\"ml-1 text-[#FF6B35]\">{availableChances}</span>\n {resolvedOpportunitiesText?.[1] || ''}\n </p>\n </div>\n <div className=\"flex items-center gap-4\">\n {rulesData && rulesData.length > 0 && (\n <button\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n setShowRulesModal(true)\n }}\n className=\"cursor-pointer touch-manipulation\"\n type=\"button\"\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${rulesText}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{rulesText}</span>\n </button>\n )}\n {rewardsData && (\n <button\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n if (!isLoggedIn) {\n onLoginRequired?.()\n return\n }\n setShowRewardsModal(true)\n }}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n type=\"button\"\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${myRewardsText}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{myRewardsText}</span>\n </button>\n )}\n {shouldShowActionButton && (\n <a\n href={trackUrlRef(\n actionButtonConfig?.url ?? '',\n buildTrackingRef(pageHandle ?? '', LOTTERY_CLICK_TYPE, LOTTERY_COMPONENT_NAME)\n )}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n if (actionButtonConfig?.url) {\n window.location.href = trackUrlRef(\n actionButtonConfig.url,\n buildTrackingRef(pageHandle ?? '', LOTTERY_CLICK_TYPE, LOTTERY_COMPONENT_NAME)\n )\n }\n }}\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${actionButtonConfig?.text}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{actionButtonConfig?.text}</span>\n </a>\n )}\n </div>\n </div>\n\n {/* Media Draw Area */}\n <MediaDrawArea\n className=\"min-h-0 w-full flex-1\"\n theme={theme}\n media={media}\n ctaButton={ctaButton}\n videoAutoPlay={videoAutoPlay}\n videoMuted={videoMuted}\n videoLoop={videoLoop}\n isDrawing={isDrawing}\n onClick={handleDrawClick}\n ctaTrackTypeName={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n ctaTrackTitleDescButton={`${LOTTERY_COMPONENT_TITLE}##${ctaButton?.text ?? ''}`}\n />\n </div>\n </GridItem>\n\n {/* Right: Chance Methods */}\n {hasRightPanel && (\n <GridItem\n span={5}\n className={cn(\n 'info-section',\n 'rounded-box',\n 'relative flex flex-col overflow-hidden',\n 'lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[536] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[364] laptop:aspect-h-[288]',\n 'l-tablet:min-h-[280px] laptop:max-h-[320px]',\n 'w-full',\n 'l-tablet:col-span-12',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <ChanceMethods\n theme={theme}\n userData={userData}\n methods={chanceMethods}\n title={chanceTitle}\n subtitle={chanceSubtitle}\n footerNote={chanceFooterNote}\n onOpenShareModal={() => setShowShareModal(true)}\n chanceBadgeText={chanceMethodsText?.chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={chanceMethodsText?.loadingText}\n mechanismType={mechanismType}\n inputConfig={{\n ...resolvedInputConfig,\n submitTrackTypeName: `${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`,\n submitTrackTitleDescButton: `${LOTTERY_COMPONENT_TITLE}##${resolvedInputConfig?.submitText ?? 'Spin and Win'}`,\n }}\n isAgreementChecked={isAgreementChecked}\n onAgreementCheckedChange={checked => {\n setIsAgreementChecked(checked)\n if (checked) {\n setErrorMessage('')\n }\n }}\n agreementErrorText={errorMessage}\n />\n </GridItem>\n )}\n </Grid>\n\n {/* Footer: Prize Pool */}\n <div\n className={cn(\n 'product-lottery-footer',\n 'rounded-box',\n 'flex flex-col overflow-hidden',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <PrizePool\n theme={theme}\n prizes={prizes}\n title={prizesTitle}\n winningInfos={winnerTickerData}\n winnerNameTemplate={winnerNameTemplate}\n />\n </div>\n\n {/* Winner Modal */}\n <WinnerModal\n isOpen={showWinnerModal}\n prize={winningPrize}\n title={externalWinnerConfig?.title || resolvedWinnerConfig.title}\n prizeTitle={externalWinnerConfig?.prizeTitle || resolvedWinnerConfig.prizeTitle}\n prizeImage={externalWinnerConfig?.prizeImage || resolvedWinnerConfig.prizeImage}\n prizeDescription={externalWinnerConfig?.prizeDescription || resolvedWinnerConfig.prizeDescription}\n winnerNote={\n externalWinnerConfig?.winnerNote ??\n winningPrize?.winnerModalConfig?.winnerNote ??\n resolvedWinnerConfig.winnerNote\n }\n learnMoreUrl={\n externalWinnerConfig?.learnMoreUrl ||\n winningPrize?.winnerModalConfig?.learnMoreUrl ||\n resolvedWinnerConfig.learnMoreUrl\n }\n learnMoreText={\n externalWinnerConfig?.learnMoreText ||\n winningPrize?.winnerModalConfig?.learnMoreText ||\n resolvedWinnerConfig.learnMoreText\n }\n couponCode={externalWinnerConfig?.couponCode || resolvedWinnerConfig.couponCode}\n expiresAt={externalWinnerConfig?.expiresAt || resolvedWinnerConfig.expiresAt}\n couponDiscount={externalWinnerConfig?.couponDiscount || resolvedWinnerConfig.couponDiscount}\n couponUnit={externalWinnerConfig?.couponUnit || resolvedWinnerConfig.couponUnit}\n confirmText={\n externalWinnerConfig?.confirmText ||\n winningPrize?.winnerModalConfig?.confirmText ||\n resolvedWinnerConfig.confirmText\n }\n confirmUrl={\n externalWinnerConfig?.confirmUrl ||\n winningPrize?.winnerModalConfig?.confirmUrl ||\n resolvedWinnerConfig.confirmUrl\n }\n copyText={externalWinnerConfig?.copyText || resolvedWinnerConfig.copyText || copyText}\n copiedText={externalWinnerConfig?.copiedText || resolvedWinnerConfig.copiedText || copiedText}\n onClose={handleCloseWinnerModal}\n theme={theme}\n />\n\n {/* Rules Modal */}\n {rulesData && rulesData.length > 0 && (\n <RulesModal\n title={rulesText}\n isOpen={showRulesModal}\n onClose={() => setShowRulesModal(false)}\n rules={rulesData}\n theme={theme}\n />\n )}\n\n {/* My Rewards Modal */}\n {rewardsData && (\n <MyRewardsModal\n isOpen={showRewardsModal}\n onClose={() => setShowRewardsModal(false)}\n rewards={rewardsData}\n onCopyCode={onCopyCode}\n codeText={codeText}\n copyText={copyText}\n copiedText={copiedText}\n prizeText={prizeText}\n emptyText={emptyText}\n copyError={copyError}\n availableText={availableText}\n usedStatusText={usedStatusText}\n expiredText={expiredText}\n notFoundText={notFoundText}\n theme={theme}\n title={myRewardsText}\n />\n )}\n\n {/* Error Modal */}\n <ErrorModal\n isOpen={showErrorModal}\n onClose={() => setShowErrorModal(false)}\n title={errorTitle || resolvedErrorConfig?.title}\n message={errorMessage || resolvedErrorConfig?.message}\n confirmText={errorConfirmText || resolvedErrorConfig?.confirmText}\n exchangeFailedTitle={resolvedErrorConfig?.exchangeFailedTitle}\n exchangeFailedMessage={resolvedErrorConfig?.exchangeFailedMessage}\n theme={theme}\n />\n\n {/* No-Win Modal */}\n <ErrorModal\n isOpen={showNoWinModal}\n onClose={handleCloseNoWinModal}\n title={resolvedTryAgainTitle}\n message={resolvedTryAgainMessage}\n confirmText={resolvedTryAgainConfirmText}\n theme={theme}\n />\n\n {/* Share Modal */}\n <ShareModal\n isOpen={showShareModal}\n onClose={() => setShowShareModal(false)}\n title={shareModalConfig?.title}\n subtitle={shareModalConfig?.subtitle}\n note={shareModalConfig?.note}\n platforms={shareModalConfig?.platforms}\n onShareSuccess={shareModalConfig?.onShareSuccess}\n theme={theme}\n />\n </div>\n )\n }\n)\n\nProductLottery.displayName = 'ProductLottery'\n\nexport default withLayout(ProductLottery)\nexport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nexport { RulesModal } from '../LotteryShared/RulesModal.js'\nexport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nexport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nexport { ShareModal } from '../LotteryShared/ShareModal.js'\nexport { BaseModal } from '../LotteryShared/BaseModal.js'\nexport type {\n ProductLotteryProps,\n ProductLotteryHandle,\n MediaConfig,\n CtaButtonConfig,\n MediaDrawAreaProps,\n} from './types.js'\nexport type {\n Prize,\n ChanceMethod,\n ChanceMethodStatus,\n WinningInfo,\n PrizePoolProps,\n ChanceMethodsProps,\n WinnerModalProps,\n WinnerModalConfig,\n UserData,\n ShareModalConfig,\n SocialPlatform,\n SharePlatformConfig,\n} from '../LotteryShared/types.js'\nexport type { RulesModalProps, RuleItem } from '../LotteryShared/RulesModal.js'\nexport type { MyRewardsModalProps, Reward, RewardStatus } from '../LotteryShared/MyRewardsModal.js'\nexport type { ErrorModalProps } from '../LotteryShared/ErrorModal.js'\nexport type { ShareModalProps } from '../LotteryShared/ShareModal.js'\nexport type { BaseModalProps } from '../LotteryShared/BaseModal.js'\nexport type { ContainerProps } from '../../shared/Styles.js'\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use client'\n\nimport { useState, useCallback, useImperativeHandle, forwardRef, useEffect, useRef } from 'react'\nimport { cn } from '../../helpers/index.js'\nimport { DEFAULT_CHANCE_TITLE } from './types.js'\nimport { DEFAULT_CHANCE_METHODS } from '../LotteryShared/types.js'\nimport { Grid, GridItem } from '../../components/grid.js'\nimport { MediaDrawArea } from './MediaDrawArea.js'\nimport { PrizePool } from '../LotteryShared/PrizePool.js'\nimport { ChanceMethods } from '../LotteryShared/ChanceMethods.js'\nimport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nimport { RulesModal } from '../LotteryShared/RulesModal.js'\nimport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nimport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nimport { ShareModal } from '../LotteryShared/ShareModal.js'\nimport { withLayout } from '../../shared/Styles.js'\nimport { gaTrack } from '../../shared/track.js'\nimport { useAiuiContext } from '../AiuiProvider/index.js'\nimport { useExposure } from '../../hooks/useExposure.js'\nimport { trackUrlRef, buildTrackingRef } from '../../shared/trackUrlRef.js'\n\nimport type { ProductLotteryProps, ProductLotteryHandle } from './types.js'\nimport type { Prize, WinnerModalConfig, ChanceInputConfig } from '../LotteryShared/types.js'\n\nconst LOTTERY_COMPONENT_TYPE = 'image'\nconst LOTTERY_COMPONENT_NAME = 'lottery_banner'\nconst LOTTERY_COMPONENT_TITLE = '\u4EA7\u54C1\u62BD\u5956'\nconst LOTTERY_CLICK_TYPE = 'copy'\nconst LOTTERY_MODAL_COMPONENT_NAME = 'lottery_pop'\nconst LOTTERY_MODAL_COMPONENT_TYPE = 'image'\n\nexport const ProductLottery = forwardRef<ProductLotteryHandle, ProductLotteryProps>(\n (\n {\n prizes,\n media,\n theme,\n ctaButton,\n videoAutoPlay,\n videoMuted,\n videoLoop,\n chanceMethods = DEFAULT_CHANCE_METHODS,\n chanceTitle = DEFAULT_CHANCE_TITLE,\n chanceSubtitle,\n chanceFooterNote,\n chanceMethodsText,\n mechanismType,\n inputConfig,\n inputPlaceholder,\n inputSubmitText,\n inputType,\n inputValidationErrorText,\n winnerTickerData = [],\n winningInfos,\n winnerNameTemplate,\n prizesTitle,\n onDrawStart,\n onDrawEnd,\n onDrawError,\n winnerModalConfig,\n rulesModalConfig = {},\n actionButtonConfig,\n myRewardsModalConfig = {},\n errorModalConfig = {},\n shareModalConfig = {},\n error,\n tryAgain,\n userData,\n loginPrompt,\n loginPromptText = 'Please log in to participate',\n loginButtonText = 'Log In',\n onLoginRequired,\n onCopyCode,\n opportunitiesPrefix,\n opportunitiesText = ['Number of draws remaining today:'],\n dealsType,\n className,\n },\n ref\n ) => {\n // \u2500\u2500 CMS field normalization \u2500\u2500\n // CMS-primary strategy: CMS fields take precedence over legacy backward-compat fields.\n // If a CMS field is provided, it overrides the corresponding legacy field.\n const resolvedLoginPrompt = loginPrompt ?? loginPromptText ?? 'Please log in to participate'\n const resolvedOpportunitiesText: string[] = opportunitiesPrefix\n ? [opportunitiesPrefix]\n : (opportunitiesText ?? ['Number of draws remaining today:'])\n const resolvedInputConfig: ChanceInputConfig | undefined =\n inputPlaceholder || inputSubmitText || inputType || inputValidationErrorText\n ? {\n ...(inputConfig ?? {}),\n placeholder: inputPlaceholder ?? inputConfig?.placeholder ?? 'Enter your order number',\n submitText: inputSubmitText ?? inputConfig?.submitText ?? 'Spin and Win',\n inputType: inputType ?? inputConfig?.inputType ?? 'text',\n validationErrorText: inputValidationErrorText ?? inputConfig?.validationErrorText,\n }\n : inputConfig\n const resolvedErrorConfig = error\n ? {\n title: error.title ?? errorModalConfig?.title,\n message: error.defaultMessage ?? errorModalConfig?.message,\n confirmText: error.confirmButton ?? errorModalConfig?.confirmText,\n exchangeFailedTitle: error.exchangeFailedTitle,\n exchangeFailedMessage: error.exchangeFailedMessage,\n }\n : errorModalConfig\n const resolvedWinnerConfig: WinnerModalConfig = {\n ...winningInfos,\n ...winnerModalConfig,\n confirmText: winnerModalConfig?.confirmText ?? winningInfos?.confirmButton,\n }\n\n const { rulesData, rulesText = 'Rules' } = rulesModalConfig\n const shouldShowActionButton = Boolean(actionButtonConfig?.text && actionButtonConfig?.url)\n const {\n rewardsData,\n myRewardsText = 'My Rewards',\n codeText = 'CODE:',\n copyText = 'COPY',\n copiedText = 'COPIED',\n prizeText = 'Prize time:',\n emptyText,\n copyError,\n availableText,\n usedStatusText,\n expiredText,\n notFoundText,\n } = myRewardsModalConfig\n const completedText = chanceMethodsText?.completedText\n const usedText = chanceMethodsText?.usedText\n const isLoggedIn = userData?.isLoggedIn ?? false\n const availableChances = userData?.availableChances ?? 0\n const hasRightPanel = chanceMethods.length > 0 || mechanismType === 'input'\n const hasAgreementNotice = mechanismType === 'input' && Boolean(inputConfig?.agreementNotice)\n\n // State\n const [isDrawing, setIsDrawing] = useState(false)\n const [winningPrize, setWinningPrize] = useState<Prize | null>(null)\n const [showWinnerModal, setShowWinnerModal] = useState(false)\n const [showRulesModal, setShowRulesModal] = useState(false)\n const [showRewardsModal, setShowRewardsModal] = useState(false)\n const [showErrorModal, setShowErrorModal] = useState(false)\n const [showNoWinModal, setShowNoWinModal] = useState(false)\n const [showShareModal, setShowShareModal] = useState(false)\n const [errorMessage, setErrorMessage] = useState('')\n const [errorTitle, setErrorTitle] = useState<string | undefined>()\n const [errorConfirmText, setErrorConfirmText] = useState<string | undefined>()\n const [noWinTitle, setNoWinTitle] = useState<string | undefined>()\n const [noWinMessage, setNoWinMessage] = useState<string | undefined>()\n const [noWinConfirmText, setNoWinConfirmText] = useState<string | undefined>()\n const [externalWinnerConfig, setExternalWinnerConfig] = useState<Partial<WinnerModalConfig> | undefined>()\n const [isAgreementChecked, setIsAgreementChecked] = useState(false)\n\n // Exposure tracking\n const containerRef = useRef<HTMLDivElement>(null)\n useExposure(containerRef, {\n componentType: LOTTERY_COMPONENT_TYPE,\n componentName: LOTTERY_COMPONENT_NAME,\n componentTitle: LOTTERY_COMPONENT_TITLE,\n })\n\n // Tracking\n const { trackingData, pageHandle } = useAiuiContext()\n\n // Modal impression tracking \u2014 fires once per open\n useEffect(() => {\n if (!showWinnerModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Winner',\n },\n })\n }, [showWinnerModal, trackingData])\n\n useEffect(() => {\n if (!showNoWinModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Better Luck Next Time',\n },\n })\n }, [showNoWinModal, trackingData])\n\n useEffect(() => {\n if (!showRulesModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Rules',\n },\n })\n }, [showRulesModal, trackingData])\n\n useEffect(() => {\n if (!showRewardsModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'My Rewards',\n },\n })\n }, [showRewardsModal, trackingData])\n\n useEffect(() => {\n if (!showShareModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Share',\n },\n })\n }, [showShareModal, trackingData])\n\n useEffect(() => {\n if (!showErrorModal) return\n gaTrack({\n event: 'ga4Event',\n event_name: 'component_impression',\n event_parameters: {\n page_group: trackingData?.pageGroup || 'Home Page',\n component_type: LOTTERY_MODAL_COMPONENT_TYPE,\n component_name: LOTTERY_MODAL_COMPONENT_NAME,\n component_title: 'Error',\n },\n })\n }, [showErrorModal, trackingData])\n\n useImperativeHandle(\n ref,\n () => ({\n showError: ({ message, title, confirmText }) => {\n setErrorMessage(message)\n setErrorTitle(title)\n setErrorConfirmText(confirmText)\n setShowErrorModal(true)\n },\n hideError: () => {\n setShowErrorModal(false)\n },\n showNoWin: config => {\n setNoWinTitle(config?.title)\n setNoWinMessage(config?.message)\n setNoWinConfirmText(config?.confirmText)\n setShowNoWinModal(true)\n },\n hideNoWin: () => {\n setShowNoWinModal(false)\n },\n showWinner: (prize, config) => {\n setWinningPrize(prize)\n setExternalWinnerConfig(config)\n setShowWinnerModal(true)\n },\n hideWinner: () => {\n setShowWinnerModal(false)\n },\n showRules: () => {\n setShowRulesModal(true)\n },\n hideRules: () => {\n setShowRulesModal(false)\n },\n showRewards: () => {\n setShowRewardsModal(true)\n },\n hideRewards: () => {\n setShowRewardsModal(false)\n },\n showShare: () => {\n setShowShareModal(true)\n },\n hideShare: () => {\n setShowShareModal(false)\n },\n hideAllModals: () => {\n setShowWinnerModal(false)\n setShowRulesModal(false)\n setShowRewardsModal(false)\n setShowErrorModal(false)\n setShowNoWinModal(false)\n setShowShareModal(false)\n },\n }),\n []\n )\n\n const handleDrawStart = useCallback(async () => {\n if (isDrawing) return\n\n if (hasAgreementNotice && !isAgreementChecked) {\n setErrorMessage(inputConfig?.agreementWarningText || 'Please agree to the terms before continuing')\n setShowErrorModal(false)\n return\n }\n\n if (!userData?.isLoggedIn) {\n onLoginRequired?.()\n return\n }\n\n if (userData.availableChances <= 0) {\n return\n }\n\n setIsDrawing(true)\n\n try {\n let prizeId: string | undefined\n\n if (onDrawStart) {\n prizeId = await onDrawStart()\n }\n\n const prize = prizes.find(p => p.prizeKey === prizeId) || prizes[0]\n setWinningPrize(prize)\n setIsDrawing(false)\n\n if (onDrawEnd) {\n onDrawEnd(prize)\n } else {\n setTimeout(() => {\n if (prize.prizeKey === 'try-again') {\n setShowNoWinModal(true)\n } else {\n setShowWinnerModal(true)\n }\n }, 300)\n }\n } catch (error) {\n setIsDrawing(false)\n setErrorMessage((error as Error).message || 'An error occurred')\n setShowErrorModal(true)\n onDrawError?.(error as Error)\n }\n }, [\n hasAgreementNotice,\n inputConfig?.agreementWarningText,\n isAgreementChecked,\n isDrawing,\n prizes,\n onDrawStart,\n onDrawEnd,\n onDrawError,\n userData,\n onLoginRequired,\n ])\n\n const handleDrawClick = useCallback(() => {\n if (!isLoggedIn) {\n onLoginRequired?.()\n return\n }\n void handleDrawStart()\n }, [handleDrawStart, isLoggedIn, onLoginRequired])\n\n const handleCloseWinnerModal = useCallback(() => {\n setShowWinnerModal(false)\n }, [])\n\n const handleCloseNoWinModal = useCallback(() => {\n setShowNoWinModal(false)\n }, [])\n\n // \u2500\u2500 TryAgain / no-win modal normalization \u2500\u2500\n const resolvedTryAgainTitle = noWinTitle || tryAgain?.title\n const resolvedTryAgainMessage = noWinMessage || tryAgain?.message\n const resolvedTryAgainConfirmText = noWinConfirmText || tryAgain?.confirmText\n\n return (\n <div\n ref={containerRef}\n className={cn('product-lottery-container', 'w-full', theme === 'dark' ? 'aiui-dark' : '', className)}\n >\n {/* ARIA Live Region */}\n <div role=\"status\" aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\">\n {isDrawing && 'Drawing in progress...'}\n {winningPrize && !isDrawing && `Prize won: ${winningPrize.name}`}\n </div>\n\n {/* Main Content \u2014 Responsive Grid */}\n <Grid className={cn('product-lottery-main', 'tablet:mb-4 mb-3')}>\n {/* Left: Media Draw Area */}\n <GridItem\n span={hasRightPanel ? 7 : 12}\n className={cn(\n 'media-section',\n 'relative flex w-full flex-1 items-center justify-center overflow-hidden',\n 'rounded-box',\n 'laptop:min-h-[288px] min-h-[240px]',\n 'lg-desktop:aspect-w-[964] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[759] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[516] laptop:aspect-h-[288]',\n 'l-tablet:col-span-12',\n 'l-tablet:mb-3',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <div\n className={cn(\n 'size-full px-[16px] pt-[16px]',\n 'lg-desktop:pb-[32px] lg-desktop:px-[32px]',\n 'desktop:pt-[24px] desktop:px-[24px]',\n 'laptop:pt-[16px] laptop:px-[16px]',\n 'tablet:px-[24px]',\n 'l-tablet:absolute l-tablet:top-0 l-tablet:inset-x-0 l-tablet:z-10',\n 'flex flex-col'\n )}\n >\n {/* Top bar: chances + rules/rewards links */}\n <div className=\"relative z-30 mb-2 flex max-h-[24px] w-full flex-wrap items-center justify-between gap-3\">\n <div>\n <p className=\"text-info-primary font-[700]\">\n {resolvedOpportunitiesText?.[0]}\n <span className=\"ml-1 text-[#FF6B35]\">{availableChances}</span>\n {resolvedOpportunitiesText?.[1] || ''}\n </p>\n </div>\n <div className=\"flex items-center gap-4\">\n {rulesData && rulesData.length > 0 && (\n <button\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n setShowRulesModal(true)\n }}\n className=\"cursor-pointer touch-manipulation\"\n type=\"button\"\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${rulesText}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{rulesText}</span>\n </button>\n )}\n {rewardsData && (\n <button\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n if (!isLoggedIn) {\n onLoginRequired?.()\n return\n }\n setShowRewardsModal(true)\n }}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n type=\"button\"\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${myRewardsText}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{myRewardsText}</span>\n </button>\n )}\n {shouldShowActionButton && (\n <a\n href={trackUrlRef(\n actionButtonConfig?.url ?? '',\n buildTrackingRef(pageHandle ?? '', LOTTERY_CLICK_TYPE, LOTTERY_COMPONENT_NAME)\n )}\n className=\"cursor-pointer touch-manipulation whitespace-nowrap\"\n onClick={e => {\n e.preventDefault()\n e.stopPropagation()\n if (actionButtonConfig?.url) {\n window.location.href = trackUrlRef(\n actionButtonConfig.url,\n buildTrackingRef(pageHandle ?? '', LOTTERY_CLICK_TYPE, LOTTERY_COMPONENT_NAME)\n )\n }\n }}\n data-headless-type-name={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n data-headless-title-desc-button={`${LOTTERY_COMPONENT_TITLE}##${actionButtonConfig?.text}`}\n >\n <span className=\"text-info-primary font-[700] underline\">{actionButtonConfig?.text}</span>\n </a>\n )}\n </div>\n </div>\n\n {/* Media Draw Area */}\n <MediaDrawArea\n className=\"min-h-0 w-full flex-1\"\n theme={theme}\n media={media}\n ctaButton={ctaButton}\n videoAutoPlay={videoAutoPlay}\n videoMuted={videoMuted}\n videoLoop={videoLoop}\n isDrawing={isDrawing}\n onClick={handleDrawClick}\n ctaTrackTypeName={`${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`}\n ctaTrackTitleDescButton={`${LOTTERY_COMPONENT_TITLE}##${ctaButton?.text ?? ''}`}\n />\n </div>\n </GridItem>\n\n {/* Right: Chance Methods */}\n {hasRightPanel && (\n <GridItem\n span={5}\n className={cn(\n 'info-section',\n 'rounded-box',\n 'relative flex flex-col overflow-hidden',\n 'lg-desktop:aspect-w-[684] lg-desktop:aspect-h-[480]',\n 'desktop:aspect-w-[536] desktop:aspect-h-[384]',\n 'laptop:aspect-w-[364] laptop:aspect-h-[288]',\n 'l-tablet:min-h-[280px] laptop:max-h-[320px]',\n 'w-full',\n 'l-tablet:col-span-12',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <ChanceMethods\n theme={theme}\n userData={userData}\n methods={chanceMethods}\n title={chanceTitle}\n subtitle={chanceSubtitle}\n footerNote={chanceFooterNote}\n onOpenShareModal={() => setShowShareModal(true)}\n chanceBadgeText={chanceMethodsText?.chanceBadgeText}\n completedText={completedText}\n usedText={usedText}\n loadingText={chanceMethodsText?.loadingText}\n mechanismType={mechanismType}\n inputConfig={{\n ...resolvedInputConfig,\n submitTrackTypeName: `${LOTTERY_CLICK_TYPE}#${LOTTERY_COMPONENT_NAME}`,\n submitTrackTitleDescButton: `${LOTTERY_COMPONENT_TITLE}##${resolvedInputConfig?.submitText ?? 'Spin and Win'}`,\n }}\n isAgreementChecked={isAgreementChecked}\n onAgreementCheckedChange={checked => {\n setIsAgreementChecked(checked)\n if (checked) {\n setErrorMessage('')\n }\n }}\n agreementErrorText={errorMessage}\n />\n </GridItem>\n )}\n </Grid>\n\n {/* Footer: Prize Pool */}\n <div\n className={cn(\n 'product-lottery-footer',\n 'rounded-box',\n 'flex flex-col overflow-hidden',\n theme === 'dark' ? 'bg-[#1E2024]' : 'bg-[#EAEAEC]'\n )}\n >\n <PrizePool\n theme={theme}\n prizes={prizes}\n title={prizesTitle}\n winningInfos={winnerTickerData}\n winnerNameTemplate={winnerNameTemplate}\n />\n </div>\n\n {/* Winner Modal */}\n <WinnerModal\n isOpen={showWinnerModal}\n prize={winningPrize}\n title={externalWinnerConfig?.title || resolvedWinnerConfig.title}\n prizeTitle={externalWinnerConfig?.prizeTitle || resolvedWinnerConfig.prizeTitle}\n prizeImage={externalWinnerConfig?.prizeImage || resolvedWinnerConfig.prizeImage}\n prizeDescription={externalWinnerConfig?.prizeDescription || resolvedWinnerConfig.prizeDescription}\n winnerNote={\n externalWinnerConfig?.winnerNote ??\n winningPrize?.winnerModalConfig?.winnerNote ??\n resolvedWinnerConfig.winnerNote\n }\n learnMoreUrl={\n externalWinnerConfig?.learnMoreUrl ||\n winningPrize?.winnerModalConfig?.learnMoreUrl ||\n resolvedWinnerConfig.learnMoreUrl\n }\n learnMoreText={\n externalWinnerConfig?.learnMoreText ||\n winningPrize?.winnerModalConfig?.learnMoreText ||\n resolvedWinnerConfig.learnMoreText\n }\n couponCode={externalWinnerConfig?.couponCode || resolvedWinnerConfig.couponCode}\n expiresAt={externalWinnerConfig?.expiresAt || resolvedWinnerConfig.expiresAt}\n expiresAtLabel={externalWinnerConfig?.expiresAtLabel || resolvedWinnerConfig.expiresAtLabel}\n couponDiscount={externalWinnerConfig?.couponDiscount || resolvedWinnerConfig.couponDiscount}\n couponUnit={externalWinnerConfig?.couponUnit || resolvedWinnerConfig.couponUnit}\n confirmText={\n externalWinnerConfig?.confirmText ||\n winningPrize?.winnerModalConfig?.confirmText ||\n resolvedWinnerConfig.confirmText\n }\n confirmUrl={\n externalWinnerConfig?.confirmUrl ||\n winningPrize?.winnerModalConfig?.confirmUrl ||\n resolvedWinnerConfig.confirmUrl\n }\n copyText={externalWinnerConfig?.copyText || resolvedWinnerConfig.copyText || copyText}\n copiedText={externalWinnerConfig?.copiedText || resolvedWinnerConfig.copiedText || copiedText}\n onClose={handleCloseWinnerModal}\n theme={theme}\n />\n\n {/* Rules Modal */}\n {rulesData && rulesData.length > 0 && (\n <RulesModal\n title={rulesText}\n isOpen={showRulesModal}\n onClose={() => setShowRulesModal(false)}\n rules={rulesData}\n theme={theme}\n />\n )}\n\n {/* My Rewards Modal */}\n {rewardsData && (\n <MyRewardsModal\n isOpen={showRewardsModal}\n onClose={() => setShowRewardsModal(false)}\n rewards={rewardsData}\n onCopyCode={onCopyCode}\n codeText={codeText}\n copyText={copyText}\n copiedText={copiedText}\n prizeText={prizeText}\n emptyText={emptyText}\n copyError={copyError}\n availableText={availableText}\n usedStatusText={usedStatusText}\n expiredText={expiredText}\n notFoundText={notFoundText}\n theme={theme}\n title={myRewardsText}\n />\n )}\n\n {/* Error Modal */}\n <ErrorModal\n isOpen={showErrorModal}\n onClose={() => setShowErrorModal(false)}\n title={errorTitle || resolvedErrorConfig?.title}\n message={errorMessage || resolvedErrorConfig?.message}\n confirmText={errorConfirmText || resolvedErrorConfig?.confirmText}\n exchangeFailedTitle={resolvedErrorConfig?.exchangeFailedTitle}\n exchangeFailedMessage={resolvedErrorConfig?.exchangeFailedMessage}\n theme={theme}\n />\n\n {/* No-Win Modal */}\n <ErrorModal\n isOpen={showNoWinModal}\n onClose={handleCloseNoWinModal}\n title={resolvedTryAgainTitle}\n message={resolvedTryAgainMessage}\n confirmText={resolvedTryAgainConfirmText}\n theme={theme}\n />\n\n {/* Share Modal */}\n <ShareModal\n isOpen={showShareModal}\n onClose={() => setShowShareModal(false)}\n title={shareModalConfig?.title}\n subtitle={shareModalConfig?.subtitle}\n note={shareModalConfig?.note}\n platforms={shareModalConfig?.platforms}\n onShareSuccess={shareModalConfig?.onShareSuccess}\n theme={theme}\n />\n </div>\n )\n }\n)\n\nProductLottery.displayName = 'ProductLottery'\n\nexport default withLayout(ProductLottery)\nexport { WinnerModal } from '../LotteryShared/WinnerModal.js'\nexport { RulesModal } from '../LotteryShared/RulesModal.js'\nexport { MyRewardsModal } from '../LotteryShared/MyRewardsModal.js'\nexport { ErrorModal } from '../LotteryShared/ErrorModal.js'\nexport { ShareModal } from '../LotteryShared/ShareModal.js'\nexport { BaseModal } from '../LotteryShared/BaseModal.js'\nexport type {\n ProductLotteryProps,\n ProductLotteryHandle,\n MediaConfig,\n CtaButtonConfig,\n MediaDrawAreaProps,\n} from './types.js'\nexport type {\n Prize,\n ChanceMethod,\n ChanceMethodStatus,\n WinningInfo,\n PrizePoolProps,\n ChanceMethodsProps,\n WinnerModalProps,\n WinnerModalConfig,\n UserData,\n ShareModalConfig,\n SocialPlatform,\n SharePlatformConfig,\n} from '../LotteryShared/types.js'\nexport type { RulesModalProps, RuleItem } from '../LotteryShared/RulesModal.js'\nexport type { MyRewardsModalProps, Reward, RewardStatus } from '../LotteryShared/MyRewardsModal.js'\nexport type { ErrorModalProps } from '../LotteryShared/ErrorModal.js'\nexport type { ShareModalProps } from '../LotteryShared/ShareModal.js'\nexport type { BaseModalProps } from '../LotteryShared/BaseModal.js'\nexport type { ContainerProps } from '../../shared/Styles.js'\n"],
5
+ "mappings": "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",
6
6
  "names": ["ProductLottery_exports", "__export", "ProductLottery", "ProductLottery_default", "__toCommonJS", "import_jsx_runtime", "import_react", "import_helpers", "import_types", "import_grid", "import_MediaDrawArea", "import_PrizePool", "import_ChanceMethods", "import_WinnerModal", "import_RulesModal", "import_MyRewardsModal", "import_ErrorModal", "import_ShareModal", "import_Styles", "import_track", "import_AiuiProvider", "import_useExposure", "import_trackUrlRef", "import_BaseModal", "LOTTERY_COMPONENT_TYPE", "LOTTERY_COMPONENT_NAME", "LOTTERY_COMPONENT_TITLE", "LOTTERY_CLICK_TYPE", "LOTTERY_MODAL_COMPONENT_NAME", "LOTTERY_MODAL_COMPONENT_TYPE", "prizes", "media", "theme", "ctaButton", "videoAutoPlay", "videoMuted", "videoLoop", "chanceMethods", "chanceTitle", "chanceSubtitle", "chanceFooterNote", "chanceMethodsText", "mechanismType", "inputConfig", "inputPlaceholder", "inputSubmitText", "inputType", "inputValidationErrorText", "winnerTickerData", "winningInfos", "winnerNameTemplate", "prizesTitle", "onDrawStart", "onDrawEnd", "onDrawError", "winnerModalConfig", "rulesModalConfig", "actionButtonConfig", "myRewardsModalConfig", "errorModalConfig", "shareModalConfig", "error", "tryAgain", "userData", "loginPrompt", "loginPromptText", "loginButtonText", "onLoginRequired", "onCopyCode", "opportunitiesPrefix", "opportunitiesText", "dealsType", "className", "ref", "resolvedLoginPrompt", "resolvedOpportunitiesText", "resolvedInputConfig", "resolvedErrorConfig", "resolvedWinnerConfig", "rulesData", "rulesText", "shouldShowActionButton", "rewardsData", "myRewardsText", "codeText", "copyText", "copiedText", "prizeText", "emptyText", "copyError", "availableText", "usedStatusText", "expiredText", "notFoundText", "completedText", "usedText", "isLoggedIn", "availableChances", "hasRightPanel", "hasAgreementNotice", "isDrawing", "setIsDrawing", "winningPrize", "setWinningPrize", "showWinnerModal", "setShowWinnerModal", "showRulesModal", "setShowRulesModal", "showRewardsModal", "setShowRewardsModal", "showErrorModal", "setShowErrorModal", "showNoWinModal", "setShowNoWinModal", "showShareModal", "setShowShareModal", "errorMessage", "setErrorMessage", "errorTitle", "setErrorTitle", "errorConfirmText", "setErrorConfirmText", "noWinTitle", "setNoWinTitle", "noWinMessage", "setNoWinMessage", "noWinConfirmText", "setNoWinConfirmText", "externalWinnerConfig", "setExternalWinnerConfig", "isAgreementChecked", "setIsAgreementChecked", "containerRef", "trackingData", "pageHandle", "message", "title", "confirmText", "config", "prize", "handleDrawStart", "prizeId", "p", "handleDrawClick", "handleCloseWinnerModal", "handleCloseNoWinModal", "resolvedTryAgainTitle", "resolvedTryAgainMessage", "resolvedTryAgainConfirmText", "e", "checked"]
7
7
  }