jupyterlab_claude_code_extension 1.2.34 → 1.2.35

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