gantt-lib 0.135.8 → 0.136.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/dist/styles.css CHANGED
@@ -473,11 +473,12 @@
473
473
  }
474
474
  .gantt-tr-row:hover,
475
475
  .gantt-tr-row-hovered {
476
- background-color: var(--gantt-row-hover-background, rgba(59, 130, 246, 0.04));
476
+ box-shadow: inset 0 0 0 9999px var(--gantt-row-hover-background, rgba(59, 130, 246, 0.04));
477
477
  }
478
478
  .gantt-tr-row.gantt-tr-row-filter-match:hover,
479
479
  .gantt-tr-row.gantt-tr-row-filter-match.gantt-tr-row-hovered {
480
480
  background-color: rgba(250, 204, 21, 0.3);
481
+ box-shadow: inset 0 0 0 9999px rgba(250, 204, 21, 0.3);
481
482
  }
482
483
  .gantt-tr-taskBar {
483
484
  position: absolute;
@@ -494,6 +495,137 @@
494
495
  transition: box-shadow 0.15s ease;
495
496
  cursor: grab;
496
497
  }
498
+ .gantt-tr-compositePreview {
499
+ position: fixed;
500
+ z-index: 10000;
501
+ width: 220px;
502
+ max-height: 340px;
503
+ overflow: hidden;
504
+ padding: 4px 12px 10px;
505
+ border: 1px solid var(--gantt-grid-line-color, #ddd);
506
+ border-radius: 8px;
507
+ background: var(--gantt-background, #fff);
508
+ color: var(--gantt-text-color, #222);
509
+ box-shadow: 0 8px 24px rgba(0, 0, 0, .16);
510
+ pointer-events: none;
511
+ font-size: 12px;
512
+ }
513
+ .gantt-tr-compositePreviewRow {
514
+ display: grid;
515
+ grid-template-columns: 60px 1fr;
516
+ align-items: center;
517
+ gap: 8px;
518
+ height: 20px;
519
+ white-space: nowrap;
520
+ }
521
+ .gantt-tr-compositePreviewAxis {
522
+ display: flex;
523
+ justify-content: space-between;
524
+ margin: 0 0 3px 68px;
525
+ color: #64748b;
526
+ font-size: 10px;
527
+ }
528
+ .gantt-tr-compositePreviewTrack {
529
+ position: relative;
530
+ height: 10px;
531
+ border-radius: 2px;
532
+ background: #f1f5f9;
533
+ }
534
+ .gantt-tr-compositePreviewBar {
535
+ position: absolute;
536
+ top: 1px;
537
+ height: 8px;
538
+ border-radius: 2px;
539
+ }
540
+ .gantt-tr-compositeBar {
541
+ border-radius: var(--gantt-task-bar-border-radius);
542
+ overflow: hidden;
543
+ }
544
+ .gantt-tr-compositeSegments {
545
+ position: absolute;
546
+ inset: 0;
547
+ pointer-events: none;
548
+ }
549
+ .gantt-tr-compositeSegment {
550
+ position: absolute;
551
+ box-sizing: border-box;
552
+ border-right: 2px solid rgba(255, 255, 255, .85);
553
+ background: rgba(255, 255, 255, .14);
554
+ }
555
+ .gantt-tr-compositeHoverChevron {
556
+ position: absolute;
557
+ z-index: 3;
558
+ left: 0;
559
+ top: 50%;
560
+ display: inline-flex;
561
+ align-items: center;
562
+ justify-content: center;
563
+ width: 24px;
564
+ height: 24px;
565
+ transform: translateY(-50%);
566
+ padding: 0;
567
+ border-radius: 4px;
568
+ background: rgba(24, 16, 45, .48);
569
+ color: white;
570
+ font-size: 11px;
571
+ font-weight: 700;
572
+ opacity: 0;
573
+ pointer-events: none;
574
+ transition: opacity 120ms ease;
575
+ }
576
+ .gantt-tr-compositeBar:hover .gantt-tr-compositeHoverChevron,
577
+ .gantt-tr-compositeBar:focus-visible .gantt-tr-compositeHoverChevron {
578
+ opacity: 1;
579
+ }
580
+ .gantt-tr-compositeChevron {
581
+ width: 14px;
582
+ height: 14px;
583
+ transition: transform 140ms ease;
584
+ }
585
+ .gantt-tr-compositeChevron-open {
586
+ transform: rotate(90deg);
587
+ }
588
+ .gantt-tr-externalDuration.gantt-tr-compositeDuration {
589
+ font-size: 0.72rem;
590
+ }
591
+ .gantt-tr-durationBeforeBar {
592
+ position: absolute;
593
+ top: 50%;
594
+ z-index: 1;
595
+ width: 40px;
596
+ padding-right: 4px;
597
+ transform: translateY(-50%);
598
+ text-align: right;
599
+ pointer-events: none;
600
+ font-size: 0.8rem;
601
+ font-weight: 500;
602
+ }
603
+ .gantt-tr-compositeBar .gantt-tr-resizeHandle {
604
+ width: 6px;
605
+ }
606
+ .gantt-tr-row-compositeDetail {
607
+ background-color: color-mix(in srgb, var(--gantt-tr-composite-detail-color) 8%, transparent);
608
+ }
609
+ .gantt-tr-row-compositeDetail:hover,
610
+ .gantt-tr-row-compositeDetail.gantt-tr-row-hovered {
611
+ box-shadow: inset 0 0 0 9999px var(--gantt-row-hover-background, rgba(59, 130, 246, 0.04));
612
+ }
613
+ .gantt-tr-row-compositeDetail .gantt-tr-taskBar {
614
+ border-radius: 4px;
615
+ opacity: .88;
616
+ }
617
+ .gantt-tr-row-compositeDetail .gantt-tr-leftLabels {
618
+ display: none;
619
+ }
620
+ .gantt-tr-row-compositeDetail .gantt-tr-externalTaskName {
621
+ font-size: 0.72rem;
622
+ }
623
+ .gantt-tr-row-compositeDetail .gantt-tr-progressText {
624
+ display: none;
625
+ }
626
+ .gantt-tr-row-compositeDetail .gantt-tr-externalProgress {
627
+ display: none;
628
+ }
497
629
  .gantt-tr-milestone {
498
630
  border-radius: 2px;
499
631
  overflow: visible;
@@ -555,6 +687,27 @@
555
687
  .gantt-tr-resizeHandleRight {
556
688
  right: 0;
557
689
  }
690
+ .gantt-tr-resizeHandle::before {
691
+ content: "";
692
+ position: absolute;
693
+ top: 22%;
694
+ bottom: 22%;
695
+ width: 3px;
696
+ border-radius: 2px;
697
+ background: rgba(255, 255, 255, 0.65);
698
+ opacity: 0;
699
+ transition: opacity 140ms ease;
700
+ pointer-events: none;
701
+ }
702
+ .gantt-tr-resizeHandleLeft::before {
703
+ left: 4px;
704
+ }
705
+ .gantt-tr-resizeHandleRight::before {
706
+ right: 4px;
707
+ }
708
+ .gantt-tr-row:hover .gantt-tr-resizeHandle::before {
709
+ opacity: 1;
710
+ }
558
711
  .gantt-tr-resizeZoneLeft {
559
712
  cursor: ew-resize;
560
713
  }
@@ -576,15 +729,11 @@
576
729
  height: var(--gantt-dependency-port-height, var(--gantt-task-bar-height, 28px));
577
730
  padding: 0;
578
731
  border: 0;
579
- border-radius: 8px;
580
732
  background: transparent;
581
733
  transform: translateY(-50%);
582
734
  cursor: crosshair;
583
735
  opacity: 0;
584
- transition:
585
- opacity 140ms ease,
586
- background-color 140ms ease,
587
- transform 140ms ease;
736
+ transition: opacity 150ms ease;
588
737
  }
589
738
  .gantt-tr-row:hover .gantt-tr-dependencyPort,
590
739
  .gantt-tr-dependencyPort:focus-visible,
@@ -597,33 +746,28 @@
597
746
  top: 50%;
598
747
  width: 8px;
599
748
  height: 8px;
600
- border: 2px solid var(--gantt-dependency-port-color, #7c3aed);
601
749
  border-radius: 50%;
602
- background: var(--gantt-cell-background, #fff);
603
- transform: translateY(-50%) scale(.75);
604
- transition: transform 140ms cubic-bezier(.2, 0, 0, 1), background-color 140ms ease;
750
+ background: var(--gantt-dependency-port-color, #7c3aed);
751
+ box-shadow: 0 0 0 2px var(--gantt-cell-background, #fff);
752
+ transform: translateY(-50%) scale(.8);
753
+ transition: transform 160ms cubic-bezier(.2, 0, 0, 1), box-shadow 160ms ease;
754
+ pointer-events: none;
605
755
  }
606
756
  .gantt-tr-dependencyPort:hover,
607
757
  .gantt-tr-dependencyPort:focus-visible {
608
- background: color-mix(in srgb, var(--gantt-dependency-port-color, #7c3aed) 12%, transparent);
609
758
  outline: none;
610
759
  }
611
760
  .gantt-tr-dependencyPort:hover::after,
612
761
  .gantt-tr-dependencyPort:focus-visible::after,
613
762
  .gantt-tr-dependencyPortDragActive::after {
614
763
  transform: translateY(-50%) scale(1);
615
- background: var(--gantt-dependency-port-color, #7c3aed);
616
- }
617
- .gantt-tr-dependencyPortLeft {
618
- }
619
- .gantt-tr-dependencyPort::after {
620
- pointer-events: none;
764
+ box-shadow: 0 0 0 2px var(--gantt-cell-background, #fff), 0 0 0 5px color-mix(in srgb, var(--gantt-dependency-port-color, #7c3aed) 24%, transparent);
621
765
  }
622
766
  .gantt-tr-dependencyPortLeft::after {
623
767
  left: 12px;
624
768
  }
625
769
  .gantt-tr-dependencyPortRight::after {
626
- left: 0;
770
+ left: 4px;
627
771
  }
628
772
  .gantt-tr-dependencyPortMilestone {
629
773
  height: var(--gantt-dependency-port-height, 14px);
@@ -633,9 +777,6 @@
633
777
  height: var(--gantt-parent-bar-height, 14px);
634
778
  transform: translateY(-50%);
635
779
  }
636
- .gantt-tr-dependencyPortDragActive {
637
- background: color-mix(in srgb, var(--gantt-dependency-port-color, #7c3aed) 10%, transparent);
638
- }
639
780
  @media (max-width: 640px), (hover: none), (pointer: coarse) {
640
781
  .gantt-tr-dependencyPort {
641
782
  display: none;
@@ -1294,6 +1435,89 @@
1294
1435
  .gantt-tl-row-child {
1295
1436
  padding-left: 0;
1296
1437
  }
1438
+ .gantt-tl-row-composite-detail {
1439
+ --gantt-tl-name-actions-bg: color-mix(in srgb, var(--gantt-tl-composite-detail-color) 9%, var(--gantt-cell-background, #fff));
1440
+ background: color-mix(in srgb, var(--gantt-tl-composite-detail-color) 9%, var(--gantt-cell-background, #fff));
1441
+ font-size: 12px;
1442
+ }
1443
+ .gantt-tl-row-composite-detail .gantt-tl-cell:not(.gantt-tl-cell-name):not(.gantt-tl-cell-number):not(.gantt-tl-cell-progress) {
1444
+ visibility: hidden;
1445
+ }
1446
+ .gantt-tl-row-composite-detail .gantt-tl-cell-name {
1447
+ color: #5b4b83;
1448
+ }
1449
+ .gantt-tl-compositeToggle {
1450
+ position: absolute;
1451
+ top: 50%;
1452
+ z-index: 3;
1453
+ display: grid;
1454
+ place-items: center;
1455
+ width: 24px;
1456
+ height: 24px;
1457
+ padding: 2px;
1458
+ transform: translateY(-50%);
1459
+ border: 0;
1460
+ border-radius: 4px;
1461
+ background: transparent;
1462
+ color: var(--gantt-text-color, #374151);
1463
+ cursor: pointer;
1464
+ }
1465
+ .gantt-tl-compositeToggle:hover {
1466
+ background: var(--gantt-control-hover-background, rgba(15, 23, 42, .08));
1467
+ }
1468
+ .gantt-tl-compositeToggle:focus-visible,
1469
+ .gantt-tl-collapse-btn:focus-visible {
1470
+ outline: 2px solid var(--gantt-focus-ring-color, #64748b);
1471
+ outline-offset: 1px;
1472
+ }
1473
+ .gantt-tl-compositeToggle svg {
1474
+ width: 13px;
1475
+ height: 13px;
1476
+ transform-origin: center;
1477
+ }
1478
+ .gantt-tl-compositeToggle .gantt-tl-compositeGlyph-composite-opening-outgoing {
1479
+ animation: gantt-tl-composite-out-open 120ms ease-in-out forwards;
1480
+ }
1481
+ .gantt-tl-compositeToggle .gantt-tl-compositeGlyph-down-opening-incoming {
1482
+ animation: gantt-tl-composite-in-open 120ms ease-in-out forwards;
1483
+ }
1484
+ .gantt-tl-compositeToggle .gantt-tl-compositeGlyph-down-closing-outgoing {
1485
+ animation: gantt-tl-composite-out-close 120ms ease-in-out forwards;
1486
+ }
1487
+ .gantt-tl-compositeToggle .gantt-tl-compositeGlyph-composite-closing-incoming {
1488
+ animation: gantt-tl-composite-in-close 120ms ease-in-out forwards;
1489
+ }
1490
+ @keyframes gantt-tl-composite-out-open {
1491
+ to {
1492
+ transform: rotate(90deg);
1493
+ }
1494
+ }
1495
+ @keyframes gantt-tl-composite-in-open {
1496
+ from {
1497
+ transform: rotate(-90deg);
1498
+ }
1499
+ to {
1500
+ transform: rotate(0deg);
1501
+ }
1502
+ }
1503
+ @keyframes gantt-tl-composite-out-close {
1504
+ to {
1505
+ transform: rotate(-90deg);
1506
+ }
1507
+ }
1508
+ @keyframes gantt-tl-composite-in-close {
1509
+ from {
1510
+ transform: rotate(90deg);
1511
+ }
1512
+ to {
1513
+ transform: rotate(0deg);
1514
+ }
1515
+ }
1516
+ @media (prefers-reduced-motion: reduce) {
1517
+ .gantt-tl-compositeToggle [class*=gantt-tl-compositeGlyph-] {
1518
+ animation-duration: 1ms;
1519
+ }
1520
+ }
1297
1521
  .gantt-tl-row-parent {
1298
1522
  font-weight: 600;
1299
1523
  --gantt-tl-name-actions-bg: inherit;
@@ -1329,8 +1553,8 @@
1329
1553
  top: 50%;
1330
1554
  transform: translateY(-50%);
1331
1555
  z-index: 2;
1332
- width: 18px;
1333
- height: 18px;
1556
+ width: 24px;
1557
+ height: 24px;
1334
1558
  border: none;
1335
1559
  background: transparent;
1336
1560
  border-radius: 4px;
@@ -1343,7 +1567,7 @@
1343
1567
  transition: background-color 0.15s ease;
1344
1568
  }
1345
1569
  .gantt-tl-collapse-btn:hover {
1346
- background-color: transparent;
1570
+ background-color: var(--gantt-control-hover-background, rgba(15, 23, 42, .08));
1347
1571
  }
1348
1572
  .gantt-tl-collapse-btn svg {
1349
1573
  transition: transform 0.15s ease;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gantt-lib",
3
- "version": "0.135.8",
3
+ "version": "0.136.0",
4
4
  "description": "React scheduling UI library for Gantt charts, resource planners, and table-matrix views",
5
5
  "license": "MIT",
6
6
  "repository": {