@quantabit/redpacket-sdk 1.0.0

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":"index.esm.js","sources":["../src/services/redPacketApi.js","../src/i18n/index.js","../src/context/RedPacketContext.jsx","../src/types/index.js","../src/components/RedPacketCard.jsx","../src/components/SendRedPacket.jsx","../src/utils/chainAnchor.js"],"sourcesContent":["/**\n * RedPacket SDK - API 客户端\n * 红包系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 红包 API 客户端\n */\nexport class RedPacketApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/redpacket', config);\n }\n\n // ============ 红包发送 ============\n\n /**\n * 发送红包\n * @param {Object} data - 红包数据\n */\n async send(data) {\n return this.post('/send', data);\n }\n\n /**\n * 兼容旧 Hook 命名\n */\n async createRedpacket(data) {\n return this.send(data);\n }\n\n /**\n * 发送群红包\n * @param {string} groupId - 群组 ID\n * @param {Object} data - 红包数据\n */\n async sendToGroup(groupId, data) {\n return this.post('/send/group', { group_id: groupId, ...data });\n }\n\n /**\n * 发送定向红包\n * @param {string[]} userIds - 用户 ID 列表\n * @param {Object} data - 红包数据\n */\n async sendToUsers(userIds, data) {\n return this.post('/send/users', { user_ids: userIds, ...data });\n }\n\n // ============ 红包领取 ============\n\n /**\n * 领取红包\n * @param {string} redpacketId - 红包 ID\n */\n async claim(redpacketId) {\n return this.post(`/${redpacketId}/claim`);\n }\n\n /**\n * 兼容旧 Hook 命名\n */\n async grabRedpacket(redpacketId) {\n return this.claim(redpacketId);\n }\n\n /**\n * 获取红包详情\n * @param {string} redpacketId - 红包 ID\n */\n async getRedpacket(redpacketId) {\n return this.get(`/${redpacketId}`);\n }\n\n /**\n * 获取红包领取列表\n * @param {string} redpacketId - 红包 ID\n */\n async getClaimList(redpacketId) {\n return this.get(`/${redpacketId}/claims`);\n }\n\n // ============ 我的红包 ============\n\n /**\n * 获取收到的红包\n * @param {Object} params - 查询参数\n */\n async getReceivedRedpackets(params = {}) {\n return this.get('/my/received', params);\n }\n\n /**\n * 获取发出的红包\n * @param {Object} params - 查询参数\n */\n async getSentRedpackets(params = {}) {\n return this.get('/my/sent', params);\n }\n\n /**\n * 兼容旧 Hook 命名\n */\n async getMyRedpackets(params = {}) {\n return this.getSentRedpackets(params);\n }\n\n // ============ 链上证明 ============\n\n /**\n * 提交红包链上交易哈希\n * @param {string} redpacketId - 红包 ID\n * @param {string} txHash - QBit 交易哈希\n * @param {Object} data - 额外链上证明数据\n */\n async submitChainTx(redpacketId, txHash, data = {}) {\n return this.post(`/${redpacketId}/chain/submit`, {\n tx_hash: txHash,\n chain: 'qbit',\n network: 'mainnet',\n ...data,\n });\n }\n\n /**\n * 查询红包链上确认状态\n * @param {string} redpacketId - 红包 ID\n */\n async getChainStatus(redpacketId) {\n return this.get(`/${redpacketId}/chain/status`);\n }\n\n /**\n * 获取红包统计\n */\n async getMyStats() {\n return this.get('/my/stats');\n }\n\n // ============ 红包封面 ============\n\n /**\n * 获取可用红包封面\n */\n async getCovers() {\n return this.get('/covers');\n }\n\n /**\n * 获取我的红包封面\n */\n async getMyCovers() {\n return this.get('/my/covers');\n }\n\n /**\n * 领取红包封面\n * @param {string} coverId - 封面 ID\n */\n async claimCover(coverId) {\n return this.post(`/covers/${coverId}/claim`);\n }\n\n // ============ 口令红包 ============\n\n /**\n * 发送口令红包\n * @param {Object} data - 红包数据\n */\n async sendPasswordRedpacket(data) {\n return this.post('/send/password', data);\n }\n\n /**\n * 输入口令领取\n * @param {string} password - 口令\n */\n async claimByPassword(password) {\n return this.post('/claim/password', { password });\n }\n\n // ============ 红包雨 ============\n\n /**\n * 获取进行中的红包雨\n */\n async getActiveRain() {\n return this.get('/rain/active');\n }\n\n /**\n * 加入红包雨\n * @param {string} rainId - 红包雨 ID\n */\n async joinRain(rainId) {\n return this.post(`/rain/${rainId}/join`);\n }\n\n /**\n * 抢红包雨红包\n * @param {string} rainId - 红包雨 ID\n * @param {string} packetId - 红包 ID\n */\n async grabRainPacket(rainId, packetId) {\n return this.post(`/rain/${rainId}/grab`, { packet_id: packetId });\n }\n\n // ============ 管理员操作 ============\n\n /**\n * 创建红包活动(管理员)\n * @param {Object} data - 活动数据\n */\n async createActivity(data) {\n return this.post('/admin/activities', data);\n }\n\n /**\n * 获取红包统计(管理员)\n * @param {Object} params - 统计参数\n */\n async getStats(params = {}) {\n return this.get('/admin/stats', params);\n }\n}\n\n// 创建默认实例\nexport const redPacketApi = new RedPacketApiClient();\n\n\n\nexport default redPacketApi;\n","/**\n * RedPacket SDK - 国际化 i18n\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n loading: '加载中...',\n redPacket: '红包',\n redPackets: '红包记录',\n sendRedPacket: '发红包',\n receiveRedPacket: '收红包',\n \n // 红包类型\n typeNormal: '普通红包',\n typeLucky: '拼手气红包',\n typeExclusive: '专属红包',\n typeGroup: '群红包',\n \n // 状态\n statusPending: '未领取',\n statusReceived: '已领取',\n statusExpired: '已过期',\n statusEmpty: '已抢光',\n \n // 发送\n totalAmount: '总金额',\n quantity: '红包个数',\n blessing: '祝福语',\n defaultBlessing: '恭喜发财,大吉大利!',\n send: '塞钱进红包',\n \n // 领取\n open: '開',\n claim: '拆红包',\n luckyAmount: '手气最佳',\n claimSuccess: '领取成功',\n \n // 记录\n sent: '发出的',\n received: '收到的',\n noRecords: '暂无红包记录',\n \n // 详情\n from: '来自',\n claimedBy: '已领取',\n remainingCount: '剩余 {count} 个',\n expireIn: '{time} 后过期',\n \n // 提示\n insufficientBalance: '余额不足',\n minAmount: '单个红包最低 {min}',\n maxAmount: '单个红包最高 {max}',\n alreadyClaimed: '您已领取过',\n redPacketExpired: '红包已过期',\n redPacketEmpty: '红包已被领完',\n },\n \n en: {\n loading: 'Loading...',\n redPacket: 'Red Packet',\n redPackets: 'Red Packets',\n sendRedPacket: 'Send',\n receiveRedPacket: 'Receive',\n \n typeNormal: 'Fixed Amount',\n typeLucky: 'Lucky Draw',\n typeExclusive: 'Exclusive',\n typeGroup: 'Group',\n \n statusPending: 'Pending',\n statusReceived: 'Received',\n statusExpired: 'Expired',\n statusEmpty: 'Empty',\n \n totalAmount: 'Total Amount',\n quantity: 'Quantity',\n blessing: 'Blessing',\n defaultBlessing: 'Best wishes!',\n send: 'Send Red Packet',\n \n open: 'Open',\n claim: 'Claim',\n luckyAmount: 'Luckiest',\n claimSuccess: 'Claimed successfully',\n \n sent: 'Sent',\n received: 'Received',\n noRecords: 'No records',\n \n from: 'From',\n claimedBy: 'Claimed',\n remainingCount: '{count} left',\n expireIn: 'Expires in {time}',\n \n insufficientBalance: 'Insufficient balance',\n minAmount: 'Min {min} per packet',\n maxAmount: 'Max {max} per packet',\n alreadyClaimed: 'Already claimed',\n redPacketExpired: 'Expired',\n redPacketEmpty: 'No more left',\n },\n \n ja: {\n loading: '読み込み中...',\n redPacket: '紅包(お年玉)',\n redPackets: '紅包履歴',\n sendRedPacket: '紅包を送る',\n receiveRedPacket: '紅包を受け取る',\n \n typeNormal: '通常紅包',\n typeLucky: 'ランダム紅包',\n typeExclusive: '限定紅包',\n typeGroup: 'グループ紅包',\n \n statusPending: '未受け取り',\n statusReceived: '受け取り済み',\n statusExpired: '期限切れ',\n statusEmpty: '品切れ',\n \n totalAmount: '合計金額',\n quantity: '個数',\n blessing: 'メッセージ',\n defaultBlessing: 'おめでとうございます!',\n send: '紅包にお金を入れる',\n \n open: '開く',\n claim: '紅包を開ける',\n luckyAmount: '最高額',\n claimSuccess: '受け取り成功',\n \n sent: '送った紅包',\n received: '受け取った紅包',\n noRecords: '紅包の履歴はありません',\n \n from: '差出人',\n claimedBy: '受け取り済み',\n remainingCount: '残り {count} 個',\n expireIn: '{time} 後に期限切れ',\n \n insufficientBalance: '残高不足',\n minAmount: '1つあたり最低 {min}',\n maxAmount: '1つあたり最高 {max}',\n alreadyClaimed: 'すでに受け取っています',\n redPacketExpired: '紅包は期限切れです',\n redPacketEmpty: '紅包は全て受け取られました',\n },\n \n ko: {\n loading: '로딩 중...',\n redPacket: '홍바오',\n redPackets: '홍바오 내역',\n sendRedPacket: '홍바오 보내기',\n receiveRedPacket: '홍바오 받기',\n \n typeNormal: '일반 홍바오',\n typeLucky: '랜덤 홍바오',\n typeExclusive: '전용 홍바오',\n typeGroup: '그룹 홍바오',\n \n statusPending: '미수령',\n statusReceived: '수령 완료',\n statusExpired: '만료됨',\n statusEmpty: '소진됨',\n \n totalAmount: '총 금액',\n quantity: '개수',\n blessing: '메시지',\n defaultBlessing: '부자 되세요!',\n send: '홍바오에 금액 넣기',\n \n open: '열기',\n claim: '홍바오 열기',\n luckyAmount: '최고 당첨',\n claimSuccess: '수령 성공',\n \n sent: '보낸 내역',\n received: '받은 내역',\n noRecords: '홍바오 내역이 없습니다',\n \n from: '보낸 사람',\n claimedBy: '수령 완료',\n remainingCount: '{count}개 남음',\n expireIn: '{time} 후 만료',\n \n insufficientBalance: '잔액 부족',\n minAmount: '1개당 최소 {min}',\n maxAmount: '1개당 최대 {max}',\n alreadyClaimed: '이미 수령했습니다',\n redPacketExpired: '홍바오가 만료되었습니다',\n redPacketEmpty: '홍바오가 모두 소진되었습니다',\n },\n};\n\nlet currentLanguage = 'zh';\n\nexport function setLanguage(lang) {\n if (SUPPORTED_LANGUAGES.includes(lang)) {\n currentLanguage = lang;\n if (typeof window !== 'undefined') {\n localStorage.setItem('qbit_did_redpacket_language', lang);\n }\n }\n}\n\nexport function getLanguage() {\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_did_redpacket_language');\n if (saved && SUPPORTED_LANGUAGES.includes(saved)) {\n currentLanguage = saved;\n }\n }\n return currentLanguage;\n}\n\nexport function t(key, params) {\n const msgs = messages[getLanguage()] || messages.zh;\n let text = msgs[key] || key;\n if (params) {\n Object.keys(params).forEach(k => {\n text = text.replace(new RegExp(`\\\\{${k}\\\\}`, 'g'), params[k]);\n });\n }\n return text;\n}\n\nexport default { messages, SUPPORTED_LANGUAGES, setLanguage, getLanguage, t };\n","/**\n * RedPacket SDK - Context Provider\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { redPacketApi } from '../services/redPacketApi';\nimport { setLanguage } from '../i18n';\n\nconst RedPacketContext = createContext(null);\n\nexport function RedPacketProvider({\n children,\n apiUrl,\n token,\n language = 'zh',\n onSend,\n onClaim,\n onError,\n}) {\n const [sentList, setSentList] = useState([]);\n const [receivedList, setReceivedList] = useState([]);\n const [stats, setStats] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n setLanguage(language);\n }, [language]);\n\n const handleError = useCallback((err) => {\n setError(err);\n onError?.(err);\n }, [onError]);\n\n const send = useCallback(async (data) => {\n setLoading(true);\n try {\n const result = await redPacketApi.send(data);\n onSend?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onSend]);\n // ============ 领取红包 ============\n\n const claim = useCallback(async (redPacketId) => {\n setLoading(true);\n try {\n const result = await redPacketApi.claim(redPacketId);\n onClaim?.(result);\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [handleError, onClaim]);\n\n // ============ 加载记录 ============\n\n const loadSentList = useCallback(async (params = {}) => {\n try {\n const result = await redPacketApi.getSentList(params);\n const items = result.items || result.data || result || [];\n setSentList(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n const loadReceivedList = useCallback(async (params = {}) => {\n try {\n const result = await redPacketApi.getReceivedList(params);\n const items = result.items || result.data || result || [];\n setReceivedList(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n const loadStats = useCallback(async () => {\n try {\n const result = await redPacketApi.getStats();\n setStats(result);\n return result;\n } catch (err) {\n handleError(err);\n }\n }, [handleError]);\n\n const value = {\n sentList,\n receivedList,\n stats,\n loading,\n error,\n send,\n claim,\n loadSentList,\n loadReceivedList,\n loadStats,\n api: redPacketApi,\n };\n\n return (\n <RedPacketContext.Provider value={value}>\n {children}\n </RedPacketContext.Provider>\n );\n}\n\nexport function useRedPacket() {\n const context = useContext(RedPacketContext);\n if (!context) {\n throw new Error('useRedPacket must be used within a RedPacketProvider');\n }\n return context;\n}\n\nexport default RedPacketContext;\n","/**\n * RedPacket SDK - 类型定义\n */\n\n// 红包类型\nexport const RedPacketType = {\n NORMAL: 'normal', // 普通红包(均分)\n LUCKY: 'lucky', // 拼手气红包\n EXCLUSIVE: 'exclusive', // 专属红包(指定人)\n GROUP: 'group', // 群红包\n};\n\n// 红包状态\nexport const RedPacketStatus = {\n PENDING: 'pending', // 待领取\n PARTIAL: 'partial', // 部分领取\n FINISHED: 'finished', // 已领完\n EXPIRED: 'expired', // 已过期\n REFUNDED: 'refunded', // 已退还\n};\n\n// 领取状态\nexport const ClaimStatus = {\n AVAILABLE: 'available', // 可领取\n CLAIMED: 'claimed', // 已领取\n EXPIRED: 'expired', // 已过期\n};\n\n/**\n * 创建默认红包\n */\nexport function createDefaultRedPacket(overrides = {}) {\n return {\n id: null,\n sender_did: null,\n sender_name: '',\n sender_avatar: null,\n type: RedPacketType.LUCKY,\n total_amount: 0, // 总金额\n quantity: 1, // 总个数\n claimed_count: 0, // 已领取个数\n claimed_amount: 0, // 已领取金额\n blessing: '', // 祝福语\n currency: 'POINTS', // 货币类型\n status: RedPacketStatus.PENDING,\n expire_at: null,\n created_at: null,\n ...overrides,\n };\n}\n\n/**\n * 创建默认领取记录\n */\nexport function createDefaultClaim(overrides = {}) {\n return {\n id: null,\n red_packet_id: null,\n user_did: null,\n user_name: '',\n user_avatar: null,\n amount: 0,\n is_luckiest: false, // 是否手气最佳\n claimed_at: null,\n ...overrides,\n };\n}\n\n/**\n * 计算红包剩余数量\n */\nexport function getRemainingCount(redPacket) {\n return redPacket.quantity - redPacket.claimed_count;\n}\n\n/**\n * 计算红包剩余金额\n */\nexport function getRemainingAmount(redPacket) {\n return redPacket.total_amount - redPacket.claimed_amount;\n}\n\n/**\n * 检查红包是否可领取\n */\nexport function isClaimable(redPacket) {\n if (redPacket.status === RedPacketStatus.FINISHED) return false;\n if (redPacket.status === RedPacketStatus.EXPIRED) return false;\n if (redPacket.expire_at && new Date(redPacket.expire_at) < new Date()) return false;\n return getRemainingCount(redPacket) > 0;\n}\n\n/**\n * 格式化金额\n */\nexport function formatAmount(amount, currency = 'POINTS') {\n if (currency === 'POINTS') return `${amount} 积分`;\n if (currency === 'CNY') return `¥${amount.toFixed(2)}`;\n if (currency === 'USD') return `$${amount.toFixed(2)}`;\n return `${amount} ${currency}`;\n}\n","/**\n * RedPacket SDK - RedPacketCard 组件\n * 红包卡片展示(可打开领取)\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { useRedPacket } from '../context/RedPacketContext';\nimport { RedPacketStatus, RedPacketType, isClaimable, formatAmount, getRemainingCount } from '../types';\n\nexport function RedPacketCard({\n redPacket,\n onOpen,\n onClaimSuccess,\n showDetail = false,\n className = '',\n}) {\n const { claim, loading } = useRedPacket();\n const [isOpening, setIsOpening] = useState(false);\n const [claimResult, setClaimResult] = useState(null);\n const [error, setError] = useState(null);\n\n if (!redPacket) return null;\n\n const {\n id,\n type,\n status,\n sender_name,\n sender_avatar,\n blessing,\n total_amount,\n currency = 'USD',\n } = redPacket;\n\n const remaining = getRemainingCount(redPacket);\n const canClaim = isClaimable(redPacket) && !claimResult;\n\n const handleOpen = async (e) => {\n e.stopPropagation();\n if (!canClaim || isOpening || loading) return;\n\n setIsOpening(true);\n setError(null);\n try {\n const result = await claim(id);\n setClaimResult(result);\n onClaimSuccess?.(result);\n } catch (err) {\n console.error(err);\n setError(err?.message || String(err));\n } finally {\n setIsOpening(false);\n }\n };\n\n const getTypeLabel = () => {\n const labels = {\n [RedPacketType.NORMAL]: t('typeNormal'),\n [RedPacketType.LUCKY]: t('typeLucky'),\n [RedPacketType.EXCLUSIVE]: t('typeExclusive'),\n [RedPacketType.GROUP]: t('typeGroup'),\n };\n return labels[type] || type;\n };\n\n const getStatusClass = () => {\n if (claimResult) return 'opened';\n if (status === RedPacketStatus.EXPIRED) return 'expired';\n if (status === RedPacketStatus.FINISHED) return 'empty';\n return '';\n };\n\n return (\n <div className={`redpacket-card ${getStatusClass()} ${className}`}>\n {/* 红包主体 */}\n <div className=\"redpacket-body\">\n {/* 顶部金币装饰 */}\n <div className=\"redpacket-coins\">\n <span className=\"coin\">💰</span>\n <span className=\"coin\">💰</span>\n <span className=\"coin\">💰</span>\n </div>\n\n {/* 发送者信息 */}\n <div className=\"redpacket-sender\">\n <div className=\"sender-avatar\">\n {sender_avatar ? (\n <img src={sender_avatar} alt=\"\" />\n ) : (\n <span>🧧</span>\n )}\n </div>\n <span className=\"sender-name\">{sender_name || t('redPacket')}</span>\n </div>\n\n {/* 祝福语 */}\n <div className=\"redpacket-blessing\">\n {blessing || t('defaultBlessing')}\n </div>\n\n {/* 类型标签 */}\n <div className=\"redpacket-type\">\n {getTypeLabel()}\n </div>\n\n {/* 开启按钮/结果 */}\n {claimResult ? (\n <div className=\"redpacket-result\">\n <span className=\"result-amount\">{formatAmount(claimResult.amount, currency)}</span>\n {claimResult.is_luckiest && (\n <span className=\"result-lucky\">🎉 {t('luckyAmount')}</span>\n )}\n </div>\n ) : (\n <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: '8px' }}>\n <button\n className=\"redpacket-open-btn\"\n onClick={handleOpen}\n disabled={!canClaim || isOpening || loading}\n >\n {isOpening ? '...' : (\n status === RedPacketStatus.EXPIRED ? t('statusExpired') :\n status === RedPacketStatus.FINISHED ? t('statusEmpty') :\n t('open')\n )}\n </button>\n {error && <div style={{ color: '#FEE2E2', fontSize: '12px', background: 'rgba(239, 68, 68, 0.8)', padding: '4px 8px', borderRadius: '4px', maxWidth: '100%', wordBreak: 'break-word', textAlign: 'center' }}>{error}</div>}\n </div>\n )}\n\n {/* 底部信息 */}\n {showDetail && (\n <div className=\"redpacket-footer\">\n <span>共 {formatAmount(total_amount, currency)}</span>\n {remaining > 0 && <span>{t('remainingCount', { count: remaining })}</span>}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport default RedPacketCard;\n","/**\n * RedPacket SDK - SendRedPacket 组件\n * 发红包表单\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { useRedPacket } from '../context/RedPacketContext';\nimport { RedPacketType } from '../types';\n\nexport function SendRedPacket({\n defaultType = RedPacketType.LUCKY,\n currency = 'POINTS',\n minAmount = 0.01,\n maxAmount = 200,\n onSuccess,\n onCancel,\n className = '',\n}) {\n const { send, loading } = useRedPacket();\n const [type, setType] = useState(defaultType);\n const [totalAmount, setTotalAmount] = useState('');\n const [quantity, setQuantity] = useState('');\n const [blessing, setBlessing] = useState('');\n const [error, setError] = useState('');\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setError('');\n\n if (loading) return;\n\n const amount = parseFloat(totalAmount);\n const count = parseInt(quantity);\n\n if (!amount || amount <= 0) {\n setError('请输入正确的金额');\n return;\n }\n if (!count || count < 1) {\n setError('请输入红包个数');\n return;\n }\n if (amount / count < minAmount) {\n setError(t('minAmount', { min: minAmount }));\n return;\n }\n if (amount / count > maxAmount) {\n setError(t('maxAmount', { max: maxAmount }));\n return;\n }\n\n try {\n const result = await send({\n type,\n total_amount: amount,\n quantity: count,\n blessing: blessing || t('defaultBlessing'),\n currency,\n });\n setTotalAmount('');\n setQuantity('');\n setBlessing('');\n onSuccess?.(result);\n } catch (err) {\n setError(err.message);\n }\n };\n\n const perAmount = totalAmount && quantity\n ? (parseFloat(totalAmount) / parseInt(quantity)).toFixed(2)\n : '0';\n\n return (\n <div className={`send-redpacket ${className}`}>\n <div className=\"send-redpacket-header\">\n <h3>{t('sendRedPacket')}</h3>\n </div>\n\n <form onSubmit={handleSubmit}>\n {/* 红包类型 */}\n <div className=\"form-group\">\n <div className=\"type-selector\">\n <button\n type=\"button\"\n className={type === RedPacketType.NORMAL ? 'active' : ''}\n onClick={() => setType(RedPacketType.NORMAL)}\n >\n {t('typeNormal')}\n </button>\n <button\n type=\"button\"\n className={type === RedPacketType.LUCKY ? 'active' : ''}\n onClick={() => setType(RedPacketType.LUCKY)}\n >\n {t('typeLucky')}\n </button>\n </div>\n </div>\n\n {/* 总金额 */}\n <div className=\"form-group\">\n <label>{t('totalAmount')}</label>\n <div className=\"amount-input\">\n <input\n type=\"number\"\n value={totalAmount}\n onChange={(e) => setTotalAmount(e.target.value)}\n placeholder=\"0.00\"\n min=\"0\"\n step=\"0.01\"\n />\n <span className=\"currency\">{currency}</span>\n </div>\n </div>\n\n {/* 红包个数 */}\n <div className=\"form-group\">\n <label>{t('quantity')}</label>\n <input\n type=\"number\"\n value={quantity}\n onChange={(e) => setQuantity(e.target.value)}\n placeholder=\"1\"\n min=\"1\"\n max=\"100\"\n />\n {type === RedPacketType.NORMAL && (\n <span className=\"hint\">每个红包 {perAmount} {currency}</span>\n )}\n </div>\n\n {/* 祝福语 */}\n <div className=\"form-group\">\n <label>{t('blessing')}</label>\n <input\n type=\"text\"\n value={blessing}\n onChange={(e) => setBlessing(e.target.value)}\n placeholder={t('defaultBlessing')}\n maxLength={50}\n />\n </div>\n\n {/* 错误提示 */}\n {error && <div className=\"form-error\">{error}</div>}\n\n {/* 按钮 */}\n <div className=\"form-actions\">\n {onCancel && (\n <button type=\"button\" className=\"btn-cancel\" onClick={onCancel}>\n 取消\n </button>\n )}\n <button type=\"submit\" className=\"btn-submit\" disabled={loading}>\n {loading ? t('loading') : t('send')}\n </button>\n </div>\n </form>\n </div>\n );\n}\n\nexport default SendRedPacket;\n","const REDPACKET_ANCHOR_NAMESPACE = 'qbit_redpacket';\n\nfunction pickRedPacketId(redpacket) {\n return redpacket?.id || redpacket?.redpacket_id || redpacket?.redpacketId || redpacket?.packet_id || redpacket?.packetId;\n}\n\nfunction pickContentHash(redpacket, options) {\n return (\n options.contentHash ||\n redpacket?.content_hash ||\n redpacket?.redpacket_hash ||\n redpacket?.packet_hash ||\n redpacket?.hash ||\n null\n );\n}\n\nexport async function buildRedPacketAnchorMemo(redpacket, options = {}) {\n const { buildQBitAnchorMemo } = await import('@quantabit/qbit-chain-sdk');\n const redpacketId = options.redpacketId || pickRedPacketId(redpacket);\n const contentHash = pickContentHash(redpacket, options);\n\n return buildQBitAnchorMemo({\n action: options.action || 'redpacket_anchor',\n subject: redpacketId ? `redpacket:${redpacketId}` : 'redpacket',\n resource_id: redpacketId,\n content_hash: contentHash,\n version: options.version,\n timestamp: options.timestamp,\n extra: {\n amount: redpacket?.amount,\n total_amount: redpacket?.total_amount,\n token: redpacket?.token || redpacket?.currency || redpacket?.symbol,\n sender_did: redpacket?.sender_did,\n ...options.extra,\n },\n }, {\n namespace: options.namespace || REDPACKET_ANCHOR_NAMESPACE,\n maxBytes: options.maxBytes,\n });\n}\n\nexport function buildRedPacketChainSubmit(redpacketId, txHash, options = {}) {\n return {\n redpacket_id: redpacketId,\n tx_hash: txHash,\n chain: options.chain || 'qbit',\n network: options.network || 'mainnet',\n action: options.action || 'redpacket_anchor',\n memo: options.memo,\n content_hash: options.contentHash,\n ...options.extra,\n };\n}\n\nexport { REDPACKET_ANCHOR_NAMESPACE };\n"],"names":["RedPacketApiClient","BaseApiClient","constructor","config","send","data","post","createRedpacket","sendToGroup","groupId","group_id","sendToUsers","userIds","user_ids","claim","redpacketId","grabRedpacket","getRedpacket","get","getClaimList","getReceivedRedpackets","params","getSentRedpackets","getMyRedpackets","submitChainTx","txHash","tx_hash","chain","network","getChainStatus","getMyStats","getCovers","getMyCovers","claimCover","coverId","sendPasswordRedpacket","claimByPassword","password","getActiveRain","joinRain","rainId","grabRainPacket","packetId","packet_id","createActivity","getStats","redPacketApi","SUPPORTED_LANGUAGES","messages","zh","loading","redPacket","redPackets","sendRedPacket","receiveRedPacket","typeNormal","typeLucky","typeExclusive","typeGroup","statusPending","statusReceived","statusExpired","statusEmpty","totalAmount","quantity","blessing","defaultBlessing","open","luckyAmount","claimSuccess","sent","received","noRecords","from","claimedBy","remainingCount","expireIn","insufficientBalance","minAmount","maxAmount","alreadyClaimed","redPacketExpired","redPacketEmpty","en","ja","ko","currentLanguage","setLanguage","lang","includes","window","localStorage","setItem","getLanguage","saved","getItem","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","RedPacketContext","createContext","RedPacketProvider","children","apiUrl","token","language","onSend","onClaim","onError","sentList","setSentList","useState","receivedList","setReceivedList","stats","setStats","setLoading","error","setError","useEffect","handleError","useCallback","err","result","redPacketId","loadSentList","getSentList","items","loadReceivedList","getReceivedList","loadStats","value","api","React","createElement","Provider","useRedPacket","context","useContext","Error","RedPacketType","NORMAL","LUCKY","EXCLUSIVE","GROUP","RedPacketStatus","PENDING","PARTIAL","FINISHED","EXPIRED","REFUNDED","ClaimStatus","AVAILABLE","CLAIMED","createDefaultRedPacket","overrides","id","sender_did","sender_name","sender_avatar","type","total_amount","claimed_count","claimed_amount","currency","status","expire_at","created_at","createDefaultClaim","red_packet_id","user_did","user_name","user_avatar","amount","is_luckiest","claimed_at","getRemainingCount","getRemainingAmount","isClaimable","Date","formatAmount","toFixed","RedPacketCard","onOpen","onClaimSuccess","showDetail","className","isOpening","setIsOpening","claimResult","setClaimResult","remaining","canClaim","handleOpen","e","stopPropagation","console","message","String","getTypeLabel","labels","getStatusClass","src","alt","style","display","flexDirection","alignItems","gap","onClick","disabled","color","fontSize","background","padding","borderRadius","maxWidth","wordBreak","textAlign","count","SendRedPacket","defaultType","onSuccess","onCancel","setType","setTotalAmount","setQuantity","setBlessing","handleSubmit","preventDefault","parseFloat","parseInt","min","max","perAmount","onSubmit","onChange","target","placeholder","step","maxLength","REDPACKET_ANCHOR_NAMESPACE","pickRedPacketId","redpacket","redpacket_id","pickContentHash","options","contentHash","content_hash","redpacket_hash","packet_hash","hash","buildRedPacketAnchorMemo","buildQBitAnchorMemo","action","subject","resource_id","version","timestamp","extra","symbol","namespace","maxBytes","buildRedPacketChainSubmit","memo"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACA;AACA;AACO,MAAMA,kBAAkB,SAASC,aAAa,CAAC;AACpDC,EAAAA,WAAWA,CAACC,MAAM,GAAG,EAAE,EAAE;AACvB,IAAA,KAAK,CAAC,YAAY,EAAEA,MAAM,CAAC;AAC7B,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMC,IAAIA,CAACC,IAAI,EAAE;AACf,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,OAAO,EAAED,IAAI,CAAC;AACjC,EAAA;;AAEA;AACF;AACA;EACE,MAAME,eAAeA,CAACF,IAAI,EAAE;AAC1B,IAAA,OAAO,IAAI,CAACD,IAAI,CAACC,IAAI,CAAC;AACxB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMG,WAAWA,CAACC,OAAO,EAAEJ,IAAI,EAAE;AAC/B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,aAAa,EAAE;AAAEI,MAAAA,QAAQ,EAAED,OAAO;MAAE,GAAGJ;AAAK,KAAC,CAAC;AACjE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMM,WAAWA,CAACC,OAAO,EAAEP,IAAI,EAAE;AAC/B,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,aAAa,EAAE;AAAEO,MAAAA,QAAQ,EAAED,OAAO;MAAE,GAAGP;AAAK,KAAC,CAAC;AACjE,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMS,KAAKA,CAACC,WAAW,EAAE;AACvB,IAAA,OAAO,IAAI,CAACT,IAAI,CAAC,CAAA,CAAA,EAAIS,WAAW,QAAQ,CAAC;AAC3C,EAAA;;AAEA;AACF;AACA;EACE,MAAMC,aAAaA,CAACD,WAAW,EAAE;AAC/B,IAAA,OAAO,IAAI,CAACD,KAAK,CAACC,WAAW,CAAC;AAChC,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAME,YAAYA,CAACF,WAAW,EAAE;AAC9B,IAAA,OAAO,IAAI,CAACG,GAAG,CAAC,CAAA,CAAA,EAAIH,WAAW,EAAE,CAAC;AACpC,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMI,YAAYA,CAACJ,WAAW,EAAE;AAC9B,IAAA,OAAO,IAAI,CAACG,GAAG,CAAC,CAAA,CAAA,EAAIH,WAAW,SAAS,CAAC;AAC3C,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;AACE,EAAA,MAAMK,qBAAqBA,CAACC,MAAM,GAAG,EAAE,EAAE;AACvC,IAAA,OAAO,IAAI,CAACH,GAAG,CAAC,cAAc,EAAEG,MAAM,CAAC;AACzC,EAAA;;AAEA;AACF;AACA;AACA;AACE,EAAA,MAAMC,iBAAiBA,CAACD,MAAM,GAAG,EAAE,EAAE;AACnC,IAAA,OAAO,IAAI,CAACH,GAAG,CAAC,UAAU,EAAEG,MAAM,CAAC;AACrC,EAAA;;AAEA;AACF;AACA;AACE,EAAA,MAAME,eAAeA,CAACF,MAAM,GAAG,EAAE,EAAE;AACjC,IAAA,OAAO,IAAI,CAACC,iBAAiB,CAACD,MAAM,CAAC;AACvC,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMG,aAAaA,CAACT,WAAW,EAAEU,MAAM,EAAEpB,IAAI,GAAG,EAAE,EAAE;AAClD,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,CAAA,CAAA,EAAIS,WAAW,eAAe,EAAE;AAC/CW,MAAAA,OAAO,EAAED,MAAM;AACfE,MAAAA,KAAK,EAAE,MAAM;AACbC,MAAAA,OAAO,EAAE,SAAS;MAClB,GAAGvB;AACL,KAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMwB,cAAcA,CAACd,WAAW,EAAE;AAChC,IAAA,OAAO,IAAI,CAACG,GAAG,CAAC,CAAA,CAAA,EAAIH,WAAW,eAAe,CAAC;AACjD,EAAA;;AAEA;AACF;AACA;EACE,MAAMe,UAAUA,GAAG;AACjB,IAAA,OAAO,IAAI,CAACZ,GAAG,CAAC,WAAW,CAAC;AAC9B,EAAA;;AAEA;;AAEA;AACF;AACA;EACE,MAAMa,SAASA,GAAG;AAChB,IAAA,OAAO,IAAI,CAACb,GAAG,CAAC,SAAS,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;EACE,MAAMc,WAAWA,GAAG;AAClB,IAAA,OAAO,IAAI,CAACd,GAAG,CAAC,YAAY,CAAC;AAC/B,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMe,UAAUA,CAACC,OAAO,EAAE;AACxB,IAAA,OAAO,IAAI,CAAC5B,IAAI,CAAC,CAAA,QAAA,EAAW4B,OAAO,QAAQ,CAAC;AAC9C,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAMC,qBAAqBA,CAAC9B,IAAI,EAAE;AAChC,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,gBAAgB,EAAED,IAAI,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAM+B,eAAeA,CAACC,QAAQ,EAAE;AAC9B,IAAA,OAAO,IAAI,CAAC/B,IAAI,CAAC,iBAAiB,EAAE;AAAE+B,MAAAA;AAAS,KAAC,CAAC;AACnD,EAAA;;AAEA;;AAEA;AACF;AACA;EACE,MAAMC,aAAaA,GAAG;AACpB,IAAA,OAAO,IAAI,CAACpB,GAAG,CAAC,cAAc,CAAC;AACjC,EAAA;;AAEA;AACF;AACA;AACA;EACE,MAAMqB,QAAQA,CAACC,MAAM,EAAE;AACrB,IAAA,OAAO,IAAI,CAAClC,IAAI,CAAC,CAAA,MAAA,EAASkC,MAAM,OAAO,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE,EAAA,MAAMC,cAAcA,CAACD,MAAM,EAAEE,QAAQ,EAAE;AACrC,IAAA,OAAO,IAAI,CAACpC,IAAI,CAAC,CAAA,MAAA,EAASkC,MAAM,OAAO,EAAE;AAAEG,MAAAA,SAAS,EAAED;AAAS,KAAC,CAAC;AACnE,EAAA;;AAEA;;AAEA;AACF;AACA;AACA;EACE,MAAME,cAAcA,CAACvC,IAAI,EAAE;AACzB,IAAA,OAAO,IAAI,CAACC,IAAI,CAAC,mBAAmB,EAAED,IAAI,CAAC;AAC7C,EAAA;;AAEA;AACF;AACA;AACA;AACE,EAAA,MAAMwC,QAAQA,CAACxB,MAAM,GAAG,EAAE,EAAE;AAC1B,IAAA,OAAO,IAAI,CAACH,GAAG,CAAC,cAAc,EAAEG,MAAM,CAAC;AACzC,EAAA;AACF;;AAEA;MACayB,YAAY,GAAG,IAAI9C,kBAAkB;;ACtOlD;AACA;AACA;;AAEO,MAAM+C,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;AAEnD,MAAMC,QAAQ,GAAG;AACtBC,EAAAA,EAAE,EAAE;AACFC,IAAAA,OAAO,EAAE,QAAQ;AACjBC,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,gBAAgB,EAAE,KAAK;AAEvB;AACAC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,SAAS,EAAE,OAAO;AAClBC,IAAAA,aAAa,EAAE,MAAM;AACrBC,IAAAA,SAAS,EAAE,KAAK;AAEhB;AACAC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,cAAc,EAAE,KAAK;AACrBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAElB;AACAC,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,QAAQ,EAAE,MAAM;AAChBC,IAAAA,QAAQ,EAAE,KAAK;AACfC,IAAAA,eAAe,EAAE,YAAY;AAC7B9D,IAAAA,IAAI,EAAE,OAAO;AAEb;AACA+D,IAAAA,IAAI,EAAE,GAAG;AACTrD,IAAAA,KAAK,EAAE,KAAK;AACZsD,IAAAA,WAAW,EAAE,MAAM;AACnBC,IAAAA,YAAY,EAAE,MAAM;AAEpB;AACAC,IAAAA,IAAI,EAAE,KAAK;AACXC,IAAAA,QAAQ,EAAE,KAAK;AACfC,IAAAA,SAAS,EAAE,QAAQ;AAEnB;AACAC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,cAAc,EAAE,cAAc;AAC9BC,IAAAA,QAAQ,EAAE,YAAY;AAEtB;AACAC,IAAAA,mBAAmB,EAAE,MAAM;AAC3BC,IAAAA,SAAS,EAAE,cAAc;AACzBC,IAAAA,SAAS,EAAE,cAAc;AACzBC,IAAAA,cAAc,EAAE,OAAO;AACvBC,IAAAA,gBAAgB,EAAE,OAAO;AACzBC,IAAAA,cAAc,EAAE;GACjB;AAEDC,EAAAA,EAAE,EAAE;AACFjC,IAAAA,OAAO,EAAE,YAAY;AACrBC,IAAAA,SAAS,EAAE,YAAY;AACvBC,IAAAA,UAAU,EAAE,aAAa;AACzBC,IAAAA,aAAa,EAAE,MAAM;AACrBC,IAAAA,gBAAgB,EAAE,SAAS;AAE3BC,IAAAA,UAAU,EAAE,cAAc;AAC1BC,IAAAA,SAAS,EAAE,YAAY;AACvBC,IAAAA,aAAa,EAAE,WAAW;AAC1BC,IAAAA,SAAS,EAAE,OAAO;AAElBC,IAAAA,aAAa,EAAE,SAAS;AACxBC,IAAAA,cAAc,EAAE,UAAU;AAC1BC,IAAAA,aAAa,EAAE,SAAS;AACxBC,IAAAA,WAAW,EAAE,OAAO;AAEpBC,IAAAA,WAAW,EAAE,cAAc;AAC3BC,IAAAA,QAAQ,EAAE,UAAU;AACpBC,IAAAA,QAAQ,EAAE,UAAU;AACpBC,IAAAA,eAAe,EAAE,cAAc;AAC/B9D,IAAAA,IAAI,EAAE,iBAAiB;AAEvB+D,IAAAA,IAAI,EAAE,MAAM;AACZrD,IAAAA,KAAK,EAAE,OAAO;AACdsD,IAAAA,WAAW,EAAE,UAAU;AACvBC,IAAAA,YAAY,EAAE,sBAAsB;AAEpCC,IAAAA,IAAI,EAAE,MAAM;AACZC,IAAAA,QAAQ,EAAE,UAAU;AACpBC,IAAAA,SAAS,EAAE,YAAY;AAEvBC,IAAAA,IAAI,EAAE,MAAM;AACZC,IAAAA,SAAS,EAAE,SAAS;AACpBC,IAAAA,cAAc,EAAE,cAAc;AAC9BC,IAAAA,QAAQ,EAAE,mBAAmB;AAE7BC,IAAAA,mBAAmB,EAAE,sBAAsB;AAC3CC,IAAAA,SAAS,EAAE,sBAAsB;AACjCC,IAAAA,SAAS,EAAE,sBAAsB;AACjCC,IAAAA,cAAc,EAAE,iBAAiB;AACjCC,IAAAA,gBAAgB,EAAE,SAAS;AAC3BC,IAAAA,cAAc,EAAE;GACjB;AAEDE,EAAAA,EAAE,EAAE;AACFlC,IAAAA,OAAO,EAAE,UAAU;AACnBC,IAAAA,SAAS,EAAE,SAAS;AACpBC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,aAAa,EAAE,OAAO;AACtBC,IAAAA,gBAAgB,EAAE,SAAS;AAE3BC,IAAAA,UAAU,EAAE,MAAM;AAClBC,IAAAA,SAAS,EAAE,QAAQ;AACnBC,IAAAA,aAAa,EAAE,MAAM;AACrBC,IAAAA,SAAS,EAAE,QAAQ;AAEnBC,IAAAA,aAAa,EAAE,OAAO;AACtBC,IAAAA,cAAc,EAAE,QAAQ;AACxBC,IAAAA,aAAa,EAAE,MAAM;AACrBC,IAAAA,WAAW,EAAE,KAAK;AAElBC,IAAAA,WAAW,EAAE,MAAM;AACnBC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,QAAQ,EAAE,OAAO;AACjBC,IAAAA,eAAe,EAAE,aAAa;AAC9B9D,IAAAA,IAAI,EAAE,WAAW;AAEjB+D,IAAAA,IAAI,EAAE,IAAI;AACVrD,IAAAA,KAAK,EAAE,QAAQ;AACfsD,IAAAA,WAAW,EAAE,KAAK;AAClBC,IAAAA,YAAY,EAAE,QAAQ;AAEtBC,IAAAA,IAAI,EAAE,OAAO;AACbC,IAAAA,QAAQ,EAAE,SAAS;AACnBC,IAAAA,SAAS,EAAE,aAAa;AAExBC,IAAAA,IAAI,EAAE,KAAK;AACXC,IAAAA,SAAS,EAAE,QAAQ;AACnBC,IAAAA,cAAc,EAAE,cAAc;AAC9BC,IAAAA,QAAQ,EAAE,eAAe;AAEzBC,IAAAA,mBAAmB,EAAE,MAAM;AAC3BC,IAAAA,SAAS,EAAE,eAAe;AAC1BC,IAAAA,SAAS,EAAE,eAAe;AAC1BC,IAAAA,cAAc,EAAE,aAAa;AAC7BC,IAAAA,gBAAgB,EAAE,WAAW;AAC7BC,IAAAA,cAAc,EAAE;GACjB;AAEDG,EAAAA,EAAE,EAAE;AACFnC,IAAAA,OAAO,EAAE,SAAS;AAClBC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,UAAU,EAAE,QAAQ;AACpBC,IAAAA,aAAa,EAAE,SAAS;AACxBC,IAAAA,gBAAgB,EAAE,QAAQ;AAE1BC,IAAAA,UAAU,EAAE,QAAQ;AACpBC,IAAAA,SAAS,EAAE,QAAQ;AACnBC,IAAAA,aAAa,EAAE,QAAQ;AACvBC,IAAAA,SAAS,EAAE,QAAQ;AAEnBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,cAAc,EAAE,OAAO;AACvBC,IAAAA,aAAa,EAAE,KAAK;AACpBC,IAAAA,WAAW,EAAE,KAAK;AAElBC,IAAAA,WAAW,EAAE,MAAM;AACnBC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,QAAQ,EAAE,KAAK;AACfC,IAAAA,eAAe,EAAE,SAAS;AAC1B9D,IAAAA,IAAI,EAAE,YAAY;AAElB+D,IAAAA,IAAI,EAAE,IAAI;AACVrD,IAAAA,KAAK,EAAE,QAAQ;AACfsD,IAAAA,WAAW,EAAE,OAAO;AACpBC,IAAAA,YAAY,EAAE,OAAO;AAErBC,IAAAA,IAAI,EAAE,OAAO;AACbC,IAAAA,QAAQ,EAAE,OAAO;AACjBC,IAAAA,SAAS,EAAE,cAAc;AAEzBC,IAAAA,IAAI,EAAE,OAAO;AACbC,IAAAA,SAAS,EAAE,OAAO;AAClBC,IAAAA,cAAc,EAAE,aAAa;AAC7BC,IAAAA,QAAQ,EAAE,aAAa;AAEvBC,IAAAA,mBAAmB,EAAE,OAAO;AAC5BC,IAAAA,SAAS,EAAE,cAAc;AACzBC,IAAAA,SAAS,EAAE,cAAc;AACzBC,IAAAA,cAAc,EAAE,WAAW;AAC3BC,IAAAA,gBAAgB,EAAE,cAAc;AAChCC,IAAAA,cAAc,EAAE;AAClB;AACF;AAEA,IAAII,eAAe,GAAG,IAAI;AAEnB,SAASC,WAAWA,CAACC,IAAI,EAAE;AAChC,EAAA,IAAIzC,mBAAmB,CAAC0C,QAAQ,CAACD,IAAI,CAAC,EAAE;AACtCF,IAAAA,eAAe,GAAGE,IAAI;AACtB,IAAA,IAAI,OAAOE,MAAM,KAAK,WAAW,EAAE;AACjCC,MAAAA,YAAY,CAACC,OAAO,CAAC,6BAA6B,EAAEJ,IAAI,CAAC;AAC3D,IAAA;AACF,EAAA;AACF;AAEO,SAASK,WAAWA,GAAG;AAC5B,EAAA,IAAI,OAAOH,MAAM,KAAK,WAAW,EAAE;AACjC,IAAA,MAAMI,KAAK,GAAGH,YAAY,CAACI,OAAO,CAAC,6BAA6B,CAAC;IACjE,IAAID,KAAK,IAAI/C,mBAAmB,CAAC0C,QAAQ,CAACK,KAAK,CAAC,EAAE;AAChDR,MAAAA,eAAe,GAAGQ,KAAK;AACzB,IAAA;AACF,EAAA;AACA,EAAA,OAAOR,eAAe;AACxB;AAEO,SAASU,CAACA,CAACC,GAAG,EAAE5E,MAAM,EAAE;EAC7B,MAAM6E,IAAI,GAAGlD,QAAQ,CAAC6C,WAAW,EAAE,CAAC,IAAI7C,QAAQ,CAACC,EAAE;AACnD,EAAA,IAAIkD,IAAI,GAAGD,IAAI,CAACD,GAAG,CAAC,IAAIA,GAAG;AAC3B,EAAA,IAAI5E,MAAM,EAAE;IACV+E,MAAM,CAACC,IAAI,CAAChF,MAAM,CAAC,CAACiF,OAAO,CAACC,CAAC,IAAI;AAC/BJ,MAAAA,IAAI,GAAGA,IAAI,CAACK,OAAO,CAAC,IAAIC,MAAM,CAAC,CAAA,GAAA,EAAMF,CAAC,CAAA,GAAA,CAAK,EAAE,GAAG,CAAC,EAAElF,MAAM,CAACkF,CAAC,CAAC,CAAC;AAC/D,IAAA,CAAC,CAAC;AACJ,EAAA;AACA,EAAA,OAAOJ,IAAI;AACb;;ACjOA;AACA;AACA;;AAMA,MAAMO,gBAAgB,gBAAGC,aAAa,CAAC,IAAI,CAAC;AAErC,SAASC,iBAAiBA,CAAC;EAChCC,QAAQ;EACRC,MAAM;EACNC,KAAK;AACLC,EAAAA,QAAQ,GAAG,IAAI;EACfC,MAAM;EACNC,OAAO;AACPC,EAAAA;AACF,CAAC,EAAE;EACD,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGC,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGF,QAAQ,CAAC,EAAE,CAAC;EACpD,MAAM,CAACG,KAAK,EAAEC,QAAQ,CAAC,GAAGJ,QAAQ,CAAC,IAAI,CAAC;EACxC,MAAM,CAACpE,OAAO,EAAEyE,UAAU,CAAC,GAAGL,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAC,IAAI,CAAC;AAExCQ,EAAAA,SAAS,CAAC,MAAM;IACdvC,WAAW,CAACyB,QAAQ,CAAC;AACvB,EAAA,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;AAEd,EAAA,MAAMe,WAAW,GAAGC,WAAW,CAAEC,GAAG,IAAK;IACvCJ,QAAQ,CAACI,GAAG,CAAC;IACbd,OAAO,GAAGc,GAAG,CAAC;AAChB,EAAA,CAAC,EAAE,CAACd,OAAO,CAAC,CAAC;AAEb,EAAA,MAAM/G,IAAI,GAAG4H,WAAW,CAAC,MAAO3H,IAAI,IAAK;IACvCsH,UAAU,CAAC,IAAI,CAAC;IAChB,IAAI;MACF,MAAMO,MAAM,GAAG,MAAMpF,YAAY,CAAC1C,IAAI,CAACC,IAAI,CAAC;MAC5C4G,MAAM,GAAGiB,MAAM,CAAC;AAChB,MAAA,OAAOA,MAAM;IACf,CAAC,CAAC,OAAOD,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;AAChB,MAAA,MAAMA,GAAG;AACX,IAAA,CAAC,SAAS;MACRN,UAAU,CAAC,KAAK,CAAC;AACnB,IAAA;AACF,EAAA,CAAC,EAAE,CAACI,WAAW,EAAEd,MAAM,CAAC,CAAC;AACzB;;AAEA,EAAA,MAAMnG,KAAK,GAAGkH,WAAW,CAAC,MAAOG,WAAW,IAAK;IAC/CR,UAAU,CAAC,IAAI,CAAC;IAChB,IAAI;MACF,MAAMO,MAAM,GAAG,MAAMpF,YAAY,CAAChC,KAAK,CAACqH,WAAW,CAAC;MACpDjB,OAAO,GAAGgB,MAAM,CAAC;AACjB,MAAA,OAAOA,MAAM;IACf,CAAC,CAAC,OAAOD,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;AAChB,MAAA,MAAMA,GAAG;AACX,IAAA,CAAC,SAAS;MACRN,UAAU,CAAC,KAAK,CAAC;AACnB,IAAA;AACF,EAAA,CAAC,EAAE,CAACI,WAAW,EAAEb,OAAO,CAAC,CAAC;;AAE1B;;EAEA,MAAMkB,YAAY,GAAGJ,WAAW,CAAC,OAAO3G,MAAM,GAAG,EAAE,KAAK;IACtD,IAAI;MACF,MAAM6G,MAAM,GAAG,MAAMpF,YAAY,CAACuF,WAAW,CAAChH,MAAM,CAAC;AACrD,MAAA,MAAMiH,KAAK,GAAGJ,MAAM,CAACI,KAAK,IAAIJ,MAAM,CAAC7H,IAAI,IAAI6H,MAAM,IAAI,EAAE;MACzDb,WAAW,CAACiB,KAAK,CAAC;AAClB,MAAA,OAAOA,KAAK;IACd,CAAC,CAAC,OAAOL,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;AAChB,MAAA,MAAMA,GAAG;AACX,IAAA;AACF,EAAA,CAAC,EAAE,CAACF,WAAW,CAAC,CAAC;EAEjB,MAAMQ,gBAAgB,GAAGP,WAAW,CAAC,OAAO3G,MAAM,GAAG,EAAE,KAAK;IAC1D,IAAI;MACF,MAAM6G,MAAM,GAAG,MAAMpF,YAAY,CAAC0F,eAAe,CAACnH,MAAM,CAAC;AACzD,MAAA,MAAMiH,KAAK,GAAGJ,MAAM,CAACI,KAAK,IAAIJ,MAAM,CAAC7H,IAAI,IAAI6H,MAAM,IAAI,EAAE;MACzDV,eAAe,CAACc,KAAK,CAAC;AACtB,MAAA,OAAOA,KAAK;IACd,CAAC,CAAC,OAAOL,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;AAChB,MAAA,MAAMA,GAAG;AACX,IAAA;AACF,EAAA,CAAC,EAAE,CAACF,WAAW,CAAC,CAAC;AAEjB,EAAA,MAAMU,SAAS,GAAGT,WAAW,CAAC,YAAY;IACxC,IAAI;AACF,MAAA,MAAME,MAAM,GAAG,MAAMpF,YAAY,CAACD,QAAQ,EAAE;MAC5C6E,QAAQ,CAACQ,MAAM,CAAC;AAChB,MAAA,OAAOA,MAAM;IACf,CAAC,CAAC,OAAOD,GAAG,EAAE;MACZF,WAAW,CAACE,GAAG,CAAC;AAClB,IAAA;AACF,EAAA,CAAC,EAAE,CAACF,WAAW,CAAC,CAAC;AAEjB,EAAA,MAAMW,KAAK,GAAG;IACZtB,QAAQ;IACRG,YAAY;IACZE,KAAK;IACLvE,OAAO;IACP0E,KAAK;IACLxH,IAAI;IACJU,KAAK;IACLsH,YAAY;IACZG,gBAAgB;IAChBE,SAAS;AACTE,IAAAA,GAAG,EAAE7F;GACN;AAED,EAAA,oBACE8F,KAAA,CAAAC,aAAA,CAACnC,gBAAgB,CAACoC,QAAQ,EAAA;AAACJ,IAAAA,KAAK,EAAEA;AAAM,GAAA,EACrC7B,QACwB,CAAC;AAEhC;AAEO,SAASkC,YAAYA,GAAG;AAC7B,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACvC,gBAAgB,CAAC;EAC5C,IAAI,CAACsC,OAAO,EAAE;AACZ,IAAA,MAAM,IAAIE,KAAK,CAAC,sDAAsD,CAAC;AACzE,EAAA;AACA,EAAA,OAAOF,OAAO;AAChB;;AC9HA;AACA;AACA;;AAEA;AACO,MAAMG,aAAa,GAAG;AAC3BC,EAAAA,MAAM,EAAE,QAAQ;AAAQ;AACxBC,EAAAA,KAAK,EAAE,OAAO;AAAU;AACxBC,EAAAA,SAAS,EAAE,WAAW;AAAE;EACxBC,KAAK,EAAE,OAAO;AAChB;;AAEA;AACO,MAAMC,eAAe,GAAG;AAC7BC,EAAAA,OAAO,EAAE,SAAS;AAAM;AACxBC,EAAAA,OAAO,EAAE,SAAS;AAAM;AACxBC,EAAAA,QAAQ,EAAE,UAAU;AAAI;AACxBC,EAAAA,OAAO,EAAE,SAAS;AAAM;EACxBC,QAAQ,EAAE,UAAU;AACtB;;AAEA;AACO,MAAMC,WAAW,GAAG;AACzBC,EAAAA,SAAS,EAAE,WAAW;AAAE;AACxBC,EAAAA,OAAO,EAAE,SAAS;AAAM;EACxBJ,OAAO,EAAE,SAAS;AACpB;;AAEA;AACA;AACA;AACO,SAASK,sBAAsBA,CAACC,SAAS,GAAG,EAAE,EAAE;EACrD,OAAO;AACLC,IAAAA,EAAE,EAAE,IAAI;AACRC,IAAAA,UAAU,EAAE,IAAI;AAChBC,IAAAA,WAAW,EAAE,EAAE;AACfC,IAAAA,aAAa,EAAE,IAAI;IACnBC,IAAI,EAAEpB,aAAa,CAACE,KAAK;AACzBmB,IAAAA,YAAY,EAAE,CAAC;AAAS;AACxBxG,IAAAA,QAAQ,EAAE,CAAC;AAAa;AACxByG,IAAAA,aAAa,EAAE,CAAC;AAAQ;AACxBC,IAAAA,cAAc,EAAE,CAAC;AAAO;AACxBzG,IAAAA,QAAQ,EAAE,EAAE;AAAY;AACxB0G,IAAAA,QAAQ,EAAE,QAAQ;AAAM;IACxBC,MAAM,EAAEpB,eAAe,CAACC,OAAO;AAC/BoB,IAAAA,SAAS,EAAE,IAAI;AACfC,IAAAA,UAAU,EAAE,IAAI;IAChB,GAAGZ;GACJ;AACH;;AAEA;AACA;AACA;AACO,SAASa,kBAAkBA,CAACb,SAAS,GAAG,EAAE,EAAE;EACjD,OAAO;AACLC,IAAAA,EAAE,EAAE,IAAI;AACRa,IAAAA,aAAa,EAAE,IAAI;AACnBC,IAAAA,QAAQ,EAAE,IAAI;AACdC,IAAAA,SAAS,EAAE,EAAE;AACbC,IAAAA,WAAW,EAAE,IAAI;AACjBC,IAAAA,MAAM,EAAE,CAAC;AACTC,IAAAA,WAAW,EAAE,KAAK;AAAM;AACxBC,IAAAA,UAAU,EAAE,IAAI;IAChB,GAAGpB;GACJ;AACH;;AAEA;AACA;AACA;AACO,SAASqB,iBAAiBA,CAACpI,SAAS,EAAE;AAC3C,EAAA,OAAOA,SAAS,CAACa,QAAQ,GAAGb,SAAS,CAACsH,aAAa;AACrD;;AAEA;AACA;AACA;AACO,SAASe,kBAAkBA,CAACrI,SAAS,EAAE;AAC5C,EAAA,OAAOA,SAAS,CAACqH,YAAY,GAAGrH,SAAS,CAACuH,cAAc;AAC1D;;AAEA;AACA;AACA;AACO,SAASe,WAAWA,CAACtI,SAAS,EAAE;EACrC,IAAIA,SAAS,CAACyH,MAAM,KAAKpB,eAAe,CAACG,QAAQ,EAAE,OAAO,KAAK;EAC/D,IAAIxG,SAAS,CAACyH,MAAM,KAAKpB,eAAe,CAACI,OAAO,EAAE,OAAO,KAAK;AAC9D,EAAA,IAAIzG,SAAS,CAAC0H,SAAS,IAAI,IAAIa,IAAI,CAACvI,SAAS,CAAC0H,SAAS,CAAC,GAAG,IAAIa,IAAI,EAAE,EAAE,OAAO,KAAK;AACnF,EAAA,OAAOH,iBAAiB,CAACpI,SAAS,CAAC,GAAG,CAAC;AACzC;;AAEA;AACA;AACA;AACO,SAASwI,YAAYA,CAACP,MAAM,EAAET,QAAQ,GAAG,QAAQ,EAAE;AACxD,EAAA,IAAIA,QAAQ,KAAK,QAAQ,EAAE,OAAO,CAAA,EAAGS,MAAM,CAAA,GAAA,CAAK;AAChD,EAAA,IAAIT,QAAQ,KAAK,KAAK,EAAE,OAAO,CAAA,CAAA,EAAIS,MAAM,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE;AACtD,EAAA,IAAIjB,QAAQ,KAAK,KAAK,EAAE,OAAO,CAAA,CAAA,EAAIS,MAAM,CAACQ,OAAO,CAAC,CAAC,CAAC,CAAA,CAAE;AACtD,EAAA,OAAO,CAAA,EAAGR,MAAM,CAAA,CAAA,EAAIT,QAAQ,CAAA,CAAE;AAChC;;ACpGA;AACA;AACA;AACA;;AAOO,SAASkB,aAAaA,CAAC;EAC5B1I,SAAS;EACT2I,MAAM;EACNC,cAAc;AACdC,EAAAA,UAAU,GAAG,KAAK;AAClBC,EAAAA,SAAS,GAAG;AACd,CAAC,EAAE;EACD,MAAM;IAAEnL,KAAK;AAAEoC,IAAAA;GAAS,GAAG6F,YAAY,EAAE;EACzC,MAAM,CAACmD,SAAS,EAAEC,YAAY,CAAC,GAAG7E,QAAQ,CAAC,KAAK,CAAC;EACjD,MAAM,CAAC8E,WAAW,EAAEC,cAAc,CAAC,GAAG/E,QAAQ,CAAC,IAAI,CAAC;EACpD,MAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAC,IAAI,CAAC;AAExC,EAAA,IAAI,CAACnE,SAAS,EAAE,OAAO,IAAI;EAE3B,MAAM;IACJgH,EAAE;IACFI,IAAI;IACJK,MAAM;IACNP,WAAW;IACXC,aAAa;IACbrG,QAAQ;IACRuG,YAAY;AACZG,IAAAA,QAAQ,GAAG;AACb,GAAC,GAAGxH,SAAS;AAEb,EAAA,MAAMmJ,SAAS,GAAGf,iBAAiB,CAACpI,SAAS,CAAC;EAC9C,MAAMoJ,QAAQ,GAAGd,WAAW,CAACtI,SAAS,CAAC,IAAI,CAACiJ,WAAW;AAEvD,EAAA,MAAMI,UAAU,GAAG,MAAOC,CAAC,IAAK;IAC9BA,CAAC,CAACC,eAAe,EAAE;AACnB,IAAA,IAAI,CAACH,QAAQ,IAAIL,SAAS,IAAIhJ,OAAO,EAAE;IAEvCiJ,YAAY,CAAC,IAAI,CAAC;IAClBtE,QAAQ,CAAC,IAAI,CAAC;IACd,IAAI;AACF,MAAA,MAAMK,MAAM,GAAG,MAAMpH,KAAK,CAACqJ,EAAE,CAAC;MAC9BkC,cAAc,CAACnE,MAAM,CAAC;MACtB6D,cAAc,GAAG7D,MAAM,CAAC;IAC1B,CAAC,CAAC,OAAOD,GAAG,EAAE;AACZ0E,MAAAA,OAAO,CAAC/E,KAAK,CAACK,GAAG,CAAC;MAClBJ,QAAQ,CAACI,GAAG,EAAE2E,OAAO,IAAIC,MAAM,CAAC5E,GAAG,CAAC,CAAC;AACvC,IAAA,CAAC,SAAS;MACRkE,YAAY,CAAC,KAAK,CAAC;AACrB,IAAA;EACF,CAAC;EAED,MAAMW,YAAY,GAAGA,MAAM;AACzB,IAAA,MAAMC,MAAM,GAAG;AACb,MAAA,CAAC5D,aAAa,CAACC,MAAM,GAAGpD,CAAC,CAAC,YAAY,CAAC;AACvC,MAAA,CAACmD,aAAa,CAACE,KAAK,GAAGrD,CAAC,CAAC,WAAW,CAAC;AACrC,MAAA,CAACmD,aAAa,CAACG,SAAS,GAAGtD,CAAC,CAAC,eAAe,CAAC;AAC7C,MAAA,CAACmD,aAAa,CAACI,KAAK,GAAGvD,CAAC,CAAC,WAAW;KACrC;AACD,IAAA,OAAO+G,MAAM,CAACxC,IAAI,CAAC,IAAIA,IAAI;EAC7B,CAAC;EAED,MAAMyC,cAAc,GAAGA,MAAM;IAC3B,IAAIZ,WAAW,EAAE,OAAO,QAAQ;AAChC,IAAA,IAAIxB,MAAM,KAAKpB,eAAe,CAACI,OAAO,EAAE,OAAO,SAAS;AACxD,IAAA,IAAIgB,MAAM,KAAKpB,eAAe,CAACG,QAAQ,EAAE,OAAO,OAAO;AACvD,IAAA,OAAO,EAAE;EACX,CAAC;EAED,oBACEf,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAE,CAAA,eAAA,EAAkBe,cAAc,EAAE,IAAIf,SAAS,CAAA;GAAG,eAEhErD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAgB,eAE7BrD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAiB,eAC9BrD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAM,GAAA,EAAC,cAAQ,CAAC,eAChCrD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAM,GAAA,EAAC,cAAQ,CAAC,eAChCrD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAM,GAAA,EAAC,cAAQ,CAC5B,CAAC,eAGNrD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAkB,eAC/BrD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAe,GAAA,EAC3B3B,aAAa,gBACZ1B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoE,IAAAA,GAAG,EAAE3C,aAAc;AAAC4C,IAAAA,GAAG,EAAC;AAAE,GAAE,CAAC,gBAElCtE,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA,IAAA,EAAM,cAAQ,CAEb,CAAC,eACND,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;GAAa,EAAE5B,WAAW,IAAIrE,CAAC,CAAC,WAAW,CAAQ,CAChE,CAAC,eAGN4C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAoB,EAChChI,QAAQ,IAAI+B,CAAC,CAAC,iBAAiB,CAC7B,CAAC,eAGN4C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAgB,EAC5Ba,YAAY,EACV,CAAC,EAGLV,WAAW,gBACVxD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAkB,eAC/BrD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAe,GAAA,EAAEN,YAAY,CAACS,WAAW,CAAChB,MAAM,EAAET,QAAQ,CAAQ,CAAC,EAClFyB,WAAW,CAACf,WAAW,iBACtBzC,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;GAAc,EAAC,eAAG,EAACjG,CAAC,CAAC,aAAa,CAAQ,CAEzD,CAAC,gBAEN4C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKsE,IAAAA,KAAK,EAAE;AAAEC,MAAAA,OAAO,EAAE,MAAM;AAAEC,MAAAA,aAAa,EAAE,QAAQ;AAAEC,MAAAA,UAAU,EAAE,QAAQ;AAAEC,MAAAA,GAAG,EAAE;AAAM;GAAE,eACzF3E,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACEoD,IAAAA,SAAS,EAAC,oBAAoB;AAC9BuB,IAAAA,OAAO,EAAEhB,UAAW;AACpBiB,IAAAA,QAAQ,EAAE,CAAClB,QAAQ,IAAIL,SAAS,IAAIhJ;AAAQ,GAAA,EAE3CgJ,SAAS,GAAG,KAAK,GAChBtB,MAAM,KAAKpB,eAAe,CAACI,OAAO,GAAG5D,CAAC,CAAC,eAAe,CAAC,GACrD4E,MAAM,KAAKpB,eAAe,CAACG,QAAQ,GAAG3D,CAAC,CAAC,aAAa,CAAC,GACpDA,CAAC,CAAC,MAAM,CAER,CAAC,EACR4B,KAAK,iBAAIgB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKsE,IAAAA,KAAK,EAAE;AAAEO,MAAAA,KAAK,EAAE,SAAS;AAAEC,MAAAA,QAAQ,EAAE,MAAM;AAAEC,MAAAA,UAAU,EAAE,wBAAwB;AAAEC,MAAAA,OAAO,EAAE,SAAS;AAAEC,MAAAA,YAAY,EAAE,KAAK;AAAEC,MAAAA,QAAQ,EAAE,MAAM;AAAEC,MAAAA,SAAS,EAAE,YAAY;AAAEC,MAAAA,SAAS,EAAE;AAAS;GAAE,EAAErG,KAAW,CACtN,CACN,EAGAoE,UAAU,iBACTpD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAkB,eAC/BrD,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA,IAAA,EAAM,SAAE,EAAC8C,YAAY,CAACnB,YAAY,EAAEG,QAAQ,CAAQ,CAAC,EACpD2B,SAAS,GAAG,CAAC,iBAAI1D,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA,IAAA,EAAO7C,CAAC,CAAC,gBAAgB,EAAE;AAAEkI,IAAAA,KAAK,EAAE5B;AAAU,GAAC,CAAQ,CACtE,CAEJ,CACF,CAAC;AAEV;;AC7IA;AACA;AACA;AACA;;AAOO,SAAS6B,aAAaA,CAAC;EAC5BC,WAAW,GAAGjF,aAAa,CAACE,KAAK;AACjCsB,EAAAA,QAAQ,GAAG,QAAQ;AACnB7F,EAAAA,SAAS,GAAG,IAAI;AAChBC,EAAAA,SAAS,GAAG,GAAG;EACfsJ,SAAS;EACTC,QAAQ;AACRrC,EAAAA,SAAS,GAAG;AACd,CAAC,EAAE;EACD,MAAM;IAAE7L,IAAI;AAAE8C,IAAAA;GAAS,GAAG6F,YAAY,EAAE;EACxC,MAAM,CAACwB,IAAI,EAAEgE,OAAO,CAAC,GAAGjH,QAAQ,CAAC8G,WAAW,CAAC;EAC7C,MAAM,CAACrK,WAAW,EAAEyK,cAAc,CAAC,GAAGlH,QAAQ,CAAC,EAAE,CAAC;EAClD,MAAM,CAACtD,QAAQ,EAAEyK,WAAW,CAAC,GAAGnH,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM,CAACrD,QAAQ,EAAEyK,WAAW,CAAC,GAAGpH,QAAQ,CAAC,EAAE,CAAC;EAC5C,MAAM,CAACM,KAAK,EAAEC,QAAQ,CAAC,GAAGP,QAAQ,CAAC,EAAE,CAAC;AAEtC,EAAA,MAAMqH,YAAY,GAAG,MAAOlC,CAAC,IAAK;IAChCA,CAAC,CAACmC,cAAc,EAAE;IAClB/G,QAAQ,CAAC,EAAE,CAAC;AAEZ,IAAA,IAAI3E,OAAO,EAAE;AAEb,IAAA,MAAMkI,MAAM,GAAGyD,UAAU,CAAC9K,WAAW,CAAC;AACtC,IAAA,MAAMmK,KAAK,GAAGY,QAAQ,CAAC9K,QAAQ,CAAC;AAEhC,IAAA,IAAI,CAACoH,MAAM,IAAIA,MAAM,IAAI,CAAC,EAAE;MAC1BvD,QAAQ,CAAC,UAAU,CAAC;AACpB,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAACqG,KAAK,IAAIA,KAAK,GAAG,CAAC,EAAE;MACvBrG,QAAQ,CAAC,SAAS,CAAC;AACnB,MAAA;AACF,IAAA;AACA,IAAA,IAAIuD,MAAM,GAAG8C,KAAK,GAAGpJ,SAAS,EAAE;AAC9B+C,MAAAA,QAAQ,CAAC7B,CAAC,CAAC,WAAW,EAAE;AAAE+I,QAAAA,GAAG,EAAEjK;AAAU,OAAC,CAAC,CAAC;AAC5C,MAAA;AACF,IAAA;AACA,IAAA,IAAIsG,MAAM,GAAG8C,KAAK,GAAGnJ,SAAS,EAAE;AAC9B8C,MAAAA,QAAQ,CAAC7B,CAAC,CAAC,WAAW,EAAE;AAAEgJ,QAAAA,GAAG,EAAEjK;AAAU,OAAC,CAAC,CAAC;AAC5C,MAAA;AACF,IAAA;IAEA,IAAI;AACF,MAAA,MAAMmD,MAAM,GAAG,MAAM9H,IAAI,CAAC;QACxBmK,IAAI;AACJC,QAAAA,YAAY,EAAEY,MAAM;AACpBpH,QAAAA,QAAQ,EAAEkK,KAAK;AACfjK,QAAAA,QAAQ,EAAEA,QAAQ,IAAI+B,CAAC,CAAC,iBAAiB,CAAC;AAC1C2E,QAAAA;AACF,OAAC,CAAC;MACF6D,cAAc,CAAC,EAAE,CAAC;MAClBC,WAAW,CAAC,EAAE,CAAC;MACfC,WAAW,CAAC,EAAE,CAAC;MACfL,SAAS,GAAGnG,MAAM,CAAC;IACrB,CAAC,CAAC,OAAOD,GAAG,EAAE;AACZJ,MAAAA,QAAQ,CAACI,GAAG,CAAC2E,OAAO,CAAC;AACvB,IAAA;EACF,CAAC;EAED,MAAMqC,SAAS,GAAGlL,WAAW,IAAIC,QAAQ,GACrC,CAAC6K,UAAU,CAAC9K,WAAW,CAAC,GAAG+K,QAAQ,CAAC9K,QAAQ,CAAC,EAAE4H,OAAO,CAAC,CAAC,CAAC,GACzD,GAAG;EAEP,oBACEhD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKoD,SAAS,EAAE,kBAAkBA,SAAS,CAAA;GAAG,eAC5CrD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAuB,GAAA,eACpCrD,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAK7C,CAAC,CAAC,eAAe,CAAM,CACzB,CAAC,eAEN4C,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMqG,IAAAA,QAAQ,EAAEP;GAAa,eAE3B/F,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAY,eACzBrD,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAe,eAC5BrD,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACE0B,IAAAA,IAAI,EAAC,QAAQ;IACb0B,SAAS,EAAE1B,IAAI,KAAKpB,aAAa,CAACC,MAAM,GAAG,QAAQ,GAAG,EAAG;AACzDoE,IAAAA,OAAO,EAAEA,MAAMe,OAAO,CAACpF,aAAa,CAACC,MAAM;GAAE,EAE5CpD,CAAC,CAAC,YAAY,CACT,CAAC,eACT4C,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AACE0B,IAAAA,IAAI,EAAC,QAAQ;IACb0B,SAAS,EAAE1B,IAAI,KAAKpB,aAAa,CAACE,KAAK,GAAG,QAAQ,GAAG,EAAG;AACxDmE,IAAAA,OAAO,EAAEA,MAAMe,OAAO,CAACpF,aAAa,CAACE,KAAK;GAAE,EAE3CrD,CAAC,CAAC,WAAW,CACR,CACL,CACF,CAAC,eAGN4C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAY,GAAA,eACzBrD,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ7C,CAAC,CAAC,aAAa,CAAS,CAAC,eACjC4C,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;GAAc,eAC3BrD,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACE0B,IAAAA,IAAI,EAAC,QAAQ;AACb7B,IAAAA,KAAK,EAAE3E,WAAY;IACnBoL,QAAQ,EAAG1C,CAAC,IAAK+B,cAAc,CAAC/B,CAAC,CAAC2C,MAAM,CAAC1G,KAAK,CAAE;AAChD2G,IAAAA,WAAW,EAAC,MAAM;AAClBN,IAAAA,GAAG,EAAC,GAAG;AACPO,IAAAA,IAAI,EAAC;AAAM,GACZ,CAAC,eACF1G,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAU,GAAA,EAAEtB,QAAe,CACxC,CACF,CAAC,eAGN/B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAY,GAAA,eACzBrD,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ7C,CAAC,CAAC,UAAU,CAAS,CAAC,eAC9B4C,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACE0B,IAAAA,IAAI,EAAC,QAAQ;AACb7B,IAAAA,KAAK,EAAE1E,QAAS;IAChBmL,QAAQ,EAAG1C,CAAC,IAAKgC,WAAW,CAAChC,CAAC,CAAC2C,MAAM,CAAC1G,KAAK,CAAE;AAC7C2G,IAAAA,WAAW,EAAC,GAAG;AACfN,IAAAA,GAAG,EAAC,GAAG;AACPC,IAAAA,GAAG,EAAC;GACL,CAAC,EACDzE,IAAI,KAAKpB,aAAa,CAACC,MAAM,iBAC5BR,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;AAAMoD,IAAAA,SAAS,EAAC;AAAM,GAAA,EAAC,2BAAK,EAACgD,SAAS,EAAC,GAAC,EAACtE,QAAe,CAEvD,CAAC,eAGN/B,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAY,GAAA,eACzBrD,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ7C,CAAC,CAAC,UAAU,CAAS,CAAC,eAC9B4C,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;AACE0B,IAAAA,IAAI,EAAC,MAAM;AACX7B,IAAAA,KAAK,EAAEzE,QAAS;IAChBkL,QAAQ,EAAG1C,CAAC,IAAKiC,WAAW,CAACjC,CAAC,CAAC2C,MAAM,CAAC1G,KAAK,CAAE;AAC7C2G,IAAAA,WAAW,EAAErJ,CAAC,CAAC,iBAAiB,CAAE;AAClCuJ,IAAAA,SAAS,EAAE;AAAG,GACf,CACE,CAAC,EAGL3H,KAAK,iBAAIgB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAY,GAAA,EAAErE,KAAW,CAAC,eAGnDgB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;AAAKoD,IAAAA,SAAS,EAAC;AAAc,GAAA,EAC1BqC,QAAQ,iBACP1F,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQ0B,IAAAA,IAAI,EAAC,QAAQ;AAAC0B,IAAAA,SAAS,EAAC,YAAY;AAACuB,IAAAA,OAAO,EAAEc;AAAS,GAAA,EAAC,cAExD,CACT,eACD1F,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;AAAQ0B,IAAAA,IAAI,EAAC,QAAQ;AAAC0B,IAAAA,SAAS,EAAC,YAAY;AAACwB,IAAAA,QAAQ,EAAEvK;AAAQ,GAAA,EAC5DA,OAAO,GAAG8C,CAAC,CAAC,SAAS,CAAC,GAAGA,CAAC,CAAC,MAAM,CAC5B,CACL,CACD,CACH,CAAC;AAEV;;ACjKA,MAAMwJ,0BAA0B,GAAG;AAEnC,SAASC,eAAeA,CAACC,SAAS,EAAE;AAClC,EAAA,OAAOA,SAAS,EAAEvF,EAAE,IAAIuF,SAAS,EAAEC,YAAY,IAAID,SAAS,EAAE3O,WAAW,IAAI2O,SAAS,EAAE/M,SAAS,IAAI+M,SAAS,EAAEhN,QAAQ;AAC1H;AAEA,SAASkN,eAAeA,CAACF,SAAS,EAAEG,OAAO,EAAE;EAC3C,OACEA,OAAO,CAACC,WAAW,IACnBJ,SAAS,EAAEK,YAAY,IACvBL,SAAS,EAAEM,cAAc,IACzBN,SAAS,EAAEO,WAAW,IACtBP,SAAS,EAAEQ,IAAI,IACf,IAAI;AAER;AAEO,eAAeC,wBAAwBA,CAACT,SAAS,EAAEG,OAAO,GAAG,EAAE,EAAE;EACtE,MAAM;AAAEO,IAAAA;AAAoB,GAAC,GAAG,MAAM,OAAO,2BAA2B,CAAC;EACzE,MAAMrP,WAAW,GAAG8O,OAAO,CAAC9O,WAAW,IAAI0O,eAAe,CAACC,SAAS,CAAC;AACrE,EAAA,MAAMI,WAAW,GAAGF,eAAe,CAACF,SAAS,EAAEG,OAAO,CAAC;AAEvD,EAAA,OAAOO,mBAAmB,CAAC;AACzBC,IAAAA,MAAM,EAAER,OAAO,CAACQ,MAAM,IAAI,kBAAkB;AAC5CC,IAAAA,OAAO,EAAEvP,WAAW,GAAG,aAAaA,WAAW,CAAA,CAAE,GAAG,WAAW;AAC/DwP,IAAAA,WAAW,EAAExP,WAAW;AACxBgP,IAAAA,YAAY,EAAED,WAAW;IACzBU,OAAO,EAAEX,OAAO,CAACW,OAAO;IACxBC,SAAS,EAAEZ,OAAO,CAACY,SAAS;AAC5BC,IAAAA,KAAK,EAAE;MACLtF,MAAM,EAAEsE,SAAS,EAAEtE,MAAM;MACzBZ,YAAY,EAAEkF,SAAS,EAAElF,YAAY;MACrCzD,KAAK,EAAE2I,SAAS,EAAE3I,KAAK,IAAI2I,SAAS,EAAE/E,QAAQ,IAAI+E,SAAS,EAAEiB,MAAM;MACnEvG,UAAU,EAAEsF,SAAS,EAAEtF,UAAU;AACjC,MAAA,GAAGyF,OAAO,CAACa;AACb;AACF,GAAC,EAAE;AACDE,IAAAA,SAAS,EAAEf,OAAO,CAACe,SAAS,IAAIpB,0BAA0B;IAC1DqB,QAAQ,EAAEhB,OAAO,CAACgB;AACpB,GAAC,CAAC;AACJ;AAEO,SAASC,yBAAyBA,CAAC/P,WAAW,EAAEU,MAAM,EAAEoO,OAAO,GAAG,EAAE,EAAE;EAC3E,OAAO;AACLF,IAAAA,YAAY,EAAE5O,WAAW;AACzBW,IAAAA,OAAO,EAAED,MAAM;AACfE,IAAAA,KAAK,EAAEkO,OAAO,CAAClO,KAAK,IAAI,MAAM;AAC9BC,IAAAA,OAAO,EAAEiO,OAAO,CAACjO,OAAO,IAAI,SAAS;AACrCyO,IAAAA,MAAM,EAAER,OAAO,CAACQ,MAAM,IAAI,kBAAkB;IAC5CU,IAAI,EAAElB,OAAO,CAACkB,IAAI;IAClBhB,YAAY,EAAEF,OAAO,CAACC,WAAW;AACjC,IAAA,GAAGD,OAAO,CAACa;GACZ;AACH;;;;"}
@@ -0,0 +1 @@
1
+ :root{--rp-primary:#e74c3c;--rp-primary-dark:#c0392b;--rp-gold:#f1c40f;--rp-gold-dark:#d4a00a;--rp-bg:#fff;--rp-text:#333;--rp-text-light:#fff;--rp-text-muted:#999;--rp-shadow:0 4px 16px rgba(0,0,0,.2);--rp-transition:all 0.3s ease}.redpacket-card{margin:0 auto;position:relative;width:280px}.redpacket-body{background:linear-gradient(180deg,var(--rp-primary) 0,var(--rp-primary-dark) 100%);border-radius:16px;box-shadow:var(--rp-shadow);color:var(--rp-text-light);overflow:hidden;padding:40px 30px 30px;position:relative;text-align:center}.redpacket-coins{display:flex;gap:4px;left:50%;position:absolute;top:-20px;transform:translateX(-50%)}.redpacket-coins .coin{animation:coin-bounce .5s ease infinite alternate;font-size:32px}.redpacket-coins .coin:nth-child(2){animation-delay:.1s}.redpacket-coins .coin:nth-child(3){animation-delay:.2s}@keyframes coin-bounce{0%{transform:translateY(0)}to{transform:translateY(-5px)}}.redpacket-sender{align-items:center;display:flex;flex-direction:column;gap:8px;margin-bottom:16px}.sender-avatar{align-items:center;background:hsla(0,0%,100%,.2);border-radius:50%;display:flex;font-size:24px;height:48px;justify-content:center;overflow:hidden;width:48px}.sender-avatar img{height:100%;object-fit:cover;width:100%}.sender-name{font-size:14px;opacity:.9}.redpacket-blessing{font-size:16px;font-weight:500;line-height:1.5;margin-bottom:20px}.redpacket-type{background:hsla(0,0%,100%,.2);border-radius:20px;display:inline-block;font-size:12px;margin-bottom:24px;padding:4px 12px}.redpacket-open-btn{background:linear-gradient(180deg,var(--rp-gold) 0,var(--rp-gold-dark) 100%);border:4px solid var(--rp-gold);border-radius:50%;box-shadow:0 4px 12px rgba(0,0,0,.3);color:var(--rp-primary-dark);cursor:pointer;font-size:24px;font-weight:700;height:80px;transition:var(--rp-transition);width:80px}.redpacket-open-btn:hover:not(:disabled){transform:scale(1.1)}.redpacket-open-btn:disabled{cursor:not-allowed;opacity:.7}.redpacket-result{padding:20px}.result-amount{display:block;font-size:28px;font-weight:700;margin-bottom:8px}.result-lucky{background:var(--rp-gold);border-radius:20px;color:var(--rp-primary-dark);display:inline-block;font-size:12px;padding:4px 12px}.redpacket-footer{border-top:1px dashed hsla(0,0%,100%,.3);display:flex;font-size:12px;justify-content:space-between;margin-top:20px;opacity:.8;padding-top:16px}.redpacket-card.empty .redpacket-body,.redpacket-card.expired .redpacket-body{filter:grayscale(.5)}.redpacket-card.opened .redpacket-body{animation:open-celebrate .5s ease}@keyframes open-celebrate{0%{transform:scale(1)}50%{transform:scale(1.05)}to{transform:scale(1)}}.send-redpacket{background:var(--rp-bg);border-radius:16px;box-shadow:var(--rp-shadow);padding:24px}.send-redpacket-header{margin-bottom:24px;text-align:center}.send-redpacket-header h3{color:var(--rp-primary);font-size:18px;margin:0}.form-group{margin-bottom:20px}.form-group label{color:var(--rp-text);display:block;font-size:14px;margin-bottom:8px}.form-group input{border:1px solid #ddd;border-radius:8px;box-sizing:border-box;font-size:16px;padding:12px;width:100%}.form-group input:focus{border-color:var(--rp-primary);outline:none}.type-selector{display:flex;gap:12px}.type-selector button{background:var(--rp-bg);border:2px solid #ddd;border-radius:8px;color:var(--rp-text);cursor:pointer;flex:1;font-size:14px;padding:12px;transition:var(--rp-transition)}.type-selector button.active{background:var(--rp-primary);border-color:var(--rp-primary);color:var(--rp-text-light)}.amount-input{position:relative}.amount-input input{padding-right:60px}.amount-input .currency{color:var(--rp-text-muted);font-size:14px;position:absolute;right:12px;top:50%;transform:translateY(-50%)}.hint{color:var(--rp-text-muted);display:block;font-size:12px;margin-top:6px}.form-error{background:rgba(231,76,60,.1);border-radius:8px;color:var(--rp-primary);font-size:13px;margin-bottom:16px;padding:10px}.form-actions{display:flex;gap:12px}.btn-cancel,.btn-submit{border:none;border-radius:8px;cursor:pointer;flex:1;font-size:16px;font-weight:600;padding:14px;transition:var(--rp-transition)}.btn-cancel{background:#f5f5f5;color:var(--rp-text)}.btn-submit{background:var(--rp-primary);color:var(--rp-text-light)}.btn-submit:hover:not(:disabled){background:var(--rp-primary-dark)}.btn-submit:disabled{cursor:not-allowed;opacity:.7}@media (max-width:320px){.redpacket-card{width:100%}}
package/package.json ADDED
@@ -0,0 +1,96 @@
1
+ {
2
+ "name": "@quantabit/redpacket-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "QuantaBit Red Packet SDK - Normal/lucky draw red packet distribution and claiming",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.esm.js",
8
+ "types": "types/index.d.ts",
9
+ "files": [
10
+ "dist",
11
+ "README.md",
12
+ "LICENSE",
13
+ "types"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "import": "./dist/index.esm.js",
18
+ "require": "./dist/index.cjs",
19
+ "types": "./types/index.d.ts"
20
+ },
21
+ "./styles": "./dist/styles.css",
22
+ "./styles.css": "./dist/styles.css"
23
+ },
24
+ "scripts": {
25
+ "build": "rollup -c",
26
+ "dev": "rollup -c -w",
27
+ "clean": "rm -rf dist",
28
+ "prepublishOnly": "npm run clean && npm run build",
29
+ "test": "jest --passWithNoTests"
30
+ },
31
+ "peerDependencies": {
32
+ "@quantabit/qbit-chain-sdk": "^1.1.0",
33
+ "react": ">=17.0.0",
34
+ "react-dom": ">=17.0.0"
35
+ },
36
+ "peerDependenciesMeta": {
37
+ "@quantabit/qbit-chain-sdk": {
38
+ "optional": true
39
+ }
40
+ },
41
+ "devDependencies": {
42
+ "@babel/core": "^7.23.0",
43
+ "@babel/preset-env": "^7.23.0",
44
+ "@babel/preset-react": "^7.23.0",
45
+ "@rollup/plugin-babel": "^6.0.0",
46
+ "@rollup/plugin-commonjs": "^25.0.0",
47
+ "@rollup/plugin-node-resolve": "^15.0.0",
48
+ "babel-jest": "^29.7.0",
49
+ "identity-obj-proxy": "^3.0.0",
50
+ "jest": "^29.7.0",
51
+ "jest-environment-jsdom": "^29.7.0",
52
+ "react": "^19.2.0",
53
+ "react-dom": "^19.2.0",
54
+ "rollup": "^4.0.0",
55
+ "rollup-plugin-postcss": "^4.0.0"
56
+ },
57
+ "keywords": [
58
+ "redpacket",
59
+ "hongbao",
60
+ "lucky-money",
61
+ "reward",
62
+ "quantabit"
63
+ ],
64
+ "author": "QuantaBit Team",
65
+ "license": "MIT",
66
+ "publishConfig": {
67
+ "access": "public",
68
+ "registry": "https://registry.npmjs.org"
69
+ },
70
+ "dependencies": {
71
+ "@quantabit/sdk-config": "^1.0.6"
72
+ },
73
+ "repository": {
74
+ "type": "git",
75
+ "url": "https://github.com/quantabit-chain/qbit-sdk.git",
76
+ "directory": "packages/redpacket-sdk"
77
+ },
78
+ "homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/redpacket-sdk#readme",
79
+ "bugs": {
80
+ "url": "https://github.com/quantabit-chain/qbit-sdk/issues"
81
+ },
82
+ "engines": {
83
+ "node": ">=18.0.0"
84
+ },
85
+ "sideEffects": [
86
+ "*.css"
87
+ ],
88
+ "qbit": {
89
+ "privacy": {
90
+ "level": "functional",
91
+ "dataCollection": "Feature-related data for personalization. Requires user consent.",
92
+ "gdprCompliant": true,
93
+ "ccpaCompliant": true
94
+ }
95
+ }
96
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @quantabit/redpacket-sdk TypeScript Type Definitions
3
+ *
4
+ * Auto-generated type stubs. Enhance with specific types as the SDK matures.
5
+ */
6
+
7
+ import { FC, ReactNode } from 'react';
8
+
9
+ // ============ Provider ============
10
+
11
+ export interface RedPacketProviderProps {
12
+ children: ReactNode;
13
+ apiUrl?: string;
14
+ token?: string;
15
+ language?: string;
16
+ onError?: (error: Error) => void;
17
+ }
18
+
19
+ export declare const RedPacketProvider: FC<RedPacketProviderProps>;
20
+
21
+ // ============ Components ============
22
+
23
+ export interface RedPacketCardProps {
24
+ className?: string;
25
+ style?: React.CSSProperties;
26
+ [key: string]: any;
27
+ }
28
+
29
+ export declare const RedPacketCard: FC<RedPacketCardProps>;
30
+
31
+ export interface SendRedPacketProps {
32
+ className?: string;
33
+ style?: React.CSSProperties;
34
+ [key: string]: any;
35
+ }
36
+
37
+ export declare const SendRedPacket: FC<SendRedPacketProps>;
38
+
39
+ // ============ Hooks ============
40
+
41
+ export interface UseRedPacketReturn {
42
+ data: any;
43
+ loading: boolean;
44
+ error: string | null;
45
+ [key: string]: any;
46
+ }
47
+
48
+ export declare function useRedPacket(...args: any[]): UseRedPacketReturn;
49
+
50
+ // ============ Services ============
51
+
52
+ export declare const redPacketApi: any;
53
+
54
+ export declare class RedPacketApiClient {
55
+ constructor(config?: Record<string, any>);
56
+ send(data: Record<string, any>): Promise<any>;
57
+ createRedpacket(data: Record<string, any>): Promise<any>;
58
+ claim(redpacketId: string): Promise<any>;
59
+ grabRedpacket(redpacketId: string): Promise<any>;
60
+ getRedpacket(redpacketId: string): Promise<any>;
61
+ getReceivedRedpackets(params?: Record<string, any>): Promise<any>;
62
+ getSentRedpackets(params?: Record<string, any>): Promise<any>;
63
+ getMyRedpackets(params?: Record<string, any>): Promise<any>;
64
+ submitChainTx(redpacketId: string, txHash: string, data?: Record<string, any>): Promise<any>;
65
+ getChainStatus(redpacketId: string): Promise<any>;
66
+ setToken(token: string): void;
67
+ setBaseUrl(url: string): void;
68
+ destroy(): void;
69
+ }
70
+
71
+ export declare const REDPACKET_ANCHOR_NAMESPACE: 'qbit_redpacket';
72
+ export declare function buildRedPacketAnchorMemo(redpacket: Record<string, any>, options?: Record<string, any>): Promise<string>;
73
+ export declare function buildRedPacketChainSubmit(redpacketId: string, txHash: string, options?: Record<string, any>): Record<string, any>;