jupyterlab_claude_code_extension 1.2.34 → 1.2.36

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 (2) hide show
  1. package/package.json +1 -1
  2. package/style/base.css +128 -51
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jupyterlab_claude_code_extension",
3
- "version": "1.2.34",
3
+ "version": "1.2.36",
4
4
  "description": "Browse, resume, and manage your Claude Code CLI sessions from a JupyterLab side panel. One click reactivates the right terminal - no duplicate tabs, live remote-control indicator, and favourites for the projects you keep coming back to.",
5
5
  "keywords": [
6
6
  "jupyter",
package/style/base.css CHANGED
@@ -242,7 +242,10 @@
242
242
  justify-content: center;
243
243
  width: 14px;
244
244
  height: 14px;
245
- color: var(--jp-warn-color1);
245
+
246
+ /* Dim the standard jp-icon3 star so the favourite marker is quiet, not an
247
+ alarm - lowers its visual weight against the row text. */
248
+ opacity: 0.5;
246
249
  }
247
250
 
248
251
  .jp-ClaudeSessionsPanel-favStar svg {
@@ -352,32 +355,71 @@
352
355
  margin: 0 auto;
353
356
  }
354
357
 
355
- /* Branch-switch popup: search box over a scrollable branch list. */
358
+ /* ============================================================
359
+ Sessions Management popup - Duoptimum Hub design language,
360
+ driven entirely by JupyterLab theme variables so a theme flip
361
+ (light / dark / custom) restyles the whole screen at once. The
362
+ --ccs-* tokens map the design system onto --jp-* vars: the look
363
+ is the design language, the colours are the current theme.
364
+ ============================================================ */
356
365
  .jp-ClaudeSessionsPanel-branchPopup {
366
+ --ccs-radius-sm: 4px;
367
+ --ccs-radius: 6px;
368
+ --ccs-radius-lg: 8px;
369
+ --ccs-surface: var(--jp-layout-color1);
370
+ --ccs-surface-hover: var(--jp-layout-color2);
371
+ --ccs-border: var(--jp-border-color2);
372
+ --ccs-border-subtle: var(--jp-border-color3);
373
+ --ccs-text: var(--jp-ui-font-color1);
374
+ --ccs-text-muted: var(--jp-ui-font-color2);
375
+
376
+ /* font-color3 is the disabled/hint level - too dim for content in some themes
377
+ (e.g. Stellars Dark renders it ~#5a5a5a, near-invisible on the surface), so
378
+ readable secondary labels (times, "current", counts) stay at font-color2. */
379
+ --ccs-text-subtle: var(--jp-ui-font-color2);
380
+ --ccs-accent: var(--jp-brand-color1);
381
+ --ccs-accent-soft: color-mix(
382
+ in srgb,
383
+ var(--jp-brand-color1) 14%,
384
+ transparent
385
+ );
386
+ --ccs-danger: var(--jp-error-color1);
387
+ --ccs-danger-soft: color-mix(
388
+ in srgb,
389
+ var(--jp-error-color1) 15%,
390
+ transparent
391
+ );
392
+
357
393
  display: flex;
358
394
  flex-direction: column;
359
- gap: 8px;
360
- min-width: 320px;
395
+ gap: 10px;
396
+ min-width: 360px;
361
397
  }
362
398
 
399
+ /* Design-language text input: 6px radius, accent focus ring. */
363
400
  .jp-ClaudeSessionsPanel-branchSearch {
364
401
  width: 100%;
365
402
  box-sizing: border-box;
366
- padding: 2px 6px;
367
- background: var(--jp-input-background, var(--jp-layout-color1));
368
- color: var(--jp-ui-font-color1);
369
- border: 1px solid var(--jp-border-color2);
370
- border-radius: 2px;
403
+ height: 30px;
404
+ padding: 0 11px;
405
+ background: var(--ccs-surface);
406
+ color: var(--ccs-text);
407
+ border: 1px solid var(--ccs-border);
408
+ border-radius: var(--ccs-radius);
371
409
  font-family: inherit;
372
410
  font-size: var(--jp-ui-font-size1);
373
411
  outline: none;
412
+ transition:
413
+ border-color 120ms ease,
414
+ box-shadow 120ms ease;
374
415
  }
375
416
 
376
417
  .jp-ClaudeSessionsPanel-branchSearch:focus {
377
- border-color: var(--jp-brand-color1);
418
+ border-color: var(--ccs-accent);
419
+ box-shadow: 0 0 0 3px var(--ccs-accent-soft);
378
420
  }
379
421
 
380
- /* Table header strip above the scrollable list - select-all and count. */
422
+ /* Header strip above the list - select-all left, count right. */
381
423
  .jp-ClaudeSessionsPanel-branchHeader {
382
424
  display: flex;
383
425
  align-items: center;
@@ -386,8 +428,9 @@
386
428
  }
387
429
 
388
430
  .jp-ClaudeSessionsPanel-branchHeaderCount {
389
- color: var(--jp-ui-font-color2);
431
+ color: var(--ccs-text-subtle);
390
432
  font-size: var(--jp-ui-font-size0);
433
+ font-variant-numeric: tabular-nums;
391
434
  }
392
435
 
393
436
  /* Fixed-width first column so the checkbox (branch rows) and the empty cell
@@ -402,12 +445,15 @@
402
445
  cursor: pointer;
403
446
  }
404
447
 
448
+ /* The list is a surface card; rows are flush and hairline-separated. The
449
+ rounded corners clip the row hover fills (overflow-y establishes the clip). */
405
450
  .jp-ClaudeSessionsPanel-branchList {
406
- max-height: 280px;
451
+ max-height: 300px;
407
452
  overflow-y: auto;
408
453
  position: relative;
409
- border: 1px solid var(--jp-border-color2);
410
- border-radius: 2px;
454
+ background: var(--ccs-surface);
455
+ border: 1px solid var(--ccs-border);
456
+ border-radius: var(--ccs-radius-lg);
411
457
  }
412
458
 
413
459
  /* Visually-hidden polite live region (delete announcements). */
@@ -427,17 +473,20 @@
427
473
  display: flex;
428
474
  align-items: center;
429
475
  justify-content: space-between;
430
- gap: 6px;
431
- height: 24px;
432
- line-height: 24px;
433
- padding: 0 8px;
476
+ gap: 10px;
477
+ height: 30px;
478
+ padding: 0 10px;
434
479
  cursor: pointer;
435
- border-radius: 2px;
480
+ border-bottom: 1px solid var(--ccs-border-subtle);
436
481
  font-size: var(--jp-ui-font-size1);
437
482
  }
438
483
 
484
+ .jp-ClaudeSessionsPanel-branchRow:last-child {
485
+ border-bottom: none;
486
+ }
487
+
439
488
  .jp-ClaudeSessionsPanel-branchRow:hover {
440
- background: var(--jp-layout-color2);
489
+ background: var(--ccs-surface-hover);
441
490
  }
442
491
 
443
492
  .jp-ClaudeSessionsPanel-branchLabel {
@@ -446,35 +495,49 @@
446
495
  overflow: hidden;
447
496
  text-overflow: ellipsis;
448
497
  white-space: nowrap;
498
+ color: var(--ccs-text);
449
499
  }
450
500
 
501
+ /* Copy id - design-language action icon: wireframe by default, hovers to a
502
+ surface tint. Square 24px hit target keeps it aligned in the row. */
451
503
  .jp-ClaudeSessionsPanel-branchCopy {
452
504
  flex: none;
453
- display: flex;
454
- align-items: center;
505
+ width: 24px;
506
+ height: 24px;
507
+ display: inline-grid;
508
+ place-items: center;
455
509
  padding: 0;
456
510
  border: none;
511
+ border-radius: var(--ccs-radius-sm);
457
512
  background: transparent;
458
- color: var(--jp-ui-font-color2);
513
+ color: var(--ccs-text-subtle);
459
514
  cursor: pointer;
515
+ transition:
516
+ background 120ms ease,
517
+ color 120ms ease;
460
518
  }
461
519
 
462
520
  .jp-ClaudeSessionsPanel-branchCopy:hover {
463
- color: var(--jp-ui-font-color1);
521
+ background: var(--ccs-surface-hover);
522
+ color: var(--ccs-text);
464
523
  }
465
524
 
466
- /* Per-row "Open" launches the conversation in its own terminal. Compact
467
- brand-outlined button matching the popup design language (2px radius). */
525
+ /* Per-row "Open" launches the conversation in its own terminal. Design-language
526
+ list button: outlined accent, fills to the accent on hover (6px radius). */
468
527
  .jp-ClaudeSessionsPanel-branchOpen {
469
528
  flex: none;
470
- padding: 0 8px;
529
+ height: 24px;
530
+ padding: 0 10px;
471
531
  border: 1px solid var(--jp-brand-color1);
472
- border-radius: 2px;
532
+ border-radius: var(--ccs-radius);
473
533
  background: transparent;
474
534
  color: var(--jp-brand-color1);
475
535
  font-size: var(--jp-ui-font-size0);
536
+ font-weight: 500;
476
537
  cursor: pointer;
477
- transition: background 120ms ease;
538
+ transition:
539
+ background 120ms ease,
540
+ color 120ms ease;
478
541
  }
479
542
 
480
543
  .jp-ClaudeSessionsPanel-branchOpen:hover {
@@ -487,31 +550,33 @@
487
550
  width: 4em;
488
551
  white-space: nowrap;
489
552
  text-align: right;
490
- color: var(--jp-ui-font-color2);
553
+ color: var(--ccs-text-subtle);
491
554
  font-size: var(--jp-ui-font-size0);
555
+ font-variant-numeric: tabular-nums;
492
556
  }
493
557
 
494
558
  .jp-ClaudeSessionsPanel-branchRow input[type='checkbox'] {
495
559
  flex: none;
496
560
  margin: 0;
497
561
  cursor: pointer;
562
+ accent-color: var(--jp-brand-color1);
498
563
  }
499
564
 
500
565
  /* The current conversation is pinned at the top of the scroll area and
501
- accented (brand left-bar + tint) so it reads as the active one - not
502
- dimmed; it is not selectable or deletable. */
566
+ accented (brand left-bar + soft tint, the design-language left-edge accent)
567
+ so it reads as the active one - not dimmed; not selectable or deletable. */
503
568
  .jp-ClaudeSessionsPanel-branchRow.jp-mod-current {
504
569
  position: sticky;
505
570
  top: 0;
506
571
  z-index: 1;
507
572
  cursor: default;
508
- background: var(--jp-layout-color2);
573
+ background: var(--ccs-surface-hover);
509
574
  border-left: 3px solid var(--jp-brand-color1);
510
- padding-left: 5px;
575
+ padding-left: 7px;
511
576
  }
512
577
 
513
578
  .jp-ClaudeSessionsPanel-branchRow.jp-mod-current:hover {
514
- background: var(--jp-layout-color2);
579
+ background: var(--ccs-surface-hover);
515
580
  }
516
581
 
517
582
  /* The current row's select cell is an empty alignment spacer - no pointer. */
@@ -520,10 +585,11 @@
520
585
  cursor: default;
521
586
  }
522
587
 
588
+ /* Plain, understated "current" marker - deliberately not a loud chip. */
523
589
  .jp-ClaudeSessionsPanel-branchCurrentBadge {
524
590
  flex: none;
525
591
  white-space: nowrap;
526
- color: var(--jp-ui-font-color2);
592
+ color: var(--ccs-text-subtle);
527
593
  font-size: var(--jp-ui-font-size0);
528
594
  }
529
595
 
@@ -531,9 +597,9 @@
531
597
  display: flex;
532
598
  align-items: center;
533
599
  gap: 8px;
534
- padding: 0 6px;
600
+ padding: 0 2px;
535
601
  cursor: pointer;
536
- color: var(--jp-ui-font-color2);
602
+ color: var(--ccs-text-subtle);
537
603
  font-size: var(--jp-ui-font-size0);
538
604
  user-select: none;
539
605
  }
@@ -541,23 +607,26 @@
541
607
  .jp-ClaudeSessionsPanel-branchSelectAll input[type='checkbox'] {
542
608
  margin: 0;
543
609
  cursor: pointer;
610
+ accent-color: var(--jp-brand-color1);
544
611
  }
545
612
 
546
613
  .jp-ClaudeSessionsPanel-branchFooter {
547
614
  display: flex;
548
615
  align-items: center;
549
616
  justify-content: space-between;
617
+ min-height: 26px;
550
618
  }
551
619
 
552
620
  .jp-ClaudeSessionsPanel-branchSelCount {
553
- color: var(--jp-ui-font-color2);
621
+ color: var(--ccs-text-subtle);
554
622
  font-size: var(--jp-ui-font-size0);
623
+ font-variant-numeric: tabular-nums;
555
624
  }
556
625
 
557
626
  /* The post-delete "N moved to trash" feedback reads at full strength - it is
558
627
  the recoverability cue that stands in for a confirmation prompt. */
559
628
  .jp-ClaudeSessionsPanel-branchSelCount.jp-mod-deleted {
560
- color: var(--jp-ui-font-color1);
629
+ color: var(--ccs-text);
561
630
  }
562
631
 
563
632
  /* While a delete is in flight the whole body is scrimmed so a mid-flight tick,
@@ -568,30 +637,38 @@
568
637
  opacity: 0.6;
569
638
  }
570
639
 
571
- /* Destructive: deletes immediately (no confirmation), so it reads in the
572
- error colour and fills on hover. */
640
+ /* Destructive: deletes immediately (no confirmation). Design-language
641
+ list-danger button - always an OUTLINE, never a filled primary: a dim,
642
+ inactive outline while nothing is selected, a lit error outline once a
643
+ selection arms it, and only a soft error tint on hover (6px radius). */
573
644
  .jp-ClaudeSessionsPanel-branchDelete {
574
- padding: 2px 8px;
645
+ height: 26px;
646
+ padding: 0 12px;
575
647
  border: 1px solid var(--jp-error-color1);
576
- border-radius: 2px;
577
- background: var(--jp-layout-color1);
648
+ border-radius: var(--ccs-radius);
649
+ background: transparent;
578
650
  color: var(--jp-error-color1);
651
+ font-size: var(--jp-ui-font-size0);
652
+ font-weight: 500;
579
653
  cursor: pointer;
580
654
  transition:
581
655
  background 120ms ease,
656
+ border-color 120ms ease,
582
657
  color 120ms ease;
583
658
  }
584
659
 
660
+ /* Disabled = inactive outline: theme border + muted text, plainly not primary
661
+ and not actionable, but still legible (no wash-out). */
585
662
  .jp-ClaudeSessionsPanel-branchDelete:disabled {
586
- opacity: 0.5;
587
663
  cursor: default;
588
- border-color: var(--jp-border-color1);
589
- color: var(--jp-ui-font-color2);
664
+ border-color: var(--ccs-border);
665
+ color: var(--ccs-text-muted);
590
666
  }
591
667
 
668
+ /* Hover while armed stays an outline - a soft error tint, not a solid fill. */
592
669
  .jp-ClaudeSessionsPanel-branchDelete:hover:not(:disabled) {
593
- background: var(--jp-error-color1);
594
- color: var(--jp-ui-inverse-font-color1, #fff);
670
+ background: var(--ccs-danger-soft);
671
+ color: var(--jp-error-color1);
595
672
  }
596
673
 
597
674
  /* Last-activity time on session rows - dim, fixed-width right-aligned