@quantabit/onboarding-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,343 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@quantabit/sdk-config'), require('react')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@quantabit/sdk-config', 'react'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.QbitDIDAuth = {}, global.sdkConfig, global.React));
5
+ })(this, (function (exports, sdkConfig, React) { 'use strict';
6
+
7
+ /**
8
+ * Onboarding SDK - 类型定义
9
+ */
10
+
11
+ const StepType = {
12
+ HIGHLIGHT: 'highlight',
13
+ MODAL: 'modal',
14
+ TOOLTIP: 'tooltip',
15
+ COACH_MARK: 'coach_mark'
16
+ };
17
+ const TutorialStatus = {
18
+ NOT_STARTED: 'not_started',
19
+ IN_PROGRESS: 'in_progress',
20
+ COMPLETED: 'completed',
21
+ SKIPPED: 'skipped'
22
+ };
23
+ function createDefaultStep() {
24
+ return {
25
+ id: '',
26
+ type: StepType.TOOLTIP,
27
+ title: '',
28
+ content: '',
29
+ target: null,
30
+ placement: 'bottom',
31
+ order: 0,
32
+ action: null
33
+ };
34
+ }
35
+ function createDefaultTutorial() {
36
+ return {
37
+ id: '',
38
+ name: '',
39
+ description: '',
40
+ steps: [],
41
+ status: TutorialStatus.NOT_STARTED,
42
+ currentStep: 0
43
+ };
44
+ }
45
+
46
+ /**
47
+ * Onboarding SDK - API 客户端
48
+ * 新手引导系统后端接口封装
49
+ *
50
+ * 使用 BaseApiClient 基类,代码从 ~100 行简化到 ~70 行
51
+ */
52
+
53
+
54
+ /**
55
+ * 新手引导 API 客户端
56
+ */
57
+ class OnboardingApiClient extends sdkConfig.BaseApiClient {
58
+ constructor(config = {}) {
59
+ // 只需传入模块路径,所有配置自动处理
60
+ super('/onboarding', config);
61
+ }
62
+
63
+ // ============ 教程管理 ============
64
+
65
+ /**
66
+ * 获取教程列表
67
+ */
68
+ async getTutorials() {
69
+ return this.get('/tutorials');
70
+ }
71
+
72
+ /**
73
+ * 获取教程详情
74
+ * @param {string} tutorialId - 教程 ID
75
+ */
76
+ async getTutorial(tutorialId) {
77
+ return this.get(`/tutorials/${tutorialId}`);
78
+ }
79
+
80
+ /**
81
+ * 开始教程
82
+ * @param {string} tutorialId - 教程 ID
83
+ */
84
+ async startTutorial(tutorialId) {
85
+ return this.post(`/tutorials/${tutorialId}/start`);
86
+ }
87
+
88
+ /**
89
+ * 完成教程步骤
90
+ * @param {string} tutorialId - 教程 ID
91
+ * @param {string} stepId - 步骤 ID
92
+ */
93
+ async completeStep(tutorialId, stepId) {
94
+ return this.post(`/tutorials/${tutorialId}/steps/${stepId}/complete`);
95
+ }
96
+
97
+ /**
98
+ * 跳过教程
99
+ * @param {string} tutorialId - 教程 ID
100
+ */
101
+ async skipTutorial(tutorialId) {
102
+ return this.post(`/tutorials/${tutorialId}/skip`);
103
+ }
104
+
105
+ /**
106
+ * 获取整体进度
107
+ */
108
+ async getProgress() {
109
+ return this.get('/progress');
110
+ }
111
+
112
+ /**
113
+ * 重置教程进度
114
+ * @param {string} tutorialId - 教程 ID(可选,不传则重置全部)
115
+ */
116
+ async resetProgress(tutorialId = null) {
117
+ const endpoint = tutorialId ? `/tutorials/${tutorialId}/reset` : '/progress/reset';
118
+ return this.post(endpoint);
119
+ }
120
+
121
+ /**
122
+ * 获取推荐教程
123
+ */
124
+ async getRecommendedTutorials() {
125
+ return this.get('/tutorials/recommended');
126
+ }
127
+
128
+ /**
129
+ * 标记提示已读
130
+ * @param {string} tipId - 提示 ID
131
+ */
132
+ async dismissTip(tipId) {
133
+ return this.post(`/tips/${tipId}/dismiss`);
134
+ }
135
+
136
+ /**
137
+ * 获取新功能引导
138
+ */
139
+ async getNewFeatures() {
140
+ return this.get('/features/new');
141
+ }
142
+
143
+ /**
144
+ * 标记新功能已查看
145
+ * @param {string} featureId - 功能 ID
146
+ */
147
+ async markFeatureSeen(featureId) {
148
+ return this.post(`/features/${featureId}/seen`);
149
+ }
150
+ }
151
+
152
+ // 创建默认实例
153
+ const onboardingApi = new OnboardingApiClient();
154
+
155
+ /**
156
+ * Onboarding SDK - 国际化
157
+ */
158
+ const messages = {
159
+ en: {
160
+ next: 'Next',
161
+ prev: 'Previous',
162
+ skip: 'Skip',
163
+ done: 'Done',
164
+ startTutorial: 'Start Tutorial'
165
+ },
166
+ zh: {
167
+ next: '下一步',
168
+ prev: '上一步',
169
+ skip: '跳过',
170
+ done: '完成',
171
+ startTutorial: '开始教程'
172
+ },
173
+ ja: {
174
+ next: '次へ',
175
+ prev: '前へ',
176
+ skip: 'スキップ',
177
+ done: '完了',
178
+ startTutorial: 'チュートリアル開始'
179
+ },
180
+ ko: {
181
+ next: '다음',
182
+ prev: '이전',
183
+ skip: '건너뛰기',
184
+ done: '완료',
185
+ startTutorial: '튜토리얼 시작'
186
+ }
187
+ };
188
+ let currentLanguage = 'zh';
189
+ function setLanguage(lang) {
190
+ if (['en', 'zh', 'ja', 'ko'].includes(lang)) currentLanguage = lang;
191
+ }
192
+ function getLanguage() {
193
+ return currentLanguage;
194
+ }
195
+ function t(key) {
196
+ return messages[currentLanguage]?.[key] || messages.en[key] || key;
197
+ }
198
+
199
+ /**
200
+ * Onboarding SDK - React Hooks
201
+ */
202
+ function useTutorials() {
203
+ const [tutorials, setTutorials] = React.useState([]);
204
+ const [loading, setLoading] = React.useState(true);
205
+ React.useEffect(() => {
206
+ onboardingApi.getTutorials().then(setTutorials).finally(() => setLoading(false));
207
+ }, []);
208
+ return {
209
+ tutorials,
210
+ loading
211
+ };
212
+ }
213
+ function useTutorial(id) {
214
+ const [tutorial, setTutorial] = React.useState(null);
215
+ const [currentStep, setCurrentStep] = React.useState(0);
216
+ const [loading, setLoading] = React.useState(true);
217
+ React.useEffect(() => {
218
+ if (id) onboardingApi.getTutorial(id).then(setTutorial).finally(() => setLoading(false));
219
+ }, [id]);
220
+ const nextStep = React.useCallback(() => {
221
+ if (tutorial && currentStep < tutorial.steps.length - 1) {
222
+ onboardingApi.completeStep(id, tutorial.steps[currentStep].id);
223
+ setCurrentStep(s => s + 1);
224
+ }
225
+ }, [id, tutorial, currentStep]);
226
+ const prevStep = React.useCallback(() => setCurrentStep(s => Math.max(0, s - 1)), []);
227
+ const skip = React.useCallback(() => onboardingApi.skipTutorial(id), [id]);
228
+ return {
229
+ tutorial,
230
+ currentStep,
231
+ nextStep,
232
+ prevStep,
233
+ skip,
234
+ loading
235
+ };
236
+ }
237
+ function useOnboardingProgress() {
238
+ const [progress, setProgress] = React.useState(null);
239
+ const [loading, setLoading] = React.useState(true);
240
+ React.useEffect(() => {
241
+ onboardingApi.getProgress().then(setProgress).finally(() => setLoading(false));
242
+ }, []);
243
+ return {
244
+ progress,
245
+ loading
246
+ };
247
+ }
248
+
249
+ function Tooltip({
250
+ title,
251
+ content,
252
+ placement = 'bottom',
253
+ onNext,
254
+ onSkip,
255
+ isLast
256
+ }) {
257
+ return /*#__PURE__*/React.createElement("div", {
258
+ className: `onboarding-tooltip placement-${placement}`
259
+ }, /*#__PURE__*/React.createElement("h4", null, title), /*#__PURE__*/React.createElement("p", null, content), /*#__PURE__*/React.createElement("div", {
260
+ className: "onboarding-tooltip-actions"
261
+ }, /*#__PURE__*/React.createElement("button", {
262
+ className: "onboarding-btn text",
263
+ onClick: onSkip
264
+ }, t('skip')), /*#__PURE__*/React.createElement("button", {
265
+ className: "onboarding-btn primary",
266
+ onClick: onNext
267
+ }, isLast ? t('done') : t('next'))));
268
+ }
269
+ function CoachMark({
270
+ target,
271
+ children
272
+ }) {
273
+ return /*#__PURE__*/React.createElement("div", {
274
+ className: "onboarding-coach-mark"
275
+ }, /*#__PURE__*/React.createElement("div", {
276
+ className: "onboarding-spotlight"
277
+ }), children);
278
+ }
279
+ function StepIndicator({
280
+ total,
281
+ current
282
+ }) {
283
+ return /*#__PURE__*/React.createElement("div", {
284
+ className: "onboarding-step-indicator"
285
+ }, Array.from({
286
+ length: total
287
+ }, (_, i) => /*#__PURE__*/React.createElement("span", {
288
+ key: i,
289
+ className: `step-dot ${i === current ? 'active' : ''} ${i < current ? 'completed' : ''}`
290
+ })));
291
+ }
292
+ function TutorialOverlay({
293
+ tutorial,
294
+ currentStep,
295
+ onNext,
296
+ onPrev,
297
+ onSkip
298
+ }) {
299
+ if (!tutorial) return null;
300
+ const step = tutorial.steps[currentStep];
301
+ const isFirst = currentStep === 0;
302
+ const isLast = currentStep === tutorial.steps.length - 1;
303
+ return /*#__PURE__*/React.createElement("div", {
304
+ className: "onboarding-overlay"
305
+ }, /*#__PURE__*/React.createElement("div", {
306
+ className: "onboarding-modal"
307
+ }, /*#__PURE__*/React.createElement("h3", null, step.title), /*#__PURE__*/React.createElement("p", null, step.content), /*#__PURE__*/React.createElement(StepIndicator, {
308
+ total: tutorial.steps.length,
309
+ current: currentStep
310
+ }), /*#__PURE__*/React.createElement("div", {
311
+ className: "onboarding-modal-actions"
312
+ }, !isFirst && /*#__PURE__*/React.createElement("button", {
313
+ className: "onboarding-btn secondary",
314
+ onClick: onPrev
315
+ }, t('prev')), /*#__PURE__*/React.createElement("button", {
316
+ className: "onboarding-btn text",
317
+ onClick: onSkip
318
+ }, t('skip')), /*#__PURE__*/React.createElement("button", {
319
+ className: "onboarding-btn primary",
320
+ onClick: onNext
321
+ }, isLast ? t('done') : t('next')))));
322
+ }
323
+
324
+ exports.CoachMark = CoachMark;
325
+ exports.OnboardingApiClient = OnboardingApiClient;
326
+ exports.StepIndicator = StepIndicator;
327
+ exports.StepType = StepType;
328
+ exports.Tooltip = Tooltip;
329
+ exports.TutorialOverlay = TutorialOverlay;
330
+ exports.TutorialStatus = TutorialStatus;
331
+ exports.createDefaultStep = createDefaultStep;
332
+ exports.createDefaultTutorial = createDefaultTutorial;
333
+ exports.getLanguage = getLanguage;
334
+ exports.messages = messages;
335
+ exports.onboardingApi = onboardingApi;
336
+ exports.setLanguage = setLanguage;
337
+ exports.t = t;
338
+ exports.useOnboardingProgress = useOnboardingProgress;
339
+ exports.useTutorial = useTutorial;
340
+ exports.useTutorials = useTutorials;
341
+
342
+ }));
343
+ //# sourceMappingURL=index.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.umd.js","sources":["../src/types/index.js","../src/services/onboardingApi.js","../src/i18n/index.js","../src/hooks/useOnboarding.js","../src/components/Onboarding.jsx"],"sourcesContent":["/**\n * Onboarding SDK - 类型定义\n */\n\nexport const StepType = {\n HIGHLIGHT: 'highlight',\n MODAL: 'modal',\n TOOLTIP: 'tooltip',\n COACH_MARK: 'coach_mark',\n};\n\nexport const TutorialStatus = {\n NOT_STARTED: 'not_started',\n IN_PROGRESS: 'in_progress',\n COMPLETED: 'completed',\n SKIPPED: 'skipped',\n};\n\nexport function createDefaultStep() {\n return {\n id: '',\n type: StepType.TOOLTIP,\n title: '',\n content: '',\n target: null,\n placement: 'bottom',\n order: 0,\n action: null,\n };\n}\n\nexport function createDefaultTutorial() {\n return {\n id: '',\n name: '',\n description: '',\n steps: [],\n status: TutorialStatus.NOT_STARTED,\n currentStep: 0,\n };\n}\n","/**\n * Onboarding SDK - API 客户端\n * 新手引导系统后端接口封装\n * \n * 使用 BaseApiClient 基类,代码从 ~100 行简化到 ~70 行\n */\n\nimport { BaseApiClient } from '@quantabit/sdk-config';\n\n/**\n * 新手引导 API 客户端\n */\nexport class OnboardingApiClient extends BaseApiClient {\n constructor(config = {}) {\n // 只需传入模块路径,所有配置自动处理\n super('/onboarding', config);\n }\n\n // ============ 教程管理 ============\n\n /**\n * 获取教程列表\n */\n async getTutorials() {\n return this.get('/tutorials');\n }\n\n /**\n * 获取教程详情\n * @param {string} tutorialId - 教程 ID\n */\n async getTutorial(tutorialId) {\n return this.get(`/tutorials/${tutorialId}`);\n }\n\n /**\n * 开始教程\n * @param {string} tutorialId - 教程 ID\n */\n async startTutorial(tutorialId) {\n return this.post(`/tutorials/${tutorialId}/start`);\n }\n\n /**\n * 完成教程步骤\n * @param {string} tutorialId - 教程 ID\n * @param {string} stepId - 步骤 ID\n */\n async completeStep(tutorialId, stepId) {\n return this.post(`/tutorials/${tutorialId}/steps/${stepId}/complete`);\n }\n\n /**\n * 跳过教程\n * @param {string} tutorialId - 教程 ID\n */\n async skipTutorial(tutorialId) {\n return this.post(`/tutorials/${tutorialId}/skip`);\n }\n\n /**\n * 获取整体进度\n */\n async getProgress() {\n return this.get('/progress');\n }\n\n /**\n * 重置教程进度\n * @param {string} tutorialId - 教程 ID(可选,不传则重置全部)\n */\n async resetProgress(tutorialId = null) {\n const endpoint = tutorialId ? `/tutorials/${tutorialId}/reset` : '/progress/reset';\n return this.post(endpoint);\n }\n\n /**\n * 获取推荐教程\n */\n async getRecommendedTutorials() {\n return this.get('/tutorials/recommended');\n }\n\n /**\n * 标记提示已读\n * @param {string} tipId - 提示 ID\n */\n async dismissTip(tipId) {\n return this.post(`/tips/${tipId}/dismiss`);\n }\n\n /**\n * 获取新功能引导\n */\n async getNewFeatures() {\n return this.get('/features/new');\n }\n\n /**\n * 标记新功能已查看\n * @param {string} featureId - 功能 ID\n */\n async markFeatureSeen(featureId) {\n return this.post(`/features/${featureId}/seen`);\n }\n}\n\n// 创建默认实例\nexport const onboardingApi = new OnboardingApiClient();\n\nexport default onboardingApi;\n","/**\n * Onboarding SDK - 国际化\n */\nconst messages = {\n en: { next: 'Next', prev: 'Previous', skip: 'Skip', done: 'Done', startTutorial: 'Start Tutorial' },\n zh: { next: '下一步', prev: '上一步', skip: '跳过', done: '完成', startTutorial: '开始教程' },\n ja: { next: '次へ', prev: '前へ', skip: 'スキップ', done: '完了', startTutorial: 'チュートリアル開始' },\n ko: { next: '다음', prev: '이전', skip: '건너뛰기', done: '완료', startTutorial: '튜토리얼 시작' },\n};\nlet currentLanguage = 'zh';\nexport function setLanguage(lang) { if (['en', 'zh', 'ja', 'ko'].includes(lang)) currentLanguage = lang; }\nexport function getLanguage() { return currentLanguage; }\nexport function t(key) { return messages[currentLanguage]?.[key] || messages.en[key] || key; }\nexport { messages };\n","/**\n * Onboarding SDK - React Hooks\n */\nimport { useState, useEffect, useCallback } from 'react';\nimport { onboardingApi } from '../services/onboardingApi';\n\nexport function useTutorials() {\n const [tutorials, setTutorials] = useState([]);\n const [loading, setLoading] = useState(true);\n useEffect(() => {\n onboardingApi.getTutorials().then(setTutorials).finally(() => setLoading(false));\n }, []);\n return { tutorials, loading };\n}\n\nexport function useTutorial(id) {\n const [tutorial, setTutorial] = useState(null);\n const [currentStep, setCurrentStep] = useState(0);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (id) onboardingApi.getTutorial(id).then(setTutorial).finally(() => setLoading(false));\n }, [id]);\n\n const nextStep = useCallback(() => {\n if (tutorial && currentStep < tutorial.steps.length - 1) {\n onboardingApi.completeStep(id, tutorial.steps[currentStep].id);\n setCurrentStep(s => s + 1);\n }\n }, [id, tutorial, currentStep]);\n\n const prevStep = useCallback(() => setCurrentStep(s => Math.max(0, s - 1)), []);\n const skip = useCallback(() => onboardingApi.skipTutorial(id), [id]);\n\n return { tutorial, currentStep, nextStep, prevStep, skip, loading };\n}\n\nexport function useOnboardingProgress() {\n const [progress, setProgress] = useState(null);\n const [loading, setLoading] = useState(true);\n useEffect(() => {\n onboardingApi.getProgress().then(setProgress).finally(() => setLoading(false));\n }, []);\n return { progress, loading };\n}\n","import React from 'react';\nimport { t } from '../i18n';\n\nexport function Tooltip({ title, content, placement = 'bottom', onNext, onSkip, isLast }) {\n return (\n <div className={`onboarding-tooltip placement-${placement}`}>\n <h4>{title}</h4>\n <p>{content}</p>\n <div className=\"onboarding-tooltip-actions\">\n <button className=\"onboarding-btn text\" onClick={onSkip}>{t('skip')}</button>\n <button className=\"onboarding-btn primary\" onClick={onNext}>\n {isLast ? t('done') : t('next')}\n </button>\n </div>\n </div>\n );\n}\n\nexport function CoachMark({ target, children }) {\n return (\n <div className=\"onboarding-coach-mark\">\n <div className=\"onboarding-spotlight\" />\n {children}\n </div>\n );\n}\n\nexport function StepIndicator({ total, current }) {\n return (\n <div className=\"onboarding-step-indicator\">\n {Array.from({ length: total }, (_, i) => (\n <span key={i} className={`step-dot ${i === current ? 'active' : ''} ${i < current ? 'completed' : ''}`} />\n ))}\n </div>\n );\n}\n\nexport function TutorialOverlay({ tutorial, currentStep, onNext, onPrev, onSkip }) {\n if (!tutorial) return null;\n const step = tutorial.steps[currentStep];\n const isFirst = currentStep === 0;\n const isLast = currentStep === tutorial.steps.length - 1;\n\n return (\n <div className=\"onboarding-overlay\">\n <div className=\"onboarding-modal\">\n <h3>{step.title}</h3>\n <p>{step.content}</p>\n <StepIndicator total={tutorial.steps.length} current={currentStep} />\n <div className=\"onboarding-modal-actions\">\n {!isFirst && <button className=\"onboarding-btn secondary\" onClick={onPrev}>{t('prev')}</button>}\n <button className=\"onboarding-btn text\" onClick={onSkip}>{t('skip')}</button>\n <button className=\"onboarding-btn primary\" onClick={onNext}>\n {isLast ? t('done') : t('next')}\n </button>\n </div>\n </div>\n </div>\n );\n}\n"],"names":["StepType","HIGHLIGHT","MODAL","TOOLTIP","COACH_MARK","TutorialStatus","NOT_STARTED","IN_PROGRESS","COMPLETED","SKIPPED","createDefaultStep","id","type","title","content","target","placement","order","action","createDefaultTutorial","name","description","steps","status","currentStep","OnboardingApiClient","BaseApiClient","constructor","config","getTutorials","get","getTutorial","tutorialId","startTutorial","post","completeStep","stepId","skipTutorial","getProgress","resetProgress","endpoint","getRecommendedTutorials","dismissTip","tipId","getNewFeatures","markFeatureSeen","featureId","onboardingApi","messages","en","next","prev","skip","done","zh","ja","ko","currentLanguage","setLanguage","lang","includes","getLanguage","t","key","useTutorials","tutorials","setTutorials","useState","loading","setLoading","useEffect","then","finally","useTutorial","tutorial","setTutorial","setCurrentStep","nextStep","useCallback","length","s","prevStep","Math","max","useOnboardingProgress","progress","setProgress","Tooltip","onNext","onSkip","isLast","React","createElement","className","onClick","CoachMark","children","StepIndicator","total","current","Array","from","_","i","TutorialOverlay","onPrev","step","isFirst"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ @keyframes qob-pop{0%{opacity:0;transform:translateX(-50%) scale(.95)}to{opacity:1;transform:translateX(-50%) scale(1)}}@keyframes qob-pulse{0%,to{opacity:1}50%{opacity:.6}}.qob-welcome button:hover{box-shadow:0 8px 24px rgba(59,130,246,.3);transform:scale(1.03)}
2
+ /*# sourceMappingURL=styles.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["onboarding.css"],"names":[],"mappings":"AAAA,mBAAmB,GAAK,SAAS,CAAC,qCAAsC,CAAC,GAAG,SAAS,CAAC,mCAAmC,CAAC,CAC1H,qBAAqB,MAAQ,SAAS,CAAC,IAAI,UAAW,CAAC,CACvD,0BAAgD,yCAAA,CAAtB,qBAAgE","file":"styles.css","sourcesContent":["@keyframes qob-pop{from{opacity:0;transform:translateX(-50%) scale(0.95)}to{opacity:1;transform:translateX(-50%) scale(1)}}\n@keyframes qob-pulse{0%,100%{opacity:1}50%{opacity:0.6}}\n.qob-welcome button:hover{transform:scale(1.03);box-shadow:0 8px 24px rgba(59,130,246,0.3)}\n"]}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@quantabit/onboarding-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "User onboarding: flows, spotlight tours, feature highlights",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.esm.js",
8
+ "types": "types/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./types/index.d.ts",
12
+ "import": "./dist/index.esm.js",
13
+ "require": "./dist/index.cjs"
14
+ }
15
+ },
16
+ "sideEffects": [
17
+ "*.css"
18
+ ],
19
+ "files": [
20
+ "dist",
21
+ "types",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "rollup -c",
27
+ "dev": "rollup -c -w",
28
+ "test": "jest --passWithNoTests",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/quantabit-chain/qbit-sdk.git",
34
+ "directory": "packages/onboarding-sdk"
35
+ },
36
+ "keywords": [
37
+ "onboarding",
38
+ "tutorial",
39
+ "tour",
40
+ "welcome",
41
+ "react"
42
+ ],
43
+ "author": "QuantaBit Team",
44
+ "license": "MIT",
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "peerDependencies": {
49
+ "react": ">=17.0.0",
50
+ "react-dom": ">=17.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@quantabit/sdk-config": "^1.0.6"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "qbit": {
59
+ "privacy": {
60
+ "level": "functional",
61
+ "dataCollection": "Feature-related data for personalization. Requires user consent.",
62
+ "gdprCompliant": true,
63
+ "ccpaCompliant": true
64
+ }
65
+ },
66
+ "homepage": "https://github.com/quantabit-chain/qbit-sdk/tree/main/packages/onboarding-sdk#readme",
67
+ "bugs": {
68
+ "url": "https://github.com/quantabit-chain/qbit-sdk/issues"
69
+ }
70
+ }
@@ -0,0 +1,10 @@
1
+ // Type definitions for @quantabit/onboarding-sdk
2
+ export declare const FeatureHighlight: any;
3
+ export declare const OnboardingFlow: any;
4
+ export declare const SUPPORTED_LANGUAGES: any;
5
+ export declare const SpotlightTour: any;
6
+ export declare const WelcomeScreen: any;
7
+ export declare const getLanguage: any;
8
+ export declare const messages: any;
9
+ export declare const setLanguage: any;
10
+ export declare const t: any;