@morscherlab/mint-sdk 1.0.51 → 1.0.53

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 (43) hide show
  1. package/dist/__tests__/components/JobsStatusTray.test.d.ts +1 -0
  2. package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +1 -0
  3. package/dist/__tests__/utils/jobs.test.d.ts +1 -0
  4. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +1 -1
  5. package/dist/components/JobsStatusTray.vue.d.ts +26 -0
  6. package/dist/components/index.d.ts +1 -0
  7. package/dist/components/index.js +2 -2
  8. package/dist/{components-C7UFkNIp.js → components-Lk_h_rON.js} +1663 -1339
  9. package/dist/components-Lk_h_rON.js.map +1 -0
  10. package/dist/composables/index.d.ts +1 -0
  11. package/dist/composables/index.js +3 -3
  12. package/dist/composables/useJobsStatusTray.d.ts +43 -0
  13. package/dist/composables/usePluginClient.d.ts +4 -1
  14. package/dist/{composables-CpBhNKHf.js → composables-DyfGpYZw.js} +50 -17
  15. package/dist/{composables-CpBhNKHf.js.map → composables-DyfGpYZw.js.map} +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +4 -4
  18. package/dist/install.js +1 -1
  19. package/dist/jobs.d.ts +19 -0
  20. package/dist/styles.css +731 -0
  21. package/dist/types/index.d.ts +1 -0
  22. package/dist/types/jobs.d.ts +49 -0
  23. package/dist/{useProtocolTemplates-C8-YlHj1.js → useJobsStatusTray-DAH999_N.js} +250 -2
  24. package/dist/useJobsStatusTray-DAH999_N.js.map +1 -0
  25. package/package.json +1 -1
  26. package/src/__tests__/components/JobsStatusTray.test.ts +141 -0
  27. package/src/__tests__/composables/useJobsStatusTray.test.ts +241 -0
  28. package/src/__tests__/composables/usePluginClient.test.ts +291 -0
  29. package/src/__tests__/utils/jobs.test.ts +95 -0
  30. package/src/components/JobsStatusTray.story.vue +120 -0
  31. package/src/components/JobsStatusTray.vue +385 -0
  32. package/src/components/index.ts +1 -0
  33. package/src/composables/index.ts +8 -0
  34. package/src/composables/useJobsStatusTray.ts +304 -0
  35. package/src/composables/usePluginClient.ts +65 -15
  36. package/src/index.ts +3 -0
  37. package/src/jobs.ts +75 -0
  38. package/src/styles/components/jobs-status-tray.css +420 -0
  39. package/src/styles/index.css +1 -0
  40. package/src/types/index.ts +10 -0
  41. package/src/types/jobs.ts +61 -0
  42. package/dist/components-C7UFkNIp.js.map +0 -1
  43. package/dist/useProtocolTemplates-C8-YlHj1.js.map +0 -1
package/dist/styles.css CHANGED
@@ -18524,6 +18524,371 @@ to { transform: rotate(360deg);
18524
18524
  background-color: var(--bg-hover);
18525
18525
  color: var(--text-primary);
18526
18526
  }
18527
+ .mint-jobs-tray {
18528
+ position: fixed;
18529
+ right: max(1.25rem, env(safe-area-inset-right));
18530
+ bottom: max(1.25rem, env(safe-area-inset-bottom));
18531
+ z-index: 1000;
18532
+ color: var(--text-primary);
18533
+ font-family: 'Fira Sans', system-ui, sans-serif;
18534
+ }
18535
+ .mint-jobs-tray__trigger {
18536
+ display: inline-flex;
18537
+ min-height: 2.75rem;
18538
+ align-items: center;
18539
+ gap: 0.625rem;
18540
+ padding: 0.5rem 1rem;
18541
+ border: 0;
18542
+ border-radius: 9999px;
18543
+ background: var(--color-primary);
18544
+ color: white;
18545
+ box-shadow: var(--shadow-lg);
18546
+ cursor: pointer;
18547
+ transition: transform var(--mint-transition), background var(--mint-transition), box-shadow var(--mint-transition);
18548
+ }
18549
+ .mint-jobs-tray__trigger:hover {
18550
+ transform: translateY(-1px);
18551
+ background: var(--color-primary-hover);
18552
+ }
18553
+ .mint-jobs-tray__trigger:focus-visible,
18554
+ .mint-jobs-tray__panel:focus-visible,
18555
+ .mint-jobs-tray button:focus-visible {
18556
+ outline: none;
18557
+ box-shadow: var(--focus-ring-offset);
18558
+ }
18559
+ .mint-jobs-tray__trigger-icon {
18560
+ width: 1.125rem;
18561
+ height: 1.125rem;
18562
+ stroke-width: 1.8;
18563
+ stroke-linecap: round;
18564
+ stroke-linejoin: round;
18565
+ }
18566
+ .mint-jobs-tray__trigger-icon--active {
18567
+ animation: mint-jobs-tray-pulse 1.8s ease-in-out infinite;
18568
+ }
18569
+ .mint-jobs-tray__trigger-label {
18570
+ font-size: 0.875rem;
18571
+ font-weight: 600;
18572
+ }
18573
+ .mint-jobs-tray__count,
18574
+ .mint-jobs-tray__tab-count {
18575
+ display: inline-flex;
18576
+ min-width: 1.25rem;
18577
+ height: 1.25rem;
18578
+ align-items: center;
18579
+ justify-content: center;
18580
+ padding: 0 0.375rem;
18581
+ border-radius: 9999px;
18582
+ font: 600 0.6875rem/1 'Fira Code', monospace;
18583
+ }
18584
+ .mint-jobs-tray__count {
18585
+ background: var(--bg-secondary);
18586
+ color: var(--color-primary);
18587
+ }
18588
+ .mint-jobs-tray__backdrop {
18589
+ position: fixed;
18590
+ inset: 0;
18591
+ z-index: -2;
18592
+ background: rgb(15 23 42 / 0.22);
18593
+ backdrop-filter: blur(2px);
18594
+ }
18595
+ .mint-jobs-tray__panel {
18596
+ position: absolute;
18597
+ right: 0;
18598
+ bottom: 3.75rem;
18599
+ display: flex;
18600
+ width: min(27.5rem, calc(100vw - 2rem));
18601
+ max-height: min(42rem, calc(100vh - 7rem));
18602
+ flex-direction: column;
18603
+ overflow: hidden;
18604
+ border: 1px solid var(--border-color);
18605
+ border-radius: var(--radius-lg);
18606
+ background: var(--bg-secondary);
18607
+ box-shadow: var(--shadow-lg);
18608
+ }
18609
+ .mint-jobs-tray__header,
18610
+ .mint-jobs-tray__job-heading,
18611
+ .mint-jobs-tray__job-footer,
18612
+ .mint-jobs-tray__header-actions,
18613
+ .mint-jobs-tray__clear-row {
18614
+ display: flex;
18615
+ align-items: center;
18616
+ }
18617
+ .mint-jobs-tray__header {
18618
+ justify-content: space-between;
18619
+ padding: 1rem 1.125rem;
18620
+ border-bottom: 1px solid var(--border-color);
18621
+ }
18622
+ .mint-jobs-tray__title {
18623
+ margin: 0;
18624
+ color: var(--text-primary);
18625
+ font-size: 1rem;
18626
+ font-weight: 600;
18627
+ }
18628
+ .mint-jobs-tray__subtitle {
18629
+ margin: 0.2rem 0 0;
18630
+ color: var(--text-secondary);
18631
+ font: 0.6875rem/1.3 'Fira Code', monospace;
18632
+ }
18633
+ .mint-jobs-tray__header-actions {
18634
+ gap: 0.25rem;
18635
+ }
18636
+ .mint-jobs-tray__icon-button {
18637
+ display: inline-flex;
18638
+ width: 2rem;
18639
+ height: 2rem;
18640
+ align-items: center;
18641
+ justify-content: center;
18642
+ padding: 0;
18643
+ border: 0;
18644
+ border-radius: var(--radius-md);
18645
+ background: transparent;
18646
+ color: var(--text-secondary-strong);
18647
+ cursor: pointer;
18648
+ transition: background var(--mint-transition), color var(--mint-transition);
18649
+ }
18650
+ .mint-jobs-tray__icon-button:hover {
18651
+ background: var(--bg-hover);
18652
+ color: var(--text-primary);
18653
+ }
18654
+ .mint-jobs-tray__icon-button svg {
18655
+ width: 1rem;
18656
+ height: 1rem;
18657
+ stroke-width: 1.8;
18658
+ stroke-linecap: round;
18659
+ stroke-linejoin: round;
18660
+ }
18661
+ .mint-jobs-tray__icon-button--danger {
18662
+ color: var(--mint-error);
18663
+ }
18664
+ .mint-jobs-tray__tabs {
18665
+ display: grid;
18666
+ grid-template-columns: 1fr 1fr;
18667
+ border-bottom: 1px solid var(--border-color);
18668
+ }
18669
+ .mint-jobs-tray__tab {
18670
+ position: relative;
18671
+ display: inline-flex;
18672
+ min-height: 2.75rem;
18673
+ align-items: center;
18674
+ justify-content: center;
18675
+ gap: 0.375rem;
18676
+ padding: 0.5rem 1rem;
18677
+ border: 0;
18678
+ background: transparent;
18679
+ color: var(--text-secondary-strong);
18680
+ font: 500 0.8125rem/1 'Fira Sans', sans-serif;
18681
+ cursor: pointer;
18682
+ }
18683
+ .mint-jobs-tray__tab--active {
18684
+ color: var(--color-primary);
18685
+ }
18686
+ .mint-jobs-tray__tab--active::after {
18687
+ position: absolute;
18688
+ right: 1rem;
18689
+ bottom: 0;
18690
+ left: 1rem;
18691
+ height: 2px;
18692
+ background: var(--color-primary);
18693
+ content: '';
18694
+ }
18695
+ .mint-jobs-tray__tab-count {
18696
+ background: var(--bg-tertiary);
18697
+ color: currentColor;
18698
+ }
18699
+ .mint-jobs-tray__error {
18700
+ margin: 0.75rem 1rem 0;
18701
+ padding: 0.625rem 0.75rem;
18702
+ border: 1px solid var(--mint-error-border);
18703
+ border-radius: var(--radius-md);
18704
+ background: var(--mint-error-bg);
18705
+ color: var(--mint-error);
18706
+ font-size: 0.75rem;
18707
+ }
18708
+ .mint-jobs-tray__body {
18709
+ flex: 1;
18710
+ overflow-y: auto;
18711
+ padding: 0.875rem;
18712
+ scrollbar-color: var(--scrollbar-thumb) transparent;
18713
+ }
18714
+ .mint-jobs-tray__empty {
18715
+ margin: 0;
18716
+ padding: 3rem 1rem;
18717
+ color: var(--text-secondary);
18718
+ text-align: center;
18719
+ font-size: 0.8125rem;
18720
+ }
18721
+ .mint-jobs-tray__job {
18722
+ padding: 0.875rem;
18723
+ border: 1px solid var(--border-color);
18724
+ border-radius: var(--radius-md);
18725
+ background: var(--bg-card);
18726
+ box-shadow: var(--shadow-sm);
18727
+ }
18728
+ .mint-jobs-tray__job + .mint-jobs-tray__job {
18729
+ margin-top: 0.625rem;
18730
+ }
18731
+ .mint-jobs-tray__job--active {
18732
+ border-color: var(--mint-info-border);
18733
+ background: linear-gradient(135deg, var(--bg-card), var(--mint-info-bg));
18734
+ }
18735
+ .mint-jobs-tray__job-heading,
18736
+ .mint-jobs-tray__job-footer {
18737
+ justify-content: space-between;
18738
+ gap: 0.75rem;
18739
+ }
18740
+ .mint-jobs-tray__job-identity {
18741
+ min-width: 0;
18742
+ }
18743
+ .mint-jobs-tray__job-select {
18744
+ display: block;
18745
+ max-width: 100%;
18746
+ padding: 0;
18747
+ overflow: hidden;
18748
+ border: 0;
18749
+ background: transparent;
18750
+ color: var(--text-primary);
18751
+ cursor: pointer;
18752
+ font-size: 0.8125rem;
18753
+ font-weight: 600;
18754
+ text-align: left;
18755
+ text-overflow: ellipsis;
18756
+ white-space: nowrap;
18757
+ }
18758
+ .mint-jobs-tray__kind {
18759
+ display: block;
18760
+ margin-top: 0.125rem;
18761
+ color: var(--text-secondary);
18762
+ font: 0.6875rem/1.3 'Fira Code', monospace;
18763
+ }
18764
+ .mint-jobs-tray__status {
18765
+ flex: 0 0 auto;
18766
+ padding: 0.25rem 0.5rem;
18767
+ border: 1px solid var(--border-color);
18768
+ border-radius: 9999px;
18769
+ background: var(--bg-tertiary);
18770
+ color: var(--text-secondary-strong);
18771
+ font-size: 0.6875rem;
18772
+ font-weight: 600;
18773
+ }
18774
+ .mint-jobs-tray__status--awaiting-input,
18775
+ .mint-jobs-tray__status--queued {
18776
+ border-color: var(--mint-warning-border);
18777
+ background: var(--mint-warning-bg);
18778
+ color: var(--mint-warning-hover);
18779
+ }
18780
+ .mint-jobs-tray__status--running {
18781
+ border-color: var(--mint-info-border);
18782
+ background: var(--mint-info-bg);
18783
+ color: var(--mint-info);
18784
+ }
18785
+ .mint-jobs-tray__status--completed {
18786
+ border-color: var(--mint-success-border);
18787
+ background: var(--mint-success-bg);
18788
+ color: var(--mint-success-hover);
18789
+ }
18790
+ .mint-jobs-tray__status--failed {
18791
+ border-color: var(--mint-error-border);
18792
+ background: var(--mint-error-bg);
18793
+ color: var(--mint-error);
18794
+ }
18795
+ .mint-jobs-tray__progress {
18796
+ height: 0.375rem;
18797
+ margin-top: 0.75rem;
18798
+ overflow: hidden;
18799
+ border-radius: 9999px;
18800
+ background: var(--bg-tertiary);
18801
+ }
18802
+ .mint-jobs-tray__progress span {
18803
+ display: block;
18804
+ height: 100%;
18805
+ border-radius: inherit;
18806
+ background: var(--color-primary);
18807
+ transition: width var(--mint-transition);
18808
+ }
18809
+ .mint-jobs-tray__job-footer {
18810
+ min-height: 1.75rem;
18811
+ margin-top: 0.625rem;
18812
+ color: var(--text-secondary);
18813
+ font-size: 0.6875rem;
18814
+ }
18815
+ .mint-jobs-tray__action {
18816
+ min-height: 1.75rem;
18817
+ padding: 0.375rem 0.625rem;
18818
+ border: 1px solid var(--border-color);
18819
+ border-radius: var(--radius);
18820
+ background: var(--bg-secondary);
18821
+ color: var(--text-secondary-strong);
18822
+ font: 500 0.6875rem/1 'Fira Sans', sans-serif;
18823
+ cursor: pointer;
18824
+ transition: background var(--mint-transition), border-color var(--mint-transition), color var(--mint-transition);
18825
+ }
18826
+ .mint-jobs-tray__job-actions {
18827
+ display: inline-flex;
18828
+ align-items: center;
18829
+ gap: 0.25rem;
18830
+ }
18831
+ .mint-jobs-tray__action--danger {
18832
+ border-color: var(--mint-error-border);
18833
+ color: var(--mint-error);
18834
+ }
18835
+ .mint-jobs-tray__action--danger:hover {
18836
+ background: var(--mint-error-bg);
18837
+ }
18838
+ .mint-jobs-tray__clear-row {
18839
+ justify-content: flex-end;
18840
+ margin-bottom: 0.625rem;
18841
+ }
18842
+ .mint-jobs-tray button:disabled {
18843
+ opacity: var(--mint-disabled-opacity);
18844
+ cursor: not-allowed;
18845
+ }
18846
+ .mint-jobs-tray-fade-enter-active,
18847
+ .mint-jobs-tray-fade-leave-active,
18848
+ .mint-jobs-tray-slide-enter-active,
18849
+ .mint-jobs-tray-slide-leave-active {
18850
+ transition: opacity var(--mint-transition), transform var(--mint-transition);
18851
+ }
18852
+ .mint-jobs-tray-fade-enter-from,
18853
+ .mint-jobs-tray-fade-leave-to {
18854
+ opacity: 0;
18855
+ }
18856
+ .mint-jobs-tray-slide-enter-from,
18857
+ .mint-jobs-tray-slide-leave-to {
18858
+ opacity: 0;
18859
+ transform: translateY(0.5rem) scale(0.98);
18860
+ }
18861
+ @keyframes mint-jobs-tray-pulse {
18862
+ 50% { opacity: 0.55;
18863
+ }
18864
+ }
18865
+ @media (max-width: 480px) {
18866
+ .mint-jobs-tray {
18867
+ right: max(1rem, env(safe-area-inset-right));
18868
+ bottom: max(1rem, env(safe-area-inset-bottom));
18869
+ }
18870
+ .mint-jobs-tray__panel {
18871
+ position: fixed;
18872
+ right: 1rem;
18873
+ bottom: 4.75rem;
18874
+ left: 1rem;
18875
+ width: auto;
18876
+ max-height: calc(100vh - 6.75rem - env(safe-area-inset-bottom));
18877
+ }
18878
+ }
18879
+ @media (prefers-reduced-motion: reduce) {
18880
+ .mint-jobs-tray *,
18881
+ .mint-jobs-tray *::before,
18882
+ .mint-jobs-tray *::after {
18883
+ scroll-behavior: auto !important;
18884
+ animation-duration: 0.01ms !important;
18885
+ animation-iteration-count: 1 !important;
18886
+ transition-duration: 0.01ms !important;
18887
+ }
18888
+ .mint-jobs-tray__trigger:hover {
18889
+ transform: none;
18890
+ }
18891
+ }
18527
18892
  .mint-data-viewer {
18528
18893
  border: 1px solid var(--border-color);
18529
18894
  border-radius: var(--radius-md);
@@ -23208,6 +23573,372 @@ code, pre {
23208
23573
  transition: none;
23209
23574
  }
23210
23575
  }
23576
+ .mint-jobs-tray {
23577
+ position: fixed;
23578
+ right: max(1.25rem, env(safe-area-inset-right));
23579
+ bottom: max(1.25rem, env(safe-area-inset-bottom));
23580
+ z-index: 1000;
23581
+ color: var(--text-primary);
23582
+ font-family: 'Fira Sans', system-ui, sans-serif;
23583
+ }
23584
+ .mint-jobs-tray__trigger {
23585
+ display: inline-flex;
23586
+ min-height: 2.75rem;
23587
+ align-items: center;
23588
+ gap: 0.625rem;
23589
+ padding: 0.5rem 1rem;
23590
+ border: 0;
23591
+ border-radius: 9999px;
23592
+ background: var(--color-primary);
23593
+ color: white;
23594
+ box-shadow: var(--shadow-lg);
23595
+ cursor: pointer;
23596
+ transition: transform var(--mint-transition), background var(--mint-transition), box-shadow var(--mint-transition);
23597
+ }
23598
+ .mint-jobs-tray__trigger:hover {
23599
+ transform: translateY(-1px);
23600
+ background: var(--color-primary-hover);
23601
+ }
23602
+ .mint-jobs-tray__trigger:focus-visible,
23603
+ .mint-jobs-tray__panel:focus-visible,
23604
+ .mint-jobs-tray button:focus-visible {
23605
+ outline: none;
23606
+ box-shadow: var(--focus-ring-offset);
23607
+ }
23608
+ .mint-jobs-tray__trigger-icon {
23609
+ width: 1.125rem;
23610
+ height: 1.125rem;
23611
+ stroke-width: 1.8;
23612
+ stroke-linecap: round;
23613
+ stroke-linejoin: round;
23614
+ }
23615
+ .mint-jobs-tray__trigger-icon--active {
23616
+ animation: mint-jobs-tray-pulse 1.8s ease-in-out infinite;
23617
+ }
23618
+ .mint-jobs-tray__trigger-label {
23619
+ font-size: 0.875rem;
23620
+ font-weight: 600;
23621
+ }
23622
+ .mint-jobs-tray__count,
23623
+ .mint-jobs-tray__tab-count {
23624
+ display: inline-flex;
23625
+ min-width: 1.25rem;
23626
+ height: 1.25rem;
23627
+ align-items: center;
23628
+ justify-content: center;
23629
+ padding: 0 0.375rem;
23630
+ border-radius: 9999px;
23631
+ font: 600 0.6875rem/1 'Fira Code', monospace;
23632
+ }
23633
+ .mint-jobs-tray__count {
23634
+ background: var(--bg-secondary);
23635
+ color: var(--color-primary);
23636
+ }
23637
+ .mint-jobs-tray__backdrop {
23638
+ position: fixed;
23639
+ inset: 0;
23640
+ z-index: -2;
23641
+ background: rgb(15 23 42 / 0.22);
23642
+ backdrop-filter: blur(2px);
23643
+ }
23644
+ .mint-jobs-tray__panel {
23645
+ position: absolute;
23646
+ right: 0;
23647
+ bottom: 3.75rem;
23648
+ display: flex;
23649
+ width: min(27.5rem, calc(100vw - 2rem));
23650
+ max-height: min(42rem, calc(100vh - 7rem));
23651
+ flex-direction: column;
23652
+ overflow: hidden;
23653
+ border: 1px solid var(--border-color);
23654
+ border-radius: var(--radius-lg);
23655
+ background: var(--bg-secondary);
23656
+ box-shadow: var(--shadow-lg);
23657
+ }
23658
+ .mint-jobs-tray__header,
23659
+ .mint-jobs-tray__job-heading,
23660
+ .mint-jobs-tray__job-footer,
23661
+ .mint-jobs-tray__header-actions,
23662
+ .mint-jobs-tray__clear-row {
23663
+ display: flex;
23664
+ align-items: center;
23665
+ }
23666
+ .mint-jobs-tray__header {
23667
+ justify-content: space-between;
23668
+ padding: 1rem 1.125rem;
23669
+ border-bottom: 1px solid var(--border-color);
23670
+ }
23671
+ .mint-jobs-tray__title {
23672
+ margin: 0;
23673
+ color: var(--text-primary);
23674
+ font-size: 1rem;
23675
+ font-weight: 600;
23676
+ }
23677
+ .mint-jobs-tray__subtitle {
23678
+ margin: 0.2rem 0 0;
23679
+ color: var(--text-secondary);
23680
+ font: 0.6875rem/1.3 'Fira Code', monospace;
23681
+ }
23682
+ .mint-jobs-tray__header-actions {
23683
+ gap: 0.25rem;
23684
+ }
23685
+ .mint-jobs-tray__icon-button {
23686
+ display: inline-flex;
23687
+ width: 2rem;
23688
+ height: 2rem;
23689
+ align-items: center;
23690
+ justify-content: center;
23691
+ padding: 0;
23692
+ border: 0;
23693
+ border-radius: var(--radius-md);
23694
+ background: transparent;
23695
+ color: var(--text-secondary-strong);
23696
+ cursor: pointer;
23697
+ transition: background var(--mint-transition), color var(--mint-transition);
23698
+ }
23699
+ .mint-jobs-tray__icon-button:hover {
23700
+ background: var(--bg-hover);
23701
+ color: var(--text-primary);
23702
+ }
23703
+ .mint-jobs-tray__icon-button svg {
23704
+ width: 1rem;
23705
+ height: 1rem;
23706
+ stroke-width: 1.8;
23707
+ stroke-linecap: round;
23708
+ stroke-linejoin: round;
23709
+ }
23710
+ .mint-jobs-tray__icon-button--danger {
23711
+ color: var(--mint-error);
23712
+ }
23713
+ .mint-jobs-tray__tabs {
23714
+ display: grid;
23715
+ grid-template-columns: 1fr 1fr;
23716
+ border-bottom: 1px solid var(--border-color);
23717
+ }
23718
+ .mint-jobs-tray__tab {
23719
+ position: relative;
23720
+ display: inline-flex;
23721
+ min-height: 2.75rem;
23722
+ align-items: center;
23723
+ justify-content: center;
23724
+ gap: 0.375rem;
23725
+ padding: 0.5rem 1rem;
23726
+ border: 0;
23727
+ background: transparent;
23728
+ color: var(--text-secondary-strong);
23729
+ font: 500 0.8125rem/1 'Fira Sans', sans-serif;
23730
+ cursor: pointer;
23731
+ }
23732
+ .mint-jobs-tray__tab--active {
23733
+ color: var(--color-primary);
23734
+ }
23735
+ .mint-jobs-tray__tab--active::after {
23736
+ position: absolute;
23737
+ right: 1rem;
23738
+ bottom: 0;
23739
+ left: 1rem;
23740
+ height: 2px;
23741
+ background: var(--color-primary);
23742
+ content: '';
23743
+ }
23744
+ .mint-jobs-tray__tab-count {
23745
+ background: var(--bg-tertiary);
23746
+ color: currentColor;
23747
+ }
23748
+ .mint-jobs-tray__error {
23749
+ margin: 0.75rem 1rem 0;
23750
+ padding: 0.625rem 0.75rem;
23751
+ border: 1px solid var(--mint-error-border);
23752
+ border-radius: var(--radius-md);
23753
+ background: var(--mint-error-bg);
23754
+ color: var(--mint-error);
23755
+ font-size: 0.75rem;
23756
+ }
23757
+ .mint-jobs-tray__body {
23758
+ flex: 1;
23759
+ overflow-y: auto;
23760
+ padding: 0.875rem;
23761
+ scrollbar-color: var(--scrollbar-thumb) transparent;
23762
+ }
23763
+ .mint-jobs-tray__empty {
23764
+ margin: 0;
23765
+ padding: 3rem 1rem;
23766
+ color: var(--text-secondary);
23767
+ text-align: center;
23768
+ font-size: 0.8125rem;
23769
+ }
23770
+ .mint-jobs-tray__job {
23771
+ padding: 0.875rem;
23772
+ border: 1px solid var(--border-color);
23773
+ border-radius: var(--radius-md);
23774
+ background: var(--bg-card);
23775
+ box-shadow: var(--shadow-sm);
23776
+ }
23777
+ .mint-jobs-tray__job + .mint-jobs-tray__job {
23778
+ margin-top: 0.625rem;
23779
+ }
23780
+ .mint-jobs-tray__job--active {
23781
+ border-color: var(--mint-info-border);
23782
+ background: linear-gradient(135deg, var(--bg-card), var(--mint-info-bg));
23783
+ }
23784
+ .mint-jobs-tray__job-heading,
23785
+ .mint-jobs-tray__job-footer {
23786
+ justify-content: space-between;
23787
+ gap: 0.75rem;
23788
+ }
23789
+ .mint-jobs-tray__job-identity {
23790
+ min-width: 0;
23791
+ }
23792
+ .mint-jobs-tray__job-select {
23793
+ display: block;
23794
+ max-width: 100%;
23795
+ padding: 0;
23796
+ overflow: hidden;
23797
+ border: 0;
23798
+ background: transparent;
23799
+ color: var(--text-primary);
23800
+ cursor: pointer;
23801
+ font-size: 0.8125rem;
23802
+ font-weight: 600;
23803
+ text-align: left;
23804
+ text-overflow: ellipsis;
23805
+ white-space: nowrap;
23806
+ }
23807
+ .mint-jobs-tray__kind {
23808
+ display: block;
23809
+ margin-top: 0.125rem;
23810
+ color: var(--text-secondary);
23811
+ font: 0.6875rem/1.3 'Fira Code', monospace;
23812
+ }
23813
+ .mint-jobs-tray__status {
23814
+ flex: 0 0 auto;
23815
+ padding: 0.25rem 0.5rem;
23816
+ border: 1px solid var(--border-color);
23817
+ border-radius: 9999px;
23818
+ background: var(--bg-tertiary);
23819
+ color: var(--text-secondary-strong);
23820
+ font-size: 0.6875rem;
23821
+ font-weight: 600;
23822
+ }
23823
+ .mint-jobs-tray__status--awaiting-input,
23824
+ .mint-jobs-tray__status--queued {
23825
+ border-color: var(--mint-warning-border);
23826
+ background: var(--mint-warning-bg);
23827
+ color: var(--mint-warning-hover);
23828
+ }
23829
+ .mint-jobs-tray__status--running {
23830
+ border-color: var(--mint-info-border);
23831
+ background: var(--mint-info-bg);
23832
+ color: var(--mint-info);
23833
+ }
23834
+ .mint-jobs-tray__status--completed {
23835
+ border-color: var(--mint-success-border);
23836
+ background: var(--mint-success-bg);
23837
+ color: var(--mint-success-hover);
23838
+ }
23839
+ .mint-jobs-tray__status--failed {
23840
+ border-color: var(--mint-error-border);
23841
+ background: var(--mint-error-bg);
23842
+ color: var(--mint-error);
23843
+ }
23844
+ .mint-jobs-tray__progress {
23845
+ height: 0.375rem;
23846
+ margin-top: 0.75rem;
23847
+ overflow: hidden;
23848
+ border-radius: 9999px;
23849
+ background: var(--bg-tertiary);
23850
+ }
23851
+ .mint-jobs-tray__progress span {
23852
+ display: block;
23853
+ height: 100%;
23854
+ border-radius: inherit;
23855
+ background: var(--color-primary);
23856
+ transition: width var(--mint-transition);
23857
+ }
23858
+ .mint-jobs-tray__job-footer {
23859
+ min-height: 1.75rem;
23860
+ margin-top: 0.625rem;
23861
+ color: var(--text-secondary);
23862
+ font-size: 0.6875rem;
23863
+ }
23864
+ .mint-jobs-tray__action {
23865
+ min-height: 1.75rem;
23866
+ padding: 0.375rem 0.625rem;
23867
+ border: 1px solid var(--border-color);
23868
+ border-radius: var(--radius);
23869
+ background: var(--bg-secondary);
23870
+ color: var(--text-secondary-strong);
23871
+ font: 500 0.6875rem/1 'Fira Sans', sans-serif;
23872
+ cursor: pointer;
23873
+ transition: background var(--mint-transition), border-color var(--mint-transition), color var(--mint-transition);
23874
+ }
23875
+ .mint-jobs-tray__job-actions {
23876
+ display: inline-flex;
23877
+ align-items: center;
23878
+ gap: 0.25rem;
23879
+ }
23880
+ .mint-jobs-tray__action--danger {
23881
+ border-color: var(--mint-error-border);
23882
+ color: var(--mint-error);
23883
+ }
23884
+ .mint-jobs-tray__action--danger:hover {
23885
+ background: var(--mint-error-bg);
23886
+ }
23887
+ .mint-jobs-tray__clear-row {
23888
+ justify-content: flex-end;
23889
+ margin-bottom: 0.625rem;
23890
+ }
23891
+ .mint-jobs-tray button:disabled {
23892
+ opacity: var(--mint-disabled-opacity);
23893
+ cursor: not-allowed;
23894
+ }
23895
+ .mint-jobs-tray-fade-enter-active,
23896
+ .mint-jobs-tray-fade-leave-active,
23897
+ .mint-jobs-tray-slide-enter-active,
23898
+ .mint-jobs-tray-slide-leave-active {
23899
+ transition: opacity var(--mint-transition), transform var(--mint-transition);
23900
+ }
23901
+ .mint-jobs-tray-fade-enter-from,
23902
+ .mint-jobs-tray-fade-leave-to {
23903
+ opacity: 0;
23904
+ }
23905
+ .mint-jobs-tray-slide-enter-from,
23906
+ .mint-jobs-tray-slide-leave-to {
23907
+ opacity: 0;
23908
+ transform: translateY(0.5rem) scale(0.98);
23909
+ }
23910
+ @keyframes mint-jobs-tray-pulse {
23911
+ 50% { opacity: 0.55; }
23912
+ }
23913
+ @media (max-width: 480px) {
23914
+ .mint-jobs-tray {
23915
+ right: max(1rem, env(safe-area-inset-right));
23916
+ bottom: max(1rem, env(safe-area-inset-bottom));
23917
+ }
23918
+
23919
+ .mint-jobs-tray__panel {
23920
+ position: fixed;
23921
+ right: 1rem;
23922
+ bottom: 4.75rem;
23923
+ left: 1rem;
23924
+ width: auto;
23925
+ max-height: calc(100vh - 6.75rem - env(safe-area-inset-bottom));
23926
+ }
23927
+ }
23928
+ @media (prefers-reduced-motion: reduce) {
23929
+ .mint-jobs-tray *,
23930
+ .mint-jobs-tray *::before,
23931
+ .mint-jobs-tray *::after {
23932
+ scroll-behavior: auto !important;
23933
+ animation-duration: 0.01ms !important;
23934
+ animation-iteration-count: 1 !important;
23935
+ transition-duration: 0.01ms !important;
23936
+ }
23937
+
23938
+ .mint-jobs-tray__trigger:hover {
23939
+ transform: none;
23940
+ }
23941
+ }
23211
23942
  /* BaseInput Component Styles */
23212
23943
  .mint-input {
23213
23944
  display: block;