collabdocchat 2.0.4 → 2.0.5

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.
@@ -1,7 +1,6 @@
1
1
  /**
2
2
  * 新手引导系统
3
- * 提供交互式的新手引导和帮助
4
- */
3
+ * 提供交互式的新手引导和帮�? */
5
4
 
6
5
  export class OnboardingGuide {
7
6
  constructor() {
@@ -41,46 +40,45 @@ export class OnboardingGuide {
41
40
  return [
42
41
  {
43
42
  target: '.sidebar',
44
- title: '欢迎使用 CollabDocChat!',
45
- content: '这是侧边栏,您可以在这里访问所有主要功能。',
43
+ title: '欢迎使用 CollabDocChat�?,
44
+ content: '这是侧边栏,您可以在这里访问所有主要功能�?,
46
45
  position: 'right'
47
46
  },
48
47
  {
49
48
  target: '.nav-item[data-view="groups"]',
50
49
  title: '群组管理',
51
- content: '点击这里可以创建和管理群组,邀请成员加入。',
50
+ content: '点击这里可以创建和管理群组,邀请成员加入�?,
52
51
  position: 'right'
53
52
  },
54
53
  {
55
54
  target: '.nav-item[data-view="chat"]',
56
55
  title: '群聊功能',
57
- content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能。',
56
+ content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能�?,
58
57
  position: 'right'
59
58
  },
60
59
  {
61
60
  target: '.nav-item[data-view="documents"]',
62
61
  title: '文档协作',
63
- content: '创建和编辑文档,支持多人实时协作编辑。',
62
+ content: '创建和编辑文档,支持多人实时协作编辑�?,
64
63
  position: 'right'
65
64
  },
66
65
  {
67
66
  target: '.nav-item[data-view="tasks"]',
68
67
  title: '任务管理',
69
- content: '创建任务、分配给团队成员,跟踪任务进度。',
68
+ content: '创建任务、分配给团队成员,跟踪任务进度�?,
70
69
  position: 'right'
71
70
  },
72
71
  {
73
72
  target: '.user-info',
74
73
  title: '个人信息',
75
- content: '这里显示您的个人信息和在线状态。',
74
+ content: '这里显示您的个人信息和在线状态�?,
76
75
  position: 'right'
77
76
  }
78
77
  ];
79
78
  }
80
79
 
81
80
  /**
82
- * 开始引导
83
- */
81
+ * 开始引�? */
84
82
  start() {
85
83
  if (this.hasCompleted) {
86
84
  const restart = confirm('您已经完成过新手引导,是否重新开始?');
@@ -106,11 +104,9 @@ export class OnboardingGuide {
106
104
  const step = steps[stepIndex];
107
105
  this.currentStep = stepIndex;
108
106
 
109
- // 移除之前的引导元素
110
- this.removeGuideElements();
107
+ // 移除之前的引导元�? this.removeGuideElements();
111
108
 
112
- // 创建遮罩层
113
- const overlay = document.createElement('div');
109
+ // 创建遮罩�? const overlay = document.createElement('div');
114
110
  overlay.className = 'onboarding-overlay';
115
111
  overlay.id = 'onboardingOverlay';
116
112
  document.body.appendChild(overlay);
@@ -130,8 +126,7 @@ export class OnboardingGuide {
130
126
 
131
127
  document.body.appendChild(spotlight);
132
128
 
133
- // 创建提示框
134
- const tooltip = document.createElement('div');
129
+ // 创建提示�? const tooltip = document.createElement('div');
135
130
  tooltip.className = 'onboarding-tooltip';
136
131
  tooltip.id = 'onboardingTooltip';
137
132
 
@@ -148,16 +143,15 @@ export class OnboardingGuide {
148
143
  ${stepIndex + 1} / ${steps.length}
149
144
  </div>
150
145
  <div class="tooltip-actions">
151
- ${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一步</button>' : ''}
146
+ ${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一�?/button>' : ''}
152
147
  ${stepIndex < steps.length - 1 ?
153
- '<button class="btn-primary" id="nextStep">下一步</button>' :
148
+ '<button class="btn-primary" id="nextStep">下一�?/button>' :
154
149
  '<button class="btn-primary" id="finishOnboarding">完成</button>'}
155
150
  </div>
156
151
  </div>
157
152
  `;
158
153
 
159
- // 定位提示框
160
- this.positionTooltip(tooltip, rect, step.position);
154
+ // 定位提示�? this.positionTooltip(tooltip, rect, step.position);
161
155
  document.body.appendChild(tooltip);
162
156
 
163
157
  // 添加事件监听
@@ -166,8 +160,7 @@ export class OnboardingGuide {
166
160
  }
167
161
 
168
162
  /**
169
- * 定位提示框
170
- */
163
+ * 定位提示�? */
171
164
  positionTooltip(tooltip, targetRect, position) {
172
165
  document.body.appendChild(tooltip);
173
166
  const tooltipRect = tooltip.getBoundingClientRect();
@@ -196,8 +189,7 @@ export class OnboardingGuide {
196
189
  left = targetRect.right + 20;
197
190
  }
198
191
 
199
- // 确保提示框在视口内
200
- if (left < 10) left = 10;
192
+ // 确保提示框在视口�? if (left < 10) left = 10;
201
193
  if (left + tooltipRect.width > window.innerWidth - 10) {
202
194
  left = window.innerWidth - tooltipRect.width - 10;
203
195
  }
@@ -252,7 +244,7 @@ export class OnboardingGuide {
252
244
  * 跳过引导
253
245
  */
254
246
  skip() {
255
- if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始。')) {
247
+ if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始�?)) {
256
248
  this.removeGuideElements();
257
249
  this.isActive = false;
258
250
  }
@@ -266,12 +258,11 @@ export class OnboardingGuide {
266
258
  this.markCompleted();
267
259
  this.isActive = false;
268
260
 
269
- alert('恭喜!您已完成新手引导。现在可以开始使用 CollabDocChat 了!');
261
+ alert('恭喜!您已完成新手引导。现在可以开始使�?CollabDocChat 了!');
270
262
  }
271
263
 
272
264
  /**
273
- * 显示帮助中心(优化后的卡片式布局)
274
- */
265
+ * 显示帮助中心(优化后的卡片式布局�? */
275
266
  showHelpCenter(container) {
276
267
  container.innerHTML = `
277
268
  <div class="view-header">
@@ -281,25 +272,25 @@ export class OnboardingGuide {
281
272
  <div class="help-cards-grid">
282
273
  <div class="help-card">
283
274
  <div class="help-icon">🚀</div>
284
- <h3>快速开始</h3>
275
+ <h3>快速开�?/h3>
285
276
  <ul>
286
277
  <li><a href="#" data-action="start-guide">新手引导</a></li>
287
- <li><a href="#" data-action="show-shortcuts">键盘快捷键</a></li>
288
- <li><a href="#" data-action="show-tips">使用技巧</a></li>
278
+ <li><a href="#" data-action="show-shortcuts">键盘快捷�?/a></li>
279
+ <li><a href="#" data-action="show-tips">使用技�?/a></li>
289
280
  </ul>
290
- <button class="btn-help-detail" data-topic="quickstart">查看详情 →</button>
281
+ <button class="btn-help-detail" data-topic="quickstart">查看详情 �?/button>
291
282
  </div>
292
283
 
293
284
  <div class="help-card">
294
285
  <div class="help-icon">💬</div>
295
286
  <h3>聊天功能</h3>
296
287
  <ul>
297
- <li>如何发送消息</li>
288
+ <li>如何发送消�?/li>
298
289
  <li>如何@提及用户</li>
299
290
  <li>如何撤回消息</li>
300
- <li>如何查看已读状态</li>
291
+ <li>如何查看已读状�?/li>
301
292
  </ul>
302
- <button class="btn-help-detail" data-topic="chat">查看详情 →</button>
293
+ <button class="btn-help-detail" data-topic="chat">查看详情 �?/button>
303
294
  </div>
304
295
 
305
296
  <div class="help-card">
@@ -307,11 +298,11 @@ export class OnboardingGuide {
307
298
  <h3>文档协作</h3>
308
299
  <ul>
309
300
  <li>如何创建文档</li>
310
- <li>如何邀请协作</li>
301
+ <li>如何邀请协�?/li>
311
302
  <li>如何查看编辑历史</li>
312
303
  <li>如何导出文档</li>
313
304
  </ul>
314
- <button class="btn-help-detail" data-topic="documents">查看详情 →</button>
305
+ <button class="btn-help-detail" data-topic="documents">查看详情 �?/button>
315
306
  </div>
316
307
 
317
308
  <div class="help-card">
@@ -323,7 +314,7 @@ export class OnboardingGuide {
323
314
  <li>如何跟踪进度</li>
324
315
  <li>如何设置提醒</li>
325
316
  </ul>
326
- <button class="btn-help-detail" data-topic="tasks">查看详情 →</button>
317
+ <button class="btn-help-detail" data-topic="tasks">查看详情 �?/button>
327
318
  </div>
328
319
 
329
320
  <div class="help-card">
@@ -335,24 +326,24 @@ export class OnboardingGuide {
335
326
  <li>如何设置权限</li>
336
327
  <li>如何导出数据</li>
337
328
  </ul>
338
- <button class="btn-help-detail" data-topic="settings">查看详情 →</button>
329
+ <button class="btn-help-detail" data-topic="settings">查看详情 �?/button>
339
330
  </div>
340
331
 
341
332
  <div class="help-card">
342
- <div class="help-icon">❓</div>
333
+ <div class="help-icon">�?/div>
343
334
  <h3>常见问题</h3>
344
335
  <ul>
345
336
  <li>忘记密码怎么办?</li>
346
- <li>如何邀请新成员?</li>
347
- <li>如何删除群组?</li>
348
- <li>如何联系支持?</li>
337
+ <li>如何邀请新成员�?/li>
338
+ <li>如何删除群组�?/li>
339
+ <li>如何联系支持�?/li>
349
340
  </ul>
350
- <button class="btn-help-detail" data-topic="faq">查看详情 →</button>
341
+ <button class="btn-help-detail" data-topic="faq">查看详情 �?/button>
351
342
  </div>
352
343
  </div>
353
344
 
354
345
  <div class="help-footer-actions">
355
- <h3>还有其他问题?</h3>
346
+ <h3>还有其他问题�?/h3>
356
347
  <div class="help-action-buttons">
357
348
  <button class="btn-primary" id="contactSupport">
358
349
  <span>📧</span> 联系支持
@@ -387,7 +378,7 @@ export class OnboardingGuide {
387
378
  });
388
379
 
389
380
  container.querySelector('#contactSupport')?.addEventListener('click', () => {
390
- alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue。');
381
+ alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?);
391
382
  });
392
383
 
393
384
  container.querySelector('#videoTutorials')?.addEventListener('click', () => {
@@ -541,99 +532,99 @@ export class OnboardingGuide {
541
532
  showHelpDetail(topic, container) {
542
533
  const details = {
543
534
  quickstart: {
544
- title: '🚀 快速开始',
535
+ title: '🚀 快速开�?,
545
536
  content: `
546
- <h4>欢迎使用 CollabDocChat!</h4>
547
- <p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能。</p>
537
+ <h4>欢迎使用 CollabDocChat�?/h4>
538
+ <p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能�?/p>
548
539
 
549
540
  <h4>第一步:创建群组</h4>
550
- <p>点击左侧菜单的"群组管理",创建您的第一个群组并邀请成员。</p>
541
+ <p>点击左侧菜单�?群组管理",创建您的第一个群组并邀请成员�?/p>
551
542
 
552
- <h4>第二步:开始聊天</h4>
553
- <p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号。</p>
543
+ <h4>第二步:开始聊�?/h4>
544
+ <p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号�?/p>
554
545
 
555
546
  <h4>第三步:创建文档</h4>
556
- <p>点击"文档管理"创建协作文档,支持多人实时编辑。</p>
547
+ <p>点击"文档管理"创建协作文档,支持多人实时编辑�?/p>
557
548
  `
558
549
  },
559
550
  chat: {
560
551
  title: '💬 聊天功能详解',
561
552
  content: `
562
- <h4>发送消息</h4>
563
- <p>在输入框中输入消息,按 Enter 或点击发送按钮即可发送。</p>
553
+ <h4>发送消�?/h4>
554
+ <p>在输入框中输入消息,�?Enter 或点击发送按钮即可发送�?/p>
564
555
 
565
556
  <h4>@提及用户</h4>
566
- <p>输入 @ 符号会弹出成员列表,选择要提及的成员即可。</p>
557
+ <p>输入 @ 符号会弹出成员列表,选择要提及的成员即可�?/p>
567
558
 
568
559
  <h4>撤回消息</h4>
569
- <p>鼠标悬停在消息上,点击"撤回"按钮可以撤回消息(2分钟内)。</p>
560
+ <p>鼠标悬停在消息上,点�?撤回"按钮可以撤回消息�?分钟内)�?/p>
570
561
 
571
- <h4>查看已读状态</h4>
572
- <p>消息右下角会显示已读/未读状态,点击可查看详细信息。</p>
562
+ <h4>查看已读状�?/h4>
563
+ <p>消息右下角会显示已读/未读状态,点击可查看详细信息�?/p>
573
564
  `
574
565
  },
575
566
  documents: {
576
567
  title: '📄 文档协作指南',
577
568
  content: `
578
569
  <h4>创建文档</h4>
579
- <p>点击"文档管理" "创建文档",输入标题和内容即可。</p>
570
+ <p>点击"文档管理" �?"创建文档",输入标题和内容即可�?/p>
580
571
 
581
- <h4>邀请协作</h4>
582
- <p>在文档详情页点击"邀请协作",选择要邀请的成员。</p>
572
+ <h4>邀请协�?/h4>
573
+ <p>在文档详情页点击"邀请协�?,选择要邀请的成员�?/p>
583
574
 
584
575
  <h4>实时编辑</h4>
585
- <p>多人可以同时编辑文档,所有更改会实时同步。</p>
576
+ <p>多人可以同时编辑文档,所有更改会实时同步�?/p>
586
577
 
587
578
  <h4>查看历史</h4>
588
- <p>点击"编辑历史"可以查看所有修改记录,支持版本回退。</p>
579
+ <p>点击"编辑历史"可以查看所有修改记录,支持版本回退�?/p>
589
580
  `
590
581
  },
591
582
  tasks: {
592
583
  title: '📋 任务管理教程',
593
584
  content: `
594
585
  <h4>创建任务</h4>
595
- <p>点击"任务管理" "创建任务",填写任务信息。</p>
586
+ <p>点击"任务管理" �?"创建任务",填写任务信息�?/p>
596
587
 
597
588
  <h4>分配任务</h4>
598
- <p>在任务详情中选择负责人,可以分配给多个成员。</p>
589
+ <p>在任务详情中选择负责人,可以分配给多个成员�?/p>
599
590
 
600
591
  <h4>跟踪进度</h4>
601
- <p>任务状态包括:待处理、进行中、已完成、已终止。</p>
592
+ <p>任务状态包括:待处理、进行中、已完成、已终止�?/p>
602
593
 
603
594
  <h4>设置提醒</h4>
604
- <p>可以设置任务截止时间,系统会自动发送提醒。</p>
595
+ <p>可以设置任务截止时间,系统会自动发送提醒�?/p>
605
596
  `
606
597
  },
607
598
  settings: {
608
599
  title: '⚙️ 设置指南',
609
600
  content: `
610
601
  <h4>更改主题</h4>
611
- <p>点击"设置" "主题设置",选择您喜欢的主题风格。</p>
602
+ <p>点击"设置" �?"主题设置",选择您喜欢的主题风格�?/p>
612
603
 
613
604
  <h4>管理通知</h4>
614
- <p>在"通知设置"中可以配置桌面通知、声音提示等。</p>
605
+ <p>�?通知设置"中可以配置桌面通知、声音提示等�?/p>
615
606
 
616
607
  <h4>设置权限</h4>
617
- <p>管理员可以在"权限管理"中设置用户权限。</p>
608
+ <p>管理员可以在"权限管理"中设置用户权限�?/p>
618
609
 
619
610
  <h4>导出数据</h4>
620
- <p>在"数据管理"中可以导出您的聊天记录和文档。</p>
611
+ <p>�?数据管理"中可以导出您的聊天记录和文档�?/p>
621
612
  `
622
613
  },
623
614
  faq: {
624
- title: '❓ 常见问题解答',
615
+ title: '�?常见问题解答',
625
616
  content: `
626
617
  <h4>忘记密码怎么办?</h4>
627
- <p>点击登录页面的"忘记密码",输入邮箱即可重置密码。</p>
618
+ <p>点击登录页面�?忘记密码",输入邮箱即可重置密码�?/p>
628
619
 
629
- <h4>如何邀请新成员?</h4>
630
- <p>在群组管理页面点击"管理成员" "添加成员"。</p>
620
+ <h4>如何邀请新成员�?/h4>
621
+ <p>在群组管理页面点�?管理成员" �?"添加成员"�?/p>
631
622
 
632
- <h4>如何删除群组?</h4>
633
- <p>只有群组创建者可以删除群组,在群组设置中操作。</p>
623
+ <h4>如何删除群组�?/h4>
624
+ <p>只有群组创建者可以删除群组,在群组设置中操作�?/p>
634
625
 
635
- <h4>如何联系支持?</h4>
636
- <p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue。</p>
626
+ <h4>如何联系支持�?/h4>
627
+ <p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?/p>
637
628
  `
638
629
  }
639
630
  };
@@ -675,15 +666,14 @@ export class OnboardingGuide {
675
666
  }
676
667
 
677
668
  /**
678
- * 显示快捷键
679
- */
669
+ * 显示快捷�? */
680
670
  showShortcuts() {
681
671
  const shortcuts = [
682
672
  { key: 'Ctrl + S', action: '保存文档' },
683
- { key: 'Ctrl + Enter', action: '发送消息' },
673
+ { key: 'Ctrl + Enter', action: '发送消�? },
684
674
  { key: 'Ctrl + K', action: '搜索' },
685
- { key: 'Ctrl + /', action: '显示快捷键' },
686
- { key: 'Esc', action: '关闭对话框' },
675
+ { key: 'Ctrl + /', action: '显示快捷�? },
676
+ { key: 'Esc', action: '关闭对话�? },
687
677
  { key: '@', action: '提及用户' }
688
678
  ];
689
679
 
@@ -691,7 +681,7 @@ export class OnboardingGuide {
691
681
  modal.className = 'modal';
692
682
  modal.innerHTML = `
693
683
  <div class="modal-content">
694
- <h3>⌨️ 键盘快捷键</h3>
684
+ <h3>⌨️ 键盘快捷�?/h3>
695
685
  <table class="shortcuts-table">
696
686
  ${shortcuts.map(s => `
697
687
  <tr>
@@ -712,14 +702,13 @@ export class OnboardingGuide {
712
702
  }
713
703
 
714
704
  /**
715
- * 显示使用技巧
716
- */
705
+ * 显示使用技�? */
717
706
  showTips() {
718
707
  const tips = [
719
- '💡 使用 @ 符号可以快速提及团队成员',
720
- '💡 双击消息可以快速回复',
721
- '💡 拖拽文件到聊天框可以快速上传',
722
- '💡 使用 Ctrl+Enter 可以快速发送消息',
708
+ '💡 使用 @ 符号可以快速提及团队成�?,
709
+ '💡 双击消息可以快速回�?,
710
+ '💡 拖拽文件到聊天框可以快速上�?,
711
+ '💡 使用 Ctrl+Enter 可以快速发送消�?,
723
712
  '💡 点击用户头像可以查看详细信息',
724
713
  '💡 长按消息可以显示更多操作'
725
714
  ];
@@ -59,7 +59,7 @@ export class VirtualScroller {
59
59
  // 清空内容
60
60
  this.content.innerHTML = '';
61
61
 
62
- // 渲染可见项
62
+ // 渲染可见�?
63
63
  for (let i = this.visibleStart; i < this.visibleEnd; i++) {
64
64
  const item = this.items[i];
65
65
  const element = this.renderItem(item, i);
@@ -83,7 +83,7 @@ export class VirtualScroller {
83
83
  }
84
84
 
85
85
  /**
86
- * 图片懒加载
86
+ * 图片懒加�?
87
87
  */
88
88
  export class LazyLoader {
89
89
  constructor(options = {}) {
@@ -115,7 +115,7 @@ export class LazyLoader {
115
115
  // 添加加载中类
116
116
  element.classList.add(this.loadingClass);
117
117
 
118
- // 开始观察
118
+ // 开始观�?
119
119
  this.observer.observe(element);
120
120
  }
121
121
 
@@ -199,7 +199,7 @@ export function throttle(func, limit = 300) {
199
199
  }
200
200
 
201
201
  /**
202
- * 请求动画帧节流
202
+ * 请求动画帧节�?
203
203
  */
204
204
  export function rafThrottle(func) {
205
205
  let rafId = null;
@@ -214,7 +214,7 @@ export function rafThrottle(func) {
214
214
  }
215
215
 
216
216
  /**
217
- * 代码分割 - 动态导入
217
+ * 代码分割 - 动态导�?
218
218
  */
219
219
  export async function loadModule(modulePath) {
220
220
  try {
@@ -227,7 +227,7 @@ export async function loadModule(modulePath) {
227
227
  }
228
228
 
229
229
  /**
230
- * 资源预加载
230
+ * 资源预加�?
231
231
  */
232
232
  export function preloadResource(url, type = 'fetch') {
233
233
  const link = document.createElement('link');
@@ -302,7 +302,7 @@ export class PerformanceMonitor {
302
302
  firstPaint: paint.find(p => p.name === 'first-paint')?.startTime || 0,
303
303
  // 首次内容绘制
304
304
  firstContentfulPaint: paint.find(p => p.name === 'first-contentful-paint')?.startTime || 0,
305
- // 自定义测量
305
+ // 自定义测�?
306
306
  customMeasures: this.measures
307
307
  };
308
308
  }
@@ -321,7 +321,7 @@ export class PerformanceMonitor {
321
321
  }
322
322
 
323
323
  /**
324
- * 内存优化 - 对象池
324
+ * 内存优化 - 对象�?
325
325
  */
326
326
  export class ObjectPool {
327
327
  constructor(factory, reset, initialSize = 10) {
@@ -329,7 +329,7 @@ export class ObjectPool {
329
329
  this.reset = reset;
330
330
  this.pool = [];
331
331
 
332
- // 预创建对象
332
+ // 预创建对�?
333
333
  for (let i = 0; i < initialSize; i++) {
334
334
  this.pool.push(this.factory());
335
335
  }