@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 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/components/OnboardingFlow.jsx","../src/components/SpotlightTour.jsx","../src/components/FeatureHighlight.jsx","../src/components/WelcomeScreen.jsx","../src/i18n/index.js","../src/components/Onboarding.jsx","../src/types/index.js","../src/services/onboardingApi.js","../src/hooks/useOnboarding.js"],"sourcesContent":["import React,{useState}from'react';\nexport function OnboardingFlow({steps=[],onComplete,onSkip,className=''}){\n const[current,setCurrent]=useState(0);const step=steps[current];if(!step)return null;\n return(<div className={`qob-flow ${className}`} style={{textAlign:'center',padding:40,maxWidth:480,margin:'0 auto'}}>\n {step.image&&<img src={step.image} alt=\"\" style={{maxWidth:240,height:'auto',marginBottom:24}}/>}\n {step.icon&&<div style={{fontSize:56,marginBottom:16}}>{step.icon}</div>}\n <h2 style={{fontSize:24,fontWeight:800,color:'#18181b',margin:'0 0 8px'}}>{step.title}</h2>\n <p style={{fontSize:14,color:'#71717a',lineHeight:1.6,margin:'0 0 32px'}}>{step.description}</p>\n {/* 进度点 */}\n <div style={{display:'flex',gap:6,justifyContent:'center',marginBottom:24}}>\n {steps.map((_,i)=>(<div key={i} style={{width:i===current?24:8,height:8,borderRadius:4,\n background:i===current?'#3b82f6':i<current?'#93c5fd':'#e4e4e7',transition:'all 0.3s'}}/>))}\n </div>\n <div style={{display:'flex',gap:12,justifyContent:'center'}}>\n {onSkip&&current<steps.length-1&&<button onClick={onSkip}\n style={{padding:'10px 24px',borderRadius:10,border:'none',background:'transparent',color:'#71717a',fontSize:14,cursor:'pointer'}}>Skip</button>}\n <button onClick={()=>{if(current<steps.length-1)setCurrent(c=>c+1);else onComplete?.();}}\n style={{padding:'10px 32px',borderRadius:10,border:'none',background:'#3b82f6',color:'#fff',\n fontSize:14,fontWeight:700,cursor:'pointer',transition:'all 0.2s'}}>\n {current===steps.length-1?'Get Started':'Next'}</button>\n </div>\n </div>);\n}\n","import React,{useState,useEffect,useCallback}from'react';\nexport function SpotlightTour({steps=[],active=false,onComplete,onSkip}){\n const[current,setCurrent]=useState(0);const step=steps[current];\n const[rect,setRect]=useState(null);\n const updateRect=useCallback(()=>{if(!step?.target)return;const el=document.querySelector(step.target);\n if(el){const r=el.getBoundingClientRect();setRect({top:r.top-4,left:r.left-4,width:r.width+8,height:r.height+8});}\n },[step]);\n useEffect(()=>{if(active){updateRect();window.addEventListener('resize',updateRect);\n return()=>window.removeEventListener('resize',updateRect);}\n },[active,updateRect]);\n if(!active||!step||!rect)return null;\n return(<>\n <div style={{position:'fixed',inset:0,zIndex:99998}}>\n <svg width=\"100%\" height=\"100%\" style={{position:'absolute'}}>\n <defs><mask id=\"qob-mask\"><rect width=\"100%\" height=\"100%\" fill=\"white\"/>\n <rect x={rect.left} y={rect.top} width={rect.width} height={rect.height} rx=\"8\" fill=\"black\"/></mask></defs>\n <rect width=\"100%\" height=\"100%\" fill=\"rgba(0,0,0,0.5)\" mask=\"url(#qob-mask)\"/>\n </svg>\n </div>\n <div style={{position:'fixed',zIndex:99999,top:rect.top+rect.height+12,left:Math.max(16,Math.min(rect.left,window.innerWidth-320)),\n width:300,padding:20,borderRadius:14,background:'#fff',boxShadow:'0 16px 48px rgba(0,0,0,0.15)',\n animation:'qob-pop 0.2s ease-out'}}>\n <div style={{fontSize:12,color:'#a1a1aa',marginBottom:4}}>Step {current+1} of {steps.length}</div>\n <h4 style={{fontSize:15,fontWeight:700,color:'#18181b',margin:'0 0 6px'}}>{step.title}</h4>\n <p style={{fontSize:13,color:'#71717a',margin:'0 0 16px',lineHeight:1.5}}>{step.description}</p>\n <div style={{display:'flex',justifyContent:'space-between'}}>\n {onSkip&&<button onClick={onSkip} style={{border:'none',background:'none',color:'#a1a1aa',fontSize:12,cursor:'pointer'}}>Skip tour</button>}\n <button onClick={()=>{if(current<steps.length-1)setCurrent(c=>c+1);else{onComplete?.();setCurrent(0);}}}\n style={{padding:'6px 16px',borderRadius:6,border:'none',background:'#3b82f6',color:'#fff',fontSize:12,fontWeight:600,cursor:'pointer',marginLeft:'auto'}}>\n {current===steps.length-1?'Finish':'Next'}</button>\n </div>\n </div>\n </>);\n}\n","import React,{useState}from'react';\nexport function FeatureHighlight({title,description,isNew=false,onDismiss,position='top-right',className=''}){\n const[visible,setVisible]=useState(true);if(!visible)return null;\n const dismiss=()=>{setVisible(false);onDismiss?.();};\n return(<div className={`qob-highlight ${className}`} style={{position:'relative',display:'inline-block'}}>\n <div style={{position:'absolute',...(position==='top-right'?{top:-8,right:-8}:position==='top-left'?{top:-8,left:-8}:{bottom:-8,right:-8}),\n zIndex:10}}>\n {isNew&&<span style={{background:'#ef4444',color:'#fff',fontSize:10,fontWeight:700,padding:'1px 6px',borderRadius:4,animation:'qob-pulse 2s infinite'}}>NEW</span>}\n </div>\n <div className=\"qob-tooltip\" style={{position:'absolute',top:'calc(100% + 8px)',left:'50%',transform:'translateX(-50%)',\n padding:'12px 16px',borderRadius:10,background:'#18181b',color:'#fff',fontSize:12,width:200,zIndex:100,\n boxShadow:'0 8px 24px rgba(0,0,0,0.2)',animation:'qob-pop 0.2s ease-out'}}>\n <div style={{fontWeight:600,marginBottom:4}}>{title}</div>\n <div style={{opacity:0.8,lineHeight:1.4}}>{description}</div>\n <button onClick={dismiss} style={{border:'none',background:'rgba(255,255,255,0.15)',color:'#fff',padding:'3px 10px',borderRadius:4,fontSize:11,cursor:'pointer',marginTop:8}}>Got it</button>\n </div> \n </div>);\n}\n","import React from'react';\nexport function WelcomeScreen({title='Welcome!',subtitle,features=[],cta='Get Started',onAction,logo,className=''}){\n return(<div className={`qob-welcome ${className}`} style={{textAlign:'center',padding:'48px 32px',maxWidth:560,margin:'0 auto'}}>\n {logo&&<div style={{marginBottom:20}}>{typeof logo==='string'?<img src={logo} alt=\"\" style={{height:48}}/>:logo}</div>}\n <h1 style={{fontSize:32,fontWeight:800,color:'#18181b',margin:'0 0 8px'}}>{title}</h1>\n {subtitle&&<p style={{fontSize:16,color:'#71717a',margin:'0 0 32px',lineHeight:1.6}}>{subtitle}</p>}\n {features.length>0&&<div style={{display:'grid',gridTemplateColumns:'repeat(auto-fit,minmax(140px,1fr))',gap:16,marginBottom:32,textAlign:'center'}}>\n {features.map((f,i)=>(<div key={i} style={{padding:16,borderRadius:12,border:'1px solid #f4f4f5'}}>\n <div style={{fontSize:28,marginBottom:8}}>{f.icon}</div>\n <div style={{fontSize:13,fontWeight:600,color:'#18181b'}}>{f.title}</div>\n {f.description&&<div style={{fontSize:11,color:'#71717a',marginTop:4}}>{f.description}</div>}\n </div>))}\n </div>}\n <button onClick={onAction} style={{padding:'14px 40px',borderRadius:12,border:'none',background:'#3b82f6',\n color:'#fff',fontSize:16,fontWeight:700,cursor:'pointer',transition:'all 0.2s'}}>{cta}</button>\n </div>);\n}\n","export const SUPPORTED_LANGUAGES = ['en', 'zh', 'ja', 'ko'];\n\nexport const messages = {\n en: {\n 'ob.next': 'Next',\n 'ob.skip': 'Skip',\n 'ob.done': 'Get Started',\n 'ob.welcome': 'Welcome!',\n },\n zh: {\n 'ob.next': '下一步',\n 'ob.skip': '跳过',\n 'ob.done': '开始使用',\n 'ob.welcome': '欢迎!',\n },\n ja: {\n 'ob.next': '次へ',\n 'ob.skip': 'スキップ',\n 'ob.done': 'はじめる',\n 'ob.welcome': 'ようこそ!',\n },\n ko: {\n 'ob.next': '다음',\n 'ob.skip': '건너뛰기',\n 'ob.done': '시작하기',\n 'ob.welcome': '환영합니다!',\n }\n};\n\nlet currentLang = 'en';\n\nexport function setLanguage(l) {\n if (SUPPORTED_LANGUAGES.includes(l)) currentLang = l;\n}\n\nexport function getLanguage() {\n return currentLang;\n}\n\nexport function t(k, params = {}) {\n let text = messages[currentLang]?.[k] || messages.en?.[k] || k;\n Object.entries(params).forEach(([key, val]) => {\n text = text.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), val);\n });\n return text;\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","/**\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 - 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"],"names":["OnboardingFlow","steps","onComplete","onSkip","className","current","setCurrent","useState","step","React","createElement","style","textAlign","padding","maxWidth","margin","image","src","alt","height","marginBottom","icon","fontSize","fontWeight","color","title","lineHeight","description","display","gap","justifyContent","map","_","i","key","width","borderRadius","background","transition","length","onClick","border","cursor","c","SpotlightTour","active","rect","setRect","updateRect","useCallback","target","el","document","querySelector","r","getBoundingClientRect","top","left","useEffect","window","addEventListener","removeEventListener","Fragment","position","inset","zIndex","id","fill","x","y","rx","mask","Math","max","min","innerWidth","boxShadow","animation","marginLeft","FeatureHighlight","isNew","onDismiss","visible","setVisible","dismiss","right","bottom","transform","opacity","marginTop","WelcomeScreen","subtitle","features","cta","onAction","logo","gridTemplateColumns","f","SUPPORTED_LANGUAGES","messages","en","zh","ja","ko","currentLang","setLanguage","l","includes","getLanguage","t","k","params","text","Object","entries","forEach","val","replace","RegExp","Tooltip","content","placement","onNext","isLast","CoachMark","children","StepIndicator","total","Array","from","TutorialOverlay","tutorial","currentStep","onPrev","isFirst","StepType","HIGHLIGHT","MODAL","TOOLTIP","COACH_MARK","TutorialStatus","NOT_STARTED","IN_PROGRESS","COMPLETED","SKIPPED","createDefaultStep","type","order","action","createDefaultTutorial","name","status","OnboardingApiClient","BaseApiClient","constructor","config","getTutorials","get","getTutorial","tutorialId","startTutorial","post","completeStep","stepId","skipTutorial","getProgress","resetProgress","endpoint","getRecommendedTutorials","dismissTip","tipId","getNewFeatures","markFeatureSeen","featureId","onboardingApi","useTutorials","tutorials","setTutorials","loading","setLoading","then","finally","useTutorial","setTutorial","setCurrentStep","nextStep","s","prevStep","skip","useOnboardingProgress","progress","setProgress"],"mappings":"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"}
@@ -0,0 +1,342 @@
1
+ var QbitDIDAuth = (function (exports, sdkConfig, React) {
2
+ 'use strict';
3
+
4
+ /**
5
+ * Onboarding SDK - 类型定义
6
+ */
7
+
8
+ const StepType = {
9
+ HIGHLIGHT: 'highlight',
10
+ MODAL: 'modal',
11
+ TOOLTIP: 'tooltip',
12
+ COACH_MARK: 'coach_mark'
13
+ };
14
+ const TutorialStatus = {
15
+ NOT_STARTED: 'not_started',
16
+ IN_PROGRESS: 'in_progress',
17
+ COMPLETED: 'completed',
18
+ SKIPPED: 'skipped'
19
+ };
20
+ function createDefaultStep() {
21
+ return {
22
+ id: '',
23
+ type: StepType.TOOLTIP,
24
+ title: '',
25
+ content: '',
26
+ target: null,
27
+ placement: 'bottom',
28
+ order: 0,
29
+ action: null
30
+ };
31
+ }
32
+ function createDefaultTutorial() {
33
+ return {
34
+ id: '',
35
+ name: '',
36
+ description: '',
37
+ steps: [],
38
+ status: TutorialStatus.NOT_STARTED,
39
+ currentStep: 0
40
+ };
41
+ }
42
+
43
+ /**
44
+ * Onboarding SDK - API 客户端
45
+ * 新手引导系统后端接口封装
46
+ *
47
+ * 使用 BaseApiClient 基类,代码从 ~100 行简化到 ~70 行
48
+ */
49
+
50
+
51
+ /**
52
+ * 新手引导 API 客户端
53
+ */
54
+ class OnboardingApiClient extends sdkConfig.BaseApiClient {
55
+ constructor(config = {}) {
56
+ // 只需传入模块路径,所有配置自动处理
57
+ super('/onboarding', config);
58
+ }
59
+
60
+ // ============ 教程管理 ============
61
+
62
+ /**
63
+ * 获取教程列表
64
+ */
65
+ async getTutorials() {
66
+ return this.get('/tutorials');
67
+ }
68
+
69
+ /**
70
+ * 获取教程详情
71
+ * @param {string} tutorialId - 教程 ID
72
+ */
73
+ async getTutorial(tutorialId) {
74
+ return this.get(`/tutorials/${tutorialId}`);
75
+ }
76
+
77
+ /**
78
+ * 开始教程
79
+ * @param {string} tutorialId - 教程 ID
80
+ */
81
+ async startTutorial(tutorialId) {
82
+ return this.post(`/tutorials/${tutorialId}/start`);
83
+ }
84
+
85
+ /**
86
+ * 完成教程步骤
87
+ * @param {string} tutorialId - 教程 ID
88
+ * @param {string} stepId - 步骤 ID
89
+ */
90
+ async completeStep(tutorialId, stepId) {
91
+ return this.post(`/tutorials/${tutorialId}/steps/${stepId}/complete`);
92
+ }
93
+
94
+ /**
95
+ * 跳过教程
96
+ * @param {string} tutorialId - 教程 ID
97
+ */
98
+ async skipTutorial(tutorialId) {
99
+ return this.post(`/tutorials/${tutorialId}/skip`);
100
+ }
101
+
102
+ /**
103
+ * 获取整体进度
104
+ */
105
+ async getProgress() {
106
+ return this.get('/progress');
107
+ }
108
+
109
+ /**
110
+ * 重置教程进度
111
+ * @param {string} tutorialId - 教程 ID(可选,不传则重置全部)
112
+ */
113
+ async resetProgress(tutorialId = null) {
114
+ const endpoint = tutorialId ? `/tutorials/${tutorialId}/reset` : '/progress/reset';
115
+ return this.post(endpoint);
116
+ }
117
+
118
+ /**
119
+ * 获取推荐教程
120
+ */
121
+ async getRecommendedTutorials() {
122
+ return this.get('/tutorials/recommended');
123
+ }
124
+
125
+ /**
126
+ * 标记提示已读
127
+ * @param {string} tipId - 提示 ID
128
+ */
129
+ async dismissTip(tipId) {
130
+ return this.post(`/tips/${tipId}/dismiss`);
131
+ }
132
+
133
+ /**
134
+ * 获取新功能引导
135
+ */
136
+ async getNewFeatures() {
137
+ return this.get('/features/new');
138
+ }
139
+
140
+ /**
141
+ * 标记新功能已查看
142
+ * @param {string} featureId - 功能 ID
143
+ */
144
+ async markFeatureSeen(featureId) {
145
+ return this.post(`/features/${featureId}/seen`);
146
+ }
147
+ }
148
+
149
+ // 创建默认实例
150
+ const onboardingApi = new OnboardingApiClient();
151
+
152
+ /**
153
+ * Onboarding SDK - 国际化
154
+ */
155
+ const messages = {
156
+ en: {
157
+ next: 'Next',
158
+ prev: 'Previous',
159
+ skip: 'Skip',
160
+ done: 'Done',
161
+ startTutorial: 'Start Tutorial'
162
+ },
163
+ zh: {
164
+ next: '下一步',
165
+ prev: '上一步',
166
+ skip: '跳过',
167
+ done: '完成',
168
+ startTutorial: '开始教程'
169
+ },
170
+ ja: {
171
+ next: '次へ',
172
+ prev: '前へ',
173
+ skip: 'スキップ',
174
+ done: '完了',
175
+ startTutorial: 'チュートリアル開始'
176
+ },
177
+ ko: {
178
+ next: '다음',
179
+ prev: '이전',
180
+ skip: '건너뛰기',
181
+ done: '완료',
182
+ startTutorial: '튜토리얼 시작'
183
+ }
184
+ };
185
+ let currentLanguage = 'zh';
186
+ function setLanguage(lang) {
187
+ if (['en', 'zh', 'ja', 'ko'].includes(lang)) currentLanguage = lang;
188
+ }
189
+ function getLanguage() {
190
+ return currentLanguage;
191
+ }
192
+ function t(key) {
193
+ return messages[currentLanguage]?.[key] || messages.en[key] || key;
194
+ }
195
+
196
+ /**
197
+ * Onboarding SDK - React Hooks
198
+ */
199
+ function useTutorials() {
200
+ const [tutorials, setTutorials] = React.useState([]);
201
+ const [loading, setLoading] = React.useState(true);
202
+ React.useEffect(() => {
203
+ onboardingApi.getTutorials().then(setTutorials).finally(() => setLoading(false));
204
+ }, []);
205
+ return {
206
+ tutorials,
207
+ loading
208
+ };
209
+ }
210
+ function useTutorial(id) {
211
+ const [tutorial, setTutorial] = React.useState(null);
212
+ const [currentStep, setCurrentStep] = React.useState(0);
213
+ const [loading, setLoading] = React.useState(true);
214
+ React.useEffect(() => {
215
+ if (id) onboardingApi.getTutorial(id).then(setTutorial).finally(() => setLoading(false));
216
+ }, [id]);
217
+ const nextStep = React.useCallback(() => {
218
+ if (tutorial && currentStep < tutorial.steps.length - 1) {
219
+ onboardingApi.completeStep(id, tutorial.steps[currentStep].id);
220
+ setCurrentStep(s => s + 1);
221
+ }
222
+ }, [id, tutorial, currentStep]);
223
+ const prevStep = React.useCallback(() => setCurrentStep(s => Math.max(0, s - 1)), []);
224
+ const skip = React.useCallback(() => onboardingApi.skipTutorial(id), [id]);
225
+ return {
226
+ tutorial,
227
+ currentStep,
228
+ nextStep,
229
+ prevStep,
230
+ skip,
231
+ loading
232
+ };
233
+ }
234
+ function useOnboardingProgress() {
235
+ const [progress, setProgress] = React.useState(null);
236
+ const [loading, setLoading] = React.useState(true);
237
+ React.useEffect(() => {
238
+ onboardingApi.getProgress().then(setProgress).finally(() => setLoading(false));
239
+ }, []);
240
+ return {
241
+ progress,
242
+ loading
243
+ };
244
+ }
245
+
246
+ function Tooltip({
247
+ title,
248
+ content,
249
+ placement = 'bottom',
250
+ onNext,
251
+ onSkip,
252
+ isLast
253
+ }) {
254
+ return /*#__PURE__*/React.createElement("div", {
255
+ className: `onboarding-tooltip placement-${placement}`
256
+ }, /*#__PURE__*/React.createElement("h4", null, title), /*#__PURE__*/React.createElement("p", null, content), /*#__PURE__*/React.createElement("div", {
257
+ className: "onboarding-tooltip-actions"
258
+ }, /*#__PURE__*/React.createElement("button", {
259
+ className: "onboarding-btn text",
260
+ onClick: onSkip
261
+ }, t('skip')), /*#__PURE__*/React.createElement("button", {
262
+ className: "onboarding-btn primary",
263
+ onClick: onNext
264
+ }, isLast ? t('done') : t('next'))));
265
+ }
266
+ function CoachMark({
267
+ target,
268
+ children
269
+ }) {
270
+ return /*#__PURE__*/React.createElement("div", {
271
+ className: "onboarding-coach-mark"
272
+ }, /*#__PURE__*/React.createElement("div", {
273
+ className: "onboarding-spotlight"
274
+ }), children);
275
+ }
276
+ function StepIndicator({
277
+ total,
278
+ current
279
+ }) {
280
+ return /*#__PURE__*/React.createElement("div", {
281
+ className: "onboarding-step-indicator"
282
+ }, Array.from({
283
+ length: total
284
+ }, (_, i) => /*#__PURE__*/React.createElement("span", {
285
+ key: i,
286
+ className: `step-dot ${i === current ? 'active' : ''} ${i < current ? 'completed' : ''}`
287
+ })));
288
+ }
289
+ function TutorialOverlay({
290
+ tutorial,
291
+ currentStep,
292
+ onNext,
293
+ onPrev,
294
+ onSkip
295
+ }) {
296
+ if (!tutorial) return null;
297
+ const step = tutorial.steps[currentStep];
298
+ const isFirst = currentStep === 0;
299
+ const isLast = currentStep === tutorial.steps.length - 1;
300
+ return /*#__PURE__*/React.createElement("div", {
301
+ className: "onboarding-overlay"
302
+ }, /*#__PURE__*/React.createElement("div", {
303
+ className: "onboarding-modal"
304
+ }, /*#__PURE__*/React.createElement("h3", null, step.title), /*#__PURE__*/React.createElement("p", null, step.content), /*#__PURE__*/React.createElement(StepIndicator, {
305
+ total: tutorial.steps.length,
306
+ current: currentStep
307
+ }), /*#__PURE__*/React.createElement("div", {
308
+ className: "onboarding-modal-actions"
309
+ }, !isFirst && /*#__PURE__*/React.createElement("button", {
310
+ className: "onboarding-btn secondary",
311
+ onClick: onPrev
312
+ }, t('prev')), /*#__PURE__*/React.createElement("button", {
313
+ className: "onboarding-btn text",
314
+ onClick: onSkip
315
+ }, t('skip')), /*#__PURE__*/React.createElement("button", {
316
+ className: "onboarding-btn primary",
317
+ onClick: onNext
318
+ }, isLast ? t('done') : t('next')))));
319
+ }
320
+
321
+ exports.CoachMark = CoachMark;
322
+ exports.OnboardingApiClient = OnboardingApiClient;
323
+ exports.StepIndicator = StepIndicator;
324
+ exports.StepType = StepType;
325
+ exports.Tooltip = Tooltip;
326
+ exports.TutorialOverlay = TutorialOverlay;
327
+ exports.TutorialStatus = TutorialStatus;
328
+ exports.createDefaultStep = createDefaultStep;
329
+ exports.createDefaultTutorial = createDefaultTutorial;
330
+ exports.getLanguage = getLanguage;
331
+ exports.messages = messages;
332
+ exports.onboardingApi = onboardingApi;
333
+ exports.setLanguage = setLanguage;
334
+ exports.t = t;
335
+ exports.useOnboardingProgress = useOnboardingProgress;
336
+ exports.useTutorial = useTutorial;
337
+ exports.useTutorials = useTutorials;
338
+
339
+ return exports;
340
+
341
+ })({}, sdkConfig, React);
342
+ //# sourceMappingURL=index.iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.iife.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":";;;EAAA;EACA;EACA;;AAEO,QAAMA,QAAQ,GAAG;EACtBC,EAAAA,SAAS,EAAE,WAAW;EACtBC,EAAAA,KAAK,EAAE,OAAO;EACdC,EAAAA,OAAO,EAAE,SAAS;EAClBC,EAAAA,UAAU,EAAE;EACd;AAEO,QAAMC,cAAc,GAAG;EAC5BC,EAAAA,WAAW,EAAE,aAAa;EAC1BC,EAAAA,WAAW,EAAE,aAAa;EAC1BC,EAAAA,SAAS,EAAE,WAAW;EACtBC,EAAAA,OAAO,EAAE;EACX;EAEO,SAASC,iBAAiBA,GAAG;IAClC,OAAO;EACLC,IAAAA,EAAE,EAAE,EAAE;MACNC,IAAI,EAAEZ,QAAQ,CAACG,OAAO;EACtBU,IAAAA,KAAK,EAAE,EAAE;EACTC,IAAAA,OAAO,EAAE,EAAE;EACXC,IAAAA,MAAM,EAAE,IAAI;EACZC,IAAAA,SAAS,EAAE,QAAQ;EACnBC,IAAAA,KAAK,EAAE,CAAC;EACRC,IAAAA,MAAM,EAAE;KACT;EACH;EAEO,SAASC,qBAAqBA,GAAG;IACtC,OAAO;EACLR,IAAAA,EAAE,EAAE,EAAE;EACNS,IAAAA,IAAI,EAAE,EAAE;EACRC,IAAAA,WAAW,EAAE,EAAE;EACfC,IAAAA,KAAK,EAAE,EAAE;MACTC,MAAM,EAAElB,cAAc,CAACC,WAAW;EAClCkB,IAAAA,WAAW,EAAE;KACd;EACH;;ECxCA;EACA;EACA;EACA;EACA;EACA;;;EAIA;EACA;EACA;EACO,MAAMC,mBAAmB,SAASC,uBAAa,CAAC;EACrDC,EAAAA,WAAWA,CAACC,MAAM,GAAG,EAAE,EAAE;EACvB;EACA,IAAA,KAAK,CAAC,aAAa,EAAEA,MAAM,CAAC;EAC9B,EAAA;;EAEA;;EAEA;EACF;EACA;IACE,MAAMC,YAAYA,GAAG;EACnB,IAAA,OAAO,IAAI,CAACC,GAAG,CAAC,YAAY,CAAC;EAC/B,EAAA;;EAEA;EACF;EACA;EACA;IACE,MAAMC,WAAWA,CAACC,UAAU,EAAE;EAC5B,IAAA,OAAO,IAAI,CAACF,GAAG,CAAC,CAAA,WAAA,EAAcE,UAAU,EAAE,CAAC;EAC7C,EAAA;;EAEA;EACF;EACA;EACA;IACE,MAAMC,aAAaA,CAACD,UAAU,EAAE;EAC9B,IAAA,OAAO,IAAI,CAACE,IAAI,CAAC,CAAA,WAAA,EAAcF,UAAU,QAAQ,CAAC;EACpD,EAAA;;EAEA;EACF;EACA;EACA;EACA;EACE,EAAA,MAAMG,YAAYA,CAACH,UAAU,EAAEI,MAAM,EAAE;MACrC,OAAO,IAAI,CAACF,IAAI,CAAC,cAAcF,UAAU,CAAA,OAAA,EAAUI,MAAM,CAAA,SAAA,CAAW,CAAC;EACvE,EAAA;;EAEA;EACF;EACA;EACA;IACE,MAAMC,YAAYA,CAACL,UAAU,EAAE;EAC7B,IAAA,OAAO,IAAI,CAACE,IAAI,CAAC,CAAA,WAAA,EAAcF,UAAU,OAAO,CAAC;EACnD,EAAA;;EAEA;EACF;EACA;IACE,MAAMM,WAAWA,GAAG;EAClB,IAAA,OAAO,IAAI,CAACR,GAAG,CAAC,WAAW,CAAC;EAC9B,EAAA;;EAEA;EACF;EACA;EACA;EACE,EAAA,MAAMS,aAAaA,CAACP,UAAU,GAAG,IAAI,EAAE;MACrC,MAAMQ,QAAQ,GAAGR,UAAU,GAAG,cAAcA,UAAU,CAAA,MAAA,CAAQ,GAAG,iBAAiB;EAClF,IAAA,OAAO,IAAI,CAACE,IAAI,CAACM,QAAQ,CAAC;EAC5B,EAAA;;EAEA;EACF;EACA;IACE,MAAMC,uBAAuBA,GAAG;EAC9B,IAAA,OAAO,IAAI,CAACX,GAAG,CAAC,wBAAwB,CAAC;EAC3C,EAAA;;EAEA;EACF;EACA;EACA;IACE,MAAMY,UAAUA,CAACC,KAAK,EAAE;EACtB,IAAA,OAAO,IAAI,CAACT,IAAI,CAAC,CAAA,MAAA,EAASS,KAAK,UAAU,CAAC;EAC5C,EAAA;;EAEA;EACF;EACA;IACE,MAAMC,cAAcA,GAAG;EACrB,IAAA,OAAO,IAAI,CAACd,GAAG,CAAC,eAAe,CAAC;EAClC,EAAA;;EAEA;EACF;EACA;EACA;IACE,MAAMe,eAAeA,CAACC,SAAS,EAAE;EAC/B,IAAA,OAAO,IAAI,CAACZ,IAAI,CAAC,CAAA,UAAA,EAAaY,SAAS,OAAO,CAAC;EACjD,EAAA;EACF;;EAEA;QACaC,aAAa,GAAG,IAAItB,mBAAmB;;EC5GpD;EACA;EACA;AACA,QAAMuB,QAAQ,GAAG;EACfC,EAAAA,EAAE,EAAE;EAAEC,IAAAA,IAAI,EAAE,MAAM;EAAEC,IAAAA,IAAI,EAAE,UAAU;EAAEC,IAAAA,IAAI,EAAE,MAAM;EAAEC,IAAAA,IAAI,EAAE,MAAM;EAAEpB,IAAAA,aAAa,EAAE;KAAkB;EACnGqB,EAAAA,EAAE,EAAE;EAAEJ,IAAAA,IAAI,EAAE,KAAK;EAAEC,IAAAA,IAAI,EAAE,KAAK;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEpB,IAAAA,aAAa,EAAE;KAAQ;EAC/EsB,EAAAA,EAAE,EAAE;EAAEL,IAAAA,IAAI,EAAE,IAAI;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEC,IAAAA,IAAI,EAAE,MAAM;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEpB,IAAAA,aAAa,EAAE;KAAa;EACpFuB,EAAAA,EAAE,EAAE;EAAEN,IAAAA,IAAI,EAAE,IAAI;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEC,IAAAA,IAAI,EAAE,MAAM;EAAEC,IAAAA,IAAI,EAAE,IAAI;EAAEpB,IAAAA,aAAa,EAAE;EAAU;EACnF;EACA,IAAIwB,eAAe,GAAG,IAAI;EACnB,SAASC,WAAWA,CAACC,IAAI,EAAE;EAAE,EAAA,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAACC,QAAQ,CAACD,IAAI,CAAC,EAAEF,eAAe,GAAGE,IAAI;EAAE;EAClG,SAASE,WAAWA,GAAG;EAAE,EAAA,OAAOJ,eAAe;EAAE;EACjD,SAASK,CAACA,CAACC,GAAG,EAAE;EAAE,EAAA,OAAOf,QAAQ,CAACS,eAAe,CAAC,GAAGM,GAAG,CAAC,IAAIf,QAAQ,CAACC,EAAE,CAACc,GAAG,CAAC,IAAIA,GAAG;EAAE;;ECZ7F;EACA;EACA;EAIO,SAASC,YAAYA,GAAG;IAC7B,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGC,cAAQ,CAAC,EAAE,CAAC;IAC9C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGF,cAAQ,CAAC,IAAI,CAAC;EAC5CG,EAAAA,eAAS,CAAC,MAAM;EACdvB,IAAAA,aAAa,CAAClB,YAAY,EAAE,CAAC0C,IAAI,CAACL,YAAY,CAAC,CAACM,OAAO,CAAC,MAAMH,UAAU,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC,EAAE,EAAE,CAAC;IACN,OAAO;MAAEJ,SAAS;EAAEG,IAAAA;KAAS;EAC/B;EAEO,SAASK,WAAWA,CAAC9D,EAAE,EAAE;IAC9B,MAAM,CAAC+D,QAAQ,EAAEC,WAAW,CAAC,GAAGR,cAAQ,CAAC,IAAI,CAAC;IAC9C,MAAM,CAAC3C,WAAW,EAAEoD,cAAc,CAAC,GAAGT,cAAQ,CAAC,CAAC,CAAC;IACjD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGF,cAAQ,CAAC,IAAI,CAAC;EAE5CG,EAAAA,eAAS,CAAC,MAAM;MACd,IAAI3D,EAAE,EAAEoC,aAAa,CAAChB,WAAW,CAACpB,EAAE,CAAC,CAAC4D,IAAI,CAACI,WAAW,CAAC,CAACH,OAAO,CAAC,MAAMH,UAAU,CAAC,KAAK,CAAC,CAAC;EAC1F,EAAA,CAAC,EAAE,CAAC1D,EAAE,CAAC,CAAC;EAER,EAAA,MAAMkE,QAAQ,GAAGC,iBAAW,CAAC,MAAM;MACjC,IAAIJ,QAAQ,IAAIlD,WAAW,GAAGkD,QAAQ,CAACpD,KAAK,CAACyD,MAAM,GAAG,CAAC,EAAE;EACvDhC,MAAAA,aAAa,CAACZ,YAAY,CAACxB,EAAE,EAAE+D,QAAQ,CAACpD,KAAK,CAACE,WAAW,CAAC,CAACb,EAAE,CAAC;EAC9DiE,MAAAA,cAAc,CAACI,CAAC,IAAIA,CAAC,GAAG,CAAC,CAAC;EAC5B,IAAA;IACF,CAAC,EAAE,CAACrE,EAAE,EAAE+D,QAAQ,EAAElD,WAAW,CAAC,CAAC;IAE/B,MAAMyD,QAAQ,GAAGH,iBAAW,CAAC,MAAMF,cAAc,CAACI,CAAC,IAAIE,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEH,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;EAC/E,EAAA,MAAM5B,IAAI,GAAG0B,iBAAW,CAAC,MAAM/B,aAAa,CAACV,YAAY,CAAC1B,EAAE,CAAC,EAAE,CAACA,EAAE,CAAC,CAAC;IAEpE,OAAO;MAAE+D,QAAQ;MAAElD,WAAW;MAAEqD,QAAQ;MAAEI,QAAQ;MAAE7B,IAAI;EAAEgB,IAAAA;KAAS;EACrE;EAEO,SAASgB,qBAAqBA,GAAG;IACtC,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGnB,cAAQ,CAAC,IAAI,CAAC;IAC9C,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGF,cAAQ,CAAC,IAAI,CAAC;EAC5CG,EAAAA,eAAS,CAAC,MAAM;EACdvB,IAAAA,aAAa,CAACT,WAAW,EAAE,CAACiC,IAAI,CAACe,WAAW,CAAC,CAACd,OAAO,CAAC,MAAMH,UAAU,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC,EAAE,EAAE,CAAC;IACN,OAAO;MAAEgB,QAAQ;EAAEjB,IAAAA;KAAS;EAC9B;;ECzCO,SAASmB,OAAOA,CAAC;IAAE1E,KAAK;IAAEC,OAAO;EAAEE,EAAAA,SAAS,GAAG,QAAQ;IAAEwE,MAAM;IAAEC,MAAM;EAAEC,EAAAA;EAAO,CAAC,EAAE;IACxF,oBACEC,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;MAAKC,SAAS,EAAE,gCAAgC7E,SAAS,CAAA;EAAG,GAAA,eAC1D2E,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAK/E,KAAU,CAAC,eAChB8E,KAAA,CAAAC,aAAA,YAAI9E,OAAW,CAAC,eAChB6E,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAA4B,eACzCF,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;EAAQC,IAAAA,SAAS,EAAC,qBAAqB;EAACC,IAAAA,OAAO,EAAEL;KAAO,EAAE3B,CAAC,CAAC,MAAM,CAAU,CAAC,eAC7E6B,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;EAAQC,IAAAA,SAAS,EAAC,wBAAwB;EAACC,IAAAA,OAAO,EAAEN;EAAO,GAAA,EACxDE,MAAM,GAAG5B,CAAC,CAAC,MAAM,CAAC,GAAGA,CAAC,CAAC,MAAM,CACxB,CACL,CACF,CAAC;EAEV;EAEO,SAASiC,SAASA,CAAC;IAAEhF,MAAM;EAAEiF,EAAAA;EAAS,CAAC,EAAE;IAC9C,oBACEL,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAAuB,eACpCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAAwB,CAAC,EACvCG,QACE,CAAC;EAEV;EAEO,SAASC,aAAaA,CAAC;IAAEC,KAAK;EAAEC,EAAAA;EAAQ,CAAC,EAAE;IAChD,oBACER,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAA2B,EACvCO,KAAK,CAACC,IAAI,CAAC;EAAEtB,IAAAA,MAAM,EAAEmB;KAAO,EAAE,CAACI,CAAC,EAAEC,CAAC,kBAClCZ,KAAA,CAAAC,aAAA,CAAA,MAAA,EAAA;EAAM7B,IAAAA,GAAG,EAAEwC,CAAE;EAACV,IAAAA,SAAS,EAAE,CAAA,SAAA,EAAYU,CAAC,KAAKJ,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAA,CAAA,EAAII,CAAC,GAAGJ,OAAO,GAAG,WAAW,GAAG,EAAE,CAAA;KAAK,CAC1G,CACE,CAAC;EAEV;EAEO,SAASK,eAAeA,CAAC;IAAE9B,QAAQ;IAAElD,WAAW;IAAEgE,MAAM;IAAEiB,MAAM;EAAEhB,EAAAA;EAAO,CAAC,EAAE;EACjF,EAAA,IAAI,CAACf,QAAQ,EAAE,OAAO,IAAI;EAC1B,EAAA,MAAMgC,IAAI,GAAGhC,QAAQ,CAACpD,KAAK,CAACE,WAAW,CAAC;EACxC,EAAA,MAAMmF,OAAO,GAAGnF,WAAW,KAAK,CAAC;IACjC,MAAMkE,MAAM,GAAGlE,WAAW,KAAKkD,QAAQ,CAACpD,KAAK,CAACyD,MAAM,GAAG,CAAC;IAExD,oBACEY,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAAoB,eACjCF,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;KAAkB,eAC/BF,KAAA,CAAAC,aAAA,CAAA,IAAA,EAAA,IAAA,EAAKc,IAAI,CAAC7F,KAAU,CAAC,eACrB8E,KAAA,CAAAC,aAAA,CAAA,GAAA,EAAA,IAAA,EAAIc,IAAI,CAAC5F,OAAW,CAAC,eACrB6E,KAAA,CAAAC,aAAA,CAACK,aAAa,EAAA;EAACC,IAAAA,KAAK,EAAExB,QAAQ,CAACpD,KAAK,CAACyD,MAAO;EAACoB,IAAAA,OAAO,EAAE3E;EAAY,GAAE,CAAC,eACrEmE,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;EAAKC,IAAAA,SAAS,EAAC;EAA0B,GAAA,EACtC,CAACc,OAAO,iBAAIhB,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;EAAQC,IAAAA,SAAS,EAAC,0BAA0B;EAACC,IAAAA,OAAO,EAAEW;KAAO,EAAE3C,CAAC,CAAC,MAAM,CAAU,CAAC,eAC/F6B,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;EAAQC,IAAAA,SAAS,EAAC,qBAAqB;EAACC,IAAAA,OAAO,EAAEL;KAAO,EAAE3B,CAAC,CAAC,MAAM,CAAU,CAAC,eAC7E6B,KAAA,CAAAC,aAAA,CAAA,QAAA,EAAA;EAAQC,IAAAA,SAAS,EAAC,wBAAwB;EAACC,IAAAA,OAAO,EAAEN;EAAO,GAAA,EACxDE,MAAM,GAAG5B,CAAC,CAAC,MAAM,CAAC,GAAGA,CAAC,CAAC,MAAM,CACxB,CACL,CACF,CACF,CAAC;EAEV;;;;;;;;;;;;;;;;;;;;;;;;;;"}