collabdocchat 2.0.5 → 2.0.7

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,6 +1,6 @@
1
- /**
1
+ /**
2
2
  * 新手引导系统
3
- * 提供交互式的新手引导和帮�? */
3
+ * 提供交互式的新手引导和帮�? */
4
4
 
5
5
  export class OnboardingGuide {
6
6
  constructor() {
@@ -40,45 +40,45 @@ export class OnboardingGuide {
40
40
  return [
41
41
  {
42
42
  target: '.sidebar',
43
- title: '欢迎使用 CollabDocChat�?,
44
- content: '这是侧边栏,您可以在这里访问所有主要功能�?,
43
+ title: '欢迎使用 CollabDocChat�?,
44
+ content: '这是侧边栏,您可以在这里访问所有主要功能�?,
45
45
  position: 'right'
46
46
  },
47
47
  {
48
48
  target: '.nav-item[data-view="groups"]',
49
49
  title: '群组管理',
50
- content: '点击这里可以创建和管理群组,邀请成员加入�?,
50
+ content: '点击这里可以创建和管理群组,邀请成员加入�?,
51
51
  position: 'right'
52
52
  },
53
53
  {
54
54
  target: '.nav-item[data-view="chat"]',
55
55
  title: '群聊功能',
56
- content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能�?,
56
+ content: '在这里可以与团队成员实时聊天,支持@提及、消息撤回等功能�?,
57
57
  position: 'right'
58
58
  },
59
59
  {
60
60
  target: '.nav-item[data-view="documents"]',
61
61
  title: '文档协作',
62
- content: '创建和编辑文档,支持多人实时协作编辑�?,
62
+ content: '创建和编辑文档,支持多人实时协作编辑�?,
63
63
  position: 'right'
64
64
  },
65
65
  {
66
66
  target: '.nav-item[data-view="tasks"]',
67
67
  title: '任务管理',
68
- content: '创建任务、分配给团队成员,跟踪任务进度�?,
68
+ content: '创建任务、分配给团队成员,跟踪任务进度�?,
69
69
  position: 'right'
70
70
  },
71
71
  {
72
72
  target: '.user-info',
73
73
  title: '个人信息',
74
- content: '这里显示您的个人信息和在线状态�?,
74
+ content: '这里显示您的个人信息和在线状态�?,
75
75
  position: 'right'
76
76
  }
77
77
  ];
78
78
  }
79
79
 
80
80
  /**
81
- * 开始引�? */
81
+ * 开始引�? */
82
82
  start() {
83
83
  if (this.hasCompleted) {
84
84
  const restart = confirm('您已经完成过新手引导,是否重新开始?');
@@ -104,9 +104,9 @@ export class OnboardingGuide {
104
104
  const step = steps[stepIndex];
105
105
  this.currentStep = stepIndex;
106
106
 
107
- // 移除之前的引导元�? this.removeGuideElements();
107
+ // 移除之前的引导元�? this.removeGuideElements();
108
108
 
109
- // 创建遮罩�? const overlay = document.createElement('div');
109
+ // 创建遮罩�? const overlay = document.createElement('div');
110
110
  overlay.className = 'onboarding-overlay';
111
111
  overlay.id = 'onboardingOverlay';
112
112
  document.body.appendChild(overlay);
@@ -126,7 +126,7 @@ export class OnboardingGuide {
126
126
 
127
127
  document.body.appendChild(spotlight);
128
128
 
129
- // 创建提示�? const tooltip = document.createElement('div');
129
+ // 创建提示�? const tooltip = document.createElement('div');
130
130
  tooltip.className = 'onboarding-tooltip';
131
131
  tooltip.id = 'onboardingTooltip';
132
132
 
@@ -143,15 +143,15 @@ export class OnboardingGuide {
143
143
  ${stepIndex + 1} / ${steps.length}
144
144
  </div>
145
145
  <div class="tooltip-actions">
146
- ${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一�?/button>' : ''}
146
+ ${stepIndex > 0 ? '<button class="btn-secondary" id="prevStep">上一�?/button>' : ''}
147
147
  ${stepIndex < steps.length - 1 ?
148
- '<button class="btn-primary" id="nextStep">下一�?/button>' :
148
+ '<button class="btn-primary" id="nextStep">下一�?/button>' :
149
149
  '<button class="btn-primary" id="finishOnboarding">完成</button>'}
150
150
  </div>
151
151
  </div>
152
152
  `;
153
153
 
154
- // 定位提示�? this.positionTooltip(tooltip, rect, step.position);
154
+ // 定位提示�? this.positionTooltip(tooltip, rect, step.position);
155
155
  document.body.appendChild(tooltip);
156
156
 
157
157
  // 添加事件监听
@@ -160,7 +160,7 @@ export class OnboardingGuide {
160
160
  }
161
161
 
162
162
  /**
163
- * 定位提示�? */
163
+ * 定位提示�? */
164
164
  positionTooltip(tooltip, targetRect, position) {
165
165
  document.body.appendChild(tooltip);
166
166
  const tooltipRect = tooltip.getBoundingClientRect();
@@ -189,7 +189,7 @@ export class OnboardingGuide {
189
189
  left = targetRect.right + 20;
190
190
  }
191
191
 
192
- // 确保提示框在视口�? if (left < 10) left = 10;
192
+ // 确保提示框在视口�? if (left < 10) left = 10;
193
193
  if (left + tooltipRect.width > window.innerWidth - 10) {
194
194
  left = window.innerWidth - tooltipRect.width - 10;
195
195
  }
@@ -244,7 +244,7 @@ export class OnboardingGuide {
244
244
  * 跳过引导
245
245
  */
246
246
  skip() {
247
- if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始�?)) {
247
+ if (confirm('确定要跳过新手引导吗?您可以稍后在帮助菜单中重新开始�?)) {
248
248
  this.removeGuideElements();
249
249
  this.isActive = false;
250
250
  }
@@ -258,11 +258,11 @@ export class OnboardingGuide {
258
258
  this.markCompleted();
259
259
  this.isActive = false;
260
260
 
261
- alert('恭喜!您已完成新手引导。现在可以开始使�?CollabDocChat 了!');
261
+ alert('恭喜!您已完成新手引导。现在可以开始使�?CollabDocChat 了!');
262
262
  }
263
263
 
264
264
  /**
265
- * 显示帮助中心(优化后的卡片式布局�? */
265
+ * 显示帮助中心(优化后的卡片式布局�? */
266
266
  showHelpCenter(container) {
267
267
  container.innerHTML = `
268
268
  <div class="view-header">
@@ -272,25 +272,25 @@ export class OnboardingGuide {
272
272
  <div class="help-cards-grid">
273
273
  <div class="help-card">
274
274
  <div class="help-icon">🚀</div>
275
- <h3>快速开�?/h3>
275
+ <h3>快速开�?/h3>
276
276
  <ul>
277
277
  <li><a href="#" data-action="start-guide">新手引导</a></li>
278
- <li><a href="#" data-action="show-shortcuts">键盘快捷�?/a></li>
279
- <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>
280
280
  </ul>
281
- <button class="btn-help-detail" data-topic="quickstart">查看详情 �?/button>
281
+ <button class="btn-help-detail" data-topic="quickstart">查看详情 �?/button>
282
282
  </div>
283
283
 
284
284
  <div class="help-card">
285
285
  <div class="help-icon">💬</div>
286
286
  <h3>聊天功能</h3>
287
287
  <ul>
288
- <li>如何发送消�?/li>
288
+ <li>如何发送消�?/li>
289
289
  <li>如何@提及用户</li>
290
290
  <li>如何撤回消息</li>
291
- <li>如何查看已读状�?/li>
291
+ <li>如何查看已读状�?/li>
292
292
  </ul>
293
- <button class="btn-help-detail" data-topic="chat">查看详情 �?/button>
293
+ <button class="btn-help-detail" data-topic="chat">查看详情 �?/button>
294
294
  </div>
295
295
 
296
296
  <div class="help-card">
@@ -298,11 +298,11 @@ export class OnboardingGuide {
298
298
  <h3>文档协作</h3>
299
299
  <ul>
300
300
  <li>如何创建文档</li>
301
- <li>如何邀请协�?/li>
301
+ <li>如何邀请协�?/li>
302
302
  <li>如何查看编辑历史</li>
303
303
  <li>如何导出文档</li>
304
304
  </ul>
305
- <button class="btn-help-detail" data-topic="documents">查看详情 �?/button>
305
+ <button class="btn-help-detail" data-topic="documents">查看详情 �?/button>
306
306
  </div>
307
307
 
308
308
  <div class="help-card">
@@ -314,7 +314,7 @@ export class OnboardingGuide {
314
314
  <li>如何跟踪进度</li>
315
315
  <li>如何设置提醒</li>
316
316
  </ul>
317
- <button class="btn-help-detail" data-topic="tasks">查看详情 �?/button>
317
+ <button class="btn-help-detail" data-topic="tasks">查看详情 �?/button>
318
318
  </div>
319
319
 
320
320
  <div class="help-card">
@@ -326,24 +326,24 @@ export class OnboardingGuide {
326
326
  <li>如何设置权限</li>
327
327
  <li>如何导出数据</li>
328
328
  </ul>
329
- <button class="btn-help-detail" data-topic="settings">查看详情 �?/button>
329
+ <button class="btn-help-detail" data-topic="settings">查看详情 �?/button>
330
330
  </div>
331
331
 
332
332
  <div class="help-card">
333
- <div class="help-icon">�?/div>
333
+ <div class="help-icon">�?/div>
334
334
  <h3>常见问题</h3>
335
335
  <ul>
336
336
  <li>忘记密码怎么办?</li>
337
- <li>如何邀请新成员�?/li>
338
- <li>如何删除群组�?/li>
339
- <li>如何联系支持�?/li>
337
+ <li>如何邀请新成员�?/li>
338
+ <li>如何删除群组�?/li>
339
+ <li>如何联系支持�?/li>
340
340
  </ul>
341
- <button class="btn-help-detail" data-topic="faq">查看详情 �?/button>
341
+ <button class="btn-help-detail" data-topic="faq">查看详情 �?/button>
342
342
  </div>
343
343
  </div>
344
344
 
345
345
  <div class="help-footer-actions">
346
- <h3>还有其他问题�?/h3>
346
+ <h3>还有其他问题�?/h3>
347
347
  <div class="help-action-buttons">
348
348
  <button class="btn-primary" id="contactSupport">
349
349
  <span>📧</span> 联系支持
@@ -378,7 +378,7 @@ export class OnboardingGuide {
378
378
  });
379
379
 
380
380
  container.querySelector('#contactSupport')?.addEventListener('click', () => {
381
- alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?);
381
+ alert('请发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?);
382
382
  });
383
383
 
384
384
  container.querySelector('#videoTutorials')?.addEventListener('click', () => {
@@ -532,99 +532,99 @@ export class OnboardingGuide {
532
532
  showHelpDetail(topic, container) {
533
533
  const details = {
534
534
  quickstart: {
535
- title: '🚀 快速开�?,
535
+ title: '🚀 快速开�?,
536
536
  content: `
537
- <h4>欢迎使用 CollabDocChat�?/h4>
538
- <p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能�?/p>
537
+ <h4>欢迎使用 CollabDocChat�?/h4>
538
+ <p>这是一个功能强大的团队协作平台,支持实时聊天、文档协作、任务管理等功能�?/p>
539
539
 
540
540
  <h4>第一步:创建群组</h4>
541
- <p>点击左侧菜单�?群组管理",创建您的第一个群组并邀请成员�?/p>
541
+ <p>点击左侧菜单�?群组管理",创建您的第一个群组并邀请成员�?/p>
542
542
 
543
- <h4>第二步:开始聊�?/h4>
544
- <p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号�?/p>
543
+ <h4>第二步:开始聊�?/h4>
544
+ <p>在群组中发送消息,使用 @ 符号提及成员,支持文件上传和表情符号�?/p>
545
545
 
546
546
  <h4>第三步:创建文档</h4>
547
- <p>点击"文档管理"创建协作文档,支持多人实时编辑�?/p>
547
+ <p>点击"文档管理"创建协作文档,支持多人实时编辑�?/p>
548
548
  `
549
549
  },
550
550
  chat: {
551
551
  title: '💬 聊天功能详解',
552
552
  content: `
553
- <h4>发送消�?/h4>
554
- <p>在输入框中输入消息,�?Enter 或点击发送按钮即可发送�?/p>
553
+ <h4>发送消�?/h4>
554
+ <p>在输入框中输入消息,�?Enter 或点击发送按钮即可发送�?/p>
555
555
 
556
556
  <h4>@提及用户</h4>
557
- <p>输入 @ 符号会弹出成员列表,选择要提及的成员即可�?/p>
557
+ <p>输入 @ 符号会弹出成员列表,选择要提及的成员即可�?/p>
558
558
 
559
559
  <h4>撤回消息</h4>
560
- <p>鼠标悬停在消息上,点�?撤回"按钮可以撤回消息�?分钟内)�?/p>
560
+ <p>鼠标悬停在消息上,点�?撤回"按钮可以撤回消息�?分钟内)�?/p>
561
561
 
562
- <h4>查看已读状�?/h4>
563
- <p>消息右下角会显示已读/未读状态,点击可查看详细信息�?/p>
562
+ <h4>查看已读状�?/h4>
563
+ <p>消息右下角会显示已读/未读状态,点击可查看详细信息�?/p>
564
564
  `
565
565
  },
566
566
  documents: {
567
567
  title: '📄 文档协作指南',
568
568
  content: `
569
569
  <h4>创建文档</h4>
570
- <p>点击"文档管理" �?"创建文档",输入标题和内容即可�?/p>
570
+ <p>点击"文档管理" �?"创建文档",输入标题和内容即可�?/p>
571
571
 
572
- <h4>邀请协�?/h4>
573
- <p>在文档详情页点击"邀请协�?,选择要邀请的成员�?/p>
572
+ <h4>邀请协�?/h4>
573
+ <p>在文档详情页点击"邀请协�?,选择要邀请的成员�?/p>
574
574
 
575
575
  <h4>实时编辑</h4>
576
- <p>多人可以同时编辑文档,所有更改会实时同步�?/p>
576
+ <p>多人可以同时编辑文档,所有更改会实时同步�?/p>
577
577
 
578
578
  <h4>查看历史</h4>
579
- <p>点击"编辑历史"可以查看所有修改记录,支持版本回退�?/p>
579
+ <p>点击"编辑历史"可以查看所有修改记录,支持版本回退�?/p>
580
580
  `
581
581
  },
582
582
  tasks: {
583
583
  title: '📋 任务管理教程',
584
584
  content: `
585
585
  <h4>创建任务</h4>
586
- <p>点击"任务管理" �?"创建任务",填写任务信息�?/p>
586
+ <p>点击"任务管理" �?"创建任务",填写任务信息�?/p>
587
587
 
588
588
  <h4>分配任务</h4>
589
- <p>在任务详情中选择负责人,可以分配给多个成员�?/p>
589
+ <p>在任务详情中选择负责人,可以分配给多个成员�?/p>
590
590
 
591
591
  <h4>跟踪进度</h4>
592
- <p>任务状态包括:待处理、进行中、已完成、已终止�?/p>
592
+ <p>任务状态包括:待处理、进行中、已完成、已终止�?/p>
593
593
 
594
594
  <h4>设置提醒</h4>
595
- <p>可以设置任务截止时间,系统会自动发送提醒�?/p>
595
+ <p>可以设置任务截止时间,系统会自动发送提醒�?/p>
596
596
  `
597
597
  },
598
598
  settings: {
599
599
  title: '⚙️ 设置指南',
600
600
  content: `
601
601
  <h4>更改主题</h4>
602
- <p>点击"设置" �?"主题设置",选择您喜欢的主题风格�?/p>
602
+ <p>点击"设置" �?"主题设置",选择您喜欢的主题风格�?/p>
603
603
 
604
604
  <h4>管理通知</h4>
605
- <p>�?通知设置"中可以配置桌面通知、声音提示等�?/p>
605
+ <p>�?通知设置"中可以配置桌面通知、声音提示等�?/p>
606
606
 
607
607
  <h4>设置权限</h4>
608
- <p>管理员可以在"权限管理"中设置用户权限�?/p>
608
+ <p>管理员可以在"权限管理"中设置用户权限�?/p>
609
609
 
610
610
  <h4>导出数据</h4>
611
- <p>�?数据管理"中可以导出您的聊天记录和文档�?/p>
611
+ <p>�?数据管理"中可以导出您的聊天记录和文档�?/p>
612
612
  `
613
613
  },
614
614
  faq: {
615
- title: '�?常见问题解答',
615
+ title: '�?常见问题解答',
616
616
  content: `
617
617
  <h4>忘记密码怎么办?</h4>
618
- <p>点击登录页面�?忘记密码",输入邮箱即可重置密码�?/p>
618
+ <p>点击登录页面�?忘记密码",输入邮箱即可重置密码�?/p>
619
619
 
620
- <h4>如何邀请新成员�?/h4>
621
- <p>在群组管理页面点�?管理成员" �?"添加成员"�?/p>
620
+ <h4>如何邀请新成员�?/h4>
621
+ <p>在群组管理页面点�?管理成员" �?"添加成员"�?/p>
622
622
 
623
- <h4>如何删除群组�?/h4>
624
- <p>只有群组创建者可以删除群组,在群组设置中操作�?/p>
623
+ <h4>如何删除群组�?/h4>
624
+ <p>只有群组创建者可以删除群组,在群组设置中操作�?/p>
625
625
 
626
- <h4>如何联系支持�?/h4>
627
- <p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?/p>
626
+ <h4>如何联系支持�?/h4>
627
+ <p>发送邮件至 support@collabdocchat.com 或在 GitHub 提交 Issue�?/p>
628
628
  `
629
629
  }
630
630
  };
@@ -666,14 +666,14 @@ export class OnboardingGuide {
666
666
  }
667
667
 
668
668
  /**
669
- * 显示快捷�? */
669
+ * 显示快捷�? */
670
670
  showShortcuts() {
671
671
  const shortcuts = [
672
672
  { key: 'Ctrl + S', action: '保存文档' },
673
- { key: 'Ctrl + Enter', action: '发送消�? },
673
+ { key: 'Ctrl + Enter', action: '发送消�? },
674
674
  { key: 'Ctrl + K', action: '搜索' },
675
- { key: 'Ctrl + /', action: '显示快捷�? },
676
- { key: 'Esc', action: '关闭对话�? },
675
+ { key: 'Ctrl + /', action: '显示快捷�? },
676
+ { key: 'Esc', action: '关闭对话�? },
677
677
  { key: '@', action: '提及用户' }
678
678
  ];
679
679
 
@@ -681,7 +681,7 @@ export class OnboardingGuide {
681
681
  modal.className = 'modal';
682
682
  modal.innerHTML = `
683
683
  <div class="modal-content">
684
- <h3>⌨️ 键盘快捷�?/h3>
684
+ <h3>⌨️ 键盘快捷�?/h3>
685
685
  <table class="shortcuts-table">
686
686
  ${shortcuts.map(s => `
687
687
  <tr>
@@ -702,13 +702,13 @@ export class OnboardingGuide {
702
702
  }
703
703
 
704
704
  /**
705
- * 显示使用技�? */
705
+ * 显示使用技�? */
706
706
  showTips() {
707
707
  const tips = [
708
- '💡 使用 @ 符号可以快速提及团队成�?,
709
- '💡 双击消息可以快速回�?,
710
- '💡 拖拽文件到聊天框可以快速上�?,
711
- '💡 使用 Ctrl+Enter 可以快速发送消�?,
708
+ '💡 使用 @ 符号可以快速提及团队成�?,
709
+ '💡 双击消息可以快速回�?,
710
+ '💡 拖拽文件到聊天框可以快速上�?,
711
+ '💡 使用 Ctrl+Enter 可以快速发送消�?,
712
712
  '💡 点击用户头像可以查看详细信息',
713
713
  '💡 长按消息可以显示更多操作'
714
714
  ];
@@ -721,3 +721,4 @@ export class OnboardingGuide {
721
721
  export const onboardingGuide = new OnboardingGuide();
722
722
 
723
723
 
724
+
@@ -1,4 +1,4 @@
1
- /**
1
+ /**
2
2
  * 虚拟滚动实现
3
3
  * 用于优化长列表渲染性能
4
4
  */
@@ -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
  }
@@ -392,3 +392,4 @@ export class BatchUpdater {
392
392
  }
393
393
 
394
394
 
395
+