@morscherlab/mint-sdk 1.2.0-beta.13 → 1.2.0-beta.15

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.
@@ -13,7 +13,7 @@ export declare function usePickerSelection(nav: Navigation, mode: () => PickerSe
13
13
  excluded: PickerExcluded[];
14
14
  bytes: number;
15
15
  }>;
16
- focused: import('vue').ComputedRef<PickerNode | null>;
16
+ focused: import('vue').ComputedRef<PickerNode>;
17
17
  select: (node: PickerNode, modifiers?: {
18
18
  metaKey?: boolean;
19
19
  ctrlKey?: boolean;
@@ -15,7 +15,7 @@ type PickerEmit = {
15
15
  };
16
16
  /** Internal orchestration; public consumers use FilePicker's props and events. */
17
17
  export declare function useFilePicker(props: PickerStateProps, emit: PickerEmit): {
18
- previewNode: import('vue').ComputedRef<PickerNode | null>;
18
+ previewNode: import('vue').ComputedRef<PickerNode>;
19
19
  sourceNames: Record<PickerSource, string>;
20
20
  sourceIcons: Record<PickerSource, string>;
21
21
  allowedSources: import('vue').ComputedRef<PickerSource[]>;
@@ -130,7 +130,7 @@ export declare function useFilePicker(props: PickerStateProps, emit: PickerEmit)
130
130
  excluded: import('..').PickerExcluded[];
131
131
  bytes: number;
132
132
  }>;
133
- focused: import('vue').ComputedRef<PickerNode | null>;
133
+ focused: import('vue').ComputedRef<PickerNode>;
134
134
  select: (node: PickerNode, modifiers?: {
135
135
  metaKey?: boolean;
136
136
  ctrlKey?: boolean;
@@ -166,7 +166,7 @@ export declare function useFilePicker(props: PickerStateProps, emit: PickerEmit)
166
166
  excluded: import('..').PickerExcluded[];
167
167
  bytes: number;
168
168
  }>;
169
- focused: import('vue').ComputedRef<PickerNode | null>;
169
+ focused: import('vue').ComputedRef<PickerNode>;
170
170
  resolving: import('vue').ShallowRef<boolean, boolean>;
171
171
  resolutionError: import('vue').ShallowRef<string, string>;
172
172
  filesInput: import('vue').Ref<HTMLInputElement | null, HTMLInputElement | null>;
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { a as SORT_OPTIONS, c as formatExperimentDate, d as resolveExperimentCode, f as BaseModal_default, h as BaseButton_default, i as EXPERIMENT_STATUS_VARIANT_MAP, l as formatExperimentStatus, m as useEventListener, n as EXPERIMENT_STATUS_LABELS, o as datePresetToISO, p as useFocusTrap, r as EXPERIMENT_STATUS_OPTIONS, s as experimentIdFromRoute, t as DATE_PRESET_OPTIONS, u as getExperimentStatusVariant } from "./experiment-utils-DV3DrvE_.js";
2
2
  import { a as BaseSelect_default, i as BasePill_default, n as useRequestSyncState, r as EmptyState_default, s as BaseInput_default, t as Skeleton_default } from "./Skeleton-DxtwJ5gt.js";
3
3
  import { $ as resolveJobCapabilities, A as useConcentrationUnits, At as formatTimeSlot, Bt as MultiSelect_default, C as controlsToViewIds, Ct as addMinutes, D as getTypeDefault, Dt as findNearestTimeSlotIndex, E as getFieldRegistryEntry, Et as findAvailableSlots, F as ATOMIC_WEIGHTS, Ft as rangesOverlap, G as createGeneratedAnalysisTransport, Gt as BaseToggle_default, Ht as useSelectionLimit, I as useChemicalFormula, It as snapToSlot, J as isActiveJobStatus, Jt as BaseTextarea_default, K as useGeneratedAnalysis, Kt as BaseCheckbox_default, L as GeneratedPathInput_default, Lt as toMinutes, M as SequenceInput_default, Mt as generateTimeSlots, N as useSequenceUtils, Nt as isTimeInRange, O as ConcentrationInput_default, Ot as formatDuration, P as FormulaInput_default, Pt as parseTime, Q as normalizeJobState, R as ArtifactSelectorModal_default, Rt as useTimeUtils, S as controlsToTopBarSettingsConfig, St as TimePicker_default, T as getDefaultControlView, Tt as durationMinutes, Ut as BaseSlider_default, Vt as useListSelection, W as resolveCurrentPluginId, Wt as BaseRadioGroup_default, X as jobStatusLabel, Y as isTerminalJobStatus, Z as normalizeJobPercent, _ as controlsToFormSchema, _t as pluginSecretLabel, a as defineDoseCalculatorControlProps, at as AlertBox_default, b as controlsToSettingsSchema, bt as usesPluginSecretReferences, c as defineWellPlateDoseComponentBindings, ct as SecretInput_default, d as defineControlModel, dt as PLUGIN_SECRET_REF_KEY, ft as clearPluginSecret, gt as pluginSecretId, h as controlValuesToComponentProps, ht as keepPluginSecret, i as useControlSchema, j as MoleculeInput_default, jt as fromMinutes, k as UnitInput_default, kt as formatTime, l as defineWellPlateDoseControlProps, lt as PLUGIN_SECRET_FORMAT_KEY, m as controlValuesToComponentBindingsById, mt as isPluginSecretRef, n as defineControls, o as defineDoseDesignControlModel, ot as FileUploader_default, p as controlValuesToComponentBindings, pt as isPluginSecretLocked, q as usePluginJobs, qt as Tooltip_default, r as getControlDefaults, s as defineWellPlateControlProps, st as NumberInput_default, t as defineControlComponentBindings, tt as DateTimePicker_default, u as useControlWorkspace, ut as PLUGIN_SECRET_FORMAT_REF, v as controlsToSectionFormSchema, vt as pluginSecretState, w as controlsToViewItems, wt as compareTime, x as controlsToSidebarPanels, xt as TagsInput_default, y as controlsToSectionFormSchemas, yt as setPluginSecret, z as useAnalysisArtifacts, zt as DatePicker_default } from "./useControlSchema-aMZlb4Sc.js";
4
- import { $ as AutoGroupModal_default, A as ChemicalFormula_default, At as IconButton_default, B as BioTemplateExperimentWorkspaceView_default, C as SequenceProgressBar_default, Ct as AppTopBar_default, D as formatSequenceRemaining, Dt as CollapsibleCard_default, E as formatSequenceEta, Et as PluginIcon_default, F as SmartGroupModal_default, Ft as Calendar_default, G as StatusIndicator_default, H as Breadcrumb_default, I as GroupAssigner_default, It as DropdownButton_default, J as DoseDesignWorkspaceView_default, K as Divider_default, L as RackEditor_default, Lt as SegmentedControl_default, M as ProtocolStepEditor_default, Mt as AppToastContainer_default, N as SampleHierarchyTree_default, Nt as DataFrame_default, O as sequenceProgressPercent, Ot as ThemeToggle_default, P as ReagentEditor_default, Pt as LoadingSpinner_default, Q as SampleSelector_default, R as BioTemplatePresetWorkspaceView_default, Rt as BaseTabs_default, S as InstrumentAlertLog_default, St as StepWizard_default, T as estimateSequenceRemainingSeconds, Tt as AppAvatarMenu_default, U as Avatar_default, V as BioTemplateRenderer_default, W as ProgressBar_default, X as ComponentBindingRenderer_default, Y as ControlWorkspaceView_default, Z as ScheduleCalendar_default, _ as inferLcmsPlateTypeFromWellIds, _t as MobileSupportGate_default, a as FileBrowserModal_default, at as WellPlate_default, b as InstrumentStatusCard_default, bt as FormBuilder_default, c as TimeRangeInput_default, ct as GeneratedPluginView_default, d as AuditTrail_default, dt as GeneratedPlotlyResult_default, et as SmartGroupManual_default, f as LcmsSequenceTable_default, ft as ChartContainer_default, g as extractLcmsSampleName, gt as PluginWorkspaceView_default, h as extractLcmsCommonPrefix, ht as normalizeGeneratedJobInput, i as ArtifactSaveDialog_default, it as SampleLegend_default, j as ScientificNumber_default, jt as RuntimeUpdateNotice_default, k as sequenceSamplesRemaining, kt as ActionMenu_default, l as ExperimentDataViewer_default, lt as JobsStatusTray_default, m as basenameFromWindowsPath, mt as generatedJobFormSchema, n as FilePicker_default, nt as ReagentList_default, o as SectionCard_default, ot as ExperimentTimeline_default, p as DEFAULT_LCMS_SEQUENCE_COLUMNS, pt as generatedJobDefaults, q as AppContainer_default, r as FitPanel_default, rt as PlateMapEditor_default, s as ResourceCard_default, st as DoseCalculator_default, tt as SmartGroupFieldRecipe_default, u as BatchProgressList_default, ut as GeneratedResultRenderer_default, v as lcmsWellIdFromPosition, vt as AppLayout_default, w as estimateSequenceFinishDate, wt as AppPluginSwitcher_default, x as InstrumentStateBadge_default, xt as FormActions_default, y as reconstructLcmsPlateCellsFromSequenceItems, yt as AppSidebar_default, z as BioTemplatePackWorkspaceView_default, zt as ColorSlider_default } from "./components-DuQRC810.js";
4
+ import { $ as AutoGroupModal_default, A as ChemicalFormula_default, At as IconButton_default, B as BioTemplateExperimentWorkspaceView_default, C as SequenceProgressBar_default, Ct as AppTopBar_default, D as formatSequenceRemaining, Dt as CollapsibleCard_default, E as formatSequenceEta, Et as PluginIcon_default, F as SmartGroupModal_default, Ft as Calendar_default, G as StatusIndicator_default, H as Breadcrumb_default, I as GroupAssigner_default, It as DropdownButton_default, J as DoseDesignWorkspaceView_default, K as Divider_default, L as RackEditor_default, Lt as SegmentedControl_default, M as ProtocolStepEditor_default, Mt as AppToastContainer_default, N as SampleHierarchyTree_default, Nt as DataFrame_default, O as sequenceProgressPercent, Ot as ThemeToggle_default, P as ReagentEditor_default, Pt as LoadingSpinner_default, Q as SampleSelector_default, R as BioTemplatePresetWorkspaceView_default, Rt as BaseTabs_default, S as InstrumentAlertLog_default, St as StepWizard_default, T as estimateSequenceRemainingSeconds, Tt as AppAvatarMenu_default, U as Avatar_default, V as BioTemplateRenderer_default, W as ProgressBar_default, X as ComponentBindingRenderer_default, Y as ControlWorkspaceView_default, Z as ScheduleCalendar_default, _ as inferLcmsPlateTypeFromWellIds, _t as MobileSupportGate_default, a as FileBrowserModal_default, at as WellPlate_default, b as InstrumentStatusCard_default, bt as FormBuilder_default, c as TimeRangeInput_default, ct as GeneratedPluginView_default, d as AuditTrail_default, dt as GeneratedPlotlyResult_default, et as SmartGroupManual_default, f as LcmsSequenceTable_default, ft as ChartContainer_default, g as extractLcmsSampleName, gt as PluginWorkspaceView_default, h as extractLcmsCommonPrefix, ht as normalizeGeneratedJobInput, i as ArtifactSaveDialog_default, it as SampleLegend_default, j as ScientificNumber_default, jt as RuntimeUpdateNotice_default, k as sequenceSamplesRemaining, kt as ActionMenu_default, l as ExperimentDataViewer_default, lt as JobsStatusTray_default, m as basenameFromWindowsPath, mt as generatedJobFormSchema, n as FilePicker_default, nt as ReagentList_default, o as SectionCard_default, ot as ExperimentTimeline_default, p as DEFAULT_LCMS_SEQUENCE_COLUMNS, pt as generatedJobDefaults, q as AppContainer_default, r as FitPanel_default, rt as PlateMapEditor_default, s as ResourceCard_default, st as DoseCalculator_default, tt as SmartGroupFieldRecipe_default, u as BatchProgressList_default, ut as GeneratedResultRenderer_default, v as lcmsWellIdFromPosition, vt as AppLayout_default, w as estimateSequenceFinishDate, wt as AppPluginSwitcher_default, x as InstrumentStateBadge_default, xt as FormActions_default, y as reconstructLcmsPlateCellsFromSequenceItems, yt as AppSidebar_default, z as BioTemplatePackWorkspaceView_default, zt as ColorSlider_default } from "./components-6IIxCSI8.js";
5
5
  import { s as FormField_default, t as SettingsModal_default } from "./SettingsModal-Dphh3RrI.js";
6
6
  import { $ as getInjectedFrontendRevision, A as useFileImport, B as REORDER_ANNOUNCER_STYLE, C as useExpansionSet, D as detectDelimiter, F as extractSampleNamesFromDesignData, G as combinePluginJobSources, H as useListReorder, I as extractSampleOptionsFromDesignData, J as usePluginWorkspace, K as useJobsStatusTray, L as unwrapExperimentDesignData, M as extractSamplesFromDesignData, N as useAutoGroup, O as parseDelimitedText, Q as useAppExperiment, R as DEFAULT_COLORS, S as useExperimentData, U as useReorderAnnouncer, V as reorderList, W as useDoseCalculator, X as useMobileSupportGate, Y as DEFAULT_MOBILE_VIEWPORT_QUERY, Z as APP_EXPERIMENT_KEY, _ as useBioTemplateControls, a as DEFAULT_PRESETS, at as candidateMatchesSearch, b as useScheduleDrag, c as useReagentSeries, ct as compareSortValues, d as useBioTemplatePresetWorkspace, dt as useRovingFocus, et as useRuntimeAlignment, f as useBioTemplatePackWorkspace, g as useBioTemplateComponents, h as toBioTemplateComponentPropsByComponent, i as useProtocolTemplates, it as useToast, j as validateImportFile, k as readFileAsText, l as useGroupAssignment, lt as useSortedItems, m as getBioTemplateComponentProps, nt as usePresenceHeartbeat, o as DEFAULT_UNITS, ot as normalizeSearchQuery, p as useBioTemplateWorkspace, q as usePluginJobCenter, rt as useTheme, s as generateDilutionSeries, st as useTextSearch, tt as getPresenceClientId, u as useRackEditor, ut as useMenuKeyboard, v as useTemplateCollection, w as useSampleGroups, x as useExperimentSamples, y as useExperimentSave, z as useWellPlateEditor } from "./validation-nBbSn1TI.js";
7
7
  import { a as useAuthStore, c as paletteCssVariables, d as useSettingsStore, i as useApi, l as tableDensityToSize, n as AuthenticationRequiredError, o as PALETTE_CSS_VARIABLES, s as colorPalettes, u as tryUseSettingsStore } from "./errors-_W0-LbA6.js";
package/dist/install.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import "./useControlSchema-aMZlb4Sc.js";
2
- import { t as components_exports } from "./components-DuQRC810.js";
2
+ import { t as components_exports } from "./components-6IIxCSI8.js";
3
3
  //#region src/install.ts
4
4
  /**
5
5
  * Vue plugin that registers all MINT SDK components globally.
package/dist/styles.css CHANGED
@@ -4148,6 +4148,14 @@ code, pre {
4148
4148
  width: 1.5rem;
4149
4149
  height: 1.5rem;
4150
4150
  }
4151
+ /* A bare <svg> in the slot has no intrinsic size and collapses to 0 width as a
4152
+ flex item; fill the sized icon box so callers need not size their icon. */
4153
+ .mint-icon-button__icon--sm > svg,
4154
+ .mint-icon-button__icon--md > svg,
4155
+ .mint-icon-button__icon--lg > svg {
4156
+ width: 100%;
4157
+ height: 100%;
4158
+ }
4151
4159
  /* Spinner */
4152
4160
  .mint-icon-button__spinner {
4153
4161
  animation: mint-spin 1s linear infinite;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morscherlab/mint-sdk",
3
- "version": "1.2.0-beta.13",
3
+ "version": "1.2.0-beta.15",
4
4
  "description": "MINT Platform SDK — Vue 3 components, composables, and types for plugin development. MINT = Mass-spec INtegrated Toolkit.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -0,0 +1,18 @@
1
+ import { readFileSync } from 'node:fs'
2
+ import { resolve } from 'node:path'
3
+ import { describe, expect, it } from 'vitest'
4
+
5
+ // jsdom has no layout, so this pins the stylesheet contract instead: a bare
6
+ // <svg> passed to IconButton's slot must be sized by the icon box, otherwise it
7
+ // collapses to zero width as a flex item (FilePicker source toggles, beta.14).
8
+ describe('IconButton icon sizing', () => {
9
+ it('should size a bare slot svg to the icon box when the caller passes no dimensions', () => {
10
+ const css = readFileSync(
11
+ resolve(__dirname, '../../styles/components/icon-button.css'),
12
+ 'utf8',
13
+ )
14
+ expect(css).toMatch(
15
+ /\.mint-icon-button__icon--sm > svg,\s*\.mint-icon-button__icon--md > svg,\s*\.mint-icon-button__icon--lg > svg \{\s*width: 100%;\s*height: 100%;\s*\}/,
16
+ )
17
+ })
18
+ })
@@ -52,7 +52,7 @@ function keydown(event: KeyboardEvent, row: PickerTreeRow) {
52
52
  event.key === 'Home'
53
53
  ? available[0]
54
54
  : event.key === 'End'
55
- ? available.at(-1)
55
+ ? available[available.length - 1]
56
56
  : available[
57
57
  Math.max(
58
58
  0,
@@ -152,7 +152,7 @@ export function usePickerNavigation(adapter: () => PickerAdapter, request: () =>
152
152
  ? trail.value.findIndex((crumb) => crumb.path === target)
153
153
  : trail.value.length - 2
154
154
  trail.value = index < 0 ? [] : trail.value.slice(0, index + 1)
155
- path.value = trail.value.at(-1)?.path ?? ''
155
+ path.value = trail.value[trail.value.length - 1]?.path ?? ''
156
156
  }
157
157
  const rows = computed(() => {
158
158
  const result: PickerTreeRow[] = []
@@ -213,7 +213,9 @@ export function usePickerSelection(
213
213
  if (token === generation) resolving.value = false
214
214
  }
215
215
  }
216
- const focused = computed(() => nav.nodes.value.get(focusPath.value) ?? roots.value.at(-1) ?? null)
216
+ const focused = computed(
217
+ () => nav.nodes.value.get(focusPath.value) ?? roots.value[roots.value.length - 1] ?? null,
218
+ )
217
219
  function folderProgress(node: PickerNode): string {
218
220
  if (node.kind !== 'folder' || node.fileCount == null) return ''
219
221
  const allowed = chosen.value.files.filter((file) =>
@@ -167,6 +167,15 @@
167
167
  height: 1.5rem;
168
168
  }
169
169
 
170
+ /* A bare <svg> in the slot has no intrinsic size and collapses to 0 width as a
171
+ flex item; fill the sized icon box so callers need not size their icon. */
172
+ .mint-icon-button__icon--sm > svg,
173
+ .mint-icon-button__icon--md > svg,
174
+ .mint-icon-button__icon--lg > svg {
175
+ width: 100%;
176
+ height: 100%;
177
+ }
178
+
170
179
  /* Spinner */
171
180
  .mint-icon-button__spinner {
172
181
  animation: mint-spin 1s linear infinite;