@quantabit/level-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.
- package/LICENSE +21 -0
- package/README.md +178 -0
- package/dist/index.cjs +1367 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.esm.js +1340 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/styles.css +1 -0
- package/package.json +83 -0
- package/types/index.d.ts +102 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/services/levelApi.js","../src/i18n/index.js","../src/context/LevelContext.jsx","../src/hooks/useExpHistory.js","../src/hooks/useLeaderboard.js","../src/components/LevelBadge.jsx","../src/types/index.js","../src/components/LevelProgress.jsx","../src/components/LevelCard.jsx","../src/components/Leaderboard.jsx","../src/components/PrivilegeList.jsx"],"sourcesContent":["/**\n * Level SDK - API 客户端\n * 等级系统后端接口封装\n * \n * 使用 BaseApiClient 基类简化代码\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 等级 API 客户端\n */\nexport class LevelApiClient extends BaseApiClient {\n constructor(config = {}) {\n super('/level', config);\n }\n\n // ============ 等级查询 ============\n\n /**\n * 获取我的等级信息\n */\n async getMyLevel() {\n return this.get('/my');\n }\n\n /**\n * 获取等级详情\n * @param {number} level - 等级\n */\n async getLevelInfo(level) {\n return this.get(`/${level}`);\n }\n\n /**\n * 获取所有等级列表\n */\n async getAllLevels() {\n return this.get('/list');\n }\n\n /**\n * 获取升级进度\n */\n async getProgress() {\n return this.get('/my/progress');\n }\n\n // ============ 等级权益 ============\n\n /**\n * 获取当前等级权益\n */\n async getMyBenefits() {\n return this.get('/my/benefits');\n }\n\n /**\n * 获取指定等级权益\n * @param {number} level - 等级\n */\n async getLevelBenefits(level) {\n return this.get(`/${level}/benefits`);\n }\n\n /**\n * 领取等级奖励\n * @param {number} level - 等级\n */\n async claimLevelReward(level) {\n return this.post(`/${level}/claim`);\n }\n\n /**\n * 获取待领取的等级奖励\n */\n async getPendingRewards() {\n return this.get('/my/rewards/pending');\n }\n\n // ============ 经验值 ============\n\n /**\n * 获取经验值明细\n * @param {Object} params - 查询参数\n */\n async getExpHistory(params = {}) {\n return this.get('/my/exp/history', params);\n }\n\n /**\n * 获取经验值来源\n */\n async getExpSources() {\n return this.get('/exp/sources');\n }\n\n // ============ 等级排行 ============\n\n /**\n * 获取等级排行榜\n * @param {Object} params - 查询参数\n */\n async getLeaderboard(params = {}) {\n return this.get('/leaderboard', params);\n }\n\n /**\n * 获取我的排名\n */\n async getMyRank() {\n return this.get('/my/rank');\n }\n\n // ============ 特权对比 ============\n\n /**\n * 对比两个等级权益\n * @param {number} level1 - 等级1\n * @param {number} level2 - 等级2\n */\n async compareLevels(level1, level2) {\n return this.get('/compare', { level1, level2 });\n }\n\n /**\n * 获取升级建议\n */\n async getUpgradeSuggestions() {\n return this.get('/my/upgrade-tips');\n }\n}\n\n// 创建默认实例\nexport const levelApi = new LevelApiClient();\n\n\n\nexport default levelApi;\n","/**\n * Level SDK - 国际化 i18n\n * 等级体系多语言支持\n */\n\nexport const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n zh: {\n // 通用\n loading: '加载中...',\n level: '等级',\n experience: '经验值',\n currentLevel: '当前等级',\n nextLevel: '下一等级',\n maxLevel: '满级',\n \n // 等级信息\n levelUp: '升级啦!',\n levelUpDesc: '恭喜您升级到 Lv.{level}',\n expProgress: '经验进度',\n expNeeded: '还需要 {exp} 经验升级',\n expToNext: '距离下一级还需',\n \n // 权益\n privileges: '等级权益',\n unlockAt: '等级 {level} 解锁',\n unlocked: '已解锁',\n locked: '未解锁',\n \n // 统计\n totalExp: '累计经验',\n todayExp: '今日获得',\n weeklyExp: '本周获得',\n monthlyExp: '本月获得',\n \n // 经验来源\n expSource: '经验来源',\n expFromTask: '完成任务',\n expFromLogin: '每日登录',\n expFromContent: '发布内容',\n expFromInteraction: '互动奖励',\n expFromInvite: '邀请奖励',\n expFromPurchase: '消费奖励',\n \n // 排行榜\n leaderboard: '等级排行',\n rank: '排名',\n myRank: '我的排名',\n top100: 'TOP 100',\n \n // 成就\n achievements: '成就',\n achievementUnlocked: '成就解锁',\n achievementProgress: '成就进度',\n \n // 勋章\n badges: '勋章',\n badgeEarned: '获得勋章',\n \n // 历史\n expHistory: '经验记录',\n noHistory: '暂无记录',\n \n // 错误\n errorLoad: '加载失败',\n errorRetry: '点击重试',\n },\n \n ja: {\n // 通用\n loading: '読み込み中...',\n level: 'レベル',\n experience: '経験値',\n currentLevel: '現在のレベル',\n nextLevel: '次のレベル',\n maxLevel: '最大レベル',\n \n // 等级信息\n levelUp: 'レベルアップ!',\n levelUpDesc: 'おめでとうございます!Lv.{level}にレベルアップしました',\n expProgress: '経験値の進捗',\n expNeeded: '次のレベルまであと {exp} EXP',\n expToNext: '次のレベルまで',\n \n // 权益\n privileges: 'レベル特典',\n unlockAt: 'Lv.{level}でアンロック',\n unlocked: 'アンロック済み',\n locked: '未アンロック',\n \n // 统计\n totalExp: '累計経験値',\n todayExp: '本日獲得',\n weeklyExp: '今週獲得',\n monthlyExp: '今月獲得',\n \n // 经验来源\n expSource: '経験値の獲得元',\n expFromTask: 'タスク完了',\n expFromLogin: 'デイリーログイン',\n expFromContent: 'コンテンツ公開',\n expFromInteraction: 'インタラクションボーナス',\n expFromInvite: '招待ボーナス',\n expFromPurchase: '購入ボーナス',\n \n // 排行榜\n leaderboard: 'レベルランキング',\n rank: '順位',\n myRank: '私の順位',\n top100: 'TOP 100',\n \n // 成就\n achievements: '実績',\n achievementUnlocked: '実績アンロック',\n achievementProgress: '実績の進捗',\n \n // 勋章\n badges: 'バッジ',\n badgeEarned: 'バッジ獲得',\n \n // 历史\n expHistory: '経験値履歴',\n noHistory: '履歴がありません',\n \n // 错误\n errorLoad: '読み込みに失敗しました',\n errorRetry: 'クリックして再試行',\n },\n \n ko: {\n // 通用\n loading: '로딩 중...',\n level: '레벨',\n experience: '경험치',\n currentLevel: '현재 레벨',\n nextLevel: '다음 레벨',\n maxLevel: '만렙',\n \n // 等级信息\n levelUp: '레벨 업!',\n levelUpDesc: '축하합니다! Lv.{level}(으)로 레벨 업하셨습니다',\n expProgress: '경험치 진행률',\n expNeeded: '레벨업까지 {exp} 경험치 필요',\n expToNext: '다음 레벨까지',\n \n // 权益\n privileges: '레벨 혜택',\n unlockAt: '레벨 {level}에서 잠금 해제',\n unlocked: '잠금 해제됨',\n locked: '잠김',\n \n // 统计\n totalExp: '누적 경험치',\n todayExp: '오늘 획득',\n weeklyExp: '이번 주 획득',\n monthlyExp: '이번 달 획득',\n \n // 经验来源\n expSource: '경험치 획득처',\n expFromTask: '미션 완료',\n expFromLogin: '출석 체크',\n expFromContent: '콘텐츠 등록',\n expFromInteraction: '상호작용 보너스',\n expFromInvite: '초대 보너스',\n expFromPurchase: '구매 보너스',\n \n // 排行榜\n leaderboard: '레벨 랭킹',\n rank: '순위',\n myRank: '내 순위',\n top100: 'TOP 100',\n \n // 成就\n achievements: '업적',\n achievementUnlocked: '업적 달성',\n achievementProgress: '업적 진행률',\n \n // 勋章\n badges: '배지',\n badgeEarned: '배지 획득',\n \n // 历史\n expHistory: '경험치 내역',\n noHistory: '내역이 없습니다',\n \n // 错误\n errorLoad: '불러오기 실패',\n errorRetry: '클릭하여 다시 시도',\n },\n \n en: {\n // General\n loading: 'Loading...',\n level: 'Level',\n experience: 'Experience',\n currentLevel: 'Current Level',\n nextLevel: 'Next Level',\n maxLevel: 'Max Level',\n \n // Level Info\n levelUp: 'Level Up!',\n levelUpDesc: 'Congratulations! You reached Lv.{level}',\n expProgress: 'EXP Progress',\n expNeeded: '{exp} EXP needed to level up',\n expToNext: 'To next level',\n \n // Privileges\n privileges: 'Privileges',\n unlockAt: 'Unlock at Level {level}',\n unlocked: 'Unlocked',\n locked: 'Locked',\n \n // Statistics\n totalExp: 'Total EXP',\n todayExp: 'Today',\n weeklyExp: 'This Week',\n monthlyExp: 'This Month',\n \n // EXP Sources\n expSource: 'EXP Sources',\n expFromTask: 'Task Completion',\n expFromLogin: 'Daily Login',\n expFromContent: 'Content Creation',\n expFromInteraction: 'Interaction Bonus',\n expFromInvite: 'Referral Bonus',\n expFromPurchase: 'Purchase Bonus',\n \n // Leaderboard\n leaderboard: 'Level Leaderboard',\n rank: 'Rank',\n myRank: 'My Rank',\n top100: 'TOP 100',\n \n // Achievements\n achievements: 'Achievements',\n achievementUnlocked: 'Achievement Unlocked',\n achievementProgress: 'Progress',\n \n // Badges\n badges: 'Badges',\n badgeEarned: 'Badge Earned',\n \n // History\n expHistory: 'EXP History',\n noHistory: 'No records yet',\n \n // Errors\n errorLoad: 'Failed to load',\n errorRetry: 'Click to retry',\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_level_language', lang);\n }\n }\n}\n\nexport function getLanguage() {\n if (typeof window !== 'undefined') {\n const saved = localStorage.getItem('qbit_did_level_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 * Level SDK - Context Provider\n * 等级体系状态管理\n */\n\nimport React, { createContext, useContext, useState, useCallback, useEffect } from 'react';\nimport { levelApi } from '../services/levelApi';\nimport { setLanguage } from '../i18n';\n\nconst LevelContext = createContext(null);\n\n/**\n * Level Provider 组件\n */\nexport function LevelProvider({ \n children, \n apiUrl, \n token, \n language = 'zh',\n onLevelUp,\n onError,\n}) {\n const [userLevel, setUserLevel] = useState(null);\n const [levelConfigs, setLevelConfigs] = useState([]);\n const [privileges, setPrivileges] = useState([]);\n const [achievements, setAchievements] = useState([]);\n const [badges, setBadges] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n\n // 初始化配置\n useEffect(() => {\n if (apiUrl) levelApi.setBaseUrl(apiUrl);\n if (token) levelApi.setToken(token);\n if (language) setLanguage(language);\n }, [apiUrl, token, language]);\n\n const handleError = useCallback((err) => {\n setError(err.message);\n onError?.(err);\n }, [onError]);\n\n // ============ 加载数据 ============\n\n /**\n * 加载用户等级信息\n */\n const loadUserLevel = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await levelApi.getMyLevel();\n const prevLevel = userLevel?.level;\n setUserLevel(result);\n // 检查是否升级\n if (prevLevel && result.level > prevLevel) {\n onLevelUp?.(result);\n }\n return result;\n } catch (err) {\n handleError(err);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [userLevel, onLevelUp, handleError]);\n\n /**\n * 加载等级配置\n */\n const loadLevelConfigs = useCallback(async () => {\n try {\n const result = await levelApi.getLevelConfigs();\n const configs = result.items || result.data || result || [];\n setLevelConfigs(configs);\n return configs;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n /**\n * 加载权益列表\n */\n const loadPrivileges = useCallback(async () => {\n try {\n const result = await levelApi.getPrivileges();\n const items = result.items || result.data || result || [];\n setPrivileges(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n /**\n * 加载成就列表\n */\n const loadAchievements = useCallback(async () => {\n try {\n const result = await levelApi.getAchievements();\n const items = result.items || result.data || result || [];\n setAchievements(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n /**\n * 加载勋章列表\n */\n const loadBadges = useCallback(async () => {\n try {\n const result = await levelApi.getBadges();\n const items = result.items || result.data || result || [];\n setBadges(items);\n return items;\n } catch (err) {\n handleError(err);\n throw err;\n }\n }, [handleError]);\n\n /**\n * 初始化加载所有数据\n */\n const initialize = useCallback(async () => {\n setLoading(true);\n try {\n await Promise.all([\n loadUserLevel(),\n loadLevelConfigs(),\n loadPrivileges(),\n ]);\n } catch (err) {\n // 错误已在各自的 load 函数中处理\n } finally {\n setLoading(false);\n }\n }, [loadUserLevel, loadLevelConfigs, loadPrivileges]);\n\n // ============ 辅助方法 ============\n\n /**\n * 获取等级配置\n */\n const getLevelConfig = useCallback((level) => {\n return levelConfigs.find(c => c.level === level);\n }, [levelConfigs]);\n\n /**\n * 检查权益是否已解锁\n */\n const isPrivilegeUnlocked = useCallback((privilegeId) => {\n if (!userLevel) return false;\n const privilege = privileges.find(p => p.id === privilegeId);\n return privilege && userLevel.level >= privilege.unlock_level;\n }, [userLevel, privileges]);\n\n /**\n * 获取已解锁的权益\n */\n const getUnlockedPrivileges = useCallback(() => {\n if (!userLevel) return [];\n return privileges.filter(p => userLevel.level >= p.unlock_level);\n }, [userLevel, privileges]);\n\n /**\n * 获取下一等级的权益\n */\n const getNextLevelPrivileges = useCallback(() => {\n if (!userLevel) return [];\n return privileges.filter(p => p.unlock_level === userLevel.level + 1);\n }, [userLevel, privileges]);\n\n const value = {\n // 状态\n userLevel,\n levelConfigs,\n privileges,\n achievements,\n badges,\n loading,\n error,\n \n // 加载方法\n loadUserLevel,\n loadLevelConfigs,\n loadPrivileges,\n loadAchievements,\n loadBadges,\n initialize,\n \n // 辅助方法\n getLevelConfig,\n isPrivilegeUnlocked,\n getUnlockedPrivileges,\n getNextLevelPrivileges,\n \n // API 实例\n api: levelApi,\n };\n\n return (\n <LevelContext.Provider value={value}>\n {children}\n </LevelContext.Provider>\n );\n}\n\n/**\n * 使用 Level Context\n */\nexport function useLevel() {\n const context = useContext(LevelContext);\n if (!context) {\n throw new Error('useLevel must be used within a LevelProvider');\n }\n return context;\n}\n\nexport default LevelContext;\n","/**\n * Level SDK - useExpHistory Hook\n * 经验历史记录 Hook\n */\n\nimport { useState, useCallback } from 'react';\nimport { useLevel } from '../context/LevelContext';\n\n/**\n * 经验历史 Hook\n */\nexport function useExpHistory() {\n const { api } = useLevel();\n const [history, setHistory] = useState([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [pagination, setPagination] = useState({\n page: 1,\n pageSize: 20,\n total: 0,\n totalPages: 0,\n });\n\n /**\n * 加载经验历史\n */\n const load = useCallback(async (params = {}) => {\n setLoading(true);\n setError(null);\n try {\n const result = await api.getExpHistory({\n page: pagination.page,\n page_size: pagination.pageSize,\n ...params,\n });\n const items = result.items || result.data || [];\n setHistory(items);\n setPagination(prev => ({\n ...prev,\n total: result.total || items.length,\n totalPages: result.total_pages || Math.ceil((result.total || items.length) / prev.pageSize),\n }));\n return result;\n } catch (err) {\n setError(err.message);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [api, pagination.page, pagination.pageSize]);\n\n /**\n * 按来源筛选\n */\n const filterBySource = useCallback(async (source) => {\n return load({ source, page: 1 });\n }, [load]);\n\n /**\n * 按日期范围筛选\n */\n const filterByDateRange = useCallback(async (startDate, endDate) => {\n return load({ start_date: startDate, end_date: endDate, page: 1 });\n }, [load]);\n\n /**\n * 设置页码\n */\n const setPage = useCallback((page) => {\n setPagination(prev => ({ ...prev, page }));\n }, []);\n\n /**\n * 刷新\n */\n const refresh = useCallback(() => {\n return load();\n }, [load]);\n\n return {\n history,\n loading,\n error,\n pagination,\n load,\n filterBySource,\n filterByDateRange,\n setPage,\n refresh,\n };\n}\n\nexport default useExpHistory;\n","/**\n * Level SDK - useLeaderboard Hook\n * 等级排行榜 Hook\n */\n\nimport { useState, useCallback, useEffect } from 'react';\nimport { useLevel } from '../context/LevelContext';\n\n/**\n * 排行榜 Hook\n */\nexport function useLeaderboard(autoLoad = true) {\n const { api } = useLevel();\n const [leaderboard, setLeaderboard] = useState([]);\n const [myRank, setMyRank] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(null);\n const [timeRange, setTimeRange] = useState('all'); // all, weekly, monthly\n\n /**\n * 加载排行榜\n */\n const load = useCallback(async (params = {}) => {\n setLoading(true);\n setError(null);\n try {\n const [boardResult, rankResult] = await Promise.all([\n api.getLeaderboard({ time_range: timeRange, limit: 100, ...params }),\n api.getMyRank(),\n ]);\n \n const items = boardResult.items || boardResult.data || boardResult || [];\n setLeaderboard(items);\n setMyRank(rankResult);\n return { leaderboard: items, myRank: rankResult };\n } catch (err) {\n setError(err.message);\n throw err;\n } finally {\n setLoading(false);\n }\n }, [api, timeRange]);\n\n /**\n * 切换时间范围\n */\n const changeTimeRange = useCallback((range) => {\n setTimeRange(range);\n }, []);\n\n /**\n * 刷新\n */\n const refresh = useCallback(() => {\n return load();\n }, [load]);\n\n // 自动加载\n useEffect(() => {\n if (autoLoad) {\n load();\n }\n }, [autoLoad, timeRange]);\n\n return {\n leaderboard,\n myRank,\n loading,\n error,\n timeRange,\n load,\n changeTimeRange,\n refresh,\n };\n}\n\nexport default useLeaderboard;\n","/**\n * Level SDK - LevelBadge 组件\n * 等级徽章展示\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\n\n/**\n * 等级徽章组件\n */\nexport function LevelBadge({\n level,\n name,\n icon,\n color = '#6366f1',\n size = 'medium', // small, medium, large\n showName = true,\n animate = false,\n className = '',\n}) {\n const sizeClasses = {\n small: 'level-badge-sm',\n medium: 'level-badge-md',\n large: 'level-badge-lg',\n };\n\n return (\n <div \n className={`level-badge ${sizeClasses[size]} ${animate ? 'level-badge-animate' : ''} ${className}`}\n style={{ '--level-color': color }}\n >\n <div className=\"level-badge-icon\">\n {icon ? (\n <img src={icon} alt={`Level ${level}`} />\n ) : (\n <span className=\"level-badge-number\">Lv.{level}</span>\n )}\n </div>\n {showName && name && (\n <span className=\"level-badge-name\">{name}</span>\n )}\n </div>\n );\n}\n\nexport default LevelBadge;\n","/**\n * Level SDK - 类型定义\n * 等级体系的核心类型\n */\n\n// 经验来源类型\nexport const ExpSource = {\n TASK: 'task', // 完成任务\n LOGIN: 'login', // 每日登录\n CONTENT: 'content', // 发布内容\n INTERACTION: 'interaction', // 互动奖励\n INVITE: 'invite', // 邀请奖励\n PURCHASE: 'purchase', // 消费奖励\n SYSTEM: 'system', // 系统奖励\n ADMIN: 'admin', // 管理员调整\n};\n\n// 权益类型\nexport const PrivilegeType = {\n FEATURE: 'feature', // 功能解锁\n DISCOUNT: 'discount', // 折扣优惠\n BONUS: 'bonus', // 额外奖励\n BADGE: 'badge', // 专属徽章\n LIMIT_INCREASE: 'limit', // 额度提升\n PRIORITY: 'priority', // 优先权\n EXCLUSIVE: 'exclusive', // 专属特权\n};\n\n// 成就类型\nexport const AchievementType = {\n LEVEL: 'level', // 等级成就\n EXP: 'exp', // 经验成就\n TASK: 'task', // 任务成就\n SOCIAL: 'social', // 社交成就\n CONTENT: 'content', // 内容成就\n TRADING: 'trading', // 交易成就\n SPECIAL: 'special', // 特殊成就\n};\n\n/**\n * 创建默认等级配置\n * @param {Object} overrides - 覆盖字段\n * @returns {Object}\n */\nexport function createDefaultLevelConfig(overrides = {}) {\n return {\n id: null,\n level: 1,\n name: '',\n icon: null,\n color: '#6366f1',\n min_exp: 0,\n max_exp: 100,\n privileges: [],\n badge_url: null,\n description: '',\n ...overrides,\n };\n}\n\n/**\n * 创建默认用户等级信息\n * @param {Object} overrides - 覆盖字段\n * @returns {Object}\n */\nexport function createDefaultUserLevel(overrides = {}) {\n return {\n user_did: null,\n level: 1,\n level_name: '',\n current_exp: 0,\n total_exp: 0,\n exp_to_next: 100,\n progress: 0,\n privileges: [],\n badges: [],\n created_at: null,\n updated_at: null,\n ...overrides,\n };\n}\n\n/**\n * 创建默认经验记录\n * @param {Object} overrides - 覆盖字段\n * @returns {Object}\n */\nexport function createDefaultExpRecord(overrides = {}) {\n return {\n id: null,\n user_did: null,\n amount: 0,\n source: ExpSource.SYSTEM,\n source_id: null,\n description: '',\n balance_after: 0,\n created_at: null,\n ...overrides,\n };\n}\n\n/**\n * 创建默认权益\n * @param {Object} overrides - 覆盖字段\n * @returns {Object}\n */\nexport function createDefaultPrivilege(overrides = {}) {\n return {\n id: null,\n name: '',\n type: PrivilegeType.FEATURE,\n description: '',\n icon: null,\n unlock_level: 1,\n value: null,\n is_active: true,\n ...overrides,\n };\n}\n\n/**\n * 创建默认成就\n * @param {Object} overrides - 覆盖字段\n * @returns {Object}\n */\nexport function createDefaultAchievement(overrides = {}) {\n return {\n id: null,\n name: '',\n type: AchievementType.LEVEL,\n description: '',\n icon: null,\n condition: {},\n reward_exp: 0,\n reward_badge: null,\n is_hidden: false,\n ...overrides,\n };\n}\n\n/**\n * 计算升级所需经验\n * @param {number} level - 目标等级\n * @param {string} formula - 公式类型 (linear, quadratic, exponential)\n * @param {Object} params - 公式参数\n * @returns {number}\n */\nexport function calculateExpForLevel(level, formula = 'quadratic', params = {}) {\n const { base = 100, factor = 1.5 } = params;\n \n switch (formula) {\n case 'linear':\n return base * level;\n case 'quadratic':\n return Math.floor(base * Math.pow(level, factor));\n case 'exponential':\n return Math.floor(base * Math.pow(factor, level - 1));\n default:\n return base * level;\n }\n}\n\n/**\n * 计算进度百分比\n * @param {number} current - 当前经验\n * @param {number} min - 当前等级最低经验\n * @param {number} max - 下一等级所需经验\n * @returns {number} 0-100 的百分比\n */\nexport function calculateProgress(current, min, max) {\n if (max <= min) return 100;\n const progress = ((current - min) / (max - min)) * 100;\n return Math.min(100, Math.max(0, progress));\n}\n","/**\n * Level SDK - LevelProgress 组件\n * 等级进度条\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\nimport { calculateProgress } from '../types';\n\n/**\n * 等级进度组件\n */\nexport function LevelProgress({\n currentLevel,\n currentExp,\n expToNext,\n totalExp,\n levelName,\n nextLevelName,\n color = '#6366f1',\n showStats = true,\n showLabels = true,\n size = 'medium', // small, medium, large\n animated = true,\n className = '',\n}) {\n const progress = calculateProgress(currentExp, 0, expToNext);\n \n const sizeClasses = {\n small: 'level-progress-sm',\n medium: 'level-progress-md',\n large: 'level-progress-lg',\n };\n\n // 格式化数字\n const formatNumber = (num) => {\n if (num >= 10000) return (num / 10000).toFixed(1) + 'w';\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num?.toString() || '0';\n };\n\n return (\n <div \n className={`level-progress ${sizeClasses[size]} ${className}`}\n style={{ '--level-color': color }}\n >\n {/* 等级信息 */}\n {showLabels && (\n <div className=\"level-progress-header\">\n <div className=\"level-progress-current\">\n <span className=\"level-number\">Lv.{currentLevel}</span>\n {levelName && <span className=\"level-name\">{levelName}</span>}\n </div>\n <div className=\"level-progress-next\">\n {nextLevelName ? (\n <>\n <span className=\"level-name\">{nextLevelName}</span>\n <span className=\"level-number\">Lv.{currentLevel + 1}</span>\n </>\n ) : (\n <span className=\"level-max\">{t('maxLevel')}</span>\n )}\n </div>\n </div>\n )}\n\n {/* 进度条 */}\n <div className=\"level-progress-bar\">\n <div \n className={`level-progress-fill ${animated ? 'animated' : ''}`}\n style={{ width: `${progress}%` }}\n />\n <span className=\"level-progress-text\">{progress.toFixed(1)}%</span>\n </div>\n\n {/* 统计信息 */}\n {showStats && (\n <div className=\"level-progress-stats\">\n <div className=\"level-stat\">\n <span className=\"level-stat-label\">{t('currentLevel')}</span>\n <span className=\"level-stat-value\">{formatNumber(currentExp)}</span>\n </div>\n <div className=\"level-stat\">\n <span className=\"level-stat-label\">{t('expToNext')}</span>\n <span className=\"level-stat-value\">{formatNumber(expToNext - currentExp)}</span>\n </div>\n <div className=\"level-stat\">\n <span className=\"level-stat-label\">{t('totalExp')}</span>\n <span className=\"level-stat-value\">{formatNumber(totalExp)}</span>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default LevelProgress;\n","/**\n * Level SDK - LevelCard 组件\n * 等级信息卡片\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\nimport { LevelBadge } from './LevelBadge';\nimport { LevelProgress } from './LevelProgress';\n\n/**\n * 等级卡片组件\n */\nexport function LevelCard({\n userLevel,\n levelConfig,\n nextLevelConfig,\n showPrivileges = true,\n showProgress = true,\n onViewPrivileges,\n onViewHistory,\n className = '',\n}) {\n if (!userLevel) {\n return (\n <div className={`level-card level-card-empty ${className}`}>\n <div className=\"level-card-loading\">\n <div className=\"level-loading-spinner\" />\n <span>{t('loading')}</span>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`level-card ${className}`}>\n {/* 头部:等级徽章 */}\n <div className=\"level-card-header\">\n <LevelBadge\n level={userLevel.level}\n name={userLevel.level_name || levelConfig?.name}\n icon={levelConfig?.icon}\n color={levelConfig?.color}\n size=\"large\"\n />\n <div className=\"level-card-title\">\n <h3>{userLevel.level_name || `${t('level')} ${userLevel.level}`}</h3>\n <p>{levelConfig?.description}</p>\n </div>\n </div>\n\n {/* 进度条 */}\n {showProgress && (\n <div className=\"level-card-progress\">\n <LevelProgress\n currentLevel={userLevel.level}\n currentExp={userLevel.current_exp}\n expToNext={userLevel.exp_to_next}\n totalExp={userLevel.total_exp}\n levelName={userLevel.level_name}\n nextLevelName={nextLevelConfig?.name}\n color={levelConfig?.color}\n size=\"large\"\n />\n </div>\n )}\n\n {/* 权益预览 */}\n {showPrivileges && userLevel.privileges?.length > 0 && (\n <div className=\"level-card-privileges\">\n <div className=\"level-privileges-header\">\n <h4>{t('privileges')}</h4>\n {onViewPrivileges && (\n <button \n className=\"level-link-btn\"\n onClick={onViewPrivileges}\n >\n {t('more')} →\n </button>\n )}\n </div>\n <div className=\"level-privileges-list\">\n {userLevel.privileges.slice(0, 4).map((privilege, index) => (\n <div key={privilege.id || index} className=\"level-privilege-item\">\n {privilege.icon && (\n <span className=\"level-privilege-icon\">{privilege.icon}</span>\n )}\n <span className=\"level-privilege-name\">{privilege.name}</span>\n </div>\n ))}\n </div>\n </div>\n )}\n\n {/* 操作按钮 */}\n <div className=\"level-card-actions\">\n {onViewHistory && (\n <button \n className=\"level-btn level-btn-outline\"\n onClick={onViewHistory}\n >\n {t('expHistory')}\n </button>\n )}\n {onViewPrivileges && (\n <button \n className=\"level-btn level-btn-primary\"\n onClick={onViewPrivileges}\n >\n {t('privileges')}\n </button>\n )}\n </div>\n </div>\n );\n}\n\nexport default LevelCard;\n","/**\n * Level SDK - Leaderboard 组件\n * 等级排行榜\n */\n\nimport React, { useState } from 'react';\nimport { t } from '../i18n';\nimport { LevelBadge } from './LevelBadge';\n\n/**\n * 排行榜组件\n */\nexport function Leaderboard({\n items = [],\n myRank = null,\n timeRange = 'all',\n onTimeRangeChange,\n loading = false,\n showTop = 100,\n className = '',\n}) {\n const [activeRange, setActiveRange] = useState(timeRange);\n\n const handleRangeChange = (range) => {\n setActiveRange(range);\n onTimeRangeChange?.(range);\n };\n\n // 格式化排名\n const formatRank = (rank) => {\n if (rank === 1) return '🥇';\n if (rank === 2) return '🥈';\n if (rank === 3) return '🥉';\n return `#${rank}`;\n };\n\n // 格式化数字\n const formatNumber = (num) => {\n if (num >= 10000) return (num / 10000).toFixed(1) + 'w';\n if (num >= 1000) return (num / 1000).toFixed(1) + 'k';\n return num?.toString() || '0';\n };\n\n return (\n <div className={`level-leaderboard ${className}`}>\n {/* 头部 */}\n <div className=\"level-leaderboard-header\">\n <h3>{t('leaderboard')}</h3>\n <div className=\"level-time-tabs\">\n <button \n className={activeRange === 'all' ? 'active' : ''}\n onClick={() => handleRangeChange('all')}\n >\n 全部\n </button>\n <button \n className={activeRange === 'monthly' ? 'active' : ''}\n onClick={() => handleRangeChange('monthly')}\n >\n 本月\n </button>\n <button \n className={activeRange === 'weekly' ? 'active' : ''}\n onClick={() => handleRangeChange('weekly')}\n >\n 本周\n </button>\n </div>\n </div>\n\n {/* 我的排名 */}\n {myRank && (\n <div className=\"level-my-rank\">\n <span className=\"level-my-rank-label\">{t('myRank')}</span>\n <span className=\"level-my-rank-value\">{formatRank(myRank.rank)}</span>\n <span className=\"level-my-rank-info\">\n Lv.{myRank.level} · {formatNumber(myRank.total_exp)} EXP\n </span>\n </div>\n )}\n\n {/* 排行列表 */}\n {loading ? (\n <div className=\"level-leaderboard-loading\">\n <div className=\"level-loading-spinner\" />\n <span>{t('loading')}</span>\n </div>\n ) : items.length === 0 ? (\n <div className=\"level-leaderboard-empty\">\n <span>暂无数据</span>\n </div>\n ) : (\n <div className=\"level-leaderboard-list\">\n {items.slice(0, showTop).map((item, index) => (\n <div \n key={item.user_did || index}\n className={`level-leaderboard-item ${index < 3 ? 'top-three' : ''}`}\n >\n <span className=\"level-rank\">{formatRank(index + 1)}</span>\n <div className=\"level-user-info\">\n {item.avatar ? (\n <img src={item.avatar} alt=\"\" className=\"level-user-avatar\" />\n ) : (\n <div className=\"level-user-avatar-placeholder\">\n {item.name?.charAt(0) || '?'}\n </div>\n )}\n <span className=\"level-user-name\">{item.name || 'Anonymous'}</span>\n </div>\n <LevelBadge\n level={item.level}\n color={item.level_color}\n size=\"small\"\n showName={false}\n />\n <span className=\"level-exp\">{formatNumber(item.total_exp)} EXP</span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport default Leaderboard;\n","/**\n * Level SDK - PrivilegeList 组件\n * 权益列表展示\n */\n\nimport React from 'react';\nimport { t } from '../i18n';\n\n/**\n * 权益列表组件\n */\nexport function PrivilegeList({\n privileges = [],\n userLevel = 0,\n showLocked = true,\n showUnlockLevel = true,\n onPrivilegeClick,\n className = '',\n}) {\n // 分离已解锁和未解锁的权益\n const unlockedPrivileges = privileges.filter(p => userLevel >= p.unlock_level);\n const lockedPrivileges = privileges.filter(p => userLevel < p.unlock_level);\n\n const renderPrivilege = (privilege, isUnlocked) => (\n <div \n key={privilege.id}\n className={`level-privilege ${isUnlocked ? 'unlocked' : 'locked'}`}\n onClick={() => onPrivilegeClick?.(privilege)}\n >\n <div className=\"level-privilege-icon-wrapper\">\n {privilege.icon ? (\n <span className=\"level-privilege-icon\">{privilege.icon}</span>\n ) : (\n <span className=\"level-privilege-icon-default\">✨</span>\n )}\n {!isUnlocked && (\n <span className=\"level-privilege-lock\">🔒</span>\n )}\n </div>\n <div className=\"level-privilege-content\">\n <h4 className=\"level-privilege-name\">{privilege.name}</h4>\n {privilege.description && (\n <p className=\"level-privilege-desc\">{privilege.description}</p>\n )}\n {showUnlockLevel && !isUnlocked && (\n <span className=\"level-privilege-unlock\">\n {t('unlockAt', { level: privilege.unlock_level })}\n </span>\n )}\n </div>\n <div className=\"level-privilege-status\">\n <span className={`level-status-tag ${isUnlocked ? 'tag-unlocked' : 'tag-locked'}`}>\n {isUnlocked ? t('unlocked') : t('locked')}\n </span>\n </div>\n </div>\n );\n\n return (\n <div className={`level-privilege-list ${className}`}>\n {/* 已解锁权益 */}\n {unlockedPrivileges.length > 0 && (\n <div className=\"level-privilege-section\">\n <h3 className=\"level-privilege-section-title\">\n {t('unlocked')} ({unlockedPrivileges.length})\n </h3>\n <div className=\"level-privilege-grid\">\n {unlockedPrivileges.map(p => renderPrivilege(p, true))}\n </div>\n </div>\n )}\n\n {/* 未解锁权益 */}\n {showLocked && lockedPrivileges.length > 0 && (\n <div className=\"level-privilege-section\">\n <h3 className=\"level-privilege-section-title\">\n {t('locked')} ({lockedPrivileges.length})\n </h3>\n <div className=\"level-privilege-grid\">\n {lockedPrivileges.map(p => renderPrivilege(p, false))}\n </div>\n </div>\n )}\n\n {/* 空状态 */}\n {privileges.length === 0 && (\n <div className=\"level-privilege-empty\">\n <span className=\"level-empty-icon\">🎁</span>\n <span>暂无权益</span>\n </div>\n )}\n </div>\n );\n}\n\nexport default PrivilegeList;\n"],"names":["LevelApiClient","BaseApiClient","constructor","config","getMyLevel","get","getLevelInfo","level","getAllLevels","getProgress","getMyBenefits","getLevelBenefits","claimLevelReward","post","getPendingRewards","getExpHistory","params","getExpSources","getLeaderboard","getMyRank","compareLevels","level1","level2","getUpgradeSuggestions","levelApi","SUPPORTED_LANGUAGES","messages","zh","loading","experience","currentLevel","nextLevel","maxLevel","levelUp","levelUpDesc","expProgress","expNeeded","expToNext","privileges","unlockAt","unlocked","locked","totalExp","todayExp","weeklyExp","monthlyExp","expSource","expFromTask","expFromLogin","expFromContent","expFromInteraction","expFromInvite","expFromPurchase","leaderboard","rank","myRank","top100","achievements","achievementUnlocked","achievementProgress","badges","badgeEarned","expHistory","noHistory","errorLoad","errorRetry","ja","ko","en","currentLanguage","setLanguage","lang","includes","window","localStorage","setItem","getLanguage","saved","getItem","t","key","msgs","text","Object","keys","forEach","k","replace","RegExp","LevelContext","createContext","LevelProvider","children","apiUrl","token","language","onLevelUp","onError","userLevel","setUserLevel","useState","levelConfigs","setLevelConfigs","setPrivileges","setAchievements","setBadges","setLoading","error","setError","useEffect","setBaseUrl","setToken","handleError","useCallback","err","message","loadUserLevel","result","prevLevel","loadLevelConfigs","getLevelConfigs","configs","items","data","loadPrivileges","getPrivileges","loadAchievements","getAchievements","loadBadges","getBadges","initialize","Promise","all","getLevelConfig","find","c","isPrivilegeUnlocked","privilegeId","privilege","p","id","unlock_level","getUnlockedPrivileges","filter","getNextLevelPrivileges","value","api","React","createElement","Provider","useLevel","context","useContext","Error","useExpHistory","history","setHistory","pagination","setPagination","page","pageSize","total","totalPages","load","page_size","prev","length","total_pages","Math","ceil","filterBySource","source","filterByDateRange","startDate","endDate","start_date","end_date","setPage","refresh","useLeaderboard","autoLoad","setLeaderboard","setMyRank","timeRange","setTimeRange","boardResult","rankResult","time_range","limit","changeTimeRange","range","LevelBadge","name","icon","color","size","showName","animate","className","sizeClasses","small","medium","large","style","src","alt","ExpSource","TASK","LOGIN","CONTENT","INTERACTION","INVITE","PURCHASE","SYSTEM","ADMIN","PrivilegeType","FEATURE","DISCOUNT","BONUS","BADGE","LIMIT_INCREASE","PRIORITY","EXCLUSIVE","AchievementType","LEVEL","EXP","SOCIAL","TRADING","SPECIAL","createDefaultLevelConfig","overrides","min_exp","max_exp","badge_url","description","createDefaultUserLevel","user_did","level_name","current_exp","total_exp","exp_to_next","progress","created_at","updated_at","createDefaultExpRecord","amount","source_id","balance_after","createDefaultPrivilege","type","is_active","createDefaultAchievement","condition","reward_exp","reward_badge","is_hidden","calculateExpForLevel","formula","base","factor","floor","pow","calculateProgress","current","min","max","LevelProgress","currentExp","levelName","nextLevelName","showStats","showLabels","animated","formatNumber","num","toFixed","toString","Fragment","width","LevelCard","levelConfig","nextLevelConfig","showPrivileges","showProgress","onViewPrivileges","onViewHistory","onClick","slice","map","index","Leaderboard","onTimeRangeChange","showTop","activeRange","setActiveRange","handleRangeChange","formatRank","item","avatar","charAt","level_color","PrivilegeList","showLocked","showUnlockLevel","onPrivilegeClick","unlockedPrivileges","lockedPrivileges","renderPrivilege","isUnlocked"],"mappings":"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"}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--level-primary:#6366f1;--level-primary-hover:#4f46e5;--level-primary-light:#eef2ff;--level-success:#10b981;--level-warning:#f59e0b;--level-error:#ef4444;--level-gold:#fbbf24;--level-silver:#9ca3af;--level-bronze:#cd7f32;--level-bg:#fff;--level-bg-secondary:#f9fafb;--level-border:#e5e7eb;--level-text:#111827;--level-text-secondary:#6b7280;--level-text-muted:#9ca3af;--level-radius:8px;--level-radius-lg:12px;--level-shadow:0 1px 3px rgba(0,0,0,.1);--level-shadow-lg:0 10px 15px -3px rgba(0,0,0,.1);--level-transition:all 0.2s ease}.level-badge{align-items:center;background:linear-gradient(135deg,var(--level-color),color-mix(in srgb,var(--level-color) 80%,#000));border-radius:20px;box-shadow:0 2px 8px color-mix(in srgb,var(--level-color) 40%,transparent);color:#fff;display:inline-flex;font-weight:600;gap:8px;padding:6px 12px}.level-badge-sm{font-size:12px;padding:4px 8px}.level-badge-md{font-size:14px;padding:6px 12px}.level-badge-lg{font-size:16px;padding:8px 16px}.level-badge-icon{align-items:center;display:flex;height:24px;justify-content:center;width:24px}.level-badge-lg .level-badge-icon{height:32px;width:32px}.level-badge-icon img{height:100%;object-fit:contain;width:100%}.level-badge-number{font-weight:700}.level-badge-animate{animation:level-pulse 2s infinite}@keyframes level-pulse{0%,to{transform:scale(1)}50%{transform:scale(1.05)}}.level-progress{width:100%}.level-progress-header{display:flex;justify-content:space-between;margin-bottom:12px}.level-progress-current,.level-progress-next{align-items:center;display:flex;gap:8px}.level-progress-current .level-number{color:var(--level-color,var(--level-primary));font-size:18px;font-weight:700}.level-progress-current .level-name{color:var(--level-text-secondary);font-size:14px}.level-progress-next .level-name{color:var(--level-text-muted);font-size:13px}.level-progress-next .level-number{color:var(--level-text-secondary);font-size:14px;font-weight:600}.level-max{color:var(--level-gold);font-size:12px;font-weight:600}.level-progress-bar{background:var(--level-bg-secondary);border-radius:6px;height:12px;overflow:hidden;position:relative}.level-progress-lg .level-progress-bar{border-radius:8px;height:16px}.level-progress-fill{border-radius:6px;height:100%;transition:width .5s ease}.level-progress-fill,.level-progress-fill.animated{background:linear-gradient(90deg,var(--level-color,var(--level-primary)),color-mix(in srgb,var(--level-color,var(--level-primary)) 80%,#fff))}.level-progress-fill.animated{animation:level-shimmer 2s linear infinite;background-size:200% 100%}@keyframes level-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.level-progress-text{color:#fff;font-size:10px;font-weight:600;left:50%;position:absolute;text-shadow:0 1px 2px rgba(0,0,0,.3);top:50%;transform:translate(-50%,-50%)}.level-progress-stats{display:flex;justify-content:space-between;margin-top:12px}.level-stat{text-align:center}.level-stat-label{color:var(--level-text-muted);display:block;font-size:12px}.level-stat-value{color:var(--level-text);display:block;font-size:16px;font-weight:600}.level-card{background:var(--level-bg);border-radius:var(--level-radius-lg);box-shadow:var(--level-shadow);overflow:hidden}.level-card-header{align-items:center;background:linear-gradient(135deg,var(--level-primary-light),var(--level-bg));display:flex;gap:20px;padding:24px}.level-card-title h3{color:var(--level-text);font-size:20px;margin:0 0 4px}.level-card-title p{color:var(--level-text-secondary);font-size:14px;margin:0}.level-card-progress{border-bottom:1px solid var(--level-border);padding:24px}.level-card-privileges{border-bottom:1px solid var(--level-border);padding:20px 24px}.level-privileges-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:12px}.level-privileges-header h4{color:var(--level-text);font-size:14px;font-weight:600;margin:0}.level-link-btn{background:none;border:none;color:var(--level-primary);cursor:pointer;font-size:13px;padding:0}.level-link-btn:hover{text-decoration:underline}.level-privileges-list{display:flex;flex-wrap:wrap;gap:8px}.level-privilege-item{align-items:center;background:var(--level-bg-secondary);border-radius:20px;color:var(--level-text-secondary);display:flex;font-size:13px;gap:6px;padding:6px 12px}.level-privilege-icon{font-size:14px}.level-card-actions{display:flex;gap:12px;padding:20px 24px}.level-btn{border:none;border-radius:var(--level-radius);cursor:pointer;flex:1;font-size:14px;font-weight:500;padding:12px 20px;transition:var(--level-transition)}.level-btn-primary{background:var(--level-primary);color:#fff}.level-btn-primary:hover{background:var(--level-primary-hover)}.level-btn-outline{background:transparent;border:1px solid var(--level-border);color:var(--level-text-secondary)}.level-btn-outline:hover{border-color:var(--level-primary);color:var(--level-primary)}.level-leaderboard{background:var(--level-bg);border-radius:var(--level-radius-lg);box-shadow:var(--level-shadow);overflow:hidden}.level-leaderboard-header{align-items:center;border-bottom:1px solid var(--level-border);display:flex;justify-content:space-between;padding:20px 24px}.level-leaderboard-header h3{font-size:16px;font-weight:600;margin:0}.level-time-tabs{background:var(--level-bg-secondary);border-radius:6px;display:flex;gap:4px;padding:4px}.level-time-tabs button{background:transparent;border:none;border-radius:4px;color:var(--level-text-secondary);cursor:pointer;font-size:12px;padding:6px 12px;transition:var(--level-transition)}.level-time-tabs button.active{background:var(--level-bg);box-shadow:var(--level-shadow);color:var(--level-primary);font-weight:500}.level-my-rank{align-items:center;background:var(--level-primary-light);border-bottom:1px solid var(--level-border);display:flex;gap:12px;padding:16px 24px}.level-my-rank-label{color:var(--level-text-secondary);font-size:14px}.level-my-rank-value{color:var(--level-primary);font-size:24px;font-weight:700}.level-my-rank-info{color:var(--level-text-secondary);font-size:14px;margin-left:auto}.level-leaderboard-list{max-height:480px;overflow-y:auto}.level-leaderboard-item{align-items:center;border-bottom:1px solid var(--level-border);display:flex;gap:16px;padding:16px 24px;transition:var(--level-transition)}.level-leaderboard-item:hover{background:var(--level-bg-secondary)}.level-leaderboard-item.top-three{background:linear-gradient(90deg,var(--level-primary-light),transparent)}.level-rank{color:var(--level-text);font-size:18px;font-weight:700;text-align:center;width:40px}.level-user-info{align-items:center;display:flex;flex:1;gap:12px}.level-user-avatar{border-radius:50%;height:40px;object-fit:cover;width:40px}.level-user-avatar-placeholder{align-items:center;background:var(--level-primary-light);border-radius:50%;color:var(--level-primary);display:flex;font-weight:600;height:40px;justify-content:center;width:40px}.level-user-name{color:var(--level-text);font-weight:500}.level-exp{color:var(--level-primary);font-size:14px;font-weight:600}.level-privilege-list{padding:20px}.level-privilege-section{margin-bottom:24px}.level-privilege-section:last-child{margin-bottom:0}.level-privilege-section-title{color:var(--level-text-secondary);font-size:14px;font-weight:600;margin:0 0 16px}.level-privilege-grid{display:flex;flex-direction:column;gap:12px}.level-privilege{align-items:center;background:var(--level-bg);border:1px solid var(--level-border);border-radius:var(--level-radius);cursor:pointer;display:flex;gap:16px;padding:16px;transition:var(--level-transition)}.level-privilege:hover{box-shadow:var(--level-shadow)}.level-privilege.unlocked{border-left:3px solid var(--level-success)}.level-privilege.locked{opacity:.7}.level-privilege-icon-wrapper{align-items:center;background:var(--level-bg-secondary);border-radius:var(--level-radius);display:flex;height:48px;justify-content:center;position:relative;width:48px}.level-privilege-icon,.level-privilege-icon-default{font-size:24px}.level-privilege-lock{bottom:-4px;font-size:14px;position:absolute;right:-4px}.level-privilege-content{flex:1}.level-privilege-name{color:var(--level-text);font-size:15px;font-weight:500;margin:0 0 4px}.level-privilege-desc{color:var(--level-text-secondary);font-size:13px;margin:0}.level-privilege-unlock{color:var(--level-primary);display:inline-block;font-size:12px;margin-top:6px}.level-status-tag{border-radius:20px;font-size:12px;font-weight:500;padding:4px 10px}.tag-unlocked{background:color-mix(in srgb,var(--level-success) 20%,transparent);color:var(--level-success)}.tag-locked{background:var(--level-bg-secondary);color:var(--level-text-muted)}.level-loading-spinner{animation:level-spin .8s linear infinite;border:3px solid var(--level-border);border-radius:50%;border-top-color:var(--level-primary);height:32px;width:32px}@keyframes level-spin{to{transform:rotate(1turn)}}.level-card-loading,.level-leaderboard-empty,.level-leaderboard-loading,.level-privilege-empty{align-items:center;color:var(--level-text-muted);display:flex;flex-direction:column;gap:12px;justify-content:center;padding:48px}.level-empty-icon{font-size:40px}@media (max-width:768px){.level-card-header{flex-direction:column;text-align:center}.level-progress-stats{flex-wrap:wrap;gap:16px}.level-stat{flex:1;min-width:80px}.level-leaderboard-header{align-items:flex-start;flex-direction:column;gap:12px}.level-my-rank{flex-wrap:wrap}}
|
package/package.json
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@quantabit/level-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "QuantaBit Level System SDK - User levels, experience points, and privilege management",
|
|
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": "./dist/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
|
+
"react": ">=17.0.0",
|
|
33
|
+
"react-dom": ">=17.0.0"
|
|
34
|
+
},
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@babel/core": "^7.23.0",
|
|
37
|
+
"@babel/preset-react": "^7.23.0",
|
|
38
|
+
"@rollup/plugin-babel": "^6.0.0",
|
|
39
|
+
"@rollup/plugin-commonjs": "^25.0.0",
|
|
40
|
+
"@rollup/plugin-node-resolve": "^15.0.0",
|
|
41
|
+
"rollup": "^4.0.0",
|
|
42
|
+
"rollup-plugin-postcss": "^4.0.0"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"level",
|
|
46
|
+
"experience",
|
|
47
|
+
"rank",
|
|
48
|
+
"gamification",
|
|
49
|
+
"quantabit"
|
|
50
|
+
],
|
|
51
|
+
"author": "QuantaBit Team",
|
|
52
|
+
"license": "MIT",
|
|
53
|
+
"publishConfig": {
|
|
54
|
+
"access": "public",
|
|
55
|
+
"registry": "https://registry.npmjs.org"
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@quantabit/sdk-config": "^1.0.6"
|
|
59
|
+
},
|
|
60
|
+
"repository": {
|
|
61
|
+
"type": "git",
|
|
62
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk.git",
|
|
63
|
+
"directory": "packages/level-sdk"
|
|
64
|
+
},
|
|
65
|
+
"homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/level-sdk#readme",
|
|
66
|
+
"bugs": {
|
|
67
|
+
"url": "https://github.com/quantabit-chain/qbit-sdk/issues"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=18.0.0"
|
|
71
|
+
},
|
|
72
|
+
"sideEffects": [
|
|
73
|
+
"*.css"
|
|
74
|
+
],
|
|
75
|
+
"qbit": {
|
|
76
|
+
"privacy": {
|
|
77
|
+
"level": "functional",
|
|
78
|
+
"dataCollection": "Feature-related data for personalization. Requires user consent.",
|
|
79
|
+
"gdprCompliant": true,
|
|
80
|
+
"ccpaCompliant": true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
package/types/index.d.ts
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @quantabit/level-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 LevelProviderProps {
|
|
12
|
+
children: ReactNode;
|
|
13
|
+
apiUrl?: string;
|
|
14
|
+
token?: string;
|
|
15
|
+
language?: string;
|
|
16
|
+
onError?: (error: Error) => void;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export declare const LevelProvider: FC<LevelProviderProps>;
|
|
20
|
+
|
|
21
|
+
// ============ Components ============
|
|
22
|
+
|
|
23
|
+
export interface LevelBadgeProps {
|
|
24
|
+
className?: string;
|
|
25
|
+
style?: React.CSSProperties;
|
|
26
|
+
[key: string]: any;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export declare const LevelBadge: FC<LevelBadgeProps>;
|
|
30
|
+
|
|
31
|
+
export interface LevelProgressProps {
|
|
32
|
+
className?: string;
|
|
33
|
+
style?: React.CSSProperties;
|
|
34
|
+
[key: string]: any;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export declare const LevelProgress: FC<LevelProgressProps>;
|
|
38
|
+
|
|
39
|
+
export interface LevelCardProps {
|
|
40
|
+
className?: string;
|
|
41
|
+
style?: React.CSSProperties;
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export declare const LevelCard: FC<LevelCardProps>;
|
|
46
|
+
|
|
47
|
+
export interface LeaderboardProps {
|
|
48
|
+
className?: string;
|
|
49
|
+
style?: React.CSSProperties;
|
|
50
|
+
[key: string]: any;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export declare const Leaderboard: FC<LeaderboardProps>;
|
|
54
|
+
|
|
55
|
+
export interface PrivilegeListProps {
|
|
56
|
+
className?: string;
|
|
57
|
+
style?: React.CSSProperties;
|
|
58
|
+
[key: string]: any;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export declare const PrivilegeList: FC<PrivilegeListProps>;
|
|
62
|
+
|
|
63
|
+
// ============ Hooks ============
|
|
64
|
+
|
|
65
|
+
export interface UseLevelReturn {
|
|
66
|
+
data: any;
|
|
67
|
+
loading: boolean;
|
|
68
|
+
error: string | null;
|
|
69
|
+
[key: string]: any;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export declare function useLevel(...args: any[]): UseLevelReturn;
|
|
73
|
+
|
|
74
|
+
export interface UseExpHistoryReturn {
|
|
75
|
+
data: any;
|
|
76
|
+
loading: boolean;
|
|
77
|
+
error: string | null;
|
|
78
|
+
[key: string]: any;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export declare function useExpHistory(...args: any[]): UseExpHistoryReturn;
|
|
82
|
+
|
|
83
|
+
export interface UseLeaderboardReturn {
|
|
84
|
+
data: any;
|
|
85
|
+
loading: boolean;
|
|
86
|
+
error: string | null;
|
|
87
|
+
[key: string]: any;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export declare function useLeaderboard(...args: any[]): UseLeaderboardReturn;
|
|
91
|
+
|
|
92
|
+
// ============ Services ============
|
|
93
|
+
|
|
94
|
+
export declare const levelApi: any;
|
|
95
|
+
|
|
96
|
+
export declare class LevelApiClient {
|
|
97
|
+
constructor(config?: Record<string, any>);
|
|
98
|
+
setToken(token: string): void;
|
|
99
|
+
setBaseUrl(url: string): void;
|
|
100
|
+
destroy(): void;
|
|
101
|
+
}
|
|
102
|
+
|