@zencemarketing/spin-scratch-sdk 0.1.0-alpha.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.esm.mjs","sources":["../src/styles.js","../src/utils.js","../src/SpinWheel.js","../src/SpinWheelReact.js","../src/scratchStyles.js","../src/ScratchCard.js","../src/ScratchCardReact.js","../src/react.js"],"sourcesContent":["/**\n * Generates the full SDK stylesheet as a string, interpolated with theme colors.\n * @param {object} config - Style configuration object\n * @param {object} config.theme - Theme colors\n * @param {string} [config.titleColor] - Custom title color\n * @param {string} [config.subtitleColor] - Custom subtitle color\n * @param {string} [config.backgroundColor] - Custom background color\n * @param {string} [config.backgroundImage] - Custom background image URL\n * @param {string} [config.ringColor] - Custom ring color\n * @param {boolean} [config.ringShadow] - Enable ring shadow\n * @param {boolean} [config.ringAnimation] - Enable ring animation\n * @param {string} [config.pointerColor] - Custom pointer color\n * @param {string} [config.buttonColor] - Custom button color\n * @param {boolean} [config.buttonShadow] - Enable button shadow\n * @param {boolean} [config.buttonAnimation] - Enable button animation\n * @param {string} [config.winCardRedeemButtonColorTop] - Redeem button gradient top\n * @param {string} [config.winCardRedeemButtonColorBottom] - Redeem button gradient bottom\n * @param {string} [config.winCardRedeemButtonTextColor] - Redeem button text color\n * @param {function} hexToRGBA\n * @returns {string}\n */\nexport function buildCSS(config, hexToRGBA) {\n const t = config.theme || {};\n \n // Extract theme colors with fallbacks\n const gold = t.gold || '#e8c547';\n const goldLight = t.goldLight || '#f5d76e';\n const goldDark = t.goldDark || '#c9a227';\n const bgDark = t.bgDark || '#0d0d12';\n const textMuted = t.textMuted || '#9ca3af';\n \n // Configurable colors\n const titleColor = config.titleColor || goldLight;\n const subtitleColor = config.subtitleColor || textMuted;\n const ringColor = config.ringColor || gold;\n const pointerColor = config.pointerColor || gold;\n const buttonBaseColor = config.buttonColor || gold;\n const redeemBtnTop = config.winCardRedeemButtonColorTop || '#15803d';\n const redeemBtnBottom = config.winCardRedeemButtonColorBottom || '#166534';\n const redeemBtnText = config.winCardRedeemButtonTextColor || '#ffffff';\n \n // Feature toggles\n const ringShadow = config.ringShadow !== false;\n const ringAnimation = config.ringAnimation !== false;\n const buttonShadow = config.buttonShadow !== false;\n const buttonAnimation = config.buttonAnimation !== false;\n \n // Computed values\n const glow = hexToRGBA(gold, 0.4);\n const ringGlow = hexToRGBA(ringColor, 0.4);\n const buttonGlow = hexToRGBA(buttonBaseColor, 0.4);\n \n // Background styles\n const bgStyle = config.backgroundColor \n ? `background-color:${config.backgroundColor};` \n : '';\n const bgImageStyle = config.backgroundImage \n ? `background-image:url('${config.backgroundImage}');background-size:cover;background-position:center;` \n : '';\n\n // Ring shadow and animation\n const ringBoxShadow = ringShadow \n ? `box-shadow:0 0 0 2px rgba(0,0,0,.5), 0 0 50px ${ringGlow}, inset 0 2px 4px rgba(255,255,255,.35), inset 0 -2px 4px rgba(0,0,0,.2);`\n : `box-shadow:0 0 0 2px rgba(0,0,0,.5), inset 0 2px 4px rgba(255,255,255,.35), inset 0 -2px 4px rgba(0,0,0,.2);`;\n \n const ringAnimationCSS = ringAnimation \n ? `animation:sw-ring-pulse 3s ease-in-out infinite;` \n : '';\n\n // Button shadow and animation\n const buttonBoxShadow = buttonShadow\n ? `box-shadow:0 4px 0 ${goldDark}, 0 6px 20px ${buttonGlow}, inset 0 1px 0 rgba(255,255,255,.3);`\n : `box-shadow:0 4px 0 ${goldDark}, inset 0 1px 0 rgba(255,255,255,.3);`;\n \n const buttonHoverStyle = buttonAnimation\n ? `.sw-spin-btn:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 6px 0 ${goldDark},0 8px 28px ${buttonGlow},inset 0 1px 0 rgba(255,255,255,.3)}`\n : `.sw-spin-btn:hover:not(:disabled){filter:brightness(1.05)}`;\n \n const buttonActiveStyle = buttonAnimation\n ? `.sw-spin-btn:active:not(:disabled){transform:translateY(2px);box-shadow:0 2px 0 ${goldDark},0 4px 15px ${buttonGlow},inset 0 1px 0 rgba(255,255,255,.2)}`\n : `.sw-spin-btn:active:not(:disabled){transform:translateY(1px)}`;\n\n return `\n/* === SpinWheel SDK v2.1 === */\n@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:wght@700;800&family=Outfit:wght@300;500;600;700&display=swap');\n\n.sw-root *, .sw-overlay * { margin:0; padding:0; box-sizing:border-box; }\n\n.sw-root {\n font-family:'Outfit',sans-serif;\n display:flex; flex-direction:column; align-items:center; width:100%;\n ${bgStyle}\n ${bgImageStyle}\n}\n\n/* ── header ── */\n.sw-header { text-align:center; margin-bottom:.5rem; }\n.sw-title {\n font-family:'Playfair Display',serif;\n font-size:clamp(2rem,6vw,3.5rem); font-weight:800; letter-spacing:.02em;\n}\n.sw-title .sw-spin-text {\n color:${titleColor};\n text-shadow:0 0 30px ${hexToRGBA(titleColor, 0.4)}, 0 0 60px ${hexToRGBA(titleColor, 0.2)};\n}\n.sw-title .sw-win-text { color:${goldDark}; }\n.sw-subtitle { margin-top:.5rem; color:${subtitleColor}; font-size:1rem; font-weight:300; }\n\n/* ── wheel ── */\n.sw-wheel-container {\n position:relative; width:min(340px,90vw); aspect-ratio:1; margin:2rem; padding-top:28px;\n}\n.sw-wheel-outer {\n position:absolute; inset:-10px; border-radius:50%;\n background:linear-gradient(145deg,${goldLight} 0%,${ringColor} 25%,${goldDark} 50%,${ringColor} 75%,${goldDark} 100%);\n padding:8px;\n ${ringBoxShadow}\n ${ringAnimationCSS}\n}\n${ringAnimation ? `\n@keyframes sw-ring-pulse {\n 0%,100%{box-shadow:0 0 0 2px rgba(0,0,0,.5),0 0 50px ${ringGlow},inset 0 2px 4px rgba(255,255,255,.35),inset 0 -2px 4px rgba(0,0,0,.2)}\n 50%{box-shadow:0 0 0 2px rgba(0,0,0,.5),0 0 65px ${hexToRGBA(ringColor, 0.5)},inset 0 2px 6px rgba(255,255,255,.4),inset 0 -2px 4px rgba(0,0,0,.2)}\n}` : ''}\n.sw-wheel-inner {\n width:100%; height:100%; border-radius:50%; overflow:hidden;\n position:relative; background:transparent;\n box-shadow:inset 0 0 0 3px rgba(0,0,0,.6);\n}\n.sw-wheel {\n width:100%; height:100%; border-radius:50%; position:relative;\n transition:transform .1s linear; will-change:transform;\n}\n.sw-wheel.sw-spinning { transition:none; }\n\n/* ── hub ── */\n.sw-wheel-hub {\n position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);\n width:20%; height:20%; min-width:52px; min-height:52px; border-radius:50%;\n background:linear-gradient(145deg,${goldLight} 0%,${gold} 40%,${goldDark} 100%);\n box-shadow:0 3px 12px rgba(0,0,0,.4), inset 0 2px 4px rgba(255,255,255,.4), inset 0 -1px 2px rgba(0,0,0,.2);\n display:flex; flex-direction:column; align-items:center; justify-content:center;\n z-index:10; cursor:pointer; transition:transform .15s ease, filter .15s ease;\n}\n.sw-wheel-hub:hover { transform:translate(-50%,-50%) scale(1.05); filter:brightness(1.1); }\n.sw-wheel-hub:active { transform:translate(-50%,-50%) scale(.98); }\n.sw-wheel-hub-icon { font-size:12px; color:#1a1a1f; line-height:1; margin-bottom:1px; }\n.sw-wheel-hub-brand { font-size:8px; font-weight:700; color:#1a1a1f; letter-spacing:.02em; text-transform:lowercase; }\n.sw-wheel-hub-brand::first-letter { text-transform:uppercase; }\n\n/* ── segments ── */\n.sw-segment {\n position:absolute; width:50%; height:50%; left:50%; top:50%;\n transform-origin:0% 0%; display:flex; align-items:center; justify-content:center; border:none;\n}\n.sw-segment-content {\n position:absolute; width:70%; top:30%; text-align:center; color:#000; font-weight:600;\n font-size:clamp(.6rem,2vw,.8rem); text-shadow:0 1px 3px rgb(220 220 220/50%);\n display:flex; flex-direction:row; align-items:center; justify-content:center;\n gap:4px; word-wrap:break-word; left:30%;\n}\n.sw-segment-icon { font-size:1em; line-height:1; flex-shrink:0; }\n.sw-segment-label { display:inline-block; }\n\n/* ── pointer ── */\n.sw-pointer {\n position:absolute; top:4px; left:50%; transform:translateX(-50%); z-index:20; width:0; height:0;\n}\n.sw-pointer-outer {\n position:absolute; left:50%; transform:translateX(-50%); width:0; height:0;\n border-left:22px solid transparent; border-right:22px solid transparent;\n border-top:36px solid ${pointerColor};\n filter:drop-shadow(0 3px 8px rgba(0,0,0,.5)) drop-shadow(0 0 10px ${hexToRGBA(pointerColor, 0.4)}); top:-40px;\n}\n.sw-pointer.sw-highlight .sw-pointer-outer {\n animation:sw-pointer-bounce .5s cubic-bezier(.34,1.56,.64,1);\n}\n@keyframes sw-pointer-bounce {\n 0%{transform:translateX(-50%) scale(1)}\n 40%{transform:translateX(-50%) scale(1.12)}\n 100%{transform:translateX(-50%) scale(1)}\n}\n\n/* ── spin button ── */\n.sw-spin-btn {\n font-family:'Outfit',sans-serif; font-size:1.25rem; font-weight:700;\n letter-spacing:.15em; padding:1rem 3rem; border:none; border-radius:12px;\n background:linear-gradient(180deg,${goldLight},${goldDark}); color:#1a1a1f;\n cursor:pointer;\n ${buttonBoxShadow}\n transition:transform .15s ease, box-shadow .2s ease, filter .2s ease;\n}\n${buttonHoverStyle}\n${buttonActiveStyle}\n.sw-spin-btn:disabled{opacity:.6;cursor:not-allowed}\n\n/* ── overlay & win card ── */\n.sw-overlay {\n position:fixed; inset:0; background:rgba(0,0,0,.6); backdrop-filter:blur(6px);\n display:flex; align-items:center; justify-content:center;\n z-index:100; opacity:0; visibility:hidden;\n transition:opacity .4s ease, visibility .4s ease;\n font-family:'Outfit',sans-serif;\n}\n.sw-overlay.sw-visible { opacity:1; visibility:visible; }\n\n.sw-win-card {\n position:relative; max-width:340px; width:90%; border-radius:12px; overflow:hidden;\n box-shadow:0 25px 50px -12px rgba(0,0,0,.5), 0 0 0 1px rgba(0,0,0,.1);\n transform:scale(.6); opacity:0; transition:none;\n}\n.sw-overlay.sw-visible .sw-win-card {\n animation:sw-card-flare .6s cubic-bezier(.34,1.56,.64,1) forwards;\n}\n@keyframes sw-card-flare {\n 0%{transform:scale(.6);opacity:0;filter:blur(8px)}\n 50%{transform:scale(1.08);opacity:1;filter:blur(0)}\n 70%{transform:scale(.98)}\n 100%{transform:scale(1);opacity:1;filter:blur(0)}\n}\n\n.sw-win-card-top {\n background:linear-gradient(160deg,#fff,#fff); padding:1.75rem 1.25rem;\n text-align:center; position:relative;\n}\n.sw-win-card-product {\n width:100px; height:100px; margin:0 auto .75rem; border-radius:12px;\n display:flex; align-items:center; justify-content:center; font-size:3rem;\n box-shadow:0 8px 24px rgba(0,0,0,.3); background:linear-gradient(145deg,#252530,#1c1c24);\n}\n.sw-win-card-brand { font-size:1rem; font-weight:600; color:#000; letter-spacing:.05em; }\n\n.sw-win-card-perf { height:14px; background:#fff; position:relative; }\n.sw-win-card-perf::after {\n content:''; position:absolute; left:0; right:0; top:-7px; height:14px;\n background:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='14' viewBox='0 0 12 14'%3E%3Cpath fill='%231a1a22' d='M0 14V7h2v7H0zm2 0V4h2v10H2zm2 0V7h2v7H4zm2 0V4h2v10H6zm2 0V7h2v7H8zm2 0V0h2v14h-2z'/%3E%3C/svg%3E\") repeat-x;\n background-size:12px 14px;\n}\n\n.sw-win-card-mid {\n background:#fff; padding:1.25rem 1.25rem 1.25rem 1rem; position:relative;\n}\n.sw-win-card-title {\n font-size:1rem; font-weight:700; color:#1a1a1f;\n text-transform:lowercase; margin-bottom:.25rem; line-height:1.3;\n}\n.sw-win-card-title::first-letter { text-transform:uppercase; }\n.sw-win-card-worth { font-size:.8rem; color:#6b7280; margin-bottom:.75rem; font-weight:500; }\n.sw-win-card-code-wrap { display:flex; align-items:center; gap:.5rem; }\n.sw-win-card-code {\n flex:1; font-size:.85rem; font-weight:600; letter-spacing:.08em;\n color:#374151; background:#f3f4f6; border:none; border-radius:8px;\n padding:.5rem .75rem; font-family:'Outfit',monospace;\n}\n.sw-win-card-copy {\n width:40px; height:40px; border-radius:8px; border:none;\n background:#e5e7eb; color:#4b5563; cursor:pointer;\n display:flex; align-items:center; justify-content:center;\n transition:background .2s, color .2s;\n}\n.sw-win-card-copy:hover { background:#d1d5db; color:#1f2937; }\n.sw-win-card-copy svg { width:18px; height:18px; }\n\n.sw-win-card-bot {\n background:linear-gradient(180deg,${redeemBtnTop},${redeemBtnBottom});\n padding:1rem 1.25rem; display:flex; align-items:center;\n justify-content:center; gap:.5rem; cursor:pointer;\n transition:filter .2s; position:relative;\n}\n.sw-win-card-bot:hover { filter:brightness(1.08); }\n.sw-win-card-redeem { font-size:1rem; font-weight:700; color:${redeemBtnText}; letter-spacing:.02em; }\n.sw-win-card-arrow { width:20px; height:20px; color:${redeemBtnText}; }\n\n/* ── confetti ── */\n.sw-confetti {\n position:fixed; inset:0; pointer-events:none; z-index:99; overflow:hidden;\n}\n.sw-confetti span {\n position:absolute; width:10px; height:10px; border-radius:2px;\n animation:sw-confetti-fall 1.2s ease-out forwards; opacity:0;\n}\n.sw-overlay.sw-visible .sw-confetti span { opacity:1; }\n@keyframes sw-confetti-fall {\n 0%{transform:translateY(-20px) rotate(0deg);opacity:1}\n 100%{transform:translateY(100vh) rotate(720deg);opacity:0}\n}\n\n/* ── prefers-reduced-motion ── */\n@media (prefers-reduced-motion: reduce) {\n .sw-wheel { transition:none !important; }\n .sw-wheel-outer { animation:none !important; }\n .sw-spin-btn { transition:none !important; }\n .sw-spin-btn:hover:not(:disabled) { transform:none !important; }\n .sw-spin-btn:active:not(:disabled) { transform:none !important; }\n .sw-overlay.sw-visible .sw-win-card { animation:none !important; opacity:1; transform:scale(1); }\n .sw-confetti span { animation:none !important; display:none; }\n .sw-pointer.sw-highlight .sw-pointer-outer { animation:none !important; }\n}\n`;\n}\n","/**\n * SpinWheel SDK – Utility helpers\n * Pure functions with no side effects.\n */\n\n/**\n * Convert a hex colour (#rrggbb) to an rgba() string.\n * @param {string} hex\n * @param {number} alpha\n * @returns {string}\n */\nexport function hexToRGBA(hex, alpha) {\n if (!hex || typeof hex !== 'string') return `rgba(0,0,0,${alpha})`;\n const cleanHex = hex.replace('#', '');\n const r = parseInt(cleanHex.slice(0, 2), 16) || 0;\n const g = parseInt(cleanHex.slice(2, 4), 16) || 0;\n const b = parseInt(cleanHex.slice(4, 6), 16) || 0;\n return `rgba(${r},${g},${b},${alpha})`;\n}\n\n/**\n * Check if a value is a plain object (not array, null, etc.)\n * @param {any} item\n * @returns {boolean}\n */\nexport function isPlainObject(item) {\n return item !== null && typeof item === 'object' && !Array.isArray(item) && item.constructor === Object;\n}\n\n/**\n * Deep merge multiple objects together.\n * Later objects override earlier ones. Arrays are replaced, not merged.\n * @param {object} target - The target object to merge into\n * @param {...object} sources - Source objects to merge from\n * @returns {object} The merged object\n */\nexport function deepMerge(target, ...sources) {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isPlainObject(target) && isPlainObject(source)) {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (isPlainObject(source[key])) {\n if (!target[key]) {\n target[key] = {};\n }\n deepMerge(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n }\n }\n\n return deepMerge(target, ...sources);\n}\n\n/**\n * Generate a random alphanumeric coupon code.\n * @param {number} [len=9]\n * @returns {string}\n */\nexport function randomCode(len = 9) {\n const chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\n let code = '';\n for (let i = 0; i < len; i++) {\n code += chars[Math.floor(Math.random() * chars.length)];\n }\n return code;\n}\n\n/**\n * Build a CSS `clip-path: polygon(…)` for a pie-slice with a curved outer edge.\n * @param {number} angleDeg – angular width of one segment in degrees\n * @returns {string}\n */\nexport function buildClipPath(angleDeg) {\n const points = ['0 0'];\n const steps = Math.max(12, Math.round(angleDeg / 3));\n const rad = (angleDeg * Math.PI) / 180;\n for (let i = 0; i <= steps; i++) {\n const a = (i / steps) * rad;\n const x = (Math.cos(a) * 100).toFixed(2);\n const y = (Math.sin(a) * 100).toFixed(2);\n points.push(`${x}% ${y}%`);\n }\n return `polygon(${points.join(', ')})`;\n}\n\n/**\n * Text rotation angle so label reads along the bisector of a segment.\n * @param {number} angleDeg\n * @returns {number}\n */\nexport function textRotation(angleDeg) {\n return 90 + angleDeg / 2;\n}\n\n/**\n * Escape HTML special characters.\n * @param {string} str\n * @returns {string}\n */\nexport function escapeHtml(str) {\n if (!str) return '';\n return String(str)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;');\n}\n\n/** SVG markup for the copy icon */\nexport const COPY_ICON_SVG =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>';\n\n/** SVG markup for the check (copied) icon */\nexport const CHECK_ICON_SVG =\n '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><polyline points=\"20 6 9 17 4 12\"/></svg>';\n\n/** SVG markup for the arrow icon */\nexport const ARROW_ICON_SVG =\n '<svg class=\"sw-win-card-arrow\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"/><polyline points=\"12 5 19 12 12 19\"/></svg>';\n\n/** Default confetti palette */\nexport const CONFETTI_COLORS = ['#e8c547', '#dc2626', '#16a34a', '#2563eb', '#7c3aed', '#ea580c'];\n","/**\n * SpinWheel SDK v0.1.0\n *\n * A fully dynamic, configurable Spin & Win wheel.\n * ES6 class-based. Outputs: UMD · ESM · CJS via Rollup.\n *\n * @example\n * import { SpinWheel } from 'spin-wheel-sdk';\n *\n * const wheel = SpinWheel.init({\n * container: '#app',\n * segments: [\n * { label: 'Prize 1', color: '#55efc4', icon: '🎁' },\n * { label: 'Prize 2', color: '#81ecec', icon: '✨' },\n * ],\n * onSpinEnd(prize, idx) { console.log(prize); },\n * });\n */\n\nimport { buildCSS } from './styles.js';\nimport {\n hexToRGBA,\n randomCode,\n buildClipPath,\n textRotation,\n escapeHtml,\n deepMerge,\n COPY_ICON_SVG,\n CHECK_ICON_SVG,\n ARROW_ICON_SVG,\n CONFETTI_COLORS,\n} from './utils.js';\n\n/* ------------------------------------------------------------------ */\n/* Default configuration */\n/* ------------------------------------------------------------------ */\n\n/** @type {SpinWheelOptions} */\nconst DEFAULTS = Object.freeze({\n // ── Core ──\n container: null,\n segments: [],\n winningIndex: null,\n\n // ── Spin Behavior ──\n spinDuration: 5000,\n minSpins: 5,\n maxSpins: 8,\n spinLimit: null, // null = unlimited, number = max spins allowed\n\n // ── Header UI ──\n headerTitle: null,\n headerSubtitle: null,\n titleColor: null, // uses theme.goldLight if null\n subtitleColor: null, // uses theme.textMuted if null\n\n // ── Hub (center button) ──\n hubLabel: 'Spin & win',\n hubIcon: '▲',\n\n // ── Spin Button ──\n showButton: true,\n buttonText: 'SPIN!',\n\n // ── Wheel Appearance ──\n backgroundColor: null, // page/container background\n backgroundImage: null, // optional background image URL\n ringColor: null, // uses theme gradient if null\n ringShadow: true,\n ringAnimation: true, // pulsing ring glow animation\n pointerColor: null, // uses theme.gold if null\n buttonColor: null, // uses theme gradient if null\n buttonShadow: true,\n buttonAnimation: true, // hover/active animations\n\n // ── Win Card ──\n showWinCard: true,\n generateCode: true,\n codeLength: 9,\n redeemUrl: null,\n winCardBrandLabel: null, // uses hubLabel if null\n winCardWorthLabel: 'WORTH',\n winCardRedeemButtonText: 'Redeem Now',\n winCardRedeemButtonColorTop: '#15803d',\n winCardRedeemButtonColorBottom: '#166534',\n winCardRedeemButtonTextColor: '#ffffff',\n\n // ── Confetti ──\n confettiOnWin: true,\n confettiColors: null, // uses default CONFETTI_COLORS if null\n confettiCount: 40,\n\n // ── Theme Colors ──\n theme: Object.freeze({\n gold: '#e8c547',\n goldLight: '#f5d76e',\n goldDark: '#c9a227',\n bgDark: '#0d0d12',\n textMuted: '#9ca3af',\n }),\n\n // ── Callbacks ──\n onSpinStart: null,\n onSpinEnd: null,\n onRedeem: null,\n onSpinLimitReached: null,\n});\n\n/* ------------------------------------------------------------------ */\n/* Validation */\n/* ------------------------------------------------------------------ */\n\nfunction _validateOptions(opts) {\n // Container — truly required, cannot default\n if (!opts.container) {\n throw new Error('[SpinWheel] \"container\" is required.');\n }\n\n // Segments — truly required, cannot default\n if (!Array.isArray(opts.segments) || opts.segments.length < 2) {\n throw new Error('[SpinWheel] \"segments\" must be an array with at least 2 items.');\n }\n for (let i = 0; i < opts.segments.length; i++) {\n const s = opts.segments[i];\n if (!s || typeof s !== 'object') {\n throw new Error(`[SpinWheel] segments[${i}] must be an object.`);\n }\n if (!s.label || typeof s.label !== 'string') {\n throw new Error(`[SpinWheel] segments[${i}].label is required and must be a string.`);\n }\n if (!s.color || typeof s.color !== 'string') {\n throw new Error(`[SpinWheel] segments[${i}].color is required and must be a string.`);\n }\n }\n\n // ── Clamp / auto-fix numeric & enum values instead of crashing ──\n\n // spinDuration: clamp to min 500\n if (opts.spinDuration !== undefined) {\n if (typeof opts.spinDuration !== 'number' || isNaN(opts.spinDuration)) {\n console.warn('[SpinWheel] \"spinDuration\" must be a number. Using default (5000).');\n opts.spinDuration = DEFAULTS.spinDuration;\n } else if (opts.spinDuration <= 0) {\n console.warn(`[SpinWheel] \"spinDuration\" (${opts.spinDuration}) must be positive. Clamping to 500.`);\n opts.spinDuration = 500;\n }\n }\n\n // codeLength: clamp to min 1\n if (opts.codeLength !== undefined) {\n if (typeof opts.codeLength !== 'number' || isNaN(opts.codeLength)) {\n console.warn('[SpinWheel] \"codeLength\" must be a number. Using default (9).');\n opts.codeLength = DEFAULTS.codeLength;\n } else if (opts.codeLength < 1) {\n console.warn(`[SpinWheel] \"codeLength\" (${opts.codeLength}) is below 1. Clamping to 1.`);\n opts.codeLength = 1;\n } else {\n opts.codeLength = Math.floor(opts.codeLength);\n }\n }\n\n // confettiCount: clamp to min 0\n if (opts.confettiCount !== undefined) {\n if (typeof opts.confettiCount !== 'number' || isNaN(opts.confettiCount)) {\n console.warn('[SpinWheel] \"confettiCount\" must be a number. Using default (40).');\n opts.confettiCount = DEFAULTS.confettiCount;\n } else if (opts.confettiCount < 0) {\n console.warn(`[SpinWheel] \"confettiCount\" (${opts.confettiCount}) is negative. Clamping to 0.`);\n opts.confettiCount = 0;\n }\n }\n\n // minSpins & maxSpins: ensure min <= max, swap if needed\n if (opts.minSpins !== undefined) {\n if (typeof opts.minSpins !== 'number' || isNaN(opts.minSpins)) {\n console.warn('[SpinWheel] \"minSpins\" must be a number. Using default (5).');\n opts.minSpins = DEFAULTS.minSpins;\n } else if (opts.minSpins < 1) {\n console.warn(`[SpinWheel] \"minSpins\" (${opts.minSpins}) is below 1. Clamping to 1.`);\n opts.minSpins = 1;\n }\n }\n if (opts.maxSpins !== undefined) {\n if (typeof opts.maxSpins !== 'number' || isNaN(opts.maxSpins)) {\n console.warn('[SpinWheel] \"maxSpins\" must be a number. Using default (8).');\n opts.maxSpins = DEFAULTS.maxSpins;\n } else if (opts.maxSpins < 1) {\n console.warn(`[SpinWheel] \"maxSpins\" (${opts.maxSpins}) is below 1. Clamping to 1.`);\n opts.maxSpins = 1;\n }\n }\n const min = opts.minSpins ?? DEFAULTS.minSpins;\n const max = opts.maxSpins ?? DEFAULTS.maxSpins;\n if (typeof min === 'number' && typeof max === 'number' && min > max) {\n console.warn(`[SpinWheel] \"minSpins\" (${min}) is greater than \"maxSpins\" (${max}). Swapping values.`);\n opts.minSpins = max;\n opts.maxSpins = min;\n }\n\n // spinLimit: clamp to min 1 if not null\n if (opts.spinLimit !== undefined && opts.spinLimit !== null) {\n if (typeof opts.spinLimit !== 'number' || isNaN(opts.spinLimit)) {\n console.warn('[SpinWheel] \"spinLimit\" must be a positive number or null. Setting to null (unlimited).');\n opts.spinLimit = null;\n } else if (opts.spinLimit < 1) {\n console.warn(`[SpinWheel] \"spinLimit\" (${opts.spinLimit}) is below 1. Clamping to 1.`);\n opts.spinLimit = 1;\n }\n }\n\n // winningIndex: clamp to valid segment range\n if (opts.winningIndex !== undefined && opts.winningIndex !== null) {\n if (typeof opts.winningIndex !== 'number' || isNaN(opts.winningIndex)) {\n console.warn('[SpinWheel] \"winningIndex\" must be a number or null. Setting to null (random).');\n opts.winningIndex = null;\n } else if (opts.winningIndex < 0) {\n console.warn(`[SpinWheel] \"winningIndex\" (${opts.winningIndex}) is negative. Clamping to 0.`);\n opts.winningIndex = 0;\n } else if (opts.winningIndex >= opts.segments.length) {\n const maxIdx = opts.segments.length - 1;\n console.warn(`[SpinWheel] \"winningIndex\" (${opts.winningIndex}) exceeds max (${maxIdx}). Clamping to ${maxIdx}.`);\n opts.winningIndex = maxIdx;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* SSR guard */\n/* ------------------------------------------------------------------ */\n\nconst _isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/** @returns {boolean} Whether the user prefers reduced motion */\nfunction _prefersReducedMotion() {\n return _isBrowser && window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches;\n}\n\n/* ------------------------------------------------------------------ */\n/* CSS injection (once per page) */\n/* ------------------------------------------------------------------ */\n\nlet _injectedThemeKey = null;\n\nfunction injectCSS(options) {\n if (!_isBrowser) return;\n const theme = { ...DEFAULTS.theme, ...(options.theme || {}) };\n \n // Build a key from all style-affecting options\n const styleConfig = {\n theme,\n titleColor: options.titleColor,\n subtitleColor: options.subtitleColor,\n backgroundColor: options.backgroundColor,\n backgroundImage: options.backgroundImage,\n ringColor: options.ringColor,\n ringShadow: options.ringShadow,\n ringAnimation: options.ringAnimation,\n pointerColor: options.pointerColor,\n buttonColor: options.buttonColor,\n buttonShadow: options.buttonShadow,\n buttonAnimation: options.buttonAnimation,\n winCardRedeemButtonColorTop: options.winCardRedeemButtonColorTop,\n winCardRedeemButtonColorBottom: options.winCardRedeemButtonColorBottom,\n winCardRedeemButtonTextColor: options.winCardRedeemButtonTextColor,\n };\n \n const key = JSON.stringify(styleConfig);\n if (_injectedThemeKey === key) return;\n\n // Remove old stylesheet if exists (SSR-safe)\n const existing = _isBrowser ? document.querySelector('style[data-spin-wheel-sdk]') : null;\n if (existing) existing.remove();\n\n _injectedThemeKey = key;\n const style = document.createElement('style');\n style.setAttribute('data-spin-wheel-sdk', '');\n style.textContent = buildCSS(styleConfig, hexToRGBA);\n document.head.appendChild(style);\n}\n\n/* ------------------------------------------------------------------ */\n/* SpinWheel class */\n/* ------------------------------------------------------------------ */\n\nexport class SpinWheelInstance {\n /**\n * @param {SpinWheelOptions} opts\n */\n constructor(opts) {\n if (!_isBrowser) {\n throw new Error('[SpinWheel] SpinWheel requires a browser environment (window + document).');\n }\n\n // ── validate options ──\n _validateOptions(opts);\n\n /** @type {SpinWheelOptions} */\n this.options = deepMerge({}, DEFAULTS, opts);\n \n // Ensure theme is properly merged\n this.options.theme = { ...DEFAULTS.theme, ...(opts.theme || {}) };\n\n /** Current cumulative rotation in degrees */\n this.currentRotation = 0;\n\n /** Whether the wheel is currently animating */\n this.isSpinning = false;\n\n /** Set to true after .destroy() */\n this._destroyed = false;\n\n /** Last prize won */\n this._lastWonPrize = null;\n\n /** Last won index */\n this._lastWonIndex = -1;\n\n /** Number of spins performed */\n this._spinCount = 0;\n\n /** Active requestAnimationFrame ID (for cancellation on destroy) */\n this._rafId = null;\n\n /** Bound listeners stored for removal in destroy() */\n this._boundListeners = {};\n\n // ── resolve container ──\n this.containerEl =\n typeof this.options.container === 'string'\n ? document.querySelector(this.options.container)\n : this.options.container;\n\n if (!this.containerEl) {\n throw new Error('[SpinWheel] container not found. Ensure the container element exists in the DOM.');\n }\n\n /** Angle per segment in degrees */\n this.segmentAngle = 360 / this.options.segments.length;\n\n // ── inject CSS (idempotent) ──\n injectCSS(this.options);\n\n // ── DOM refs (set in _build) ──\n /** @type {HTMLElement} */ this._rootEl = null;\n /** @type {HTMLElement} */ this._wheelEl = null;\n /** @type {HTMLElement} */ this._hubEl = null;\n /** @type {HTMLElement} */ this._pointerEl = null;\n /** @type {HTMLButtonElement} */ this._btnEl = null;\n /** @type {HTMLElement} */ this._overlayEl = null;\n /** @type {HTMLElement} */ this._confettiEl = null;\n /** @type {HTMLElement} */ this._cardProductEl = null;\n /** @type {HTMLElement} */ this._cardBrandEl = null;\n /** @type {HTMLElement} */ this._cardTitleEl = null;\n /** @type {HTMLElement} */ this._cardWorthEl = null;\n /** @type {HTMLInputElement} */ this._cardCodeEl = null;\n /** @type {HTMLButtonElement} */ this._cardCopyEl = null;\n /** @type {HTMLElement} */ this._cardRedeemEl = null;\n /** @type {HTMLElement} */ this._cardRedeemTextEl = null;\n\n // ── build & bind ──\n this._build();\n this._bind();\n }\n\n /* ================================================================ */\n /* DOM construction */\n /* ================================================================ */\n\n /** Build the full widget DOM tree and attach it to the container. */\n _build() {\n const o = this.options;\n\n // ── root wrapper ──\n const root = document.createElement('div');\n root.className = 'sw-root';\n\n // ── header (optional) ──\n if (o.headerTitle) {\n const header = document.createElement('header');\n header.className = 'sw-header';\n const parts = o.headerTitle.split('&');\n header.innerHTML =\n `<h1 class=\"sw-title\">` +\n `<span class=\"sw-spin-text\">${escapeHtml(parts[0] || 'Spin')}</span>` +\n `${parts.length > 1 ? ` <span class=\"sw-win-text\">& ${escapeHtml(parts[1])}</span>` : ''}` +\n `</h1>` +\n (o.headerSubtitle ? `<p class=\"sw-subtitle\">${escapeHtml(o.headerSubtitle)}</p>` : '');\n root.appendChild(header);\n }\n\n // ── wheel container ──\n const wc = document.createElement('div');\n wc.className = 'sw-wheel-container';\n\n const wo = document.createElement('div');\n wo.className = 'sw-wheel-outer';\n\n const wi = document.createElement('div');\n wi.className = 'sw-wheel-inner';\n\n const wheel = document.createElement('div');\n wheel.className = 'sw-wheel';\n this._wheelEl = wheel;\n\n this._buildSegments(wheel);\n\n // hub\n const hub = document.createElement('div');\n hub.className = 'sw-wheel-hub';\n hub.title = 'Spin the wheel';\n hub.innerHTML =\n `<span class=\"sw-wheel-hub-icon\">${escapeHtml(o.hubIcon)}</span>` +\n `<span class=\"sw-wheel-hub-brand\">${escapeHtml(o.hubLabel)}</span>`;\n this._hubEl = hub;\n\n wi.append(wheel, hub);\n wo.appendChild(wi);\n wc.appendChild(wo);\n\n // pointer\n const pointer = document.createElement('div');\n pointer.className = 'sw-pointer';\n pointer.innerHTML = '<div class=\"sw-pointer-outer\"></div>';\n this._pointerEl = pointer;\n wc.appendChild(pointer);\n\n root.appendChild(wc);\n\n // ── spin button ──\n if (o.showButton) {\n const btn = document.createElement('button');\n btn.className = 'sw-spin-btn';\n btn.type = 'button';\n btn.textContent = o.buttonText;\n this._btnEl = btn;\n root.appendChild(btn);\n }\n\n this.containerEl.appendChild(root);\n this._rootEl = root;\n\n // ── overlay ──\n if (o.showWinCard) {\n this._buildOverlay();\n }\n }\n\n /**\n * Render pie-slice segments into the given wheel element.\n * @param {HTMLElement} wheel\n */\n _buildSegments(wheel) {\n const angle = this.segmentAngle;\n const clip = buildClipPath(angle);\n const rot = textRotation(angle);\n const segments = this.options.segments;\n\n for (let i = 0; i < segments.length; i++) {\n const p = segments[i];\n const seg = document.createElement('div');\n seg.className = 'sw-segment';\n seg.style.transform = `rotate(${i * angle}deg)`;\n seg.style.clipPath = clip;\n seg.style.webkitClipPath = clip;\n seg.style.background = p.color || '#ccc';\n seg.innerHTML =\n `<div class=\"sw-segment-content\" style=\"transform:rotate(${rot}deg)\">` +\n `<span class=\"sw-segment-icon\">${escapeHtml(p.icon || '')}</span>` +\n `<span class=\"sw-segment-label\">${escapeHtml(p.label)}</span>` +\n `</div>`;\n wheel.appendChild(seg);\n }\n }\n\n /** Build the win-card overlay and append it to <body>. */\n _buildOverlay() {\n const o = this.options;\n const brandLabel = o.winCardBrandLabel || o.hubLabel;\n const redeemText = o.winCardRedeemButtonText || 'Redeem Now';\n \n const overlay = document.createElement('div');\n overlay.className = 'sw-overlay';\n\n const confetti = document.createElement('div');\n confetti.className = 'sw-confetti';\n this._confettiEl = confetti;\n\n const card = document.createElement('div');\n card.className = 'sw-win-card';\n card.innerHTML =\n `<div class=\"sw-win-card-top\">` +\n ` <div class=\"sw-win-card-product\">🎁</div>` +\n ` <div class=\"sw-win-card-brand\">${escapeHtml(brandLabel)}</div>` +\n `</div>` +\n `<div class=\"sw-win-card-perf\"></div>` +\n `<div class=\"sw-win-card-mid\">` +\n ` <div class=\"sw-win-card-title\">Prize</div>` +\n ` <div class=\"sw-win-card-worth\">${escapeHtml(o.winCardWorthLabel)} ₹99</div>` +\n ` <div class=\"sw-win-card-code-wrap\">` +\n ` <input type=\"text\" class=\"sw-win-card-code\" readonly value=\"XXXXXXXXX\" />` +\n ` <button type=\"button\" class=\"sw-win-card-copy\" aria-label=\"Copy code\">${COPY_ICON_SVG}</button>` +\n ` </div>` +\n `</div>` +\n `<div class=\"sw-win-card-bot\">` +\n ` <span class=\"sw-win-card-redeem\">${escapeHtml(redeemText)}</span>` +\n ` ${ARROW_ICON_SVG}` +\n `</div>`;\n\n overlay.append(confetti, card);\n this.containerEl.appendChild(overlay);\n\n this._overlayEl = overlay;\n this._cardProductEl = card.querySelector('.sw-win-card-product');\n this._cardBrandEl = card.querySelector('.sw-win-card-brand');\n this._cardTitleEl = card.querySelector('.sw-win-card-title');\n this._cardWorthEl = card.querySelector('.sw-win-card-worth');\n this._cardCodeEl = card.querySelector('.sw-win-card-code');\n this._cardCopyEl = card.querySelector('.sw-win-card-copy');\n this._cardRedeemEl = card.querySelector('.sw-win-card-bot');\n this._cardRedeemTextEl = card.querySelector('.sw-win-card-redeem');\n }\n\n /* ================================================================ */\n /* Event binding */\n /* ================================================================ */\n\n /** Wire up all interactive event listeners with proper references for cleanup. */\n _bind() {\n const bl = this._boundListeners;\n\n // Spin button\n if (this._btnEl) {\n bl._btnClick = () => this.spin();\n this._btnEl.addEventListener('click', bl._btnClick);\n }\n\n // Hub click + keyboard (Enter / Space)\n if (this._hubEl) {\n this._hubEl.setAttribute('tabindex', '0');\n this._hubEl.setAttribute('role', 'button');\n this._hubEl.setAttribute('aria-label', 'Spin the wheel');\n\n bl._hubClick = (e) => { e.stopPropagation(); this.spin(); };\n bl._hubKeydown = (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.spin();\n }\n };\n this._hubEl.addEventListener('click', bl._hubClick);\n this._hubEl.addEventListener('keydown', bl._hubKeydown);\n }\n\n // Keyboard: Enter/Space on spin button\n if (this._btnEl) {\n bl._btnKeydown = (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n this.spin();\n }\n };\n this._btnEl.addEventListener('keydown', bl._btnKeydown);\n }\n\n // Overlay events\n if (this._overlayEl) {\n bl._overlayClick = (e) => {\n if (e.target === this._overlayEl) this.hideWinCard();\n };\n this._overlayEl.addEventListener('click', bl._overlayClick);\n\n bl._copyClick = (e) => {\n e.stopPropagation();\n const code = this._cardCodeEl.value;\n this._cardCodeEl.select();\n this._cardCodeEl.setSelectionRange(0, 999);\n if (navigator.clipboard?.writeText) {\n navigator.clipboard.writeText(code).then(() => this._showCopied());\n } else {\n try { document.execCommand('copy'); this._showCopied(); } catch (_) { /* noop */ }\n }\n };\n this._cardCopyEl.addEventListener('click', bl._copyClick);\n\n bl._redeemClick = (e) => {\n e.stopPropagation();\n if (typeof this.options.onRedeem === 'function') {\n try { this.options.onRedeem(this._lastWonPrize); } catch (err) { console.error('[SpinWheel] onRedeem callback error:', err); }\n }\n if (this.options.redeemUrl) {\n window.open(this.options.redeemUrl, '_blank', 'noopener,noreferrer');\n }\n this.hideWinCard();\n };\n this._cardRedeemEl.addEventListener('click', bl._redeemClick);\n }\n\n // Global keyboard: Escape closes win card\n bl._docKeydown = (e) => {\n if (e.key === 'Escape' && this._overlayEl?.classList.contains('sw-visible')) {\n this.hideWinCard();\n }\n };\n document.addEventListener('keydown', bl._docKeydown);\n }\n\n /** Temporarily swap the copy button icon to a checkmark. */\n _showCopied() {\n if (!this._cardCopyEl || this._destroyed) return;\n this._cardCopyEl.innerHTML = CHECK_ICON_SVG;\n setTimeout(() => { if (this._cardCopyEl) this._cardCopyEl.innerHTML = COPY_ICON_SVG; }, 1500);\n }\n\n /* ================================================================ */\n /* Public API */\n /* ================================================================ */\n\n /**\n * Check if spin limit has been reached.\n * @returns {boolean}\n */\n _isSpinLimitReached() {\n const limit = this.options.spinLimit;\n return typeof limit === 'number' && limit > 0 && this._spinCount >= limit;\n }\n\n /**\n * Spin the wheel.\n * Priority: forceIndex > options.winningIndex > random.\n * @param {number} [forceIndex] – optional index to force the result (overrides winningIndex)\n */\n spin(forceIndex) {\n if (this.isSpinning || this._destroyed) return;\n \n // Check spin limit\n if (this._isSpinLimitReached()) {\n if (typeof this.options.onSpinLimitReached === 'function') {\n try { this.options.onSpinLimitReached(this._spinCount); } catch (err) { console.error('[SpinWheel] onSpinLimitReached callback error:', err); }\n }\n return;\n }\n \n this.isSpinning = true;\n this._spinCount++;\n if (this._btnEl) this._btnEl.disabled = true;\n if (this._wheelEl) this._wheelEl.classList.add('sw-spinning');\n\n const { segments, minSpins, maxSpins, spinDuration, winningIndex } = this.options;\n const count = segments.length;\n const segAngle = this.segmentAngle;\n\n // Resolve winning index: forceIndex > winningIndex > random\n // Clamp forceIndex to valid range if provided\n const isValidIndex = (idx) => typeof idx === 'number' && !isNaN(idx) && idx >= 0 && idx < count;\n\n let winIndex;\n if (forceIndex !== undefined && forceIndex !== null) {\n if (typeof forceIndex === 'number' && !isNaN(forceIndex)) {\n winIndex = Math.max(0, Math.min(count - 1, Math.floor(forceIndex)));\n } else {\n console.warn(`[SpinWheel] spin(forceIndex): invalid forceIndex \"${forceIndex}\". Using random.`);\n winIndex = Math.floor(Math.random() * count);\n }\n } else if (isValidIndex(winningIndex)) {\n winIndex = winningIndex;\n } else {\n winIndex = Math.floor(Math.random() * count);\n }\n\n if (typeof this.options.onSpinStart === 'function') {\n try { this.options.onSpinStart(winIndex); } catch (err) { console.error('[SpinWheel] onSpinStart callback error:', err); }\n }\n\n const segmentCenter = winIndex * segAngle + segAngle / 2;\n const fullSpins = (minSpins || 5) + Math.floor(Math.random() * ((maxSpins || 8) - (minSpins || 5) + 1));\n const pointerAt = 270;\n const remainder = (pointerAt - segmentCenter - (this.currentRotation % 360) + 720) % 360;\n const targetAngle = 360 * fullSpins + remainder;\n const totalRotation = this.currentRotation + targetAngle;\n const duration = spinDuration || 5000;\n const startTime = performance.now();\n const startRot = this.currentRotation;\n\n const animate = (now) => {\n if (this._destroyed) return;\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const easeOut = 1 - Math.pow(1 - progress, 3);\n const rotation = startRot + targetAngle * easeOut;\n if (this._wheelEl) this._wheelEl.style.transform = `rotate(${rotation}deg)`;\n\n if (progress < 1) {\n this._rafId = requestAnimationFrame(animate);\n } else {\n this.currentRotation = totalRotation % 360;\n if (this._wheelEl) {\n this._wheelEl.classList.remove('sw-spinning');\n this._wheelEl.style.transform = `rotate(${this.currentRotation}deg)`;\n }\n this._highlightPointer();\n\n this._lastWonPrize = segments[winIndex];\n this._lastWonIndex = winIndex;\n\n if (typeof this.options.onSpinEnd === 'function') {\n try { this.options.onSpinEnd(segments[winIndex], winIndex); } catch (err) { console.error('[SpinWheel] onSpinEnd callback error:', err); }\n }\n if (this.options.showWinCard) {\n this._showWinCard(segments[winIndex]);\n }\n\n this.isSpinning = false;\n \n // Re-enable button only if spin limit not reached\n if (this._btnEl) {\n this._btnEl.disabled = this._isSpinLimitReached();\n }\n }\n };\n\n this._rafId = requestAnimationFrame(animate);\n }\n\n /** Bounce the pointer for visual feedback. */\n _highlightPointer() {\n if (!this._pointerEl || this._destroyed) return;\n this._pointerEl.classList.remove('sw-highlight');\n void this._pointerEl.offsetHeight; // force reflow\n this._pointerEl.classList.add('sw-highlight');\n setTimeout(() => this._pointerEl.classList.remove('sw-highlight'), 500);\n }\n\n /**\n * Populate and reveal the win-card overlay.\n * @param {SegmentConfig} prize\n */\n _showWinCard(prize) {\n if (!prize || this._destroyed) return;\n const o = this.options;\n \n // Update product icon and background\n if (this._cardProductEl) {\n this._cardProductEl.textContent = prize.icon || '🎁';\n this._cardProductEl.style.background =\n `linear-gradient(145deg,${prize.color || '#252530'}22,${prize.color || '#1c1c24'}11)`;\n }\n \n // Update title\n if (this._cardTitleEl) {\n this._cardTitleEl.textContent = prize.title || prize.label || '';\n }\n \n // Update worth label with configurable prefix\n if (this._cardWorthEl) {\n const worthLabel = o.winCardWorthLabel || 'WORTH';\n this._cardWorthEl.textContent = prize.worth ? `${worthLabel} ${prize.worth}` : '';\n this._cardWorthEl.style.display = prize.worth ? '' : 'none';\n }\n\n // Handle code generation/display\n if (this._cardCodeEl) {\n if (o.generateCode) {\n this._cardCodeEl.value = prize.code || randomCode(o.codeLength);\n if (this._cardCodeEl.parentElement) this._cardCodeEl.parentElement.style.display = '';\n } else if (prize.code) {\n this._cardCodeEl.value = prize.code;\n if (this._cardCodeEl.parentElement) this._cardCodeEl.parentElement.style.display = '';\n } else {\n if (this._cardCodeEl.parentElement) this._cardCodeEl.parentElement.style.display = 'none';\n }\n }\n\n // Update redeem button text if configured\n if (this._cardRedeemTextEl && o.winCardRedeemButtonText) {\n this._cardRedeemTextEl.textContent = o.winCardRedeemButtonText;\n }\n\n // Create confetti only if enabled (and no reduced motion preference)\n if (o.confettiOnWin !== false && !_prefersReducedMotion()) {\n this._createConfetti();\n }\n \n if (this._overlayEl) this._overlayEl.classList.add('sw-visible');\n\n // A11y: announce the win to screen readers\n this._announceToScreenReader(`You won ${prize.title || prize.label || 'a prize'}${prize.worth ? ', worth ' + prize.worth : ''}.`);\n }\n\n /** Programmatically close the win-card overlay. */\n hideWinCard() {\n if (this._overlayEl) this._overlayEl.classList.remove('sw-visible');\n }\n\n /** Generate confetti particles inside the overlay. */\n _createConfetti() {\n if (!this._confettiEl || this._destroyed) return;\n const o = this.options;\n const colors = o.confettiColors || CONFETTI_COLORS;\n const count = o.confettiCount || 40;\n \n this._confettiEl.innerHTML = '';\n for (let i = 0; i < count; i++) {\n const span = document.createElement('span');\n span.style.left = `${Math.random() * 100}%`;\n span.style.top = '-10px';\n span.style.background = colors[Math.floor(Math.random() * colors.length)];\n span.style.animationDelay = `${Math.random() * 0.3}s`;\n span.style.animationDuration = `${0.8 + Math.random() * 0.6}s`;\n this._confettiEl.appendChild(span);\n }\n }\n\n /**\n * Replace all segments at runtime and re-render the wheel.\n * @param {SegmentConfig[]} newSegments\n */\n updateSegments(newSegments) {\n if (this._destroyed) return;\n if (!Array.isArray(newSegments) || newSegments.length < 2) {\n console.warn('[SpinWheel] updateSegments: at least 2 segments are required. Ignoring.');\n return;\n }\n this.options.segments = newSegments;\n this.segmentAngle = 360 / newSegments.length;\n if (this._wheelEl) {\n this._wheelEl.innerHTML = '';\n this._buildSegments(this._wheelEl);\n }\n this.currentRotation = 0;\n if (this._wheelEl) this._wheelEl.style.transform = 'rotate(0deg)';\n }\n\n /**\n * Remove all SDK-created DOM, event listeners, and animation frames.\n * Safe to call multiple times.\n */\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n\n // ── Cancel pending animation frame ──\n if (this._rafId) {\n cancelAnimationFrame(this._rafId);\n this._rafId = null;\n }\n\n // ── Remove all event listeners ──\n const bl = this._boundListeners;\n if (bl._btnClick && this._btnEl) {\n this._btnEl.removeEventListener('click', bl._btnClick);\n this._btnEl.removeEventListener('keydown', bl._btnKeydown);\n }\n if (bl._hubClick && this._hubEl) {\n this._hubEl.removeEventListener('click', bl._hubClick);\n this._hubEl.removeEventListener('keydown', bl._hubKeydown);\n }\n if (bl._overlayClick && this._overlayEl) {\n this._overlayEl.removeEventListener('click', bl._overlayClick);\n }\n if (bl._copyClick && this._cardCopyEl) {\n this._cardCopyEl.removeEventListener('click', bl._copyClick);\n }\n if (bl._redeemClick && this._cardRedeemEl) {\n this._cardRedeemEl.removeEventListener('click', bl._redeemClick);\n }\n if (bl._docKeydown) {\n document.removeEventListener('keydown', bl._docKeydown);\n }\n this._boundListeners = {};\n\n // ── Remove live-region ──\n if (this._liveRegion?.parentNode) {\n this._liveRegion.parentNode.removeChild(this._liveRegion);\n }\n\n // ── Remove DOM ──\n this._rootEl?.parentNode?.removeChild(this._rootEl);\n this._overlayEl?.parentNode?.removeChild(this._overlayEl);\n \n // Clear all DOM references to prevent memory leaks\n this._rootEl = null;\n this._wheelEl = null;\n this._hubEl = null;\n this._pointerEl = null;\n this._btnEl = null;\n this._overlayEl = null;\n this._confettiEl = null;\n this._cardProductEl = null;\n this._cardBrandEl = null;\n this._cardTitleEl = null;\n this._cardWorthEl = null;\n this._cardCodeEl = null;\n this._cardCopyEl = null;\n this._cardRedeemEl = null;\n this._cardRedeemTextEl = null;\n this._liveRegion = null;\n }\n\n /** The last prize that was won. */\n get lastWonPrize() {\n return this._lastWonPrize;\n }\n\n /** The last won segment index. */\n get lastWonIndex() {\n return this._lastWonIndex;\n }\n\n /** The current spin count. */\n get spinCount() {\n return this._spinCount;\n }\n\n /** The remaining spins (null if unlimited). */\n get remainingSpins() {\n const limit = this.options.spinLimit;\n if (typeof limit !== 'number' || limit <= 0) return null;\n return Math.max(0, limit - this._spinCount);\n }\n\n /**\n * Reset the spin count to allow more spins.\n * @param {number} [count=0] - New spin count to set\n */\n resetSpinCount(count = 0) {\n this._spinCount = Math.max(0, typeof count === 'number' && !isNaN(count) ? Math.floor(count) : 0);\n if (this._btnEl) {\n this._btnEl.disabled = this._isSpinLimitReached();\n }\n }\n\n /**\n * Announce a message to screen readers via a visually hidden aria-live region.\n * @param {string} message\n */\n _announceToScreenReader(message) {\n if (!_isBrowser) return;\n if (!this._liveRegion) {\n const el = document.createElement('div');\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n el.setAttribute('role', 'status');\n el.style.cssText = 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;';\n document.body.appendChild(el);\n this._liveRegion = el;\n }\n this._liveRegion.textContent = '';\n // Slight delay so screen readers pick up the change\n setTimeout(() => { if (this._liveRegion) this._liveRegion.textContent = message; }, 100);\n }\n\n /**\n * Update configuration options at runtime.\n * @param {Partial<SpinWheelOptions>} newOptions\n */\n updateOptions(newOptions) {\n if (this._destroyed) return;\n if (!newOptions || typeof newOptions !== 'object') {\n console.warn('[SpinWheel] updateOptions: argument must be an object. Ignoring.');\n return;\n }\n \n // Sanitize numeric/enum values before merging\n const merged = { ...this.options, ...newOptions, container: this.options.container, segments: this.options.segments };\n _validateOptions(merged);\n // Apply sanitized values back\n for (const key of Object.keys(newOptions)) {\n if (key in merged) newOptions[key] = merged[key];\n }\n \n // Merge new options\n this.options = deepMerge({}, this.options, newOptions);\n \n // Handle theme separately for proper nested merge\n if (newOptions.theme) {\n this.options.theme = { ...DEFAULTS.theme, ...this.options.theme, ...newOptions.theme };\n }\n \n // Re-inject CSS if styling options changed\n injectCSS(this.options);\n \n // Update button text if changed\n if (this._btnEl && newOptions.buttonText !== undefined) {\n this._btnEl.textContent = this.options.buttonText;\n }\n \n // Update hub if changed\n if (this._hubEl) {\n if (newOptions.hubLabel !== undefined || newOptions.hubIcon !== undefined) {\n this._hubEl.innerHTML =\n `<span class=\"sw-wheel-hub-icon\">${escapeHtml(this.options.hubIcon)}</span>` +\n `<span class=\"sw-wheel-hub-brand\">${escapeHtml(this.options.hubLabel)}</span>`;\n }\n }\n \n // Update win card brand label if changed\n if (this._cardBrandEl && (newOptions.winCardBrandLabel !== undefined || newOptions.hubLabel !== undefined)) {\n const brandLabel = this.options.winCardBrandLabel || this.options.hubLabel;\n this._cardBrandEl.textContent = brandLabel;\n }\n \n // Update redeem button text if changed\n if (this._cardRedeemTextEl && newOptions.winCardRedeemButtonText !== undefined) {\n this._cardRedeemTextEl.textContent = this.options.winCardRedeemButtonText;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Public factory (namespace) */\n/* ------------------------------------------------------------------ */\n\n/**\n * Static factory to create a SpinWheel instance.\n *\n * @example\n * const wheel = SpinWheel.init({ container: '#app', segments: [...] });\n */\nexport class SpinWheel {\n /**\n * Initialise and mount a new Spin Wheel.\n * @param {SpinWheelOptions} options\n * @returns {SpinWheelInstance}\n */\n static init(options) {\n return new SpinWheelInstance(options);\n }\n\n /** The underlying class – useful for `instanceof` checks or subclassing. */\n static Instance = SpinWheelInstance;\n\n /** Current SDK version – kept in sync with package.json via build banner */\n static VERSION = '0.1.0-alpha.1';\n \n /** Export defaults for reference */\n static DEFAULTS = DEFAULTS;\n}\n\n\n","/**\n * SpinWheel React Component (ES6 class-based wrapper)\n *\n * @example\n * import { SpinWheelReact } from 'spin-wheel-sdk/react';\n *\n * <SpinWheelReact\n * ref={wheelRef}\n * segments={[...]}\n * onSpinEnd={(prize, idx) => console.log(prize)}\n * />\n */\n\nimport { SpinWheel } from './SpinWheel.js';\n\n/**\n * All supported prop keys for SpinWheelReact component.\n * Used for copying props to SDK options.\n */\nconst PROP_KEYS = Object.freeze([\n // Core\n 'segments',\n 'winningIndex',\n \n // Spin Behavior\n 'spinDuration',\n 'minSpins',\n 'maxSpins',\n 'spinLimit',\n \n // Header UI\n 'headerTitle',\n 'headerSubtitle',\n 'titleColor',\n 'subtitleColor',\n \n // Hub\n 'hubLabel',\n 'hubIcon',\n \n // Spin Button\n 'showButton',\n 'buttonText',\n \n // Wheel Appearance\n 'backgroundColor',\n 'backgroundImage',\n 'ringColor',\n 'ringShadow',\n 'ringAnimation',\n 'pointerColor',\n 'buttonColor',\n 'buttonShadow',\n 'buttonAnimation',\n \n // Win Card\n 'showWinCard',\n 'generateCode',\n 'codeLength',\n 'redeemUrl',\n 'winCardBrandLabel',\n 'winCardWorthLabel',\n 'winCardRedeemButtonText',\n 'winCardRedeemButtonColorTop',\n 'winCardRedeemButtonColorBottom',\n 'winCardRedeemButtonTextColor',\n \n // Confetti\n 'confettiOnWin',\n 'confettiColors',\n 'confettiCount',\n \n // Theme\n 'theme',\n]);\n\n/**\n * Creates the SpinWheelReact component using the provided React instance.\n * This factory pattern avoids bundling React into the SDK.\n *\n * @param {typeof import('react')} React – the React module\n * @returns {{ SpinWheelReact: React.ForwardRefExoticComponent }}\n */\nexport function createSpinWheelReact(React) {\n const { useEffect, useRef, useImperativeHandle, forwardRef, createElement } = React;\n\n const SpinWheelReact = forwardRef(function SpinWheelReact(props, ref) {\n const containerRef = useRef(null);\n const instanceRef = useRef(null);\n\n // Keep latest callbacks in a ref so they're always fresh\n const callbacksRef = useRef({});\n callbacksRef.current.onSpinStart = props.onSpinStart;\n callbacksRef.current.onSpinEnd = props.onSpinEnd;\n callbacksRef.current.onRedeem = props.onRedeem;\n callbacksRef.current.onSpinLimitReached = props.onSpinLimitReached;\n\n // Mount the SDK once, destroy on unmount (SSR-safe)\n useEffect(() => {\n if (!containerRef.current || typeof window === 'undefined') return;\n\n const opts = {};\n\n // Copy only defined props\n PROP_KEYS.forEach((k) => {\n if (props[k] !== undefined) opts[k] = props[k];\n });\n\n opts.container = containerRef.current;\n\n // Wrap callbacks so they always point to latest prop\n opts.onSpinStart = (idx) => callbacksRef.current.onSpinStart?.(idx);\n opts.onSpinEnd = (prize, idx) => callbacksRef.current.onSpinEnd?.(prize, idx);\n opts.onRedeem = (prize) => callbacksRef.current.onRedeem?.(prize);\n opts.onSpinLimitReached = (count) => callbacksRef.current.onSpinLimitReached?.(count);\n\n try {\n instanceRef.current = SpinWheel.init(opts);\n } catch (err) {\n console.error('[SpinWheelReact] Failed to initialize SpinWheel:', err);\n }\n\n return () => {\n try {\n instanceRef.current?.destroy();\n } catch (_) { /* noop */ }\n instanceRef.current = null;\n };\n }, []); // mount-only\n\n // Live-update segments when the prop changes\n useEffect(() => {\n if (instanceRef.current && props.segments) {\n try {\n instanceRef.current.updateSegments(props.segments);\n } catch (_) { /* ignore on first mount */ }\n }\n }, [props.segments]);\n\n // Expose imperative handle\n useImperativeHandle(ref, () => ({\n /** Trigger a spin (optionally force the winning index) */\n spin(forceIndex) { instanceRef.current?.spin(forceIndex); },\n\n /** Replace segments at runtime */\n updateSegments(segs) { instanceRef.current?.updateSegments(segs); },\n\n /** Close the win-card overlay */\n hideWinCard() { instanceRef.current?.hideWinCard(); },\n\n /** Update options at runtime */\n updateOptions(opts) { instanceRef.current?.updateOptions(opts); },\n\n /** Reset the spin count */\n resetSpinCount(count) { instanceRef.current?.resetSpinCount(count); },\n\n /** Get the current spin count */\n get spinCount() { return instanceRef.current?.spinCount; },\n\n /** Get remaining spins (null if unlimited) */\n get remainingSpins() { return instanceRef.current?.remainingSpins; },\n\n /** Get the last won prize */\n get lastWonPrize() { return instanceRef.current?.lastWonPrize; },\n\n /** Get the last won index */\n get lastWonIndex() { return instanceRef.current?.lastWonIndex; },\n\n /** Access the raw SpinWheelInstance */\n get instance() { return instanceRef.current; },\n }), []);\n\n return createElement('div', {\n ref: containerRef,\n className: props.className || '',\n style: props.style || {},\n });\n });\n\n SpinWheelReact.displayName = 'SpinWheelReact';\n return SpinWheelReact;\n}\n\n/* ------------------------------------------------------------------\n Auto-detect React on `window` for UMD / CDN usage.\n In bundled ESM builds consumers call createSpinWheelReact(React).\n ------------------------------------------------------------------ */\nlet _SpinWheelReact = null;\n\nif (typeof window !== 'undefined' && window.React) {\n _SpinWheelReact = createSpinWheelReact(window.React);\n}\n\nexport { _SpinWheelReact as SpinWheelReact };\n","/**\n * Generates the ScratchCard SDK stylesheet as a string, interpolated with theme colors.\n * @param {object} config - Style configuration object\n * @param {object} config.theme - Theme colors\n * @param {string} [config.headerTitleColor] - Custom header title color\n * @param {string} [config.instructionColor] - Custom instruction color\n * @param {string} [config.coinGradientStart] - Coin gradient start color\n * @param {string} [config.coinGradientEnd] - Coin gradient end color\n * @param {string} [config.cardBackground] - Card background gradient\n * @param {boolean} [config.cardShadow] - Enable card shadow\n * @param {number} [config.cardBorderRadius] - Card border radius\n * @param {string} [config.scratchZoneBackground] - Scratch zone background\n * @param {boolean} [config.scratchZoneShadow] - Enable scratch zone shadow\n * @param {number} [config.scratchZoneBorderRadius] - Scratch zone border radius\n * @param {string} [config.prizeTextColor] - Prize text color\n * @param {string} [config.prizeNameColor] - Prize name color\n * @param {string} [config.prizeIconBackground] - Prize icon background\n * @param {string} [config.giftIconBackground] - Gift icon background\n * @param {string} [config.modalTitleColor] - Modal title color\n * @param {string} [config.modalButtonColor] - Modal button gradient\n * @param {string} [config.modalButtonTextColor] - Modal button text color\n * @param {boolean} [config.modalBackdropBlur] - Enable modal backdrop blur\n * @param {string} [config.animationType] - Animation type\n * @param {number} [config.animationDuration] - Animation duration\n * @param {function} hexToRGBA\n * @returns {string}\n */\nexport function buildScratchCSS(config, hexToRGBA) {\n const t = config.theme || {};\n \n // Extract theme colors with fallbacks\n const purpleDark = t.purpleDark || '#4a2c6a';\n const purpleMid = t.purpleMid || '#6b4a8a';\n const purpleLight = t.purpleLight || '#8b6baa';\n const gold = t.gold || '#d4a84b';\n const goldLight = t.goldLight || '#e8c547';\n const goldDark = t.goldDark || '#b8923a';\n const white = t.white || '#ffffff';\n const textDark = t.textDark || '#2d2d2d';\n const textMuted = t.textMuted || '#6b6b6b';\n \n // Configurable colors\n const headerTitleColor = config.headerTitleColor || textDark;\n const instructionColor = config.instructionColor || textMuted;\n const coinStart = config.coinGradientStart || goldLight;\n const coinEnd = config.coinGradientEnd || goldDark;\n const prizeTextColor = config.prizeTextColor || 'rgba(255,255,255,0.95)';\n const prizeNameColor = config.prizeNameColor || goldLight;\n const prizeIconBg = config.prizeIconBackground || 'rgba(255,255,255,0.15)';\n const giftIconBg = config.giftIconBackground || 'rgba(255,255,255,0.25)';\n const modalTitleColor = config.modalTitleColor || textDark;\n const modalBtnText = config.modalButtonTextColor || white;\n \n // Feature toggles\n const cardShadow = config.cardShadow !== false;\n const scratchZoneShadow = config.scratchZoneShadow !== false;\n const modalBackdropBlur = config.modalBackdropBlur !== false;\n \n // Dimension configs\n const cardBorderRadius = config.cardBorderRadius || 24;\n const scratchZoneBorderRadius = config.scratchZoneBorderRadius || 20;\n const animDuration = config.animationDuration || 600;\n const animType = config.animationType || 'default';\n \n // Background configs\n const cardBg = config.cardBackground || `linear-gradient(180deg, #faf8fc 0%, #f0ebf5 100%)`;\n const scratchZoneBg = config.scratchZoneBackground || `linear-gradient(145deg, ${purpleDark} 0%, ${purpleMid} 50%, #5a3a7a 100%)`;\n const modalBtnBg = config.modalButtonColor || `linear-gradient(145deg, ${purpleMid} 0%, ${purpleDark} 100%)`;\n \n // Computed values\n const glow = hexToRGBA(gold, 0.4);\n \n // Card shadow styles\n const cardBoxShadow = cardShadow \n ? `box-shadow:0 4px 24px ${hexToRGBA(purpleDark, 0.12)}, 0 12px 48px rgba(0,0,0,0.08);`\n : '';\n \n // Scratch zone shadow styles \n const zoneShadow = scratchZoneShadow\n ? `box-shadow:inset 0 2px 20px rgba(0,0,0,0.2), 0 8px 24px ${hexToRGBA(purpleDark, 0.35)};`\n : '';\n \n // Modal backdrop blur\n const backdropBlur = modalBackdropBlur ? 'backdrop-filter:blur(4px);' : '';\n \n // Animation styles based on type\n const cardAnimation = animType === 'none' ? '' : \n animType === 'bounce' \n ? `animation:sc-card-bounce ${animDuration}ms cubic-bezier(0.68, -0.55, 0.265, 1.55) forwards;`\n : `animation:sc-card-slide ${animDuration}ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards;`;\n \n const modalAnimation = animType === 'none' ? '' :\n `transition:transform ${animDuration * 0.66}ms cubic-bezier(0.34, 1.56, 0.64, 1);`;\n\n return `\n/* === ScratchCard SDK v1.1 === */\n@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap');\n\n.sc-root *, .sc-modal-overlay * { margin:0; padding:0; box-sizing:border-box; }\n\n.sc-root {\n font-family:'Outfit',sans-serif;\n display:flex;\n align-items:center;\n justify-content:center;\n padding:2rem 1rem;\n min-height:100%;\n background:linear-gradient(135deg, #e8e0f0 0%, #d8d0e8 50%, #e0d8f0 100%);\n position:relative;\n overflow:hidden;\n}\n\n.sc-page-bg {\n position:fixed;\n inset:0;\n background:radial-gradient(ellipse 80% 70% at 50% 40%, ${hexToRGBA(purpleMid, 0.15)} 0%, transparent 60%);\n pointer-events:none;\n animation:sc-glow-pulse 4s ease-in-out infinite;\n}\n\n@keyframes sc-glow-pulse {\n 0%, 100% { opacity:1; }\n 50% { opacity:0.7; }\n}\n\n.sc-wrapper {\n position:relative;\n width:min(360px, 92vw);\n ${cardAnimation}\n}\n\n@keyframes sc-card-slide {\n from { opacity:0; transform:translateY(24px) scale(0.96); }\n to { opacity:1; transform:translateY(0) scale(1); }\n}\n\n@keyframes sc-card-bounce {\n 0% { opacity:0; transform:scale(0.5); }\n 60% { opacity:1; transform:scale(1.05); }\n 80% { transform:scale(0.98); }\n 100% { transform:scale(1); }\n}\n\n.sc-main-card {\n background:${cardBg};\n border-radius:${cardBorderRadius}px;\n padding:28px 24px 32px;\n ${cardBoxShadow}\n}\n\n.sc-header {\n text-align:center;\n margin-bottom:20px;\n}\n\n.sc-header h1 {\n font-size:1.5rem;\n font-weight:700;\n color:${headerTitleColor};\n letter-spacing:-0.02em;\n}\n\n.sc-zone {\n position:relative;\n width:100%;\n aspect-ratio:1.05;\n max-height:320px;\n border-radius:${scratchZoneBorderRadius}px;\n overflow:hidden;\n background:${scratchZoneBg};\n ${zoneShadow}\n}\n\n.sc-zone:not(.sc-ready) .sc-prize-content {\n visibility:hidden;\n}\n\n.sc-prize-content {\n position:absolute;\n inset:0;\n z-index:0;\n display:flex;\n flex-direction:column;\n align-items:center;\n justify-content:center;\n padding:20px;\n background:\n radial-gradient(circle at 30% 30%, rgba(255,255,255,0.08) 0%, transparent 45%),\n linear-gradient(145deg, ${purpleDark} 0%, ${purpleMid} 100%);\n}\n\n.sc-prize-content::before {\n content:'';\n position:absolute;\n inset:0;\n background-image:\n url(\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 5 L35 25 L55 30 L35 35 L30 55 L25 35 L5 30 L25 25 Z' fill='none' stroke='rgba(255,255,255,0.06)' stroke-width='0.5'/%3E%3C/svg%3E\"),\n url(\"data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='20' cy='20' r='1' fill='rgba(255,255,255,0.1)'/%3E%3C/svg%3E\");\n opacity:0.9;\n pointer-events:none;\n}\n\n.sc-prize-text {\n position:relative;\n z-index:1;\n text-align:center;\n color:${prizeTextColor};\n font-size:1.25rem;\n font-weight:700;\n text-shadow:0 2px 8px rgba(0,0,0,0.3);\n margin-bottom:8px;\n}\n\n.sc-prize-name {\n font-size:1.5rem;\n font-weight:700;\n color:${prizeNameColor};\n text-shadow:0 0 20px ${hexToRGBA(gold, 0.5)};\n}\n\n.sc-prize-icon {\n width:80px;\n height:80px;\n margin:12px auto;\n background:${prizeIconBg};\n border-radius:50%;\n display:flex;\n align-items:center;\n justify-content:center;\n font-size:2.5rem;\n}\n\n.sc-prize-icon-visible {\n position:absolute;\n left:50%;\n top:50%;\n margin-left:-40px;\n margin-top:-40px;\n width:80px;\n height:80px;\n background:${giftIconBg};\n border-radius:50%;\n display:flex;\n align-items:center;\n justify-content:center;\n font-size:2.5rem;\n z-index:11;\n pointer-events:none;\n box-shadow:0 4px 20px rgba(0,0,0,0.15);\n}\n\n.sc-coin {\n position:absolute;\n left:0;\n top:0;\n width:56px;\n height:56px;\n border-radius:50%;\n background:linear-gradient(145deg, ${coinStart} 0%, ${gold} 30%, ${coinEnd} 70%, #9a7a2a 100%);\n box-shadow:\n inset 0 2px 4px rgba(255,255,255,0.4),\n inset 0 -2px 6px rgba(0,0,0,0.25),\n 0 6px 16px rgba(0,0,0,0.3);\n display:flex;\n align-items:center;\n justify-content:center;\n font-weight:800;\n font-size:1.5rem;\n color:${coinEnd};\n text-shadow:0 1px 0 rgba(255,255,255,0.4);\n z-index:12;\n pointer-events:auto;\n cursor:grab;\n touch-action:none;\n transition:box-shadow 0.15s ease;\n}\n\n.sc-coin:active {\n cursor:grabbing;\n box-shadow:\n inset 0 2px 4px rgba(255,255,255,0.3),\n 0 4px 12px rgba(0,0,0,0.35);\n}\n\n.sc-coin.dragging {\n animation:none;\n}\n\n.sc-canvas {\n position:absolute;\n top:0;\n left:0;\n right:0;\n bottom:0;\n width:100%;\n height:100%;\n z-index:10;\n display:block;\n cursor:crosshair;\n touch-action:none;\n}\n\n.sc-instruction {\n text-align:center;\n margin-top:18px;\n font-size:0.95rem;\n color:${instructionColor};\n font-weight:500;\n}\n\n/* Modal */\n.sc-modal-overlay {\n position:fixed;\n inset:0;\n background:rgba(0,0,0,0.5);\n ${backdropBlur}\n display:flex;\n align-items:center;\n justify-content:center;\n padding:1.5rem;\n z-index:100;\n opacity:0;\n visibility:hidden;\n transition:opacity 0.35s ease, visibility 0.35s ease;\n}\n\n.sc-modal-overlay.active {\n opacity:1;\n visibility:visible;\n}\n\n.sc-confetti-canvas {\n position:absolute;\n inset:0;\n width:100%;\n height:100%;\n pointer-events:none;\n z-index:1;\n}\n\n.sc-modal-bg-glow {\n position:absolute;\n inset:0;\n z-index:2;\n background:radial-gradient(\n ellipse 90% 80% at 50% 50%,\n ${hexToRGBA(purpleMid, 0.4)} 0%,\n ${hexToRGBA(purpleDark, 0.2)} 40%,\n transparent 70%\n );\n animation:sc-modal-glow 3s ease-in-out infinite;\n}\n\n@keyframes sc-modal-glow {\n 0%, 100% { opacity:1; }\n 50% { opacity:0.85; }\n}\n\n.sc-modal-card {\n position:relative;\n z-index:3;\n width:min(340px, 100%);\n background:${white};\n border-radius:${cardBorderRadius}px;\n padding:32px 24px 28px;\n box-shadow:0 24px 64px rgba(0,0,0,0.2);\n transform:scale(0.9) translateY(20px);\n ${modalAnimation}\n overflow:hidden;\n}\n\n.sc-modal-overlay.active .sc-modal-card {\n transform:scale(1) translateY(0);\n}\n\n.sc-modal-card::before {\n content:'';\n position:absolute;\n top:-50%;\n left:-50%;\n width:200%;\n height:200%;\n background:radial-gradient(circle at 50% 50%, ${hexToRGBA(purpleLight, 0.08)} 0%, transparent 50%);\n pointer-events:none;\n}\n\n.sc-modal-header {\n text-align:center;\n margin-bottom:20px;\n}\n\n.sc-modal-header h2 {\n font-size:1.5rem;\n font-weight:700;\n color:${modalTitleColor};\n line-height:1.3;\n}\n\n.sc-modal-prize-box {\n background:linear-gradient(180deg, #f8f4fc 0%, #f0eaf8 100%);\n border-radius:20px;\n padding:28px 20px;\n margin-bottom:24px;\n text-align:center;\n position:relative;\n}\n\n.sc-modal-prize-circle {\n width:100px;\n height:100px;\n margin:0 auto 16px;\n background:linear-gradient(145deg, ${purpleLight} 0%, ${purpleMid} 100%);\n border-radius:50%;\n display:flex;\n align-items:center;\n justify-content:center;\n font-size:2.8rem;\n box-shadow:0 8px 24px ${hexToRGBA(purpleDark, 0.3)};\n}\n\n.sc-modal-prize-box .sc-prize-label {\n font-size:1.1rem;\n font-weight:600;\n color:${textDark};\n}\n\n.sc-modal-prize-box .sc-prize-name {\n font-size:1.35rem;\n color:${purpleMid};\n margin-top:4px;\n}\n\n.sc-btn-claim {\n display:block;\n width:100%;\n padding:16px 24px;\n border:none;\n border-radius:14px;\n background:${modalBtnBg};\n color:${modalBtnText};\n font-family:inherit;\n font-size:1.1rem;\n font-weight:600;\n cursor:pointer;\n box-shadow:0 6px 20px ${hexToRGBA(purpleDark, 0.4)};\n transition:transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.sc-btn-claim:hover {\n transform:translateY(-2px);\n box-shadow:0 8px 28px ${hexToRGBA(purpleDark, 0.5)};\n}\n\n.sc-btn-claim:active {\n transform:translateY(0);\n}\n\n.sc-modal-terms {\n text-align:center;\n margin-top:16px;\n}\n\n.sc-modal-terms a {\n font-size:0.875rem;\n color:${textMuted};\n text-decoration:none;\n}\n\n.sc-modal-terms a:hover {\n color:${purpleMid};\n text-decoration:underline;\n}\n\n/* ── prefers-reduced-motion ── */\n@media (prefers-reduced-motion: reduce) {\n .sc-wrapper { animation:none !important; opacity:1; transform:none; }\n .sc-page-bg { animation:none !important; }\n .sc-modal-bg-glow { animation:none !important; }\n .sc-modal-card { transition:none !important; transform:scale(1) translateY(0) !important; }\n .sc-btn-claim { transition:none !important; }\n .sc-btn-claim:hover { transform:none !important; }\n .sc-coin { transition:none !important; }\n}\n`;\n}\n","/**\n * ScratchCard SDK v1.1.0\n *\n * A fully dynamic, configurable Scratch Card component.\n * ES6 class-based. Outputs: UMD · ESM · CJS via Rollup.\n *\n * @example\n * import { ScratchCard } from 'spin-wheel-sdk';\n *\n * const card = ScratchCard.init({\n * container: '#app',\n * prize: { name: 'iPhone 16', icon: '📱', label: 'Congratulations!' },\n * onReveal(prize) { console.log(prize); },\n * });\n */\n\nimport { buildScratchCSS } from './scratchStyles.js';\nimport { hexToRGBA, escapeHtml, deepMerge } from './utils.js';\n\n/* ------------------------------------------------------------------ */\n/* Default configuration */\n/* ------------------------------------------------------------------ */\n\n/** @type {ScratchCardOptions} */\nconst DEFAULTS = Object.freeze({\n // ── Core ──\n container: null,\n prize: null,\n\n // ── Header UI ──\n headerTitle: 'Scratch the Card to Win Exciting Prizes!',\n headerTitleColor: null, // uses theme.textDark if null\n \n // ── Instruction ──\n instruction: 'Scratch the card to win exciting prizes.',\n instructionColor: null, // uses theme.textMuted if null\n\n // ── Scratch Behavior ──\n revealThreshold: 55,\n brushSize: 28,\n\n // ── Coin (Eraser Tool) ──\n coinSize: 56,\n showCoin: true,\n coinIcon: '$',\n coinGradientStart: null, // uses theme.goldLight if null\n coinGradientEnd: null, // uses theme.goldDark if null\n\n // ── Card Appearance ──\n cardBackground: null, // uses default gradient if null\n cardShadow: true,\n cardBorderRadius: 24,\n\n // ── Scratch Zone ──\n scratchZoneBackground: null, // uses theme gradient if null\n scratchZoneShadow: true,\n scratchZoneBorderRadius: 20,\n\n // ── Scratch Layer ──\n scratchLayerColor: 'rgb(150, 130, 180)',\n scratchLayerSparkles: true,\n scratchLayerSparkleCount: 40,\n\n // ── Prize Display ──\n prizeTextColor: null, // uses white with opacity if null\n prizeNameColor: null, // uses theme.goldLight if null\n prizeIconBackground: null, // uses white with opacity if null\n\n // ── Gift Icon (Hint) ──\n showGiftIcon: true,\n giftIcon: '🎁',\n giftIconBackground: null, // uses white with opacity if null\n\n // ── Modal ──\n showModal: true,\n modalTitle: 'Congratulations!',\n modalTitleColor: null, // uses theme.textDark if null\n modalButtonText: 'Claim your',\n modalButtonColor: null, // uses theme gradient if null\n modalButtonTextColor: null, // uses theme.white if null\n modalBackdropBlur: true,\n\n // ── Confetti ──\n confettiEnabled: true,\n confettiColors: null, // uses default colors if null\n confettiCount: 100,\n confettiDuration: 5500,\n\n // ── Animation ──\n animationType: 'default', // 'default' | 'bounce' | 'none'\n animationDuration: 600,\n\n // ── Theme Colors ──\n theme: Object.freeze({\n purpleDark: '#4a2c6a',\n purpleMid: '#6b4a8a',\n purpleLight: '#8b6baa',\n gold: '#d4a84b',\n goldLight: '#e8c547',\n goldDark: '#b8923a',\n white: '#ffffff',\n textDark: '#2d2d2d',\n textMuted: '#6b6b6b',\n }),\n\n // ── Callbacks ──\n onScratchStart: null,\n onScratchProgress: null,\n onReveal: null,\n onClaim: null,\n});\n\n/* ------------------------------------------------------------------ */\n/* Validation */\n/* ------------------------------------------------------------------ */\n\nfunction _validateOptions(opts) {\n // Container — truly required, cannot default\n if (!opts.container) {\n throw new Error('[ScratchCard] \"container\" is required.');\n }\n\n // Prize — truly required, cannot default\n if (!opts.prize || typeof opts.prize !== 'object') {\n throw new Error('[ScratchCard] \"prize\" is required and must be an object.');\n }\n if (!opts.prize.name || typeof opts.prize.name !== 'string') {\n throw new Error('[ScratchCard] \"prize.name\" is required and must be a string.');\n }\n\n // ── Clamp / auto-fix numeric & enum values instead of crashing ──\n\n // revealThreshold: clamp to [10, 90]\n if (opts.revealThreshold !== undefined) {\n if (typeof opts.revealThreshold !== 'number' || isNaN(opts.revealThreshold)) {\n console.warn('[ScratchCard] \"revealThreshold\" must be a number. Using default (55).');\n opts.revealThreshold = DEFAULTS.revealThreshold;\n } else if (opts.revealThreshold < 10) {\n console.warn(`[ScratchCard] \"revealThreshold\" (${opts.revealThreshold}) is below 10. Clamping to 10.`);\n opts.revealThreshold = 10;\n } else if (opts.revealThreshold > 90) {\n console.warn(`[ScratchCard] \"revealThreshold\" (${opts.revealThreshold}) is above 90. Clamping to 90.`);\n opts.revealThreshold = 90;\n }\n }\n\n // brushSize: clamp to min 1\n if (opts.brushSize !== undefined) {\n if (typeof opts.brushSize !== 'number' || isNaN(opts.brushSize)) {\n console.warn('[ScratchCard] \"brushSize\" must be a number. Using default (28).');\n opts.brushSize = DEFAULTS.brushSize;\n } else if (opts.brushSize < 1) {\n console.warn(`[ScratchCard] \"brushSize\" (${opts.brushSize}) is below 1. Clamping to 1.`);\n opts.brushSize = 1;\n }\n }\n\n // coinSize: clamp to min 1\n if (opts.coinSize !== undefined) {\n if (typeof opts.coinSize !== 'number' || isNaN(opts.coinSize)) {\n console.warn('[ScratchCard] \"coinSize\" must be a number. Using default (56).');\n opts.coinSize = DEFAULTS.coinSize;\n } else if (opts.coinSize < 1) {\n console.warn(`[ScratchCard] \"coinSize\" (${opts.coinSize}) is below 1. Clamping to 1.`);\n opts.coinSize = 1;\n }\n }\n\n // confettiCount: clamp to min 0\n if (opts.confettiCount !== undefined) {\n if (typeof opts.confettiCount !== 'number' || isNaN(opts.confettiCount)) {\n console.warn('[ScratchCard] \"confettiCount\" must be a number. Using default (100).');\n opts.confettiCount = DEFAULTS.confettiCount;\n } else if (opts.confettiCount < 0) {\n console.warn(`[ScratchCard] \"confettiCount\" (${opts.confettiCount}) is negative. Clamping to 0.`);\n opts.confettiCount = 0;\n }\n }\n\n // confettiDuration: clamp to min 100\n if (opts.confettiDuration !== undefined) {\n if (typeof opts.confettiDuration !== 'number' || isNaN(opts.confettiDuration)) {\n console.warn('[ScratchCard] \"confettiDuration\" must be a number. Using default (5500).');\n opts.confettiDuration = DEFAULTS.confettiDuration;\n } else if (opts.confettiDuration <= 0) {\n console.warn(`[ScratchCard] \"confettiDuration\" (${opts.confettiDuration}) must be positive. Clamping to 100.`);\n opts.confettiDuration = 100;\n }\n }\n\n // animationDuration: clamp to min 100\n if (opts.animationDuration !== undefined) {\n if (typeof opts.animationDuration !== 'number' || isNaN(opts.animationDuration)) {\n console.warn('[ScratchCard] \"animationDuration\" must be a number. Using default (600).');\n opts.animationDuration = DEFAULTS.animationDuration;\n } else if (opts.animationDuration <= 0) {\n console.warn(`[ScratchCard] \"animationDuration\" (${opts.animationDuration}) must be positive. Clamping to 100.`);\n opts.animationDuration = 100;\n }\n }\n\n // animationType: fallback to 'default'\n if (opts.animationType !== undefined && !['default', 'bounce', 'none'].includes(opts.animationType)) {\n console.warn(`[ScratchCard] \"animationType\" (\"${opts.animationType}\") is invalid. Must be \"default\", \"bounce\", or \"none\". Using \"default\".`);\n opts.animationType = 'default';\n }\n\n // cardBorderRadius: clamp to min 0\n if (opts.cardBorderRadius !== undefined) {\n if (typeof opts.cardBorderRadius !== 'number' || isNaN(opts.cardBorderRadius)) {\n console.warn('[ScratchCard] \"cardBorderRadius\" must be a number. Using default (24).');\n opts.cardBorderRadius = DEFAULTS.cardBorderRadius;\n } else if (opts.cardBorderRadius < 0) {\n console.warn(`[ScratchCard] \"cardBorderRadius\" (${opts.cardBorderRadius}) is negative. Clamping to 0.`);\n opts.cardBorderRadius = 0;\n }\n }\n\n // scratchZoneBorderRadius: clamp to min 0\n if (opts.scratchZoneBorderRadius !== undefined) {\n if (typeof opts.scratchZoneBorderRadius !== 'number' || isNaN(opts.scratchZoneBorderRadius)) {\n console.warn('[ScratchCard] \"scratchZoneBorderRadius\" must be a number. Using default (20).');\n opts.scratchZoneBorderRadius = DEFAULTS.scratchZoneBorderRadius;\n } else if (opts.scratchZoneBorderRadius < 0) {\n console.warn(`[ScratchCard] \"scratchZoneBorderRadius\" (${opts.scratchZoneBorderRadius}) is negative. Clamping to 0.`);\n opts.scratchZoneBorderRadius = 0;\n }\n }\n\n // scratchLayerSparkleCount: clamp to min 0\n if (opts.scratchLayerSparkleCount !== undefined) {\n if (typeof opts.scratchLayerSparkleCount !== 'number' || isNaN(opts.scratchLayerSparkleCount)) {\n console.warn('[ScratchCard] \"scratchLayerSparkleCount\" must be a number. Using default (40).');\n opts.scratchLayerSparkleCount = DEFAULTS.scratchLayerSparkleCount;\n } else if (opts.scratchLayerSparkleCount < 0) {\n console.warn(`[ScratchCard] \"scratchLayerSparkleCount\" (${opts.scratchLayerSparkleCount}) is negative. Clamping to 0.`);\n opts.scratchLayerSparkleCount = 0;\n }\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* SSR guard */\n/* ------------------------------------------------------------------ */\n\nconst _isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';\n\n/** @returns {boolean} Whether the user prefers reduced motion */\nfunction _prefersReducedMotion() {\n return _isBrowser && window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches;\n}\n\n/* ------------------------------------------------------------------ */\n/* CSS injection (once per page) */\n/* ------------------------------------------------------------------ */\n\nlet _injectedThemeKey = null;\n\nfunction injectCSS(options) {\n if (!_isBrowser) return;\n const theme = { ...DEFAULTS.theme, ...(options.theme || {}) };\n \n // Build a key from all style-affecting options\n const styleConfig = {\n theme,\n headerTitleColor: options.headerTitleColor,\n instructionColor: options.instructionColor,\n coinGradientStart: options.coinGradientStart,\n coinGradientEnd: options.coinGradientEnd,\n cardBackground: options.cardBackground,\n cardShadow: options.cardShadow,\n cardBorderRadius: options.cardBorderRadius,\n scratchZoneBackground: options.scratchZoneBackground,\n scratchZoneShadow: options.scratchZoneShadow,\n scratchZoneBorderRadius: options.scratchZoneBorderRadius,\n prizeTextColor: options.prizeTextColor,\n prizeNameColor: options.prizeNameColor,\n prizeIconBackground: options.prizeIconBackground,\n giftIconBackground: options.giftIconBackground,\n modalTitleColor: options.modalTitleColor,\n modalButtonColor: options.modalButtonColor,\n modalButtonTextColor: options.modalButtonTextColor,\n modalBackdropBlur: options.modalBackdropBlur,\n animationType: options.animationType,\n animationDuration: options.animationDuration,\n };\n \n const key = JSON.stringify(styleConfig);\n if (_injectedThemeKey === key) return;\n\n // Remove old stylesheet if exists (SSR-safe)\n const existing = _isBrowser ? document.querySelector('style[data-scratch-card-sdk]') : null;\n if (existing) existing.remove();\n\n _injectedThemeKey = key;\n const style = document.createElement('style');\n style.setAttribute('data-scratch-card-sdk', '');\n style.textContent = buildScratchCSS(styleConfig, hexToRGBA);\n document.head.appendChild(style);\n}\n\n/* ------------------------------------------------------------------ */\n/* ScratchCard class */\n/* ------------------------------------------------------------------ */\n\nexport class ScratchCardInstance {\n /**\n * @param {ScratchCardOptions} opts\n */\n constructor(opts) {\n if (!_isBrowser) {\n throw new Error('[ScratchCard] ScratchCard requires a browser environment (window + document).');\n }\n\n // ── validate options ──\n _validateOptions(opts);\n\n /** @type {ScratchCardOptions} */\n this.options = deepMerge({}, DEFAULTS, opts);\n \n // Ensure theme is properly merged\n this.options.theme = { ...DEFAULTS.theme, ...(opts.theme || {}) };\n\n /** Current scratch percentage (0-100) */\n this.scratchPercent = 0;\n\n /** Whether user is currently scratching */\n this.isScratching = false;\n\n /** Whether user is dragging the coin */\n this.isDraggingCoin = false;\n\n /** Whether prize has been revealed */\n this.hasRevealed = false;\n\n /** Set to true after .destroy() */\n this._destroyed = false;\n\n /** Whether onScratchStart has fired for this session */\n this._scratchStartFired = false;\n\n /** Active confetti requestAnimationFrame ID */\n this._confettiRafId = null;\n\n /** Confetti timeout IDs for burst effects */\n this._confettiTimeouts = [];\n\n /** @type {object|null} */\n this._prize = this.options.prize;\n\n // ── resolve container ──\n this.containerEl =\n typeof this.options.container === 'string'\n ? document.querySelector(this.options.container)\n : this.options.container;\n\n if (!this.containerEl) {\n throw new Error('[ScratchCard] container not found. Ensure the container element exists in the DOM.');\n }\n\n /** Canvas dimensions */\n this.zoneW = 0;\n this.zoneH = 0;\n\n /** Last mouse/touch point for continuous scratching */\n this._lastPoint = null;\n\n /** Resize observer for responsive canvas */\n this._resizeObserver = null;\n\n // ── inject CSS (idempotent) ──\n injectCSS(this.options);\n\n // ── DOM refs (set in _build) ──\n /** @type {HTMLElement} */ this._rootEl = null;\n /** @type {HTMLElement} */ this._zoneEl = null;\n /** @type {HTMLCanvasElement} */ this._canvasEl = null;\n /** @type {CanvasRenderingContext2D} */ this._ctx = null;\n /** @type {HTMLElement} */ this._coinEl = null;\n /** @type {HTMLElement} */ this._giftIconEl = null;\n /** @type {HTMLElement} */ this._modalEl = null;\n /** @type {HTMLElement} */ this._confettiCanvasEl = null;\n /** @type {HTMLElement} */ this._prizeContentEl = null;\n /** @type {HTMLElement} */ this._instructionEl = null;\n\n // ── build & bind ──\n this._build();\n this._bind();\n }\n\n /* ================================================================ */\n /* DOM construction */\n /* ================================================================ */\n\n /** Build the full widget DOM tree and attach it to the container. */\n _build() {\n const o = this.options;\n\n // ── root wrapper ──\n const root = document.createElement('div');\n root.className = 'sc-root';\n\n // ── page background glow ──\n const pageBg = document.createElement('div');\n pageBg.className = 'sc-page-bg';\n pageBg.setAttribute('aria-hidden', 'true');\n root.appendChild(pageBg);\n\n // ── main wrapper ──\n const wrapper = document.createElement('div');\n wrapper.className = 'sc-wrapper';\n\n // ── main card ──\n const card = document.createElement('div');\n card.className = 'sc-main-card';\n\n // ── header ──\n const header = document.createElement('header');\n header.className = 'sc-header';\n header.innerHTML = `<h1>${escapeHtml(o.headerTitle)}</h1>`;\n card.appendChild(header);\n\n // ── scratch zone ──\n const zone = document.createElement('div');\n zone.className = 'sc-zone';\n zone.id = `sc-zone-${this._id()}`;\n this._zoneEl = zone;\n\n // Prize content (under canvas)\n const prizeContent = document.createElement('div');\n prizeContent.className = 'sc-prize-content';\n prizeContent.innerHTML = `\n <div class=\"sc-prize-text\">${escapeHtml(this._prize.label || 'Congratulations!')}</div>\n <div class=\"sc-prize-name\">${escapeHtml(this._prize.name)}</div>\n <div class=\"sc-prize-icon\">${escapeHtml(this._prize.icon || '🎁')}</div>\n `;\n zone.appendChild(prizeContent);\n this._prizeContentEl = prizeContent;\n\n // Canvas for scratching\n const canvas = document.createElement('canvas');\n canvas.className = 'sc-canvas';\n canvas.id = `sc-canvas-${this._id()}`;\n canvas.setAttribute('aria-label', 'Scratch to reveal your prize');\n zone.appendChild(canvas);\n this._canvasEl = canvas;\n this._ctx = canvas.getContext('2d');\n\n // Gift icon visible above scratch layer (hint icon)\n if (o.showGiftIcon !== false) {\n const prizeIconVisible = document.createElement('div');\n prizeIconVisible.className = 'sc-prize-icon-visible';\n prizeIconVisible.id = `sc-gift-icon-${this._id()}`;\n prizeIconVisible.setAttribute('aria-hidden', 'true');\n prizeIconVisible.textContent = o.giftIcon || '🎁';\n zone.appendChild(prizeIconVisible);\n this._giftIconEl = prizeIconVisible;\n }\n\n // Draggable coin eraser\n if (o.showCoin) {\n const coin = document.createElement('div');\n coin.className = 'sc-coin';\n coin.id = `sc-coin-${this._id()}`;\n coin.setAttribute('aria-hidden', 'true');\n coin.textContent = o.coinIcon;\n zone.appendChild(coin);\n this._coinEl = coin;\n }\n\n card.appendChild(zone);\n\n // ── instruction ──\n const instruction = document.createElement('p');\n instruction.className = 'sc-instruction';\n instruction.textContent = o.instruction;\n card.appendChild(instruction);\n this._instructionEl = instruction;\n\n wrapper.appendChild(card);\n root.appendChild(wrapper);\n this.containerEl.appendChild(root);\n this._rootEl = root;\n\n // ── modal ──\n if (o.showModal) {\n this._buildModal();\n }\n\n // ── initialize canvas size ──\n this._initCanvas();\n }\n\n /** Generate a unique ID for this instance */\n _id() {\n return Math.random().toString(36).slice(2, 9);\n }\n\n /** Build the win modal and append it to the container */\n _buildModal() {\n const o = this.options;\n const modalTitle = o.modalTitle || 'Congratulations!';\n const modalButtonText = o.modalButtonText || 'Claim your';\n \n const overlay = document.createElement('div');\n overlay.className = 'sc-modal-overlay';\n overlay.setAttribute('role', 'dialog');\n overlay.setAttribute('aria-modal', 'true');\n overlay.setAttribute('aria-hidden', 'true');\n overlay.setAttribute('aria-label', 'Prize won');\n\n // Confetti canvas\n const confettiCanvas = document.createElement('canvas');\n confettiCanvas.className = 'sc-confetti-canvas';\n confettiCanvas.setAttribute('aria-hidden', 'true');\n overlay.appendChild(confettiCanvas);\n this._confettiCanvasEl = confettiCanvas;\n\n // Background glow\n const bgGlow = document.createElement('div');\n bgGlow.className = 'sc-modal-bg-glow';\n overlay.appendChild(bgGlow);\n\n // Modal card\n const modalCard = document.createElement('div');\n modalCard.className = 'sc-modal-card';\n modalCard.innerHTML = `\n <div class=\"sc-modal-header\">\n <h2>${escapeHtml(modalTitle)} You won ${escapeHtml(this._prize.name)}.</h2>\n </div>\n <div class=\"sc-modal-prize-box\">\n <div class=\"sc-modal-prize-circle\">${escapeHtml(this._prize.icon || '🎁')}</div>\n <div class=\"sc-prize-label\">${escapeHtml(this._prize.label || modalTitle)} You won ${escapeHtml(this._prize.name)}!</div>\n <div class=\"sc-prize-name\">${escapeHtml(this._prize.name)}</div>\n </div>\n <button type=\"button\" class=\"sc-btn-claim\">${escapeHtml(modalButtonText)} ${escapeHtml(this._prize.name)}</button>\n <p class=\"sc-modal-terms\">\n <a href=\"#\" onclick=\"return false;\">Terms & Conditions</a>\n </p>\n `;\n overlay.appendChild(modalCard);\n\n this.containerEl.appendChild(overlay);\n this._modalEl = overlay;\n }\n\n /** Initialize canvas size and draw scratch surface */\n _initCanvas() {\n const setSize = () => {\n const w = this._zoneEl.clientWidth;\n const h = this._zoneEl.clientHeight;\n if (w <= 0 || h <= 0) return;\n\n this.zoneW = w;\n this.zoneH = h;\n\n const dpr = window.devicePixelRatio || 1;\n this._canvasEl.width = Math.ceil(w * dpr);\n this._canvasEl.height = Math.ceil(h * dpr);\n this._canvasEl.style.width = w + 'px';\n this._canvasEl.style.height = h + 'px';\n\n this._ctx.setTransform(1, 0, 0, 1, 0, 0);\n this._ctx.scale(dpr, dpr);\n\n this._drawSurface();\n this._positionCoinInitial();\n this._zoneEl.classList.add('sc-ready');\n };\n\n // Use ResizeObserver for responsive sizing\n this._resizeObserver = new ResizeObserver(() => {\n requestAnimationFrame(setSize);\n });\n this._resizeObserver.observe(this._zoneEl);\n\n // Initial sizing\n requestAnimationFrame(() => requestAnimationFrame(setSize));\n }\n\n /** Draw the scratchable surface on canvas */\n _drawSurface() {\n const w = this.zoneW;\n const h = this.zoneH;\n if (w <= 0 || h <= 0) return;\n\n const ctx = this._ctx;\n const o = this.options;\n\n // Base color for scratch layer (configurable)\n ctx.fillStyle = o.scratchLayerColor || 'rgb(150, 130, 180)';\n ctx.fillRect(0, 0, w, h);\n\n // Add sparkle effect if enabled\n if (o.scratchLayerSparkles !== false) {\n const sparkleCount = o.scratchLayerSparkleCount || 40;\n ctx.globalCompositeOperation = 'overlay';\n ctx.fillStyle = 'rgba(255, 255, 255, 0.2)';\n for (let i = 0; i < sparkleCount; i++) {\n ctx.beginPath();\n ctx.arc(Math.random() * w, Math.random() * h, 2 + Math.random() * 3, 0, Math.PI * 2);\n ctx.fill();\n }\n ctx.globalCompositeOperation = 'source-over';\n }\n }\n\n /** Position coin at initial location */\n _positionCoinInitial() {\n if (!this._coinEl || this.zoneW <= 0 || this.zoneH <= 0) return;\n\n const coinRadius = this.options.coinSize / 2;\n const x = Math.round(this.zoneW * 0.15 - coinRadius);\n const y = Math.round(this.zoneH * 0.82 - coinRadius);\n this._coinEl.style.transform = `translate(${x}px, ${y}px)`;\n }\n\n /* ================================================================ */\n /* Event binding */\n /* ================================================================ */\n\n /** Wire up all interactive event listeners with proper references for cleanup. */\n _bind() {\n const canvas = this._canvasEl;\n\n // Canvas scratch events (direct mouse/touch scratching)\n this._boundStartScratch = this._onStartScratch.bind(this);\n this._boundMoveScratch = this._onMoveScratch.bind(this);\n this._boundEndScratch = this._onEndScratch.bind(this);\n\n canvas.addEventListener('mousedown', this._boundStartScratch);\n canvas.addEventListener('mousemove', this._boundMoveScratch);\n canvas.addEventListener('mouseup', this._boundEndScratch);\n canvas.addEventListener('mouseleave', this._boundEndScratch);\n\n canvas.addEventListener('touchstart', this._boundStartScratch, { passive: false });\n canvas.addEventListener('touchmove', this._boundMoveScratch, { passive: false });\n canvas.addEventListener('touchend', this._boundEndScratch);\n canvas.addEventListener('touchcancel', this._boundEndScratch);\n\n // Coin drag events\n if (this._coinEl) {\n this._boundStartCoinDrag = this._onStartCoinDrag.bind(this);\n this._coinEl.addEventListener('mousedown', this._boundStartCoinDrag);\n this._coinEl.addEventListener('touchstart', this._boundStartCoinDrag, { passive: false });\n }\n\n // Global drag events for coin – store references for cleanup in destroy()\n this._boundDocMouseMove = (e) => {\n if (this.isDraggingCoin) this._onMoveCoinDrag(e);\n };\n this._boundDocMouseUp = this._onEndCoinDrag.bind(this);\n this._boundDocTouchMove = (e) => {\n if (this.isDraggingCoin) {\n e.preventDefault();\n this._onMoveCoinDrag(e);\n }\n };\n this._boundDocTouchEnd = this._onEndCoinDrag.bind(this);\n this._boundDocTouchCancel = this._onEndCoinDrag.bind(this);\n\n document.addEventListener('mousemove', this._boundDocMouseMove);\n document.addEventListener('mouseup', this._boundDocMouseUp);\n document.addEventListener('touchmove', this._boundDocTouchMove, { passive: false });\n document.addEventListener('touchend', this._boundDocTouchEnd);\n document.addEventListener('touchcancel', this._boundDocTouchCancel);\n\n // Modal events\n if (this._modalEl) {\n this._boundModalClick = (e) => {\n if (e.target === this._modalEl || e.target.classList.contains('sc-modal-bg-glow')) {\n this.hideModal();\n }\n };\n this._modalEl.addEventListener('click', this._boundModalClick);\n\n const btnClaim = this._modalEl.querySelector('.sc-btn-claim');\n if (btnClaim) {\n this._boundClaimClick = () => {\n this.hideModal();\n if (typeof this.options.onClaim === 'function') {\n try { this.options.onClaim(this._prize); } catch (err) { console.error('[ScratchCard] onClaim callback error:', err); }\n }\n };\n this._claimBtnEl = btnClaim;\n btnClaim.addEventListener('click', this._boundClaimClick);\n }\n }\n\n // Global keyboard: Escape closes modal\n this._boundDocKeydown = (e) => {\n if (e.key === 'Escape' && this._modalEl?.classList.contains('active')) {\n this.hideModal();\n }\n };\n document.addEventListener('keydown', this._boundDocKeydown);\n }\n\n /** Get event point relative to scratch zone */\n _getEventPoint(e) {\n if (!this._zoneEl) return { x: 0, y: 0 };\n const rect = this._zoneEl.getBoundingClientRect();\n if (e.touches && e.touches.length) {\n return {\n x: e.touches[0].clientX - rect.left,\n y: e.touches[0].clientY - rect.top,\n };\n }\n return {\n x: e.clientX - rect.left,\n y: e.clientY - rect.top,\n };\n }\n\n /** Start scratching */\n _onStartScratch(e) {\n if (this.hasRevealed || this._destroyed) return;\n e.preventDefault();\n this.isScratching = true;\n\n // Hide gift icon as soon as user starts scratching\n if (this._giftIconEl) {\n this._giftIconEl.style.display = 'none';\n }\n\n this._lastPoint = this._getEventPoint(e);\n this._scratch(this._lastPoint.x, this._lastPoint.y);\n\n if (!this._scratchStartFired && typeof this.options.onScratchStart === 'function') {\n this._scratchStartFired = true;\n try { this.options.onScratchStart(); } catch (err) { console.error('[ScratchCard] onScratchStart callback error:', err); }\n }\n }\n\n /** Move scratching */\n _onMoveScratch(e) {\n if (!this.isScratching || this.hasRevealed || this._destroyed) return;\n e.preventDefault();\n const point = this._getEventPoint(e);\n const dx = point.x - this._lastPoint.x;\n const dy = point.y - this._lastPoint.y;\n const dist = Math.sqrt(dx * dx + dy * dy);\n const steps = Math.max(1, Math.floor(dist / 4));\n\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const x = this._lastPoint.x + dx * t;\n const y = this._lastPoint.y + dy * t;\n this._scratch(x, y);\n }\n this._lastPoint = point;\n }\n\n /** End scratching */\n _onEndScratch() {\n this.isScratching = false;\n this._lastPoint = null;\n }\n\n /** Perform scratch at position */\n _scratch(x, y, radius) {\n if (!this._ctx || this._destroyed) return;\n const r = radius !== undefined ? radius : this.options.brushSize / 2;\n const ctx = this._ctx;\n\n ctx.globalCompositeOperation = 'destination-out';\n ctx.fillStyle = 'rgba(0, 0, 0, 1)';\n ctx.beginPath();\n ctx.arc(x, y, r, 0, Math.PI * 2);\n ctx.fill();\n ctx.globalCompositeOperation = 'source-over';\n\n if (this.hasRevealed) return;\n this._updateScratchPercent();\n }\n\n /** Calculate and update scratch percentage */\n _updateScratchPercent() {\n if (!this._ctx || this._destroyed) return;\n const w = this.zoneW;\n const h = this.zoneH;\n if (w <= 0 || h <= 0) return;\n const dpr = window.devicePixelRatio || 1;\n const cw = Math.ceil(w * dpr);\n const ch = Math.ceil(h * dpr);\n if (cw <= 0 || ch <= 0) return;\n\n let imageData;\n try {\n imageData = this._ctx.getImageData(0, 0, cw, ch);\n } catch (_) { return; }\n const data = imageData.data;\n let transparent = 0;\n const step = 8; // Sample every 8th pixel for performance\n\n for (let i = 0; i < data.length; i += 4 * step) {\n if (data[i + 3] < 128) transparent++;\n }\n\n const total = (cw * ch) / step;\n this.scratchPercent = total > 0 ? Math.round((transparent / total) * 100) : 0;\n\n if (typeof this.options.onScratchProgress === 'function') {\n try { this.options.onScratchProgress(this.scratchPercent); } catch (err) { console.error('[ScratchCard] onScratchProgress callback error:', err); }\n }\n\n if (this.scratchPercent >= this.options.revealThreshold) {\n this._reveal();\n }\n }\n\n /** Reveal the prize */\n _reveal() {\n if (this.hasRevealed || this._destroyed) return;\n this.hasRevealed = true;\n\n // Clear the canvas to fully reveal\n if (this._ctx) {\n try { this._ctx.clearRect(0, 0, this.zoneW, this.zoneH); } catch (_) { /* noop */ }\n }\n\n // Hide the gift icon that sits above the scratch layer\n if (this._giftIconEl) {\n this._giftIconEl.style.display = 'none';\n }\n\n // Show modal\n if (this._modalEl) {\n this._modalEl.classList.add('active');\n this._modalEl.setAttribute('aria-hidden', 'false');\n \n // Start confetti only if enabled and motion is OK\n if (this.options.confettiEnabled !== false && !_prefersReducedMotion()) {\n this._startConfetti();\n }\n\n // Focus the claim button for keyboard users\n const claimBtn = this._modalEl.querySelector('.sc-btn-claim');\n if (claimBtn) {\n setTimeout(() => claimBtn.focus(), 100);\n }\n }\n\n // A11y: announce to screen readers\n this._announceToScreenReader(`Prize revealed: ${this._prize?.name || 'your prize'}`);\n\n if (typeof this.options.onReveal === 'function') {\n try { this.options.onReveal(this._prize); } catch (err) { console.error('[ScratchCard] onReveal callback error:', err); }\n }\n }\n\n /* ================================================================ */\n /* Coin drag handling */\n /* ================================================================ */\n\n _onStartCoinDrag(e) {\n if (this.hasRevealed || this._destroyed) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDraggingCoin = true;\n if (this._coinEl) this._coinEl.classList.add('dragging');\n\n // Hide gift icon as soon as user starts scratching\n if (this._giftIconEl) {\n this._giftIconEl.style.display = 'none';\n }\n\n const point = this._getEventPoint(e);\n const c = this._clampCoinPosition(point.x, point.y);\n this._updateCoinPosition(c.x, c.y);\n this._scratch(c.x, c.y, this.options.coinSize / 2);\n\n if (!this._scratchStartFired && typeof this.options.onScratchStart === 'function') {\n this._scratchStartFired = true;\n try { this.options.onScratchStart(); } catch (err) { console.error('[ScratchCard] onScratchStart callback error:', err); }\n }\n }\n\n _onMoveCoinDrag(e) {\n if (!this.isDraggingCoin || this.hasRevealed || this._destroyed) return;\n e.preventDefault();\n e.stopPropagation();\n\n const point = this._getEventPoint(e);\n const c = this._clampCoinPosition(point.x, point.y);\n this._updateCoinPosition(c.x, c.y);\n this._scratch(c.x, c.y, this.options.coinSize / 2);\n }\n\n _onEndCoinDrag() {\n if (!this.isDraggingCoin) return;\n this.isDraggingCoin = false;\n if (this._coinEl) this._coinEl.classList.remove('dragging');\n }\n\n _clampCoinPosition(cx, cy) {\n const r = this.options.coinSize / 2;\n return {\n x: Math.max(r, Math.min(this.zoneW - r, cx)),\n y: Math.max(r, Math.min(this.zoneH - r, cy)),\n };\n }\n\n _updateCoinPosition(cx, cy) {\n if (!this._coinEl) return;\n const r = this.options.coinSize / 2;\n this._coinEl.style.transform = `translate(${cx - r}px, ${cy - r}px)`;\n }\n\n /* ================================================================ */\n /* Confetti animation */\n /* ================================================================ */\n\n _startConfetti() {\n if (!this._confettiCanvasEl || !this._modalEl || this._destroyed) return;\n\n const o = this.options;\n const rect = this._modalEl.getBoundingClientRect();\n const w = rect.width;\n const h = rect.height;\n if (w <= 0 || h <= 0) return;\n\n this._confettiCanvasEl.width = w;\n this._confettiCanvasEl.height = h;\n this._confettiCanvasEl.style.width = w + 'px';\n this._confettiCanvasEl.style.height = h + 'px';\n\n const cctx = this._confettiCanvasEl.getContext('2d');\n if (!cctx) return;\n const colors = o.confettiColors || ['#e8c547', '#d4a84b', '#6b4a8a', '#8b6baa', '#c94a6a', '#4ac97a', '#fff', '#ff6b6b'];\n const particles = [];\n const centerX = w / 2;\n const centerY = h / 2;\n const count = o.confettiCount || 100;\n\n for (let i = 0; i < count; i++) {\n const angle = (Math.PI * 2 * i) / count + Math.random() * 0.5;\n const speed = 4 + Math.random() * 10;\n particles.push({\n x: centerX,\n y: centerY,\n vx: Math.cos(angle) * speed + (Math.random() - 0.5) * 4,\n vy: Math.sin(angle) * speed - 6 + (Math.random() - 0.5) * 2,\n color: colors[Math.floor(Math.random() * colors.length)],\n size: 4 + Math.random() * 8,\n rotation: Math.random() * Math.PI * 2,\n rotationSpeed: (Math.random() - 0.5) * 0.3,\n opacity: 1,\n birth: 0,\n });\n }\n\n // Add burst effects\n this._confettiTimeouts.push(\n setTimeout(() => this._addBurst(particles, centerX, centerY, 35, cctx, w, h), 200),\n setTimeout(() => this._addBurst(particles, centerX, centerY, 30, cctx, w, h), 450)\n );\n\n const gravity = 0.22;\n const friction = 0.99;\n const startTime = Date.now();\n const duration = o.confettiDuration || 5500;\n\n const animate = () => {\n const elapsed = Date.now() - startTime;\n if (elapsed > duration || this._destroyed) {\n cctx.clearRect(0, 0, w, h);\n this._confettiRafId = null;\n return;\n }\n\n cctx.clearRect(0, 0, w, h);\n\n for (let i = 0; i < particles.length; i++) {\n const p = particles[i];\n const age = p.birth ? Date.now() - p.birth : elapsed;\n\n p.x += p.vx;\n p.y += p.vy;\n p.vy += gravity;\n p.vx *= friction;\n p.vy *= friction;\n p.rotation += p.rotationSpeed;\n\n const life = 1 - age / (p.birth ? 3200 : duration);\n p.opacity = Math.max(0, life);\n\n if (p.opacity <= 0 || p.y > h + 20) continue;\n\n cctx.save();\n cctx.globalAlpha = p.opacity;\n cctx.translate(p.x, p.y);\n cctx.rotate(p.rotation);\n cctx.fillStyle = p.color;\n cctx.fillRect(-p.size / 2, -p.size / 4, p.size, p.size / 2);\n cctx.restore();\n }\n\n this._confettiRafId = requestAnimationFrame(animate);\n };\n\n this._confettiRafId = requestAnimationFrame(animate);\n }\n\n _addBurst(particles, x, y, count, cctx, w, h) {\n const o = this.options;\n const colors = o.confettiColors || ['#e8c547', '#d4a84b', '#6b4a8a', '#8b6baa', '#c94a6a', '#4ac97a', '#fff', '#ff6b6b'];\n for (let i = 0; i < count; i++) {\n const angle = Math.random() * Math.PI * 2;\n const speed = 3 + Math.random() * 8;\n particles.push({\n x: x + (Math.random() - 0.5) * 120,\n y: y - 40 + (Math.random() - 0.5) * 20,\n vx: Math.cos(angle) * speed,\n vy: Math.sin(angle) * speed - 4,\n color: colors[Math.floor(Math.random() * colors.length)],\n size: 3 + Math.random() * 6,\n rotation: Math.random() * Math.PI * 2,\n rotationSpeed: (Math.random() - 0.5) * 0.3,\n opacity: 1,\n birth: Date.now(),\n });\n }\n }\n\n /* ================================================================ */\n /* Public API */\n /* ================================================================ */\n\n /**\n * Programmatically reveal the prize.\n */\n reveal() {\n if (this._destroyed) return;\n this._reveal();\n }\n\n /**\n * Hide the modal overlay.\n */\n hideModal() {\n if (this._destroyed || !this._modalEl) return;\n this._modalEl.classList.remove('active');\n this._modalEl.setAttribute('aria-hidden', 'true');\n }\n\n /**\n * Show the modal overlay.\n */\n showModal() {\n if (this._destroyed || !this._modalEl) return;\n this._modalEl.classList.add('active');\n this._modalEl.setAttribute('aria-hidden', 'false');\n }\n\n /**\n * Reset the scratch card for replay.\n */\n reset() {\n if (this._destroyed) return;\n\n this.hasRevealed = false;\n this.scratchPercent = 0;\n this.isScratching = false;\n this.isDraggingCoin = false;\n this._lastPoint = null;\n this._scratchStartFired = false;\n\n // Redraw canvas\n this._drawSurface();\n\n // Reset coin position\n this._positionCoinInitial();\n\n // Show the gift icon again\n if (this._giftIconEl) {\n this._giftIconEl.style.display = '';\n }\n\n // Hide modal\n this.hideModal();\n\n // Remove ready class temporarily\n if (this._zoneEl) {\n this._zoneEl.classList.remove('sc-ready');\n requestAnimationFrame(() => {\n if (this._zoneEl) this._zoneEl.classList.add('sc-ready');\n });\n }\n }\n\n /**\n * Update the prize at runtime.\n * @param {object} prize - New prize object\n */\n updatePrize(prize) {\n if (this._destroyed) return;\n if (!prize || typeof prize !== 'object') {\n console.warn('[ScratchCard] updatePrize: prize must be an object. Ignoring.');\n return;\n }\n this._prize = { ...this._prize, ...prize };\n this.reset();\n\n const o = this.options;\n const modalTitle = o.modalTitle || 'Congratulations!';\n const modalButtonText = o.modalButtonText || 'Claim your';\n\n // Update prize display\n if (this._prizeContentEl) {\n this._prizeContentEl.innerHTML = `\n <div class=\"sc-prize-text\">${escapeHtml(this._prize.label || modalTitle)}</div>\n <div class=\"sc-prize-name\">${escapeHtml(this._prize.name)}</div>\n <div class=\"sc-prize-icon\">${escapeHtml(this._prize.icon || '🎁')}</div>\n `;\n }\n\n // Update modal content\n if (this._modalEl) {\n const header = this._modalEl.querySelector('.sc-modal-header h2');\n if (header) header.textContent = `${modalTitle} You won ${this._prize.name}.`;\n\n const circle = this._modalEl.querySelector('.sc-modal-prize-circle');\n if (circle) circle.textContent = this._prize.icon || '🎁';\n\n const label = this._modalEl.querySelector('.sc-modal-prize-box .sc-prize-label');\n if (label) label.textContent = `${this._prize.label || modalTitle} You won ${this._prize.name}!`;\n\n const name = this._modalEl.querySelector('.sc-modal-prize-box .sc-prize-name');\n if (name) name.textContent = this._prize.name;\n\n const btn = this._modalEl.querySelector('.sc-btn-claim');\n if (btn) btn.textContent = `${modalButtonText} ${this._prize.name}`;\n }\n }\n\n /**\n * Update configuration options at runtime.\n * @param {Partial<ScratchCardOptions>} newOptions\n */\n updateOptions(newOptions) {\n if (this._destroyed) return;\n if (!newOptions || typeof newOptions !== 'object') {\n console.warn('[ScratchCard] updateOptions: argument must be an object. Ignoring.');\n return;\n }\n \n // Sanitize numeric/enum values before merging\n _validateOptions({ ...this.options, ...newOptions, container: this.options.container, prize: this.options.prize });\n \n // Merge new options\n this.options = deepMerge({}, this.options, newOptions);\n \n // Handle theme separately for proper nested merge\n if (newOptions.theme) {\n this.options.theme = { ...DEFAULTS.theme, ...this.options.theme, ...newOptions.theme };\n }\n \n // Re-inject CSS if styling options changed\n injectCSS(this.options);\n \n // Update header if changed\n const header = this._rootEl?.querySelector('.sc-header h1');\n if (header && newOptions.headerTitle !== undefined) {\n header.textContent = this.options.headerTitle;\n }\n \n // Update instruction if changed\n if (this._instructionEl && newOptions.instruction !== undefined) {\n this._instructionEl.textContent = this.options.instruction;\n }\n \n // Update coin icon if changed\n if (this._coinEl && newOptions.coinIcon !== undefined) {\n this._coinEl.textContent = this.options.coinIcon;\n }\n \n // Update gift icon if changed\n if (this._giftIconEl && newOptions.giftIcon !== undefined) {\n this._giftIconEl.textContent = this.options.giftIcon;\n }\n }\n\n /**\n * Announce a message to screen readers via a visually hidden aria-live region.\n * @param {string} message\n */\n _announceToScreenReader(message) {\n if (!_isBrowser) return;\n if (!this._liveRegion) {\n const el = document.createElement('div');\n el.setAttribute('aria-live', 'assertive');\n el.setAttribute('aria-atomic', 'true');\n el.setAttribute('role', 'status');\n el.style.cssText = 'position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;';\n document.body.appendChild(el);\n this._liveRegion = el;\n }\n this._liveRegion.textContent = '';\n setTimeout(() => { if (this._liveRegion) this._liveRegion.textContent = message; }, 100);\n }\n\n /**\n * Destroy the instance and clean up DOM/events.\n */\n destroy() {\n if (this._destroyed) return;\n this._destroyed = true;\n\n // ── Cancel confetti animation frame ──\n if (this._confettiRafId) {\n cancelAnimationFrame(this._confettiRafId);\n this._confettiRafId = null;\n }\n\n // ── Clear confetti burst timeouts ──\n if (this._confettiTimeouts) {\n this._confettiTimeouts.forEach(clearTimeout);\n this._confettiTimeouts = [];\n }\n\n // ── Remove canvas event listeners ──\n if (this._canvasEl) {\n this._canvasEl.removeEventListener('mousedown', this._boundStartScratch);\n this._canvasEl.removeEventListener('mousemove', this._boundMoveScratch);\n this._canvasEl.removeEventListener('mouseup', this._boundEndScratch);\n this._canvasEl.removeEventListener('mouseleave', this._boundEndScratch);\n this._canvasEl.removeEventListener('touchstart', this._boundStartScratch);\n this._canvasEl.removeEventListener('touchmove', this._boundMoveScratch);\n this._canvasEl.removeEventListener('touchend', this._boundEndScratch);\n this._canvasEl.removeEventListener('touchcancel', this._boundEndScratch);\n }\n\n // ── Remove coin listeners ──\n if (this._coinEl && this._boundStartCoinDrag) {\n this._coinEl.removeEventListener('mousedown', this._boundStartCoinDrag);\n this._coinEl.removeEventListener('touchstart', this._boundStartCoinDrag);\n }\n\n // ── Remove global document listeners (prevents memory leak) ──\n if (this._boundDocMouseMove) {\n document.removeEventListener('mousemove', this._boundDocMouseMove);\n document.removeEventListener('mouseup', this._boundDocMouseUp);\n document.removeEventListener('touchmove', this._boundDocTouchMove);\n document.removeEventListener('touchend', this._boundDocTouchEnd);\n document.removeEventListener('touchcancel', this._boundDocTouchCancel);\n }\n\n // ── Remove modal event listeners ──\n if (this._modalEl && this._boundModalClick) {\n this._modalEl.removeEventListener('click', this._boundModalClick);\n }\n if (this._claimBtnEl && this._boundClaimClick) {\n this._claimBtnEl.removeEventListener('click', this._boundClaimClick);\n }\n\n // ── Remove global keyboard listener ──\n if (this._boundDocKeydown) {\n document.removeEventListener('keydown', this._boundDocKeydown);\n }\n\n // ── Remove live-region ──\n if (this._liveRegion?.parentNode) {\n this._liveRegion.parentNode.removeChild(this._liveRegion);\n }\n\n // Disconnect resize observer\n if (this._resizeObserver) {\n this._resizeObserver.disconnect();\n this._resizeObserver = null;\n }\n\n // Remove modal\n if (this._modalEl && this._modalEl.parentNode) {\n this._modalEl.parentNode.removeChild(this._modalEl);\n }\n\n // Remove root\n if (this._rootEl && this._rootEl.parentNode) {\n this._rootEl.parentNode.removeChild(this._rootEl);\n }\n\n // Clear all references to prevent memory leaks\n this._rootEl = null;\n this._zoneEl = null;\n this._canvasEl = null;\n this._ctx = null;\n this._coinEl = null;\n this._giftIconEl = null;\n this._modalEl = null;\n this._confettiCanvasEl = null;\n this._prizeContentEl = null;\n this._instructionEl = null;\n this._prize = null;\n this._lastPoint = null;\n this._liveRegion = null;\n this._claimBtnEl = null;\n }\n\n /** Get the current prize object */\n get prize() {\n return this._prize;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Static factory */\n/* ------------------------------------------------------------------ */\n\nexport const ScratchCard = {\n /**\n * Create and return a new ScratchCardInstance.\n * @param {ScratchCardOptions} opts\n * @returns {ScratchCardInstance}\n */\n init(opts) {\n return new ScratchCardInstance(opts);\n },\n \n /** The underlying class – useful for `instanceof` checks or subclassing. */\n Instance: ScratchCardInstance,\n \n /** Current SDK version */\n VERSION: '0.1.0-alpha.1',\n \n /** Export defaults for reference */\n DEFAULTS: DEFAULTS,\n};\n","/**\n * ScratchCard React Component (ES6 class-based wrapper)\n *\n * @example\n * import { ScratchCardReact } from 'spin-wheel-sdk/react';\n *\n * <ScratchCardReact\n * ref={cardRef}\n * prize={{ name: 'iPhone 16', icon: '📱', label: 'Congratulations!' }}\n * onReveal={(prize) => console.log(prize)}\n * />\n */\n\nimport { ScratchCard } from './ScratchCard.js';\n\n/**\n * All supported prop keys for ScratchCardReact component.\n * Used for copying props to SDK options.\n */\nconst PROP_KEYS = Object.freeze([\n // Core\n 'prize',\n \n // Header UI\n 'headerTitle',\n 'headerTitleColor',\n \n // Instruction\n 'instruction',\n 'instructionColor',\n \n // Scratch Behavior\n 'revealThreshold',\n 'brushSize',\n \n // Coin\n 'coinSize',\n 'showCoin',\n 'coinIcon',\n 'coinGradientStart',\n 'coinGradientEnd',\n \n // Card Appearance\n 'cardBackground',\n 'cardShadow',\n 'cardBorderRadius',\n \n // Scratch Zone\n 'scratchZoneBackground',\n 'scratchZoneShadow',\n 'scratchZoneBorderRadius',\n \n // Scratch Layer\n 'scratchLayerColor',\n 'scratchLayerSparkles',\n 'scratchLayerSparkleCount',\n \n // Prize Display\n 'prizeTextColor',\n 'prizeNameColor',\n 'prizeIconBackground',\n \n // Gift Icon\n 'showGiftIcon',\n 'giftIcon',\n 'giftIconBackground',\n \n // Modal\n 'showModal',\n 'modalTitle',\n 'modalTitleColor',\n 'modalButtonText',\n 'modalButtonColor',\n 'modalButtonTextColor',\n 'modalBackdropBlur',\n \n // Confetti\n 'confettiEnabled',\n 'confettiColors',\n 'confettiCount',\n 'confettiDuration',\n \n // Animation\n 'animationType',\n 'animationDuration',\n \n // Theme\n 'theme',\n]);\n\n/**\n * Creates the ScratchCardReact component using the provided React instance.\n * This factory pattern avoids bundling React into the SDK.\n *\n * @param {typeof import('react')} React – the React module\n * @returns {{ ScratchCardReact: React.ForwardRefExoticComponent }}\n */\nexport function createScratchCardReact(React) {\n const { useEffect, useRef, useImperativeHandle, forwardRef, createElement } = React;\n\n const ScratchCardReact = forwardRef(function ScratchCardReact(props, ref) {\n const containerRef = useRef(null);\n const instanceRef = useRef(null);\n\n // Keep latest callbacks in a ref so they're always fresh\n const callbacksRef = useRef({});\n callbacksRef.current.onScratchStart = props.onScratchStart;\n callbacksRef.current.onScratchProgress = props.onScratchProgress;\n callbacksRef.current.onReveal = props.onReveal;\n callbacksRef.current.onClaim = props.onClaim;\n\n // Mount the SDK once, destroy on unmount (SSR-safe)\n useEffect(() => {\n if (!containerRef.current || typeof window === 'undefined') return;\n\n const opts = {};\n\n // Copy only defined props\n PROP_KEYS.forEach((k) => {\n if (props[k] !== undefined) opts[k] = props[k];\n });\n\n opts.container = containerRef.current;\n\n // Wrap callbacks so they always point to latest prop\n opts.onScratchStart = () => callbacksRef.current.onScratchStart?.();\n opts.onScratchProgress = (percent) => callbacksRef.current.onScratchProgress?.(percent);\n opts.onReveal = (prize) => callbacksRef.current.onReveal?.(prize);\n opts.onClaim = (prize) => callbacksRef.current.onClaim?.(prize);\n\n try {\n instanceRef.current = ScratchCard.init(opts);\n } catch (err) {\n console.error('[ScratchCardReact] Failed to initialize ScratchCard:', err);\n }\n\n return () => {\n try {\n instanceRef.current?.destroy();\n } catch (_) { /* noop */ }\n instanceRef.current = null;\n };\n }, []); // mount-only\n\n // Live-update prize when the prop changes\n useEffect(() => {\n if (instanceRef.current && props.prize) {\n try {\n instanceRef.current.updatePrize(props.prize);\n } catch (_) { /* ignore on first mount */ }\n }\n }, [props.prize]);\n\n // Expose imperative handle\n useImperativeHandle(ref, () => ({\n /** Programmatically reveal the prize */\n reveal() { instanceRef.current?.reveal(); },\n\n /** Hide the modal */\n hideModal() { instanceRef.current?.hideModal(); },\n\n /** Show the modal */\n showModal() { instanceRef.current?.showModal(); },\n\n /** Reset the scratch card */\n reset() { instanceRef.current?.reset(); },\n\n /** Update prize at runtime */\n updatePrize(prize) { instanceRef.current?.updatePrize(prize); },\n\n /** Update options at runtime */\n updateOptions(opts) { instanceRef.current?.updateOptions(opts); },\n\n /** Get the current scratch percentage */\n get scratchPercent() { return instanceRef.current?.scratchPercent; },\n\n /** Get whether the prize has been revealed */\n get hasRevealed() { return instanceRef.current?.hasRevealed; },\n\n /** Get the current prize */\n get prize() { return instanceRef.current?.prize; },\n\n /** Access the raw ScratchCardInstance */\n get instance() { return instanceRef.current; },\n }), []);\n\n return createElement('div', {\n ref: containerRef,\n className: props.className || '',\n style: props.style || {},\n });\n });\n\n ScratchCardReact.displayName = 'ScratchCardReact';\n return ScratchCardReact;\n}\n\n/* ------------------------------------------------------------------\n Auto-detect React on `window` for UMD / CDN usage.\n In bundled ESM builds consumers call createScratchCardReact(React).\n ------------------------------------------------------------------ */\nlet _ScratchCardReact = null;\n\nif (typeof window !== 'undefined' && window.React) {\n _ScratchCardReact = createScratchCardReact(window.React);\n}\n\nexport { _ScratchCardReact as ScratchCardReact };\n","/**\n * React entrypoint for bundlers.\n *\n * This subpath is meant to be imported as:\n * import { SpinWheelReact, ScratchCardReact } from '@zencemarketing/spin-scratch-sdk/react'\n *\n * It wires the factory wrappers to your app's React (peer dependency).\n */\n\nimport React from 'react';\nimport { createSpinWheelReact } from './SpinWheelReact.js';\nimport { createScratchCardReact } from './ScratchCardReact.js';\n\nexport const SpinWheelReact = createSpinWheelReact(React);\nexport const ScratchCardReact = createScratchCardReact(React);\n\nexport { createSpinWheelReact } from './SpinWheelReact.js';\nexport { createScratchCardReact } from './ScratchCardReact.js';\n\n// Re-export vanilla APIs and types (types are provided via .d.ts)\nexport { SpinWheel, SpinWheelInstance } from './SpinWheel.js';\nexport { ScratchCard, ScratchCardInstance } from './ScratchCard.js';\n"],"names":["buildCSS","config","hexToRGBA","t","theme","gold","goldLight","goldDark","bgDark","textMuted","titleColor","subtitleColor","ringColor","pointerColor","buttonBaseColor","buttonColor","redeemBtnTop","winCardRedeemButtonColorTop","redeemBtnBottom","winCardRedeemButtonColorBottom","redeemBtnText","winCardRedeemButtonTextColor","ringShadow","ringAnimation","buttonShadow","buttonAnimation","ringGlow","buttonGlow","bgStyle","backgroundColor","bgImageStyle","backgroundImage","ringBoxShadow","ringAnimationCSS","buttonBoxShadow","buttonHoverStyle","buttonActiveStyle","hex","alpha","cleanHex","replace","r","parseInt","slice","g","b","isPlainObject","item","Array","isArray","constructor","Object","deepMerge","target","sources","length","source","shift","key","prototype","hasOwnProperty","call","undefined","randomCode","len","chars","code","i","Math","floor","random","buildClipPath","angleDeg","points","steps","max","round","rad","PI","a","x","cos","toFixed","y","sin","push","join","textRotation","escapeHtml","str","String","COPY_ICON_SVG","CHECK_ICON_SVG","ARROW_ICON_SVG","CONFETTI_COLORS","DEFAULTS","freeze","container","segments","winningIndex","spinDuration","minSpins","maxSpins","spinLimit","headerTitle","headerSubtitle","hubLabel","hubIcon","showButton","buttonText","showWinCard","generateCode","codeLength","redeemUrl","winCardBrandLabel","winCardWorthLabel","winCardRedeemButtonText","confettiOnWin","confettiColors","confettiCount","onSpinStart","onSpinEnd","onRedeem","onSpinLimitReached","_validateOptions","_validateOptions$1","opts","Error","s","label","color","isNaN","console","warn","min","maxIdx","_isBrowser","window","document","_prefersReducedMotion","_prefersReducedMotion$1","matchMedia","matches","_injectedThemeKey","injectCSS","injectCSS$1","options","styleConfig","JSON","stringify","existing","querySelector","remove","style","createElement","setAttribute","textContent","head","appendChild","SpinWheelInstance","currentRotation","isSpinning","_destroyed","_lastWonPrize","_lastWonIndex","_spinCount","_rafId","_boundListeners","containerEl","segmentAngle","_rootEl","_wheelEl","_hubEl","_pointerEl","_btnEl","_overlayEl","_confettiEl","_cardProductEl","_cardBrandEl","_cardTitleEl","_cardWorthEl","_cardCodeEl","_cardCopyEl","_cardRedeemEl","_cardRedeemTextEl","_build","_bind","o","root","className","header","parts","split","innerHTML","wc","wo","wi","wheel","_buildSegments","hub","title","append","pointer","btn","type","_buildOverlay","angle","clip","rot","p","seg","transform","clipPath","webkitClipPath","background","icon","brandLabel","redeemText","overlay","confetti","card","bl","_btnClick","spin","addEventListener","_hubClick","e","stopPropagation","_hubKeydown","preventDefault","_btnKeydown","_overlayClick","hideWinCard","_copyClick","value","select","setSelectionRange","navigator","clipboard","writeText","then","_showCopied","execCommand","_","_redeemClick","err","error","open","_docKeydown","classList","contains","setTimeout","_isSpinLimitReached","limit","forceIndex","disabled","add","count","segAngle","isValidIndex","idx","winIndex","segmentCenter","fullSpins","pointerAt","remainder","targetAngle","totalRotation","duration","startTime","performance","now","startRot","animate","elapsed","progress","easeOut","pow","rotation","requestAnimationFrame","_highlightPointer","_showWinCard","offsetHeight","prize","worthLabel","worth","display","parentElement","_createConfetti","_announceToScreenReader","colors","span","left","top","animationDelay","animationDuration","updateSegments","newSegments","destroy","cancelAnimationFrame","removeEventListener","_liveRegion","parentNode","removeChild","lastWonPrize","lastWonIndex","spinCount","remainingSpins","resetSpinCount","message","el","cssText","body","updateOptions","newOptions","merged","keys","SpinWheel","init","Instance","VERSION","PROP_KEYS","createSpinWheelReact","React","useEffect","useRef","useImperativeHandle","forwardRef","SpinWheelReact","props","ref","containerRef","instanceRef","callbacksRef","current","forEach","k","segs","instance","displayName","buildScratchCSS","purpleDark","purpleMid","purpleLight","white","textDark","headerTitleColor","instructionColor","coinStart","coinGradientStart","coinEnd","coinGradientEnd","prizeTextColor","prizeNameColor","prizeIconBg","prizeIconBackground","giftIconBg","giftIconBackground","modalTitleColor","modalBtnText","modalButtonTextColor","cardShadow","scratchZoneShadow","modalBackdropBlur","cardBorderRadius","scratchZoneBorderRadius","animDuration","animType","animationType","cardBg","cardBackground","scratchZoneBg","scratchZoneBackground","modalBtnBg","modalButtonColor","cardBoxShadow","zoneShadow","backdropBlur","cardAnimation","modalAnimation","instruction","revealThreshold","brushSize","coinSize","showCoin","coinIcon","scratchLayerColor","scratchLayerSparkles","scratchLayerSparkleCount","showGiftIcon","giftIcon","showModal","modalTitle","modalButtonText","confettiEnabled","confettiDuration","onScratchStart","onScratchProgress","onReveal","onClaim","name","includes","ScratchCardInstance","scratchPercent","isScratching","isDraggingCoin","hasRevealed","_scratchStartFired","_confettiRafId","_confettiTimeouts","_prize","zoneW","zoneH","_lastPoint","_resizeObserver","_zoneEl","_canvasEl","_ctx","_coinEl","_giftIconEl","_modalEl","_confettiCanvasEl","_prizeContentEl","_instructionEl","pageBg","wrapper","zone","id","_id","prizeContent","canvas","getContext","prizeIconVisible","coin","_buildModal","_initCanvas","toString","confettiCanvas","bgGlow","modalCard","setSize","w","clientWidth","h","clientHeight","dpr","devicePixelRatio","width","ceil","height","setTransform","scale","_drawSurface","_positionCoinInitial","ResizeObserver","observe","ctx","fillStyle","fillRect","sparkleCount","globalCompositeOperation","beginPath","arc","fill","coinRadius","_boundStartScratch","_onStartScratch","bind","_boundMoveScratch","_onMoveScratch","_boundEndScratch","_onEndScratch","passive","_boundStartCoinDrag","_onStartCoinDrag","_boundDocMouseMove","_onMoveCoinDrag","_boundDocMouseUp","_onEndCoinDrag","_boundDocTouchMove","_boundDocTouchEnd","_boundDocTouchCancel","_boundModalClick","hideModal","btnClaim","_boundClaimClick","_claimBtnEl","_boundDocKeydown","_getEventPoint","rect","getBoundingClientRect","touches","clientX","clientY","_scratch","point","dx","dy","dist","sqrt","radius","_updateScratchPercent","cw","ch","imageData","getImageData","data","transparent","step","total","_reveal","clearRect","_startConfetti","claimBtn","focus","c","_clampCoinPosition","_updateCoinPosition","cx","cy","cctx","particles","centerX","centerY","speed","vx","vy","size","rotationSpeed","opacity","birth","_addBurst","gravity","friction","Date","age","life","save","globalAlpha","translate","rotate","restore","reveal","reset","updatePrize","circle","clearTimeout","disconnect","ScratchCard","createScratchCardReact","ScratchCardReact","percent"],"mappings":";;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,QAAQA,CAACC,MAAM,EAAEC,SAAS,EAAE;EAC1C,MAAMC,CAAC,GAAGF,MAAM,CAACG,KAAK,IAAI,CAAA,CAAE;;EAE9B;EACE,MAAMC,IAAI,GAAGF,CAAC,CAACE,IAAI,IAAI,SAAS;EAChC,MAAMC,SAAS,GAAGH,CAAC,CAACG,SAAS,IAAI,SAAS;EAC1C,MAAMC,QAAQ,GAAGJ,CAAC,CAACI,QAAQ,IAAI,SAAS;EACzBJ,CAAC,CAACK,MAAM,IAAI,SAAA;EAC3B,MAAMC,SAAS,GAAGN,CAAC,CAACM,SAAS,IAAI,SAAS;;EAE5C;EACE,MAAMC,UAAU,GAAGT,MAAM,CAACS,UAAU,IAAIJ,SAAS;EACjD,MAAMK,aAAa,GAAGV,MAAM,CAACU,aAAa,IAAIF,SAAS;EACvD,MAAMG,SAAS,GAAGX,MAAM,CAACW,SAAS,IAAIP,IAAI;EAC1C,MAAMQ,YAAY,GAAGZ,MAAM,CAACY,YAAY,IAAIR,IAAI;EAChD,MAAMS,eAAe,GAAGb,MAAM,CAACc,WAAW,IAAIV,IAAI;EAClD,MAAMW,YAAY,GAAGf,MAAM,CAACgB,2BAA2B,IAAI,SAAS;EACpE,MAAMC,eAAe,GAAGjB,MAAM,CAACkB,8BAA8B,IAAI,SAAS;EAC1E,MAAMC,aAAa,GAAGnB,MAAM,CAACoB,4BAA4B,IAAI,SAAS;;EAExE;EACE,MAAMC,UAAU,GAAGrB,MAAM,CAACqB,UAAU,KAAK,KAAK;EAC9C,MAAMC,aAAa,GAAGtB,MAAM,CAACsB,aAAa,KAAK,KAAK;EACpD,MAAMC,YAAY,GAAGvB,MAAM,CAACuB,YAAY,KAAK,KAAK;EAClD,MAAMC,eAAe,GAAGxB,MAAM,CAACwB,eAAe,KAAK,KAAK;;EAE1D;EACevB,SAAS,CAACG,IAAI,EAAE,GAAG,CAAA;EAChC,MAAMqB,QAAQ,GAAGxB,SAAS,CAACU,SAAS,EAAE,GAAG,CAAC;EAC1C,MAAMe,UAAU,GAAGzB,SAAS,CAACY,eAAe,EAAE,GAAG,CAAC;;EAEpD;EACE,MAAMc,OAAO,GAAG3B,MAAM,CAAC4B,eAAe,GAClC,oBAAoB5B,MAAM,CAAC4B,eAAe,GAAG,GAC7C,EAAE;EACN,MAAMC,YAAY,GAAG7B,MAAM,CAAC8B,eAAe,GACvC,yBAAyB9B,MAAM,CAAC8B,eAAe,sDAAsD,GACrG,EAAE;;EAER;EACE,MAAMC,aAAa,GAAGV,UAAU,GAC5B,iDAAiDI,QAAQ,2EAA0E,GACnI,8GAA8G;EAElH,MAAMO,gBAAgB,GAAGV,aAAa,GAClC,kDAAkD,GAClD,EAAE;;EAER;EACE,MAAMW,eAAe,GAAGV,YAAA,GACpB,sBAAsBjB,QAAQ,gBAAgBoB,UAAU,uCAAsC,GAC9F,sBAAsBpB,QAAQ,uCAAuC;EAEzE,MAAM4B,gBAAgB,GAAGV,eAAA,GACrB,mFAAmFlB,QAAQ,eAAeoB,UAAU,sCAAqC,GACzJ,4DAA4D;EAEhE,MAAMS,iBAAiB,GAAGX,eAAA,GACtB,mFAAmFlB,QAAQ,eAAeoB,UAAU,sCAAqC,GACzJ,+DAA+D;EAEnE,OAAO;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA,IAAIC,OAAO;AACX,IAAIE,YAAY;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUpB,UAAU;AACpB,yBAAyBR,SAAS,CAACQ,UAAU,EAAE,GAAG,CAAC,cAAcR,SAAS,CAACQ,UAAU,EAAE,GAAG,CAAC;AAC3F;AACA,iCAAiCH,QAAQ;AACzC,yCAAyCI,aAAa;;AAEtD;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsCL,SAAS,OAAOM,SAAS,QAAQL,QAAQ,QAAQK,SAAS,QAAQL,QAAQ;AAChH;AACA,IAAIyB,aAAa;AACjB,IAAIC,gBAAgB;AACpB;AACA,EAAEV,aAAa,GAAG;AAClB;AACA,yDAAyDG,QAAQ;AACjE,qDAAqDxB,SAAS,CAACU,SAAS,EAAE,GAAG,CAAC;AAC9E,EAAE,GAAG,EAAE;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsCN,SAAS,OAAOD,IAAI,QAAQE,QAAQ;AAC1E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0BM,YAAY;AACtC,sEAAsEX,SAAS,CAACW,YAAY,EAAE,GAAG,CAAC;AAClG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,sCAAsCP,SAAS,IAAIC,QAAQ;AAC3D;AACA,IAAI2B,eAAe;AACnB;AACA;AACA,EAAEC,gBAAgB;AAClB,EAAEC,iBAAiB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,sCAAsCpB,YAAY,IAAIE,eAAe;AACrE;AACA;AACA;AACA;AACA;AACA,+DAA+DE,aAAa;AAC5E,sDAAsDA,aAAa;;AAEnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;;AC3SA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASlB,SAASA,CAACmC,GAAG,EAAEC,KAAK,EAAE;EACpC,IAAI,CAACD,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO,cAAcC,KAAK,GAAG;EAClE,MAAMC,QAAQ,GAAGF,GAAG,CAACG,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;E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EAAE,IAAI,CAAC;AACrF;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAIoC,aAAa;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAeT,MAAM;AACrB,kBAAkBL,gBAAgB;AAClC;AACA,IAAIW,aAAa;AACjB;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAU7B,gBAAgB;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,kBAAkBmB,uBAAuB;AACzC;AACA,eAAeM,aAAa;AAC5B,IAAIK,UAAU;AACd;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8BnC,UAAU,QAAQC,SAAS;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAUU,cAAc;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAUC,cAAc;AACxB,yBAAyB/V,SAAS,CAACG,IAAI,EAAE,GAAG,CAAC;AAC7C;;AAEA;AACA;AACA;AACA;AACA,eAAe6V,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAeE,UAAU;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuCR,SAAS,QAAQvV,IAAI,SAASyV,OAAO;AAC5E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAUA,OAAO;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,UAAUH,gBAAgB;AAC1B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI8B,YAAY;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMvX,SAAS,CAACoV,SAAS,EAAE,GAAG,CAAC;AAC/B,MAAMpV,SAAS,CAACmV,UAAU,EAAE,GAAG,CAAC;AAChC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAeG,KAAK;AACpB,kBAAkBoB,gBAAgB;AAClC;AACA;AACA;AACA,IAAIe,cAAc;AAClB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkDzX,SAAS,CAACqV,WAAW,EAAE,IAAI,CAAC;AAC9E;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,UAAUe,eAAe;AACzB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,uCAAuCf,WAAW,QAAQD,SAAS;AACnE;AACA;AACA;AACA;AACA;AACA,0BAA0BpV,SAAS,CAACmV,UAAU,EAAE,GAAG,CAAC;AACpD;;AAEA;AACA;AACA;AACA,UAAUI,QAAQ;AAClB;;AAEA;AACA;AACA,UAAUH,SAAS;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe+B,UAAU;AACzB,UAAUd,YAAY;AACtB;AACA;AACA;AACA;AACA,0BAA0BrW,SAAS,CAACmV,UAAU,EAAE,GAAG,CAAC;AACpD;AACA;;AAEA;AACA;AACA,0BAA0BnV,SAAS,CAACmV,UAAU,EAAE,GAAG,CAAC;AACpD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,UAAU5U,SAAS;AACnB;AACA;;AAEA;AACA,UAAU6U,SAAS;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;A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"}