@morscherlab/mint-sdk 1.0.38 → 1.0.41

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 (62) hide show
  1. package/dist/{ExperimentPopover-DEzCbTqo.js → ExperimentPopover-8A4Rhffp.js} +1 -1
  2. package/dist/{ExperimentPopover-mzmSfAUp.js → ExperimentPopover-BbPkIFsI.js} +8 -2
  3. package/dist/ExperimentPopover-BbPkIFsI.js.map +1 -0
  4. package/dist/{ExperimentSelectorModal-Bn0Hmg07.js → ExperimentSelectorModal-B2qek_YG.js} +91 -46
  5. package/dist/ExperimentSelectorModal-B2qek_YG.js.map +1 -0
  6. package/dist/{ExperimentSelectorModal-BAIlIybO.js → ExperimentSelectorModal-BwPbQN1g.js} +1 -1
  7. package/dist/__tests__/components/AutoGroupModal.preview.test.d.ts +1 -0
  8. package/dist/__tests__/composables/autoGroup/classKey.test.d.ts +1 -0
  9. package/dist/__tests__/composables/autoGroup/groupTree.test.d.ts +1 -0
  10. package/dist/__tests__/composables/autoGroup/tokenLength.test.d.ts +1 -0
  11. package/dist/components/index.js +3 -3
  12. package/dist/{components-Cyi0IfRl.js → components-CJ2--4Ex.js} +5606 -5592
  13. package/dist/components-CJ2--4Ex.js.map +1 -0
  14. package/dist/composables/autoGroup/classKey.d.ts +1 -0
  15. package/dist/composables/autoGroup/index.d.ts +2 -1
  16. package/dist/composables/autoGroup/replicatePreGroup.d.ts +10 -12
  17. package/dist/composables/autoGroup/tokenLength.d.ts +17 -0
  18. package/dist/composables/index.js +2 -2
  19. package/dist/composables/useAutoGroup.d.ts +2 -0
  20. package/dist/{composables-CFSn4NN3.js → composables-DrE6OcZZ.js} +2 -2
  21. package/dist/{composables-CFSn4NN3.js.map → composables-DrE6OcZZ.js.map} +1 -1
  22. package/dist/index.js +5 -5
  23. package/dist/install.js +3 -3
  24. package/dist/styles.css +1497 -1453
  25. package/dist/types/auto-group.d.ts +19 -0
  26. package/dist/{useProtocolTemplates-CXP2ZosM.js → useProtocolTemplates-BbvlHoPD.js} +218 -90
  27. package/dist/useProtocolTemplates-BbvlHoPD.js.map +1 -0
  28. package/package.json +1 -1
  29. package/src/__tests__/components/AutoGroupModal.preview.test.ts +46 -0
  30. package/src/__tests__/composables/autoGroup/classKey.test.ts +25 -0
  31. package/src/__tests__/composables/autoGroup/fingerprint.test.ts +72 -0
  32. package/src/__tests__/composables/autoGroup/groupTree.test.ts +99 -0
  33. package/src/__tests__/composables/autoGroup/tokenLength.test.ts +85 -0
  34. package/src/__tests__/composables/useAutoGroup.test.ts +111 -19
  35. package/src/components/AutoGroupModal.vue +23 -19
  36. package/src/components/BaseModal.story.vue +7 -15
  37. package/src/components/ExperimentDataViewer.vue +1 -0
  38. package/src/components/ExperimentPopover.vue +6 -4
  39. package/src/components/ExperimentSelectorModal.vue +30 -3
  40. package/src/components/IconButton.story.vue +5 -0
  41. package/src/components/SampleSelector.vue +3 -2
  42. package/src/components/SampleSelectorSampleRow.vue +4 -2
  43. package/src/composables/autoGroup/classKey.ts +5 -2
  44. package/src/composables/autoGroup/columns.ts +2 -2
  45. package/src/composables/autoGroup/compose.ts +56 -0
  46. package/src/composables/autoGroup/fingerprint.ts +15 -1
  47. package/src/composables/autoGroup/index.ts +2 -0
  48. package/src/composables/autoGroup/replicatePreGroup.ts +34 -0
  49. package/src/composables/autoGroup/template.ts +2 -2
  50. package/src/composables/autoGroup/tokenLength.ts +53 -0
  51. package/src/composables/autoGroup/vocab.json +1 -2
  52. package/src/composables/useAutoGroup.ts +34 -13
  53. package/src/styles/components/auto-group-modal.css +7 -11
  54. package/src/styles/components/button.css +10 -3
  55. package/src/styles/components/modal.css +3 -0
  56. package/src/styles/components/sample-selector.css +17 -0
  57. package/src/styles/variables.css +8 -0
  58. package/src/types/auto-group.ts +19 -0
  59. package/dist/ExperimentPopover-mzmSfAUp.js.map +0 -1
  60. package/dist/ExperimentSelectorModal-Bn0Hmg07.js.map +0 -1
  61. package/dist/components-Cyi0IfRl.js.map +0 -1
  62. package/dist/useProtocolTemplates-CXP2ZosM.js.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { SampleClass } from '../../types/auto-group';
2
2
  export declare function classKey(c: Pick<SampleClass, 'kind'> & {
3
3
  subKind?: string;
4
+ tokenLength?: number;
4
5
  }): string;
@@ -12,5 +12,6 @@ export { composeTemplate } from './template';
12
12
  export type { TemplateOptions } from './template';
13
13
  export { DEFAULT_COLORS, QC_OVERLAY_COLOR } from './colors';
14
14
  export { classKey } from './classKey';
15
- export { stripReplicateTokens, preGroupReplicates, expandGroupsWithReplicates, } from './replicatePreGroup';
15
+ export { stripReplicateTokens, preGroupReplicates, expandGroupsWithReplicates, expandTreeWithReplicates, } from './replicatePreGroup';
16
16
  export type { ReplicatePreGrouping } from './replicatePreGroup';
17
+ export { splitByTokenLength } from './tokenLength';
@@ -1,15 +1,4 @@
1
- /**
2
- * Replicate pre-grouping.
3
- *
4
- * Strip the replicate / injection-number markers from each sample's name, then
5
- * collapse samples that share a base name. Those samples ARE replicates of one
6
- * another by definition; the remaining unique base names are what the rest of
7
- * the pipeline (tokenize → classify → schema → compose) should operate on.
8
- *
9
- * This pre-pass replaces the older "treat every sample as independent, then
10
- * infer replicate columns" approach. Identifying replicate-equivalence by name
11
- * before tokenisation removes a class of fragile cardinality heuristics.
12
- */
1
+ import { TreeNode } from '../../types/componentLabTypes';
13
2
  /**
14
3
  * Iteratively strip every replicate / injection-number marker from `name`.
15
4
  * Each pattern is applied repeatedly until it stops matching, so a sample like
@@ -36,3 +25,12 @@ export declare function preGroupReplicates(samples: string[]): ReplicatePreGroup
36
25
  export declare function expandGroupsWithReplicates<G extends {
37
26
  samples: string[];
38
27
  }>(groups: G[], preGrouping: ReplicatePreGrouping): G[];
28
+ /**
29
+ * Expand a group hierarchy (built over base names) back to original samples.
30
+ * Each leaf node's `label` is a base name; it is replaced by one leaf per
31
+ * original sample that collapsed onto it (sharing the leaf's injection badge,
32
+ * since collapsed replicates have identical base tokens). Every ancestor's
33
+ * `badge` (sample count) is recomputed from the expanded leaf count so the tree
34
+ * agrees with the flat groups produced by `expandGroupsWithReplicates`.
35
+ */
36
+ export declare function expandTreeWithReplicates(nodes: TreeNode[], preGrouping: ReplicatePreGrouping): TreeNode[];
@@ -0,0 +1,17 @@
1
+ import { SampleClass } from '../../types/auto-group';
2
+ /**
3
+ * Token-length pre-grouping.
4
+ *
5
+ * After type classification (`detectClass`), members of one class can still have
6
+ * different token counts — e.g. a Plasma batch where some names carry an extra
7
+ * descriptor field. Splitting each class so every member shares the same token
8
+ * length is the "group same token-length sample, then extract tokens inside the
9
+ * group" step: it guarantees `buildClassSchema` sees a rectangular token matrix,
10
+ * so column index N means the same field for every sample in the group.
11
+ *
12
+ * Each output class carries `tokenLength`; `classKey` folds that into the schema
13
+ * key so length-split classes never collide. The label only gains a `· N fields`
14
+ * suffix when a (kind, subKind) genuinely spans more than one length, keeping the
15
+ * common (uniform) case visually identical to before.
16
+ */
17
+ export declare function splitByTokenLength(classes: SampleClass[], tokenized: string[][]): SampleClass[];
@@ -1,10 +1,10 @@
1
1
  import "../BaseSelect-ekgr9fDo.js";
2
2
  import { $ as parseTime, A as useConcentrationUnits, C as controlsToViewIds, D as getTypeDefault, E as getFieldRegistryEntry, F as ATOMIC_WEIGHTS, G as findAvailableSlots, H as addMinutes, I as useChemicalFormula, J as formatTime, K as findNearestTimeSlotIndex, N as useSequenceUtils, Q as isTimeInRange, S as controlsToTopBarSettingsConfig, T as getDefaultControlView, U as compareTime, W as durationMinutes, X as fromMinutes, Y as formatTimeSlot, Z as generateTimeSlots, _ as controlsToFormSchema, a as defineDoseCalculatorControlProps, b as controlsToSettingsSchema, c as defineWellPlateDoseComponentBindings, d as defineControlModel, et as rangesOverlap, h as controlValuesToComponentProps, i as useControlSchema, l as defineWellPlateDoseControlProps, m as controlValuesToComponentBindingsById, n as defineControls, nt as toMinutes, o as defineDoseDesignControlModel, ot as useListSelection, p as controlValuesToComponentBindings, q as formatDuration, r as getControlDefaults, rt as useTimeUtils, s as defineWellPlateControlProps, st as useSelectionLimit, t as defineControlComponentBindings, tt as snapToSlot, u as useControlWorkspace, v as controlsToSectionFormSchema, w as controlsToViewItems, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas } from "../useControlSchema-BZNdalmL.js";
3
3
  import { t as useEventListener } from "../useEventListener-CfVkP9Xz.js";
4
- import { B as APP_EXPERIMENT_KEY, C as useExpansionSet, G as normalizeSearchQuery, H as useTheme, I as useWellPlateEditor, J as useSortedItems, K as useTextSearch, L as useDoseCalculator, M as extractSampleOptionsFromDesignData, N as unwrapExperimentDesignData, O as extractSamplesFromDesignData, P as DEFAULT_COLORS, R as DEFAULT_MOBILE_VIEWPORT_QUERY, U as useToast, V as useAppExperiment, W as candidateMatchesSearch, _ as useScheduleDrag, a as useReagentSeries, c as useBioTemplatePresetWorkspace, d as getBioTemplateComponentProps, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, j as extractSampleNamesFromDesignData, k as useAutoGroup, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, o as useGroupAssignment, p as useBioTemplateComponents, q as compareSortValues, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, u as useBioTemplateWorkspace, v as useExperimentSamples, w as useSampleGroups, y as useExperimentData, z as useMobileSupportGate } from "../useProtocolTemplates-CXP2ZosM.js";
4
+ import { A as extractSampleNamesFromDesignData, B as APP_EXPERIMENT_KEY, C as useSampleGroups, D as extractSamplesFromDesignData, F as useExpansionSet, G as normalizeSearchQuery, H as useTheme, I as useWellPlateEditor, J as useSortedItems, K as useTextSearch, L as useDoseCalculator, M as unwrapExperimentDesignData, N as DEFAULT_COLORS, O as useAutoGroup, R as DEFAULT_MOBILE_VIEWPORT_QUERY, U as useToast, V as useAppExperiment, W as candidateMatchesSearch, _ as useScheduleDrag, a as useReagentSeries, c as useBioTemplatePresetWorkspace, d as getBioTemplateComponentProps, f as toBioTemplateComponentPropsByComponent, g as useExperimentSave, h as useTemplateCollection, i as generateDilutionSeries, j as extractSampleOptionsFromDesignData, l as useBioTemplatePackWorkspace, m as useBioTemplateControls, n as DEFAULT_PRESETS, o as useGroupAssignment, p as useBioTemplateComponents, q as compareSortValues, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, u as useBioTemplateWorkspace, v as useExperimentSamples, y as useExperimentData, z as useMobileSupportGate } from "../useProtocolTemplates-BbvlHoPD.js";
5
5
  import { i as usePlatformContext, n as evaluateCondition, r as useForm, t as useFormBuilder } from "../useFormBuilder-DKekvXRs.js";
6
6
  import { a as SORT_OPTIONS, c as formatExperimentStatus, i as EXPERIMENT_STATUS_VARIANT_MAP, l as getExperimentStatusVariant, n as EXPERIMENT_STATUS_LABELS, o as datePresetToISO, r as EXPERIMENT_STATUS_OPTIONS, s as formatExperimentDate, t as DATE_PRESET_OPTIONS, u as resolveExperimentCode } from "../experiment-utils-Bfa7CwPU.js";
7
7
  import { i as useApi, n as useDebouncedWatch, r as useRequestSyncState, t as useExperimentSelector } from "../useExperimentSelector-DdCy5VNv.js";
8
8
  import { B as toBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, P as getBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, l as requireBioTemplateControlSchema, o as getBioTemplateControlSchema } from "../templates-CNbPQNID.js";
9
- import { A as useCommandHistory, C as parseDelimitedText, D as createPluginResourceClient, E as validateImportFile, F as useAuth, M as useAsync, N as useAsyncBatch, O as useResourceCrud, P as usePasskey, S as detectDelimiter, T as useFileImport, _ as useWellPlateAdapter, a as pluginFormDataFromPayload, b as wellIdToCoordinate, c as usePluginClient, d as resolvePluginBaseUrl, f as runWellPlateValidation, g as createWellPlateWells, h as createRowConditions, i as getPluginPageSelectorItems, j as usePluginConfig, k as useOptimisticMutation, l as usePluginSettings, m as createColumnConditions, n as downloadBlob, o as uploadPluginEndpoint, p as useWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as buildPluginEndpointUrl, v as coordinateToWellId, w as readFileAsText, x as wellIdsInRectangle, y as useWellPainting } from "../composables-CFSn4NN3.js";
9
+ import { A as useCommandHistory, C as parseDelimitedText, D as createPluginResourceClient, E as validateImportFile, F as useAuth, M as useAsync, N as useAsyncBatch, O as useResourceCrud, P as usePasskey, S as detectDelimiter, T as useFileImport, _ as useWellPlateAdapter, a as pluginFormDataFromPayload, b as wellIdToCoordinate, c as usePluginClient, d as resolvePluginBaseUrl, f as runWellPlateValidation, g as createWellPlateWells, h as createRowConditions, i as getPluginPageSelectorItems, j as usePluginConfig, k as useOptimisticMutation, l as usePluginSettings, m as createColumnConditions, n as downloadBlob, o as uploadPluginEndpoint, p as useWellPlateValidation, r as downloadPluginEndpoint, s as useCurrentExperiment, t as createPluginClient, u as buildPluginEndpointUrl, v as coordinateToWellId, w as readFileAsText, x as wellIdsInRectangle, y as useWellPainting } from "../composables-DrE6OcZZ.js";
10
10
  export { APP_EXPERIMENT_KEY, ATOMIC_WEIGHTS, DATE_PRESET_OPTIONS, DEFAULT_COLORS, DEFAULT_MOBILE_VIEWPORT_QUERY, DEFAULT_PRESETS, DEFAULT_UNITS, EXPERIMENT_STATUS_LABELS, EXPERIMENT_STATUS_OPTIONS, EXPERIMENT_STATUS_VARIANT_MAP, SORT_OPTIONS, addMinutes, buildPluginEndpointUrl, candidateMatchesSearch, compareSortValues, compareTime, controlValuesToComponentBindings, controlValuesToComponentBindingsById, controlValuesToComponentProps, controlsToFormSchema, controlsToSectionFormSchema, controlsToSectionFormSchemas, controlsToSettingsSchema, controlsToSidebarPanels, controlsToTopBarSettingsConfig, controlsToViewIds, controlsToViewItems, coordinateToWellId, createColumnConditions, createPluginClient, createPluginResourceClient, createRowConditions, createWellPlateWells, datePresetToISO, defineControlComponentBindings, defineControlModel, defineControls, defineDoseCalculatorControlProps, defineDoseDesignControlModel, defineWellPlateControlProps, defineWellPlateDoseComponentBindings, defineWellPlateDoseControlProps, detectDelimiter, downloadBlob, downloadPluginEndpoint, durationMinutes, evaluateCondition, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, extractSamplesFromDesignData, findAvailableSlots, findNearestTimeSlotIndex, formatDuration, formatExperimentDate, formatExperimentStatus, formatTime, formatTimeSlot, fromMinutes, generateDilutionSeries, generateTimeSlots, getBioTemplateComponentBindings, getBioTemplateComponentProps, getBioTemplateControlSchema, getControlDefaults, getDefaultControlView, getExperimentStatusVariant, getFieldRegistryEntry, getPluginPageSelectorItems, getTypeDefault, isTimeInRange, normalizeSearchQuery, parseDelimitedText, parseTime, pluginFormDataFromPayload, rangesOverlap, readFileAsText, requireBioTemplateControlSchema, resolveExperimentCode, resolvePluginBaseUrl, runWellPlateValidation, snapToSlot, toBioTemplateComponentBindings, toBioTemplateComponentBindingsById, toBioTemplateComponentProps, toBioTemplateComponentPropsByComponent, toBioTemplateComponentPropsById, toMinutes, unwrapExperimentDesignData, uploadPluginEndpoint, useApi, useAppExperiment, useAsync, useAsyncBatch, useAuth, useAutoGroup, useBioTemplateComponents, useBioTemplateControls, useBioTemplatePackWorkspace, useBioTemplatePresetWorkspace, useBioTemplateWorkspace, useChemicalFormula, useCommandHistory, useConcentrationUnits, useControlSchema, useControlWorkspace, useCurrentExperiment, useDebouncedWatch, useDoseCalculator, useEventListener, useExpansionSet, useExperimentData, useExperimentSamples, useExperimentSave, useExperimentSelector, useFileImport, useForm, useFormBuilder, useGroupAssignment, useListSelection, useMobileSupportGate, useOptimisticMutation, usePasskey, usePlatformContext, usePluginClient, usePluginConfig, usePluginSettings, useProtocolTemplates, useRackEditor, useReagentSeries, useRequestSyncState, useResourceCrud, useSampleGroups, useScheduleDrag, useSelectionLimit, useSequenceUtils, useSortedItems, useTemplateCollection, useTextSearch, useTheme, useTimeUtils, useToast, useWellPainting, useWellPlateAdapter, useWellPlateEditor, useWellPlateValidation, validateImportFile, wellIdToCoordinate, wellIdsInRectangle };
@@ -30,6 +30,7 @@ export declare function useAutoGroup(): {
30
30
  members: number[];
31
31
  classTagPositions: number[];
32
32
  disposition: ClassDisposition;
33
+ tokenLength?: number | undefined;
33
34
  }[], SampleClass[] | {
34
35
  kind: import('../types/auto-group').SampleClassKind;
35
36
  label: string;
@@ -37,6 +38,7 @@ export declare function useAutoGroup(): {
37
38
  members: number[];
38
39
  classTagPositions: number[];
39
40
  disposition: ClassDisposition;
41
+ tokenLength?: number | undefined;
40
42
  }[]>;
41
43
  schemas: import('vue').Ref<Record<string, ClassSchema>, Record<string, ClassSchema>>;
42
44
  activeClassKey: import('vue').Ref<string, string>;
@@ -1,4 +1,4 @@
1
- import { S as resolveCurrentExperimentId, b as currentExperimentFromContext, x as getInjectedPlatformContext } from "./useProtocolTemplates-CXP2ZosM.js";
1
+ import { S as resolveCurrentExperimentId, b as currentExperimentFromContext, x as getInjectedPlatformContext } from "./useProtocolTemplates-BbvlHoPD.js";
2
2
  import { r as useSettingsStore, t as useAuthStore } from "./auth-DZAwEeis.js";
3
3
  import { i as usePlatformContext } from "./useFormBuilder-DKekvXRs.js";
4
4
  import { i as useApi, r as useRequestSyncState } from "./useExperimentSelector-DdCy5VNv.js";
@@ -1670,4 +1670,4 @@ function useCurrentExperiment(options = {}) {
1670
1670
  //#endregion
1671
1671
  export { useCommandHistory as A, parseDelimitedText as C, createPluginResourceClient as D, validateImportFile as E, useAuth as F, useAsync as M, useAsyncBatch as N, useResourceCrud as O, usePasskey as P, detectDelimiter as S, useFileImport as T, useWellPlateAdapter as _, pluginFormDataFromPayload as a, wellIdToCoordinate as b, usePluginClient as c, resolvePluginBaseUrl as d, runWellPlateValidation as f, createWellPlateWells as g, createRowConditions as h, getPluginPageSelectorItems as i, usePluginConfig as j, useOptimisticMutation as k, usePluginSettings as l, createColumnConditions as m, downloadBlob as n, uploadPluginEndpoint as o, useWellPlateValidation as p, downloadPluginEndpoint as r, useCurrentExperiment as s, createPluginClient as t, buildPluginEndpointUrl as u, coordinateToWellId as v, readFileAsText as w, wellIdsInRectangle as x, useWellPainting as y };
1672
1672
 
1673
- //# sourceMappingURL=composables-CFSn4NN3.js.map
1673
+ //# sourceMappingURL=composables-DrE6OcZZ.js.map