@morscherlab/mint-sdk 1.0.0-rc.2 → 1.0.0-rc.5

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 (443) hide show
  1. package/dist/__tests__/components/AppTopBar.navigation.test.d.ts +1 -0
  2. package/dist/__tests__/components/DoseCalculatorVolumeField.test.d.ts +1 -0
  3. package/dist/__tests__/components/PlateMapEditorToolbarInternal.test.d.ts +1 -0
  4. package/dist/__tests__/components/PluginWorkspaceView.controls.test.d.ts +1 -0
  5. package/dist/__tests__/components/PluginWorkspaceView.navigation.test.d.ts +1 -0
  6. package/dist/__tests__/components/PluginWorkspaceView.shell.test.d.ts +1 -0
  7. package/dist/__tests__/components/ProtocolStep.presentation.test.d.ts +1 -0
  8. package/dist/__tests__/components/ProtocolStepEditor.state.test.d.ts +1 -0
  9. package/dist/__tests__/components/ProtocolStepParameterField.test.d.ts +1 -0
  10. package/dist/__tests__/components/ReagentList.presentation.test.d.ts +1 -0
  11. package/dist/__tests__/components/SampleSelector.colors.test.d.ts +1 -0
  12. package/dist/__tests__/components/SampleSelector.drag.test.d.ts +1 -0
  13. package/dist/__tests__/components/SampleSelector.groups.test.d.ts +1 -0
  14. package/dist/__tests__/components/SampleSelector.selection.test.d.ts +1 -0
  15. package/dist/__tests__/components/SampleSelectorSampleRow.test.d.ts +1 -0
  16. package/dist/__tests__/components/ScheduleCalendar.test.d.ts +1 -0
  17. package/dist/__tests__/components/SettingsModal.schema.test.d.ts +1 -0
  18. package/dist/__tests__/components/WellPlate.colors.test.d.ts +1 -0
  19. package/dist/__tests__/components/WellPlate.conditions.test.d.ts +1 -0
  20. package/dist/__tests__/components/WellPlate.geometry.test.d.ts +1 -0
  21. package/dist/__tests__/components/WellPlate.interaction.test.d.ts +1 -0
  22. package/dist/__tests__/components/WellPlate.legend.test.d.ts +1 -0
  23. package/dist/__tests__/components/WellPlate.rendering.test.d.ts +1 -0
  24. package/dist/__tests__/components/WellPlate.sampleDrop.test.d.ts +1 -0
  25. package/dist/__tests__/composables/autoGroup/classify.test.d.ts +1 -0
  26. package/dist/__tests__/composables/autoGroup/columns.test.d.ts +1 -0
  27. package/dist/__tests__/composables/autoGroup/compose.test.d.ts +1 -0
  28. package/dist/__tests__/composables/autoGroup/cooccurrence.test.d.ts +1 -0
  29. package/dist/__tests__/composables/autoGroup/fingerprint.test.d.ts +1 -0
  30. package/dist/__tests__/composables/autoGroup/integration.test.d.ts +1 -0
  31. package/dist/__tests__/composables/autoGroup/template.test.d.ts +1 -0
  32. package/dist/__tests__/composables/autoGroup/tokenize.test.d.ts +1 -0
  33. package/dist/__tests__/composables/useAutoGroupInputSources.test.d.ts +1 -0
  34. package/dist/__tests__/composables/useScheduleCalendarLayout.test.d.ts +1 -0
  35. package/dist/__tests__/docs/extractDocsComponents.test.d.ts +1 -0
  36. package/dist/__tests__/docs/extractDocsExports.test.d.ts +1 -0
  37. package/dist/__tests__/docs/extractDocsParsing.test.d.ts +1 -0
  38. package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +1 -0
  39. package/dist/__tests__/docs/extractDocsTheme.test.d.ts +1 -0
  40. package/dist/components/AppTopBar.navigation.d.ts +11 -0
  41. package/dist/components/BaseButton.vue.d.ts +1 -1
  42. package/dist/components/BaseCheckbox.vue.d.ts +1 -1
  43. package/dist/components/BaseInput.vue.d.ts +2 -2
  44. package/dist/components/BasePill.vue.d.ts +1 -1
  45. package/dist/components/BaseRadioGroup.vue.d.ts +1 -1
  46. package/dist/components/BaseSelect.vue.d.ts +1 -1
  47. package/dist/components/BaseSlider.vue.d.ts +2 -2
  48. package/dist/components/BaseTextarea.vue.d.ts +2 -2
  49. package/dist/components/BaseToggle.vue.d.ts +1 -1
  50. package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +2 -2
  51. package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +1 -1
  52. package/dist/components/ColorSlider.vue.d.ts +2 -2
  53. package/dist/components/ConcentrationInput.vue.d.ts +2 -2
  54. package/dist/components/DatePicker.vue.d.ts +1 -1
  55. package/dist/components/DateTimePicker.vue.d.ts +2 -2
  56. package/dist/components/DoseCalculatorVolumeField.vue.d.ts +15 -0
  57. package/dist/components/DropdownButton.vue.d.ts +1 -1
  58. package/dist/components/FileUploader.vue.d.ts +2 -2
  59. package/dist/components/FormulaInput.vue.d.ts +2 -2
  60. package/dist/components/IconButton.vue.d.ts +1 -1
  61. package/dist/components/LoadingSpinner.vue.d.ts +1 -1
  62. package/dist/components/MoleculeInput.vue.d.ts +2 -2
  63. package/dist/components/MultiSelect.vue.d.ts +1 -1
  64. package/dist/components/NumberInput.vue.d.ts +1 -1
  65. package/dist/components/PlateMapEditor.vue.d.ts +6 -6
  66. package/dist/components/PluginWorkspaceView.controls.d.ts +28 -0
  67. package/dist/components/PluginWorkspaceView.navigation.d.ts +29 -0
  68. package/dist/components/PluginWorkspaceView.props.d.ts +151 -0
  69. package/dist/components/PluginWorkspaceView.shell.d.ts +19 -0
  70. package/dist/components/PluginWorkspaceView.vue.d.ts +46 -195
  71. package/dist/components/ProgressBar.vue.d.ts +1 -1
  72. package/dist/components/ProtocolStep.presentation.d.ts +4 -0
  73. package/dist/components/ProtocolStepEditor.state.d.ts +18 -0
  74. package/dist/components/ProtocolStepParameterField.vue.d.ts +12 -0
  75. package/dist/components/ReagentList.presentation.d.ts +16 -0
  76. package/dist/components/ResourceCard.vue.d.ts +1 -1
  77. package/dist/components/SampleSelector.colors.d.ts +13 -0
  78. package/dist/components/SampleSelector.drag.d.ts +24 -0
  79. package/dist/components/SampleSelector.groups.d.ts +15 -0
  80. package/dist/components/SampleSelector.selection.d.ts +26 -0
  81. package/dist/components/SampleSelector.vue.d.ts +4 -1
  82. package/dist/components/SampleSelectorSampleRow.vue.d.ts +21 -0
  83. package/dist/components/SegmentedControl.vue.d.ts +1 -1
  84. package/dist/components/SequenceInput.vue.d.ts +2 -2
  85. package/dist/components/SequenceProgressBar.vue.d.ts +1 -1
  86. package/dist/components/SettingsModal.schema.d.ts +9 -0
  87. package/dist/components/StatusIndicator.vue.d.ts +1 -1
  88. package/dist/components/TagsInput.vue.d.ts +2 -2
  89. package/dist/components/TimePicker.vue.d.ts +2 -2
  90. package/dist/components/TimeRangeInput.vue.d.ts +1 -1
  91. package/dist/components/UnitInput.vue.d.ts +2 -2
  92. package/dist/components/WellPlate.colors.d.ts +9 -0
  93. package/dist/components/WellPlate.conditions.d.ts +26 -0
  94. package/dist/components/WellPlate.geometry.d.ts +23 -0
  95. package/dist/components/WellPlate.interaction.d.ts +71 -0
  96. package/dist/components/WellPlate.legend.d.ts +2 -0
  97. package/dist/components/WellPlate.rendering.d.ts +24 -0
  98. package/dist/components/WellPlate.sampleDrop.d.ts +8 -0
  99. package/dist/components/WellPlate.vue.d.ts +1 -1
  100. package/dist/components/index.js +2 -2
  101. package/dist/components/internal/ActionItemInternal.vue.d.ts +1 -1
  102. package/dist/components/internal/PlateMapEditorToolbarInternal.vue.d.ts +28 -0
  103. package/dist/{components-BhK-dW99.js → components-DtHA2bgp.js} +3754 -2991
  104. package/dist/components-DtHA2bgp.js.map +1 -0
  105. package/dist/composables/autoGroup/classKey.d.ts +4 -0
  106. package/dist/composables/autoGroup/classify.d.ts +28 -0
  107. package/dist/composables/autoGroup/colors.d.ts +2 -0
  108. package/dist/composables/autoGroup/columns.d.ts +10 -0
  109. package/dist/composables/autoGroup/compose.d.ts +8 -0
  110. package/dist/composables/autoGroup/cooccurrence.d.ts +2 -0
  111. package/dist/composables/autoGroup/csv-shim.d.ts +2 -0
  112. package/dist/composables/autoGroup/fingerprint.d.ts +3 -0
  113. package/dist/composables/autoGroup/index.d.ts +16 -0
  114. package/dist/composables/autoGroup/replicatePreGroup.d.ts +38 -0
  115. package/dist/composables/autoGroup/template.d.ts +15 -0
  116. package/dist/composables/autoGroup/tokenize.d.ts +8 -0
  117. package/dist/composables/autoGroupConstants.d.ts +1 -0
  118. package/dist/composables/autoGroupGrouping.d.ts +3 -0
  119. package/dist/composables/controlComponentBindings.d.ts +7 -0
  120. package/dist/composables/controlSchemaAdapters.d.ts +20 -0
  121. package/dist/composables/controlSchemaDoseDesign.d.ts +11 -0
  122. package/dist/composables/controlSchemaFormFields.d.ts +3 -0
  123. package/dist/composables/controlSchemaLayout.d.ts +7 -0
  124. package/dist/composables/controlSchemaModel.d.ts +5 -0
  125. package/dist/composables/controlSchemaNormalize.d.ts +15 -0
  126. package/dist/composables/controlSchemaTypes.d.ts +305 -0
  127. package/dist/composables/controlSchemaUtils.d.ts +9 -0
  128. package/dist/composables/controlWorkspaceOptions.d.ts +2 -0
  129. package/dist/composables/formBuilderSchema.d.ts +18 -0
  130. package/dist/composables/index.js +3 -3
  131. package/dist/composables/pluginEndpointBuilder.d.ts +13 -0
  132. package/dist/composables/protocolTemplateCatalog.d.ts +26 -0
  133. package/dist/composables/useAutoGroup.d.ts +61 -74
  134. package/dist/composables/useAutoGroupInputSources.d.ts +32 -0
  135. package/dist/composables/useBioTemplateControls.d.ts +1 -1
  136. package/dist/composables/useBioTemplatePresetWorkspace.d.ts +1 -1
  137. package/dist/composables/useBioTemplateWorkspace.d.ts +1 -1
  138. package/dist/composables/useControlSchema.d.ts +8 -346
  139. package/dist/composables/useControlWorkspace.d.ts +5 -0
  140. package/dist/composables/useForm.d.ts +2 -33
  141. package/dist/composables/useFormBuilder.d.ts +2 -9
  142. package/dist/composables/useFormValidation.d.ts +34 -0
  143. package/dist/composables/usePluginClient.d.ts +1 -4
  144. package/dist/composables/useProtocolTemplates.d.ts +2 -24
  145. package/dist/composables/useScheduleCalendarLayout.d.ts +49 -0
  146. package/dist/{composables-Bg7CFuNz.js → composables-Dlg8jenH.js} +33 -31
  147. package/dist/composables-Dlg8jenH.js.map +1 -0
  148. package/dist/index.js +4 -4
  149. package/dist/install.js +2 -2
  150. package/dist/styles.css +547 -516
  151. package/dist/templates/adapters.d.ts +14 -47
  152. package/dist/templates/assayLookups.d.ts +3 -0
  153. package/dist/templates/assayMatrixAdapters.d.ts +6 -0
  154. package/dist/templates/assayMatrixBuilder.d.ts +2 -0
  155. package/dist/templates/assayNormalizers.d.ts +4 -0
  156. package/dist/templates/builderDefaults.d.ts +1 -0
  157. package/dist/templates/builderIdUtils.d.ts +4 -0
  158. package/dist/templates/builderPresetControls.d.ts +10 -0
  159. package/dist/templates/builderReadUtils.d.ts +8 -0
  160. package/dist/templates/builders.d.ts +26 -67
  161. package/dist/templates/calibrationCurveAdapters.d.ts +4 -0
  162. package/dist/templates/calibrationCurveBuilder.d.ts +2 -0
  163. package/dist/templates/calibrationNormalizers.d.ts +5 -0
  164. package/dist/templates/componentBindingCatalog.d.ts +25 -0
  165. package/dist/templates/componentBindingHelpers.d.ts +17 -0
  166. package/dist/templates/componentDoseResponseProps.d.ts +3 -0
  167. package/dist/templates/componentGenericProps.d.ts +8 -0
  168. package/dist/templates/componentPlateHelpers.d.ts +5 -0
  169. package/dist/templates/componentPlateMapProps.d.ts +3 -0
  170. package/dist/templates/componentPropsFactory.d.ts +3 -0
  171. package/dist/templates/componentQpcrPlateProps.d.ts +3 -0
  172. package/dist/templates/componentTargetResolvers.d.ts +5 -0
  173. package/dist/templates/componentTemplateProps.d.ts +3 -0
  174. package/dist/templates/controlSchemaClone.d.ts +4 -0
  175. package/dist/templates/controlSchemaConstants.d.ts +10 -0
  176. package/dist/templates/controlSchemaMerge.d.ts +3 -0
  177. package/dist/templates/controlSchemaTargets.d.ts +17 -0
  178. package/dist/templates/controlSchemaTypes.d.ts +4 -0
  179. package/dist/templates/controlSchemas.d.ts +4 -4
  180. package/dist/templates/defaultBioTemplateBuilder.d.ts +2 -0
  181. package/dist/templates/doseResponseAdapters.d.ts +4 -0
  182. package/dist/templates/doseResponseBuilder.d.ts +2 -0
  183. package/dist/templates/elisaAssayCollectionBuilder.d.ts +2 -0
  184. package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +2 -0
  185. package/dist/templates/flowCytometryPanelBuilder.d.ts +2 -0
  186. package/dist/templates/flowNormalizers.d.ts +8 -0
  187. package/dist/templates/flowPanelAdapters.d.ts +4 -0
  188. package/dist/templates/index.js +1 -1
  189. package/dist/templates/instrumentRunAdapterHelpers.d.ts +8 -0
  190. package/dist/templates/instrumentRunAdapters.d.ts +8 -0
  191. package/dist/templates/instrumentRunBuilder.d.ts +2 -0
  192. package/dist/templates/lcmsBatchCollectionBuilder.d.ts +2 -0
  193. package/dist/templates/plateGeometry.d.ts +4 -0
  194. package/dist/templates/plateMapAdapters.d.ts +3 -0
  195. package/dist/templates/plateMapBuilder.d.ts +2 -0
  196. package/dist/templates/presetControlSchemas.d.ts +534 -0
  197. package/dist/templates/protocolAdapters.d.ts +5 -0
  198. package/dist/templates/protocolNormalizers.d.ts +6 -0
  199. package/dist/templates/protocolStepsBuilder.d.ts +2 -0
  200. package/dist/templates/qpcrAdapters.d.ts +5 -0
  201. package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +2 -0
  202. package/dist/templates/qpcrPlateBuilder.d.ts +2 -0
  203. package/dist/templates/reagentAdapters.d.ts +5 -0
  204. package/dist/templates/reagentListBuilder.d.ts +2 -0
  205. package/dist/templates/runNormalizers.d.ts +10 -0
  206. package/dist/templates/sampleNormalizers.d.ts +4 -0
  207. package/dist/templates/samplePrepAdapters.d.ts +4 -0
  208. package/dist/templates/samplePrepBuilder.d.ts +2 -0
  209. package/dist/templates/sampleSheetAdapters.d.ts +5 -0
  210. package/dist/templates/sampleSheetBuilder.d.ts +2 -0
  211. package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +2 -0
  212. package/dist/templates/targetedMetabolomicsHelpers.d.ts +5 -0
  213. package/dist/templates/templateAdapterTypes.d.ts +48 -0
  214. package/dist/templates/templateControlSchemas.d.ts +400 -0
  215. package/dist/templates/templateCreateOptions.d.ts +165 -0
  216. package/dist/templates/templateEnvelopes.d.ts +9 -0
  217. package/dist/templates/templatePackCollectionBuilder.d.ts +2 -0
  218. package/dist/templates/templatePresetCollectionBuilder.d.ts +18 -0
  219. package/dist/templates/templateQpcrTypes.d.ts +42 -0
  220. package/dist/templates/templateValidators.d.ts +13 -0
  221. package/dist/templates/timeCourseAdapters.d.ts +5 -0
  222. package/dist/templates/timeCourseBuilder.d.ts +2 -0
  223. package/dist/templates/types.d.ts +5 -250
  224. package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +2 -0
  225. package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +2 -0
  226. package/dist/{templates-BorLR_7p.js → templates-DtdUvJ4c.js} +3565 -3411
  227. package/dist/templates-DtdUvJ4c.js.map +1 -0
  228. package/dist/types/auto-group.d.ts +79 -9
  229. package/dist/types/componentLabTypes.d.ts +161 -0
  230. package/dist/types/componentWorkflowTypes.d.ts +150 -0
  231. package/dist/types/components.d.ts +2 -311
  232. package/dist/{useProtocolTemplates-n6AJqSqv.js → useProtocolTemplates-Bm5vyH4_.js} +1220 -454
  233. package/dist/useProtocolTemplates-Bm5vyH4_.js.map +1 -0
  234. package/package.json +1 -1
  235. package/src/__tests__/components/AppTopBar.navigation.test.ts +70 -0
  236. package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +53 -0
  237. package/src/__tests__/components/PlateMapEditorToolbarInternal.test.ts +54 -0
  238. package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +156 -0
  239. package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +102 -0
  240. package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +41 -0
  241. package/src/__tests__/components/ProtocolStep.presentation.test.ts +31 -0
  242. package/src/__tests__/components/ProtocolStepEditor.state.test.ts +165 -0
  243. package/src/__tests__/components/ProtocolStepParameterField.test.ts +44 -0
  244. package/src/__tests__/components/ReagentList.presentation.test.ts +68 -0
  245. package/src/__tests__/components/SampleSelector.colors.test.ts +49 -0
  246. package/src/__tests__/components/SampleSelector.drag.test.ts +100 -0
  247. package/src/__tests__/components/SampleSelector.groups.test.ts +81 -0
  248. package/src/__tests__/components/SampleSelector.selection.test.ts +70 -0
  249. package/src/__tests__/components/SampleSelector.test.ts +32 -0
  250. package/src/__tests__/components/SampleSelectorSampleRow.test.ts +37 -0
  251. package/src/__tests__/components/ScheduleCalendar.test.ts +44 -0
  252. package/src/__tests__/components/SettingsModal.schema.test.ts +97 -0
  253. package/src/__tests__/components/WellPlate.colors.test.ts +28 -0
  254. package/src/__tests__/components/WellPlate.conditions.test.ts +68 -0
  255. package/src/__tests__/components/WellPlate.geometry.test.ts +54 -0
  256. package/src/__tests__/components/WellPlate.interaction.test.ts +171 -0
  257. package/src/__tests__/components/WellPlate.legend.test.ts +13 -0
  258. package/src/__tests__/components/WellPlate.rendering.test.ts +122 -0
  259. package/src/__tests__/components/WellPlate.sampleDrop.test.ts +70 -0
  260. package/src/__tests__/composables/autoGroup/classify.test.ts +107 -0
  261. package/src/__tests__/composables/autoGroup/columns.test.ts +135 -0
  262. package/src/__tests__/composables/autoGroup/compose.test.ts +227 -0
  263. package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +91 -0
  264. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +50 -0
  265. package/src/__tests__/composables/autoGroup/integration.test.ts +79 -0
  266. package/src/__tests__/composables/autoGroup/template.test.ts +70 -0
  267. package/src/__tests__/composables/autoGroup/tokenize.test.ts +33 -0
  268. package/src/__tests__/composables/useAutoGroup.test.ts +129 -625
  269. package/src/__tests__/composables/useAutoGroupInputSources.test.ts +107 -0
  270. package/src/__tests__/composables/useControlSchema.test.ts +23 -0
  271. package/src/__tests__/composables/useScheduleCalendarLayout.test.ts +89 -0
  272. package/src/__tests__/docs/extractDocsComponents.test.ts +142 -0
  273. package/src/__tests__/docs/extractDocsExports.test.ts +77 -0
  274. package/src/__tests__/docs/extractDocsParsing.test.ts +69 -0
  275. package/src/__tests__/docs/extractDocsTemplates.test.ts +54 -0
  276. package/src/__tests__/docs/extractDocsTheme.test.ts +89 -0
  277. package/src/__tests__/docs/frontendDocsCatalog.test.ts +1 -1
  278. package/src/__tests__/fixtures/auto-group/mixed-lc-ms-batch.txt +187 -0
  279. package/src/components/AppSidebar.vue +2 -6
  280. package/src/components/AppTopBar.navigation.ts +62 -0
  281. package/src/components/AppTopBar.vue +17 -44
  282. package/src/components/AutoGroupModal.story.vue +50 -0
  283. package/src/components/AutoGroupModal.vue +441 -158
  284. package/src/components/ControlWorkspaceView.vue +2 -6
  285. package/src/components/DoseCalculator.vue +13 -73
  286. package/src/components/DoseCalculatorVolumeField.vue +61 -0
  287. package/src/components/ExperimentTimeline.vue +6 -31
  288. package/src/components/FormBuilder.vue +2 -7
  289. package/src/components/PlateMapEditor.vue +32 -106
  290. package/src/components/PluginWorkspaceView.controls.ts +182 -0
  291. package/src/components/PluginWorkspaceView.navigation.ts +106 -0
  292. package/src/components/PluginWorkspaceView.props.ts +174 -0
  293. package/src/components/PluginWorkspaceView.shell.ts +66 -0
  294. package/src/components/PluginWorkspaceView.vue +85 -404
  295. package/src/components/ProtocolStep.presentation.ts +31 -0
  296. package/src/components/ProtocolStepEditor.state.ts +104 -0
  297. package/src/components/ProtocolStepEditor.vue +48 -179
  298. package/src/components/ProtocolStepParameterField.vue +134 -0
  299. package/src/components/ReagentList.presentation.ts +105 -0
  300. package/src/components/ReagentList.vue +16 -79
  301. package/src/components/SampleSelector.colors.ts +43 -0
  302. package/src/components/SampleSelector.drag.ts +164 -0
  303. package/src/components/SampleSelector.groups.ts +109 -0
  304. package/src/components/SampleSelector.selection.ts +103 -0
  305. package/src/components/SampleSelector.vue +82 -349
  306. package/src/components/SampleSelectorSampleRow.vue +64 -0
  307. package/src/components/ScheduleCalendar.vue +44 -199
  308. package/src/components/SettingsModal.schema.ts +71 -0
  309. package/src/components/SettingsModal.vue +16 -46
  310. package/src/components/WellPlate.colors.ts +56 -0
  311. package/src/components/WellPlate.conditions.ts +100 -0
  312. package/src/components/WellPlate.geometry.ts +91 -0
  313. package/src/components/WellPlate.interaction.ts +272 -0
  314. package/src/components/WellPlate.legend.ts +8 -0
  315. package/src/components/WellPlate.rendering.ts +105 -0
  316. package/src/components/WellPlate.sampleDrop.ts +73 -0
  317. package/src/components/WellPlate.vue +102 -550
  318. package/src/components/internal/PlateMapEditorToolbarInternal.vue +128 -0
  319. package/src/composables/autoGroup/classKey.ts +5 -0
  320. package/src/composables/autoGroup/classify.ts +205 -0
  321. package/src/composables/autoGroup/colors.ts +6 -0
  322. package/src/composables/autoGroup/columns.ts +226 -0
  323. package/src/composables/autoGroup/compose.ts +156 -0
  324. package/src/composables/autoGroup/cooccurrence.ts +46 -0
  325. package/src/composables/autoGroup/csv-shim.ts +44 -0
  326. package/src/composables/autoGroup/fingerprint.ts +49 -0
  327. package/src/composables/autoGroup/index.ts +20 -0
  328. package/src/composables/autoGroup/replicatePreGroup.ts +90 -0
  329. package/src/composables/autoGroup/template.ts +126 -0
  330. package/src/composables/autoGroup/tokenize.ts +41 -0
  331. package/src/composables/autoGroup/vocab.json +67 -0
  332. package/src/composables/autoGroupConstants.ts +4 -0
  333. package/src/composables/autoGroupGrouping.ts +148 -0
  334. package/src/composables/controlComponentBindings.ts +80 -0
  335. package/src/composables/controlSchemaAdapters.ts +196 -0
  336. package/src/composables/controlSchemaDoseDesign.ts +215 -0
  337. package/src/composables/controlSchemaFormFields.ts +61 -0
  338. package/src/composables/controlSchemaLayout.ts +59 -0
  339. package/src/composables/controlSchemaModel.ts +163 -0
  340. package/src/composables/controlSchemaNormalize.ts +101 -0
  341. package/src/composables/controlSchemaTypes.ts +364 -0
  342. package/src/composables/controlSchemaUtils.ts +36 -0
  343. package/src/composables/controlWorkspaceOptions.ts +21 -0
  344. package/src/composables/formBuilderSchema.ts +153 -0
  345. package/src/composables/pluginEndpointBuilder.ts +203 -0
  346. package/src/composables/protocolTemplateCatalog.ts +325 -0
  347. package/src/composables/useAutoGroup.ts +395 -549
  348. package/src/composables/useAutoGroupInputSources.ts +147 -0
  349. package/src/composables/useBioTemplateControls.ts +1 -1
  350. package/src/composables/useBioTemplatePresetWorkspace.ts +1 -1
  351. package/src/composables/useBioTemplateWorkspace.ts +1 -1
  352. package/src/composables/useControlSchema.ts +64 -1312
  353. package/src/composables/useControlWorkspace.ts +201 -0
  354. package/src/composables/useForm.ts +5 -187
  355. package/src/composables/useFormBuilder.ts +11 -153
  356. package/src/composables/useFormValidation.ts +154 -0
  357. package/src/composables/usePluginClient.ts +10 -193
  358. package/src/composables/useProtocolTemplates.ts +10 -328
  359. package/src/composables/useScheduleCalendarLayout.ts +287 -0
  360. package/src/styles/components/auto-group-modal.css +248 -310
  361. package/src/templates/adapters.ts +89 -930
  362. package/src/templates/assayLookups.ts +33 -0
  363. package/src/templates/assayMatrixAdapters.ts +78 -0
  364. package/src/templates/assayMatrixBuilder.ts +59 -0
  365. package/src/templates/assayNormalizers.ts +34 -0
  366. package/src/templates/builderDefaults.ts +11 -0
  367. package/src/templates/builderIdUtils.ts +20 -0
  368. package/src/templates/builderPresetControls.ts +165 -0
  369. package/src/templates/builderReadUtils.ts +57 -0
  370. package/src/templates/builders.ts +122 -2350
  371. package/src/templates/calibrationCurveAdapters.ts +59 -0
  372. package/src/templates/calibrationCurveBuilder.ts +99 -0
  373. package/src/templates/calibrationNormalizers.ts +60 -0
  374. package/src/templates/componentBindingCatalog.ts +90 -0
  375. package/src/templates/componentBindingHelpers.ts +93 -0
  376. package/src/templates/componentBindings.ts +12 -461
  377. package/src/templates/componentDoseResponseProps.ts +42 -0
  378. package/src/templates/componentGenericProps.ts +77 -0
  379. package/src/templates/componentPlateHelpers.ts +29 -0
  380. package/src/templates/componentPlateMapProps.ts +32 -0
  381. package/src/templates/componentPropsFactory.ts +21 -0
  382. package/src/templates/componentQpcrPlateProps.ts +28 -0
  383. package/src/templates/componentTargetResolvers.ts +69 -0
  384. package/src/templates/componentTemplateProps.ts +78 -0
  385. package/src/templates/controlSchemaClone.ts +32 -0
  386. package/src/templates/controlSchemaConstants.ts +11 -0
  387. package/src/templates/controlSchemaMerge.ts +40 -0
  388. package/src/templates/controlSchemaTargets.ts +87 -0
  389. package/src/templates/controlSchemaTypes.ts +20 -0
  390. package/src/templates/controlSchemas.ts +22 -704
  391. package/src/templates/defaultBioTemplateBuilder.ts +124 -0
  392. package/src/templates/doseResponseAdapters.ts +45 -0
  393. package/src/templates/doseResponseBuilder.ts +44 -0
  394. package/src/templates/elisaAssayCollectionBuilder.ts +62 -0
  395. package/src/templates/flowCytometryAssayCollectionBuilder.ts +41 -0
  396. package/src/templates/flowCytometryPanelBuilder.ts +53 -0
  397. package/src/templates/flowNormalizers.ts +58 -0
  398. package/src/templates/flowPanelAdapters.ts +58 -0
  399. package/src/templates/instrumentRunAdapterHelpers.ts +94 -0
  400. package/src/templates/instrumentRunAdapters.ts +163 -0
  401. package/src/templates/instrumentRunBuilder.ts +97 -0
  402. package/src/templates/lcmsBatchCollectionBuilder.ts +38 -0
  403. package/src/templates/plateGeometry.ts +62 -0
  404. package/src/templates/plateMapAdapters.ts +36 -0
  405. package/src/templates/plateMapBuilder.ts +43 -0
  406. package/src/templates/presetControlSchemas.ts +258 -0
  407. package/src/templates/protocolAdapters.ts +69 -0
  408. package/src/templates/protocolNormalizers.ts +37 -0
  409. package/src/templates/protocolStepsBuilder.ts +36 -0
  410. package/src/templates/qpcrAdapters.ts +104 -0
  411. package/src/templates/qpcrExpressionCollectionBuilder.ts +33 -0
  412. package/src/templates/qpcrPlateBuilder.ts +96 -0
  413. package/src/templates/reagentAdapters.ts +77 -0
  414. package/src/templates/reagentListBuilder.ts +30 -0
  415. package/src/templates/runNormalizers.ts +63 -0
  416. package/src/templates/sampleNormalizers.ts +58 -0
  417. package/src/templates/samplePrepAdapters.ts +63 -0
  418. package/src/templates/samplePrepBuilder.ts +51 -0
  419. package/src/templates/sampleSheetAdapters.ts +75 -0
  420. package/src/templates/sampleSheetBuilder.ts +23 -0
  421. package/src/templates/targetedMetabolomicsCollectionBuilder.ts +79 -0
  422. package/src/templates/targetedMetabolomicsHelpers.ts +102 -0
  423. package/src/templates/templateAdapterTypes.ts +58 -0
  424. package/src/templates/templateControlSchemas.ts +320 -0
  425. package/src/templates/templateCreateOptions.ts +208 -0
  426. package/src/templates/templateEnvelopes.ts +137 -0
  427. package/src/templates/templatePackCollectionBuilder.ts +23 -0
  428. package/src/templates/templatePresetCollectionBuilder.ts +139 -0
  429. package/src/templates/templateQpcrTypes.ts +48 -0
  430. package/src/templates/templateValidators.ts +414 -0
  431. package/src/templates/timeCourseAdapters.ts +73 -0
  432. package/src/templates/timeCourseBuilder.ts +64 -0
  433. package/src/templates/types.ts +79 -275
  434. package/src/templates/wellPlateScreenCollectionBuilder.ts +36 -0
  435. package/src/templates/westernBlotAssayCollectionBuilder.ts +68 -0
  436. package/src/types/auto-group.ts +107 -9
  437. package/src/types/componentLabTypes.ts +235 -0
  438. package/src/types/componentWorkflowTypes.ts +190 -0
  439. package/src/types/components.ts +74 -424
  440. package/dist/components-BhK-dW99.js.map +0 -1
  441. package/dist/composables-Bg7CFuNz.js.map +0 -1
  442. package/dist/templates-BorLR_7p.js.map +0 -1
  443. package/dist/useProtocolTemplates-n6AJqSqv.js.map +0 -1
package/dist/styles.css CHANGED
@@ -10355,6 +10355,8 @@ to {
10355
10355
  display: flex;
10356
10356
  flex-direction: column;
10357
10357
  }
10358
+
10359
+ /* --- Paste: free-form textarea (the self-designed input path) --- */
10358
10360
  .mint-auto-group__paste {
10359
10361
  position: relative;
10360
10362
  }
@@ -10573,328 +10575,377 @@ to {
10573
10575
  flex-wrap: wrap;
10574
10576
  gap: 0.375rem;
10575
10577
  }
10576
-
10577
- /* --- Outlier step --- */
10578
- .mint-auto-group__outlier-step {
10579
- display: flex;
10580
- flex-direction: column;
10581
- gap: 0.75rem;
10582
- }
10583
- .mint-auto-group__outlier-banner {
10584
- padding: 0.75rem 1rem;
10585
- background: var(--mint-warning-bg);
10586
- border: 1px solid rgba(245, 158, 11, 0.3);
10587
- border-radius: var(--radius-md);
10588
- font-size: 0.8125rem;
10589
- color: var(--text-primary);
10590
- }
10591
- .mint-auto-group__outlier-banner code {
10578
+ .mint-auto-group__field-value {
10592
10579
  font-family: 'Fira Code', monospace;
10593
- background: var(--bg-tertiary);
10594
- padding: 0.125rem 0.375rem;
10595
- border-radius: var(--radius-sm);
10596
- font-size: 0.8125rem;
10597
- }
10598
- .mint-auto-group__outlier-batch {
10599
- display: flex;
10600
- gap: 0.5rem;
10580
+ font-size: 11.5px;
10581
+ background: var(--bg-primary);
10582
+ border: 1px solid var(--border);
10583
+ padding: 2px 8px;
10584
+ border-radius: 9999px;
10585
+ color: var(--text-secondary);
10601
10586
  }
10602
- .mint-auto-group__outlier-list {
10587
+
10588
+ /* --- Navigation --- */
10589
+ .mint-auto-group__nav {
10603
10590
  display: flex;
10604
- flex-direction: column;
10591
+ align-items: center;
10605
10592
  gap: 0.5rem;
10606
- max-height: 300px;
10607
- overflow-y: auto;
10608
10593
  }
10609
- .mint-auto-group__outlier-item {
10610
- display: flex;
10611
- align-items: center;
10612
- justify-content: space-between;
10613
- padding: 0.5rem 0.75rem;
10614
- background: var(--bg-secondary);
10615
- border: 1px solid var(--border-color);
10616
- border-radius: var(--radius);
10594
+ .mint-auto-group__nav-spacer {
10595
+ flex: 1;
10617
10596
  }
10618
- .mint-auto-group__outlier-info {
10619
- display: flex;
10620
- align-items: center;
10621
- gap: 0.5rem;
10622
- min-width: 0;
10597
+
10598
+ /* --- Workspace step --- */
10599
+ .mint-auto-group__workspace { display: grid; grid-template-columns: 220px 1fr; gap: 16px; min-height: 480px; position: relative;
10623
10600
  }
10624
- .mint-auto-group__outlier-name {
10625
- font-family: 'Fira Code', monospace;
10626
- font-size: 0.8125rem;
10627
- color: var(--text-primary);
10628
- overflow: hidden;
10629
- text-overflow: ellipsis;
10630
- white-space: nowrap;
10601
+ .mint-auto-group__classes { background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px; display: flex; flex-direction: column; gap: 4px;
10631
10602
  }
10632
- .mint-auto-group__outlier-badge {
10633
- font-size: 0.6875rem;
10634
- padding: 0.125rem 0.375rem;
10635
- border-radius: var(--radius-sm);
10636
- background: var(--bg-tertiary);
10637
- color: var(--text-muted);
10638
- white-space: nowrap;
10639
- flex-shrink: 0;
10603
+ .mint-auto-group__classes h3 { font-size: 11px; letter-spacing: .08em; color: var(--text-muted); text-transform: uppercase; margin: 0 0 8px;
10640
10604
  }
10641
- .mint-auto-group__outlier-actions {
10642
- display: flex;
10643
- gap: 0.25rem;
10644
- flex-shrink: 0;
10645
- margin-left: 0.75rem;
10605
+ .mint-auto-group__class { display: grid; grid-template-columns: 12px 1fr auto; align-items: center; gap: 8px; padding: 8px 10px; border-radius: var(--radius-sm); cursor: pointer; background: transparent; border: 1px solid transparent; font-size: 13px; color: var(--text-primary); text-align: left;
10646
10606
  }
10647
- .mint-auto-group__action-btn {
10648
- font-size: 0.6875rem;
10649
- padding: 0.25rem 0.5rem;
10650
- border: 1px solid var(--border-color);
10651
- border-radius: var(--radius-sm);
10652
- background: var(--bg-secondary);
10653
- color: var(--text-secondary);
10654
- cursor: pointer;
10655
- transition: all 0.1s;
10607
+ .mint-auto-group__class:hover { background: var(--bg-tertiary);
10656
10608
  }
10657
- .mint-auto-group__action-btn:hover {
10658
- background: var(--bg-hover);
10609
+ .mint-auto-group__class--active { background: var(--color-primary-soft); border-color: var(--color-primary); color: var(--color-primary); font-weight: 500;
10659
10610
  }
10660
- .mint-auto-group__action-btn:focus-visible {
10661
- outline: 2px solid var(--color-primary);
10662
- outline-offset: 1px;
10611
+ .mint-auto-group__class--qc .mint-auto-group__class-dot { background: var(--mint-warning);
10663
10612
  }
10664
- .mint-auto-group__action-btn--active {
10665
- background: var(--color-primary-soft);
10666
- border-color: var(--color-primary);
10667
- color: var(--color-primary);
10668
- font-weight: 500;
10613
+ .mint-auto-group__class-dot { width: 8px; height: 8px; border-radius: 9999px; background: var(--text-muted);
10669
10614
  }
10670
- .mint-auto-group__action-btn--active.mint-auto-group__action-btn--exclude {
10671
- background: var(--mint-error-bg);
10672
- border-color: var(--mint-error);
10673
- color: var(--mint-error);
10615
+ .mint-auto-group__class-count { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-secondary); background: var(--bg-secondary); padding: 2px 8px; border-radius: 9999px; border: 1px solid var(--border);
10674
10616
  }
10675
- .mint-auto-group__action-btn--active.mint-auto-group__action-btn--qc {
10676
- background: rgba(107, 114, 128, 0.12);
10677
- border-color: var(--text-secondary);
10678
- color: var(--text-secondary);
10617
+ .mint-auto-group__schema { display: flex; flex-direction: column; gap: 12px; min-width: 0;
10679
10618
  }
10680
10619
 
10681
- /* --- Field step --- */
10682
- .mint-auto-group__field-step {
10683
- display: flex;
10684
- flex-direction: column;
10685
- gap: 1rem;
10620
+ /* --- Suggestion banner --- */
10621
+ .mint-auto-group__suggest { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--radius); border: 1px dashed var(--color-primary); background: var(--color-primary-soft); color: var(--color-primary); font-size: 12.5px;
10686
10622
  }
10687
- .mint-auto-group__field-grid {
10688
- display: grid;
10689
- grid-template-columns: repeat(2, 1fr);
10690
- gap: 0.75rem;
10623
+ .mint-auto-group__suggest-btn { margin-left: 8px; background: var(--bg-primary); border: 1px solid var(--color-primary); color: var(--color-primary); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 12px;
10691
10624
  }
10692
- @media (max-width: 600px) {
10693
- .mint-auto-group__field-grid {
10694
- grid-template-columns: 1fr;
10625
+ .mint-auto-group__suggest-btn--ghost { border-color: var(--border); color: var(--text-secondary);
10695
10626
  }
10627
+
10628
+ /* --- 3-stat strip (Option B redesign) ---
10629
+ *
10630
+ * Three peer stats at the top of the schema panel:
10631
+ * Groups (primary, with factor-chip composition below)
10632
+ * Samples (active class size · class label · token count)
10633
+ * Avg / group (with min/max sub)
10634
+ *
10635
+ * Replaces the old schema header + group summary bar. The strip is a
10636
+ * single rounded card with 1px gap dividers so the three cells read as
10637
+ * a unit, not three floating panels. */
10638
+ .mint-auto-group__stats {
10639
+ display: grid;
10640
+ grid-template-columns: repeat(3, 1fr);
10641
+ gap: 1px;
10642
+ background: var(--border);
10643
+ border: 1px solid var(--border);
10644
+ border-radius: var(--radius);
10645
+ overflow: hidden;
10696
10646
  }
10697
- .mint-auto-group__field-card {
10698
- padding: 0.75rem;
10699
- border: 1px solid var(--border-color);
10700
- border-radius: var(--radius-md);
10701
- background: var(--bg-secondary);
10702
- transition: border-color 0.15s, box-shadow 0.15s;
10647
+ .mint-auto-group__stat {
10648
+ background: var(--bg-primary);
10649
+ padding: 12px 14px;
10650
+ min-width: 0;
10703
10651
  }
10704
- .mint-auto-group__field-card--enabled {
10705
- border-color: var(--color-primary);
10706
- box-shadow: 0 0 0 1px var(--color-primary-soft);
10652
+ .mint-auto-group__stat-v {
10653
+ font-size: 22px;
10654
+ font-weight: 700;
10655
+ color: var(--text-primary);
10656
+ line-height: 1;
10657
+ font-variant-numeric: tabular-nums;
10707
10658
  }
10708
- .mint-auto-group__field-header {
10709
- display: flex;
10710
- align-items: center;
10711
- justify-content: space-between;
10712
- margin-bottom: 0.5rem;
10659
+ .mint-auto-group__stat--primary .mint-auto-group__stat-v { color: var(--color-primary);
10660
+ }
10661
+ .mint-auto-group__stat-l {
10662
+ font-size: 11px;
10663
+ color: var(--text-muted);
10664
+ text-transform: uppercase;
10665
+ letter-spacing: 0.05em;
10666
+ margin-top: 4px;
10667
+ font-weight: 600;
10713
10668
  }
10714
- .mint-auto-group__field-toggle {
10669
+ .mint-auto-group__stat-sub {
10670
+ margin-top: 8px;
10715
10671
  display: flex;
10672
+ flex-wrap: wrap;
10673
+ gap: 4px;
10716
10674
  align-items: center;
10717
- gap: 0.375rem;
10718
- cursor: pointer;
10719
- font-size: 0.8125rem;
10675
+ font-size: 11.5px;
10720
10676
  color: var(--text-secondary);
10677
+ min-height: 22px;
10721
10678
  }
10722
- .mint-auto-group__field-toggle input {
10723
- accent-color: var(--color-primary);
10724
- }
10725
- .mint-auto-group__field-toggle-label {
10726
- user-select: none;
10727
- }
10728
- .mint-auto-group__field-cardinality {
10729
- font-size: 0.6875rem;
10679
+ .mint-auto-group__stat-sub--muted {
10730
10680
  color: var(--text-muted);
10681
+ font-size: 11.5px;
10731
10682
  }
10732
- .mint-auto-group__field-name-input {
10733
- margin-bottom: 0.5rem;
10734
- }
10735
- .mint-auto-group__field-values {
10736
- display: flex;
10737
- flex-wrap: wrap;
10738
- gap: 0.25rem;
10739
- max-height: 4.5rem;
10740
- overflow-y: auto;
10683
+ .mint-auto-group__stat-empty {
10684
+ color: var(--text-muted);
10685
+ font-style: italic;
10741
10686
  }
10742
- .mint-auto-group__field-value {
10743
- font-size: 0.6875rem;
10744
- padding: 0.125rem 0.375rem;
10745
- border-radius: var(--radius-sm);
10746
- background: var(--bg-tertiary);
10687
+ .mint-auto-group__stat-empty strong {
10747
10688
  color: var(--text-secondary);
10689
+ font-style: normal;
10690
+ font-weight: 600;
10691
+ }
10692
+ .mint-auto-group__group-chip {
10693
+ font-size: 10.5px;
10748
10694
  font-family: 'Fira Code', monospace;
10749
- max-width: 100%;
10750
- overflow: hidden;
10751
- text-overflow: ellipsis;
10695
+ padding: 2px 7px;
10696
+ border-radius: 9999px;
10697
+ background: var(--color-primary-soft);
10698
+ color: var(--color-primary);
10752
10699
  white-space: nowrap;
10700
+ line-height: 1.4;
10753
10701
  }
10754
- .mint-auto-group__field-more {
10755
- font-size: 0.6875rem;
10756
- padding: 0.125rem 0.375rem;
10757
- color: var(--text-muted);
10758
- font-style: italic;
10702
+
10703
+ /* --- QC routing radio group (replaces the two checkboxes) --- */
10704
+ .mint-auto-group__routing {
10705
+ margin-top: 14px;
10706
+ padding-top: 14px;
10707
+ border-top: 1px solid var(--border);
10759
10708
  }
10760
- .mint-auto-group__field-summary {
10761
- font-size: 0.8125rem;
10762
- color: var(--text-secondary);
10763
- padding: 0.5rem 0.75rem;
10764
- background: var(--bg-tertiary);
10765
- border-radius: var(--radius);
10709
+ .mint-auto-group__routing-head {
10710
+ margin: 0 0 8px;
10711
+ font-size: 11px;
10712
+ text-transform: uppercase;
10713
+ letter-spacing: 0.05em;
10714
+ color: var(--text-muted);
10715
+ font-weight: 600;
10766
10716
  }
10767
- .mint-auto-group__field-summary strong {
10717
+ .mint-auto-group__routing-radio {
10718
+ display: flex;
10719
+ align-items: flex-start;
10720
+ gap: 8px;
10721
+ font-size: 12.5px;
10768
10722
  color: var(--text-primary);
10723
+ padding: 5px 0;
10724
+ cursor: pointer;
10725
+ line-height: 1.4;
10769
10726
  }
10770
- .mint-auto-group__field-warning {
10771
- font-size: 0.8125rem;
10772
- color: var(--mint-warning);
10773
- padding: 0.5rem 0.75rem;
10774
- background: var(--mint-warning-bg);
10775
- border-radius: var(--radius);
10727
+ .mint-auto-group__routing-radio input {
10728
+ margin-top: 2px;
10729
+ accent-color: var(--color-primary);
10730
+ flex-shrink: 0;
10731
+ }
10732
+ .mint-auto-group__routing-radio small {
10733
+ display: block;
10734
+ color: var(--text-muted);
10735
+ font-size: 11px;
10736
+ margin-top: 1px;
10776
10737
  }
10777
10738
 
10778
- /* --- Preview step --- */
10779
- .mint-auto-group__preview-step {
10739
+ /* --- Compact token table (replaces the horizontal cards row) ---
10740
+ *
10741
+ * One row per token position. Lets users scan a 6+ token batch without
10742
+ * horizontal scrolling and without each row carrying redundant card chrome.
10743
+ * Click the row to open the popover (rename, role override, value ops).
10744
+ * The Use checkbox lives inline; @click.stop on the label prevents
10745
+ * accidental popover triggering when toggling Use. */
10746
+ .mint-auto-group__token-table {
10747
+ flex: 1;
10748
+ min-height: 0;
10780
10749
  display: flex;
10781
10750
  flex-direction: column;
10782
- gap: 1rem;
10783
- }
10784
- .mint-auto-group__preview-summary {
10785
- display: flex;
10786
- flex-wrap: wrap;
10787
- gap: 0.5rem 1rem;
10788
- padding: 0.75rem 1rem;
10789
- background: var(--bg-tertiary);
10790
- border-radius: var(--radius-md);
10791
- }
10792
- .mint-auto-group__preview-stat {
10793
- font-size: 0.8125rem;
10794
- color: var(--text-secondary);
10751
+ border: 1px solid var(--border);
10752
+ border-radius: var(--radius);
10753
+ background: var(--bg-primary);
10754
+ overflow: auto;
10795
10755
  }
10796
- .mint-auto-group__preview-stat strong {
10756
+ .mint-auto-group__token-row {
10757
+ display: grid;
10758
+ /* Column widths chosen to fit in the lg modal's ~440px schema panel.
10759
+ * Token# stays narrow (single digit), Name + Preview share remaining
10760
+ * flex space, Role pill is fixed for badge stability, # uses a glyph
10761
+ * header so 32px is enough, Use is the checkbox, then the ⋯ trigger. */
10762
+ grid-template-columns: 28px minmax(0, 1fr) 76px 48px minmax(0, 1.4fr) 28px 18px;
10763
+ align-items: center;
10764
+ gap: 8px;
10765
+ padding: 9px 12px;
10766
+ background: transparent;
10767
+ border: 0;
10768
+ border-bottom: 1px solid var(--border);
10769
+ font-size: 12.5px;
10797
10770
  color: var(--text-primary);
10771
+ text-align: left;
10772
+ cursor: pointer;
10773
+ width: 100%;
10774
+ font-family: inherit;
10775
+ transition: background-color 150ms ease;
10798
10776
  }
10799
- .mint-auto-group__preview-stat--excluded strong {
10800
- color: var(--mint-error);
10777
+ .mint-auto-group__token-row:last-child { border-bottom: 0;
10801
10778
  }
10802
- .mint-auto-group__preview-groups {
10803
- display: flex;
10804
- flex-direction: column;
10805
- gap: 0.5rem;
10806
- max-height: 20rem;
10807
- overflow-y: auto;
10779
+ .mint-auto-group__token-row:hover { background: var(--bg-secondary);
10808
10780
  }
10809
- .mint-auto-group__preview-group {
10810
- border: 1px solid var(--border-color);
10811
- border-radius: var(--radius);
10812
- overflow: hidden;
10781
+ .mint-auto-group__token-row:focus-visible {
10782
+ outline: 2px solid var(--color-primary);
10783
+ outline-offset: -2px;
10813
10784
  }
10814
- .mint-auto-group__preview-group[open] {
10815
- background: var(--bg-secondary);
10785
+ .mint-auto-group__token-row--active { background: var(--color-primary-soft);
10816
10786
  }
10817
- .mint-auto-group__preview-group-header {
10818
- display: flex;
10819
- align-items: center;
10820
- gap: 0.5rem;
10821
- padding: 0.5rem 0.75rem;
10822
- cursor: pointer;
10823
- font-size: 0.8125rem;
10824
- user-select: none;
10825
- min-width: 0;
10787
+ .mint-auto-group__token-row--head {
10788
+ cursor: default;
10789
+ background: var(--bg-secondary);
10790
+ font-size: 11px;
10791
+ font-weight: 600;
10792
+ text-transform: uppercase;
10793
+ letter-spacing: 0.05em;
10794
+ color: var(--text-muted);
10795
+ padding: 8px 14px;
10826
10796
  }
10827
- .mint-auto-group__preview-group-header:hover {
10828
- background: var(--bg-hover);
10797
+ .mint-auto-group__token-row--head:hover { background: var(--bg-secondary);
10829
10798
  }
10830
- .mint-auto-group__preview-dot {
10831
- width: 0.625rem;
10832
- height: 0.625rem;
10833
- border-radius: 50%;
10834
- flex-shrink: 0;
10799
+ .mint-auto-group__token-ix {
10800
+ font-family: 'Fira Code', monospace;
10801
+ font-size: 12px;
10802
+ color: var(--text-muted);
10835
10803
  }
10836
- .mint-auto-group__preview-group-name {
10804
+ .mint-auto-group__token-nm {
10837
10805
  font-weight: 500;
10838
- color: var(--text-primary);
10839
10806
  overflow: hidden;
10840
10807
  text-overflow: ellipsis;
10841
10808
  white-space: nowrap;
10842
10809
  min-width: 0;
10843
10810
  }
10844
- .mint-auto-group__preview-group-count {
10845
- font-size: 0.6875rem;
10846
- font-weight: 500;
10847
- padding: 0.0625rem 0.375rem;
10848
- border-radius: var(--radius-sm);
10849
- margin-left: auto;
10811
+ .mint-auto-group__token-unique {
10812
+ font-family: 'Fira Code', monospace;
10813
+ font-size: 12.5px;
10814
+ color: var(--text-secondary);
10815
+ text-align: right;
10816
+ font-variant-numeric: tabular-nums;
10850
10817
  }
10851
- .mint-auto-group__preview-samples {
10852
- display: flex;
10853
- flex-wrap: wrap;
10854
- gap: 0.25rem;
10855
- padding: 0.5rem 0.75rem;
10856
- border-top: 1px solid var(--border-light);
10818
+ .mint-auto-group__token-num { text-align: right;
10857
10819
  }
10858
- .mint-auto-group__preview-sample {
10859
- font-size: 0.75rem;
10820
+ .mint-auto-group__token-preview {
10860
10821
  font-family: 'Fira Code', monospace;
10861
- padding: 0.125rem 0.375rem;
10862
- border-radius: var(--radius-sm);
10863
- background: var(--bg-tertiary);
10822
+ font-size: 11.5px;
10864
10823
  color: var(--text-secondary);
10824
+ overflow: hidden;
10825
+ text-overflow: ellipsis;
10826
+ white-space: nowrap;
10827
+ min-width: 0;
10865
10828
  }
10866
- .mint-auto-group__preview-sample--excluded {
10867
- opacity: 0.5;
10868
- text-decoration: line-through;
10829
+ .mint-auto-group__token-more {
10830
+ color: var(--text-muted);
10831
+ font-style: italic;
10869
10832
  }
10870
-
10871
- /* --- Excluded section --- */
10872
- .mint-auto-group__preview-excluded {
10873
- border-top: 1px solid var(--border-color);
10874
- padding-top: 0.75rem;
10833
+ .mint-auto-group__token-use,
10834
+ .mint-auto-group__token-use-head { display: flex; justify-content: center;
10875
10835
  }
10876
- .mint-auto-group__preview-excluded-title {
10877
- font-size: 0.75rem;
10878
- font-weight: 500;
10836
+ .mint-auto-group__token-use { cursor: pointer;
10837
+ }
10838
+ .mint-auto-group__token-use input {
10839
+ width: 16px;
10840
+ height: 16px;
10841
+ cursor: pointer;
10842
+ accent-color: var(--color-primary);
10843
+ }
10844
+ .mint-auto-group__token-trigger {
10879
10845
  color: var(--text-muted);
10880
- text-transform: uppercase;
10881
- letter-spacing: 0.05em;
10882
- margin-bottom: 0.5rem;
10846
+ text-align: center;
10847
+ font-size: 14px;
10848
+ user-select: none;
10883
10849
  }
10884
- .mint-auto-group__preview-excluded-list {
10885
- display: flex;
10886
- flex-wrap: wrap;
10887
- gap: 0.25rem;
10850
+
10851
+ /* --- Role badge (used in token rows and inside the popover) --- */
10852
+ .mint-auto-group__role { align-self: flex-start; display: inline-flex; padding: 2px 8px; border-radius: 9999px; border: 1px solid var(--border); background: var(--bg-secondary); color: var(--text-secondary); font-size: 10.5px; text-transform: uppercase; cursor: pointer;
10853
+ }
10854
+ .mint-auto-group__role--factor { background: var(--color-primary-soft); color: var(--color-primary); border-color: transparent;
10855
+ }
10856
+ .mint-auto-group__role--constant { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent;
10857
+ }
10858
+ .mint-auto-group__role--replicate { background: var(--mint-info-bg); color: var(--mint-info); border-color: var(--mint-info-border);
10859
+ }
10860
+ .mint-auto-group__role--run-order { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent;
10861
+ }
10862
+ .mint-auto-group__role--numeric { background: rgba(249,115,22,.10); color: var(--color-cta); border-color: rgba(249,115,22,.30);
10863
+ }
10864
+ .mint-auto-group__role--class-tag { background: rgba(123,208,181,.16); color: #0F766E; border-color: transparent;
10865
+ }
10866
+ .mint-auto-group__role--ignore { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent;
10888
10867
  }
10889
10868
 
10890
- /* --- Navigation --- */
10891
- .mint-auto-group__nav {
10892
- display: flex;
10893
- align-items: center;
10894
- gap: 0.5rem;
10869
+ /* --- Column popover (token rename, role override, value ops) ---
10870
+ * - bg-primary so it reads brighter than the surrounding bg-secondary panels.
10871
+ * - Layered shadow (close + far) reads as elevated rather than recessed.
10872
+ * - z-index 20 sits above schema cards but stays scoped to the modal's
10873
+ * stacking context. */
10874
+ .mint-auto-group__popover { position: absolute; right: 20px; top: 60px; width: 320px; background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 12px 32px -8px rgba(15, 23, 42, .22); padding: 14px; z-index: 20; display: flex; flex-direction: column; gap: 12px;
10895
10875
  }
10896
- .mint-auto-group__nav-spacer {
10897
- flex: 1;
10876
+ .mint-auto-group__popover-head { display: flex; align-items: center; gap: 8px;
10877
+ }
10878
+ .mint-auto-group__popover-head .mono { font-family: 'Fira Code', monospace; font-size: 11px; color: var(--text-muted); margin-left: auto;
10879
+ }
10880
+ .mint-auto-group__popover-close { background: transparent; border: 0; cursor: pointer; color: var(--text-secondary); font-size: 16px;
10881
+ }
10882
+ .mint-auto-group__popover-section { display: flex; flex-direction: column; gap: 6px;
10883
+ }
10884
+ .mint-auto-group__popover-label { font-size: 12px; font-weight: 600; color: var(--text-primary);
10885
+ }
10886
+ .mint-auto-group__pills { display: flex; flex-wrap: wrap; gap: 6px;
10887
+ }
10888
+ .mint-auto-group__pill-btn { font-size: 11.5px; padding: 3px 10px; border-radius: 9999px; border: 1px solid var(--border); background: var(--bg-primary); color: var(--text-secondary); cursor: pointer;
10889
+ }
10890
+ .mint-auto-group__pill-btn--on { background: var(--color-primary-soft); border-color: var(--color-primary); color: var(--color-primary); font-weight: 600;
10891
+ }
10892
+ .mint-auto-group__values-list { display: flex; flex-direction: column; gap: 6px; max-height: 180px; overflow-y: auto;
10893
+ }
10894
+ .mint-auto-group__value-row { display: grid; grid-template-columns: 100px 1fr auto; gap: 8px; align-items: center;
10895
+ }
10896
+ .mint-auto-group__value-src { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-muted); text-align: right;
10897
+ }
10898
+ .mint-auto-group__value-input { border: 1px solid var(--border); background: var(--bg-secondary); padding: 4px 8px; border-radius: var(--radius-sm); font-family: 'Fira Code', monospace; font-size: 12px;
10899
+ }
10900
+ .mint-auto-group__value-excl { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-secondary);
10901
+ }
10902
+ .mint-auto-group__link { background: transparent; border: 0; color: var(--color-primary); font-size: 12.5px; cursor: pointer; text-align: left; padding: 0;
10903
+ }
10904
+
10905
+ /* --- CSV download templates (Input step) --- */
10906
+ .mint-auto-group__template { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); display: flex; align-items: center; gap: 12px;
10907
+ }
10908
+ .mint-auto-group__template-label { font-size: 12.5px; color: var(--text-secondary);
10909
+ }
10910
+ .mint-auto-group__template-actions { display: flex; gap: 8px;
10911
+ }
10912
+
10913
+ /* --- Preview step --- */
10914
+ .mint-auto-group__preview { display: flex; flex-direction: column; gap: 14px;
10915
+ }
10916
+ .mint-auto-group__preview-summary { background: var(--color-primary-soft); color: var(--color-primary); border: 1px solid var(--color-primary); border-radius: var(--radius); padding: 10px 14px; font-size: 13px;
10917
+ }
10918
+ .mint-auto-group__preview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
10919
+ }
10920
+ .mint-auto-group__preview-panel { background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px;
10921
+ }
10922
+ .mint-auto-group__preview-panel h4 { margin: 0 0 10px; font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .06em;
10923
+ }
10924
+ .mint-auto-group__preview-group { border: 1px solid var(--border-color); border-radius: var(--radius); overflow: hidden;
10925
+ }
10926
+ .mint-auto-group__preview-group[open] { background: var(--bg-secondary);
10927
+ }
10928
+ .mint-auto-group__preview-group summary { display: flex; align-items: center; gap: 10px; cursor: pointer; font-size: 13px; padding: 0.5rem 0.875rem;
10929
+ }
10930
+ .mint-auto-group__preview-group[open] summary { border-bottom: 1px solid var(--border);
10931
+ }
10932
+ .mint-auto-group__preview-dot { width: 10px; height: 10px; border-radius: 9999px; flex-shrink: 0;
10933
+ }
10934
+ .mint-auto-group__preview-count { margin-left: auto; font-family: 'Fira Code', monospace; font-size: 12px; color: var(--text-secondary); background: var(--bg-primary); border: 1px solid var(--border); padding: 2px 8px; border-radius: 9999px;
10935
+ }
10936
+ .mint-auto-group__preview-samples { display: flex; flex-wrap: wrap; gap: 6px; padding: 0.5rem 0.875rem 0.625rem;
10937
+ }
10938
+ .mint-auto-group__preview-sample { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-primary); background: var(--bg-primary); border: 1px solid var(--border); padding: 3px 8px; border-radius: 9999px;
10939
+ }
10940
+ .mint-auto-group__qc-chips { display: flex; flex-wrap: wrap; gap: 6px;
10941
+ }
10942
+ .mint-auto-group__qc-chip { background: var(--mint-warning-bg); color: #92400E; border: 1px solid var(--mint-warning-border); padding: 4px 10px; border-radius: 9999px; font-size: 12px;
10943
+ }
10944
+ .mint-auto-group__fingerprint { margin-top: 14px;
10945
+ }
10946
+ .mint-auto-group__fingerprint summary { cursor: pointer; font-size: 12px; color: var(--text-muted);
10947
+ }
10948
+ .mint-auto-group__fingerprint pre { font-family: 'Fira Code', monospace; font-size: 11px; background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px; overflow-x: auto;
10898
10949
  }
10899
10950
  /* SampleSelector Component Styles - RFA Design */
10900
10951
  .mint-sample-selector {
@@ -12061,10 +12112,10 @@ to {
12061
12112
  }
12062
12113
  }
12063
12114
 
12064
- .mint-control-workspace-view[data-v-ec2a5a8a] {
12115
+ .mint-control-workspace-view[data-v-83e93e6c] {
12065
12116
  min-width: 0;
12066
12117
  }
12067
- .mint-control-workspace-view__content[data-v-ec2a5a8a] {
12118
+ .mint-control-workspace-view__content[data-v-83e93e6c] {
12068
12119
  min-width: 0;
12069
12120
  padding: 1rem;
12070
12121
  }
@@ -23414,6 +23465,7 @@ html.dark .mint-toast__item .mint-toast__message {
23414
23465
  display: flex;
23415
23466
  flex-direction: column;
23416
23467
  }
23468
+ /* --- Paste: free-form textarea (the self-designed input path) --- */
23417
23469
  .mint-auto-group__paste {
23418
23470
  position: relative;
23419
23471
  }
@@ -23630,324 +23682,303 @@ html.dark .mint-toast__item .mint-toast__message {
23630
23682
  flex-wrap: wrap;
23631
23683
  gap: 0.375rem;
23632
23684
  }
23633
- /* --- Outlier step --- */
23634
- .mint-auto-group__outlier-step {
23635
- display: flex;
23636
- flex-direction: column;
23637
- gap: 0.75rem;
23638
- }
23639
- .mint-auto-group__outlier-banner {
23640
- padding: 0.75rem 1rem;
23641
- background: var(--mint-warning-bg);
23642
- border: 1px solid rgba(245, 158, 11, 0.3);
23643
- border-radius: var(--radius-md);
23644
- font-size: 0.8125rem;
23645
- color: var(--text-primary);
23646
- }
23647
- .mint-auto-group__outlier-banner code {
23685
+ .mint-auto-group__field-value {
23648
23686
  font-family: 'Fira Code', monospace;
23649
- background: var(--bg-tertiary);
23650
- padding: 0.125rem 0.375rem;
23651
- border-radius: var(--radius-sm);
23652
- font-size: 0.8125rem;
23687
+ font-size: 11.5px;
23688
+ background: var(--bg-primary);
23689
+ border: 1px solid var(--border);
23690
+ padding: 2px 8px;
23691
+ border-radius: 9999px;
23692
+ color: var(--text-secondary);
23653
23693
  }
23654
- .mint-auto-group__outlier-batch {
23694
+ /* --- Navigation --- */
23695
+ .mint-auto-group__nav {
23655
23696
  display: flex;
23697
+ align-items: center;
23656
23698
  gap: 0.5rem;
23657
23699
  }
23658
- .mint-auto-group__outlier-list {
23659
- display: flex;
23660
- flex-direction: column;
23661
- gap: 0.5rem;
23662
- max-height: 300px;
23663
- overflow-y: auto;
23700
+ .mint-auto-group__nav-spacer {
23701
+ flex: 1;
23664
23702
  }
23665
- .mint-auto-group__outlier-item {
23666
- display: flex;
23667
- align-items: center;
23668
- justify-content: space-between;
23669
- padding: 0.5rem 0.75rem;
23670
- background: var(--bg-secondary);
23671
- border: 1px solid var(--border-color);
23703
+ /* --- Workspace step --- */
23704
+ .mint-auto-group__workspace { display: grid; grid-template-columns: 220px 1fr; gap: 16px; min-height: 480px; position: relative; }
23705
+ .mint-auto-group__classes { background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius); padding: 12px; display: flex; flex-direction: column; gap: 4px; }
23706
+ .mint-auto-group__classes h3 { font-size: 11px; letter-spacing: .08em; color: var(--text-muted); text-transform: uppercase; margin: 0 0 8px; }
23707
+ .mint-auto-group__class { display: grid; grid-template-columns: 12px 1fr auto; align-items: center; gap: 8px; padding: 8px 10px; border-radius: var(--radius-sm); cursor: pointer; background: transparent; border: 1px solid transparent; font-size: 13px; color: var(--text-primary); text-align: left; }
23708
+ .mint-auto-group__class:hover { background: var(--bg-tertiary); }
23709
+ .mint-auto-group__class--active { background: var(--color-primary-soft); border-color: var(--color-primary); color: var(--color-primary); font-weight: 500; }
23710
+ .mint-auto-group__class--qc .mint-auto-group__class-dot { background: var(--mint-warning); }
23711
+ .mint-auto-group__class-dot { width: 8px; height: 8px; border-radius: 9999px; background: var(--text-muted); }
23712
+ .mint-auto-group__class-count { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-secondary); background: var(--bg-secondary); padding: 2px 8px; border-radius: 9999px; border: 1px solid var(--border); }
23713
+ .mint-auto-group__schema { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
23714
+ /* --- Suggestion banner --- */
23715
+ .mint-auto-group__suggest { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: var(--radius); border: 1px dashed var(--color-primary); background: var(--color-primary-soft); color: var(--color-primary); font-size: 12.5px; }
23716
+ .mint-auto-group__suggest-btn { margin-left: 8px; background: var(--bg-primary); border: 1px solid var(--color-primary); color: var(--color-primary); padding: 4px 10px; border-radius: var(--radius-sm); cursor: pointer; font-size: 12px; }
23717
+ .mint-auto-group__suggest-btn--ghost { border-color: var(--border); color: var(--text-secondary); }
23718
+ /* --- 3-stat strip (Option B redesign) ---
23719
+ *
23720
+ * Three peer stats at the top of the schema panel:
23721
+ * Groups (primary, with factor-chip composition below)
23722
+ * Samples (active class size · class label · token count)
23723
+ * Avg / group (with min/max sub)
23724
+ *
23725
+ * Replaces the old schema header + group summary bar. The strip is a
23726
+ * single rounded card with 1px gap dividers so the three cells read as
23727
+ * a unit, not three floating panels. */
23728
+ .mint-auto-group__stats {
23729
+ display: grid;
23730
+ grid-template-columns: repeat(3, 1fr);
23731
+ gap: 1px;
23732
+ background: var(--border);
23733
+ border: 1px solid var(--border);
23672
23734
  border-radius: var(--radius);
23735
+ overflow: hidden;
23673
23736
  }
23674
- .mint-auto-group__outlier-info {
23675
- display: flex;
23676
- align-items: center;
23677
- gap: 0.5rem;
23737
+ .mint-auto-group__stat {
23738
+ background: var(--bg-primary);
23739
+ padding: 12px 14px;
23678
23740
  min-width: 0;
23679
23741
  }
23680
- .mint-auto-group__outlier-name {
23681
- font-family: 'Fira Code', monospace;
23682
- font-size: 0.8125rem;
23742
+ .mint-auto-group__stat-v {
23743
+ font-size: 22px;
23744
+ font-weight: 700;
23683
23745
  color: var(--text-primary);
23684
- overflow: hidden;
23685
- text-overflow: ellipsis;
23686
- white-space: nowrap;
23746
+ line-height: 1;
23747
+ font-variant-numeric: tabular-nums;
23687
23748
  }
23688
- .mint-auto-group__outlier-badge {
23689
- font-size: 0.6875rem;
23690
- padding: 0.125rem 0.375rem;
23691
- border-radius: var(--radius-sm);
23692
- background: var(--bg-tertiary);
23749
+ .mint-auto-group__stat--primary .mint-auto-group__stat-v { color: var(--color-primary); }
23750
+ .mint-auto-group__stat-l {
23751
+ font-size: 11px;
23693
23752
  color: var(--text-muted);
23694
- white-space: nowrap;
23695
- flex-shrink: 0;
23696
- }
23697
- .mint-auto-group__outlier-actions {
23698
- display: flex;
23699
- gap: 0.25rem;
23700
- flex-shrink: 0;
23701
- margin-left: 0.75rem;
23702
- }
23703
- .mint-auto-group__action-btn {
23704
- font-size: 0.6875rem;
23705
- padding: 0.25rem 0.5rem;
23706
- border: 1px solid var(--border-color);
23707
- border-radius: var(--radius-sm);
23708
- background: var(--bg-secondary);
23709
- color: var(--text-secondary);
23710
- cursor: pointer;
23711
- transition: all 0.1s;
23712
- }
23713
- .mint-auto-group__action-btn:hover {
23714
- background: var(--bg-hover);
23715
- }
23716
- .mint-auto-group__action-btn:focus-visible {
23717
- outline: 2px solid var(--color-primary);
23718
- outline-offset: 1px;
23719
- }
23720
- .mint-auto-group__action-btn--active {
23721
- background: var(--color-primary-soft);
23722
- border-color: var(--color-primary);
23723
- color: var(--color-primary);
23724
- font-weight: 500;
23725
- }
23726
- .mint-auto-group__action-btn--active.mint-auto-group__action-btn--exclude {
23727
- background: var(--mint-error-bg);
23728
- border-color: var(--mint-error);
23729
- color: var(--mint-error);
23730
- }
23731
- .mint-auto-group__action-btn--active.mint-auto-group__action-btn--qc {
23732
- background: rgba(107, 114, 128, 0.12);
23733
- border-color: var(--text-secondary);
23734
- color: var(--text-secondary);
23735
- }
23736
- /* --- Field step --- */
23737
- .mint-auto-group__field-step {
23738
- display: flex;
23739
- flex-direction: column;
23740
- gap: 1rem;
23741
- }
23742
- .mint-auto-group__field-grid {
23743
- display: grid;
23744
- grid-template-columns: repeat(2, 1fr);
23745
- gap: 0.75rem;
23746
- }
23747
- @media (max-width: 600px) {
23748
- .mint-auto-group__field-grid {
23749
- grid-template-columns: 1fr;
23750
- }
23751
- }
23752
- .mint-auto-group__field-card {
23753
- padding: 0.75rem;
23754
- border: 1px solid var(--border-color);
23755
- border-radius: var(--radius-md);
23756
- background: var(--bg-secondary);
23757
- transition: border-color 0.15s, box-shadow 0.15s;
23758
- }
23759
- .mint-auto-group__field-card--enabled {
23760
- border-color: var(--color-primary);
23761
- box-shadow: 0 0 0 1px var(--color-primary-soft);
23762
- }
23763
- .mint-auto-group__field-header {
23764
- display: flex;
23765
- align-items: center;
23766
- justify-content: space-between;
23767
- margin-bottom: 0.5rem;
23753
+ text-transform: uppercase;
23754
+ letter-spacing: 0.05em;
23755
+ margin-top: 4px;
23756
+ font-weight: 600;
23768
23757
  }
23769
- .mint-auto-group__field-toggle {
23758
+ .mint-auto-group__stat-sub {
23759
+ margin-top: 8px;
23770
23760
  display: flex;
23761
+ flex-wrap: wrap;
23762
+ gap: 4px;
23771
23763
  align-items: center;
23772
- gap: 0.375rem;
23773
- cursor: pointer;
23774
- font-size: 0.8125rem;
23764
+ font-size: 11.5px;
23775
23765
  color: var(--text-secondary);
23766
+ min-height: 22px;
23776
23767
  }
23777
- .mint-auto-group__field-toggle input {
23778
- accent-color: var(--color-primary);
23779
- }
23780
- .mint-auto-group__field-toggle-label {
23781
- user-select: none;
23782
- }
23783
- .mint-auto-group__field-cardinality {
23784
- font-size: 0.6875rem;
23768
+ .mint-auto-group__stat-sub--muted {
23785
23769
  color: var(--text-muted);
23770
+ font-size: 11.5px;
23786
23771
  }
23787
- .mint-auto-group__field-name-input {
23788
- margin-bottom: 0.5rem;
23789
- }
23790
- .mint-auto-group__field-values {
23791
- display: flex;
23792
- flex-wrap: wrap;
23793
- gap: 0.25rem;
23794
- max-height: 4.5rem;
23795
- overflow-y: auto;
23796
- }
23797
- .mint-auto-group__field-value {
23798
- font-size: 0.6875rem;
23799
- padding: 0.125rem 0.375rem;
23800
- border-radius: var(--radius-sm);
23801
- background: var(--bg-tertiary);
23802
- color: var(--text-secondary);
23803
- font-family: 'Fira Code', monospace;
23804
- max-width: 100%;
23805
- overflow: hidden;
23806
- text-overflow: ellipsis;
23807
- white-space: nowrap;
23808
- }
23809
- .mint-auto-group__field-more {
23810
- font-size: 0.6875rem;
23811
- padding: 0.125rem 0.375rem;
23772
+ .mint-auto-group__stat-empty {
23812
23773
  color: var(--text-muted);
23813
23774
  font-style: italic;
23814
23775
  }
23815
- .mint-auto-group__field-summary {
23816
- font-size: 0.8125rem;
23776
+ .mint-auto-group__stat-empty strong {
23817
23777
  color: var(--text-secondary);
23818
- padding: 0.5rem 0.75rem;
23819
- background: var(--bg-tertiary);
23820
- border-radius: var(--radius);
23778
+ font-style: normal;
23779
+ font-weight: 600;
23821
23780
  }
23822
- .mint-auto-group__field-summary strong {
23823
- color: var(--text-primary);
23781
+ .mint-auto-group__group-chip {
23782
+ font-size: 10.5px;
23783
+ font-family: 'Fira Code', monospace;
23784
+ padding: 2px 7px;
23785
+ border-radius: 9999px;
23786
+ background: var(--color-primary-soft);
23787
+ color: var(--color-primary);
23788
+ white-space: nowrap;
23789
+ line-height: 1.4;
23824
23790
  }
23825
- .mint-auto-group__field-warning {
23826
- font-size: 0.8125rem;
23827
- color: var(--mint-warning);
23828
- padding: 0.5rem 0.75rem;
23829
- background: var(--mint-warning-bg);
23830
- border-radius: var(--radius);
23791
+ /* --- QC routing radio group (replaces the two checkboxes) --- */
23792
+ .mint-auto-group__routing {
23793
+ margin-top: 14px;
23794
+ padding-top: 14px;
23795
+ border-top: 1px solid var(--border);
23831
23796
  }
23832
- /* --- Preview step --- */
23833
- .mint-auto-group__preview-step {
23834
- display: flex;
23835
- flex-direction: column;
23836
- gap: 1rem;
23797
+ .mint-auto-group__routing-head {
23798
+ margin: 0 0 8px;
23799
+ font-size: 11px;
23800
+ text-transform: uppercase;
23801
+ letter-spacing: 0.05em;
23802
+ color: var(--text-muted);
23803
+ font-weight: 600;
23837
23804
  }
23838
- .mint-auto-group__preview-summary {
23805
+ .mint-auto-group__routing-radio {
23839
23806
  display: flex;
23840
- flex-wrap: wrap;
23841
- gap: 0.5rem 1rem;
23842
- padding: 0.75rem 1rem;
23843
- background: var(--bg-tertiary);
23844
- border-radius: var(--radius-md);
23845
- }
23846
- .mint-auto-group__preview-stat {
23847
- font-size: 0.8125rem;
23848
- color: var(--text-secondary);
23849
- }
23850
- .mint-auto-group__preview-stat strong {
23807
+ align-items: flex-start;
23808
+ gap: 8px;
23809
+ font-size: 12.5px;
23851
23810
  color: var(--text-primary);
23811
+ padding: 5px 0;
23812
+ cursor: pointer;
23813
+ line-height: 1.4;
23852
23814
  }
23853
- .mint-auto-group__preview-stat--excluded strong {
23854
- color: var(--mint-error);
23815
+ .mint-auto-group__routing-radio input {
23816
+ margin-top: 2px;
23817
+ accent-color: var(--color-primary);
23818
+ flex-shrink: 0;
23855
23819
  }
23856
- .mint-auto-group__preview-groups {
23820
+ .mint-auto-group__routing-radio small {
23821
+ display: block;
23822
+ color: var(--text-muted);
23823
+ font-size: 11px;
23824
+ margin-top: 1px;
23825
+ }
23826
+ /* --- Compact token table (replaces the horizontal cards row) ---
23827
+ *
23828
+ * One row per token position. Lets users scan a 6+ token batch without
23829
+ * horizontal scrolling and without each row carrying redundant card chrome.
23830
+ * Click the row to open the popover (rename, role override, value ops).
23831
+ * The Use checkbox lives inline; @click.stop on the label prevents
23832
+ * accidental popover triggering when toggling Use. */
23833
+ .mint-auto-group__token-table {
23834
+ flex: 1;
23835
+ min-height: 0;
23857
23836
  display: flex;
23858
23837
  flex-direction: column;
23859
- gap: 0.5rem;
23860
- max-height: 20rem;
23861
- overflow-y: auto;
23862
- }
23863
- .mint-auto-group__preview-group {
23864
- border: 1px solid var(--border-color);
23838
+ border: 1px solid var(--border);
23865
23839
  border-radius: var(--radius);
23866
- overflow: hidden;
23867
- }
23868
- .mint-auto-group__preview-group[open] {
23869
- background: var(--bg-secondary);
23840
+ background: var(--bg-primary);
23841
+ overflow: auto;
23870
23842
  }
23871
- .mint-auto-group__preview-group-header {
23872
- display: flex;
23843
+ .mint-auto-group__token-row {
23844
+ display: grid;
23845
+ /* Column widths chosen to fit in the lg modal's ~440px schema panel.
23846
+ * Token# stays narrow (single digit), Name + Preview share remaining
23847
+ * flex space, Role pill is fixed for badge stability, # uses a glyph
23848
+ * header so 32px is enough, Use is the checkbox, then the ⋯ trigger. */
23849
+ grid-template-columns: 28px minmax(0, 1fr) 76px 48px minmax(0, 1.4fr) 28px 18px;
23873
23850
  align-items: center;
23874
- gap: 0.5rem;
23875
- padding: 0.5rem 0.75rem;
23851
+ gap: 8px;
23852
+ padding: 9px 12px;
23853
+ background: transparent;
23854
+ border: 0;
23855
+ border-bottom: 1px solid var(--border);
23856
+ font-size: 12.5px;
23857
+ color: var(--text-primary);
23858
+ text-align: left;
23876
23859
  cursor: pointer;
23877
- font-size: 0.8125rem;
23878
- user-select: none;
23879
- min-width: 0;
23860
+ width: 100%;
23861
+ font-family: inherit;
23862
+ transition: background-color 150ms ease;
23880
23863
  }
23881
- .mint-auto-group__preview-group-header:hover {
23882
- background: var(--bg-hover);
23864
+ .mint-auto-group__token-row:last-child { border-bottom: 0; }
23865
+ .mint-auto-group__token-row:hover { background: var(--bg-secondary); }
23866
+ .mint-auto-group__token-row:focus-visible {
23867
+ outline: 2px solid var(--color-primary);
23868
+ outline-offset: -2px;
23883
23869
  }
23884
- .mint-auto-group__preview-dot {
23885
- width: 0.625rem;
23886
- height: 0.625rem;
23887
- border-radius: 50%;
23888
- flex-shrink: 0;
23870
+ .mint-auto-group__token-row--active { background: var(--color-primary-soft); }
23871
+ .mint-auto-group__token-row--head {
23872
+ cursor: default;
23873
+ background: var(--bg-secondary);
23874
+ font-size: 11px;
23875
+ font-weight: 600;
23876
+ text-transform: uppercase;
23877
+ letter-spacing: 0.05em;
23878
+ color: var(--text-muted);
23879
+ padding: 8px 14px;
23880
+ }
23881
+ .mint-auto-group__token-row--head:hover { background: var(--bg-secondary); }
23882
+ .mint-auto-group__token-ix {
23883
+ font-family: 'Fira Code', monospace;
23884
+ font-size: 12px;
23885
+ color: var(--text-muted);
23889
23886
  }
23890
- .mint-auto-group__preview-group-name {
23887
+ .mint-auto-group__token-nm {
23891
23888
  font-weight: 500;
23892
- color: var(--text-primary);
23893
23889
  overflow: hidden;
23894
23890
  text-overflow: ellipsis;
23895
23891
  white-space: nowrap;
23896
23892
  min-width: 0;
23897
23893
  }
23898
- .mint-auto-group__preview-group-count {
23899
- font-size: 0.6875rem;
23900
- font-weight: 500;
23901
- padding: 0.0625rem 0.375rem;
23902
- border-radius: var(--radius-sm);
23903
- margin-left: auto;
23904
- }
23905
- .mint-auto-group__preview-samples {
23906
- display: flex;
23907
- flex-wrap: wrap;
23908
- gap: 0.25rem;
23909
- padding: 0.5rem 0.75rem;
23910
- border-top: 1px solid var(--border-light);
23911
- }
23912
- .mint-auto-group__preview-sample {
23913
- font-size: 0.75rem;
23894
+ .mint-auto-group__token-unique {
23914
23895
  font-family: 'Fira Code', monospace;
23915
- padding: 0.125rem 0.375rem;
23916
- border-radius: var(--radius-sm);
23917
- background: var(--bg-tertiary);
23896
+ font-size: 12.5px;
23918
23897
  color: var(--text-secondary);
23898
+ text-align: right;
23899
+ font-variant-numeric: tabular-nums;
23919
23900
  }
23920
- .mint-auto-group__preview-sample--excluded {
23921
- opacity: 0.5;
23922
- text-decoration: line-through;
23923
- }
23924
- /* --- Excluded section --- */
23925
- .mint-auto-group__preview-excluded {
23926
- border-top: 1px solid var(--border-color);
23927
- padding-top: 0.75rem;
23901
+ .mint-auto-group__token-num { text-align: right; }
23902
+ .mint-auto-group__token-preview {
23903
+ font-family: 'Fira Code', monospace;
23904
+ font-size: 11.5px;
23905
+ color: var(--text-secondary);
23906
+ overflow: hidden;
23907
+ text-overflow: ellipsis;
23908
+ white-space: nowrap;
23909
+ min-width: 0;
23928
23910
  }
23929
- .mint-auto-group__preview-excluded-title {
23930
- font-size: 0.75rem;
23931
- font-weight: 500;
23911
+ .mint-auto-group__token-more {
23932
23912
  color: var(--text-muted);
23933
- text-transform: uppercase;
23934
- letter-spacing: 0.05em;
23935
- margin-bottom: 0.5rem;
23936
- }
23937
- .mint-auto-group__preview-excluded-list {
23938
- display: flex;
23939
- flex-wrap: wrap;
23940
- gap: 0.25rem;
23913
+ font-style: italic;
23941
23914
  }
23942
- /* --- Navigation --- */
23943
- .mint-auto-group__nav {
23944
- display: flex;
23945
- align-items: center;
23946
- gap: 0.5rem;
23915
+ .mint-auto-group__token-use,
23916
+ .mint-auto-group__token-use-head { display: flex; justify-content: center; }
23917
+ .mint-auto-group__token-use { cursor: pointer; }
23918
+ .mint-auto-group__token-use input {
23919
+ width: 16px;
23920
+ height: 16px;
23921
+ cursor: pointer;
23922
+ accent-color: var(--color-primary);
23947
23923
  }
23948
- .mint-auto-group__nav-spacer {
23949
- flex: 1;
23924
+ .mint-auto-group__token-trigger {
23925
+ color: var(--text-muted);
23926
+ text-align: center;
23927
+ font-size: 14px;
23928
+ user-select: none;
23950
23929
  }
23930
+ /* --- Role badge (used in token rows and inside the popover) --- */
23931
+ .mint-auto-group__role { align-self: flex-start; display: inline-flex; padding: 2px 8px; border-radius: 9999px; border: 1px solid var(--border); background: var(--bg-secondary); color: var(--text-secondary); font-size: 10.5px; text-transform: uppercase; cursor: pointer; }
23932
+ .mint-auto-group__role--factor { background: var(--color-primary-soft); color: var(--color-primary); border-color: transparent; }
23933
+ .mint-auto-group__role--constant { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent; }
23934
+ .mint-auto-group__role--replicate { background: var(--mint-info-bg); color: var(--mint-info); border-color: var(--mint-info-border); }
23935
+ .mint-auto-group__role--run-order { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent; }
23936
+ .mint-auto-group__role--numeric { background: rgba(249,115,22,.10); color: var(--color-cta); border-color: rgba(249,115,22,.30); }
23937
+ .mint-auto-group__role--class-tag { background: rgba(123,208,181,.16); color: #0F766E; border-color: transparent; }
23938
+ .mint-auto-group__role--ignore { background: var(--bg-tertiary); color: var(--text-muted); border-color: transparent; }
23939
+ /* --- Column popover (token rename, role override, value ops) ---
23940
+ * - bg-primary so it reads brighter than the surrounding bg-secondary panels.
23941
+ * - Layered shadow (close + far) reads as elevated rather than recessed.
23942
+ * - z-index 20 sits above schema cards but stays scoped to the modal's
23943
+ * stacking context. */
23944
+ .mint-auto-group__popover { position: absolute; right: 20px; top: 60px; width: 320px; background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 12px 32px -8px rgba(15, 23, 42, .22); padding: 14px; z-index: 20; display: flex; flex-direction: column; gap: 12px; }
23945
+ .mint-auto-group__popover-head { display: flex; align-items: center; gap: 8px; }
23946
+ .mint-auto-group__popover-head .mono { font-family: 'Fira Code', monospace; font-size: 11px; color: var(--text-muted); margin-left: auto; }
23947
+ .mint-auto-group__popover-close { background: transparent; border: 0; cursor: pointer; color: var(--text-secondary); font-size: 16px; }
23948
+ .mint-auto-group__popover-section { display: flex; flex-direction: column; gap: 6px; }
23949
+ .mint-auto-group__popover-label { font-size: 12px; font-weight: 600; color: var(--text-primary); }
23950
+ .mint-auto-group__pills { display: flex; flex-wrap: wrap; gap: 6px; }
23951
+ .mint-auto-group__pill-btn { font-size: 11.5px; padding: 3px 10px; border-radius: 9999px; border: 1px solid var(--border); background: var(--bg-primary); color: var(--text-secondary); cursor: pointer; }
23952
+ .mint-auto-group__pill-btn--on { background: var(--color-primary-soft); border-color: var(--color-primary); color: var(--color-primary); font-weight: 600; }
23953
+ .mint-auto-group__values-list { display: flex; flex-direction: column; gap: 6px; max-height: 180px; overflow-y: auto; }
23954
+ .mint-auto-group__value-row { display: grid; grid-template-columns: 100px 1fr auto; gap: 8px; align-items: center; }
23955
+ .mint-auto-group__value-src { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-muted); text-align: right; }
23956
+ .mint-auto-group__value-input { border: 1px solid var(--border); background: var(--bg-secondary); padding: 4px 8px; border-radius: var(--radius-sm); font-family: 'Fira Code', monospace; font-size: 12px; }
23957
+ .mint-auto-group__value-excl { display: inline-flex; align-items: center; gap: 4px; font-size: 11px; color: var(--text-secondary); }
23958
+ .mint-auto-group__link { background: transparent; border: 0; color: var(--color-primary); font-size: 12.5px; cursor: pointer; text-align: left; padding: 0; }
23959
+ /* --- CSV download templates (Input step) --- */
23960
+ .mint-auto-group__template { margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); display: flex; align-items: center; gap: 12px; }
23961
+ .mint-auto-group__template-label { font-size: 12.5px; color: var(--text-secondary); }
23962
+ .mint-auto-group__template-actions { display: flex; gap: 8px; }
23963
+ /* --- Preview step --- */
23964
+ .mint-auto-group__preview { display: flex; flex-direction: column; gap: 14px; }
23965
+ .mint-auto-group__preview-summary { background: var(--color-primary-soft); color: var(--color-primary); border: 1px solid var(--color-primary); border-radius: var(--radius); padding: 10px 14px; font-size: 13px; }
23966
+ .mint-auto-group__preview-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
23967
+ .mint-auto-group__preview-panel { background: var(--bg-secondary); border: 1px solid var(--border); border-radius: var(--radius); padding: 14px; }
23968
+ .mint-auto-group__preview-panel h4 { margin: 0 0 10px; font-size: 12px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .06em; }
23969
+ .mint-auto-group__preview-group { border: 1px solid var(--border-color); border-radius: var(--radius); overflow: hidden; }
23970
+ .mint-auto-group__preview-group[open] { background: var(--bg-secondary); }
23971
+ .mint-auto-group__preview-group summary { display: flex; align-items: center; gap: 10px; cursor: pointer; font-size: 13px; padding: 0.5rem 0.875rem; }
23972
+ .mint-auto-group__preview-group[open] summary { border-bottom: 1px solid var(--border); }
23973
+ .mint-auto-group__preview-dot { width: 10px; height: 10px; border-radius: 9999px; flex-shrink: 0; }
23974
+ .mint-auto-group__preview-count { margin-left: auto; font-family: 'Fira Code', monospace; font-size: 12px; color: var(--text-secondary); background: var(--bg-primary); border: 1px solid var(--border); padding: 2px 8px; border-radius: 9999px; }
23975
+ .mint-auto-group__preview-samples { display: flex; flex-wrap: wrap; gap: 6px; padding: 0.5rem 0.875rem 0.625rem; }
23976
+ .mint-auto-group__preview-sample { font-family: 'Fira Code', monospace; font-size: 11.5px; color: var(--text-primary); background: var(--bg-primary); border: 1px solid var(--border); padding: 3px 8px; border-radius: 9999px; }
23977
+ .mint-auto-group__qc-chips { display: flex; flex-wrap: wrap; gap: 6px; }
23978
+ .mint-auto-group__qc-chip { background: var(--mint-warning-bg); color: #92400E; border: 1px solid var(--mint-warning-border); padding: 4px 10px; border-radius: 9999px; font-size: 12px; }
23979
+ .mint-auto-group__fingerprint { margin-top: 14px; }
23980
+ .mint-auto-group__fingerprint summary { cursor: pointer; font-size: 12px; color: var(--text-muted); }
23981
+ .mint-auto-group__fingerprint pre { font-family: 'Fira Code', monospace; font-size: 11px; background: var(--bg-primary); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px; overflow-x: auto; }
23951
23982
  /* GroupAssigner Component Styles */
23952
23983
  .mint-group-assigner {
23953
23984
  display: flex;