@morscherlab/mint-sdk 1.3.0-beta.5 → 1.3.0-beta.7

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 (49) hide show
  1. package/dist/{ResourcePickerListInternal-BEXnyBNz.js → ResourcePickerListInternal-CFAw4vTZ.js} +20 -17
  2. package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +1 -0
  3. package/dist/components/SettingsModal.schema.d.ts +1 -1
  4. package/dist/components/SettingsModal.vue.d.ts +2 -0
  5. package/dist/components/index.d.ts +3 -3
  6. package/dist/components/index.js +3 -3
  7. package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +9 -3
  8. package/dist/{components-BTzcqrJp.js → components-GDDvof8D.js} +19 -15
  9. package/dist/components-GDDvof8D.js.map +1 -0
  10. package/dist/composables/index.js +3 -3
  11. package/dist/composables/usePlatformContext.d.ts +3 -0
  12. package/dist/{composables-Doqb7g1z.js → composables-D6uqp0UF.js} +3 -3
  13. package/dist/{composables-Doqb7g1z.js.map → composables-D6uqp0UF.js.map} +1 -1
  14. package/dist/index.js +5 -5
  15. package/dist/install.js +1 -1
  16. package/dist/styles.css +114 -115
  17. package/dist/templates/index.js +1 -1
  18. package/dist/{templates-DgAG5kMq.js → templates-BU1pet28.js} +31 -44
  19. package/dist/templates-BU1pet28.js.map +1 -0
  20. package/dist/types/components.d.ts +4 -0
  21. package/dist/types/platform.d.ts +2 -0
  22. package/dist/{validation-DILksa0c.js → validation-Dmp9Q5W0.js} +2 -2
  23. package/dist/{validation-DILksa0c.js.map → validation-Dmp9Q5W0.js.map} +1 -1
  24. package/package.json +1 -1
  25. package/src/__tests__/components/AppTopBar.test.ts +8 -0
  26. package/src/__tests__/components/ExperimentSelectorModal.test.ts +12 -5
  27. package/src/__tests__/components/FileUploader.test.ts +6 -9
  28. package/src/__tests__/components/ResourcePickerListInternal.test.ts +23 -4
  29. package/src/__tests__/components/SettingsModal.test.ts +22 -0
  30. package/src/__tests__/styles/controlRefreshRules.test.ts +22 -3
  31. package/src/__tests__/styles/menusShellRefresh.test.ts +9 -5
  32. package/src/__tests__/templates/templatesDeprecation.test.ts +8 -1
  33. package/src/components/AppTopBar.vue +5 -1
  34. package/src/components/ExperimentSelectorModal.vue +4 -1
  35. package/src/components/FileUploader.vue +30 -46
  36. package/src/components/SettingsModal.schema.ts +4 -2
  37. package/src/components/SettingsModal.vue +4 -2
  38. package/src/components/index.ts +3 -3
  39. package/src/components/internal/ResourcePickerListInternal.vue +21 -27
  40. package/src/styles/components/app-page-selector.css +3 -3
  41. package/src/styles/components/app-top-bar.css +16 -12
  42. package/src/styles/components/experiment-selector-modal.css +3 -9
  43. package/src/styles/components/file-uploader.css +22 -55
  44. package/src/styles/components/resource-picker-list.css +70 -36
  45. package/src/types/components.ts +4 -0
  46. package/src/types/platform.ts +2 -0
  47. package/dist/ResourcePickerListInternal-BEXnyBNz.js.map +0 -1
  48. package/dist/components-BTzcqrJp.js.map +0 -1
  49. package/dist/templates-DgAG5kMq.js.map +0 -1
package/dist/styles.css CHANGED
@@ -2783,7 +2783,7 @@ button, input, select, textarea {
2783
2783
  .mint-topbar {
2784
2784
  display: block;
2785
2785
  width: 100%;
2786
- padding: 0.625rem 0.75rem;
2786
+ padding: 0.75rem 1rem;
2787
2787
  background-color: var(--bg-secondary);
2788
2788
  box-sizing: border-box;
2789
2789
  }
@@ -2793,7 +2793,7 @@ button, input, select, textarea {
2793
2793
  display: flex;
2794
2794
  align-items: center;
2795
2795
  gap: 0.5rem;
2796
- min-height: 2rem;
2796
+ min-height: 2.375rem;
2797
2797
  position: relative;
2798
2798
  }
2799
2799
 
@@ -2805,24 +2805,28 @@ button, input, select, textarea {
2805
2805
  }
2806
2806
 
2807
2807
  .mint-topbar__identity {
2808
- width: 2rem;
2809
- height: 2rem;
2808
+ width: 2.25rem;
2809
+ height: 2.25rem;
2810
2810
  display: inline-flex;
2811
2811
  align-items: center;
2812
2812
  justify-content: center;
2813
2813
  flex-shrink: 0;
2814
2814
  }
2815
2815
 
2816
- /* Slotted logos sized above 32px shrink to fit instead of turning into a 32x36 tile. */
2816
+ /* Slotted logos sized above 36px shrink to fit instead of stretching the tile. */
2817
2817
  .mint-topbar__identity > * {
2818
2818
  max-width: 100%;
2819
2819
  max-height: 100%;
2820
2820
  }
2821
2821
 
2822
- /* The 36px plugin tile would push the bar past 52px; the bar uses the 32px control height. */
2823
- .mint-topbar__identity .mint-plugin-icon--topbar {
2824
- width: 2rem;
2825
- height: 2rem;
2822
+ /* Left and right fields share the 36px identity tile height. */
2823
+ .mint-topbar .mint-experiment-popover__trigger,
2824
+ .mint-topbar .mint-experiment-popover__save-trigger {
2825
+ height: 2.25rem;
2826
+ }
2827
+
2828
+ .mint-topbar .mint-experiment-popover__save-trigger {
2829
+ width: 2.25rem;
2826
2830
  }
2827
2831
 
2828
2832
  /* Centered section — absolute so asymmetric left/right weight never shifts the
@@ -2861,8 +2865,8 @@ button, input, select, textarea {
2861
2865
  }
2862
2866
 
2863
2867
  .mint-topbar__logo-icon {
2864
- width: 2rem;
2865
- height: 2rem;
2868
+ width: 2.25rem;
2869
+ height: 2.25rem;
2866
2870
  background-color: var(--color-primary);
2867
2871
  border-radius: var(--radius-md);
2868
2872
  display: flex;
@@ -2925,7 +2929,7 @@ button, input, select, textarea {
2925
2929
  opacity: 0.8;
2926
2930
  }
2927
2931
 
2928
- /* Title + subtitle stay inside the 32px control row (5a: 52px bar). */
2932
+ /* Title + subtitle stay inside the 36px control row. */
2929
2933
  .mint-topbar-title-group {
2930
2934
  display: flex;
2931
2935
  flex-direction: column;
@@ -4694,113 +4698,80 @@ button, input, select, textarea {
4694
4698
 
4695
4699
  .mint-file-uploader__dropzone {
4696
4700
  position: relative;
4697
- border: 1px dashed var(--_control-border-strong);
4701
+ border: 2px dashed var(--border-color);
4698
4702
  border-radius: var(--radius-lg);
4699
4703
  cursor: pointer;
4700
4704
  background: var(--bg-secondary);
4701
4705
  transition: border-color 0.15s ease, background-color 0.15s ease;
4702
4706
  }
4703
4707
 
4704
- /* 2g: hover only changes the surface; the border change is reserved for dragover. */
4705
4708
  .mint-file-uploader__dropzone:hover {
4706
- background: var(--bg-hover);
4709
+ border-color: var(--color-primary);
4710
+ background: color-mix(in srgb, var(--color-primary) 3%, var(--bg-secondary));
4707
4711
  }
4708
4712
 
4709
4713
  .mint-file-uploader__dropzone:focus-visible {
4710
- outline: none;
4711
- box-shadow: var(--focus-ring-offset);
4714
+ outline: 2px solid var(--color-primary);
4715
+ outline-offset: 2px;
4712
4716
  }
4713
4717
 
4714
- .mint-file-uploader__dropzone--dragover,
4715
- .mint-file-uploader__dropzone--dragover:hover {
4716
- border: 1.5px solid var(--color-primary);
4717
- background: var(--color-primary-soft);
4718
+ .mint-file-uploader__dropzone--dragover {
4719
+ border-color: var(--color-primary);
4720
+ background: color-mix(in srgb, var(--color-primary) 5%, var(--bg-secondary));
4718
4721
  }
4719
4722
 
4720
- .mint-file-uploader__dropzone--disabled,
4721
- .mint-file-uploader__dropzone--disabled:hover {
4722
- background: var(--bg-tertiary);
4723
+ .mint-file-uploader__dropzone--disabled {
4723
4724
  opacity: var(--mint-disabled-opacity);
4724
4725
  cursor: not-allowed;
4725
4726
  }
4726
4727
 
4727
4728
  .mint-file-uploader__dropzone--sm {
4728
- padding: 0.75rem;
4729
+ padding: 1.25rem;
4729
4730
  }
4730
4731
 
4731
4732
  .mint-file-uploader__dropzone--md {
4732
- padding: 1.125rem;
4733
+ padding: 1.5rem;
4733
4734
  }
4734
4735
 
4735
4736
  .mint-file-uploader__dropzone--lg {
4736
- padding: 1.5rem;
4737
+ padding: 2rem;
4737
4738
  }
4738
4739
 
4739
4740
  /* ==========================================================================
4740
- Content area — compact row: icon tile + prompt + accepted formats
4741
+ Content area
4741
4742
  ========================================================================== */
4742
4743
 
4743
4744
  .mint-file-uploader__content {
4744
4745
  display: flex;
4746
+ flex-direction: column;
4745
4747
  align-items: center;
4746
- gap: 0.75rem;
4748
+ text-align: center;
4747
4749
  }
4748
4750
 
4749
4751
  .mint-file-uploader__input {
4750
4752
  display: none;
4751
4753
  }
4752
4754
 
4753
- .mint-file-uploader__icon-tile {
4754
- display: flex;
4755
- align-items: center;
4756
- justify-content: center;
4757
- flex-shrink: 0;
4755
+ .mint-file-uploader__icon {
4758
4756
  width: 2rem;
4759
4757
  height: 2rem;
4760
- border-radius: var(--radius-md);
4761
- background: var(--bg-tertiary);
4762
- color: var(--text-secondary);
4763
- transition: background-color 0.15s ease, color 0.15s ease;
4764
- }
4765
-
4766
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon-tile {
4767
- background: var(--color-primary);
4768
- color: white;
4769
- }
4770
-
4771
- .mint-file-uploader__icon {
4772
- width: 1rem;
4773
- height: 1rem;
4774
- stroke-width: 1.8;
4758
+ color: var(--text-muted);
4759
+ margin-bottom: 0.5rem;
4775
4760
  }
4776
4761
 
4777
- .mint-file-uploader__copy {
4778
- display: flex;
4779
- flex-direction: column;
4780
- gap: 0.125rem;
4781
- min-width: 0;
4762
+ .mint-file-uploader__dropzone:hover .mint-file-uploader__icon,
4763
+ .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon {
4764
+ color: var(--color-primary);
4782
4765
  }
4783
4766
 
4784
4767
  .mint-file-uploader__text {
4785
- color: var(--text-primary);
4768
+ color: var(--text-secondary);
4786
4769
  font-size: 0.8125rem;
4787
4770
  font-weight: 500;
4788
4771
  margin: 0;
4789
4772
  padding: 0;
4790
4773
  }
4791
4774
 
4792
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__text {
4793
- color: var(--_ink-primary);
4794
- }
4795
-
4796
- .mint-file-uploader__formats {
4797
- color: var(--text-secondary);
4798
- font-family: var(--font-mono);
4799
- font-size: 0.6875rem;
4800
- margin: 0;
4801
- padding: 0;
4802
- }
4803
-
4804
4775
  /* ==========================================================================
4805
4776
  Actions slot
4806
4777
  ========================================================================== */
@@ -18383,7 +18354,19 @@ button.mint-unit-input__unit:focus-visible {
18383
18354
  background: var(--mint-success-bg);
18384
18355
  color: var(--mint-success);
18385
18356
  }
18386
- /* ResourcePickerList (8b): shared list for ExperimentSelectorModal and ArtifactSelectorModal. */
18357
+ /* ResourcePickerList: shared list for ExperimentSelectorModal and ArtifactSelectorModal.
18358
+ No frame of its own (the modal is the card); rows are inset and rounded, groups are
18359
+ pinned bars. */
18360
+
18361
+ /* The modal is the only card: the list runs edge to edge, and the toolbar, group
18362
+ bars and row text keep the modal's 1.25rem gutter themselves. */
18363
+ .mint-modal__body:has(> .mint-resource-picker) {
18364
+ padding: 0;
18365
+ }
18366
+ .mint-modal__container:has(.mint-resource-picker) .mint-modal__header {
18367
+ border-bottom: none;
18368
+ padding-bottom: 0.75rem;
18369
+ }
18387
18370
 
18388
18371
  .mint-resource-picker {
18389
18372
  display: flex;
@@ -18396,6 +18379,7 @@ button.mint-unit-input__unit:focus-visible {
18396
18379
  align-items: center;
18397
18380
  flex-wrap: wrap;
18398
18381
  gap: 0.5rem;
18382
+ padding: 0 1.25rem;
18399
18383
  }
18400
18384
  .mint-resource-picker__search {
18401
18385
  flex: 1;
@@ -18405,12 +18389,10 @@ button.mint-unit-input__unit:focus-visible {
18405
18389
  .mint-resource-picker__frame {
18406
18390
  display: flex;
18407
18391
  flex-direction: column;
18408
- overflow: hidden;
18409
- border: 1px solid var(--border-color);
18410
- border-radius: var(--radius-md);
18411
- background-color: var(--bg-card);
18392
+ border-top: 1px solid var(--border-color);
18412
18393
  }
18413
18394
  .mint-resource-picker__list {
18395
+ padding-bottom: 0.5rem;
18414
18396
  max-height: min(28rem, calc(100vh - 16rem));
18415
18397
  overflow-y: auto;
18416
18398
  overscroll-behavior: contain;
@@ -18423,14 +18405,17 @@ button.mint-unit-input__unit:focus-visible {
18423
18405
  gap: 0.5rem;
18424
18406
  flex-shrink: 0;
18425
18407
  width: 100%;
18408
+ position: sticky;
18409
+ top: 0;
18410
+ z-index: 1;
18426
18411
  height: 30px;
18427
- padding: 0 12px;
18412
+ padding: 0 1.25rem;
18428
18413
  border: 0;
18429
18414
  border-bottom: 1px solid var(--border-light);
18430
18415
  background-color: var(--bg-primary);
18431
18416
  font-family: inherit;
18432
18417
  font-size: 12px;
18433
- font-weight: 500;
18418
+ font-weight: 600;
18434
18419
  color: var(--text-secondary);
18435
18420
  text-align: left;
18436
18421
  cursor: pointer;
@@ -18462,24 +18447,25 @@ button.mint-unit-input__unit:focus-visible {
18462
18447
  .mint-resource-picker__group-count {
18463
18448
  font: 11px var(--font-mono);
18464
18449
  font-variant-numeric: tabular-nums;
18450
+ color: var(--text-muted);
18465
18451
  }
18466
18452
 
18467
18453
  .mint-resource-picker__row {
18468
18454
  display: grid;
18469
- grid-template-columns: minmax(0, 1fr) auto 14px;
18455
+ grid-template-columns: minmax(0, 1fr);
18456
+ grid-auto-flow: column;
18457
+ grid-auto-columns: auto;
18470
18458
  align-items: center;
18471
- gap: 10px;
18459
+ gap: 12px;
18472
18460
  box-sizing: border-box;
18473
18461
  flex-shrink: 0;
18474
- min-height: 44px;
18475
- padding: 5px 12px;
18476
- border-bottom: 1px solid var(--border-light);
18462
+ min-height: 56px;
18463
+ margin: 2px 0.5rem;
18464
+ padding: 10px 12px;
18465
+ border-radius: var(--radius-md);
18477
18466
  cursor: pointer;
18478
18467
  transition: background-color 150ms ease;
18479
18468
  }
18480
- .mint-resource-picker__row:last-child {
18481
- border-bottom: 0;
18482
- }
18483
18469
  .mint-resource-picker__row:hover {
18484
18470
  background-color: var(--bg-hover);
18485
18471
  }
@@ -18495,7 +18481,7 @@ button.mint-unit-input__unit:focus-visible {
18495
18481
  .mint-resource-picker__text {
18496
18482
  display: flex;
18497
18483
  flex-direction: column;
18498
- gap: 1px;
18484
+ gap: 4px;
18499
18485
  min-width: 0;
18500
18486
  line-height: 1.25;
18501
18487
  }
@@ -18503,18 +18489,49 @@ button.mint-unit-input__unit:focus-visible {
18503
18489
  overflow: hidden;
18504
18490
  text-overflow: ellipsis;
18505
18491
  white-space: nowrap;
18506
- font-size: 13px;
18507
- font-weight: 500;
18492
+ font-size: 15px;
18493
+ font-weight: 600;
18508
18494
  color: var(--text-primary);
18509
18495
  }
18510
18496
  .mint-resource-picker__row--selected .mint-resource-picker__title {
18511
18497
  color: var(--_ink-primary);
18512
18498
  }
18513
- .mint-resource-picker__code,
18499
+ .mint-resource-picker__code {
18500
+ margin-right: 0.5rem;
18501
+ }
18502
+ .mint-resource-picker__aside {
18503
+ display: flex;
18504
+ flex-direction: column;
18505
+ align-items: flex-end;
18506
+ gap: 4px;
18507
+ line-height: 1.25;
18508
+ white-space: nowrap;
18509
+ }
18514
18510
  .mint-resource-picker__date {
18515
- font-family: var(--font-mono);
18511
+ font: 12px var(--font-mono);
18516
18512
  font-variant-numeric: tabular-nums;
18513
+ color: var(--text-muted);
18514
+ }
18515
+ .mint-resource-picker__status {
18516
+ display: inline-flex;
18517
+ align-items: center;
18518
+ gap: 5px;
18519
+ font-size: 12px;
18520
+ font-weight: 500;
18521
+ color: var(--text-secondary);
18517
18522
  }
18523
+ .mint-resource-picker__status::before {
18524
+ content: '';
18525
+ width: 6px;
18526
+ height: 6px;
18527
+ border-radius: 50%;
18528
+ background-color: currentColor;
18529
+ }
18530
+ .mint-resource-picker__status--primary { color: var(--_ink-primary); }
18531
+ .mint-resource-picker__status--success { color: var(--mint-success); }
18532
+ .mint-resource-picker__status--warning { color: var(--mint-warning); }
18533
+ .mint-resource-picker__status--error { color: var(--mint-error); }
18534
+ .mint-resource-picker__status--info { color: var(--mint-info); }
18518
18535
  .mint-resource-picker__meta {
18519
18536
  overflow: hidden;
18520
18537
  text-overflow: ellipsis;
@@ -18527,29 +18544,17 @@ button.mint-unit-input__unit:focus-visible {
18527
18544
  align-items: center;
18528
18545
  gap: 4px;
18529
18546
  }
18530
- .mint-resource-picker__check-slot {
18531
- display: flex;
18532
- width: 14px;
18533
- }
18534
- .mint-resource-picker__check {
18535
- width: 14px;
18536
- height: 14px;
18537
- color: var(--color-primary);
18538
- }
18539
18547
 
18540
18548
  .mint-resource-picker__skeleton-row {
18541
18549
  display: flex;
18542
18550
  flex-direction: column;
18543
18551
  justify-content: center;
18544
- gap: 6px;
18545
- min-height: 44px;
18546
- padding: 5px 12px;
18547
- border-bottom: 1px solid var(--border-light);
18548
- }
18549
- .mint-resource-picker__skeleton-row:last-child {
18550
- border-bottom: 0;
18552
+ gap: 8px;
18553
+ min-height: 56px;
18554
+ padding: 10px 1.25rem;
18551
18555
  }
18552
18556
  .mint-resource-picker__error {
18557
+ margin: 0 1.25rem 1.25rem;
18553
18558
  padding: 0.75rem;
18554
18559
  border: 1px solid var(--mint-error-border);
18555
18560
  border-radius: var(--radius-md);
@@ -18569,6 +18574,7 @@ button.mint-unit-input__unit:focus-visible {
18569
18574
  align-items: center;
18570
18575
  gap: 0.5rem;
18571
18576
  flex-wrap: wrap;
18577
+ padding: 0 1.25rem;
18572
18578
  }
18573
18579
 
18574
18580
  .mint-experiment-selector__filter-select {
@@ -18629,14 +18635,6 @@ html.dark .mint-experiment-selector__filters-toggle--active {
18629
18635
  flex-shrink: 0;
18630
18636
  }
18631
18637
 
18632
- /* Advanced filters row */
18633
- .mint-experiment-selector__filters-advanced {
18634
- padding: 0.625rem;
18635
- border: 1px solid var(--border-light);
18636
- border-radius: var(--radius-md);
18637
- background-color: color-mix(in srgb, var(--bg-secondary) 72%, transparent);
18638
- }
18639
-
18640
18638
  /* Group toggle checkbox label */
18641
18639
  .mint-experiment-selector__group-toggle {
18642
18640
  display: inline-flex;
@@ -18667,7 +18665,8 @@ html.dark .mint-experiment-selector__filters-toggle--active {
18667
18665
  .mint-experiment-selector__footer {
18668
18666
  display: flex;
18669
18667
  justify-content: flex-start;
18670
- padding-top: 0.25rem;
18668
+ padding: 0.5rem 1.25rem 0.75rem;
18669
+ border-top: 1px solid var(--border-light);
18671
18670
  }
18672
18671
 
18673
18672
  .mint-experiment-selector__clear-btn {
@@ -19491,7 +19490,7 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19491
19490
  }
19492
19491
 
19493
19492
  /* AppTopBar page selector — left-side route/page dropdown.
19494
- Trigger speaks the field language (5a): 32px, hover changes the background
19493
+ Trigger speaks the field language (5a): 36px (the identity tile height), hover changes the background
19495
19494
  only, open = field focus, inline 12px chevron. Menu = .mint-popover +
19496
19495
  .mint-menu-item (2d); __menu / __item stay as aliases. */
19497
19496
 
@@ -19505,8 +19504,8 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19505
19504
  align-items: center;
19506
19505
  gap: 0.5rem;
19507
19506
  width: 100%;
19508
- height: 2rem;
19509
- padding: 0 0.5rem 0 0.3125rem;
19507
+ height: 2.25rem;
19508
+ padding: 0 0.5rem 0 0.4375rem;
19510
19509
  border: 1px solid var(--border-color);
19511
19510
  background: var(--bg-card);
19512
19511
  color: var(--text-primary);
@@ -1,2 +1,2 @@
1
- import { $ as toTimeCourseDataFrame, $t as getBioTemplatePackInfo, A as createSamplePrepTemplate, At as toCalibrationCurveDataFrame, B as toBioTemplateComponentProps, Bt as validateInstrumentRunData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunRows, D as createTimeCourseTemplate, Dt as toFlowPanelDataFrame, E as createProtocolStepsTemplate, Et as toFlowPanelColumns, F as getBioTemplateComponentProps, Ft as toAssayMatrixSampleOptions, G as toTemplateDataFrame, Gt as validateSamplePrepData, H as toBioTemplateComponentPropsById, Ht as validateProtocolStepsData, I as listBioTemplateComponentBindings, It as validateAssayMatrixData, J as toDoseConditions, Jt as bioTemplatePresets, K as toWellMapArray, Kt as validateSampleSheetData, L as toBioTemplateComponentBindings, Lt as validateCalibrationCurveData, M as createPlateMapTemplate, Mt as toAssayMatrixColumns, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixDataFrame, O as createCalibrationCurveTemplate, Ot as toFlowPanelRows, P as getBioTemplateComponentBindings, Pt as toAssayMatrixRows, Q as toTimeCourseColumns, Qt as bioTemplatePacks, R as toBioTemplateComponentBindingsById, Rt as validateDoseResponseData, S as createInstrumentRunTemplate, St as toInstrumentRunDataFrame, T as createAssayMatrixTemplate, Tt as toInstrumentRunSteps, U as toBioTemplateComponentSnippets, Ut as validateQpcrPlateData, V as toBioTemplateComponentPropsByComponent, Vt as validatePlateMapData, W as toBioTemplateComponentUsage, Wt as validateReagentListData, X as toPlateMapEditorState, Xt as listBioTemplatePresets, Y as toDoseLayoutState, Yt as getBioTemplatePresetInfo, Z as toWellPlateWells, Zt as searchBioTemplatePresets, _ as createElisaAssayCollection, _t as toProtocolColumns, a as getBioTemplateControlDefaults, an as searchBioTemplateCatalog, at as toSampleRows, b as createQpcrExpressionCollection, bt as toProtocolSteps, c as listBioTemplatePresetControlSchemas, cn as createTemplateCollection, ct as toSamplePrepRows, d as createBioTemplatePresetCollectionFromControls, dn as ensureTemplateFromCollection, dt as toReagentListItems, en as listBioTemplatePacks, et as toTimeCourseRows, f as createWellPlateScreenCollection, fn as extractTemplateCollection, ft as toReagentRows, g as createFlowCytometryAssayCollection, gt as toQpcrWellPlateWells, h as createWesternBlotAssayCollection, ht as toQpcrRows, i as createBioTemplateControlToolkit, in as listBioTemplateCatalog, it as toSampleOptions, j as createSampleSheetTemplate, jt as toCalibrationCurveRows, k as createDoseResponseTemplate, kt as toCalibrationCurveColumns, l as requireBioTemplateControlSchema, ln as createTemplateEnvelope, lt as toReagentColumns, m as createDefaultBioTemplate, mt as toQpcrDataFrame, n as bioTemplateControlsToSectionFormSchemas, nn as bioTemplateCatalog, nt as toSampleColumns, o as getBioTemplateControlSchema, on as TEMPLATE_COLLECTION_KEY, ot as toSamplePrepColumns, p as createBioTemplatePackCollection, pn as getTemplateData, pt as toQpcrColumns, q as racksFromPlateState, qt as validateTimeCourseData, r as bioTemplateControlsToSidebarPanels, rn as getBioTemplateInfo, rt as toSampleDataFrame, s as listBioTemplateControlSchemas, sn as assertTemplateEnvelope, st as toSamplePrepDataFrame, t as bioTemplateControlsToFormSchema, tn as searchBioTemplatePacks, tt as toTimeCourseSteps, u as createBioTemplatePresetCollection, un as ensureTemplateEnvelope, ut as toReagentDataFrame, v as createTargetedMetabolomicsCollection, vt as toProtocolDataFrame, w as createReagentListTemplate, wt as toInstrumentRunScheduleEvents, x as createQpcrPlateTemplate, xt as toInstrumentRunColumns, y as createLcmsBatchCollection, yt as toProtocolRows, z as toBioTemplateComponentImports, zt as validateFlowCytometryPanelData } from "../templates-DgAG5kMq.js";
1
+ import { $ as toTimeCourseDataFrame, $t as getBioTemplatePackInfo, A as createSamplePrepTemplate, At as toCalibrationCurveDataFrame, B as toBioTemplateComponentProps, Bt as validateInstrumentRunData, C as createFlowCytometryPanelTemplate, Ct as toInstrumentRunRows, D as createTimeCourseTemplate, Dt as toFlowPanelDataFrame, E as createProtocolStepsTemplate, Et as toFlowPanelColumns, F as getBioTemplateComponentProps, Ft as toAssayMatrixSampleOptions, G as toTemplateDataFrame, Gt as validateSamplePrepData, H as toBioTemplateComponentPropsById, Ht as validateProtocolStepsData, I as listBioTemplateComponentBindings, It as validateAssayMatrixData, J as toDoseConditions, Jt as bioTemplatePresets, K as toWellMapArray, Kt as validateSampleSheetData, L as toBioTemplateComponentBindings, Lt as validateCalibrationCurveData, M as createPlateMapTemplate, Mt as toAssayMatrixColumns, N as bioTemplatePresetControlValuesToOptions, Nt as toAssayMatrixDataFrame, O as createCalibrationCurveTemplate, Ot as toFlowPanelRows, P as getBioTemplateComponentBindings, Pt as toAssayMatrixRows, Q as toTimeCourseColumns, Qt as bioTemplatePacks, R as toBioTemplateComponentBindingsById, Rt as validateDoseResponseData, S as createInstrumentRunTemplate, St as toInstrumentRunDataFrame, T as createAssayMatrixTemplate, Tt as toInstrumentRunSteps, U as toBioTemplateComponentSnippets, Ut as validateQpcrPlateData, V as toBioTemplateComponentPropsByComponent, Vt as validatePlateMapData, W as toBioTemplateComponentUsage, Wt as validateReagentListData, X as toPlateMapEditorState, Xt as listBioTemplatePresets, Y as toDoseLayoutState, Yt as getBioTemplatePresetInfo, Z as toWellPlateWells, Zt as searchBioTemplatePresets, _ as createElisaAssayCollection, _t as toProtocolColumns, a as getBioTemplateControlDefaults, an as searchBioTemplateCatalog, at as toSampleRows, b as createQpcrExpressionCollection, bt as toProtocolSteps, c as listBioTemplatePresetControlSchemas, cn as createTemplateCollection, ct as toSamplePrepRows, d as createBioTemplatePresetCollectionFromControls, dn as ensureTemplateFromCollection, dt as toReagentListItems, en as listBioTemplatePacks, et as toTimeCourseRows, f as createWellPlateScreenCollection, fn as extractTemplateCollection, ft as toReagentRows, g as createFlowCytometryAssayCollection, gt as toQpcrWellPlateWells, h as createWesternBlotAssayCollection, ht as toQpcrRows, i as createBioTemplateControlToolkit, in as listBioTemplateCatalog, it as toSampleOptions, j as createSampleSheetTemplate, jt as toCalibrationCurveRows, k as createDoseResponseTemplate, kt as toCalibrationCurveColumns, l as requireBioTemplateControlSchema, ln as createTemplateEnvelope, lt as toReagentColumns, m as createDefaultBioTemplate, mt as toQpcrDataFrame, n as bioTemplateControlsToSectionFormSchemas, nn as bioTemplateCatalog, nt as toSampleColumns, o as getBioTemplateControlSchema, on as TEMPLATE_COLLECTION_KEY, ot as toSamplePrepColumns, p as createBioTemplatePackCollection, pn as getTemplateData, pt as toQpcrColumns, q as racksFromPlateState, qt as validateTimeCourseData, r as bioTemplateControlsToSidebarPanels, rn as getBioTemplateInfo, rt as toSampleDataFrame, s as listBioTemplateControlSchemas, sn as assertTemplateEnvelope, st as toSamplePrepDataFrame, t as bioTemplateControlsToFormSchema, tn as searchBioTemplatePacks, tt as toTimeCourseSteps, u as createBioTemplatePresetCollection, un as ensureTemplateEnvelope, ut as toReagentDataFrame, v as createTargetedMetabolomicsCollection, vt as toProtocolDataFrame, w as createReagentListTemplate, wt as toInstrumentRunScheduleEvents, x as createQpcrPlateTemplate, xt as toInstrumentRunColumns, y as createLcmsBatchCollection, yt as toProtocolRows, z as toBioTemplateComponentImports, zt as validateFlowCytometryPanelData } from "../templates-BU1pet28.js";
2
2
  export { TEMPLATE_COLLECTION_KEY, assertTemplateEnvelope, bioTemplateCatalog, bioTemplateControlsToFormSchema, bioTemplateControlsToSectionFormSchemas, bioTemplateControlsToSidebarPanels, bioTemplatePacks, bioTemplatePresetControlValuesToOptions, bioTemplatePresets, createAssayMatrixTemplate, createBioTemplateControlToolkit, createBioTemplatePackCollection, createBioTemplatePresetCollection, createBioTemplatePresetCollectionFromControls, createCalibrationCurveTemplate, createDefaultBioTemplate, createDoseResponseTemplate, createElisaAssayCollection, createFlowCytometryAssayCollection, createFlowCytometryPanelTemplate, createInstrumentRunTemplate, createLcmsBatchCollection, createPlateMapTemplate, createProtocolStepsTemplate, createQpcrExpressionCollection, createQpcrPlateTemplate, createReagentListTemplate, createSamplePrepTemplate, createSampleSheetTemplate, createTargetedMetabolomicsCollection, createTemplateCollection, createTemplateEnvelope, createTimeCourseTemplate, createWellPlateScreenCollection, createWesternBlotAssayCollection, ensureTemplateEnvelope, ensureTemplateFromCollection, extractTemplateCollection, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlDefaults, getBioTemplateControlSchema, getBioTemplateInfo, getBioTemplatePackInfo, getBioTemplatePresetInfo, getTemplateData, listBioTemplateCatalog, listBioTemplateComponentBindings, listBioTemplateControlSchemas, listBioTemplatePacks, listBioTemplatePresetControlSchemas, listBioTemplatePresets, racksFromPlateState, requireBioTemplateControlSchema, searchBioTemplateCatalog, searchBioTemplatePacks, searchBioTemplatePresets, toAssayMatrixColumns, toAssayMatrixDataFrame, toAssayMatrixRows, toAssayMatrixSampleOptions, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentImports, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toBioTemplateComponentSnippets, toBioTemplateComponentUsage, toCalibrationCurveColumns, toCalibrationCurveDataFrame, toCalibrationCurveRows, toDoseConditions, toDoseLayoutState, toFlowPanelColumns, toFlowPanelDataFrame, toFlowPanelRows, toInstrumentRunColumns, toInstrumentRunDataFrame, toInstrumentRunRows, toInstrumentRunScheduleEvents, toInstrumentRunSteps, toPlateMapEditorState, toProtocolColumns, toProtocolDataFrame, toProtocolRows, toProtocolSteps, toQpcrColumns, toQpcrDataFrame, toQpcrRows, toQpcrWellPlateWells, toReagentColumns, toReagentDataFrame, toReagentListItems, toReagentRows, toSampleColumns, toSampleDataFrame, toSampleOptions, toSamplePrepColumns, toSamplePrepDataFrame, toSamplePrepRows, toSampleRows, toTemplateDataFrame, toTimeCourseColumns, toTimeCourseDataFrame, toTimeCourseRows, toTimeCourseSteps, toWellMapArray, toWellPlateWells, validateAssayMatrixData, validateCalibrationCurveData, validateDoseResponseData, validateFlowCytometryPanelData, validateInstrumentRunData, validatePlateMapData, validateProtocolStepsData, validateQpcrPlateData, validateReagentListData, validateSamplePrepData, validateSampleSheetData, validateTimeCourseData };
@@ -1,6 +1,6 @@
1
1
  import { a as tryUseSettingsStore, c as mintApiErrorFromResponse, s as MintApiError } from "./settings-BLr8lzw6.js";
2
2
  import { c as formatExperimentDate, f as BaseModal_default, h as BaseButton_default, m as useEventListener, p as useFocusTrap } from "./experiment-utils-DTANyVKV.js";
3
- import { a as normalizeOptionInput, i as BaseSelect_default, o as BaseInput_default, t as ResourcePickerListInternal_default } from "./ResourcePickerListInternal-BEXnyBNz.js";
3
+ import { a as normalizeOptionInput, i as BaseSelect_default, o as BaseInput_default, t as ResourcePickerListInternal_default } from "./ResourcePickerListInternal-CFAw4vTZ.js";
4
4
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createStaticVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, getCurrentScope, inject, nextTick, normalizeClass, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, ref, renderList, renderSlot, shallowRef, toDisplayString, toValue, unref, useId, useTemplateRef, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
5
5
  import { autoUpdate, computePosition, flip, offset, shift } from "@floating-ui/dom";
6
6
  //#region src/components/BaseTextarea.vue?vue&type=script&setup=true&lang.ts
@@ -2588,8 +2588,7 @@ var _hoisted_3$6 = [
2588
2588
  "webkitdirectory"
2589
2589
  ];
2590
2590
  var _hoisted_4$6 = { class: "mint-file-uploader__content" };
2591
- var _hoisted_5$5 = { class: "mint-file-uploader__icon-tile" };
2592
- var _hoisted_6$5 = {
2591
+ var _hoisted_5$5 = {
2593
2592
  key: 0,
2594
2593
  class: "mint-file-uploader__icon",
2595
2594
  fill: "none",
@@ -2599,7 +2598,7 @@ var _hoisted_6$5 = {
2599
2598
  "stroke-linejoin": "round",
2600
2599
  viewBox: "0 0 24 24"
2601
2600
  };
2602
- var _hoisted_7$5 = {
2601
+ var _hoisted_6$5 = {
2603
2602
  key: 1,
2604
2603
  class: "mint-file-uploader__icon",
2605
2604
  fill: "none",
@@ -2609,29 +2608,24 @@ var _hoisted_7$5 = {
2609
2608
  "stroke-linejoin": "round",
2610
2609
  viewBox: "0 0 24 24"
2611
2610
  };
2612
- var _hoisted_8$5 = { class: "mint-file-uploader__copy" };
2613
- var _hoisted_9$3 = { class: "mint-file-uploader__text" };
2614
- var _hoisted_10$2 = {
2615
- key: 0,
2616
- class: "mint-file-uploader__formats"
2617
- };
2618
- var _hoisted_11$1 = {
2611
+ var _hoisted_7$5 = { class: "mint-file-uploader__text" };
2612
+ var _hoisted_8$5 = {
2619
2613
  key: 0,
2620
2614
  class: "mint-file-uploader__actions"
2621
2615
  };
2622
- var _hoisted_12$1 = {
2616
+ var _hoisted_9$3 = {
2623
2617
  key: 1,
2624
2618
  class: "mint-file-uploader__folder-summary"
2625
2619
  };
2626
- var _hoisted_13$1 = { class: "mint-file-uploader__folder-info" };
2627
- var _hoisted_14$1 = { class: "mint-file-uploader__folder-details" };
2628
- var _hoisted_15$1 = { class: "mint-file-uploader__folder-name" };
2629
- var _hoisted_16$1 = { class: "mint-file-uploader__folder-count" };
2630
- var _hoisted_17$1 = { class: "mint-file-uploader__file-info" };
2631
- var _hoisted_18$1 = { class: "mint-file-uploader__file-meta" };
2632
- var _hoisted_19$1 = { class: "mint-file-uploader__file-name" };
2633
- var _hoisted_20$1 = { class: "mint-file-uploader__file-size" };
2634
- var _hoisted_21 = ["aria-label", "onClick"];
2620
+ var _hoisted_10$2 = { class: "mint-file-uploader__folder-info" };
2621
+ var _hoisted_11$1 = { class: "mint-file-uploader__folder-details" };
2622
+ var _hoisted_12$1 = { class: "mint-file-uploader__folder-name" };
2623
+ var _hoisted_13$1 = { class: "mint-file-uploader__folder-count" };
2624
+ var _hoisted_14$1 = { class: "mint-file-uploader__file-info" };
2625
+ var _hoisted_15$1 = { class: "mint-file-uploader__file-meta" };
2626
+ var _hoisted_16$1 = { class: "mint-file-uploader__file-name" };
2627
+ var _hoisted_17$1 = { class: "mint-file-uploader__file-size" };
2628
+ var _hoisted_18$1 = ["aria-label", "onClick"];
2635
2629
  //#endregion
2636
2630
  //#region src/components/FileUploader.vue
2637
2631
  var FileUploader_default = /* @__PURE__ */ defineComponent({
@@ -2666,7 +2660,6 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2666
2660
  const props = __props;
2667
2661
  const emit = __emit;
2668
2662
  const isDragOver = ref(false);
2669
- const dragCount = ref(0);
2670
2663
  const inputRef = ref();
2671
2664
  const selectedFiles = ref([]);
2672
2665
  const folderName = ref(null);
@@ -2677,14 +2670,9 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2677
2670
  }, { immediate: true });
2678
2671
  const isFolder = computed(() => props.mode === "folder");
2679
2672
  const isMixed = computed(() => props.mode === "file+folder");
2680
- const promptText = computed(() => {
2681
- if (isDragOver.value) {
2682
- if (isFolder.value || dragCount.value === 0) return "Release to add";
2683
- return `Release to add ${dragCount.value} file${dragCount.value === 1 ? "" : "s"}`;
2684
- }
2685
- if (isMixed.value) return "Drop files or a folder, or click to choose files";
2686
- if (isFolder.value) return "Drop a folder, or click to choose";
2687
- return props.multiple ? "Drop files, or click to choose" : "Drop a file, or click to choose";
2673
+ const acceptLabel = computed(() => {
2674
+ if (!props.accept) return isFolder.value ? "a folder" : "any file";
2675
+ return props.accept.split(",").map((a) => a.trim().replace(".", "").toUpperCase()).join(", ");
2688
2676
  });
2689
2677
  const maxSizeLabel = computed(() => {
2690
2678
  if (!props.maxSize) return null;
@@ -2693,8 +2681,6 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2693
2681
  if (props.maxSize >= 1024) return `${(props.maxSize / 1024).toFixed(1)} KB`;
2694
2682
  return `${props.maxSize} bytes`;
2695
2683
  });
2696
- /** Accepted formats exactly as the caller wrote them, plus the size cap. */
2697
- const formatsLabel = computed(() => [props.accept?.split(",").map((a) => a.trim()).filter(Boolean).join(" "), maxSizeLabel.value && `max ${maxSizeLabel.value}`].filter(Boolean).join(" · "));
2698
2684
  const fileTypeMap = {
2699
2685
  csv: {
2700
2686
  color: "#10B981",
@@ -2903,10 +2889,7 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2903
2889
  }
2904
2890
  function handleDragOver(event) {
2905
2891
  event.preventDefault();
2906
- if (!props.disabled) {
2907
- isDragOver.value = true;
2908
- dragCount.value = event.dataTransfer?.items?.length ?? 0;
2909
- }
2892
+ if (!props.disabled) isDragOver.value = true;
2910
2893
  }
2911
2894
  function handleDragLeave() {
2912
2895
  isDragOver.value = false;
@@ -2965,9 +2948,13 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2965
2948
  webkitdirectory: isFolder.value || void 0,
2966
2949
  class: "mint-file-uploader__input",
2967
2950
  onChange: handleInputChange
2968
- }, null, 40, _hoisted_3$6), createElementVNode("div", _hoisted_4$6, [createElementVNode("span", _hoisted_5$5, [isFolder.value ? (openBlock(), createElementBlock("svg", _hoisted_6$5, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_7$5, [..._cache[1] || (_cache[1] = [createElementVNode("path", { d: "M12 16V4M7 9l5-5 5 5M4 20h16" }, null, -1)])]))]), createElementVNode("div", _hoisted_8$5, [createElementVNode("p", _hoisted_9$3, toDisplayString(promptText.value), 1), formatsLabel.value ? (openBlock(), createElementBlock("p", _hoisted_10$2, toDisplayString(formatsLabel.value), 1)) : createCommentVNode("", true)])])], 42, _hoisted_2$6),
2969
- _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_11$1, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
2970
- __props.showFiles && isFolder.value && folderName.value && selectedFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_12$1, [createElementVNode("div", _hoisted_13$1, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-file-uploader__folder-icon-wrapper" }, [createElementVNode("svg", {
2951
+ }, null, 40, _hoisted_3$6), createElementVNode("div", _hoisted_4$6, [isFolder.value ? (openBlock(), createElementBlock("svg", _hoisted_5$5, [..._cache[0] || (_cache[0] = [createElementVNode("path", { d: "M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z" }, null, -1)])])) : (openBlock(), createElementBlock("svg", _hoisted_6$5, [..._cache[1] || (_cache[1] = [
2952
+ createElementVNode("path", { d: "M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3" }, null, -1),
2953
+ createElementVNode("path", { d: "m16 16-4-4-4 4" }, null, -1),
2954
+ createElementVNode("path", { d: "M12 12v9" }, null, -1)
2955
+ ])])), createElementVNode("p", _hoisted_7$5, toDisplayString(isMixed.value ? "Drop files or a folder, or click to choose files" : `Drop ${acceptLabel.value} or click`), 1)])], 42, _hoisted_2$6),
2956
+ _ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_8$5, [renderSlot(_ctx.$slots, "actions")])) : createCommentVNode("", true),
2957
+ __props.showFiles && isFolder.value && folderName.value && selectedFiles.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_9$3, [createElementVNode("div", _hoisted_10$2, [_cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-file-uploader__folder-icon-wrapper" }, [createElementVNode("svg", {
2971
2958
  class: "mint-file-uploader__folder-icon",
2972
2959
  fill: "none",
2973
2960
  stroke: "currentColor",
@@ -2975,7 +2962,7 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2975
2962
  "stroke-linecap": "round",
2976
2963
  "stroke-linejoin": "round",
2977
2964
  viewBox: "0 0 24 24"
2978
- }, [createElementVNode("path", { d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2" })])], -1)), createElementVNode("div", _hoisted_14$1, [createElementVNode("span", _hoisted_15$1, toDisplayString(folderName.value), 1), createElementVNode("span", _hoisted_16$1, toDisplayString(selectedFiles.value.length) + " file" + toDisplayString(selectedFiles.value.length !== 1 ? "s" : ""), 1)])]), createElementVNode("button", {
2965
+ }, [createElementVNode("path", { d: "m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2" })])], -1)), createElementVNode("div", _hoisted_11$1, [createElementVNode("span", _hoisted_12$1, toDisplayString(folderName.value), 1), createElementVNode("span", _hoisted_13$1, toDisplayString(selectedFiles.value.length) + " file" + toDisplayString(selectedFiles.value.length !== 1 ? "s" : ""), 1)])]), createElementVNode("button", {
2979
2966
  type: "button",
2980
2967
  "aria-label": "Clear folder",
2981
2968
  class: "mint-file-uploader__remove-btn",
@@ -2999,10 +2986,10 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
2999
2986
  return openBlock(), createElementBlock("li", {
3000
2987
  key: `${file.name}-${file.size}-${index}`,
3001
2988
  class: "mint-file-uploader__file"
3002
- }, [createElementVNode("div", _hoisted_17$1, [createElementVNode("span", {
2989
+ }, [createElementVNode("div", _hoisted_14$1, [createElementVNode("span", {
3003
2990
  class: "mint-file-uploader__file-badge",
3004
2991
  style: normalizeStyle({ "--badge-color": getFileType(file.name).color })
3005
- }, toDisplayString(getFileType(file.name).label), 5), createElementVNode("div", _hoisted_18$1, [createElementVNode("span", _hoisted_19$1, toDisplayString(file.name), 1), createElementVNode("span", _hoisted_20$1, toDisplayString(formatFileSize(file.size)), 1)])]), createElementVNode("button", {
2992
+ }, toDisplayString(getFileType(file.name).label), 5), createElementVNode("div", _hoisted_15$1, [createElementVNode("span", _hoisted_16$1, toDisplayString(file.name), 1), createElementVNode("span", _hoisted_17$1, toDisplayString(formatFileSize(file.size)), 1)])]), createElementVNode("button", {
3006
2993
  type: "button",
3007
2994
  "aria-label": `Remove ${file.name}`,
3008
2995
  class: "mint-file-uploader__remove-btn",
@@ -3015,7 +3002,7 @@ var FileUploader_default = /* @__PURE__ */ defineComponent({
3015
3002
  "stroke-linecap": "round",
3016
3003
  "stroke-linejoin": "round",
3017
3004
  viewBox: "0 0 24 24"
3018
- }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])], 8, _hoisted_21)]);
3005
+ }, [createElementVNode("path", { d: "M18 6 6 18" }), createElementVNode("path", { d: "m6 6 12 12" })], -1)])], 8, _hoisted_18$1)]);
3019
3006
  }), 128))]),
3020
3007
  _: 1
3021
3008
  })) : createCommentVNode("", true)
@@ -12314,4 +12301,4 @@ function getBioTemplateControlDefaults(target) {
12314
12301
  //#endregion
12315
12302
  export { toTimeCourseDataFrame as $, FormulaInput_default as $n, snapToSlot as $r, getBioTemplatePackInfo as $t, createSamplePrepTemplate as A, getControlDefaults as An, isPluginSecretLocked as Ar, toCalibrationCurveDataFrame as At, toBioTemplateComponentProps as B, getDefaultControlView as Bn, addMinutes$1 as Br, validateInstrumentRunData as Bt, createFlowCytometryPanelTemplate as C, SAMPLE_GROUP_TOKENS as Cn, FileUploader_default as Cr, toInstrumentRunRows as Ct, createTimeCourseTemplate as D, hslToHex as Dn, PLUGIN_SECRET_FORMAT_REF as Dr, toFlowPanelDataFrame as Dt, createProtocolStepsTemplate as E, hexToHsl as En, PLUGIN_SECRET_FORMAT_KEY as Er, toFlowPanelColumns as Et, getBioTemplateComponentProps as F, controlsToSettingsSchema as Fn, pluginSecretState as Fr, toAssayMatrixSampleOptions as Ft, toTemplateDataFrame as G, getFieldRegistryEntry as Gn, formatDuration as Gr, validateSamplePrepData as Gt, toBioTemplateComponentPropsById as H, omitUndefined as Hn, durationMinutes as Hr, validateProtocolStepsData as Ht, listBioTemplateComponentBindings as I, controlsToSidebarPanels as In, setPluginSecret as Ir, validateAssayMatrixData as It, toDoseConditions as J, UnitInput_default as Jn, fromMinutes as Jr, bioTemplatePresets as Jt, toWellMapArray as K, getTypeDefault as Kn, formatTime as Kr, validateSampleSheetData as Kt, toBioTemplateComponentBindings as L, controlsToTopBarSettingsConfig as Ln, usesPluginSecretReferences as Lr, validateCalibrationCurveData as Lt, createPlateMapTemplate as M, controlsToFormSchema as Mn, keepPluginSecret as Mr, toAssayMatrixColumns as Mt, bioTemplatePresetControlValuesToOptions as N, controlsToSectionFormSchema as Nn, pluginSecretId as Nr, toAssayMatrixDataFrame as Nt, createCalibrationCurveTemplate as O, defineControlComponentBindings as On, PLUGIN_SECRET_REF_KEY as Or, toFlowPanelRows as Ot, getBioTemplateComponentBindings as P, controlsToSectionFormSchemas as Pn, pluginSecretLabel as Pr, toAssayMatrixRows as Pt, toTimeCourseColumns as Q, useSequenceUtils as Qn, rangesOverlap as Qr, bioTemplatePacks as Qt, toBioTemplateComponentBindingsById as R, controlsToViewIds as Rn, TagsInput_default as Rr, validateDoseResponseData as Rt, createInstrumentRunTemplate as S, SAMPLE_COLOR_SCALE as Sn, _plugin_vue_export_helper_default as Sr, toInstrumentRunDataFrame as St, createAssayMatrixTemplate as T, deriveShade as Tn, SecretInput_default as Tr, toInstrumentRunSteps as Tt, toBioTemplateComponentSnippets as U, recordValue as Un, findAvailableSlots as Ur, validateQpcrPlateData as Ut, toBioTemplateComponentPropsByComponent as V, normalizeControlDefinition as Vn, compareTime as Vr, validatePlateMapData as Vt, toBioTemplateComponentUsage as W, replaceRecord as Wn, findNearestTimeSlotIndex as Wr, validateReagentListData as Wt, toPlateMapEditorState as X, MoleculeInput_default as Xn, isTimeInRange as Xr, listBioTemplatePresets as Xt, toDoseLayoutState as Y, useConcentrationUnits as Yn, generateTimeSlots as Yr, getBioTemplatePresetInfo as Yt, toWellPlateWells as Z, SequenceInput_default as Zn, parseTime as Zr, searchBioTemplatePresets as Zt, createElisaAssayCollection as _, createPlateRowLabels as _n, resolveJobCapabilities as _r, toProtocolColumns as _t, getBioTemplateControlDefaults as a, useListSelection as ai, searchBioTemplateCatalog as an, getInjectedPlatformContext as ar, toSampleRows as at, createQpcrExpressionCollection as b, rowIndex as bn, isRecord as br, toProtocolSteps as bt, listBioTemplatePresetControlSchemas as c, BaseRadioGroup_default as ci, createTemplateCollection as cn, resolveCurrentPluginId as cr, toSamplePrepRows as ct, createBioTemplatePresetCollectionFromControls as d, Tooltip_default as di, ensureTemplateFromCollection as dn, usePluginJobs as dr, toReagentListItems as dt, toMinutes as ei, listBioTemplatePacks as en, ATOMIC_WEIGHTS as er, toTimeCourseRows as et, createWellPlateScreenCollection as f, BaseTextarea_default as fi, extractTemplateCollection as fn, isActiveJobStatus as fr, toReagentRows as ft, createFlowCytometryAssayCollection as g, createPlateColumnLabels as gn, normalizeJobState as gr, toQpcrWellPlateWells as gt, createWesternBlotAssayCollection as h, WELL_PLATE_SIZE_CONFIGS as hn, normalizeJobPercent as hr, toQpcrRows as ht, createBioTemplateControlToolkit as i, MultiSelect_default as ii, listBioTemplateCatalog as in, currentExperimentFromContext as ir, toSampleOptions as it, createSampleSheetTemplate as j, useControlSchema as jn, isPluginSecretRef as jr, toCalibrationCurveRows as jt, createDoseResponseTemplate as k, defineControls as kn, clearPluginSecret as kr, toCalibrationCurveColumns as kt, requireBioTemplateControlSchema as l, BaseToggle_default as li, createTemplateEnvelope as ln, createGeneratedAnalysisTransport as lr, toReagentColumns as lt, createDefaultBioTemplate as m, PLATE_CONFIGS as mn, jobStatusLabel as mr, toQpcrDataFrame as mt, bioTemplateControlsToSectionFormSchemas as n, DatePicker_default as ni, bioTemplateCatalog as nn, GeneratedPathInput_default as nr, toSampleColumns as nt, getBioTemplateControlSchema as o, useSelectionLimit as oi, TEMPLATE_COLLECTION_KEY as on, parseExperimentId as or, toSamplePrepColumns as ot, createBioTemplatePackCollection as p, getTemplateData as pn, isTerminalJobStatus as pr, toQpcrColumns as pt, racksFromPlateState as q, ConcentrationInput_default as qn, formatTimeSlot as qr, validateTimeCourseData as qt, bioTemplateControlsToSidebarPanels as r, useDropdownState as ri, getBioTemplateInfo as rn, GENERATED_JOBS_API_KEY as rr, toSampleDataFrame as rt, listBioTemplateControlSchemas as s, BaseSlider_default as si, assertTemplateEnvelope as sn, resolveCurrentExperimentId as sr, toSamplePrepDataFrame as st, bioTemplateControlsToFormSchema as t, useTimeUtils as ti, searchBioTemplatePacks as tn, useChemicalFormula as tr, toTimeCourseSteps as tt, createBioTemplatePresetCollection as u, BaseCheckbox_default as ui, ensureTemplateEnvelope as un, useGeneratedAnalysis as ur, toReagentDataFrame as ut, createTargetedMetabolomicsCollection as v, createWellGrid as vn, useEventStream as vr, toProtocolDataFrame as vt, createReagentListTemplate as w, SLOT_ORDER as wn, NumberInput_default as wr, toInstrumentRunScheduleEvents as wt, createQpcrPlateTemplate as x, rowLabel as xn, useMenuKeyboard as xr, toInstrumentRunColumns as xt, createLcmsBatchCollection as y, getRectangleWellIds as yn, DateTimePicker_default as yr, toProtocolRows as yt, toBioTemplateComponentImports as z, controlsToViewItems as zn, TimePicker_default as zr, validateFlowCytometryPanelData as zt };
12316
12303
 
12317
- //# sourceMappingURL=templates-DgAG5kMq.js.map
12304
+ //# sourceMappingURL=templates-BU1pet28.js.map