@taskon/widget-react 0.0.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +1065 -0
  2. package/dist/CommunityTaskList.css +4893 -0
  3. package/dist/EligibilityInfo.css +2337 -0
  4. package/dist/LeaderboardWidget.css +815 -0
  5. package/dist/PageBuilder.css +54 -0
  6. package/dist/Quest.css +4214 -0
  7. package/dist/TaskOnProvider.css +163 -0
  8. package/dist/TipPopover.css +210 -0
  9. package/dist/UserCenterWidget.css +297 -0
  10. package/dist/UserCenterWidget2.css +3519 -0
  11. package/dist/WidgetShell.css +182 -0
  12. package/dist/chunks/CommunityTaskList-DoPGZsw1.js +6813 -0
  13. package/dist/chunks/EligibilityInfo-C7GZ2G5u.js +22228 -0
  14. package/dist/chunks/LeaderboardWidget-CmYfDeHV.js +1068 -0
  15. package/dist/chunks/PageBuilder-Tmhf2GTS.js +150 -0
  16. package/dist/chunks/Quest-DKFZ-pPU.js +8839 -0
  17. package/dist/chunks/TaskOnProvider-BD6Vp2x8.js +1435 -0
  18. package/dist/chunks/ThemeProvider-wnSXrNQb.js +1118 -0
  19. package/dist/chunks/TipPopover-BrW8jo71.js +2926 -0
  20. package/dist/chunks/UserCenterWidget-BE329iS7.js +3546 -0
  21. package/dist/chunks/UserCenterWidget-BVw_IEEd.js +3989 -0
  22. package/dist/chunks/WidgetShell-D_5OjvNZ.js +1517 -0
  23. package/dist/chunks/common-ja-DWhTaFHb.js +23 -0
  24. package/dist/chunks/common-ko-80ezXsMG.js +23 -0
  25. package/dist/chunks/dynamic-import-helper-DxEFwm31.js +537 -0
  26. package/dist/chunks/index-CwMvO_wZ.js +777 -0
  27. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +119 -0
  28. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +119 -0
  29. package/dist/chunks/useToast-B-wyO5zL.js +93 -0
  30. package/dist/chunks/useWidgetLocale-JDelxtt8.js +74 -0
  31. package/dist/chunks/usercenter-ja-uu-XfVF9.js +332 -0
  32. package/dist/chunks/usercenter-ko-DYgUOVzd.js +332 -0
  33. package/dist/community-task.d.ts +451 -0
  34. package/dist/community-task.js +9 -0
  35. package/dist/core.d.ts +803 -0
  36. package/dist/core.js +22 -0
  37. package/dist/dynamic-import-helper.css +389 -0
  38. package/dist/index.d.ts +1660 -0
  39. package/dist/index.js +41 -0
  40. package/dist/leaderboard.d.ts +547 -0
  41. package/dist/leaderboard.js +18 -0
  42. package/dist/page-builder.d.ts +20 -0
  43. package/dist/page-builder.js +4 -0
  44. package/dist/quest.d.ts +400 -0
  45. package/dist/quest.js +8 -0
  46. package/dist/user-center.d.ts +1780 -0
  47. package/dist/user-center.js +713 -0
  48. package/package.json +105 -0
@@ -0,0 +1,119 @@
1
+ const tabAllTime = "全期間";
2
+ const tabQuest = "クエスト";
3
+ const tabEvent = "イベント";
4
+ const tabSprint = "スプリント";
5
+ const columnRank = "ランク";
6
+ const columnPosition = "順位";
7
+ const columnUser = "ユーザー";
8
+ const columnTasks = "タスク";
9
+ const columnInvitedUsers = "招待ユーザー";
10
+ const columnCurrentTier = "現在のティア";
11
+ const columnPoints = "ポイント";
12
+ const columnRewards = "報酬";
13
+ const statusOngoing = "進行中";
14
+ const statusEnded = "終了";
15
+ const statusUpcoming = "開始前";
16
+ const participants = "参加者";
17
+ const prizePool = "賞金プール";
18
+ const totalWinners = "総受賞者数";
19
+ const rewardRules = "報酬ルール";
20
+ const rewardRulesTitle = "報酬ルール";
21
+ const rewardRulesDesc = "報酬はリーダーボードのランキングに基づいて付与されます。ランキングはイベント中にユーザーが獲得した{pointsName}によって決定されます。";
22
+ const eventPeriod = "イベント期間";
23
+ const rewardDetails = "報酬詳細";
24
+ const eachReceives = "各自が{amount}を受け取ります";
25
+ const randomlySplit = "{amount}をランダムに分配";
26
+ const emptyTitle = "ランキングがありません";
27
+ const emptyDesc = "最初に参加してトップを目指しましょう!";
28
+ const page = "ページ";
29
+ const of = "/";
30
+ const previous = "前へ";
31
+ const next = "次へ";
32
+ const loading = "読み込み中...";
33
+ const error = "リーダーボードの読み込みに失敗しました";
34
+ const retry = "再試行";
35
+ const you = "あなた";
36
+ const unranked = "ランク外";
37
+ const na = "N/A";
38
+ const noData = "-";
39
+ const ja = {
40
+ tabAllTime,
41
+ tabQuest,
42
+ tabEvent,
43
+ tabSprint,
44
+ columnRank,
45
+ columnPosition,
46
+ columnUser,
47
+ columnTasks,
48
+ columnInvitedUsers,
49
+ columnCurrentTier,
50
+ columnPoints,
51
+ columnRewards,
52
+ statusOngoing,
53
+ statusEnded,
54
+ statusUpcoming,
55
+ participants,
56
+ prizePool,
57
+ totalWinners,
58
+ rewardRules,
59
+ rewardRulesTitle,
60
+ rewardRulesDesc,
61
+ eventPeriod,
62
+ rewardDetails,
63
+ eachReceives,
64
+ randomlySplit,
65
+ emptyTitle,
66
+ emptyDesc,
67
+ page,
68
+ of,
69
+ previous,
70
+ next,
71
+ loading,
72
+ error,
73
+ retry,
74
+ you,
75
+ unranked,
76
+ na,
77
+ noData
78
+ };
79
+ export {
80
+ columnCurrentTier,
81
+ columnInvitedUsers,
82
+ columnPoints,
83
+ columnPosition,
84
+ columnRank,
85
+ columnRewards,
86
+ columnTasks,
87
+ columnUser,
88
+ ja as default,
89
+ eachReceives,
90
+ emptyDesc,
91
+ emptyTitle,
92
+ error,
93
+ eventPeriod,
94
+ loading,
95
+ na,
96
+ next,
97
+ noData,
98
+ of,
99
+ page,
100
+ participants,
101
+ previous,
102
+ prizePool,
103
+ randomlySplit,
104
+ retry,
105
+ rewardDetails,
106
+ rewardRules,
107
+ rewardRulesDesc,
108
+ rewardRulesTitle,
109
+ statusEnded,
110
+ statusOngoing,
111
+ statusUpcoming,
112
+ tabAllTime,
113
+ tabEvent,
114
+ tabQuest,
115
+ tabSprint,
116
+ totalWinners,
117
+ unranked,
118
+ you
119
+ };
@@ -0,0 +1,119 @@
1
+ const tabAllTime = "전체 기간";
2
+ const tabQuest = "퀘스트";
3
+ const tabEvent = "이벤트";
4
+ const tabSprint = "스프린트";
5
+ const columnRank = "순위";
6
+ const columnPosition = "순위";
7
+ const columnUser = "사용자";
8
+ const columnTasks = "태스크";
9
+ const columnInvitedUsers = "초대된 사용자";
10
+ const columnCurrentTier = "현재 티어";
11
+ const columnPoints = "포인트";
12
+ const columnRewards = "보상";
13
+ const statusOngoing = "진행 중";
14
+ const statusEnded = "종료됨";
15
+ const statusUpcoming = "예정";
16
+ const participants = "참가자";
17
+ const prizePool = "상금 풀";
18
+ const totalWinners = "총 수상자";
19
+ const rewardRules = "보상 규칙";
20
+ const rewardRulesTitle = "보상 규칙";
21
+ const rewardRulesDesc = "보상은 리더보드 순위에 따라 지급되며, 순위는 이벤트 기간 동안 사용자가 획득한 {pointsName}에 의해 결정됩니다.";
22
+ const eventPeriod = "이벤트 기간";
23
+ const rewardDetails = "보상 상세";
24
+ const eachReceives = "각각 {amount} 지급";
25
+ const randomlySplit = "{amount} 무작위 분배";
26
+ const emptyTitle = "순위가 없습니다";
27
+ const emptyDesc = "첫 번째로 참여하여 1위를 차지하세요!";
28
+ const page = "페이지";
29
+ const of = "/";
30
+ const previous = "이전";
31
+ const next = "다음";
32
+ const loading = "로딩 중...";
33
+ const error = "리더보드를 불러오지 못했습니다";
34
+ const retry = "다시 시도";
35
+ const you = "나";
36
+ const unranked = "순위 없음";
37
+ const na = "N/A";
38
+ const noData = "-";
39
+ const ko = {
40
+ tabAllTime,
41
+ tabQuest,
42
+ tabEvent,
43
+ tabSprint,
44
+ columnRank,
45
+ columnPosition,
46
+ columnUser,
47
+ columnTasks,
48
+ columnInvitedUsers,
49
+ columnCurrentTier,
50
+ columnPoints,
51
+ columnRewards,
52
+ statusOngoing,
53
+ statusEnded,
54
+ statusUpcoming,
55
+ participants,
56
+ prizePool,
57
+ totalWinners,
58
+ rewardRules,
59
+ rewardRulesTitle,
60
+ rewardRulesDesc,
61
+ eventPeriod,
62
+ rewardDetails,
63
+ eachReceives,
64
+ randomlySplit,
65
+ emptyTitle,
66
+ emptyDesc,
67
+ page,
68
+ of,
69
+ previous,
70
+ next,
71
+ loading,
72
+ error,
73
+ retry,
74
+ you,
75
+ unranked,
76
+ na,
77
+ noData
78
+ };
79
+ export {
80
+ columnCurrentTier,
81
+ columnInvitedUsers,
82
+ columnPoints,
83
+ columnPosition,
84
+ columnRank,
85
+ columnRewards,
86
+ columnTasks,
87
+ columnUser,
88
+ ko as default,
89
+ eachReceives,
90
+ emptyDesc,
91
+ emptyTitle,
92
+ error,
93
+ eventPeriod,
94
+ loading,
95
+ na,
96
+ next,
97
+ noData,
98
+ of,
99
+ page,
100
+ participants,
101
+ previous,
102
+ prizePool,
103
+ randomlySplit,
104
+ retry,
105
+ rewardDetails,
106
+ rewardRules,
107
+ rewardRulesDesc,
108
+ rewardRulesTitle,
109
+ statusEnded,
110
+ statusOngoing,
111
+ statusUpcoming,
112
+ tabAllTime,
113
+ tabEvent,
114
+ tabQuest,
115
+ tabSprint,
116
+ totalWinners,
117
+ unranked,
118
+ you
119
+ };
@@ -0,0 +1,93 @@
1
+ import { useContext, createContext, useMemo, useState, useCallback } from "react";
2
+ const defaultWalletContext = {
3
+ // EVM state
4
+ evmAdapter: null,
5
+ evmAddress: null,
6
+ evmChainId: null,
7
+ isEvmConnected: false,
8
+ // Detection status
9
+ isDetecting: true,
10
+ // Actions (no-op by default)
11
+ connectEvm: async () => null,
12
+ disconnectEvm: async () => {
13
+ },
14
+ signEvmMessage: async () => null
15
+ };
16
+ const WalletContext = createContext(defaultWalletContext);
17
+ function useWallet() {
18
+ const context = useContext(WalletContext);
19
+ return context;
20
+ }
21
+ function useEvmWallet() {
22
+ const context = useWallet();
23
+ return useMemo(
24
+ () => ({
25
+ adapter: context.evmAdapter,
26
+ address: context.evmAddress,
27
+ chainId: context.evmChainId,
28
+ isConnected: context.isEvmConnected,
29
+ connect: context.connectEvm,
30
+ disconnect: context.disconnectEvm,
31
+ signMessage: context.signEvmMessage
32
+ }),
33
+ [
34
+ context.evmAdapter,
35
+ context.evmAddress,
36
+ context.evmChainId,
37
+ context.isEvmConnected,
38
+ context.connectEvm,
39
+ context.disconnectEvm,
40
+ context.signEvmMessage
41
+ ]
42
+ );
43
+ }
44
+ const ToastContext = createContext(null);
45
+ function useToast() {
46
+ const context = useContext(ToastContext);
47
+ if (!context) {
48
+ throw new Error("useToast must be used within TaskOnProvider");
49
+ }
50
+ return context;
51
+ }
52
+ let toastId = 0;
53
+ function generateId() {
54
+ return `toast-${++toastId}-${Date.now()}`;
55
+ }
56
+ function useToastState() {
57
+ const [toasts, setToasts] = useState([]);
58
+ const showToast = useCallback(
59
+ (message, type = "info", duration) => {
60
+ const newToast = {
61
+ id: generateId(),
62
+ message,
63
+ type,
64
+ duration
65
+ };
66
+ setToasts((prev) => [...prev, newToast]);
67
+ },
68
+ []
69
+ );
70
+ const removeToast = useCallback((id) => {
71
+ setToasts((prev) => prev.filter((t) => t.id !== id));
72
+ }, []);
73
+ const toast = {
74
+ success: (message, duration) => showToast(message, "success", duration),
75
+ error: (message, duration) => showToast(message, "error", duration),
76
+ warning: (message, duration) => showToast(message, "warning", duration),
77
+ info: (message, duration) => showToast(message, "info", duration)
78
+ };
79
+ return {
80
+ toasts,
81
+ showToast,
82
+ removeToast,
83
+ toast
84
+ };
85
+ }
86
+ export {
87
+ ToastContext as T,
88
+ WalletContext as W,
89
+ useEvmWallet as a,
90
+ useToast as b,
91
+ useToastState as c,
92
+ useWallet as u
93
+ };
@@ -0,0 +1,74 @@
1
+ import { useState, useRef, useEffect } from "react";
2
+ import { b as useTaskOnContext } from "./ThemeProvider-wnSXrNQb.js";
3
+ function isSupportedLocale(locale) {
4
+ return locale === "en" || locale === "ko" || locale === "ja";
5
+ }
6
+ function warnUnsupportedLocale(locale, widgetId) {
7
+ if (process.env.NODE_ENV !== "production" && !isSupportedLocale(locale)) {
8
+ console.warn(
9
+ `[widget-react] Locale "${locale}" is not fully supported in ${widgetId}. Falling back to English. Supported locales: en, ko, ja`
10
+ );
11
+ }
12
+ }
13
+ const localeCache = /* @__PURE__ */ new Map();
14
+ const DEFAULT_LOCALE = "en";
15
+ function useWidgetLocale(options) {
16
+ const { widgetId, defaultMessages, loadMessages } = options;
17
+ const { locale } = useTaskOnContext();
18
+ const getInitialState = () => {
19
+ if (locale === DEFAULT_LOCALE) {
20
+ return { messages: defaultMessages, isLoading: false };
21
+ }
22
+ const cacheKey = `${widgetId}-${locale}`;
23
+ if (localeCache.has(cacheKey)) {
24
+ return { messages: localeCache.get(cacheKey), isLoading: false };
25
+ }
26
+ return { messages: defaultMessages, isLoading: true };
27
+ };
28
+ const [state, setState] = useState(getInitialState);
29
+ const loadMessagesRef = useRef(loadMessages);
30
+ loadMessagesRef.current = loadMessages;
31
+ const defaultMessagesRef = useRef(defaultMessages);
32
+ defaultMessagesRef.current = defaultMessages;
33
+ useEffect(() => {
34
+ if (locale === DEFAULT_LOCALE) {
35
+ setState({ messages: defaultMessagesRef.current, isLoading: false });
36
+ return;
37
+ }
38
+ warnUnsupportedLocale(locale, widgetId);
39
+ const cacheKey = `${widgetId}-${locale}`;
40
+ if (localeCache.has(cacheKey)) {
41
+ setState({ messages: localeCache.get(cacheKey), isLoading: false });
42
+ return;
43
+ }
44
+ let isMounted = true;
45
+ setState((prev) => ({ ...prev, isLoading: true }));
46
+ loadMessagesRef.current(locale).then((module) => {
47
+ if (isMounted) {
48
+ const loadedMessages = module.default;
49
+ localeCache.set(cacheKey, loadedMessages);
50
+ setState({ messages: loadedMessages, isLoading: false });
51
+ }
52
+ }).catch((error) => {
53
+ console.warn(
54
+ `[widget-react] Failed to load locale "${locale}" for ${widgetId}, falling back to English:`,
55
+ error
56
+ );
57
+ if (isMounted) {
58
+ setState({ messages: defaultMessagesRef.current, isLoading: false });
59
+ }
60
+ });
61
+ return () => {
62
+ isMounted = false;
63
+ };
64
+ }, [locale, widgetId]);
65
+ return state;
66
+ }
67
+ function clearLocaleCache() {
68
+ localeCache.clear();
69
+ }
70
+ export {
71
+ clearLocaleCache as c,
72
+ isSupportedLocale as i,
73
+ useWidgetLocale as u
74
+ };