claude-code-kanban 4.21.0 → 4.22.0

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.
package/public/style.css CHANGED
@@ -29,6 +29,22 @@
29
29
  --team-dim: rgba(96, 165, 250, 0.18);
30
30
  --plan: #86a886;
31
31
  --plan-dim: rgba(134, 168, 134, 0.18);
32
+ --ansi-black: var(--text-muted);
33
+ --ansi-red: #e06c66;
34
+ --ansi-green: #3ecf8e;
35
+ --ansi-yellow: #e0b04a;
36
+ --ansi-blue: #60a5fa;
37
+ --ansi-magenta: #c98ce0;
38
+ --ansi-cyan: #4dc9c9;
39
+ --ansi-white: var(--text-secondary);
40
+ --ansi-bright-black: var(--text-tertiary);
41
+ --ansi-bright-red: #ff8a84;
42
+ --ansi-bright-green: #5ee3a8;
43
+ --ansi-bright-yellow: #f0c56a;
44
+ --ansi-bright-blue: #8bbdfb;
45
+ --ansi-bright-magenta: #e0a8f0;
46
+ --ansi-bright-cyan: #7ddede;
47
+ --ansi-bright-white: var(--text-primary);
32
48
  --mono: 'IBM Plex Mono', monospace;
33
49
  --serif: 'Playfair Display', serif;
34
50
  --card-gap: 7px;
@@ -623,7 +639,12 @@ body::before {
623
639
  text-overflow: ellipsis;
624
640
  }
625
641
 
642
+ /* inline-flex so only the text takes the click — a full-width row would swallow clicks
643
+ meant for the card itself */
626
644
  .session-goal {
645
+ display: inline-flex;
646
+ align-items: baseline;
647
+ max-width: 100%;
627
648
  font-size: 10px;
628
649
  margin-top: var(--card-gap-tight);
629
650
  white-space: nowrap;
@@ -635,8 +656,13 @@ body::before {
635
656
  .session-goal .session-goal-icon {
636
657
  margin-right: 3px;
637
658
  font-weight: 700;
659
+ flex-shrink: 0;
660
+ }
661
+ .session-goal .session-goal-text {
662
+ overflow: hidden;
663
+ text-overflow: ellipsis;
638
664
  }
639
- .session-goal:hover {
665
+ .session-goal:hover .session-goal-text {
640
666
  text-decoration: underline;
641
667
  text-underline-offset: 2px;
642
668
  }
@@ -2299,16 +2325,18 @@ body::before {
2299
2325
  align-items: center;
2300
2326
  margin-bottom: 16px;
2301
2327
  }
2302
- .info-row-actions {
2328
+ /* Shared hover-reveal icon-button group, also used by the linked-doc rows. Each host
2329
+ supplies its own reveal trigger — the base only sets the resting opacity. */
2330
+ .row-actions {
2303
2331
  display: flex;
2304
2332
  gap: 4px;
2305
2333
  opacity: 0.3;
2306
2334
  transition: opacity 0.15s ease;
2307
2335
  }
2308
- .info-grid:hover .info-row-actions {
2336
+ .info-grid:hover .row-actions {
2309
2337
  opacity: 1;
2310
2338
  }
2311
- .info-row-actions button {
2339
+ .row-actions button {
2312
2340
  display: inline-flex;
2313
2341
  align-items: center;
2314
2342
  justify-content: center;
@@ -2325,18 +2353,18 @@ body::before {
2325
2353
  border-color 0.1s ease,
2326
2354
  color 0.1s ease;
2327
2355
  }
2328
- .info-row-actions button:hover {
2356
+ .row-actions button:hover {
2329
2357
  background: var(--bg-hover);
2330
2358
  border-color: var(--accent);
2331
2359
  color: var(--accent-text);
2332
2360
  }
2333
- .info-row-actions button svg {
2361
+ .row-actions button svg {
2334
2362
  width: 12px;
2335
2363
  height: 12px;
2336
2364
  display: block;
2337
2365
  }
2338
2366
  @media (hover: none) {
2339
- .info-row-actions {
2367
+ .row-actions {
2340
2368
  opacity: 1;
2341
2369
  }
2342
2370
  }
@@ -3735,36 +3763,29 @@ body::before {
3735
3763
  min-width: 0;
3736
3764
  }
3737
3765
 
3738
- /* margin-left:auto pins every × to the same right edge, so they read as a column
3739
- however long the names in between are. */
3740
- .linked-doc-remove {
3766
+ /* Rides on the shared .row-actions group; only the reveal trigger differs — per row
3767
+ here, per grid in the session info. margin-left:auto pins the group to the same
3768
+ right edge however long the names in between are. */
3769
+ .linked-doc-actions {
3741
3770
  margin-left: auto;
3742
3771
  align-self: center;
3743
3772
  flex-shrink: 0;
3744
- width: 16px;
3745
- height: 16px;
3746
- display: inline-flex;
3747
- align-items: center;
3748
- justify-content: center;
3749
- padding: 0;
3750
- background: none;
3751
- border: none;
3752
- border-radius: 3px;
3753
- color: var(--text-muted);
3754
- font-family: var(--mono);
3755
- font-size: 14px;
3756
- line-height: 1;
3757
- cursor: pointer;
3758
- opacity: 0.45;
3759
- transition: all 0.15s ease;
3760
3773
  }
3761
3774
 
3762
- .linked-doc-item:hover .linked-doc-remove {
3775
+ .linked-doc-item:hover .linked-doc-actions {
3763
3776
  opacity: 1;
3764
3777
  }
3765
3778
 
3766
- .linked-doc-remove:hover {
3779
+ /* The × is a glyph, not an svg, so .row-actions button svg does not size it. */
3780
+ .linked-doc-remove {
3781
+ font-family: var(--mono);
3782
+ font-size: 15px;
3783
+ line-height: 1;
3784
+ }
3785
+
3786
+ .linked-doc-actions .linked-doc-remove:hover {
3767
3787
  background: var(--danger-dim);
3788
+ border-color: var(--danger);
3768
3789
  color: var(--danger);
3769
3790
  }
3770
3791
 
@@ -3876,6 +3897,136 @@ body::before {
3876
3897
 
3877
3898
  /* #endregion */
3878
3899
 
3900
+ /* #region ANSI */
3901
+
3902
+ /* SGR colours from terminal output, consumed by every pane that renders it.
3903
+ The palette itself lives with the other colour tokens in VARIABLES /
3904
+ LIGHT_THEME / MEDIA_QUERIES, so it flips with the theme like everything else. */
3905
+ .ansi-fg-black {
3906
+ color: var(--ansi-black);
3907
+ }
3908
+ .ansi-fg-red {
3909
+ color: var(--ansi-red);
3910
+ }
3911
+ .ansi-fg-green {
3912
+ color: var(--ansi-green);
3913
+ }
3914
+ .ansi-fg-yellow {
3915
+ color: var(--ansi-yellow);
3916
+ }
3917
+ .ansi-fg-blue {
3918
+ color: var(--ansi-blue);
3919
+ }
3920
+ .ansi-fg-magenta {
3921
+ color: var(--ansi-magenta);
3922
+ }
3923
+ .ansi-fg-cyan {
3924
+ color: var(--ansi-cyan);
3925
+ }
3926
+ .ansi-fg-white {
3927
+ color: var(--ansi-white);
3928
+ }
3929
+ .ansi-fg-bright-black {
3930
+ color: var(--ansi-bright-black);
3931
+ }
3932
+ .ansi-fg-bright-red {
3933
+ color: var(--ansi-bright-red);
3934
+ }
3935
+ .ansi-fg-bright-green {
3936
+ color: var(--ansi-bright-green);
3937
+ }
3938
+ .ansi-fg-bright-yellow {
3939
+ color: var(--ansi-bright-yellow);
3940
+ }
3941
+ .ansi-fg-bright-blue {
3942
+ color: var(--ansi-bright-blue);
3943
+ }
3944
+ .ansi-fg-bright-magenta {
3945
+ color: var(--ansi-bright-magenta);
3946
+ }
3947
+ .ansi-fg-bright-cyan {
3948
+ color: var(--ansi-bright-cyan);
3949
+ }
3950
+ .ansi-fg-bright-white {
3951
+ color: var(--ansi-bright-white);
3952
+ }
3953
+ .ansi-bg-black {
3954
+ background: var(--ansi-black);
3955
+ }
3956
+ .ansi-bg-red {
3957
+ background: var(--ansi-red);
3958
+ }
3959
+ .ansi-bg-green {
3960
+ background: var(--ansi-green);
3961
+ }
3962
+ .ansi-bg-yellow {
3963
+ background: var(--ansi-yellow);
3964
+ }
3965
+ .ansi-bg-blue {
3966
+ background: var(--ansi-blue);
3967
+ }
3968
+ .ansi-bg-magenta {
3969
+ background: var(--ansi-magenta);
3970
+ }
3971
+ .ansi-bg-cyan {
3972
+ background: var(--ansi-cyan);
3973
+ }
3974
+ .ansi-bg-white {
3975
+ background: var(--ansi-white);
3976
+ }
3977
+ .ansi-bg-bright-black {
3978
+ background: var(--ansi-bright-black);
3979
+ }
3980
+ .ansi-bg-bright-red {
3981
+ background: var(--ansi-bright-red);
3982
+ }
3983
+ .ansi-bg-bright-green {
3984
+ background: var(--ansi-bright-green);
3985
+ }
3986
+ .ansi-bg-bright-yellow {
3987
+ background: var(--ansi-bright-yellow);
3988
+ }
3989
+ .ansi-bg-bright-blue {
3990
+ background: var(--ansi-bright-blue);
3991
+ }
3992
+ .ansi-bg-bright-magenta {
3993
+ background: var(--ansi-bright-magenta);
3994
+ }
3995
+ .ansi-bg-bright-cyan {
3996
+ background: var(--ansi-bright-cyan);
3997
+ }
3998
+ .ansi-bg-bright-white {
3999
+ background: var(--ansi-bright-white);
4000
+ }
4001
+ .ansi-bg {
4002
+ padding: 0 1px;
4003
+ border-radius: 2px;
4004
+ }
4005
+ .ansi-inverse {
4006
+ background: var(--text-primary);
4007
+ color: var(--bg-deep);
4008
+ }
4009
+ .ansi-bold {
4010
+ font-weight: 700;
4011
+ }
4012
+ .ansi-dim {
4013
+ opacity: 0.65;
4014
+ }
4015
+ .ansi-italic {
4016
+ font-style: italic;
4017
+ }
4018
+ .ansi-underline {
4019
+ text-decoration: underline;
4020
+ }
4021
+ .ansi-strike {
4022
+ text-decoration: line-through;
4023
+ }
4024
+ .ansi-underline.ansi-strike {
4025
+ text-decoration: underline line-through;
4026
+ }
4027
+
4028
+ /* #endregion */
4029
+
3879
4030
  /* #region LIGHT_THEME */
3880
4031
  body.light {
3881
4032
  --bg-deep: #e8e6e3;
@@ -3898,6 +4049,18 @@ body.light {
3898
4049
  --danger: #c0392b;
3899
4050
  --danger-dim: rgba(192, 57, 43, 0.15);
3900
4051
  --plan: #5a7a5a;
4052
+ --ansi-red: #c0392b;
4053
+ --ansi-green: #1a8a5a;
4054
+ --ansi-yellow: #a8791a;
4055
+ --ansi-blue: #2b6cb0;
4056
+ --ansi-magenta: #8e44ad;
4057
+ --ansi-cyan: #1a7a7a;
4058
+ --ansi-bright-red: #e05548;
4059
+ --ansi-bright-green: #25a86f;
4060
+ --ansi-bright-yellow: #c2921f;
4061
+ --ansi-bright-blue: #3b82d6;
4062
+ --ansi-bright-magenta: #a855c9;
4063
+ --ansi-bright-cyan: #2a9a9a;
3901
4064
  --plan-dim: rgba(90, 122, 90, 0.15);
3902
4065
  }
3903
4066
 
@@ -4827,6 +4990,14 @@ select.form-input option:checked {
4827
4990
  transition: all 0.15s;
4828
4991
  }
4829
4992
 
4993
+ /* Icon buttons sit beside text ones here, and copyWithFeedback swaps the glyph for a
4994
+ checkmark, so both svgs need a size or the button jumps on click. */
4995
+ .storage-item-actions button svg {
4996
+ width: 12px;
4997
+ height: 12px;
4998
+ display: block;
4999
+ }
5000
+
4830
5001
  .storage-item-actions button:hover {
4831
5002
  background: var(--bg-hover);
4832
5003
  color: var(--text-primary);
@@ -4915,6 +5086,18 @@ select.form-input option:checked {
4915
5086
  --danger: #c0392b;
4916
5087
  --danger-dim: rgba(192, 57, 43, 0.15);
4917
5088
  --plan: #5a7a5a;
5089
+ --ansi-red: #c0392b;
5090
+ --ansi-green: #1a8a5a;
5091
+ --ansi-yellow: #a8791a;
5092
+ --ansi-blue: #2b6cb0;
5093
+ --ansi-magenta: #8e44ad;
5094
+ --ansi-cyan: #1a7a7a;
5095
+ --ansi-bright-red: #e05548;
5096
+ --ansi-bright-green: #25a86f;
5097
+ --ansi-bright-yellow: #c2921f;
5098
+ --ansi-bright-blue: #3b82d6;
5099
+ --ansi-bright-magenta: #a855c9;
5100
+ --ansi-bright-cyan: #2a9a9a;
4918
5101
  --plan-dim: rgba(90, 122, 90, 0.15);
4919
5102
  }
4920
5103
 
@@ -5048,23 +5231,29 @@ pre.mermaid svg {
5048
5231
  border-radius: 4px;
5049
5232
  }
5050
5233
 
5051
- .project-group-header .group-chevron {
5234
+ .project-group-header .group-chevron,
5235
+ .session-group-header .group-chevron {
5052
5236
  transition: transform 0.15s ease;
5053
5237
  flex-shrink: 0;
5054
5238
  display: block;
5055
5239
  }
5056
5240
 
5057
- .project-group-header.collapsed .group-chevron {
5241
+ .project-group-header.collapsed .group-chevron,
5242
+ .session-group-header.collapsed .group-chevron {
5058
5243
  transform: rotate(-90deg);
5059
5244
  }
5060
5245
 
5061
- .project-group-header .group-name {
5062
- flex: 1;
5246
+ .project-group-header .group-name,
5247
+ .session-group-header .group-name {
5063
5248
  overflow: hidden;
5064
5249
  text-overflow: ellipsis;
5065
5250
  white-space: nowrap;
5066
5251
  }
5067
5252
 
5253
+ .project-group-header .group-name {
5254
+ flex: 1;
5255
+ }
5256
+
5068
5257
  .project-view-btn {
5069
5258
  color: var(--text-muted);
5070
5259
  cursor: pointer;
@@ -5179,24 +5368,30 @@ pre.mermaid svg {
5179
5368
  letter-spacing: 0.3px;
5180
5369
  }
5181
5370
 
5182
- .pinned-ungroup-btn {
5183
- margin-left: auto;
5184
- font-size: 14px;
5185
- line-height: 1;
5371
+ .pinned-ungroup-btn,
5372
+ .sg-action {
5186
5373
  color: var(--text-muted);
5187
5374
  cursor: pointer;
5188
- padding: 0 2px;
5375
+ line-height: 1;
5189
5376
  opacity: 0;
5190
5377
  transition:
5191
5378
  opacity 0.15s,
5192
5379
  color 0.15s;
5193
5380
  }
5194
5381
 
5195
- .pinned-sub-header:hover .pinned-ungroup-btn {
5382
+ .pinned-ungroup-btn {
5383
+ margin-left: auto;
5384
+ font-size: 14px;
5385
+ padding: 0 2px;
5386
+ }
5387
+
5388
+ .pinned-sub-header:hover .pinned-ungroup-btn,
5389
+ .session-group-header:hover .sg-action {
5196
5390
  opacity: 1;
5197
5391
  }
5198
5392
 
5199
- .pinned-ungroup-btn:hover {
5393
+ .pinned-ungroup-btn:hover,
5394
+ .sg-action:hover {
5200
5395
  color: var(--accent);
5201
5396
  }
5202
5397
 
@@ -5294,3 +5489,168 @@ pre.mermaid svg {
5294
5489
  border: 1px solid var(--text-muted);
5295
5490
  }
5296
5491
  /* #endregion */
5492
+
5493
+ /* #region SESSION_GROUPS */
5494
+ .sg-section-label {
5495
+ padding: 10px 10px 2px;
5496
+ margin-top: 10px;
5497
+ font-size: 10px;
5498
+ font-weight: 600;
5499
+ letter-spacing: 0.6px;
5500
+ text-transform: uppercase;
5501
+ color: var(--text-muted);
5502
+ user-select: none;
5503
+ }
5504
+
5505
+ .sg-section-label:first-child {
5506
+ margin-top: 0;
5507
+ }
5508
+
5509
+ .session-group-header {
5510
+ display: flex;
5511
+ align-items: center;
5512
+ gap: 6px;
5513
+ padding: 7px 10px;
5514
+ margin-top: 2px;
5515
+ cursor: pointer;
5516
+ user-select: none;
5517
+ font-size: 11px;
5518
+ font-weight: 600;
5519
+ color: var(--text-primary);
5520
+ border-radius: 4px;
5521
+ background: transparent;
5522
+ }
5523
+
5524
+ .session-group-header:hover {
5525
+ background: var(--bg-hover);
5526
+ }
5527
+
5528
+ .session-group-header.kb-selected {
5529
+ outline: 1px solid var(--accent);
5530
+ outline-offset: -1px;
5531
+ }
5532
+
5533
+ .sg-sub-label {
5534
+ padding: 8px 10px 2px 8px;
5535
+ font-size: 10px;
5536
+ font-weight: 600;
5537
+ letter-spacing: 0.5px;
5538
+ text-transform: uppercase;
5539
+ color: var(--text-muted);
5540
+ user-select: none;
5541
+ }
5542
+
5543
+ .sg-name-input {
5544
+ flex: 1;
5545
+ min-width: 0;
5546
+ padding: 1px 4px;
5547
+ font: inherit;
5548
+ color: var(--text-primary);
5549
+ background: var(--bg-deep);
5550
+ border: 1px solid var(--accent);
5551
+ border-radius: 3px;
5552
+ outline: none;
5553
+ }
5554
+
5555
+ .sg-action.sg-rename {
5556
+ margin-left: auto;
5557
+ display: flex;
5558
+ align-items: center;
5559
+ }
5560
+
5561
+ .sg-action.sg-delete {
5562
+ font-size: 15px;
5563
+ padding: 0 2px;
5564
+ }
5565
+
5566
+ .session-group-sessions {
5567
+ display: block;
5568
+ margin-left: 6px;
5569
+ }
5570
+
5571
+ .session-group-sessions.collapsed {
5572
+ display: none;
5573
+ }
5574
+
5575
+ .sg-empty {
5576
+ padding: 10px 8px;
5577
+ font-size: 11px;
5578
+ color: var(--text-muted);
5579
+ border: 1px dashed var(--border);
5580
+ border-radius: 4px;
5581
+ margin: 4px 2px;
5582
+ text-align: center;
5583
+ }
5584
+
5585
+ .project-group-header.sg-nested {
5586
+ margin-top: 4px;
5587
+ padding-top: 4px;
5588
+ }
5589
+
5590
+ /* Drag feedback */
5591
+ .session-item.sg-dragging,
5592
+ .project-group-header.sg-dragging,
5593
+ .session-group-header.sg-dragging {
5594
+ opacity: 0.45;
5595
+ }
5596
+
5597
+ .sg-drop-over {
5598
+ outline: 1px dashed var(--accent);
5599
+ outline-offset: -1px;
5600
+ background: var(--accent-dim);
5601
+ }
5602
+
5603
+ .sessions-list.sg-dragging-active .sg-ungroup-zone {
5604
+ border: 1px dashed var(--accent);
5605
+ border-radius: 4px;
5606
+ color: var(--text-primary);
5607
+ }
5608
+
5609
+ /* Move-to-group menu (right-click / long-press) */
5610
+ .sg-menu {
5611
+ position: fixed;
5612
+ z-index: 3000;
5613
+ min-width: 180px;
5614
+ max-width: 260px;
5615
+ padding: 4px;
5616
+ background: var(--bg-elevated);
5617
+ border: 1px solid var(--border);
5618
+ border-radius: 6px;
5619
+ box-shadow: 0 8px 24px rgb(0 0 0 / 35%);
5620
+ display: flex;
5621
+ flex-direction: column;
5622
+ gap: 1px;
5623
+ }
5624
+
5625
+ .sg-menu-label {
5626
+ padding: 6px 8px 4px;
5627
+ font-size: 10px;
5628
+ text-transform: uppercase;
5629
+ letter-spacing: 0.5px;
5630
+ color: var(--text-muted);
5631
+ }
5632
+
5633
+ .sg-menu-item {
5634
+ display: flex;
5635
+ align-items: center;
5636
+ gap: 6px;
5637
+ width: 100%;
5638
+ padding: 6px 8px;
5639
+ border: none;
5640
+ background: none;
5641
+ border-radius: 4px;
5642
+ font: inherit;
5643
+ font-size: 12px;
5644
+ color: var(--text-primary);
5645
+ text-align: left;
5646
+ cursor: pointer;
5647
+ }
5648
+
5649
+ .sg-menu-item:hover {
5650
+ background: var(--bg-hover);
5651
+ }
5652
+
5653
+ .sg-menu-remove {
5654
+ color: var(--text-secondary);
5655
+ }
5656
+ /* #endregion */