jvs-ppt-ui 0.0.14 → 0.0.16

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.
Files changed (67) hide show
  1. package/dist/lib/check_imgs.html +18 -0
  2. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.css +187 -27
  3. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.js +1 -1
  4. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.json +345 -65
  5. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.ttf +0 -0
  6. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.woff +0 -0
  7. package/dist/lib/jvs-ppt-ui/iconfont/iconfont.woff2 +0 -0
  8. package/dist/lib/jvs-ppt-ui/img/al.png +0 -0
  9. package/dist/lib/jvs-ppt-ui/img/d.png +0 -0
  10. package/dist/lib/jvs-ppt-ui/img/dl.png +0 -0
  11. package/dist/lib/jvs-ppt-ui/img/l.png +0 -0
  12. package/dist/lib/jvs-ppt-ui.es.js +44973 -43349
  13. package/dist/lib/jvs-ppt-ui.umd.js +102 -102
  14. package/dist/lib/style.css +1 -1
  15. package/package.json +1 -1
  16. package/scripts/check-icons.mjs +22 -0
  17. package/scripts/patch-anim-icons.mjs +45 -0
  18. package/src/assets/iconfont/iconfont.css +187 -27
  19. package/src/assets/iconfont/iconfont.js +1 -1
  20. package/src/assets/iconfont/iconfont.json +345 -65
  21. package/src/assets/iconfont/iconfont.ttf +0 -0
  22. package/src/assets/iconfont/iconfont.woff +0 -0
  23. package/src/assets/iconfont/iconfont.woff2 +0 -0
  24. package/src/components/CanvasArea.vue +218 -193
  25. package/src/components/ChartTypeSelector.vue +509 -148
  26. package/src/components/Header.vue +327 -44
  27. package/src/components/PresentationGroupChild.vue +44 -13
  28. package/src/components/PresentationMode.vue +84 -33
  29. package/src/components/QuickBorderPopover.vue +51 -11
  30. package/src/components/QuickColorPopover.vue +65 -21
  31. package/src/components/SidebarLeft.vue +286 -107
  32. package/src/components/SidebarRight.vue +45 -38
  33. package/src/components/TemplateGallery.vue +1110 -1237
  34. package/src/components/ToastNotification.vue +2 -2
  35. package/src/components/Toolbar.vue +825 -733
  36. package/src/components/canvas/CanvasQuickToolbar.vue +17 -30
  37. package/src/components/canvas/elements/CanvasGroupElement.vue +6 -0
  38. package/src/components/canvas/elements/CanvasShapeElement.vue +198 -38
  39. package/src/components/canvas/elements/CanvasTextElement.vue +4 -3
  40. package/src/components/sidebar/common/SidebarAlignGroup.vue +104 -50
  41. package/src/components/sidebar/common/SidebarBorderAccordion.vue +375 -148
  42. package/src/components/sidebar/common/SidebarPositionGroup.vue +358 -149
  43. package/src/components/sidebar/common/SidebarReflectionAccordion.vue +429 -203
  44. package/src/components/sidebar/common/SidebarShadowAccordion.vue +844 -416
  45. package/src/components/sidebar/panels/GradientEditor.vue +671 -316
  46. package/src/components/sidebar/panels/LayoutThumbSvg.vue +33 -16
  47. package/src/components/sidebar/panels/SidebarAnimationPanel.vue +701 -138
  48. package/src/components/sidebar/panels/SidebarChartFormatPanel.vue +3 -3
  49. package/src/components/sidebar/panels/SidebarDesignPanel.vue +1754 -416
  50. package/src/components/sidebar/panels/SidebarMediaFormatPanel.vue +12 -0
  51. package/src/components/sidebar/panels/SidebarShapeFormatPanel.vue +813 -174
  52. package/src/components/sidebar/panels/SidebarTableFormatPanel.vue +2 -2
  53. package/src/components/sidebar/panels/SidebarTextFormatPanel.vue +1938 -1427
  54. package/src/components/sidebar/panels/SidebarTransitionPanel.vue +791 -210
  55. package/src/composables/canvas/useCanvasShortcuts.ts +20 -6
  56. package/src/composables/canvas/useCanvasText.ts +1 -1
  57. package/src/composables/canvas/useCanvasTransform.ts +44 -0
  58. package/src/composables/presetThemes.ts +43 -44
  59. package/src/composables/sidebar/useSidebarAnimation.ts +101 -25
  60. package/src/composables/sidebar/useSidebarDesign.ts +30 -11
  61. package/src/composables/sidebar/useSidebarElementTransform.ts +10 -1
  62. package/src/composables/sidebar/useSidebarImage.ts +10 -2
  63. package/src/composables/sidebar/useSidebarShapeFormat.ts +562 -107
  64. package/src/composables/useSlides.ts +331 -153
  65. package/src/main.ts +2 -0
  66. package/src/style.css +926 -359
  67. package/src/utils/canvas/elementStyles.ts +42 -1
package/src/style.css CHANGED
@@ -21,7 +21,7 @@
21
21
  --text-muted: #94a3b8;
22
22
 
23
23
  /* Brand Gradients & Accents */
24
- --accent-primary: #7c3aed;
24
+ --accent-primary: #1e6fff;
25
25
  --accent-secondary: #db2777;
26
26
  --gradient-brand: linear-gradient(135deg, #7c3aed 0%, #db2777 100%);
27
27
  --gradient-glow: radial-gradient(circle at 50% 50%, rgba(124, 58, 237, 0.06) 0%, transparent 60%);
@@ -34,8 +34,8 @@
34
34
  --glass-backdrop: blur(16px);
35
35
 
36
36
  /* Sidebar Widths */
37
- --sidebar-left-width: 176px;
38
- --sidebar-right-width: 320px;
37
+ --sidebar-left-width: 240px;
38
+ --sidebar-right-width: 288px;
39
39
 
40
40
  /* Transitions */
41
41
  --transition-fast: 0.15s ease;
@@ -246,7 +246,7 @@ body {
246
246
  /* Header */
247
247
  .app-header {
248
248
  grid-row: 1;
249
- height: 52px;
249
+ height: 64px;
250
250
  display: flex;
251
251
  align-items: center;
252
252
  justify-content: space-between;
@@ -377,25 +377,38 @@ body {
377
377
  flex-direction: column;
378
378
  align-items: center;
379
379
  justify-content: center;
380
- gap: 4px;
381
- width: 48px;
382
- height: 52px;
383
- border-radius: 0;
380
+ gap: 0;
381
+ min-width: 32px;
382
+ height: 32px;
383
+ border-radius: 6px;
384
384
  border: 1px solid transparent;
385
385
  background: transparent;
386
386
  color: #475569;
387
387
  cursor: pointer;
388
- transition: all var(--transition-fast);
389
- padding: 0;
388
+ transition: background-color 0.15s ease, color 0.15s ease;
389
+ padding: 0 4px;
390
390
  box-sizing: border-box;
391
391
  }
392
392
 
393
- .toolbar-btn-stacked:hover {
394
- color: #1E6FFF;
393
+ .toolbar-btn-stacked:hover:not(.disabled):not(.btn-active) {
394
+ background: #f1f5f9;
395
+ color: #1e293b;
395
396
  }
396
397
 
397
398
  .toolbar-btn-stacked.btn-active {
398
- color: #1E6FFF;
399
+ background: #f1f1f1 !important;
400
+ color: #1E6FFF !important;
401
+ border-radius: 6px !important;
402
+ }
403
+
404
+ .toolbar-btn-stacked.btn-active:hover {
405
+ background: #e5e5e5 !important;
406
+ color: #1E6FFF !important;
407
+ }
408
+
409
+ .toolbar-btn-stacked::after,
410
+ .master-tb-btn::after {
411
+ display: none !important;
399
412
  }
400
413
 
401
414
  .toolbar-btn-stacked.disabled {
@@ -405,8 +418,8 @@ body {
405
418
  }
406
419
 
407
420
  .toolbar-btn-stacked .toolbar-btn-icon {
408
- width: 24px;
409
- height: 24px;
421
+ width: 22px;
422
+ height: 22px;
410
423
  fill: currentColor;
411
424
  stroke: currentColor;
412
425
  stroke-width: 0;
@@ -425,7 +438,7 @@ body {
425
438
  display: grid;
426
439
  grid-template-columns: var(--sidebar-left-width) 1fr auto;
427
440
  grid-template-rows: 1fr;
428
- height: calc(100vh - 52px);
441
+ height: calc(100vh - 64px);
429
442
  overflow: hidden;
430
443
  }
431
444
 
@@ -498,7 +511,7 @@ body {
498
511
  flex: 1;
499
512
  overflow-y: auto;
500
513
  scrollbar-gutter: stable;
501
- padding: 12px 8px 12px 12px;
514
+ padding: 0 16px 16px 16px;
502
515
  display: flex;
503
516
  flex-direction: column;
504
517
  gap: 12px;
@@ -509,45 +522,30 @@ body {
509
522
  }
510
523
 
511
524
  .slide-item-wrapper {
512
- display: flex;
513
- align-items: center;
514
- gap: 8px;
515
- padding: 6px 8px 6px 4px;
516
- border-radius: 6px;
517
- transition: background-color 0.2s;
525
+ display: block;
526
+ padding: 0;
527
+ border-radius: 8px;
528
+ transition: none;
518
529
  content-visibility: auto;
519
- contain-intrinsic-size: 190px 110px;
530
+ contain-intrinsic-size: 208px 117px;
520
531
  }
521
532
 
522
533
  .slide-item-wrapper.active {
523
- background: rgba(30, 111, 255, 0.12);
524
- }
525
-
526
- .slide-item-wrapper.active .slide-index {
527
- color: #1E6FFF;
528
- font-weight: 600;
529
- }
530
-
531
- .slide-index {
532
- font-size: 14px;
533
- font-weight: 500;
534
- color: #6F7588;
535
- width: 16px;
536
- text-align: center;
537
- margin-top: 4px;
534
+ background: transparent;
538
535
  }
539
536
 
540
537
  .slide-thumb {
541
- flex: 1;
538
+ width: 100%;
542
539
  aspect-ratio: 16/9;
543
- border: 1px solid var(--border-color);
544
- border-radius: 4px;
540
+ border: 1px solid #E2E8F0;
541
+ border-radius: 8px;
545
542
  cursor: pointer;
546
543
  position: relative;
547
544
  overflow: hidden;
548
- transition: border-color 0.1s ease;
545
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
549
546
  background: #ffffff;
550
- outline: 1px solid transparent;
547
+ outline: none;
548
+ box-sizing: border-box;
551
549
  }
552
550
 
553
551
  .slide-thumb:hover {
@@ -556,20 +554,37 @@ body {
556
554
 
557
555
  .slide-thumb.active {
558
556
  background: #FFFFFF;
559
- border-radius: 4px;
560
- border: 1px solid #1E6FFF;
557
+ border-radius: 8px;
558
+ border: 2px solid #1E6FFF;
561
559
  outline: none;
562
560
  box-shadow: none;
563
561
  }
564
562
 
563
+ .slide-thumb-badge {
564
+ position: absolute;
565
+ top: 6px;
566
+ left: 6px;
567
+ background: rgba(15, 23, 42, 0.45);
568
+ backdrop-filter: blur(2px);
569
+ -webkit-backdrop-filter: blur(2px);
570
+ color: #FFFFFF;
571
+ font-size: 11px;
572
+ font-weight: 600;
573
+ line-height: 1;
574
+ padding: 3px 6px;
575
+ border-radius: 4px;
576
+ z-index: 5;
577
+ pointer-events: none;
578
+ letter-spacing: 0.5px;
579
+ display: flex;
580
+ align-items: center;
581
+ justify-content: center;
582
+ }
583
+
565
584
  .slide-thumb-scale-wrapper {
566
- width: 800px;
567
- height: 450px;
568
585
  position: absolute;
569
586
  top: 0;
570
587
  left: 0;
571
- transform: scale(0.23);
572
- /* Scales 800px width down to 184px thumbnail width */
573
588
  transform-origin: top left;
574
589
  pointer-events: none;
575
590
  overflow: hidden;
@@ -736,10 +751,13 @@ body {
736
751
  .canvas-element.editing-text,
737
752
  .canvas-element.editing-text [id^="editable-"],
738
753
  .canvas-element.editing-text [id^="editable-"] * {
739
- cursor: text !important;
740
754
  user-select: text !important;
741
755
  }
742
756
 
757
+ .canvas-element [id^="editable-"] * {
758
+ cursor: inherit;
759
+ }
760
+
743
761
  .slide-title-el {
744
762
  font-size: 52px;
745
763
  font-weight: 700;
@@ -828,6 +846,7 @@ body {
828
846
  /* Panel Tab Bar */
829
847
  .panel-tabs {
830
848
  display: flex;
849
+ width: 288px;
831
850
  height: 40px;
832
851
  /* border-bottom: 1px solid var(--border-color); */
833
852
  padding: 0 10px;
@@ -1763,66 +1782,93 @@ td.selected-cell.focused-cell,
1763
1782
  }
1764
1783
 
1765
1784
  /* Lines Dropdown Styles */
1785
+ .line-dropdown-popper.el-popper {
1786
+ padding: 0 !important;
1787
+ border-radius: 12px !important;
1788
+ border: 1px solid #edf0f5 !important;
1789
+ box-shadow: 0 6px 24px rgba(0, 0, 0, 0.08) !important;
1790
+ background: transparent !important;
1791
+ }
1792
+
1793
+ .line-dropdown-popper .el-popper__arrow {
1794
+ display: none !important;
1795
+ }
1796
+
1766
1797
  .line-dropdown-menu {
1767
- width: 240px;
1768
- padding: 8px 12px;
1769
- background: #ffffff;
1770
- border-radius: 4px;
1771
- box-shadow: var(--shadow-md);
1798
+ width: 192px !important;
1799
+ height: 137px !important;
1800
+ box-sizing: border-box !important;
1801
+ padding: 10px 10px 8px !important;
1802
+ background: #ffffff !important;
1803
+ border-radius: 12px !important;
1804
+ overflow: hidden !important;
1805
+ display: flex !important;
1806
+ flex-direction: column !important;
1807
+ justify-content: space-between !important;
1772
1808
  }
1773
1809
 
1774
1810
  .line-dropdown-section-title {
1775
- background: transparent;
1776
- border-left: none;
1777
- padding: 2px 0 2px 0;
1778
- font-size: 13px;
1779
- font-weight: 500;
1780
- color: #334155;
1781
- margin: 6px 0 10px 0;
1782
- border-radius: 0;
1811
+ background: transparent !important;
1812
+ border-left: none !important;
1813
+ padding: 0 !important;
1814
+ font-size: 11px !important;
1815
+ font-weight: 500 !important;
1816
+ color: #64748b !important;
1817
+ margin: 0 0 4px 2px !important;
1818
+ line-height: 14px !important;
1819
+ user-select: none !important;
1783
1820
  }
1784
1821
 
1785
1822
  .line-grid {
1786
- display: flex;
1787
- flex-wrap: wrap;
1788
- gap: 8px;
1789
- margin-bottom: 12px;
1823
+ display: flex !important;
1824
+ flex-wrap: wrap !important;
1825
+ gap: 8px !important;
1826
+ margin-bottom: 0 !important;
1827
+ align-items: center !important;
1790
1828
  }
1791
1829
 
1792
1830
  .line-grid:last-child {
1793
- margin-bottom: 4px;
1831
+ margin-bottom: 0 !important;
1794
1832
  }
1795
1833
 
1796
1834
  .line-grid-item {
1797
- width: 36px;
1798
- height: 36px;
1799
- display: flex;
1800
- align-items: center;
1801
- justify-content: center;
1802
- border-radius: 4px;
1803
- cursor: pointer;
1804
- color: #495057;
1805
- transition: all var(--transition-fast);
1806
- background: transparent;
1835
+ width: 26px !important;
1836
+ height: 26px !important;
1837
+ display: flex !important;
1838
+ align-items: center !important;
1839
+ justify-content: center !important;
1840
+ border-radius: 4px !important;
1841
+ cursor: pointer !important;
1842
+ color: #475569 !important;
1843
+ transition: all 0.15s ease !important;
1844
+ background: transparent !important;
1845
+ border: 1px solid transparent !important;
1846
+ box-sizing: border-box !important;
1807
1847
  }
1808
1848
 
1809
1849
  .line-grid-item:hover {
1810
- background: #f1f3f5;
1811
- color: #d84b39;
1850
+ background: #F0F2F4 !important;
1851
+ color: #1e293b !important;
1852
+ border-color: #cbd5e1 !important;
1812
1853
  }
1813
1854
 
1814
1855
  .line-grid-item.active {
1815
- background: #f1f5f9;
1816
- color: #2563eb;
1856
+ background: #F0F2F4 !important;
1857
+ color: #2563eb !important;
1858
+ border-color: #3b82f6 !important;
1817
1859
  }
1818
1860
 
1819
1861
  .line-grid-item svg {
1820
- display: block;
1862
+ display: block !important;
1863
+ width: 16px !important;
1864
+ height: 16px !important;
1821
1865
  }
1822
1866
 
1823
1867
  .line-thumb-svg {
1868
+ width: 16px !important;
1869
+ height: 16px !important;
1824
1870
  stroke: currentColor;
1825
- stroke-width: 2.2;
1871
+ stroke-width: 2.4;
1826
1872
  stroke-linecap: round;
1827
1873
  }
1828
1874
 
@@ -1838,20 +1884,61 @@ td.selected-cell.focused-cell,
1838
1884
  stroke: none;
1839
1885
  }
1840
1886
 
1841
- /* Override default element popper padding for lines */
1842
- .line-dropdown-popper.el-popper {
1843
- padding: 0 !important;
1887
+ .line-icon-svg {
1888
+ width: 16px !important;
1889
+ height: 16px !important;
1890
+ stroke: none !important;
1891
+ flex-shrink: 0 !important;
1892
+ }
1893
+
1894
+ .line-grid-item .icon-active {
1895
+ display: none !important;
1896
+ }
1897
+
1898
+ .line-grid-item .icon-normal {
1899
+ display: block !important;
1900
+ }
1901
+
1902
+ .line-grid-item:hover .icon-normal,
1903
+ .line-grid-item.active .icon-normal {
1904
+ display: none !important;
1905
+ }
1906
+
1907
+ .line-grid-item:hover .icon-active,
1908
+ .line-grid-item.active .icon-active {
1909
+ display: block !important;
1910
+ }
1911
+
1912
+ .line-img {
1913
+ width: 16px !important;
1914
+ height: 16px !important;
1915
+ display: block !important;
1916
+ object-fit: contain !important;
1917
+ transition: filter 0.15s ease !important;
1918
+ }
1919
+
1920
+ .line-grid-item:hover .line-img,
1921
+ .line-grid-item.active .line-img,
1922
+ .toolbar-btn-stacked.btn-active .line-img,
1923
+ .toolbar-btn-stacked:hover .line-img {
1924
+ filter: invert(36%) sepia(91%) saturate(2206%) hue-rotate(210deg) brightness(98%) contrast(96%) !important;
1844
1925
  }
1845
1926
 
1846
- /* Table Popover Styles */
1927
+ /* Table Popover Styles (Aligned with 图二媒体弹窗规范) */
1928
+ .table-popover-popper.el-popper,
1847
1929
  .table-popover-popper {
1848
- padding: 12px !important;
1930
+ padding: 14px 14px 16px 14px !important;
1931
+ border-radius: 12px !important;
1932
+ border: 1px solid #edf0f5 !important;
1933
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08) !important;
1934
+ background: #ffffff !important;
1935
+ min-width: 0 !important;
1849
1936
  }
1850
1937
 
1851
1938
  .table-popover-content {
1852
1939
  display: flex;
1853
1940
  flex-direction: column;
1854
- gap: 12px;
1941
+ gap: 10px;
1855
1942
  color: #1e293b;
1856
1943
  font-family: var(--font-sans, system-ui);
1857
1944
  }
@@ -1860,41 +1947,44 @@ td.selected-cell.focused-cell,
1860
1947
  display: flex;
1861
1948
  justify-content: space-between;
1862
1949
  align-items: center;
1863
- border-bottom: 1px solid #f1f5f9;
1864
- padding-bottom: 8px;
1950
+ border-bottom: none !important;
1951
+ padding-bottom: 0 !important;
1952
+ height: 20px;
1953
+ padding: 0 2px;
1865
1954
  }
1866
1955
 
1867
1956
  .table-popover-header .table-title {
1868
1957
  font-size: 14px;
1869
- font-weight: 600;
1958
+ font-weight: 500;
1959
+ color: #1e293b;
1870
1960
  display: flex;
1871
1961
  align-items: center;
1872
1962
  }
1873
1963
 
1874
1964
  .table-size-indicator {
1875
- font-size: 12px;
1876
- color: #d84b39;
1877
- margin-left: 6px;
1878
- font-weight: normal;
1965
+ font-size: 13px;
1966
+ color: #475569;
1967
+ font-weight: 500;
1968
+ line-height: 20px;
1879
1969
  }
1880
1970
 
1881
1971
  .table-popover-header .table-action {
1882
1972
  font-size: 12px;
1883
- color: #d84b39;
1973
+ color: #64748b;
1884
1974
  cursor: pointer;
1885
- font-weight: 500;
1975
+ font-weight: 400;
1886
1976
  transition: opacity 0.2s;
1887
1977
  }
1888
1978
 
1889
1979
  .table-popover-header .table-action:hover {
1890
1980
  opacity: 0.8;
1981
+ color: #3b82f6;
1891
1982
  }
1892
1983
 
1893
1984
  .table-grid-picker {
1894
1985
  display: flex;
1895
1986
  flex-direction: column;
1896
1987
  align-items: center;
1897
- gap: 8px;
1898
1988
  user-select: none;
1899
1989
  }
1900
1990
 
@@ -1909,10 +1999,6 @@ td.selected-cell.focused-cell,
1909
1999
  display: flex;
1910
2000
  flex-direction: column;
1911
2001
  gap: 4px;
1912
- /* padding: 4px; */
1913
- /* background: #f8fafc; */
1914
- border-radius: 6px;
1915
- /* border: 1px solid #e2e8f0; */
1916
2002
  }
1917
2003
 
1918
2004
  .table-grid-picker .grid-row {
@@ -1921,19 +2007,20 @@ td.selected-cell.focused-cell,
1921
2007
  }
1922
2008
 
1923
2009
  .table-grid-picker .grid-cell {
1924
- width: 18px;
1925
- height: 18px;
1926
- border: 1px solid #cbd5e1;
2010
+ width: 20px;
2011
+ height: 20px;
2012
+ border: 1px solid #e2e8f0;
1927
2013
  background: #ffffff;
1928
- border-radius: 2px;
2014
+ border-radius: 4px;
1929
2015
  cursor: pointer;
1930
2016
  box-sizing: border-box;
1931
- transition: all 0.1s ease;
2017
+ transition: background-color 0.12s ease, border-color 0.12s ease;
1932
2018
  }
1933
2019
 
2020
+ .table-grid-picker .grid-cell:hover,
1934
2021
  .table-grid-picker .grid-cell.active {
1935
- background-color: rgba(30, 111, 255, 0.15);
1936
- border-color: #1e6fff;
2022
+ background-color: #ebf3fe !important;
2023
+ border-color: #3b82f6 !important;
1937
2024
  }
1938
2025
 
1939
2026
  /* Custom Table Form */
@@ -1995,7 +2082,7 @@ td.selected-cell.focused-cell,
1995
2082
  }
1996
2083
 
1997
2084
  .table-custom-form .cancel-btn:hover {
1998
- background: #f8fafc;
2085
+ background: #F0F2F4;
1999
2086
  border-color: #94a3b8;
2000
2087
  }
2001
2088
 
@@ -2072,126 +2159,258 @@ td.selected-cell.focused-cell,
2072
2159
  mask-image: var(--text-ref-mask) !important;
2073
2160
  }
2074
2161
 
2075
- /* Media Popover Styles */
2076
- .media-popover-popper.el-popper {
2077
- padding: 12px !important;
2162
+ /* Image Popover Styles (Aligned with 图一与媒体弹窗规范) */
2163
+ .image-popover-popper.el-popper,
2164
+ .image-dropdown-popper.el-popper {
2165
+ padding: 6px !important;
2166
+ border-radius: 12px !important;
2167
+ border: 1px solid #edf0f5 !important;
2168
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
2169
+ background: #ffffff !important;
2170
+ min-width: 130px !important;
2078
2171
  }
2079
2172
 
2080
- .media-popover-content {
2173
+ .image-popover-popper .el-popper__arrow,
2174
+ .image-dropdown-popper .el-popper__arrow {
2175
+ display: none !important;
2176
+ }
2177
+
2178
+ .image-popover-menu {
2081
2179
  display: flex;
2082
2180
  flex-direction: column;
2083
- gap: 16px;
2084
- color: #1e293b;
2085
- font-family: var(--font-sans, system-ui);
2181
+ padding: 2px;
2182
+ gap: 2px;
2086
2183
  }
2087
2184
 
2088
- .media-popover-tabs {
2185
+ .image-menu-item {
2089
2186
  display: flex;
2090
- gap: 20px;
2091
- border-bottom: 1px solid #f1f5f9;
2092
- padding-bottom: 0px;
2187
+ align-items: center;
2188
+ gap: 10px;
2189
+ padding: 8px 12px;
2190
+ border-radius: 6px;
2191
+ cursor: pointer;
2192
+ font-size: 13px;
2193
+ font-weight: 500;
2194
+ color: #1e293b;
2195
+ transition: background-color 0.15s ease, color 0.15s ease;
2196
+ user-select: none;
2093
2197
  }
2094
2198
 
2095
- .media-tab {
2096
- font-size: 14px;
2097
- font-weight: 500;
2098
- color: #475569;
2099
- cursor: pointer;
2100
- padding: 8px 4px;
2101
- border-bottom: 2px solid transparent;
2102
- transition: all 0.2s;
2199
+ .image-menu-item:hover {
2200
+ background: #F0F2F4 !important;
2201
+ color: #2563eb !important;
2103
2202
  }
2104
2203
 
2105
- .media-tab:hover {
2106
- color: #1e293b;
2204
+ .image-menu-icon {
2205
+ width: 16px;
2206
+ height: 16px;
2207
+ flex-shrink: 0;
2208
+ stroke: currentColor;
2209
+ color: currentColor;
2210
+ stroke-width: 1.8;
2211
+ stroke-linecap: round;
2212
+ stroke-linejoin: round;
2213
+ fill: none;
2214
+ display: block;
2107
2215
  }
2108
2216
 
2109
- .media-tab.active {
2110
- color: #d84b39;
2111
- border-bottom-color: #d84b39;
2112
- font-weight: 600;
2217
+ .image-menu-text {
2218
+ line-height: 1;
2219
+ white-space: nowrap;
2113
2220
  }
2114
2221
 
2115
- .media-input-wrapper {
2222
+ /* 兼容 el-dropdown */
2223
+ .image-dropdown-popper .el-dropdown-menu {
2224
+ padding: 2px !important;
2225
+ border: none !important;
2226
+ background: transparent !important;
2116
2227
  display: flex;
2228
+ flex-direction: column;
2229
+ gap: 2px;
2117
2230
  }
2118
2231
 
2119
- .media-url-input {
2120
- width: 100%;
2121
- border: 1px solid #cbd5e1;
2122
- border-radius: 4px;
2123
- padding: 8px 12px;
2124
- font-size: 13px;
2125
- outline: none;
2126
- transition: border-color 0.2s;
2127
- background: #ffffff;
2128
- color: #1e293b;
2232
+ .image-dropdown-popper .el-dropdown-menu__item {
2233
+ display: flex !important;
2234
+ align-items: center !important;
2235
+ gap: 10px !important;
2236
+ padding: 8px 12px !important;
2237
+ border-radius: 6px !important;
2238
+ cursor: pointer !important;
2239
+ font-size: 13px !important;
2240
+ font-weight: 500 !important;
2241
+ color: #1e293b !important;
2242
+ line-height: 1 !important;
2243
+ transition: background-color 0.15s ease, color 0.15s ease !important;
2129
2244
  }
2130
2245
 
2131
- .media-url-input:focus {
2132
- border-color: #d84b39;
2246
+ .image-dropdown-popper .el-dropdown-menu__item:hover,
2247
+ .image-dropdown-popper .el-dropdown-menu__item:focus {
2248
+ background: #F0F2F4 !important;
2249
+ color: #2563eb !important;
2250
+ }
2251
+
2252
+ .image-dropdown-popper .dropdown-icon-svg {
2253
+ width: 16px !important;
2254
+ height: 16px !important;
2255
+ }
2256
+
2257
+ /* Media Popover Styles */
2258
+ /* Media Popover Styles (Aligned with 图一) */
2259
+ .media-popover-popper.el-popper {
2260
+ padding: 6px !important;
2261
+ border-radius: 12px !important;
2262
+ border: 1px solid #edf0f5 !important;
2263
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
2264
+ background: #ffffff !important;
2265
+ min-width: 140px !important;
2133
2266
  }
2134
2267
 
2135
- .media-popover-footer {
2268
+ .media-popover-menu {
2136
2269
  display: flex;
2137
- justify-content: space-between;
2138
- align-items: center;
2270
+ flex-direction: column;
2271
+ padding: 2px;
2272
+ gap: 2px;
2139
2273
  }
2140
2274
 
2141
- .media-upload-btn {
2142
- display: inline-flex;
2275
+ .media-menu-item {
2276
+ display: flex;
2143
2277
  align-items: center;
2144
- padding: 6px 12px;
2145
- font-size: 12px;
2278
+ gap: 10px;
2279
+ padding: 8px 12px;
2280
+ border-radius: 6px;
2281
+ cursor: pointer;
2282
+ font-size: 13px;
2146
2283
  font-weight: 500;
2284
+ color: #1e293b;
2285
+ transition: background-color 0.15s ease, color 0.15s ease;
2286
+ user-select: none;
2287
+ }
2288
+
2289
+ .media-menu-item:hover {
2290
+ background: #F0F2F4 !important;
2291
+ color: #1e293b !important;
2292
+ }
2293
+
2294
+ .media-menu-icon {
2295
+ width: 16px;
2296
+ height: 16px;
2297
+ flex-shrink: 0;
2298
+ stroke: #1e293b;
2299
+ color: #1e293b;
2300
+ display: block;
2301
+ }
2302
+
2303
+ .media-menu-item:hover .media-menu-icon {
2304
+ stroke: #1e293b;
2305
+ }
2306
+
2307
+ .media-menu-text {
2308
+ line-height: 1;
2309
+ white-space: nowrap;
2310
+ }
2311
+
2312
+ .media-menu-divider {
2313
+ height: 1px;
2314
+ background: #f1f5f9;
2315
+ margin: 3px 6px;
2316
+ }
2317
+
2318
+ /* Address Input Panel */
2319
+ .media-address-panel {
2320
+ display: flex;
2321
+ flex-direction: column;
2322
+ gap: 10px;
2323
+ padding: 6px 8px;
2324
+ min-width: 280px;
2325
+ }
2326
+
2327
+ .media-address-header {
2328
+ display: flex;
2329
+ align-items: center;
2330
+ justify-content: space-between;
2331
+ }
2332
+
2333
+ .media-back-btn {
2334
+ display: inline-flex;
2335
+ align-items: center;
2336
+ gap: 4px;
2337
+ background: transparent;
2338
+ border: none;
2339
+ cursor: pointer;
2340
+ color: #64748b;
2341
+ font-size: 12px;
2342
+ padding: 3px 6px;
2147
2343
  border-radius: 4px;
2344
+ transition: all 0.15s ease;
2345
+ }
2346
+
2347
+ .media-back-btn:hover {
2348
+ background: #F0F2F4;
2349
+ color: #1e293b;
2350
+ }
2351
+
2352
+ .media-address-title {
2353
+ font-size: 13px;
2354
+ font-weight: 600;
2355
+ color: #1e293b;
2356
+ }
2357
+
2358
+ .media-address-body {
2359
+ width: 100%;
2360
+ }
2361
+
2362
+ .media-address-input {
2363
+ width: 100%;
2364
+ box-sizing: border-box;
2365
+ padding: 7px 10px;
2148
2366
  border: 1px solid #cbd5e1;
2367
+ border-radius: 6px;
2368
+ font-size: 12px;
2369
+ color: #1e293b;
2370
+ outline: none;
2149
2371
  background: #ffffff;
2150
- color: #475569;
2151
- cursor: pointer;
2152
- transition: all 0.2s;
2372
+ transition: border-color 0.15s ease, box-shadow 0.15s ease;
2153
2373
  }
2154
2374
 
2155
- .media-upload-btn:hover {
2156
- background: #f8fafc;
2157
- border-color: #94a3b8;
2158
- color: #1e293b;
2375
+ .media-address-input:focus {
2376
+ border-color: #2563eb;
2377
+ box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.12);
2159
2378
  }
2160
2379
 
2161
- .action-btn-side {
2380
+ .media-address-footer {
2162
2381
  display: flex;
2382
+ justify-content: flex-end;
2163
2383
  gap: 8px;
2164
2384
  }
2165
2385
 
2166
- .media-btn {
2167
- padding: 6px 16px;
2386
+ .media-footer-btn {
2387
+ padding: 5px 12px;
2168
2388
  font-size: 12px;
2169
- font-weight: 500;
2170
- border-radius: 4px;
2389
+ border-radius: 5px;
2171
2390
  cursor: pointer;
2172
- transition: all 0.2s;
2391
+ transition: all 0.15s ease;
2173
2392
  }
2174
2393
 
2175
- .media-btn.cancel-btn {
2394
+ .media-footer-btn.cancel {
2395
+ border: 1px solid #e2e8f0;
2176
2396
  background: #ffffff;
2177
- border: 1px solid #cbd5e1;
2178
- color: #475569;
2397
+ color: #64748b;
2179
2398
  }
2180
2399
 
2181
- .media-btn.cancel-btn:hover {
2182
- background: #f8fafc;
2183
- border-color: #94a3b8;
2400
+ .media-footer-btn.cancel:hover {
2401
+ background: #F0F2F4;
2184
2402
  color: #1e293b;
2185
2403
  }
2186
2404
 
2187
- .media-btn.confirm-btn {
2188
- background: #d84b39;
2189
- border: 1px solid #d84b39;
2405
+ .media-footer-btn.confirm {
2406
+ border: none;
2407
+ background: #2563eb;
2190
2408
  color: #ffffff;
2409
+ font-weight: 500;
2191
2410
  }
2192
2411
 
2193
- .media-btn.confirm-btn:hover {
2194
- opacity: 0.9;
2412
+ .media-footer-btn.confirm:hover {
2413
+ background: #1d4ed8;
2195
2414
  }
2196
2415
 
2197
2416
  /* Shape Picker Popover Styles */
@@ -2265,7 +2484,7 @@ td.selected-cell.focused-cell,
2265
2484
  }
2266
2485
 
2267
2486
  .shape-item-btn:hover {
2268
- background: #f0f2f5;
2487
+ background: #F0F2F4;
2269
2488
  }
2270
2489
 
2271
2490
  .shape-item-btn:hover path {
@@ -2313,7 +2532,7 @@ td.selected-cell.focused-cell,
2313
2532
  }
2314
2533
 
2315
2534
  .free-draw-btn:hover {
2316
- background: #f8fafc;
2535
+ background: #F0F2F4;
2317
2536
  border-color: #94a3b8;
2318
2537
  color: #1e293b;
2319
2538
  }
@@ -3267,15 +3486,15 @@ td.selected-cell.focused-cell,
3267
3486
  .slide-context-menu {
3268
3487
  position: fixed;
3269
3488
  background: #ffffff;
3270
- border: 1px solid var(--border-color);
3489
+ border: 1px solid #e2e8f0;
3271
3490
  border-radius: 8px;
3272
- box-shadow: var(--shadow-lg);
3273
- padding: 6px 0;
3491
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
3492
+ padding: 4px;
3274
3493
  z-index: 99999;
3275
- min-width: 180px;
3494
+ min-width: 170px;
3276
3495
  font-family: var(--font-sans);
3277
3496
  font-size: 13px;
3278
- color: var(--text-primary);
3497
+ color: #334155;
3279
3498
  user-select: none;
3280
3499
  }
3281
3500
 
@@ -3285,27 +3504,28 @@ td.selected-cell.focused-cell,
3285
3504
  display: flex;
3286
3505
  align-items: center;
3287
3506
  justify-content: space-between;
3288
- padding: 8px 16px;
3507
+ padding: 6px 10px;
3508
+ border-radius: 6px;
3289
3509
  cursor: pointer;
3290
- transition: all var(--transition-fast);
3291
- color: var(--text-primary);
3510
+ transition: background 0.15s ease, color 0.15s ease;
3511
+ color: #334155;
3292
3512
  }
3293
3513
 
3294
3514
  .canvas-context-menu .menu-item:hover,
3295
3515
  .slide-context-menu .menu-item:hover {
3296
- background: var(--bg-card-hover);
3297
- color: var(--accent-primary);
3516
+ background: #f1f5f9;
3517
+ color: #0f172a;
3298
3518
  }
3299
3519
 
3300
3520
  .canvas-context-menu .menu-item.disabled,
3301
3521
  .slide-context-menu .menu-item.disabled {
3302
- opacity: 0.4;
3522
+ opacity: 0.45;
3523
+ cursor: not-allowed;
3303
3524
  pointer-events: none;
3304
3525
  }
3305
3526
 
3306
- .canvas-context-menu .menu-item.delete-item:hover,
3307
- .slide-context-menu .menu-item.delete-item:hover {
3308
- background: #fee2e2;
3527
+ .canvas-context-menu .menu-item.delete-item:hover {
3528
+ background: #fef2f2;
3309
3529
  color: #dc2626;
3310
3530
  }
3311
3531
 
@@ -3317,21 +3537,21 @@ td.selected-cell.focused-cell,
3317
3537
  .canvas-context-menu .menu-shortcut,
3318
3538
  .slide-context-menu .menu-shortcut {
3319
3539
  font-size: 11px;
3320
- color: var(--text-muted);
3321
- margin-left: 20px;
3540
+ color: #94a3b8;
3541
+ margin-left: 16px;
3322
3542
  }
3323
3543
 
3324
3544
  .canvas-context-menu .menu-arrow,
3325
3545
  .slide-context-menu .menu-arrow {
3326
3546
  font-size: 9px;
3327
- color: var(--text-muted);
3547
+ color: #94a3b8;
3328
3548
  }
3329
3549
 
3330
3550
  .canvas-context-menu .menu-divider,
3331
3551
  .slide-context-menu .menu-divider {
3332
3552
  height: 1px;
3333
- background: var(--border-color);
3334
- margin: 6px 0;
3553
+ background: #e2e8f0;
3554
+ margin: 4px 0;
3335
3555
  }
3336
3556
 
3337
3557
  /* Submenu Hover Styles */
@@ -3340,13 +3560,13 @@ td.selected-cell.focused-cell,
3340
3560
  display: none;
3341
3561
  position: absolute;
3342
3562
  left: 100%;
3343
- top: -6px;
3563
+ top: -4px;
3344
3564
  background: #ffffff;
3345
- border: 1px solid var(--border-color);
3565
+ border: 1px solid #e2e8f0;
3346
3566
  border-radius: 8px;
3347
- box-shadow: var(--shadow-lg);
3348
- padding: 6px 0;
3349
- min-width: 140px;
3567
+ box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
3568
+ padding: 4px;
3569
+ min-width: 150px;
3350
3570
  z-index: 100000;
3351
3571
  }
3352
3572
 
@@ -3613,198 +3833,169 @@ td.selected-cell.focused-cell,
3613
3833
  display: none !important;
3614
3834
  }
3615
3835
 
3616
- /* Adjust vertical offset for toolbar popovers and dropdowns when placed at bottom */
3617
- .shape-popover-popper[data-popper-placement="bottom-start"],
3618
- .shape-dropdown-popper[data-popper-placement="bottom-start"],
3619
- .line-dropdown-popper[data-popper-placement="bottom-start"],
3620
- .image-dropdown-popper[data-popper-placement="bottom-start"] {
3621
- transform: translateY(-10px) !important;
3836
+ /* Chart Popover Modern Layout (Aligned with user design & toolbar offset standard) */
3837
+ .chart-popover-popper.el-popper,
3838
+ .chart-popover-popper {
3839
+ padding: 12px 14px 14px 14px !important;
3840
+ border-radius: 12px !important;
3841
+ border: 1px solid #edf0f5 !important;
3842
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
3843
+ background: #ffffff !important;
3844
+ width: 568px !important;
3845
+ max-width: 568px !important;
3846
+ height: 538px !important;
3847
+ box-sizing: border-box !important;
3622
3848
  }
3623
3849
 
3624
- /* Chart Popover New Layout */
3625
- .chart-popover-popper.el-popper {
3850
+ .chart-popover-popper .el-popper__arrow {
3851
+ display: none !important;
3852
+ }
3853
+
3854
+ /* Preset Layout Popover Styles */
3855
+ .preset-layout-popover-popper.el-popper {
3856
+ width: 472px !important;
3857
+ max-width: 472px !important;
3858
+ min-width: 472px !important;
3626
3859
  padding: 0 !important;
3627
- border-radius: 6px;
3860
+ border-radius: 12px !important;
3861
+ border: 1px solid #e5e7eb !important;
3862
+ box-shadow: 0 8px 28px rgba(15, 23, 42, 0.08), 0 2px 8px rgba(15, 23, 42, 0.04) !important;
3863
+ background: #ffffff !important;
3864
+ box-sizing: border-box;
3628
3865
  overflow: hidden;
3629
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
3630
3866
  }
3631
3867
 
3632
- .chart-popover-container {
3633
- display: flex;
3634
- height: 280px;
3635
- width: 380px;
3868
+ .preset-layout-popover-popper .el-popper__arrow {
3869
+ display: none !important;
3636
3870
  }
3637
3871
 
3638
- .chart-categories-sidebar {
3639
- border-right: 1px solid #f1f5f9;
3640
- background: #ffffff;
3872
+ .preset-layout-popover-container {
3641
3873
  display: flex;
3642
3874
  flex-direction: column;
3643
- padding: 8px 8px;
3644
- box-sizing: border-box;
3645
- overflow-y: auto;
3646
- overflow-x: hidden;
3647
- }
3648
-
3649
- .chart-category-item {
3650
- width: 96px !important;
3651
- padding: 8px 12px;
3652
- font-size: 12px;
3653
- color: #475569;
3654
- cursor: pointer;
3655
- transition: all 0.2s;
3656
- user-select: none;
3657
- font-weight: 500;
3658
- text-align: center;
3659
- }
3660
-
3661
- .chart-category-item:hover {
3662
- background: #f8fafc;
3663
- color: #1e6fff;
3875
+ overflow: hidden;
3876
+ background: #ffffff;
3664
3877
  }
3665
3878
 
3666
- .chart-category-item.active {
3667
- background: rgba(30, 111, 255, 0.08);
3668
- color: #1e6fff;
3879
+ .preset-layout-tabs-header {
3880
+ display: flex;
3881
+ align-items: center;
3882
+ justify-content: space-between;
3883
+ padding: 0 20px;
3884
+ height: 46px;
3885
+ border-bottom: 1px solid #f1f5f9;
3886
+ background: #ffffff;
3887
+ flex-shrink: 0;
3888
+ box-sizing: border-box;
3669
3889
  }
3670
3890
 
3671
- .chart-templates-grid {
3672
- flex: 1;
3673
- padding: 16px;
3674
- display: grid;
3675
- grid-template-columns: repeat(3, 1fr);
3676
- grid-auto-rows: min-content;
3891
+ .preset-layout-tabs {
3892
+ display: flex;
3893
+ align-items: center;
3677
3894
  gap: 24px;
3678
- overflow-y: auto;
3679
- overflow-x: hidden;
3680
- box-sizing: border-box;
3895
+ height: 100%;
3681
3896
  }
3682
3897
 
3683
- .chart-template-item {
3684
- display: flex;
3685
- flex-direction: column;
3898
+ .preset-layout-tab {
3899
+ position: relative;
3900
+ display: inline-flex;
3686
3901
  align-items: center;
3687
- gap: 8px;
3902
+ height: 100%;
3903
+ font-size: 14px;
3904
+ font-weight: 500;
3905
+ color: #94a3b8;
3688
3906
  cursor: pointer;
3689
3907
  user-select: none;
3908
+ transition: color 0.2s;
3690
3909
  }
3691
3910
 
3692
- .chart-template-item:hover .chart-template-thumb {
3693
- border-color: #1e6fff;
3694
- background: #f8fafc;
3695
- color: #1e6fff;
3696
- }
3697
-
3698
- .chart-template-item:hover .chart-template-name {
3699
- color: #1e6fff;
3700
- }
3701
-
3702
- .chart-template-thumb {
3703
- width: 56px;
3704
- height: 56px;
3705
- border: 1px dashed #cbd5e1;
3706
- border-radius: 4px;
3707
- display: flex;
3708
- align-items: center;
3709
- justify-content: center;
3710
- background: #ffffff;
3711
- color: #64748b;
3712
- transition: all 0.2s;
3713
- box-sizing: border-box;
3911
+ .preset-layout-tab:hover {
3912
+ color: #475569;
3714
3913
  }
3715
3914
 
3716
- .chart-template-thumb svg {
3717
- width: 36px;
3718
- height: 36px;
3719
- display: block;
3915
+ .preset-layout-tab.is-active {
3916
+ color: #0f172a;
3917
+ font-weight: 600;
3720
3918
  }
3721
3919
 
3722
- .chart-template-thumb img {
3723
- width: 100%;
3724
- height: 100%;
3725
- display: block;
3726
- object-fit: contain;
3920
+ .preset-layout-tab.is-active::after {
3921
+ content: '';
3922
+ position: absolute;
3923
+ left: 0;
3924
+ right: 0;
3925
+ bottom: 0;
3926
+ height: 2px;
3927
+ background: #0f172a;
3928
+ border-radius: 1px;
3727
3929
  }
3728
3930
 
3729
- .chart-template-name {
3730
- font-size: 11px;
3731
- color: #64748b;
3732
- font-weight: 500;
3733
- text-align: center;
3734
- transition: all 0.2s;
3931
+ .preset-layout-body {
3932
+ padding: 16px 20px 20px 20px;
3933
+ max-height: min(640px, calc(100vh - 140px));
3934
+ overflow-y: auto;
3935
+ box-sizing: border-box;
3735
3936
  }
3736
3937
 
3737
- /* Preset Layout Popover Styles */
3738
- .preset-layout-popover-popper.el-popper {
3739
- padding: 16px !important;
3740
- border-radius: 8px;
3741
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
3938
+ .preset-layout-body::-webkit-scrollbar {
3939
+ width: 5px;
3742
3940
  }
3743
3941
 
3744
- .preset-layout-popover-container {
3745
- display: flex;
3746
- flex-direction: column;
3747
- overflow: hidden;
3942
+ .preset-layout-body::-webkit-scrollbar-track {
3943
+ background: transparent;
3748
3944
  }
3749
3945
 
3750
- .preset-layout-header {
3751
- display: flex;
3752
- justify-content: space-between;
3753
- align-items: center;
3754
- margin-bottom: 12px;
3946
+ .preset-layout-body::-webkit-scrollbar-thumb {
3947
+ background: rgba(148, 163, 184, 0.35);
3948
+ border-radius: 3px;
3755
3949
  }
3756
3950
 
3757
- .preset-layout-title {
3758
- font-size: 14px;
3759
- font-weight: 600;
3760
- color: #1e293b;
3951
+ .preset-layout-body::-webkit-scrollbar-thumb:hover {
3952
+ background: rgba(148, 163, 184, 0.55);
3761
3953
  }
3762
3954
 
3763
- .preset-layout-edit-btn {
3764
- font-size: 13px;
3765
- color: #1e6fff;
3766
- cursor: pointer;
3767
- font-weight: 500;
3955
+ .preset-layout-master-group {
3956
+ margin-bottom: 16px;
3768
3957
  }
3769
3958
 
3770
- .preset-layout-edit-btn:hover {
3771
- text-decoration: underline;
3959
+ .preset-layout-master-group:last-child {
3960
+ margin-bottom: 0;
3772
3961
  }
3773
3962
 
3774
3963
  .preset-layout-section-name {
3775
- font-size: 12px;
3964
+ font-size: 13px;
3776
3965
  font-weight: 500;
3777
3966
  color: #64748b;
3778
3967
  margin-bottom: 12px;
3968
+ text-align: left;
3969
+ overflow: hidden;
3970
+ text-overflow: ellipsis;
3971
+ white-space: nowrap;
3779
3972
  }
3780
3973
 
3781
3974
  .preset-layout-grid {
3782
3975
  display: grid;
3783
- grid-template-columns: repeat(3, 1fr);
3784
- gap: 12px;
3785
- max-height: 380px;
3786
- overflow-y: auto;
3787
- overflow-x: hidden;
3788
- padding-right: 4px;
3976
+ grid-template-columns: repeat(2, 1fr);
3977
+ gap: 16px 14px;
3789
3978
  box-sizing: border-box;
3790
3979
  }
3791
3980
 
3792
3981
  .preset-layout-item {
3793
3982
  display: flex;
3794
3983
  flex-direction: column;
3795
- align-items: center;
3796
- gap: 6px;
3984
+ align-items: flex-start;
3797
3985
  cursor: pointer;
3986
+ width: 100%;
3987
+ min-width: 0;
3798
3988
  }
3799
3989
 
3800
3990
  .preset-layout-thumb {
3801
- width: 96px;
3802
- height: 54px;
3803
- border-radius: 4px;
3804
- border: 1px solid #e2e8f0;
3991
+ width: 100%;
3992
+ aspect-ratio: 16 / 9;
3993
+ height: auto;
3994
+ border-radius: 8px;
3995
+ border: 1px solid #e5e7eb;
3805
3996
  overflow: hidden;
3806
3997
  background: #ffffff;
3807
- transition: all 0.2s;
3998
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
3808
3999
  display: flex;
3809
4000
  align-items: center;
3810
4001
  justify-content: center;
@@ -3812,21 +4003,27 @@ td.selected-cell.focused-cell,
3812
4003
  }
3813
4004
 
3814
4005
  .preset-layout-item:hover .preset-layout-thumb {
3815
- border-color: #1e6fff;
3816
- box-shadow: 0 2px 8px rgba(30, 111, 255, 0.12);
4006
+ border-color: #cbd5e1;
4007
+ box-shadow: 0 4px 12px rgba(15, 23, 42, 0.06);
4008
+ transform: translateY(-1px);
3817
4009
  }
3818
4010
 
3819
4011
  .preset-layout-item:hover .preset-layout-name {
3820
- color: #1e6fff;
4012
+ color: #475569;
3821
4013
  }
3822
4014
 
3823
4015
  .preset-layout-name {
3824
- width: 94px;
3825
- font-size: 11px;
3826
- color: #475569;
3827
- text-align: center;
3828
- font-weight: 500;
3829
- transition: all 0.2s;
4016
+ width: 100%;
4017
+ font-size: 12px;
4018
+ color: #94a3b8;
4019
+ text-align: left;
4020
+ font-weight: 400;
4021
+ line-height: 1.4;
4022
+ margin-top: 6px;
4023
+ white-space: nowrap;
4024
+ overflow: hidden;
4025
+ text-overflow: ellipsis;
4026
+ transition: color 0.2s;
3830
4027
  }
3831
4028
 
3832
4029
  .layout-svg {
@@ -3835,25 +4032,110 @@ td.selected-cell.focused-cell,
3835
4032
  display: block;
3836
4033
  }
3837
4034
 
3838
- /* Text Dropdown Menu Styles */
3839
- .text-dropdown-menu .el-dropdown-menu__item {
3840
- padding: 8px 16px !important;
4035
+ /* Text Popover Styles (Aligned with user design & media popover spacing standard) */
4036
+ .text-popover-popper.el-popper,
4037
+ .text-popover-popper {
4038
+ padding: 10px 8px 10px 8px !important;
4039
+ border-radius: 12px !important;
4040
+ border: 1px solid #edf0f5 !important;
4041
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
4042
+ background: #ffffff !important;
4043
+ min-width: 154px !important;
4044
+ width: 154px !important;
4045
+ }
4046
+
4047
+ .text-popover-popper .el-popper__arrow {
4048
+ display: none !important;
4049
+ }
4050
+
4051
+ .text-popover-content {
4052
+ display: flex;
4053
+ flex-direction: column;
4054
+ box-sizing: border-box;
4055
+ }
4056
+
4057
+ .text-popover-group-title {
4058
+ font-size: 12px;
3841
4059
  font-weight: 500;
3842
- color: #475569 !important;
4060
+ color: #8c9ba5;
4061
+ padding: 2px 8px 6px 8px;
4062
+ user-select: none;
4063
+ letter-spacing: 0.2px;
3843
4064
  }
3844
4065
 
3845
- .text-dropdown-menu .el-dropdown-menu__item:hover {
3846
- background-color: rgba(30, 111, 255, 0.08) !important;
3847
- color: #1e6fff !important;
4066
+ .text-popover-group-title.text-draw-title {
4067
+ margin-top: 10px;
4068
+ padding-top: 2px;
3848
4069
  }
3849
4070
 
3850
- /* Text Dropdown Popper Styles */
3851
- .text-dropdown-popper.el-popper {
3852
- margin-top: -10px !important;
4071
+ .text-popover-item {
4072
+ display: flex;
4073
+ align-items: center;
4074
+ border-radius: 6px;
4075
+ padding: 5px 8px;
4076
+ margin-bottom: 2px;
4077
+ cursor: pointer;
4078
+ user-select: none;
4079
+ transition: background-color 0.15s ease;
4080
+ box-sizing: border-box;
4081
+ color: #1e293b;
3853
4082
  }
3854
4083
 
3855
- .text-dropdown-popper.el-popper .el-popper__arrow {
3856
- display: none !important;
4084
+ .text-popover-item:last-child {
4085
+ margin-bottom: 0;
4086
+ }
4087
+
4088
+ .text-popover-item:hover {
4089
+ background-color: #f0f2f5 !important;
4090
+ }
4091
+
4092
+ .text-popover-item.text-type-title {
4093
+ font-size: 24px;
4094
+ font-weight: 800;
4095
+ line-height: 1.25;
4096
+ color: #0f172a;
4097
+ letter-spacing: -0.5px;
4098
+ }
4099
+
4100
+ .text-popover-item.text-type-headline {
4101
+ font-size: 19px;
4102
+ font-weight: 700;
4103
+ line-height: 1.25;
4104
+ color: #0f172a;
4105
+ }
4106
+
4107
+ .text-popover-item.text-type-subheadline {
4108
+ font-size: 15px;
4109
+ font-weight: 600;
4110
+ line-height: 1.3;
4111
+ color: #1e293b;
4112
+ }
4113
+
4114
+ .text-popover-item.text-type-normal {
4115
+ font-size: 13.5px;
4116
+ font-weight: 400;
4117
+ line-height: 1.3;
4118
+ color: #334155;
4119
+ }
4120
+
4121
+ .text-popover-item.text-type-small {
4122
+ font-size: 12px;
4123
+ font-weight: 400;
4124
+ line-height: 1.3;
4125
+ color: #64748b;
4126
+ }
4127
+
4128
+ .text-popover-item.text-draw-item {
4129
+ font-size: 13.5px;
4130
+ font-weight: 500;
4131
+ color: #1e293b;
4132
+ gap: 8px;
4133
+ padding: 6px 8px;
4134
+ }
4135
+
4136
+ .text-draw-icon {
4137
+ flex-shrink: 0;
4138
+ color: #334155;
3857
4139
  }
3858
4140
 
3859
4141
  /* Floating Quick Toolbar */
@@ -4684,4 +4966,289 @@ td.selected-cell.focused-cell,
4684
4966
  /* 性能优化:针对选中正在变换的图元开启 GPU 硬件加速图层提升 */
4685
4967
  .main-slide .canvas-element.selected {
4686
4968
  will-change: left, top, width, height, transform;
4969
+ }
4970
+
4971
+ /* Sidebar Switch Uniform Styling */
4972
+ .sidebar .el-switch,
4973
+ .sidebar-right .el-switch {
4974
+ --el-switch-on-color: #1E6FFF !important;
4975
+ --el-switch-off-color: #cbd5e1 !important;
4976
+ }
4977
+
4978
+ .sidebar .el-switch .el-switch__core,
4979
+ .sidebar-right .el-switch .el-switch__core {
4980
+ border-radius: 12px !important;
4981
+ height: 20px !important;
4982
+ min-width: 36px !important;
4983
+ }
4984
+
4985
+ .sidebar .el-switch .el-switch__action,
4986
+ .sidebar-right .el-switch .el-switch__action {
4987
+ width: 16px !important;
4988
+ height: 16px !important;
4989
+ border-radius: 50% !important;
4990
+ }
4991
+
4992
+ .sidebar .el-switch.is-checked .el-switch__core .el-switch__action,
4993
+ .sidebar .el-switch--small.is-checked .el-switch__core .el-switch__action,
4994
+ .sidebar-right .el-switch.is-checked .el-switch__core .el-switch__action,
4995
+ .sidebar-right .el-switch--small.is-checked .el-switch__core .el-switch__action {
4996
+ left: calc(100% - 17px) !important;
4997
+ }
4998
+
4999
+ /* Unified Sidebar Select & Popover Panel */
5000
+ .autofit-popover-panel {
5001
+ min-width: 0 !important;
5002
+ padding: 6px !important;
5003
+ border-radius: 10px !important;
5004
+ border: 1px solid #edf0f3 !important;
5005
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;
5006
+ background: #ffffff !important;
5007
+ z-index: 9999 !important;
5008
+ }
5009
+
5010
+ .el-popper.sidebar-select-popper {
5011
+ min-width: 0 !important;
5012
+ padding: 0 !important;
5013
+ border-radius: 10px !important;
5014
+ border: 1px solid #edf0f3 !important;
5015
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1) !important;
5016
+ background: #ffffff !important;
5017
+ overflow: hidden !important;
5018
+ z-index: 9999 !important;
5019
+ }
5020
+
5021
+ .autofit-popover-panel .el-popper__arrow,
5022
+ .el-popper.sidebar-select-popper .el-popper__arrow {
5023
+ display: none !important;
5024
+ }
5025
+
5026
+ .el-popper.sidebar-select-popper .el-select-dropdown,
5027
+ .el-select-dropdown.sidebar-select-popper {
5028
+ padding: 6px !important;
5029
+ margin: 0 !important;
5030
+ border: none !important;
5031
+ box-shadow: none !important;
5032
+ border-radius: 0 !important;
5033
+ background: transparent !important;
5034
+ box-sizing: border-box !important;
5035
+ }
5036
+
5037
+ .el-popper.sidebar-select-popper .el-select-dropdown__wrap {
5038
+ max-height: 274px !important;
5039
+ }
5040
+
5041
+ .el-popper.sidebar-select-popper .el-scrollbar__bar.is-vertical {
5042
+ width: 4px !important;
5043
+ right: 2px !important;
5044
+ }
5045
+
5046
+ .el-popper.sidebar-select-popper .el-scrollbar__bar.is-vertical .el-scrollbar__thumb {
5047
+ background-color: #cbd5e1 !important;
5048
+ border-radius: 2px !important;
5049
+ }
5050
+
5051
+ .el-popper.sidebar-select-popper .el-select-dropdown__list {
5052
+ padding: 0 !important;
5053
+ margin: 0 !important;
5054
+ display: flex !important;
5055
+ flex-direction: column !important;
5056
+ gap: 2px !important;
5057
+ }
5058
+
5059
+ .el-popper.sidebar-select-popper .el-select-dropdown__item {
5060
+ height: 34px !important;
5061
+ min-height: 34px !important;
5062
+ line-height: 34px !important;
5063
+ flex-shrink: 0 !important;
5064
+ box-sizing: border-box !important;
5065
+ padding: 0 10px !important;
5066
+ border-radius: 6px !important;
5067
+ font-size: 13px !important;
5068
+ color: #1e293b !important;
5069
+ display: flex !important;
5070
+ align-items: center !important;
5071
+ justify-content: space-between !important;
5072
+ transition: all 0.15s ease !important;
5073
+ user-select: none !important;
5074
+ }
5075
+
5076
+ .el-popper.sidebar-select-popper .el-select-dropdown__item:hover,
5077
+ .el-popper.sidebar-select-popper .el-select-dropdown__item.hover,
5078
+ .el-popper.sidebar-select-popper .el-select-dropdown__item.is-hovering {
5079
+ background-color: #f8fafc !important;
5080
+ color: #1e293b !important;
5081
+ }
5082
+
5083
+ .el-popper.sidebar-select-popper .el-select-dropdown__item.is-selected {
5084
+ background-color: #eef2ff !important;
5085
+ color: #2563eb !important;
5086
+ font-weight: 500 !important;
5087
+ }
5088
+
5089
+ .el-popper.sidebar-select-popper .el-select-dropdown__item.is-selected::after {
5090
+ content: '';
5091
+ display: inline-block;
5092
+ width: 15px;
5093
+ height: 15px;
5094
+ flex-shrink: 0;
5095
+ margin-left: 8px;
5096
+ background-color: #2563eb;
5097
+ -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") no-repeat center / contain;
5098
+ mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") no-repeat center / contain;
5099
+ }
5100
+
5101
+ /* 放映选项下拉菜单全局 Popper 样式 (Aligned with 用户图规范) */
5102
+ .el-dropdown__popper.presentation-dropdown-popper,
5103
+ .presentation-dropdown-popper.el-popper {
5104
+ border-radius: 8px !important;
5105
+ border: 1px solid #edf0f5 !important;
5106
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
5107
+ padding: 4px !important;
5108
+ background: #ffffff !important;
5109
+ }
5110
+
5111
+ .presentation-dropdown-popper .el-popper__arrow {
5112
+ display: none !important;
5113
+ }
5114
+
5115
+ .presentation-dropdown-popper .el-dropdown-menu {
5116
+ padding: 0 !important;
5117
+ margin: 0 !important;
5118
+ border: none !important;
5119
+ background: transparent !important;
5120
+ min-width: 170px !important;
5121
+ }
5122
+
5123
+ .presentation-dropdown-popper .el-dropdown-menu__item {
5124
+ display: flex !important;
5125
+ align-items: center !important;
5126
+ padding: 0 10px !important;
5127
+ height: 34px !important;
5128
+ line-height: 34px !important;
5129
+ border-radius: 6px !important;
5130
+ color: #1e293b !important;
5131
+ font-size: 13px !important;
5132
+ font-weight: 500 !important;
5133
+ margin-bottom: 2px !important;
5134
+ transition: background-color 0.15s ease, color 0.15s ease !important;
5135
+ background-color: transparent !important;
5136
+ }
5137
+
5138
+ .presentation-dropdown-popper .el-dropdown-menu__item:last-child {
5139
+ margin-bottom: 0 !important;
5140
+ }
5141
+
5142
+ .presentation-dropdown-popper .el-dropdown-menu__item:hover,
5143
+ .presentation-dropdown-popper .el-dropdown-menu__item:focus {
5144
+ background-color: #f1f1f1 !important;
5145
+ color: #1e293b !important;
5146
+ }
5147
+
5148
+ .presentation-dropdown-popper .presentation-menu-item-content {
5149
+ display: flex !important;
5150
+ align-items: center !important;
5151
+ justify-content: space-between !important;
5152
+ width: 100% !important;
5153
+ gap: 16px !important;
5154
+ }
5155
+
5156
+ .presentation-dropdown-popper .presentation-menu-item-left {
5157
+ display: flex !important;
5158
+ align-items: center !important;
5159
+ gap: 8px !important;
5160
+ font-size: 13px !important;
5161
+ color: #1e293b !important;
5162
+ }
5163
+
5164
+ .presentation-dropdown-popper .presentation-menu-item-left svg {
5165
+ color: #475569 !important;
5166
+ fill: currentColor !important;
5167
+ flex-shrink: 0 !important;
5168
+ transition: color 0.15s ease !important;
5169
+ }
5170
+
5171
+ .presentation-dropdown-popper .el-dropdown-menu__item:hover .presentation-menu-item-left svg {
5172
+ color: #0f172a !important;
5173
+ }
5174
+
5175
+ .presentation-dropdown-popper .presentation-menu-shortcut {
5176
+ font-size: 11px !important;
5177
+ color: #94a3b8 !important;
5178
+ font-weight: 500 !important;
5179
+ font-family: inherit !important;
5180
+ transition: color 0.15s ease !important;
5181
+ }
5182
+
5183
+ .presentation-dropdown-popper .el-dropdown-menu__item:hover .presentation-menu-shortcut {
5184
+ color: #64748b !important;
5185
+ }
5186
+
5187
+ /* 缩放下拉菜单全局 Popper 样式 (Aligned with 用户图规范) */
5188
+ .el-dropdown__popper.zoom-dropdown-popper,
5189
+ .zoom-dropdown-popper.el-popper {
5190
+ border-radius: 8px !important;
5191
+ border: 1px solid #edf0f5 !important;
5192
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08) !important;
5193
+ padding: 4px !important;
5194
+ background: #ffffff !important;
5195
+ }
5196
+
5197
+ .zoom-dropdown-popper .el-popper__arrow {
5198
+ display: none !important;
5199
+ }
5200
+
5201
+ .zoom-dropdown-popper .el-dropdown-menu {
5202
+ padding: 0 !important;
5203
+ margin: 0 !important;
5204
+ border: none !important;
5205
+ background: transparent !important;
5206
+ min-width: 96px !important;
5207
+ }
5208
+
5209
+ .zoom-dropdown-popper .el-dropdown-menu__item {
5210
+ display: flex !important;
5211
+ align-items: center !important;
5212
+ justify-content: center !important;
5213
+ padding: 0 12px !important;
5214
+ height: 32px !important;
5215
+ line-height: 32px !important;
5216
+ border-radius: 6px !important;
5217
+ color: #1e293b !important;
5218
+ font-size: 13px !important;
5219
+ font-weight: 500 !important;
5220
+ margin-bottom: 2px !important;
5221
+ transition: background-color 0.15s ease, color 0.15s ease !important;
5222
+ background-color: transparent !important;
5223
+ }
5224
+
5225
+ .zoom-dropdown-popper .el-dropdown-menu__item:last-child {
5226
+ margin-bottom: 0 !important;
5227
+ }
5228
+
5229
+ .zoom-dropdown-popper .el-dropdown-menu__item:hover,
5230
+ .zoom-dropdown-popper .el-dropdown-menu__item:focus {
5231
+ background-color: #f1f1f1 !important;
5232
+ color: #1e293b !important;
5233
+ }
5234
+
5235
+ .zoom-dropdown-popper .el-dropdown-menu__item.is-active {
5236
+ background-color: #f1f1f1 !important;
5237
+ color: #1E6FFF !important;
5238
+ font-weight: 600 !important;
5239
+ }
5240
+
5241
+ .zoom-dropdown-popper .el-dropdown-menu__item.is-active:hover {
5242
+ background-color: #e5e5e5 !important;
5243
+ color: #1E6FFF !important;
5244
+ }
5245
+
5246
+ .zoom-dropdown-popper .el-dropdown-menu__item--divided {
5247
+ margin-top: 4px !important;
5248
+ border-top: 1px solid #f1f5f9 !important;
5249
+ padding-top: 2px !important;
5250
+ }
5251
+
5252
+ .zoom-dropdown-popper .el-dropdown-menu__item--divided:before {
5253
+ display: none !important;
4687
5254
  }