claude-plan-viewer 1.1.1 → 1.3.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/styles.css CHANGED
@@ -38,7 +38,7 @@ body {
38
38
  font-size: 13px;
39
39
  }
40
40
 
41
- #app {
41
+ #root {
42
42
  height: 100vh;
43
43
  display: flex;
44
44
  }
@@ -189,171 +189,160 @@ body {
189
189
  box-shadow: var(--focus-ring);
190
190
  }
191
191
 
192
- /* Project Dropdown */
193
- .project-dropdown {
192
+ /* Project Select */
193
+ .project-select-wrapper {
194
+ display: flex;
195
+ align-items: center;
196
+ gap: 6px;
194
197
  position: relative;
198
+ z-index: 50;
195
199
  }
196
200
 
197
- .dropdown-trigger {
198
- display: inline-flex;
199
- align-items: center;
200
- gap: var(--spacing-sm);
201
- padding: var(--spacing-sm) var(--spacing-md);
202
- background: var(--bg-tertiary);
201
+ .project-select-wrapper .project-select-clear {
202
+ padding: 5px 8px;
203
+ background: none;
203
204
  border: 1px solid var(--border);
204
205
  border-radius: var(--radius-md);
205
- color: var(--text-secondary);
206
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
207
- font-size: 11px;
206
+ color: var(--text-muted);
207
+ font-family: inherit;
208
+ font-size: 10px;
208
209
  cursor: pointer;
209
- transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
210
- white-space: nowrap;
210
+ transition: color 0.15s, background 0.15s, border-color 0.15s;
211
211
  outline: none;
212
- anchor-name: --project-trigger;
212
+ white-space: nowrap;
213
213
  }
214
214
 
215
- .dropdown-trigger:hover {
216
- background: var(--bg-hover);
215
+ .project-select-wrapper .project-select-clear:hover {
217
216
  color: var(--text-primary);
217
+ background: var(--bg-hover);
218
218
  border-color: var(--border-light);
219
219
  }
220
220
 
221
- .dropdown-trigger:focus {
221
+ .project-select-wrapper .project-select-clear:focus {
222
+ color: var(--text-primary);
223
+ background: var(--bg-hover);
222
224
  border-color: var(--accent);
223
225
  box-shadow: var(--focus-ring);
224
226
  }
225
227
 
226
- .dropdown-trigger.has-selection {
227
- background: var(--accent-dim);
228
- border-color: var(--accent);
229
- color: var(--text-primary);
228
+ .project-select-wrapper .react-select__control {
229
+ width: 140px;
230
+ flex-shrink: 0;
231
+ position: relative;
230
232
  }
231
233
 
232
- .dropdown-trigger .chevron {
233
- width: 12px;
234
- height: 12px;
235
- opacity: 0.5;
234
+ .project-select-wrapper .react-select__menu {
235
+ z-index: 60;
236
+ min-width: 220px;
237
+ width: max-content;
238
+ max-width: 320px;
236
239
  }
237
240
 
238
- .dropdown-trigger .badge {
239
- background: var(--accent);
240
- color: white;
241
- padding: 1px 5px;
242
- border-radius: 8px;
243
- font-size: 10px;
244
- font-weight: 500;
241
+ .project-select-wrapper .react-select__menu-list {
242
+ min-width: 220px;
245
243
  }
246
244
 
247
- .dropdown-menu {
248
- position: absolute;
249
- position-anchor: --project-trigger;
250
- top: anchor(bottom);
251
- left: anchor(left);
252
- margin: 0;
253
- margin-top: var(--spacing-xs);
254
- padding: var(--spacing-sm);
255
- background: var(--bg-secondary);
256
- border: 1px solid var(--border);
257
- border-radius: var(--radius-lg);
258
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
259
- min-width: 180px;
260
- max-height: 280px;
261
- overflow-y: auto;
245
+ .project-select-wrapper .react-select__placeholder {
246
+ color: var(--text-muted);
247
+ font-size: 11px;
262
248
  }
263
249
 
264
- .dropdown-menu:popover-open {
265
- display: flex;
266
- flex-direction: column;
267
- gap: 2px;
250
+ .project-select-wrapper .react-select__single-value {
251
+ color: var(--text-primary);
252
+ font-size: 11px;
268
253
  }
269
254
 
270
- .dropdown-item {
271
- display: flex;
272
- align-items: center;
273
- gap: var(--spacing-sm);
274
- padding: var(--spacing-sm) var(--spacing-sm);
275
- border-radius: var(--radius-sm);
276
- cursor: pointer;
277
- font-size: 12px;
255
+ .project-select-wrapper .react-select__input-container {
278
256
  color: var(--text-primary);
279
- transition: background 0.1s;
257
+ font-size: 11px;
280
258
  }
281
259
 
282
- .dropdown-item:hover {
283
- background: var(--bg-hover);
260
+ .project-select-wrapper .react-select__value-container {
261
+ gap: 4px;
284
262
  }
285
263
 
286
- /* Custom checkbox styling */
287
- .dropdown-item input[type="checkbox"] {
288
- appearance: none;
289
- -webkit-appearance: none;
290
- width: 14px;
291
- height: 14px;
292
- border: 1px solid var(--border-light);
293
- border-radius: 3px;
294
- background: var(--bg-tertiary);
295
- cursor: pointer;
296
- position: relative;
297
- flex-shrink: 0;
298
- transition: border-color 0.15s, background 0.15s;
264
+ .project-select-wrapper .react-select__menu {
265
+ z-index: 60;
266
+ min-width: 220px;
267
+ width: max-content;
268
+ max-width: 320px;
299
269
  }
300
270
 
301
- .dropdown-item input[type="checkbox"]:hover {
302
- border-color: var(--accent);
271
+ .project-select-wrapper .react-select__menu-list {
272
+ min-width: 220px;
303
273
  }
304
274
 
305
- .dropdown-item input[type="checkbox"]:focus {
306
- outline: none;
307
- border-color: var(--accent);
308
- box-shadow: var(--focus-ring);
275
+ .project-select-wrapper .react-select__control--menu-is-open {
276
+ z-index: 61;
309
277
  }
310
278
 
311
- .dropdown-item input[type="checkbox"]:checked {
312
- background: var(--accent);
313
- border-color: var(--accent);
279
+ .project-select-wrapper .react-select__placeholder {
280
+ color: var(--text-muted);
281
+ font-size: 11px;
282
+ font-family: ui-monospace, SFMono-Regular, monospace;
314
283
  }
315
284
 
316
- .dropdown-item input[type="checkbox"]:checked::after {
317
- content: '';
318
- position: absolute;
319
- left: 4px;
320
- top: 1px;
321
- width: 4px;
322
- height: 8px;
323
- border: solid white;
324
- border-width: 0 1.5px 1.5px 0;
325
- transform: rotate(45deg);
285
+ .project-select-wrapper .react-select__single-value {
286
+ color: var(--text-primary);
287
+ font-size: 11px;
288
+ font-family: ui-monospace, SFMono-Regular, monospace;
326
289
  }
327
290
 
328
- .dropdown-item span {
329
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
291
+ .project-select-wrapper .react-select__input-container {
292
+ color: var(--text-primary);
330
293
  font-size: 11px;
294
+ font-family: ui-monospace, SFMono-Regular, monospace;
331
295
  }
332
296
 
333
- .dropdown-clear {
334
- margin-top: var(--spacing-xs);
335
- padding: var(--spacing-sm);
336
- background: none;
337
- border: none;
338
- border-top: 1px solid var(--border);
339
- border-radius: 0 0 var(--radius-sm) var(--radius-sm);
340
- color: var(--text-muted);
341
- font-family: inherit;
342
- font-size: 11px;
343
- cursor: pointer;
344
- text-align: center;
345
- transition: color 0.15s, background 0.15s;
346
- outline: none;
297
+ .project-select-wrapper .react-select__value-container {
298
+ gap: 4px;
347
299
  }
348
300
 
349
- .dropdown-clear:hover {
350
- color: var(--text-primary);
351
- background: var(--bg-hover);
301
+ .project-select-wrapper .project-badge {
302
+ background: var(--accent);
303
+ color: white;
304
+ padding: 1px 5px;
305
+ border-radius: 8px;
306
+ font-size: 10px;
307
+ font-weight: 500;
308
+ margin-left: 4px;
352
309
  }
353
310
 
354
- .dropdown-clear:focus {
311
+ .project-select-wrapper .react-select__input-container {
355
312
  color: var(--text-primary);
356
- background: var(--bg-hover);
313
+ }
314
+
315
+ .project-select-wrapper .react-select__input-container input {
316
+ font-family: ui-monospace, SFMono-Regular, monospace !important;
317
+ font-size: 11px !important;
318
+ }
319
+
320
+ .project-select-wrapper .react-select__loading-indicator {
321
+ color: var(--text-muted);
322
+ }
323
+
324
+ .project-select-wrapper .react-select__loading-dot {
325
+ background-color: var(--text-muted);
326
+ }
327
+
328
+ .project-select-wrapper .react-select__menu-notice--no-options {
329
+ color: var(--text-muted);
330
+ font-size: 12px;
331
+ font-family: ui-monospace, SFMono-Regular, monospace;
332
+ }
333
+
334
+ .project-select-wrapper .react-select__group {
335
+ padding: 4px;
336
+ }
337
+
338
+ .project-select-wrapper .react-select__group-heading {
339
+ color: var(--text-muted);
340
+ font-size: 10px;
341
+ font-weight: 500;
342
+ text-transform: uppercase;
343
+ letter-spacing: 0.5px;
344
+ padding: 4px 8px;
345
+ margin-bottom: 4px;
357
346
  }
358
347
 
359
348
  .stats {
@@ -457,6 +446,14 @@ th.sorted.desc .sort-icon {
457
446
  transform: rotate(180deg);
458
447
  }
459
448
 
449
+ th.no-sort {
450
+ cursor: default;
451
+ }
452
+
453
+ th.no-sort:hover {
454
+ color: var(--text-secondary);
455
+ }
456
+
460
457
  td {
461
458
  padding: 6px 10px;
462
459
  border-bottom: 1px solid var(--border);
@@ -475,11 +472,11 @@ tbody tr:hover {
475
472
  }
476
473
 
477
474
  tr.selected {
478
- background: var(--bg-selected);
475
+ background: rgba(107, 138, 205, 0.15);
479
476
  }
480
477
 
481
478
  tr.selected:hover {
482
- background: var(--bg-selected);
479
+ background: rgba(107, 138, 205, 0.15);
483
480
  }
484
481
 
485
482
  .title-cell {
@@ -523,6 +520,13 @@ tr.selected .title-btn {
523
520
  max-width: 140px;
524
521
  }
525
522
 
523
+ .filename-cell {
524
+ color: var(--text-secondary);
525
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
526
+ font-size: 11px;
527
+ max-width: 180px;
528
+ }
529
+
526
530
  .meta-cell {
527
531
  color: var(--text-secondary);
528
532
  font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
@@ -541,6 +545,19 @@ tr.selected .title-btn {
541
545
  font-variant-numeric: tabular-nums;
542
546
  }
543
547
 
548
+ .date-col {
549
+ width: 90px;
550
+ }
551
+
552
+ .date-cell {
553
+ color: var(--text-muted);
554
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
555
+ font-size: 11px;
556
+ letter-spacing: -0.5px;
557
+ white-space: nowrap;
558
+ font-variant-numeric: tabular-nums;
559
+ }
560
+
544
561
  /* Detail Panel */
545
562
  .detail-panel {
546
563
  flex: 1;
@@ -548,8 +565,32 @@ tr.selected .title-btn {
548
565
  flex-direction: column;
549
566
  overflow: hidden;
550
567
  background: var(--bg-primary);
568
+ max-width: 920px;
551
569
  }
552
570
 
571
+ .detail-empty {
572
+ flex: 1;
573
+ display: flex;
574
+ flex-direction: column;
575
+ align-items: center;
576
+ justify-content: center;
577
+ color: var(--text-muted);
578
+ text-align: center;
579
+ padding: 40px;
580
+ }
581
+
582
+ .detail-empty p {
583
+ font-size: 14px;
584
+ margin-bottom: 8px;
585
+ }
586
+
587
+ .detail-empty .hint {
588
+ font-size: 12px;
589
+ color: var(--text-muted);
590
+ opacity: 0.7;
591
+ }
592
+
593
+
553
594
  .detail-header {
554
595
  padding: 12px 16px;
555
596
  border-bottom: 1px solid var(--border);
@@ -644,10 +685,36 @@ tr.selected .title-btn {
644
685
  font-size: 10px;
645
686
  }
646
687
 
688
+ .detail-meta .session-tag {
689
+ background: var(--bg-tertiary);
690
+ color: var(--text-muted);
691
+ padding: 2px 6px;
692
+ border: 1px solid var(--border);
693
+ border-radius: 4px;
694
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
695
+ font-size: 10px;
696
+ cursor: pointer;
697
+ transition: background 0.15s, color 0.15s, border-color 0.15s;
698
+ }
699
+
700
+ .detail-meta .session-tag:hover {
701
+ background: var(--bg-hover);
702
+ color: var(--text-secondary);
703
+ border-color: var(--border-light);
704
+ }
705
+
706
+ .detail-meta .session-tag:active {
707
+ background: var(--accent-dim);
708
+ color: var(--text-primary);
709
+ border-color: var(--accent);
710
+ }
711
+
647
712
  .detail-content {
648
713
  flex: 1;
649
714
  overflow-y: auto;
650
715
  padding: 20px 24px;
716
+ max-width: 920px;
717
+ width: 100%;
651
718
  }
652
719
 
653
720
  .detail-content::-webkit-scrollbar {
@@ -668,6 +735,7 @@ tr.selected .title-btn {
668
735
  font-size: 13px;
669
736
  line-height: 1.6;
670
737
  max-width: 800px;
738
+ margin: 0 auto;
671
739
  }
672
740
 
673
741
  .markdown h1,
@@ -849,6 +917,20 @@ tr.selected .title-btn {
849
917
  }
850
918
 
851
919
  /* Loading state */
920
+ .loading-container {
921
+ display: flex;
922
+ align-items: center;
923
+ justify-content: center;
924
+ flex: 1;
925
+ width: 100%;
926
+ min-height: 100%;
927
+ }
928
+
929
+ .loading-container .loading {
930
+ color: var(--text-muted);
931
+ font-size: 14px;
932
+ }
933
+
852
934
  .loading {
853
935
  display: flex;
854
936
  align-items: center;
@@ -875,9 +957,106 @@ tr.selected .title-btn {
875
957
 
876
958
  .detail-panel {
877
959
  height: 50%;
960
+ max-width: none;
961
+ }
962
+
963
+ .detail-content {
964
+ max-width: none;
878
965
  }
879
966
  }
880
967
 
968
+ /* Detail Overlay */
969
+ .detail-overlay {
970
+ position: fixed;
971
+ inset: 0;
972
+ background: transparent;
973
+ backdrop-filter: none;
974
+ z-index: 110;
975
+ opacity: 0;
976
+ pointer-events: none;
977
+ transition: opacity 320ms;
978
+ transition-timing-function: cubic-bezier(0.3, 0, 0.2, 1);
979
+ }
980
+
981
+ .detail-overlay-panel {
982
+ position: absolute;
983
+ inset: 20px;
984
+ background: var(--bg-primary);
985
+ border: 1px solid var(--border);
986
+ border-radius: 12px;
987
+ display: flex;
988
+ flex-direction: column;
989
+ overflow: hidden;
990
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
991
+ transform: translate(110%, 110%) scale(0.96);
992
+ opacity: 0.45;
993
+ filter: grayscale(0.25);
994
+ transition: transform 320ms, opacity 320ms, filter 320ms;
995
+ transition-timing-function: cubic-bezier(0.3, 0, 0.2, 1);
996
+ }
997
+
998
+ .detail-overlay.is-open {
999
+ background: rgba(0, 0, 0, 0.72);
1000
+ backdrop-filter: blur(4px);
1001
+ opacity: 1;
1002
+ pointer-events: auto;
1003
+ transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
1004
+ }
1005
+
1006
+ .detail-overlay.is-open .detail-overlay-panel {
1007
+ transform: translate(0, 0) scale(1);
1008
+ opacity: 1;
1009
+ filter: grayscale(0);
1010
+ transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
1011
+ }
1012
+
1013
+ .detail-overlay-bar {
1014
+ display: flex;
1015
+ align-items: center;
1016
+ gap: 12px;
1017
+ padding: 8px 12px;
1018
+ border-bottom: 1px solid var(--border);
1019
+ background: var(--bg-secondary);
1020
+ }
1021
+
1022
+
1023
+ .detail-overlay-content {
1024
+ flex: 1;
1025
+ overflow: auto;
1026
+ padding: 20px 16px;
1027
+ }
1028
+
1029
+ .detail-overlay-meta {
1030
+ padding: 0;
1031
+ border-bottom: none;
1032
+ background: transparent;
1033
+ flex: 1;
1034
+ min-width: 0;
1035
+ gap: 10px;
1036
+ }
1037
+
1038
+ .detail-overlay-panel .markdown {
1039
+ max-width: 720px;
1040
+ margin: 60px auto;
1041
+ }
1042
+
1043
+ @media (max-width: 700px) {
1044
+ .detail-overlay-panel {
1045
+ inset: 12px;
1046
+ }
1047
+ }
1048
+
1049
+ @media (max-width: 1000px) {
1050
+ .detail-overlay-panel {
1051
+ transform: translate(0, 110%) scale(0.96);
1052
+ }
1053
+
1054
+ .detail-overlay.is-open .detail-overlay-panel {
1055
+ transform: translateY(0) scale(1);
1056
+ }
1057
+ }
1058
+
1059
+
881
1060
  /* Help Modal */
882
1061
  .modal-backdrop {
883
1062
  position: fixed;