softui-css 1.1.0 → 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/dist/softui.css CHANGED
@@ -1719,8 +1719,8 @@ a.sui-btn-warning:visited {
1719
1719
  transform: scaleX(1);
1720
1720
  }
1721
1721
 
1722
- .sui-tab-list-underlined + .sui-tab-panel > .sui-card:only-child,
1723
- .sui-tab-list-underlined ~ .sui-tab-panel > .sui-card:only-child {
1722
+ .sui-tab-list-underlined + .sui-tab-panel > .sui-card:only-child.sui-tab-flush,
1723
+ .sui-tab-list-underlined ~ .sui-tab-panel > .sui-card:only-child.sui-tab-flush {
1724
1724
  border-top-left-radius: 0;
1725
1725
  border-top-right-radius: 0;
1726
1726
  }
@@ -8256,3 +8256,584 @@ a.sui-btn-warning:visited {
8256
8256
  pointer-events: auto;
8257
8257
  }
8258
8258
  }
8259
+
8260
+ /* ===========================================
8261
+ Timeline
8262
+ =========================================== */
8263
+ .sui-timeline {
8264
+ display: flex;
8265
+ flex-direction: column;
8266
+ padding: 8px 0;
8267
+ position: relative;
8268
+ }
8269
+
8270
+ .sui-timeline-item {
8271
+ display: flex;
8272
+ align-items: flex-start;
8273
+ position: relative;
8274
+ min-height: 70px;
8275
+ }
8276
+
8277
+ .sui-timeline-item:last-child .sui-timeline-connector {
8278
+ display: none;
8279
+ }
8280
+
8281
+ /* --- Separator (dot + connector column) --- */
8282
+ .sui-timeline-separator {
8283
+ display: flex;
8284
+ flex-direction: column;
8285
+ align-items: center;
8286
+ align-self: stretch;
8287
+ flex-shrink: 0;
8288
+ margin-right: 20px;
8289
+ }
8290
+
8291
+ /* --- Dot --- */
8292
+ .sui-timeline-dot {
8293
+ width: 14px;
8294
+ height: 14px;
8295
+ border-radius: 50%;
8296
+ background: var(--sui-bg-dark);
8297
+ box-shadow: var(--sui-shadow-raised-sm);
8298
+ flex-shrink: 0;
8299
+ position: relative;
8300
+ z-index: 1;
8301
+ transition: var(--sui-transition);
8302
+ }
8303
+
8304
+ /* Inset dot */
8305
+ .sui-timeline-dot-inset {
8306
+ background: var(--sui-bg);
8307
+ box-shadow: var(--sui-shadow-inset-sm);
8308
+ }
8309
+
8310
+ .sui-timeline-dot-inset.sui-timeline-dot-primary { background: rgba(91, 84, 224, 0.15); box-shadow: var(--sui-shadow-inset-sm); }
8311
+ .sui-timeline-dot-inset.sui-timeline-dot-success { background: rgba(45, 206, 137, 0.15); box-shadow: var(--sui-shadow-inset-sm); }
8312
+ .sui-timeline-dot-inset.sui-timeline-dot-danger { background: rgba(231, 76, 111, 0.15); box-shadow: var(--sui-shadow-inset-sm); }
8313
+ .sui-timeline-dot-inset.sui-timeline-dot-warning { background: rgba(245, 166, 35, 0.15); box-shadow: var(--sui-shadow-inset-sm); }
8314
+ .sui-timeline-dot-inset.sui-timeline-dot-info { background: rgba(54, 163, 247, 0.15); box-shadow: var(--sui-shadow-inset-sm); }
8315
+
8316
+ /* --- Connector --- */
8317
+ .sui-timeline-connector {
8318
+ width: 2px;
8319
+ flex: 1;
8320
+ min-height: 24px;
8321
+ background: var(--sui-bg-dark);
8322
+ box-shadow: var(--sui-shadow-inset-sm);
8323
+ border-radius: 1px;
8324
+ margin: 4px 0;
8325
+ }
8326
+
8327
+ /* --- Content --- */
8328
+ .sui-timeline-content {
8329
+ flex: 1;
8330
+ padding-bottom: 24px;
8331
+ min-width: 0;
8332
+ }
8333
+
8334
+ .sui-timeline-content h6 {
8335
+ font-size: 14px;
8336
+ font-weight: 600;
8337
+ color: var(--sui-text);
8338
+ margin: -2px 0 4px;
8339
+ line-height: 1.3;
8340
+ }
8341
+
8342
+ .sui-timeline-content p {
8343
+ font-size: 13px;
8344
+ color: var(--sui-text-muted);
8345
+ margin: 0;
8346
+ line-height: 1.5;
8347
+ }
8348
+
8349
+ /* --- Opposite content --- */
8350
+ .sui-timeline-opposite {
8351
+ flex: 1;
8352
+ text-align: right;
8353
+ padding-right: 20px;
8354
+ padding-bottom: 24px;
8355
+ font-size: 13px;
8356
+ color: var(--sui-text-muted);
8357
+ min-width: 0;
8358
+ }
8359
+
8360
+ /* ===========================================
8361
+ Timeline — Right Aligned
8362
+ =========================================== */
8363
+ .sui-timeline-right .sui-timeline-item {
8364
+ flex-direction: row-reverse;
8365
+ }
8366
+
8367
+ .sui-timeline-right .sui-timeline-separator {
8368
+ margin-right: 0;
8369
+ margin-left: 20px;
8370
+ }
8371
+
8372
+ .sui-timeline-right .sui-timeline-content {
8373
+ text-align: right;
8374
+ }
8375
+
8376
+ /* ===========================================
8377
+ Timeline — Alternating
8378
+ =========================================== */
8379
+ .sui-timeline-alternate .sui-timeline-separator {
8380
+ margin: 0 20px;
8381
+ }
8382
+
8383
+ .sui-timeline-alternate .sui-timeline-content {
8384
+ flex: 1;
8385
+ min-width: 0;
8386
+ }
8387
+
8388
+ .sui-timeline-alternate .sui-timeline-opposite {
8389
+ flex: 1;
8390
+ min-width: 0;
8391
+ padding-right: 0;
8392
+ }
8393
+
8394
+ /* Odd items: opposite left, content right */
8395
+ .sui-timeline-alternate .sui-timeline-item .sui-timeline-opposite {
8396
+ text-align: right;
8397
+ }
8398
+
8399
+ .sui-timeline-alternate .sui-timeline-item .sui-timeline-content {
8400
+ text-align: left;
8401
+ }
8402
+
8403
+ /* Even items: flip to content on left */
8404
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) {
8405
+ flex-direction: row-reverse;
8406
+ }
8407
+
8408
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) .sui-timeline-opposite {
8409
+ text-align: left;
8410
+ }
8411
+
8412
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) .sui-timeline-content {
8413
+ text-align: right;
8414
+ }
8415
+
8416
+ /* When no opposite div exists, use pseudo spacer */
8417
+ .sui-timeline-alternate .sui-timeline-item::before {
8418
+ content: '';
8419
+ flex: 1;
8420
+ }
8421
+
8422
+ .sui-timeline-alternate .sui-timeline-item:has(.sui-timeline-opposite)::before {
8423
+ display: none;
8424
+ }
8425
+
8426
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even):not(:has(.sui-timeline-opposite)) .sui-timeline-content {
8427
+ text-align: right;
8428
+ }
8429
+
8430
+ /* ===========================================
8431
+ Timeline — Colored Dots
8432
+ =========================================== */
8433
+ .sui-timeline-dot-primary {
8434
+ background: var(--sui-primary);
8435
+ box-shadow: 3px 3px 8px rgba(91, 84, 224, 0.4), -3px -3px 8px var(--sui-shadow-light);
8436
+ }
8437
+
8438
+ .sui-timeline-dot-success {
8439
+ background: var(--sui-success);
8440
+ box-shadow: 3px 3px 8px rgba(45, 206, 137, 0.3), -3px -3px 8px var(--sui-shadow-light);
8441
+ }
8442
+
8443
+ .sui-timeline-dot-danger {
8444
+ background: var(--sui-danger);
8445
+ box-shadow: 3px 3px 8px rgba(231, 76, 111, 0.3), -3px -3px 8px var(--sui-shadow-light);
8446
+ }
8447
+
8448
+ .sui-timeline-dot-warning {
8449
+ background: var(--sui-warning);
8450
+ box-shadow: 3px 3px 8px rgba(245, 166, 35, 0.3), -3px -3px 8px var(--sui-shadow-light);
8451
+ }
8452
+
8453
+ .sui-timeline-dot-info {
8454
+ background: var(--sui-info);
8455
+ box-shadow: 3px 3px 8px rgba(54, 163, 247, 0.3), -3px -3px 8px var(--sui-shadow-light);
8456
+ }
8457
+
8458
+ /* ===========================================
8459
+ Timeline — Outlined Dots
8460
+ =========================================== */
8461
+ .sui-timeline-dot-outline {
8462
+ background: transparent;
8463
+ box-shadow: none;
8464
+ border: 2px solid var(--sui-bg-dark);
8465
+ }
8466
+
8467
+ .sui-timeline-dot-outline.sui-timeline-dot-primary {
8468
+ border-color: var(--sui-primary);
8469
+ background: transparent;
8470
+ box-shadow: none;
8471
+ }
8472
+
8473
+ .sui-timeline-dot-outline.sui-timeline-dot-success {
8474
+ border-color: var(--sui-success);
8475
+ background: transparent;
8476
+ box-shadow: none;
8477
+ }
8478
+
8479
+ .sui-timeline-dot-outline.sui-timeline-dot-danger {
8480
+ border-color: var(--sui-danger);
8481
+ background: transparent;
8482
+ box-shadow: none;
8483
+ }
8484
+
8485
+ .sui-timeline-dot-outline.sui-timeline-dot-warning {
8486
+ border-color: var(--sui-warning);
8487
+ background: transparent;
8488
+ box-shadow: none;
8489
+ }
8490
+
8491
+ .sui-timeline-dot-outline.sui-timeline-dot-info {
8492
+ border-color: var(--sui-info);
8493
+ background: transparent;
8494
+ box-shadow: none;
8495
+ }
8496
+
8497
+ /* ===========================================
8498
+ Timeline — Icon Dots
8499
+ =========================================== */
8500
+ .sui-timeline-dot-icon {
8501
+ width: 36px;
8502
+ height: 36px;
8503
+ display: flex;
8504
+ align-items: center;
8505
+ justify-content: center;
8506
+ background: var(--sui-bg);
8507
+ box-shadow: var(--sui-shadow-raised-sm);
8508
+ }
8509
+
8510
+ .sui-timeline-dot-icon svg {
8511
+ width: 18px;
8512
+ height: 18px;
8513
+ stroke: var(--sui-text-muted);
8514
+ fill: none;
8515
+ stroke-width: 2;
8516
+ stroke-linecap: round;
8517
+ stroke-linejoin: round;
8518
+ }
8519
+
8520
+ .sui-timeline-dot-icon.sui-timeline-dot-primary {
8521
+ background: var(--sui-primary);
8522
+ }
8523
+ .sui-timeline-dot-icon.sui-timeline-dot-primary svg { stroke: #fff; }
8524
+
8525
+ .sui-timeline-dot-icon.sui-timeline-dot-success {
8526
+ background: var(--sui-success);
8527
+ }
8528
+ .sui-timeline-dot-icon.sui-timeline-dot-success svg { stroke: #fff; }
8529
+
8530
+ .sui-timeline-dot-icon.sui-timeline-dot-danger {
8531
+ background: var(--sui-danger);
8532
+ }
8533
+ .sui-timeline-dot-icon.sui-timeline-dot-danger svg { stroke: #fff; }
8534
+
8535
+ .sui-timeline-dot-icon.sui-timeline-dot-warning {
8536
+ background: var(--sui-warning);
8537
+ }
8538
+ .sui-timeline-dot-icon.sui-timeline-dot-warning svg { stroke: #fff; }
8539
+
8540
+ .sui-timeline-dot-icon.sui-timeline-dot-info {
8541
+ background: var(--sui-info);
8542
+ }
8543
+ .sui-timeline-dot-icon.sui-timeline-dot-info svg { stroke: #fff; }
8544
+
8545
+ /* Outlined icon dots */
8546
+ .sui-timeline-dot-icon.sui-timeline-dot-outline {
8547
+ background: transparent;
8548
+ box-shadow: none;
8549
+ border: 2px solid var(--sui-bg-dark);
8550
+ }
8551
+
8552
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-primary {
8553
+ border-color: var(--sui-primary);
8554
+ background: transparent;
8555
+ box-shadow: none;
8556
+ }
8557
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-primary svg { stroke: var(--sui-primary); }
8558
+
8559
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-success {
8560
+ border-color: var(--sui-success);
8561
+ background: transparent;
8562
+ box-shadow: none;
8563
+ }
8564
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-success svg { stroke: var(--sui-success); }
8565
+
8566
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-danger {
8567
+ border-color: var(--sui-danger);
8568
+ background: transparent;
8569
+ box-shadow: none;
8570
+ }
8571
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-danger svg { stroke: var(--sui-danger); }
8572
+
8573
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-warning {
8574
+ border-color: var(--sui-warning);
8575
+ background: transparent;
8576
+ box-shadow: none;
8577
+ }
8578
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-warning svg { stroke: var(--sui-warning); }
8579
+
8580
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-info {
8581
+ border-color: var(--sui-info);
8582
+ background: transparent;
8583
+ box-shadow: none;
8584
+ }
8585
+ .sui-timeline-dot-icon.sui-timeline-dot-outline.sui-timeline-dot-info svg { stroke: var(--sui-info); }
8586
+
8587
+ /* Adjust content alignment for icon dots */
8588
+ .sui-timeline-item:has(.sui-timeline-dot-icon) .sui-timeline-content h6 {
8589
+ margin-top: 7px;
8590
+ }
8591
+ .sui-timeline-item:has(.sui-timeline-dot-icon) .sui-timeline-opposite {
8592
+ padding-top: 8px;
8593
+ }
8594
+
8595
+ /* ===========================================
8596
+ Timeline — Compact
8597
+ =========================================== */
8598
+ .sui-timeline-compact .sui-timeline-item {
8599
+ min-height: 48px;
8600
+ }
8601
+
8602
+ .sui-timeline-compact .sui-timeline-dot {
8603
+ width: 10px;
8604
+ height: 10px;
8605
+ }
8606
+
8607
+ .sui-timeline-compact .sui-timeline-dot-icon {
8608
+ width: 28px;
8609
+ height: 28px;
8610
+ }
8611
+
8612
+ .sui-timeline-compact .sui-timeline-dot-icon svg {
8613
+ width: 14px;
8614
+ height: 14px;
8615
+ }
8616
+
8617
+ .sui-timeline-compact .sui-timeline-connector {
8618
+ min-height: 16px;
8619
+ margin: 4px 0;
8620
+ }
8621
+
8622
+ .sui-timeline-compact .sui-timeline-content {
8623
+ padding-bottom: 14px;
8624
+ }
8625
+
8626
+ .sui-timeline-compact .sui-timeline-content h6 {
8627
+ font-size: 13px;
8628
+ }
8629
+
8630
+ .sui-timeline-compact .sui-timeline-content p {
8631
+ font-size: 12px;
8632
+ }
8633
+
8634
+ .sui-timeline-compact .sui-timeline-opposite {
8635
+ padding-bottom: 14px;
8636
+ font-size: 12px;
8637
+ }
8638
+
8639
+ .sui-timeline-compact .sui-timeline-separator {
8640
+ margin-right: 14px;
8641
+ }
8642
+
8643
+ /* ===========================================
8644
+ Timeline — Responsive
8645
+ =========================================== */
8646
+ @media (max-width: 600px) {
8647
+ .sui-timeline-alternate .sui-timeline-item,
8648
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) {
8649
+ flex-direction: row;
8650
+ }
8651
+
8652
+ .sui-timeline-alternate .sui-timeline-item::before {
8653
+ display: none;
8654
+ }
8655
+
8656
+ .sui-timeline-alternate .sui-timeline-separator {
8657
+ margin: 0 16px 0 0;
8658
+ }
8659
+
8660
+ .sui-timeline-alternate .sui-timeline-content,
8661
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) .sui-timeline-content {
8662
+ text-align: left;
8663
+ padding-left: 0;
8664
+ padding-right: 0;
8665
+ }
8666
+
8667
+ .sui-timeline-alternate .sui-timeline-opposite,
8668
+ .sui-timeline-alternate .sui-timeline-item:nth-child(even) .sui-timeline-opposite {
8669
+ display: none;
8670
+ }
8671
+ }
8672
+
8673
+ /* ===========================================
8674
+ Stat Card
8675
+ =========================================== */
8676
+ .sui-stat {
8677
+ display: flex;
8678
+ flex-direction: column;
8679
+ gap: 2px;
8680
+ padding: 20px;
8681
+ background: var(--sui-bg);
8682
+ border-radius: var(--sui-radius);
8683
+ box-shadow: var(--sui-shadow-raised-sm);
8684
+ transition: var(--sui-transition);
8685
+ }
8686
+
8687
+ .sui-stat:hover {
8688
+ box-shadow: var(--sui-shadow-raised-lg);
8689
+ transform: translateY(-4px);
8690
+ }
8691
+
8692
+ .sui-stat-label {
8693
+ font-size: 13px;
8694
+ font-weight: 500;
8695
+ color: var(--sui-text-muted);
8696
+ margin: 0;
8697
+ line-height: 1.3;
8698
+ }
8699
+
8700
+ .sui-stat-value {
8701
+ font-size: 28px;
8702
+ font-weight: 700;
8703
+ color: var(--sui-text);
8704
+ margin: 4px 0 2px;
8705
+ line-height: 1.2;
8706
+ }
8707
+
8708
+ .sui-stat-trend {
8709
+ display: flex;
8710
+ align-items: center;
8711
+ gap: 6px;
8712
+ font-size: 12px;
8713
+ color: var(--sui-text-muted);
8714
+ white-space: nowrap;
8715
+ }
8716
+
8717
+ .sui-stat-change {
8718
+ display: inline-flex;
8719
+ align-items: center;
8720
+ gap: 2px;
8721
+ font-weight: 600;
8722
+ font-size: 12px;
8723
+ }
8724
+
8725
+ .sui-stat-change-up { color: var(--sui-success); }
8726
+ .sui-stat-change-down { color: var(--sui-danger); }
8727
+ .sui-stat-change-flat { color: var(--sui-warning); }
8728
+
8729
+ /* --- With Icon --- */
8730
+ .sui-stat-header {
8731
+ display: flex;
8732
+ align-items: flex-start;
8733
+ justify-content: space-between;
8734
+ gap: 12px;
8735
+ }
8736
+
8737
+
8738
+ .sui-stat-icon {
8739
+ width: 40px;
8740
+ height: 40px;
8741
+ display: flex;
8742
+ align-items: center;
8743
+ justify-content: center;
8744
+ border-radius: var(--sui-radius-sm);
8745
+ background: var(--sui-bg);
8746
+ box-shadow: var(--sui-shadow-raised-sm);
8747
+ flex-shrink: 0;
8748
+ }
8749
+
8750
+ .sui-stat-icon svg {
8751
+ width: 20px;
8752
+ height: 20px;
8753
+ stroke: var(--sui-text-muted);
8754
+ fill: none;
8755
+ stroke-width: 2;
8756
+ stroke-linecap: round;
8757
+ stroke-linejoin: round;
8758
+ }
8759
+
8760
+ .sui-stat-icon-primary { background: rgba(91, 84, 224, 0.1); }
8761
+ .sui-stat-icon-primary svg { stroke: var(--sui-primary); }
8762
+
8763
+ .sui-stat-icon-success { background: rgba(45, 206, 137, 0.1); }
8764
+ .sui-stat-icon-success svg { stroke: var(--sui-success); }
8765
+
8766
+ .sui-stat-icon-danger { background: rgba(231, 76, 111, 0.1); }
8767
+ .sui-stat-icon-danger svg { stroke: var(--sui-danger); }
8768
+
8769
+ .sui-stat-icon-warning { background: rgba(245, 166, 35, 0.1); }
8770
+ .sui-stat-icon-warning svg { stroke: var(--sui-warning); }
8771
+
8772
+ .sui-stat-icon-info { background: rgba(54, 163, 247, 0.1); }
8773
+ .sui-stat-icon-info svg { stroke: var(--sui-info); }
8774
+
8775
+ /* --- With Progress --- */
8776
+ .sui-stat .sui-progress {
8777
+ margin-top: 12px;
8778
+ }
8779
+
8780
+ /* --- Bordered accent --- */
8781
+ .sui-stat-bordered {
8782
+ border-left: 3px solid var(--sui-bg-dark);
8783
+ }
8784
+
8785
+ .sui-stat-bordered-primary { border-left-color: var(--sui-primary); }
8786
+ .sui-stat-bordered-success { border-left-color: var(--sui-success); }
8787
+ .sui-stat-bordered-danger { border-left-color: var(--sui-danger); }
8788
+ .sui-stat-bordered-warning { border-left-color: var(--sui-warning); }
8789
+ .sui-stat-bordered-info { border-left-color: var(--sui-info); }
8790
+
8791
+ /* --- Inset --- */
8792
+ .sui-stat-inset {
8793
+ box-shadow: var(--sui-shadow-inset);
8794
+ }
8795
+
8796
+ .sui-stat-inset:hover {
8797
+ box-shadow: var(--sui-shadow-inset), var(--sui-shadow-raised-lg);
8798
+ transform: translateY(-4px);
8799
+ }
8800
+
8801
+ /* --- Flat --- */
8802
+ .sui-stat-flat {
8803
+ box-shadow: none;
8804
+ border: 1px solid var(--sui-bg-dark);
8805
+ }
8806
+
8807
+ .sui-stat-flat:hover {
8808
+ box-shadow: var(--sui-shadow-raised-lg);
8809
+ transform: translateY(-4px);
8810
+ }
8811
+
8812
+ /* --- Compact --- */
8813
+ .sui-stat-compact {
8814
+ padding: 14px 16px;
8815
+ gap: 0;
8816
+ }
8817
+
8818
+ .sui-stat-compact .sui-stat-value {
8819
+ font-size: 22px;
8820
+ margin: 2px 0;
8821
+ }
8822
+
8823
+ .sui-stat-compact .sui-stat-label {
8824
+ font-size: 12px;
8825
+ }
8826
+
8827
+ .sui-stat-compact .sui-stat-icon {
8828
+ width: 34px;
8829
+ height: 34px;
8830
+ }
8831
+
8832
+ .sui-stat-compact .sui-stat-icon svg {
8833
+ width: 16px;
8834
+ height: 16px;
8835
+ }
8836
+
8837
+ .sui-stat-compact .sui-progress {
8838
+ margin-top: 8px;
8839
+ }