@co0ontty/wand 1.29.1 → 1.29.3
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.
|
@@ -1399,10 +1399,14 @@
|
|
|
1399
1399
|
var preferredTool = getComposerTool();
|
|
1400
1400
|
var composerMode = getSafeModeForTool(preferredTool, state.chatMode);
|
|
1401
1401
|
|
|
1402
|
+
var isDesktopPinned = state.sidebarPinned && !isMobileLayout();
|
|
1403
|
+
var isCollapsed = isDesktopPinned && state.sidebarCollapsed;
|
|
1404
|
+
var collapsedCls = isCollapsed ? ' sidebar-collapsed' : '';
|
|
1405
|
+
var sidebarCollapsedCls = isCollapsed ? ' collapsed' : '';
|
|
1402
1406
|
return '<div class="app-container">' +
|
|
1403
1407
|
'<div id="sessions-drawer-backdrop" class="drawer-backdrop' + drawerClass + '"></div>' +
|
|
1404
|
-
'<div class="main-layout' + (state.sessionsDrawerOpen ? ' sidebar-open' : '') + (
|
|
1405
|
-
'<aside id="sessions-drawer" class="sidebar' + drawerClass + (
|
|
1408
|
+
'<div class="main-layout' + (state.sessionsDrawerOpen ? ' sidebar-open' : '') + (isDesktopPinned ? ' sidebar-pinned' : '') + collapsedCls + '">' +
|
|
1409
|
+
'<aside id="sessions-drawer" class="sidebar' + drawerClass + (isDesktopPinned ? ' pinned' : '') + sidebarCollapsedCls + '">' +
|
|
1406
1410
|
'<div class="sidebar-header">' +
|
|
1407
1411
|
'<div class="sidebar-header-main">' +
|
|
1408
1412
|
'<div class="topbar-logo-icon">W</div>' +
|
|
@@ -1428,8 +1432,10 @@
|
|
|
1428
1432
|
'<button id="sidebar-pin-btn" class="btn btn-ghost btn-sm sidebar-pin-toggle' + (state.sidebarPinned ? ' pinned' : '') + '" type="button" title="' + (state.sidebarPinned ? '取消固定侧栏' : '固定侧栏') + '">' +
|
|
1429
1433
|
'<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="17" x2="12" y2="22"/><path d="M5 17h14v-1.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V6h1a2 2 0 0 0 0-4H8a2 2 0 0 0 0 4h1v4.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24z"/></svg>' +
|
|
1430
1434
|
'</button>' +
|
|
1431
|
-
'<button id="sidebar-collapse-btn" class="btn btn-ghost btn-sm sidebar-collapse-toggle" type="button" title="收起为窄条" aria-label="收起为窄条">' +
|
|
1432
|
-
|
|
1435
|
+
'<button id="sidebar-collapse-btn" class="btn btn-ghost btn-sm sidebar-collapse-toggle' + (isCollapsed ? ' collapsed' : '') + '" type="button" title="' + (isCollapsed ? '展开侧栏' : '收起为窄条') + '" aria-label="' + (isCollapsed ? '展开侧栏' : '收起为窄条') + '">' +
|
|
1436
|
+
(isCollapsed
|
|
1437
|
+
? '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="10 6 16 12 10 18"/><line x1="20" y1="5" x2="20" y2="19"/></svg>'
|
|
1438
|
+
: '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="14 6 8 12 14 18"/><line x1="4" y1="5" x2="4" y2="19"/></svg>') +
|
|
1433
1439
|
'</button>' +
|
|
1434
1440
|
'<button id="close-drawer-button" class="btn btn-ghost btn-icon sidebar-close drawer-close-btn" type="button" aria-label="关闭菜单"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><line x1="6" y1="6" x2="18" y2="18"/><line x1="18" y1="6" x2="6" y2="18"/></svg></button>' +
|
|
1435
1441
|
'</div>' +
|
|
@@ -5511,6 +5517,8 @@
|
|
|
5511
5517
|
if (closeDrawerBtn) closeDrawerBtn.addEventListener("click", closeSessionsDrawer);
|
|
5512
5518
|
var pinBtn = document.getElementById("sidebar-pin-btn");
|
|
5513
5519
|
if (pinBtn) pinBtn.addEventListener("click", toggleSidebarPin);
|
|
5520
|
+
var collapseBtn = document.getElementById("sidebar-collapse-btn");
|
|
5521
|
+
if (collapseBtn) collapseBtn.addEventListener("click", toggleSidebarCollapsed);
|
|
5514
5522
|
var sidebarMoreBtn = document.getElementById("sidebar-more-btn");
|
|
5515
5523
|
var sidebarOverflow = document.getElementById("sidebar-overflow-menu");
|
|
5516
5524
|
if (sidebarMoreBtn && sidebarOverflow) {
|
|
@@ -8571,11 +8579,15 @@
|
|
|
8571
8579
|
var drawer = document.getElementById("sessions-drawer");
|
|
8572
8580
|
var mainLayout = document.querySelector(".main-layout");
|
|
8573
8581
|
var pinBtn = document.getElementById("sidebar-pin-btn");
|
|
8582
|
+
var isDesktopPinned = state.sidebarPinned && !isMobileLayout();
|
|
8583
|
+
var isCollapsed = isDesktopPinned && state.sidebarCollapsed;
|
|
8574
8584
|
if (drawer) {
|
|
8575
|
-
drawer.classList.toggle("pinned",
|
|
8585
|
+
drawer.classList.toggle("pinned", isDesktopPinned);
|
|
8586
|
+
drawer.classList.toggle("collapsed", isCollapsed);
|
|
8576
8587
|
}
|
|
8577
8588
|
if (mainLayout) {
|
|
8578
|
-
mainLayout.classList.toggle("sidebar-pinned",
|
|
8589
|
+
mainLayout.classList.toggle("sidebar-pinned", isDesktopPinned);
|
|
8590
|
+
mainLayout.classList.toggle("sidebar-collapsed", isCollapsed);
|
|
8579
8591
|
}
|
|
8580
8592
|
if (pinBtn) {
|
|
8581
8593
|
pinBtn.classList.toggle("pinned", state.sidebarPinned);
|
|
@@ -8623,6 +8635,27 @@
|
|
|
8623
8635
|
updateLayoutState();
|
|
8624
8636
|
}
|
|
8625
8637
|
|
|
8638
|
+
function toggleSidebarCollapsed() {
|
|
8639
|
+
if (isMobileLayout()) return;
|
|
8640
|
+
if (!state.sidebarPinned) return;
|
|
8641
|
+
state.sidebarCollapsed = !state.sidebarCollapsed;
|
|
8642
|
+
try {
|
|
8643
|
+
localStorage.setItem("wand-sidebar-collapsed", String(state.sidebarCollapsed));
|
|
8644
|
+
} catch (e) {}
|
|
8645
|
+
render();
|
|
8646
|
+
var mainLayout = document.querySelector(".main-layout");
|
|
8647
|
+
if (mainLayout) {
|
|
8648
|
+
var onEnd = function(e) {
|
|
8649
|
+
if (e.propertyName === "padding-left") {
|
|
8650
|
+
mainLayout.removeEventListener("transitionend", onEnd);
|
|
8651
|
+
scheduleTerminalResize(true);
|
|
8652
|
+
}
|
|
8653
|
+
};
|
|
8654
|
+
mainLayout.addEventListener("transitionend", onEnd);
|
|
8655
|
+
}
|
|
8656
|
+
setTimeout(function() { scheduleTerminalResize(true); }, 350);
|
|
8657
|
+
}
|
|
8658
|
+
|
|
8626
8659
|
function toggleSidebarPin() {
|
|
8627
8660
|
if (isMobileLayout()) return;
|
|
8628
8661
|
state.sidebarPinned = !state.sidebarPinned;
|
|
@@ -99,6 +99,7 @@
|
|
|
99
99
|
|
|
100
100
|
/* ===== 布局尺寸 ===== */
|
|
101
101
|
--sidebar-width: 300px;
|
|
102
|
+
--sidebar-collapsed-width: 56px;
|
|
102
103
|
--file-panel-width: 320px;
|
|
103
104
|
--safe-bottom: 0px;
|
|
104
105
|
|
|
@@ -447,10 +448,14 @@
|
|
|
447
448
|
/* ===== 侧边栏常驻 ===== */
|
|
448
449
|
.main-layout.sidebar-pinned {
|
|
449
450
|
padding-left: var(--sidebar-width);
|
|
451
|
+
transition: padding-left 0.3s var(--ease-out-expo);
|
|
450
452
|
}
|
|
451
453
|
.main-layout.sidebar-pinned .floating-sidebar-toggle {
|
|
452
454
|
display: none;
|
|
453
455
|
}
|
|
456
|
+
.main-layout.sidebar-pinned.sidebar-collapsed {
|
|
457
|
+
padding-left: var(--sidebar-collapsed-width);
|
|
458
|
+
}
|
|
454
459
|
|
|
455
460
|
/* ===== 抽屉背景遮罩 ===== */
|
|
456
461
|
.drawer-backdrop {
|
|
@@ -507,12 +512,65 @@
|
|
|
507
512
|
pointer-events: auto;
|
|
508
513
|
opacity: 1;
|
|
509
514
|
box-shadow: none;
|
|
515
|
+
transition: width 0.3s var(--ease-out-expo), transform 0.35s var(--ease-out-expo), box-shadow 0.35s ease, opacity 0.25s ease;
|
|
510
516
|
}
|
|
511
517
|
|
|
512
518
|
.sidebar.pinned .sidebar-close {
|
|
513
519
|
display: none;
|
|
514
520
|
}
|
|
515
521
|
|
|
522
|
+
/* ===== 侧栏窄条模式(仅 desktop pin 模式生效)===== */
|
|
523
|
+
.sidebar.pinned.collapsed {
|
|
524
|
+
width: var(--sidebar-collapsed-width);
|
|
525
|
+
}
|
|
526
|
+
.sidebar.pinned.collapsed .sidebar-header {
|
|
527
|
+
padding: 14px 8px;
|
|
528
|
+
justify-content: center;
|
|
529
|
+
gap: 0;
|
|
530
|
+
}
|
|
531
|
+
.sidebar.pinned.collapsed .sidebar-header-main,
|
|
532
|
+
.sidebar.pinned.collapsed .sidebar-header-more,
|
|
533
|
+
.sidebar.pinned.collapsed .sidebar-pin-toggle,
|
|
534
|
+
.sidebar.pinned.collapsed .sidebar-body {
|
|
535
|
+
display: none;
|
|
536
|
+
}
|
|
537
|
+
.sidebar.pinned.collapsed .sidebar-header-actions {
|
|
538
|
+
gap: 0;
|
|
539
|
+
width: 100%;
|
|
540
|
+
justify-content: center;
|
|
541
|
+
}
|
|
542
|
+
.sidebar.pinned.collapsed .sidebar-footer {
|
|
543
|
+
padding: 10px 6px;
|
|
544
|
+
}
|
|
545
|
+
.sidebar.pinned.collapsed #drawer-new-session-button {
|
|
546
|
+
display: none;
|
|
547
|
+
}
|
|
548
|
+
.sidebar.pinned.collapsed .sidebar-footer-actions {
|
|
549
|
+
flex-direction: column;
|
|
550
|
+
gap: 6px;
|
|
551
|
+
align-items: stretch;
|
|
552
|
+
}
|
|
553
|
+
.sidebar.pinned.collapsed .sidebar-footer-actions .btn {
|
|
554
|
+
width: 100%;
|
|
555
|
+
min-width: 0;
|
|
556
|
+
padding: 8px 0;
|
|
557
|
+
justify-content: center;
|
|
558
|
+
}
|
|
559
|
+
.sidebar.pinned.collapsed .sidebar-footer-actions .btn span,
|
|
560
|
+
.sidebar.pinned.collapsed .sidebar-meta {
|
|
561
|
+
display: none;
|
|
562
|
+
}
|
|
563
|
+
.sidebar-collapse-toggle {
|
|
564
|
+
flex-shrink: 0;
|
|
565
|
+
transition: color var(--transition-fast);
|
|
566
|
+
}
|
|
567
|
+
.sidebar-collapse-toggle.collapsed {
|
|
568
|
+
color: var(--primary);
|
|
569
|
+
}
|
|
570
|
+
.sidebar:not(.pinned) .sidebar-collapse-toggle {
|
|
571
|
+
display: none;
|
|
572
|
+
}
|
|
573
|
+
|
|
516
574
|
/* ===== 图钉按钮 ===== */
|
|
517
575
|
.sidebar-pin-toggle {
|
|
518
576
|
flex-shrink: 0;
|
|
@@ -8338,6 +8396,7 @@
|
|
|
8338
8396
|
/* 平板适配 */
|
|
8339
8397
|
@media (max-width: 768px) {
|
|
8340
8398
|
.sidebar-pin-toggle { display: none; }
|
|
8399
|
+
.sidebar-collapse-toggle { display: none; }
|
|
8341
8400
|
.sidebar.pinned:not(.open) {
|
|
8342
8401
|
transform: translateX(-100%);
|
|
8343
8402
|
pointer-events: none;
|