UNPKG

questro

Version:

A lightweight, modular gamification library for React with unique visual components. Features combo meters, daily challenges, achievement toasts, and progress rings. Add points, badges, quests, leaderboards, levels/XP, streaks, and notifications with zero

133 lines (125 loc) 4.64 kB
import * as react_jsx_runtime from 'react/jsx-runtime'; import React from 'react'; import { S as StorageAdapter } from '../types-B4P_iNGe.js'; type LevelFormula = 'linear' | 'exponential' | 'fibonacci' | 'rpg' | 'custom'; type LevelConfig = { userId: string; formula?: LevelFormula; baseXP?: number; scalingFactor?: number; maxLevel?: number; customFormula?: (level: number) => number; onLevelUp?: (event: LevelUpEvent) => void; onXPGain?: (amount: number, totalXP: number) => void; }; type LevelData = { level: number; currentXP: number; totalXP: number; xpForCurrentLevel: number; xpForNextLevel: number; xpToLevelUp: number; progress: number; }; type LevelUpEvent = { previousLevel: number; newLevel: number; totalXP: number; timestamp: number; rewards?: { badge?: string; currency?: Record<string, number>; items?: string[]; }; }; type XPTransaction = { id: string; amount: number; balance: number; reason?: string; timestamp: number; levelBefore: number; levelAfter: number; }; type LevelsState = { userId: string; totalXP: number; level: number; levelHistory: LevelUpEvent[]; xpHistory: XPTransaction[]; lastUpdated: number; }; type LevelsContextValue = { levelData: LevelData; xpHistory: XPTransaction[]; levelHistory: LevelUpEvent[]; addXP: (amount: number, reason?: string) => void; removeXP: (amount: number, reason?: string) => void; setLevel: (level: number) => void; reset: () => void; getXPForLevel: (level: number) => number; getLevelFromXP: (xp: number) => number; }; type LevelsProviderProps = { children: React.ReactNode; config: LevelConfig; storage?: StorageAdapter<LevelsState>; }; declare function LevelsProvider({ children, config, storage }: LevelsProviderProps): react_jsx_runtime.JSX.Element | null; declare function useLevels(): LevelsContextValue; declare class LevelsService { private state; private config; private listeners; constructor(config: LevelConfig, initialState?: LevelsState); private createInitialState; getLevelData(): LevelData; addXP(amount: number, reason?: string): XPTransaction; removeXP(amount: number, reason?: string): XPTransaction; setLevel(level: number): void; reset(): void; getXPForLevel(level: number): number; getLevelFromXP(xp: number): number; getState(): LevelsState; getXPHistory(): XPTransaction[]; getLevelHistory(): LevelUpEvent[]; subscribe(listener: () => void): () => void; private handleLevelUp; private notifyListeners; } declare const XP_FORMULAS: Record<Exclude<LevelFormula, 'custom'>, (level: number, baseXP: number, scalingFactor: number) => number>; declare function calculateXPForLevel(level: number, formula: LevelFormula, baseXP?: number, scalingFactor?: number, customFormula?: (level: number) => number): number; declare function calculateLevelFromXP(totalXP: number, formula: LevelFormula, baseXP?: number, scalingFactor?: number, customFormula?: (level: number) => number, maxLevel?: number): number; declare function calculateLevelProgress(totalXP: number, currentLevel: number, formula: LevelFormula, baseXP?: number, scalingFactor?: number, customFormula?: (level: number) => number): { currentXP: number; xpToLevelUp: number; progress: number; }; type LevelDisplayProps = { showXP?: boolean; showPercentage?: boolean; className?: string; children?: (data: { level: number; currentXP: number; xpToLevelUp: number; progress: number; }) => React.ReactNode; }; declare function LevelDisplay({ showXP, showPercentage, className, children, }: LevelDisplayProps): react_jsx_runtime.JSX.Element; type XPBarProps = { height?: string; showPercentage?: boolean; showXP?: boolean; animated?: boolean; className?: string; fillClassName?: string; children?: (data: { progress: number; currentXP: number; xpToLevelUp: number; level: number; }) => React.ReactNode; }; declare function XPBar({ height, showPercentage, showXP, animated, className, fillClassName, children, }: XPBarProps): react_jsx_runtime.JSX.Element; export { type LevelConfig, type LevelData, LevelDisplay, type LevelDisplayProps, type LevelFormula, type LevelUpEvent, LevelsProvider, type LevelsProviderProps, LevelsService, type LevelsState, XPBar, type XPBarProps, type XPTransaction, XP_FORMULAS, calculateLevelFromXP, calculateLevelProgress, calculateXPForLevel, useLevels };