@morscherlab/mint-sdk 1.3.0-beta.4 → 1.3.0-beta.6

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 (95) hide show
  1. package/README.md +23 -140
  2. package/dist/{ResourcePickerListInternal-c3IT8PIu.js → ResourcePickerListInternal-BEXnyBNz.js} +7 -3
  3. package/dist/ResourcePickerListInternal-BEXnyBNz.js.map +1 -0
  4. package/dist/components/WellPlate.colors.d.ts +1 -5
  5. package/dist/components/WellPlate.rendering.d.ts +5 -2
  6. package/dist/components/index.d.ts +32 -17
  7. package/dist/components/index.js +3 -3
  8. package/dist/{components-CF0XMy8W.js → components-C-CAD2Ma.js} +84 -134
  9. package/dist/components-C-CAD2Ma.js.map +1 -0
  10. package/dist/composables/index.d.ts +0 -3
  11. package/dist/composables/index.js +4 -4
  12. package/dist/composables/useAutoGroup.d.ts +1 -1
  13. package/dist/composables/useBioTemplateComponents.d.ts +15 -3
  14. package/dist/composables/useBioTemplateControls.d.ts +5 -1
  15. package/dist/composables/useBioTemplatePackWorkspace.d.ts +2 -0
  16. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +5 -1
  17. package/dist/composables/useBioTemplateWorkspace.d.ts +5 -1
  18. package/dist/composables/useExperimentSave.d.ts +5 -1
  19. package/dist/composables/useGroupAssignment.d.ts +5 -1
  20. package/dist/composables/usePlatformContext.d.ts +3 -0
  21. package/dist/composables/useTemplateCollection.d.ts +5 -1
  22. package/dist/composables-BKhsoONv.js +591 -0
  23. package/dist/composables-BKhsoONv.js.map +1 -0
  24. package/dist/index.js +24 -24
  25. package/dist/index.js.map +1 -1
  26. package/dist/install.js +1 -1
  27. package/dist/lcms.d.ts +11 -11
  28. package/dist/styles.css +50 -143
  29. package/dist/templates/index.js +1 -1
  30. package/dist/{templates-Bj9hZ7iV.js → templates-DcxyATPT.js} +31 -44
  31. package/dist/templates-DcxyATPT.js.map +1 -0
  32. package/dist/types/auth.d.ts +0 -31
  33. package/dist/types/index.d.ts +1 -1
  34. package/dist/types/platform.d.ts +2 -0
  35. package/dist/utils/rack.d.ts +16 -16
  36. package/dist/{validation-B4Y8_eEe.js → validation-kbTxfKYD.js} +50 -12
  37. package/dist/validation-kbTxfKYD.js.map +1 -0
  38. package/package.json +1 -6
  39. package/src/__tests__/components/AppTopBar.test.ts +24 -8
  40. package/src/__tests__/components/EmptyState.test.ts +15 -0
  41. package/src/__tests__/components/FileUploader.test.ts +6 -9
  42. package/src/__tests__/components/WellPlate.decoration.test.ts +4 -28
  43. package/src/__tests__/components/WellPlate.rendering.test.ts +20 -33
  44. package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +7 -7
  45. package/src/__tests__/docs/frontendDocsCatalog.test.ts +2 -2
  46. package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
  47. package/src/__tests__/styles/menusShellRefresh.test.ts +8 -2
  48. package/src/__tests__/templates/templatesDeprecation.test.ts +58 -11
  49. package/src/components/AppTopBar.vue +5 -4
  50. package/src/components/EmptyState.vue +3 -1
  51. package/src/components/FileUploader.vue +30 -46
  52. package/src/components/WellPlate.colors.ts +6 -10
  53. package/src/components/WellPlate.legend.ts +4 -4
  54. package/src/components/WellPlate.rendering.ts +9 -8
  55. package/src/components/WellPlate.vue +5 -22
  56. package/src/components/index.ts +32 -17
  57. package/src/composables/autoGroup/index.ts +1 -1
  58. package/src/composables/index.ts +0 -7
  59. package/src/composables/useAutoGroup.ts +1 -1
  60. package/src/composables/useBioTemplateComponents.ts +15 -3
  61. package/src/composables/useBioTemplateControls.ts +5 -1
  62. package/src/composables/useBioTemplatePackWorkspace.ts +2 -0
  63. package/src/composables/useBioTemplatePresetWorkspace.ts +5 -1
  64. package/src/composables/useBioTemplateWorkspace.ts +5 -1
  65. package/src/composables/useExperimentSave.ts +5 -1
  66. package/src/composables/useGroupAssignment.ts +5 -1
  67. package/src/composables/useTemplateCollection.ts +5 -1
  68. package/src/index.ts +1 -1
  69. package/src/lcms.ts +11 -11
  70. package/src/styles/components/app-top-bar.css +7 -31
  71. package/src/styles/components/empty-state.css +3 -2
  72. package/src/styles/components/file-uploader.css +22 -55
  73. package/src/styles/components/well-plate.css +18 -55
  74. package/src/types/auth.ts +0 -41
  75. package/src/types/index.ts +0 -5
  76. package/src/types/platform.ts +2 -0
  77. package/src/utils/rack.ts +16 -16
  78. package/dist/ResourcePickerListInternal-c3IT8PIu.js.map +0 -1
  79. package/dist/__tests__/composables/useAuth.test.d.ts +0 -1
  80. package/dist/__tests__/composables/usePasskey.test.d.ts +0 -1
  81. package/dist/components-CF0XMy8W.js.map +0 -1
  82. package/dist/composables/useAuth.d.ts +0 -47
  83. package/dist/composables/usePasskey.d.ts +0 -10
  84. package/dist/composables/useWellPlateEditor.d.ts +0 -33
  85. package/dist/composables-Dlyz_Aiv.js +0 -1256
  86. package/dist/composables-Dlyz_Aiv.js.map +0 -1
  87. package/dist/plotly.min-DDhZCNEM.js +0 -168582
  88. package/dist/plotly.min-DDhZCNEM.js.map +0 -1
  89. package/dist/templates-Bj9hZ7iV.js.map +0 -1
  90. package/dist/validation-B4Y8_eEe.js.map +0 -1
  91. package/src/__tests__/composables/useAuth.test.ts +0 -290
  92. package/src/__tests__/composables/usePasskey.test.ts +0 -38
  93. package/src/composables/useAuth.ts +0 -470
  94. package/src/composables/usePasskey.ts +0 -216
  95. package/src/composables/useWellPlateEditor.ts +0 -415
package/dist/styles.css CHANGED
@@ -2813,29 +2813,18 @@ button, input, select, textarea {
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. */
2817
+ .mint-topbar__identity > * {
2818
+ max-width: 100%;
2819
+ max-height: 100%;
2820
+ }
2821
+
2816
2822
  /* The 36px plugin tile would push the bar past 52px; the bar uses the 32px control height. */
2817
2823
  .mint-topbar__identity .mint-plugin-icon--topbar {
2818
2824
  width: 2rem;
2819
2825
  height: 2rem;
2820
2826
  }
2821
2827
 
2822
- /* Integrated: the tile joins the static identity as a 20px mark (icon + name + version). */
2823
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-topbar__identity {
2824
- width: auto;
2825
- padding-left: 0.125rem;
2826
- }
2827
-
2828
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar {
2829
- width: 1.25rem;
2830
- height: 1.25rem;
2831
- border-radius: var(--radius-sm);
2832
- }
2833
-
2834
- .mint-topbar__brand:has(+ .mint-topbar__plugin-identity) .mint-plugin-icon--topbar :is(.mint-plugin-icon__svg, .mint-plugin-icon__img) {
2835
- width: 0.75rem;
2836
- height: 0.75rem;
2837
- }
2838
-
2839
2828
  /* Centered section — absolute so asymmetric left/right weight never shifts the
2840
2829
  pill-nav off the topbar midline. Pointer-events: none lets the pill-nav
2841
2830
  overlay the background while remaining interactive via its own children. */
@@ -2892,7 +2881,7 @@ button, input, select, textarea {
2892
2881
  color: var(--text-primary);
2893
2882
  }
2894
2883
 
2895
- /* Static plugin identity: name + mono version, not a control (5a) */
2884
+ /* Static plugin identity: name only, not a control (5a) */
2896
2885
  .mint-topbar__plugin-identity {
2897
2886
  display: inline-flex;
2898
2887
  align-items: baseline;
@@ -2910,19 +2899,6 @@ button, input, select, textarea {
2910
2899
  text-overflow: ellipsis;
2911
2900
  }
2912
2901
 
2913
- .mint-topbar__plugin-version {
2914
- font-family: var(--font-mono);
2915
- font-size: 0.6875rem;
2916
- color: var(--text-secondary);
2917
- }
2918
-
2919
- .mint-topbar__divider {
2920
- width: 1px;
2921
- height: 1.25rem;
2922
- flex-shrink: 0;
2923
- background-color: var(--border-color);
2924
- }
2925
-
2926
2902
  /* Variant: card - inline card with margins and rounded corners */
2927
2903
  .mint-topbar--card {
2928
2904
  width: calc(100% - 2rem);
@@ -4718,113 +4694,80 @@ button, input, select, textarea {
4718
4694
 
4719
4695
  .mint-file-uploader__dropzone {
4720
4696
  position: relative;
4721
- border: 1px dashed var(--_control-border-strong);
4697
+ border: 2px dashed var(--border-color);
4722
4698
  border-radius: var(--radius-lg);
4723
4699
  cursor: pointer;
4724
4700
  background: var(--bg-secondary);
4725
4701
  transition: border-color 0.15s ease, background-color 0.15s ease;
4726
4702
  }
4727
4703
 
4728
- /* 2g: hover only changes the surface; the border change is reserved for dragover. */
4729
4704
  .mint-file-uploader__dropzone:hover {
4730
- background: var(--bg-hover);
4705
+ border-color: var(--color-primary);
4706
+ background: color-mix(in srgb, var(--color-primary) 3%, var(--bg-secondary));
4731
4707
  }
4732
4708
 
4733
4709
  .mint-file-uploader__dropzone:focus-visible {
4734
- outline: none;
4735
- box-shadow: var(--focus-ring-offset);
4710
+ outline: 2px solid var(--color-primary);
4711
+ outline-offset: 2px;
4736
4712
  }
4737
4713
 
4738
- .mint-file-uploader__dropzone--dragover,
4739
- .mint-file-uploader__dropzone--dragover:hover {
4740
- border: 1.5px solid var(--color-primary);
4741
- background: var(--color-primary-soft);
4714
+ .mint-file-uploader__dropzone--dragover {
4715
+ border-color: var(--color-primary);
4716
+ background: color-mix(in srgb, var(--color-primary) 5%, var(--bg-secondary));
4742
4717
  }
4743
4718
 
4744
- .mint-file-uploader__dropzone--disabled,
4745
- .mint-file-uploader__dropzone--disabled:hover {
4746
- background: var(--bg-tertiary);
4719
+ .mint-file-uploader__dropzone--disabled {
4747
4720
  opacity: var(--mint-disabled-opacity);
4748
4721
  cursor: not-allowed;
4749
4722
  }
4750
4723
 
4751
4724
  .mint-file-uploader__dropzone--sm {
4752
- padding: 0.75rem;
4725
+ padding: 1.25rem;
4753
4726
  }
4754
4727
 
4755
4728
  .mint-file-uploader__dropzone--md {
4756
- padding: 1.125rem;
4729
+ padding: 1.5rem;
4757
4730
  }
4758
4731
 
4759
4732
  .mint-file-uploader__dropzone--lg {
4760
- padding: 1.5rem;
4733
+ padding: 2rem;
4761
4734
  }
4762
4735
 
4763
4736
  /* ==========================================================================
4764
- Content area — compact row: icon tile + prompt + accepted formats
4737
+ Content area
4765
4738
  ========================================================================== */
4766
4739
 
4767
4740
  .mint-file-uploader__content {
4768
4741
  display: flex;
4742
+ flex-direction: column;
4769
4743
  align-items: center;
4770
- gap: 0.75rem;
4744
+ text-align: center;
4771
4745
  }
4772
4746
 
4773
4747
  .mint-file-uploader__input {
4774
4748
  display: none;
4775
4749
  }
4776
4750
 
4777
- .mint-file-uploader__icon-tile {
4778
- display: flex;
4779
- align-items: center;
4780
- justify-content: center;
4781
- flex-shrink: 0;
4751
+ .mint-file-uploader__icon {
4782
4752
  width: 2rem;
4783
4753
  height: 2rem;
4784
- border-radius: var(--radius-md);
4785
- background: var(--bg-tertiary);
4786
- color: var(--text-secondary);
4787
- transition: background-color 0.15s ease, color 0.15s ease;
4788
- }
4789
-
4790
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon-tile {
4791
- background: var(--color-primary);
4792
- color: white;
4793
- }
4794
-
4795
- .mint-file-uploader__icon {
4796
- width: 1rem;
4797
- height: 1rem;
4798
- stroke-width: 1.8;
4754
+ color: var(--text-muted);
4755
+ margin-bottom: 0.5rem;
4799
4756
  }
4800
4757
 
4801
- .mint-file-uploader__copy {
4802
- display: flex;
4803
- flex-direction: column;
4804
- gap: 0.125rem;
4805
- min-width: 0;
4758
+ .mint-file-uploader__dropzone:hover .mint-file-uploader__icon,
4759
+ .mint-file-uploader__dropzone--dragover .mint-file-uploader__icon {
4760
+ color: var(--color-primary);
4806
4761
  }
4807
4762
 
4808
4763
  .mint-file-uploader__text {
4809
- color: var(--text-primary);
4764
+ color: var(--text-secondary);
4810
4765
  font-size: 0.8125rem;
4811
4766
  font-weight: 500;
4812
4767
  margin: 0;
4813
4768
  padding: 0;
4814
4769
  }
4815
4770
 
4816
- .mint-file-uploader__dropzone--dragover .mint-file-uploader__text {
4817
- color: var(--_ink-primary);
4818
- }
4819
-
4820
- .mint-file-uploader__formats {
4821
- color: var(--text-secondary);
4822
- font-family: var(--font-mono);
4823
- font-size: 0.6875rem;
4824
- margin: 0;
4825
- padding: 0;
4826
- }
4827
-
4828
4771
  /* ==========================================================================
4829
4772
  Actions slot
4830
4773
  ========================================================================== */
@@ -9230,10 +9173,9 @@ html.dark .mint-toast__item {
9230
9173
  /* Header cells */
9231
9174
  .mint-well-plate__col-header,
9232
9175
  .mint-well-plate__row-header {
9233
- font-family: var(--font-mono);
9234
- font-weight: 400;
9176
+ font-weight: 500;
9235
9177
  text-align: center;
9236
- color: var(--text-secondary);
9178
+ color: var(--text-muted);
9237
9179
  }
9238
9180
 
9239
9181
  .mint-well-plate__row-header {
@@ -9254,9 +9196,8 @@ html.dark .mint-toast__item {
9254
9196
  font-weight: 500;
9255
9197
  cursor: pointer;
9256
9198
  transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, opacity 0.15s ease;
9257
- /* Empty well: solid hairline, no dash — dozens of dashed rings read as noise (2b). */
9258
- background-color: var(--bg-card);
9259
- border: 1px solid color-mix(in srgb, var(--text-secondary) 35%, var(--border-color));
9199
+ background-color: var(--bg-tertiary);
9200
+ border: 1px dashed var(--border-color);
9260
9201
  }
9261
9202
 
9262
9203
  .mint-well-plate__well--rounded {
@@ -9268,7 +9209,7 @@ html.dark .mint-toast__item {
9268
9209
  }
9269
9210
 
9270
9211
  .mint-well-plate__well--filled {
9271
- background-color: var(--bg-tertiary);
9212
+ border-style: solid;
9272
9213
  }
9273
9214
 
9274
9215
  .mint-well-plate__well--disabled {
@@ -9277,29 +9218,27 @@ html.dark .mint-toast__item {
9277
9218
  }
9278
9219
 
9279
9220
  /* Well states */
9280
- /* Neutral ring + shape only, so a ring never vanishes into a sample color (2b). */
9281
9221
  .mint-well-plate__well--selected {
9282
- box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 3.5px var(--text-primary);
9222
+ box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
9283
9223
  }
9284
9224
 
9285
9225
  .mint-well-plate__well--drag-over {
9286
9226
  box-shadow: 0 0 0 2px var(--color-primary);
9287
- background-color: var(--color-primary-soft);
9227
+ background-color: color-mix(in srgb, var(--color-primary) 20%, transparent);
9288
9228
  }
9289
9229
 
9290
9230
  .mint-well-plate__well--hovered {
9291
- box-shadow: 0 0 0 1px var(--text-secondary);
9231
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--mint-success) 50%, transparent);
9292
9232
  }
9293
9233
 
9294
- /* !important: wellStyle() sets an inline solid `border` on every draggable well. */
9295
9234
  .mint-well-plate__well--drag-source {
9296
- border-style: dashed !important;
9235
+ box-shadow: 0 0 0 2px var(--mint-warning);
9297
9236
  opacity: 0.5;
9298
9237
  }
9299
9238
 
9300
9239
  .mint-well-plate__well--drag-target {
9301
- box-shadow: 0 0 0 2px var(--bg-card), 0 0 0 3.5px var(--color-primary);
9302
- background-color: var(--color-primary-soft);
9240
+ box-shadow: 0 0 0 2px var(--mint-success), 0 0 0 3px var(--bg-card);
9241
+ background-color: color-mix(in srgb, var(--mint-success) 20%, transparent);
9303
9242
  }
9304
9243
 
9305
9244
  /* Optional semantic classes for `wellClass` callbacks. */
@@ -9339,18 +9278,6 @@ html.dark .mint-toast__item {
9339
9278
  color: var(--text-primary);
9340
9279
  }
9341
9280
 
9342
- /* Q / i marker glyph when the centre holds a label or well ID (iQC has no other cue) */
9343
- .mint-well-plate__corner-glyph {
9344
- position: absolute;
9345
- top: 3px;
9346
- left: 6px;
9347
- font-size: 10px;
9348
- font-weight: 700;
9349
- line-height: 1;
9350
- pointer-events: none;
9351
- color: var(--text-primary);
9352
- }
9353
-
9354
9281
  /* Well ID text */
9355
9282
  .mint-well-plate__well-id {
9356
9283
  font-weight: 500;
@@ -9439,34 +9366,21 @@ html.dark .mint-toast__item {
9439
9366
  /* Badge (injection count / custom method indicator) */
9440
9367
  .mint-well-plate__badge {
9441
9368
  position: absolute;
9442
- top: -5px;
9443
- right: -5px;
9444
- box-sizing: border-box;
9445
- min-width: 14px;
9446
- height: 14px;
9447
- padding: 0 3px;
9369
+ top: -4px;
9370
+ right: -4px;
9371
+ width: 16px;
9372
+ height: 16px;
9448
9373
  border-radius: 9999px;
9449
- box-shadow: 0 0 0 2px var(--bg-card);
9450
- font-family: var(--font-mono);
9451
- font-size: 9px;
9374
+ font-size: 10px;
9452
9375
  font-weight: 700;
9453
9376
  display: flex;
9454
9377
  align-items: center;
9455
9378
  justify-content: center;
9456
- color: var(--bg-card);
9379
+ color: white;
9457
9380
  pointer-events: none;
9458
9381
  line-height: 1;
9459
9382
  }
9460
9383
 
9461
- /* Custom method: a plain dot (7a) */
9462
- .mint-well-plate__badge--dot {
9463
- top: -2px;
9464
- right: -2px;
9465
- min-width: 8px;
9466
- height: 8px;
9467
- padding: 0;
9468
- }
9469
-
9470
9384
  /* Sample type legend bar */
9471
9385
  .mint-well-plate__sample-legend {
9472
9386
  margin-top: 0.5rem;
@@ -9483,23 +9397,15 @@ html.dark .mint-toast__item {
9483
9397
  }
9484
9398
 
9485
9399
  .mint-well-plate__sample-legend-dot {
9486
- display: inline-flex;
9487
- align-items: center;
9488
- justify-content: center;
9489
- box-sizing: border-box;
9490
9400
  width: 0.875rem;
9491
9401
  height: 0.875rem;
9492
9402
  border-radius: var(--radius-sm);
9493
9403
  flex-shrink: 0;
9494
- font-family: var(--font-mono);
9495
- font-size: 0.625rem;
9496
- font-weight: 600;
9497
- line-height: 1;
9498
9404
  }
9499
9405
 
9500
9406
  .mint-well-plate__sample-legend-text {
9501
9407
  font-size: 0.75rem;
9502
- color: var(--text-secondary);
9408
+ color: var(--text-muted);
9503
9409
  }
9504
9410
 
9505
9411
  /* Empty / loading / error placeholder host (content comes from EmptyState) */
@@ -14307,8 +14213,9 @@ html.dark .mint-dataframe__loading {
14307
14213
  color: var(--text-muted);
14308
14214
  }
14309
14215
 
14310
- /* Action */
14311
- .mint-empty-state--illustrated .mint-empty-state__action {
14216
+ /* Action — slotted content sits in a block so a child's own larger top margin collapses into this one. */
14217
+ .mint-empty-state--illustrated .mint-empty-state__action,
14218
+ .mint-empty-state--illustrated .mint-empty-state__content {
14312
14219
  margin-top: 0.625rem;
14313
14220
  }
14314
14221
 
@@ -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-Bj9hZ7iV.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-DcxyATPT.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-c3IT8PIu.js";
3
+ import { a as normalizeOptionInput, i as BaseSelect_default, o as BaseInput_default, t as ResourcePickerListInternal_default } from "./ResourcePickerListInternal-BEXnyBNz.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-Bj9hZ7iV.js.map
12304
+ //# sourceMappingURL=templates-DcxyATPT.js.map