@taskon/widget-react 0.0.1-beta.4 → 0.0.1-beta.6

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 (58) hide show
  1. package/README.md +13 -4
  2. package/dist/CommunityTaskList.css +119 -111
  3. package/dist/EligibilityInfo.css +114 -110
  4. package/dist/LeaderboardWidget.css +73 -71
  5. package/dist/PageBuilder.css +5 -0
  6. package/dist/Quest.css +259 -255
  7. package/dist/TaskOnProvider.css +2 -0
  8. package/dist/UserCenterWidget.css +6 -6
  9. package/dist/UserCenterWidget2.css +1626 -1601
  10. package/dist/{dynamic-import-helper.css → WidgetShell.css} +2 -2
  11. package/dist/chunks/{CommunityTaskList-C9Gv8KOF.js → CommunityTaskList-Hde2OKHH.js} +1070 -580
  12. package/dist/chunks/{EligibilityInfo-D-Fuy9GE.js → EligibilityInfo-BV0Z2TgY.js} +1972 -1028
  13. package/dist/chunks/{LeaderboardWidget-BV2D2q1N.js → LeaderboardWidget-BNGRD5Bu.js} +270 -249
  14. package/dist/chunks/{PageBuilder-DQoU4Mwf.js → PageBuilder-C5DSHiW9.js} +5 -5
  15. package/dist/chunks/{Quest-B5NyVr3o.js → Quest-DG9zfXJo.js} +723 -513
  16. package/dist/chunks/{TaskOnProvider-93UxARFo.js → TaskOnProvider-BhamHIyY.js} +98 -68
  17. package/dist/chunks/{ThemeProvider-CPI_roeh.js → ThemeProvider-mXLdLSkq.js} +107 -20
  18. package/dist/chunks/{UserCenterWidget-cADBSVg7.js → UserCenterWidget-D5ttw4hO.js} +1328 -1337
  19. package/dist/chunks/{UserCenterWidget-BRtigY_S.js → UserCenterWidget-jDO5zTN1.js} +358 -254
  20. package/dist/chunks/{dynamic-import-helper-DwXlQC0S.js → WidgetShell-D7yC894Y.js} +447 -457
  21. package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
  22. package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
  23. package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
  24. package/dist/chunks/communitytask-ru-CZm2CPoV.js +521 -0
  25. package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
  26. package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
  27. package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
  28. package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
  29. package/dist/chunks/quest-es-Dyyy0zaw.js +863 -0
  30. package/dist/chunks/quest-ja-Depog33y.js +863 -0
  31. package/dist/chunks/quest-ko-BMu3uRQJ.js +863 -0
  32. package/dist/chunks/quest-ru-xne814Rw.js +863 -0
  33. package/dist/chunks/taskwidget-es-Do9b3Mqw.js +245 -0
  34. package/dist/chunks/taskwidget-ja-CqSu-yWA.js +245 -0
  35. package/dist/chunks/taskwidget-ko-EHgXFV4B.js +245 -0
  36. package/dist/chunks/taskwidget-ru-CMbLQDK4.js +245 -0
  37. package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
  38. package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
  39. package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
  40. package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
  41. package/dist/community-task.d.ts +0 -390
  42. package/dist/community-task.js +2 -7
  43. package/dist/core.d.ts +46 -10
  44. package/dist/core.js +11 -11
  45. package/dist/index.d.ts +46 -667
  46. package/dist/index.js +19 -28
  47. package/dist/leaderboard.d.ts +0 -498
  48. package/dist/leaderboard.js +2 -16
  49. package/dist/page-builder.js +1 -1
  50. package/dist/quest.d.ts +0 -289
  51. package/dist/quest.js +2 -5
  52. package/dist/user-center.d.ts +0 -1608
  53. package/dist/user-center.js +2 -494
  54. package/package.json +5 -2
  55. package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
  56. package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
  57. package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
  58. package/dist/chunks/usercenter-ko-xAEYxqLg.js +0 -326
@@ -1,7 +1,7 @@
1
+ import { p as preloadWidgetLocale, b as useWidgetLocale, e as createLocaleLoader, j as createContextScope, k as useComposedRefs, l as createSlot, P as Primitive, B as Branch, m as useControllableState, n as Presence, o as composeEventHandlers, q as useCallbackRef, R as Root, r as Portal, s as useLayoutEffect2, t as dispatchDiscreteCustomEvent, v as TaskOnContext } from "./ThemeProvider-mXLdLSkq.js";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
1
3
  import * as React from "react";
2
4
  import React__default, { useState, useRef, useEffect, useMemo, useCallback } from "react";
3
- import { b as useWidgetLocale, e as createContextScope, f as useComposedRefs, g as createSlot, P as Primitive, B as Branch, h as useControllableState, j as Presence, k as composeEventHandlers, l as useCallbackRef, R as Root, m as Portal, n as dispatchDiscreteCustomEvent, o as useLayoutEffect2, p as TaskOnContext } from "./ThemeProvider-CPI_roeh.js";
4
- import { jsx, jsxs, Fragment } from "react/jsx-runtime";
5
5
  import { createTaskOnClient, createUserApi, createChainApi, createCommunityTaskApi } from "@taskon/core";
6
6
  import { c as createEthereumAdapter, W as WalletContext, b as useToastState, T as ToastContext } from "./useToast-CaRkylKe.js";
7
7
  import * as ReactDOM from "react-dom";
@@ -46,6 +46,7 @@ function useClientInit({
46
46
  const [client, setClient] = useState(null);
47
47
  const userApiRef = useRef(null);
48
48
  const [isInitializing, setIsInitializing] = useState(true);
49
+ const [isSessionReady, setIsSessionReady] = useState(false);
49
50
  const isInitializedRef = useRef(false);
50
51
  const configRef = useRef({ apiKey, baseURL });
51
52
  configRef.current = { apiKey, baseURL };
@@ -76,14 +77,17 @@ function useClientInit({
76
77
  userApiRef.current = userApi;
77
78
  const storedToken = getStoredToken();
78
79
  if (storedToken) {
80
+ taskOnClient.setUserToken(storedToken);
81
+ setIsSessionReady(true);
79
82
  try {
80
- taskOnClient.setUserToken(storedToken);
81
83
  const info = await userApi.getInfo();
82
84
  setUserInfo2(info);
83
85
  setUserToken2(storedToken);
84
86
  } catch {
85
87
  taskOnClient.setUserToken(null);
86
88
  }
89
+ } else {
90
+ setIsSessionReady(true);
87
91
  }
88
92
  } finally {
89
93
  setIsInitializing(false);
@@ -94,74 +98,103 @@ function useClientInit({
94
98
  return {
95
99
  client,
96
100
  userApiRef,
101
+ isSessionReady,
97
102
  isInitializing
98
103
  };
99
104
  }
100
- function interpolate(template, params) {
101
- if (!params) {
102
- return template;
105
+ const registry = /* @__PURE__ */ new Map();
106
+ const builtInLocaleImports = {
107
+ CommunityTask: {
108
+ ko: () => import("./communitytask-ko-Bf24PQKI.js").then((module) => ({
109
+ default: module.default
110
+ })),
111
+ ja: () => import("./communitytask-ja-GRf9cbdx.js").then((module) => ({
112
+ default: module.default
113
+ })),
114
+ ru: () => import("./communitytask-ru-CZm2CPoV.js").then((module) => ({
115
+ default: module.default
116
+ })),
117
+ es: () => import("./communitytask-es-CBNnS4o2.js").then((module) => ({
118
+ default: module.default
119
+ }))
120
+ },
121
+ Quest: {
122
+ ko: () => import("./quest-ko-BMu3uRQJ.js").then((module) => ({
123
+ default: module.default
124
+ })),
125
+ ja: () => import("./quest-ja-Depog33y.js").then((module) => ({
126
+ default: module.default
127
+ })),
128
+ ru: () => import("./quest-ru-xne814Rw.js").then((module) => ({
129
+ default: module.default
130
+ })),
131
+ es: () => import("./quest-es-Dyyy0zaw.js").then((module) => ({
132
+ default: module.default
133
+ }))
134
+ },
135
+ TaskWidget: {
136
+ ko: () => import("./taskwidget-ko-EHgXFV4B.js").then((module) => ({
137
+ default: module.default
138
+ })),
139
+ ja: () => import("./taskwidget-ja-CqSu-yWA.js").then((module) => ({
140
+ default: module.default
141
+ })),
142
+ ru: () => import("./taskwidget-ru-CMbLQDK4.js").then((module) => ({
143
+ default: module.default
144
+ })),
145
+ es: () => import("./taskwidget-es-Do9b3Mqw.js").then((module) => ({
146
+ default: module.default
147
+ }))
148
+ },
149
+ LeaderboardWidget: {
150
+ ko: () => import("./leaderboardwidget-ko-CG6SWgxf.js").then((module) => ({
151
+ default: module.default
152
+ })),
153
+ ja: () => import("./leaderboardwidget-ja-Q6u0HxKG.js").then((module) => ({
154
+ default: module.default
155
+ })),
156
+ ru: () => import("./leaderboardwidget-ru-DCcHcJGz.js").then((module) => ({
157
+ default: module.default
158
+ })),
159
+ es: () => import("./leaderboardwidget-es-vKjrjQaz.js").then((module) => ({
160
+ default: module.default
161
+ }))
162
+ },
163
+ UserCenterWidget: {
164
+ ko: () => import("./usercenter-ko-Dtpkn2qb.js").then((module) => ({
165
+ default: module.default
166
+ })),
167
+ ja: () => import("./usercenter-ja-CKE4DJC6.js").then((module) => ({
168
+ default: module.default
169
+ })),
170
+ ru: () => import("./usercenter-ru-DnBGee45.js").then((module) => ({
171
+ default: module.default
172
+ })),
173
+ es: () => import("./usercenter-es-Dz3Wp2vV.js").then((module) => ({
174
+ default: module.default
175
+ }))
103
176
  }
104
- return template.replace(/\{(\w+)\}/g, (match, key) => {
105
- const value = params[key];
106
- if (value === void 0) {
107
- return match;
108
- }
109
- return String(value);
110
- });
111
- }
112
- function createT(messages) {
113
- return (key, params) => {
114
- const template = messages[key];
115
- if (typeof template !== "string") {
116
- if (process.env.NODE_ENV !== "production") {
117
- console.warn(`[widget-react] Missing translation key: ${String(key)}`);
118
- }
119
- return String(key);
120
- }
121
- return interpolate(template, params);
122
- };
123
- }
124
- function createTFunction(messages) {
125
- return (key, params) => {
126
- const template = messages[key];
127
- if (typeof template !== "string") {
128
- if (process.env.NODE_ENV !== "production") {
129
- console.warn(`[widget-react] Missing translation key: ${String(key)}`);
130
- }
131
- return String(key);
132
- }
133
- return interpolate(template, params);
134
- };
135
- }
136
- function useTranslation(options) {
137
- const { messages, isLoading } = useWidgetLocale(options);
138
- const t = useMemo(() => createTFunction(messages), [messages]);
139
- return {
140
- t,
141
- messages,
142
- isLoading
143
- };
144
- }
145
- function createLocaleLoader(defaultMessages, imports) {
146
- return (locale) => {
147
- if (locale === "en") {
148
- return Promise.resolve({ default: defaultMessages });
149
- }
150
- const importFn = imports[locale];
151
- if (importFn) {
152
- return importFn();
153
- }
154
- return Promise.resolve({ default: defaultMessages });
155
- };
177
+ };
178
+ async function preloadBuiltInWidgetLocale(widget, locale) {
179
+ if (locale === "en") return;
180
+ const localeLoader = builtInLocaleImports[widget][locale];
181
+ if (!localeLoader) return;
182
+ await preloadWidgetLocale(widget, locale, () => localeLoader());
156
183
  }
157
- const registry = /* @__PURE__ */ new Map();
184
+ const builtInPreloaders = {
185
+ CommunityTask: (locale) => preloadBuiltInWidgetLocale("CommunityTask", locale),
186
+ Quest: (locale) => preloadBuiltInWidgetLocale("Quest", locale),
187
+ TaskWidget: (locale) => preloadBuiltInWidgetLocale("TaskWidget", locale),
188
+ LeaderboardWidget: (locale) => preloadBuiltInWidgetLocale("LeaderboardWidget", locale),
189
+ UserCenterWidget: (locale) => preloadBuiltInWidgetLocale("UserCenterWidget", locale)
190
+ };
158
191
  async function preloadWidgets(widgets, locale) {
159
192
  const preloadPromises = widgets.map((name) => {
160
- const preloadFn = registry.get(name);
193
+ const preloadFn = registry.get(name) ?? builtInPreloaders[name];
161
194
  if (!preloadFn) {
162
195
  if (process.env.NODE_ENV !== "production") {
163
196
  console.warn(
164
- `[widget-react] Widget "${name}" not found in registry. Make sure to import the widget before using preloadWidgets.`
197
+ `[widget-react] Widget "${name}" not found in registry. Make sure this widget has a preload loader configured.`
165
198
  );
166
199
  }
167
200
  return null;
@@ -1141,7 +1174,7 @@ function TaskOnProvider({
1141
1174
  configLocale: config.locale,
1142
1175
  preloadLocales
1143
1176
  });
1144
- const { client, userApiRef, isInitializing } = useClientInit({
1177
+ const { client, userApiRef, isInitializing, isSessionReady } = useClientInit({
1145
1178
  apiKey: config.apiKey,
1146
1179
  baseURL: config.baseURL,
1147
1180
  setUserInfo,
@@ -1195,6 +1228,7 @@ function TaskOnProvider({
1195
1228
  config,
1196
1229
  client,
1197
1230
  isInitializing,
1231
+ isSessionReady,
1198
1232
  locale,
1199
1233
  userId: (userInfo == null ? void 0 : userInfo.id) ?? null,
1200
1234
  userInfo,
@@ -1207,7 +1241,7 @@ function TaskOnProvider({
1207
1241
  chains,
1208
1242
  communityInfo
1209
1243
  }),
1210
- [config, client, isInitializing, locale, userInfo, userToken, login, logout, requestLogin, refreshUserInfo, chains, communityInfo]
1244
+ [config, client, isInitializing, isSessionReady, locale, userInfo, userToken, login, logout, requestLogin, refreshUserInfo, chains, communityInfo]
1211
1245
  );
1212
1246
  return /* @__PURE__ */ jsx(TaskOnContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(ToastContext.Provider, { value: toastState, children: /* @__PURE__ */ jsxs(ToastProvider, { children: [
1213
1247
  /* @__PURE__ */ jsx(WalletProvider, { config: config.walletConfig, children }),
@@ -1222,9 +1256,5 @@ function TaskOnProvider({
1222
1256
  }
1223
1257
  export {
1224
1258
  TaskOnProvider as T,
1225
- useCommonLocale as a,
1226
- createT as b,
1227
- createLocaleLoader as c,
1228
- interpolate as i,
1229
- useTranslation as u
1259
+ useCommonLocale as u
1230
1260
  };
@@ -38,6 +38,7 @@ function useTaskOnAuth() {
38
38
  userId: context.userId,
39
39
  isLoggedIn: context.isLoggedIn,
40
40
  isInitializing: context.isInitializing,
41
+ isSessionReady: context.isSessionReady,
41
42
  // Unified login
42
43
  login: context.login,
43
44
  // Logout
@@ -49,6 +50,7 @@ function useTaskOnAuth() {
49
50
  context.userId,
50
51
  context.isLoggedIn,
51
52
  context.isInitializing,
53
+ context.isSessionReady,
52
54
  context.login,
53
55
  context.logout,
54
56
  context.requestLogin
@@ -56,12 +58,12 @@ function useTaskOnAuth() {
56
58
  );
57
59
  }
58
60
  function isSupportedLocale(locale) {
59
- return locale === "en" || locale === "ko" || locale === "ja";
61
+ return locale === "en" || locale === "ko" || locale === "ja" || locale === "ru" || locale === "es";
60
62
  }
61
63
  function warnUnsupportedLocale(locale, widgetId) {
62
64
  if (process.env.NODE_ENV !== "production" && !isSupportedLocale(locale)) {
63
65
  console.warn(
64
- `[widget-react] Locale "${locale}" is not fully supported in ${widgetId}. Falling back to English. Supported locales: en, ko, ja`
66
+ `[widget-react] Locale "${locale}" is not fully supported in ${widgetId}. Falling back to English. Supported locales: en, ko, ja, ru, es`
65
67
  );
66
68
  }
67
69
  }
@@ -122,6 +124,77 @@ function useWidgetLocale(options) {
122
124
  function clearLocaleCache() {
123
125
  localeCache.clear();
124
126
  }
127
+ async function preloadWidgetLocale(widgetId, locale, loadMessages) {
128
+ if (locale === DEFAULT_LOCALE) return;
129
+ const cacheKey = `${widgetId}-${locale}`;
130
+ if (localeCache.has(cacheKey)) return;
131
+ try {
132
+ const module = await loadMessages(locale);
133
+ localeCache.set(cacheKey, module.default);
134
+ } catch (error) {
135
+ console.warn(
136
+ `[widget-react] Failed to preload locale "${locale}" for ${widgetId}:`,
137
+ error
138
+ );
139
+ }
140
+ }
141
+ function interpolate(template, params) {
142
+ if (!params) {
143
+ return template;
144
+ }
145
+ return template.replace(/\{(\w+)\}/g, (match, key) => {
146
+ const value = params[key];
147
+ if (value === void 0) {
148
+ return match;
149
+ }
150
+ return String(value);
151
+ });
152
+ }
153
+ function createT(messages) {
154
+ return (key, params) => {
155
+ const template = messages[key];
156
+ if (typeof template !== "string") {
157
+ if (process.env.NODE_ENV !== "production") {
158
+ console.warn(`[widget-react] Missing translation key: ${String(key)}`);
159
+ }
160
+ return String(key);
161
+ }
162
+ return interpolate(template, params);
163
+ };
164
+ }
165
+ function createTFunction(messages) {
166
+ return (key, params) => {
167
+ const template = messages[key];
168
+ if (typeof template !== "string") {
169
+ if (process.env.NODE_ENV !== "production") {
170
+ console.warn(`[widget-react] Missing translation key: ${String(key)}`);
171
+ }
172
+ return String(key);
173
+ }
174
+ return interpolate(template, params);
175
+ };
176
+ }
177
+ function useTranslation(options) {
178
+ const { messages, isLoading } = useWidgetLocale(options);
179
+ const t = useMemo(() => createTFunction(messages), [messages]);
180
+ return {
181
+ t,
182
+ messages,
183
+ isLoading
184
+ };
185
+ }
186
+ function createLocaleLoader(defaultMessages, imports) {
187
+ return (locale) => {
188
+ if (locale === "en") {
189
+ return Promise.resolve({ default: defaultMessages });
190
+ }
191
+ const importFn = imports[locale];
192
+ if (importFn) {
193
+ return importFn();
194
+ }
195
+ return Promise.resolve({ default: defaultMessages });
196
+ };
197
+ }
125
198
  function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
126
199
  return function handleEvent(event) {
127
200
  originalEventHandler == null ? void 0 : originalEventHandler(event);
@@ -825,6 +898,9 @@ const lightDefaultTokens = {
825
898
  fontSize: 14,
826
899
  fontSizeSm: 12,
827
900
  fontSizeLg: 16,
901
+ fontSizeXl: 18,
902
+ fontSizeXxl: 22,
903
+ fontSizeXxxl: 24,
828
904
  // Spacing
829
905
  spacing: 8,
830
906
  spacingXs: 4,
@@ -875,6 +951,9 @@ const darkDefaultTokens = {
875
951
  fontSize: 14,
876
952
  fontSizeSm: 12,
877
953
  fontSizeLg: 16,
954
+ fontSizeXl: 18,
955
+ fontSizeXxl: 22,
956
+ fontSizeXxxl: 24,
878
957
  // Spacing
879
958
  spacing: 8,
880
959
  spacingXs: 4,
@@ -1145,6 +1224,9 @@ function deriveTokens(seed, mode) {
1145
1224
  derived.fontSize = seed.fontSize;
1146
1225
  derived.fontSizeSm = seed.fontSize - 2;
1147
1226
  derived.fontSizeLg = seed.fontSize + 2;
1227
+ derived.fontSizeXl = seed.fontSize + 4;
1228
+ derived.fontSizeXxl = seed.fontSize + 8;
1229
+ derived.fontSizeXxxl = seed.fontSize + 10;
1148
1230
  }
1149
1231
  if (seed.spacingBaseStep !== void 0 || seed.spacingChangeUnit !== void 0) {
1150
1232
  const base = Math.max(1, Number(seed.spacingBaseStep) || 1);
@@ -1289,22 +1371,27 @@ export {
1289
1371
  ThemeProvider as T,
1290
1372
  useTaskOnTheme as a,
1291
1373
  useWidgetLocale as b,
1292
- clearLocaleCache as c,
1293
- useTaskOnContext as d,
1294
- createContextScope as e,
1295
- useComposedRefs as f,
1296
- createSlot as g,
1297
- useControllableState as h,
1298
- isSupportedLocale as i,
1299
- Presence as j,
1300
- composeEventHandlers as k,
1301
- useCallbackRef as l,
1302
- Portal as m,
1303
- dispatchDiscreteCustomEvent as n,
1304
- useLayoutEffect2 as o,
1305
- TaskOnContext as p,
1306
- composeRefs as q,
1307
- createContext2 as r,
1308
- useTaskOnPortalContainer as s,
1309
- useTaskOnAuth as u
1374
+ useTranslation as c,
1375
+ clearLocaleCache as d,
1376
+ createLocaleLoader as e,
1377
+ createT as f,
1378
+ isSupportedLocale as g,
1379
+ useTaskOnContext as h,
1380
+ interpolate as i,
1381
+ createContextScope as j,
1382
+ useComposedRefs as k,
1383
+ createSlot as l,
1384
+ useControllableState as m,
1385
+ Presence as n,
1386
+ composeEventHandlers as o,
1387
+ preloadWidgetLocale as p,
1388
+ useCallbackRef as q,
1389
+ Portal as r,
1390
+ useLayoutEffect2 as s,
1391
+ dispatchDiscreteCustomEvent as t,
1392
+ useTaskOnAuth as u,
1393
+ TaskOnContext as v,
1394
+ createContext2 as w,
1395
+ useTaskOnPortalContainer as x,
1396
+ composeRefs as y
1310
1397
  };