zen-gitsync 2.0.5 → 2.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -68,7 +68,6 @@ onMounted(async () => {
68
68
  ])
69
69
 
70
70
  // 日志信息通过LogList组件直接加载即可,避免重复调用
71
- // 移除 gitLogStore.fetchLog() 调用
72
71
  } else {
73
72
  ElMessage.warning('当前目录不是Git仓库,部分功能将不可用')
74
73
  }
@@ -78,6 +77,12 @@ onMounted(async () => {
78
77
  // 标记初始化完成
79
78
  initCompleted.value = true
80
79
  console.log('---------- 页面初始化完成 ----------')
80
+
81
+ // 无论是否是Git仓库,都应该加载布局比例
82
+ // 使用短延时确保DOM已完全渲染
83
+ setTimeout(() => {
84
+ loadLayoutRatios();
85
+ }, 100);
81
86
  }
82
87
  })
83
88
 
@@ -164,6 +169,193 @@ async function clearUserSettings() {
164
169
  tempUserEmail.value = ''
165
170
  }
166
171
  }
172
+
173
+ // 添加分隔条相关逻辑
174
+ let isVResizing = false;
175
+ let isHResizing = false;
176
+ let initialX = 0;
177
+ let initialY = 0;
178
+ let initialGridTemplateColumns = '';
179
+ let initialGridTemplateRows = '';
180
+
181
+ // 保存布局比例到localStorage
182
+ function saveLayoutRatios() {
183
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
184
+ if (!gridLayout) return;
185
+
186
+ // 获取当前的列和行比例
187
+ const columns = getComputedStyle(gridLayout).gridTemplateColumns.split(' ');
188
+ const rows = getComputedStyle(gridLayout).gridTemplateRows.split(' ');
189
+
190
+ if (columns.length >= 3 && rows.length >= 3) {
191
+ // 解析左右区域比例
192
+ const leftColWidth = parseFloat(columns[0]);
193
+ const rightColWidth = parseFloat(columns[2]);
194
+ const totalWidth = leftColWidth + rightColWidth;
195
+ const leftRatio = leftColWidth / totalWidth;
196
+
197
+ // 解析上下区域比例
198
+ const topRowHeight = parseFloat(rows[0]);
199
+ const bottomRowHeight = parseFloat(rows[2]);
200
+ const totalHeight = topRowHeight + bottomRowHeight;
201
+ const topRatio = topRowHeight / totalHeight;
202
+
203
+ // 保存到localStorage
204
+ localStorage.setItem('zen-gitsync-layout-left-ratio', leftRatio.toString());
205
+ localStorage.setItem('zen-gitsync-layout-top-ratio', topRatio.toString());
206
+
207
+ console.log(`布局比例已保存 - 左侧: ${(leftRatio * 100).toFixed(0)}%, 上方: ${(topRatio * 100).toFixed(0)}%`);
208
+ }
209
+ }
210
+
211
+ // 加载布局比例
212
+ function loadLayoutRatios() {
213
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
214
+ if (!gridLayout) return;
215
+
216
+ // 从localStorage获取保存的比例
217
+ const savedLeftRatio = localStorage.getItem('zen-gitsync-layout-left-ratio');
218
+ const savedTopRatio = localStorage.getItem('zen-gitsync-layout-top-ratio');
219
+
220
+ // 应用左右区域比例
221
+ if (savedLeftRatio) {
222
+ const leftRatio = parseFloat(savedLeftRatio);
223
+ const rightRatio = 1 - leftRatio;
224
+ gridLayout.style.gridTemplateColumns = `${leftRatio}fr 8px ${rightRatio}fr`;
225
+ console.log(`已恢复左侧比例: ${(leftRatio * 100).toFixed(0)}%`);
226
+ } else {
227
+ // 默认比例 1:3
228
+ gridLayout.style.gridTemplateColumns = "1fr 8px 3fr";
229
+ }
230
+
231
+ // 应用上下区域比例
232
+ if (savedTopRatio) {
233
+ const topRatio = parseFloat(savedTopRatio);
234
+ const bottomRatio = 1 - topRatio;
235
+ gridLayout.style.gridTemplateRows = `${topRatio}fr 8px ${bottomRatio}fr`;
236
+ console.log(`已恢复上方比例: ${(topRatio * 100).toFixed(0)}%`);
237
+ }
238
+ }
239
+
240
+ function startVResize(event: MouseEvent) {
241
+ isVResizing = true;
242
+ initialX = event.clientX;
243
+
244
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
245
+ initialGridTemplateColumns = getComputedStyle(gridLayout).gridTemplateColumns;
246
+
247
+ document.getElementById('v-resizer')?.classList.add('active');
248
+
249
+ document.addEventListener('mousemove', handleVResize);
250
+ document.addEventListener('mouseup', stopVResize);
251
+
252
+ // 防止文本选择
253
+ event.preventDefault();
254
+ }
255
+
256
+ function handleVResize(event: MouseEvent) {
257
+ if (!isVResizing) return;
258
+
259
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
260
+ const delta = event.clientX - initialX;
261
+
262
+ // 解析当前的网格模板列值
263
+ const columns = initialGridTemplateColumns.split(' ');
264
+
265
+ // 确保我们有足够的列
266
+ if (columns.length >= 3) {
267
+ // 计算新的左列宽度
268
+ const leftColWidth = parseFloat(columns[0]);
269
+ const rightColWidth = parseFloat(columns[2]);
270
+
271
+ // 计算新的左右列比例
272
+ const totalWidth = leftColWidth + rightColWidth;
273
+ const newLeftRatio = (leftColWidth + delta / gridLayout.clientWidth * totalWidth) / totalWidth;
274
+ const newRightRatio = 1 - newLeftRatio;
275
+
276
+ // 确保左侧宽度不小于总宽度的10%且不大于50%
277
+ const minLeftRatio = 0.1;
278
+ const maxLeftRatio = 0.5;
279
+
280
+ if (newLeftRatio < minLeftRatio) {
281
+ gridLayout.style.gridTemplateColumns = `${minLeftRatio}fr 8px ${1 - minLeftRatio}fr`;
282
+ } else if (newLeftRatio > maxLeftRatio) {
283
+ gridLayout.style.gridTemplateColumns = `${maxLeftRatio}fr 8px ${1 - maxLeftRatio}fr`;
284
+ } else {
285
+ gridLayout.style.gridTemplateColumns = `${newLeftRatio}fr 8px ${newRightRatio}fr`;
286
+ }
287
+ }
288
+ }
289
+
290
+ function stopVResize() {
291
+ isVResizing = false;
292
+ document.getElementById('v-resizer')?.classList.remove('active');
293
+ document.removeEventListener('mousemove', handleVResize);
294
+ document.removeEventListener('mouseup', stopVResize);
295
+
296
+ // 保存布局比例
297
+ saveLayoutRatios();
298
+ }
299
+
300
+ function startHResize(event: MouseEvent) {
301
+ isHResizing = true;
302
+ initialY = event.clientY;
303
+
304
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
305
+ initialGridTemplateRows = getComputedStyle(gridLayout).gridTemplateRows;
306
+
307
+ document.getElementById('h-resizer')?.classList.add('active');
308
+
309
+ document.addEventListener('mousemove', handleHResize);
310
+ document.addEventListener('mouseup', stopHResize);
311
+
312
+ // 防止文本选择
313
+ event.preventDefault();
314
+ }
315
+
316
+ function handleHResize(event: MouseEvent) {
317
+ if (!isHResizing) return;
318
+
319
+ const gridLayout = document.querySelector('.grid-layout') as HTMLElement;
320
+ const delta = event.clientY - initialY;
321
+
322
+ // 解析当前的网格模板行值
323
+ const rows = initialGridTemplateRows.split(' ');
324
+
325
+ // 确保我们有足够的行
326
+ if (rows.length >= 3) {
327
+ // 计算新的上行高度
328
+ const topRowHeight = parseFloat(rows[0]);
329
+ const bottomRowHeight = parseFloat(rows[2]);
330
+
331
+ // 计算新的上下行比例
332
+ const totalHeight = topRowHeight + bottomRowHeight;
333
+ const newTopRatio = (topRowHeight + delta / gridLayout.clientHeight * totalHeight) / totalHeight;
334
+ const newBottomRatio = 1 - newTopRatio;
335
+
336
+ // 确保上方区域不小于总高度的20%且不大于80%
337
+ const minTopRatio = 0.2;
338
+ const maxTopRatio = 0.8;
339
+
340
+ if (newTopRatio < minTopRatio) {
341
+ gridLayout.style.gridTemplateRows = `${minTopRatio}fr 8px ${1 - minTopRatio}fr`;
342
+ } else if (newTopRatio > maxTopRatio) {
343
+ gridLayout.style.gridTemplateRows = `${maxTopRatio}fr 8px ${1 - maxTopRatio}fr`;
344
+ } else {
345
+ gridLayout.style.gridTemplateRows = `${newTopRatio}fr 8px ${newBottomRatio}fr`;
346
+ }
347
+ }
348
+ }
349
+
350
+ function stopHResize() {
351
+ isHResizing = false;
352
+ document.getElementById('h-resizer')?.classList.remove('active');
353
+ document.removeEventListener('mousemove', handleHResize);
354
+ document.removeEventListener('mouseup', stopHResize);
355
+
356
+ // 保存布局比例
357
+ saveLayoutRatios();
358
+ }
167
359
  </script>
168
360
 
169
361
  <template>
@@ -200,11 +392,10 @@ async function clearUserSettings() {
200
392
  <el-icon><Setting /></el-icon>
201
393
  </el-button>
202
394
  </div>
203
- <!-- <div id="config-info">{{ configInfo }}</div> -->
204
395
  </div>
205
396
  </header>
206
397
 
207
- <div class="container">
398
+ <main class="main-container">
208
399
  <div v-if="!initCompleted" class="loading-container">
209
400
  <el-card class="loading-card">
210
401
  <div class="loading-spinner">
@@ -214,17 +405,20 @@ async function clearUserSettings() {
214
405
  </el-card>
215
406
  </div>
216
407
 
217
- <div v-else class="layout-container">
218
- <!-- 左侧Git状态 -->
219
- <div class="left-panel">
408
+ <div v-else class="grid-layout">
409
+ <!-- 上方左侧Git状态 -->
410
+ <div class="git-status-panel">
220
411
  <GitStatus
221
412
  ref="gitStatusRef"
222
413
  :initial-directory="currentDirectory"
223
414
  />
224
415
  </div>
225
416
 
226
- <!-- 右侧提交表单和历史 -->
227
- <div class="right-panel" v-if="gitStore.isGitRepo">
417
+ <!-- 垂直分隔条 -->
418
+ <div class="vertical-resizer" id="v-resizer" @mousedown="startVResize"></div>
419
+
420
+ <!-- 上方右侧提交表单 -->
421
+ <div class="commit-form-panel" v-if="gitStore.isGitRepo">
228
422
  <!-- 当用户未配置时显示配置提示 -->
229
423
  <div v-if="!gitStore.userName || !gitStore.userEmail" class="card">
230
424
  <h2>Git用户未配置</h2>
@@ -250,10 +444,9 @@ async function clearUserSettings() {
250
444
  <!-- 用户已配置显示提交表单 -->
251
445
  <template v-else>
252
446
  <CommitForm />
253
- <LogList ref="logListRef" />
254
447
  </template>
255
448
  </div>
256
- <div class="right-panel" v-else>
449
+ <div class="commit-form-panel" v-else>
257
450
  <div class="card">
258
451
  <h2>Git仓库初始化</h2>
259
452
  <p>当前目录不是Git仓库,请先初始化Git仓库或切换到Git仓库目录。</p>
@@ -264,6 +457,14 @@ async function clearUserSettings() {
264
457
  </div>
265
458
  </div>
266
459
  </div>
460
+
461
+ <!-- 水平分隔条 -->
462
+ <div class="horizontal-resizer" id="h-resizer" @mousedown="startHResize"></div>
463
+
464
+ <!-- 下方提交历史 -->
465
+ <div class="log-list-panel" v-if="gitStore.isGitRepo">
466
+ <LogList ref="logListRef" />
467
+ </div>
267
468
 
268
469
  <!-- 创建分支对话框 -->
269
470
  <el-dialog
@@ -302,7 +503,7 @@ async function clearUserSettings() {
302
503
  </el-dialog>
303
504
 
304
505
  </div>
305
- </div>
506
+ </main>
306
507
 
307
508
  <footer class="main-footer">
308
509
  <div class="branch-info" v-if="gitStore.currentBranch">
@@ -388,11 +589,65 @@ body {
388
589
  margin: 0;
389
590
  padding: 0;
390
591
  background-color: #f5f5f5;
592
+ overflow: hidden; /* 防止出现滚动条 */
593
+ height: 100vh;
594
+ }
595
+
596
+ .main-container {
597
+ position: fixed;
598
+ top: 60px; /* 顶部导航栏高度 */
599
+ bottom: 60px; /* 底部footer高度 */
600
+ left: 0;
601
+ right: 0;
602
+ padding: 10px;
603
+ overflow: hidden; /* 防止整体滚动 */
604
+ }
605
+
606
+ .grid-layout {
607
+ display: grid;
608
+ grid-template-columns: 1fr 8px 3fr; /* 左右区域比例为1:3 */
609
+ grid-template-rows: 1fr 8px 1fr;
610
+ grid-template-areas:
611
+ "git-status v-resizer commit-form"
612
+ "h-resizer h-resizer h-resizer"
613
+ "log-list log-list log-list";
614
+ gap: 10px;
615
+ height: 100%;
391
616
  }
392
- .container {
393
- margin: 0 auto;
394
- padding: 20px 30px;
617
+
618
+ .git-status-panel {
619
+ grid-area: git-status;
620
+ overflow: hidden;
621
+ max-height: 100%;
622
+ padding: 0;
623
+ }
624
+
625
+ .commit-form-panel {
626
+ grid-area: commit-form;
627
+ overflow: hidden;
628
+ max-height: 100%;
629
+ padding: 0;
630
+ }
631
+
632
+ .log-list-panel {
633
+ grid-area: log-list;
634
+ overflow: hidden;
635
+ max-height: 100%;
636
+ padding: 0;
637
+ }
638
+
639
+ /* 确保每个卡片内部可以滚动 */
640
+ .card {
641
+ background-color: white;
642
+ border-radius: 8px;
643
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
644
+ border: 1px solid rgba(0, 0, 0, 0.03);
645
+ height: 100%;
646
+ overflow: hidden;
647
+ display: flex;
648
+ flex-direction: column;
395
649
  }
650
+
396
651
  .main-header {
397
652
  background-color: #24292e;
398
653
  color: white;
@@ -400,53 +655,64 @@ body {
400
655
  display: flex;
401
656
  justify-content: space-between;
402
657
  align-items: center;
658
+ position: fixed;
659
+ top: 0;
660
+ left: 0;
661
+ right: 0;
662
+ z-index: 1000;
663
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
664
+ height: 60px;
665
+ box-sizing: border-box;
403
666
  }
667
+
404
668
  .header-left {
405
669
  display: flex;
406
670
  align-items: center;
407
671
  gap: 10px;
408
672
  }
673
+
409
674
  .logo {
410
675
  height: 32px;
411
676
  width: auto;
412
677
  }
678
+
413
679
  h1 {
414
680
  margin: 0;
415
681
  font-size: 24px;
416
682
  }
683
+
417
684
  .header-info {
418
685
  display: flex;
419
686
  flex-direction: column;
420
687
  align-items: flex-end;
421
688
  gap: 5px;
422
689
  }
690
+
423
691
  #branch-info, #user-info {
424
692
  background-color: rgba(255, 255, 255, 0.1);
425
693
  padding: 4px 8px;
426
694
  border-radius: 4px;
427
695
  font-size: 14px;
428
696
  }
697
+
429
698
  .branch-label, .user-label {
430
699
  font-weight: bold;
431
700
  margin-right: 5px;
432
701
  }
702
+
433
703
  .user-name {
434
704
  font-weight: bold;
435
705
  margin-right: 5px;
436
706
  }
707
+
437
708
  .user-email {
438
709
  color: #e0e0e0;
439
710
  }
711
+
440
712
  .branch-name {
441
713
  font-family: monospace;
442
714
  }
443
- .card {
444
- background-color: white;
445
- border-radius: 5px;
446
- box-shadow: 0 2px 5px rgba(0,0,0,0.1);
447
- margin-bottom: 20px;
448
- padding: 20px;
449
- }
715
+
450
716
  .status-box {
451
717
  background-color: #f6f8fa;
452
718
  border: 1px solid #e1e4e8;
@@ -454,100 +720,9 @@ h1 {
454
720
  padding: 15px;
455
721
  white-space: pre-wrap;
456
722
  font-family: monospace;
457
- max-height: 300px;
458
723
  overflow-y: auto;
459
724
  }
460
725
 
461
- /* 新增布局样式 */
462
- .layout-container {
463
- display: flex;
464
- gap: 20px;
465
- }
466
-
467
- .left-panel {
468
- flex: 0 0 30%;
469
- max-width: 30%;
470
- }
471
-
472
- .right-panel {
473
- flex: 0 0 70%;
474
- max-width: 70%;
475
- }
476
-
477
- /* 响应式布局 */
478
- @media (max-width: 768px) {
479
- .layout-container {
480
- flex-direction: column;
481
- }
482
-
483
- .left-panel, .right-panel {
484
- flex: 0 0 100%;
485
- max-width: 100%;
486
- }
487
-
488
- .header-left {
489
- gap: 8px;
490
- }
491
-
492
- .logo {
493
- height: 24px;
494
- }
495
-
496
- h1 {
497
- font-size: 20px;
498
- }
499
- }
500
- .commit-form {
501
- display: flex;
502
- margin-bottom: 15px;
503
- }
504
-
505
- .log-item {
506
- padding: 10px 0;
507
- border-bottom: 1px solid #eee;
508
- }
509
- .log-item:last-child {
510
- border-bottom: none;
511
- }
512
- .log-hash {
513
- color: #6f42c1;
514
- font-family: monospace;
515
- }
516
- .log-author {
517
- color: #6a737d;
518
- }
519
- .log-date {
520
- color: #6a737d;
521
- }
522
- .log-message {
523
- font-weight: bold;
524
- }
525
- .log-branch {
526
- display: inline-block;
527
- background-color: #0366d6;
528
- color: white;
529
- border-radius: 3px;
530
- padding: 2px 6px;
531
- margin-left: 8px;
532
- font-size: 12px;
533
- }
534
- /* 添加分支选择框样式 */
535
- /* .branch-select {
536
- width: 150px;
537
- margin-left: 5px;
538
- } */
539
-
540
- /* 调整下拉选择框在深色背景下的样式 */
541
- .branch-select :deep(.el-input__inner) {
542
- background-color: rgba(255, 255, 255, 0.1);
543
- color: white;
544
- border: none;
545
- }
546
-
547
- .branch-select :deep(.el-input__suffix) {
548
- color: white;
549
- }
550
-
551
726
  .tips {
552
727
  margin-top: 20px;
553
728
  padding: 15px;
@@ -571,12 +746,12 @@ h1 {
571
746
  margin-bottom: 10px;
572
747
  }
573
748
 
574
- /* 添加加载中样式 */
749
+ /* 加载中样式 */
575
750
  .loading-container {
576
751
  display: flex;
577
752
  justify-content: center;
578
753
  align-items: center;
579
- min-height: 400px;
754
+ height: 100%;
580
755
  }
581
756
 
582
757
  .loading-card {
@@ -604,16 +779,7 @@ h1 {
604
779
  color: #E6A23C;
605
780
  font-weight: bold;
606
781
  }
607
- </style>
608
782
 
609
- <style scoped>
610
- .logo {
611
- will-change: filter;
612
- transition: filter 300ms;
613
- }
614
- .logo:hover {
615
- filter: drop-shadow(0 0 2em #42b883aa);
616
- }
617
783
  .main-footer {
618
784
  background-color: #24292e;
619
785
  color: white;
@@ -627,6 +793,62 @@ h1 {
627
793
  right: 0;
628
794
  z-index: 100;
629
795
  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
796
+ height: 60px;
797
+ box-sizing: border-box;
798
+ }
799
+
800
+ /* 响应式布局 */
801
+ @media (max-width: 768px) {
802
+ .grid-layout {
803
+ grid-template-columns: 1fr;
804
+ grid-template-rows: auto auto auto auto auto;
805
+ grid-template-areas:
806
+ "git-status"
807
+ "v-resizer"
808
+ "commit-form"
809
+ "h-resizer"
810
+ "log-list";
811
+ gap: 10px;
812
+ }
813
+
814
+ .vertical-resizer {
815
+ height: 10px;
816
+ cursor: row-resize;
817
+ }
818
+
819
+ .vertical-resizer::after {
820
+ width: 30px;
821
+ height: 4px;
822
+ }
823
+
824
+ .git-status-panel,
825
+ .commit-form-panel,
826
+ .log-list-panel {
827
+ padding: 0;
828
+ max-height: none;
829
+ }
830
+
831
+ .git-status-panel {
832
+ max-height: 30vh;
833
+ }
834
+
835
+ .commit-form-panel {
836
+ max-height: 30vh;
837
+ }
838
+
839
+ .log-list-panel {
840
+ max-height: 40vh;
841
+ }
842
+ }
843
+ </style>
844
+
845
+ <style scoped>
846
+ .logo {
847
+ will-change: filter;
848
+ transition: filter 300ms;
849
+ }
850
+ .logo:hover {
851
+ filter: drop-shadow(0 0 2em #42b883aa);
630
852
  }
631
853
 
632
854
  .branch-info {
@@ -685,4 +907,76 @@ h1 {
685
907
  border-radius: 4px;
686
908
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
687
909
  }
910
+
911
+ /* 垂直分隔条样式 */
912
+ .vertical-resizer {
913
+ grid-area: v-resizer;
914
+ background-color: #e8e8e8;
915
+ cursor: col-resize;
916
+ transition: background-color 0.2s, box-shadow 0.2s;
917
+ position: relative;
918
+ z-index: 10;
919
+ border-radius: 8px; /* 增加圆角 */
920
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
921
+ }
922
+
923
+ .vertical-resizer::after {
924
+ content: '';
925
+ position: absolute;
926
+ top: 50%;
927
+ left: 50%;
928
+ transform: translate(-50%, -50%);
929
+ width: 4px;
930
+ height: 50px;
931
+ background-color: #a0a0a0;
932
+ border-radius: 4px; /* 增加圆角 */
933
+ transition: background-color 0.2s, width 0.2s, box-shadow 0.2s;
934
+ }
935
+
936
+ .vertical-resizer:hover, .vertical-resizer.active {
937
+ background-color: #d0d0d0;
938
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
939
+ }
940
+
941
+ .vertical-resizer:hover::after, .vertical-resizer.active::after {
942
+ background-color: #409EFF;
943
+ width: 6px;
944
+ box-shadow: 0 0 8px rgba(64, 158, 255, 0.6);
945
+ }
946
+
947
+ /* 水平分隔条样式 */
948
+ .horizontal-resizer {
949
+ grid-area: h-resizer;
950
+ background-color: #e8e8e8;
951
+ cursor: row-resize;
952
+ transition: background-color 0.2s, box-shadow 0.2s;
953
+ position: relative;
954
+ z-index: 10;
955
+ border-radius: 8px; /* 增加圆角 */
956
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.1);
957
+ }
958
+
959
+ .horizontal-resizer::after {
960
+ content: '';
961
+ position: absolute;
962
+ top: 50%;
963
+ left: 50%;
964
+ transform: translate(-50%, -50%);
965
+ width: 50px;
966
+ height: 4px;
967
+ background-color: #a0a0a0;
968
+ border-radius: 4px; /* 增加圆角 */
969
+ transition: background-color 0.2s, height 0.2s, box-shadow 0.2s;
970
+ }
971
+
972
+ .horizontal-resizer:hover, .horizontal-resizer.active {
973
+ background-color: #d0d0d0;
974
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
975
+ }
976
+
977
+ .horizontal-resizer:hover::after, .horizontal-resizer.active::after {
978
+ background-color: #409EFF;
979
+ height: 6px;
980
+ box-shadow: 0 0 8px rgba(64, 158, 255, 0.6);
981
+ }
688
982
  </style>