@co0ontty/wand 1.37.0 → 1.39.1

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.
@@ -258,9 +258,9 @@
258
258
  min-height: 100dvh;
259
259
  height: 100vh;
260
260
  height: 100dvh;
261
- /* 软键盘弹起时由 JS 注入 --app-viewport-height = visualViewport.height,
262
- 整体 flex column 自动收缩,让底部 input-panel 上移贴键盘上沿;
263
- 没注入时退回 100dvh 行为。 */
261
+ /* JS 注入 --app-viewport-height = visualViewport.height,
262
+ 键盘开关和 iOS 地址栏动画时整体 flex column 跟随可见视口;
263
+ 不支持 visualViewport 时退回 100dvh */
264
264
  height: var(--app-viewport-height, 100dvh);
265
265
  line-height: var(--line-height-base);
266
266
  overflow: hidden;
@@ -310,7 +310,7 @@
310
310
  min-height: 100dvh;
311
311
  height: 100vh;
312
312
  height: 100dvh;
313
- /* 与 body 同步:键盘弹起时跟随可见视口收缩。 */
313
+ /* 与 body 同步:键盘开关时跟随可见视口收缩/恢复。 */
314
314
  height: var(--app-viewport-height, 100dvh);
315
315
  overflow: hidden;
316
316
  }
@@ -547,7 +547,8 @@
547
547
  }
548
548
  .sidebar.pinned.collapsed .sidebar-header-main,
549
549
  .sidebar.pinned.collapsed .sidebar-header-more,
550
- .sidebar.pinned.collapsed .sidebar-footer {
550
+ .sidebar.pinned.collapsed .sidebar-footer,
551
+ .sidebar.pinned.collapsed .sidebar-history-region {
551
552
  display: none;
552
553
  }
553
554
  .sidebar.pinned.collapsed .sidebar-header-actions {
@@ -613,6 +614,24 @@
613
614
  0 4px 10px -3px rgba(120, 88, 56, 0.3),
614
615
  inset 0 1px 0 rgba(255, 255, 255, 0.48);
615
616
  }
617
+ /* 快速新建会话 tile —— 虚线描边 + 加号,区别于实心会话方块 */
618
+ .sidebar-collapsed-tile.add {
619
+ background: rgba(184, 92, 55, 0.06);
620
+ border: 1.5px dashed rgba(184, 92, 55, 0.5);
621
+ color: #a04a2e;
622
+ box-shadow: none;
623
+ margin-top: 2px;
624
+ }
625
+ .sidebar-collapsed-tile.add:hover {
626
+ filter: none;
627
+ transform: translateY(-1px);
628
+ background: rgba(184, 92, 55, 0.12);
629
+ border-color: rgba(184, 92, 55, 0.72);
630
+ box-shadow: 0 3px 8px -3px rgba(184, 92, 55, 0.32);
631
+ }
632
+ .sidebar-collapsed-tile.add:active {
633
+ transform: translateY(0) scale(0.94);
634
+ }
616
635
  /* Active — accent ring + 一层柔和暖投影 + 顶高光。原先 7 层叠加在 36px 小块上
617
636
  糊成一团,精简到 3 层即可表达「升起 + 选中」。 */
618
637
  .sidebar-collapsed-tile.active {
@@ -627,13 +646,6 @@
627
646
  transform: translateY(0) scale(0.94);
628
647
  transition-duration: 0.08s;
629
648
  }
630
- .sidebar-collapsed-empty {
631
- color: var(--text-muted, rgba(89, 58, 32, 0.45));
632
- text-align: center;
633
- font-size: 16px;
634
- padding: 12px 0;
635
- user-select: none;
636
- }
637
649
  /* Hover tooltip bubble for narrow tiles — chat-bubble look */
638
650
  .sidebar-tile-bubble {
639
651
  position: fixed;
@@ -1351,6 +1363,14 @@
1351
1363
  text-align: center;
1352
1364
  font-style: italic;
1353
1365
  }
1366
+ .sidebar-history-section-label {
1367
+ padding: 8px 10px 4px 10px;
1368
+ font-size: 0.6875rem;
1369
+ font-weight: 600;
1370
+ letter-spacing: 0.04em;
1371
+ text-transform: uppercase;
1372
+ opacity: 0.5;
1373
+ }
1354
1374
  .claude-history-directory-header {
1355
1375
  margin-top: 6px;
1356
1376
  cursor: pointer;
@@ -4037,6 +4057,12 @@
4037
4057
  min-height: 0;
4038
4058
  min-width: 0;
4039
4059
  scrollbar-gutter: stable;
4060
+ /* iOS Safari: 聊天到顶 / 到底再用力滑, scroll 会从 .chat-messages 冒到
4061
+ body, 即使父级有 overflow:hidden 也拦不住 (Safari 已知行为)。这一冒
4062
+ 有两个用户可见的副作用: 1) 整页跟着一起被推一帧, 输入框跳动;
4063
+ 2) 偶尔触发地址栏 / 工具栏的折叠动画。contain 把惯性吃在容器内,
4064
+ 保留 iOS 那种橡皮筋反弹手感, 但不向外溢出。 */
4065
+ overscroll-behavior: contain;
4040
4066
  }
4041
4067
 
4042
4068
  /* ===== 历史消息懒加载 ===== */
@@ -10161,8 +10187,8 @@
10161
10187
  }
10162
10188
 
10163
10189
  html, body {
10164
- min-height: 100dvh;
10165
- height: auto;
10190
+ min-height: var(--app-viewport-height, 100dvh);
10191
+ height: var(--app-viewport-height, 100dvh);
10166
10192
  }
10167
10193
 
10168
10194
  body {
@@ -10173,9 +10199,9 @@
10173
10199
  .app-container {
10174
10200
  min-height: 100dvh;
10175
10201
  height: 100dvh;
10176
- /* 与 body 同步:键盘弹起时 JS 注入 --app-viewport-height,
10177
- app-container 跟随 visualViewport 收缩,input-panel 自动贴键盘上沿;
10178
- 键盘收起后变量被移除,回到 100dvh,input-panel 自然回到屏幕底部。 */
10202
+ /* 与 body 同步:JS 持续注入 --app-viewport-height,
10203
+ app-container 跟随 visualViewport 收缩/恢复,input-panel 自动贴键盘
10204
+ 上沿或屏幕底部。 */
10179
10205
  height: var(--app-viewport-height, 100dvh);
10180
10206
  overflow: hidden;
10181
10207
  }
@@ -10732,7 +10758,11 @@
10732
10758
  .file-search-box { padding: 6px 10px 8px; }
10733
10759
  .file-search-icon { left: 20px; }
10734
10760
  .file-search-clear { right: 16px; }
10735
- .file-search-input { min-height: 34px; font-size: 14px; padding: 7px 32px 7px 30px; }
10761
+ /* 16px 兜底 iOS Safari 聚焦自动放大:
10762
+ 即使设了 user-scalable=no, 部分 iOS 版本 (尤其 15 / 16 早期补丁) 仍会
10763
+ 在 input font-size < 16px 时强制 zoom in, 之后回不到原 scale, 用户得
10764
+ 手动双指捏回。所有移动端会被聚焦的 input 都统一到 16px。 */
10765
+ .file-search-input { min-height: 34px; font-size: 16px; padding: 7px 32px 7px 30px; }
10736
10766
  .file-item { padding: 6px 8px; min-height: 32px; }
10737
10767
 
10738
10768
  /* 欢迎页移动端 */
@@ -15373,39 +15403,10 @@
15373
15403
  letter-spacing: 0.02em;
15374
15404
  white-space: nowrap;
15375
15405
  }
15376
- /* Switch row inside quick-commit modal — same iOS rhythm as settings */
15377
- .qc-checkbox-row {
15378
- display: flex;
15379
- align-items: center;
15380
- justify-content: space-between;
15381
- gap: 12px;
15382
- padding: 11px 14px;
15383
- background: rgba(255, 255, 255, 0.55);
15384
- border: 1px solid rgba(125, 91, 57, 0.08);
15385
- border-radius: 12px;
15386
- box-shadow: 0 1px 1px rgba(125, 91, 57, 0.02);
15387
- transition: background 0.16s ease, border-color 0.16s ease;
15388
- user-select: none;
15389
- }
15390
- .qc-checkbox-row:hover {
15391
- background: rgba(255, 255, 255, 0.78);
15392
- border-color: rgba(125, 91, 57, 0.16);
15393
- }
15394
- .qc-checkbox-row:has(.switch-toggle:checked) {
15395
- background: linear-gradient(180deg, #fff7ef 0%, #fff1de 100%);
15396
- border-color: rgba(197, 101, 61, 0.3);
15397
- }
15398
- .qc-checkbox-label {
15399
- flex: 1;
15400
- min-width: 0;
15401
- font-size: 0.8125rem;
15402
- font-weight: 600;
15403
- color: var(--text-primary);
15404
- cursor: pointer;
15405
- line-height: 1.4;
15406
- }
15407
15406
  .qc-switch {
15408
15407
  flex-shrink: 0;
15408
+ display: inline-flex;
15409
+ align-items: center;
15409
15410
  cursor: pointer;
15410
15411
  }
15411
15412
  .qc-message-row,
@@ -15423,6 +15424,62 @@
15423
15424
  align-items: center;
15424
15425
  justify-content: space-between;
15425
15426
  gap: 8px;
15427
+ flex-wrap: wrap;
15428
+ }
15429
+ .qc-ai-controls {
15430
+ display: inline-flex;
15431
+ align-items: center;
15432
+ justify-content: flex-end;
15433
+ gap: 7px;
15434
+ margin-left: auto;
15435
+ flex: 0 0 auto;
15436
+ }
15437
+ .qc-ai-tag-toggle {
15438
+ display: inline-flex;
15439
+ align-items: center;
15440
+ gap: 6px;
15441
+ min-height: 30px;
15442
+ padding: 3px 7px 3px 9px;
15443
+ border: 1px solid rgba(125, 91, 57, 0.12);
15444
+ border-radius: 999px;
15445
+ background: rgba(255, 255, 255, 0.58);
15446
+ color: var(--text-muted);
15447
+ font-size: 0.74rem;
15448
+ font-weight: 700;
15449
+ line-height: 1;
15450
+ user-select: none;
15451
+ cursor: pointer;
15452
+ transition: background 0.16s ease, border-color 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
15453
+ }
15454
+ .qc-ai-tag-toggle:hover {
15455
+ background: rgba(255, 255, 255, 0.82);
15456
+ border-color: rgba(125, 91, 57, 0.20);
15457
+ }
15458
+ .qc-ai-tag-toggle:has(.switch-toggle:checked) {
15459
+ color: rgba(170, 79, 42, 0.98);
15460
+ background: linear-gradient(180deg, #fff8f1 0%, #fff1e3 100%);
15461
+ border-color: rgba(197, 101, 61, 0.32);
15462
+ box-shadow: 0 1px 4px rgba(197, 101, 61, 0.10);
15463
+ }
15464
+ .qc-ai-tag-toggle:has(.switch-toggle:disabled) {
15465
+ cursor: default;
15466
+ opacity: 0.68;
15467
+ }
15468
+ .qc-ai-tag-label {
15469
+ white-space: nowrap;
15470
+ }
15471
+ .qc-switch--compact .switch-slider {
15472
+ width: 34px;
15473
+ min-width: 34px;
15474
+ height: 20px;
15475
+ border-radius: 999px;
15476
+ }
15477
+ .qc-switch--compact .switch-slider::after {
15478
+ width: 16px;
15479
+ height: 16px;
15480
+ }
15481
+ .qc-switch--compact .switch-toggle:checked + .switch-slider::after {
15482
+ transform: translateX(14px);
15426
15483
  }
15427
15484
  .qc-message-row textarea {
15428
15485
  resize: vertical;
@@ -15727,6 +15784,10 @@
15727
15784
  .qc-files-wrap { max-height: 160px; }
15728
15785
  .qc-section { padding: 10px 12px; }
15729
15786
  .qc-dropdown-menu { min-width: 180px; }
15787
+ .qc-ai-controls {
15788
+ width: 100%;
15789
+ justify-content: flex-end;
15790
+ }
15730
15791
  }
15731
15792
 
15732
15793
  /* ============================================================ */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@co0ontty/wand",
3
- "version": "1.37.0",
3
+ "version": "1.39.1",
4
4
  "description": "A web terminal for local CLI tools like Claude.",
5
5
  "type": "module",
6
6
  "bin": {