@morscherlab/mint-sdk 1.3.0-beta.9 → 1.3.0

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.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { $ as PlateEditor_default, A as SampleLegend_default, At as AppToastContainer_default, B as StatusIndicator_default, C as ChemicalFormula_default, Ct as AppAvatarMenu_default, D as ReagentEditor_default, Dt as ActionMenu_default, E as SampleHierarchyTree_default, Et as ThemeToggle_default, F as SettingsModal_default, Ft as Calendar_default, G as ControlWorkspaceView_default, H as LayoutResizeHandle_default, I as AdductText_default, It as BasePill_default, J as SampleSelector_default, K as ComponentBindingRenderer_default, L as Breadcrumb_default, Lt as SegmentedControl_default, M as BioTemplatePackWorkspaceView_default, Mt as FormField_default, N as BioTemplateExperimentWorkspaceView_default, Nt as DataFrame_default, O as SmartGroupModal_default, Ot as IconButton_default, P as BioTemplateRenderer_default, Pt as LoadingSpinner_default, Q as ReagentList_default, R as Avatar_default, Rt as BaseTabs_default, S as sequenceSamplesRemaining, St as AppTopBar_default, T as ProtocolStepEditor_default, Tt as CollapsibleCard_default, U as AppContainer_default, V as Divider_default, W as DoseDesignWorkspaceView_default, X as SmartGroupManual_default, Y as AutoGroupModal_default, Z as SmartGroupFieldRecipe_default, _ as estimateSequenceFinishDate, _t as AppLayout_default, a as ArtifactSaveDialog_default, at as GeneratedPluginView_default, b as formatSequenceRemaining, bt as FormActions_default, c as SectionCard_default, ct as GeneratedPlotlyResult_default, d as ExperimentCodeBadge_default, dt as ChartContainer_default, et as ConfirmDialog_default, f as ExperimentDataViewer_default, ft as generatedJobDefaults, g as SequenceProgressBar_default, gt as MobileSupportGate_default, h as InstrumentStateBadge_default, ht as PluginWorkspaceView_default, i as ExperimentPopover_default, it as DoseCalculator_default, j as BioTemplatePresetWorkspaceView_default, jt as AlertBox_default, k as GroupAssigner_default, kt as RuntimeUpdateNotice_default, l as ResourceCard_default, lt as PlotlyChart_default, m as AuditTrail_default, mt as normalizeGeneratedJobInput, n as FilePicker_default, nt as sampleTypeMarker, o as ArtifactSelectorModal_default, ot as JobsStatusTray_default, p as BatchProgressList_default, pt as generatedJobFormSchema, q as ScheduleCalendar_default, r as FitPanel_default, rt as ExperimentTimeline_default, s as ExperimentSelectorModal_default, st as GeneratedResultRenderer_default, tt as WellPlate_default, u as TimeRangeInput_default, ut as mintPlotlyTemplate, v as estimateSequenceRemainingSeconds, vt as AppSidebar_default, w as ScientificNumber_default, wt as PluginIcon_default, x as sequenceProgressPercent, xt as StepWizard_default, y as formatSequenceEta, yt as FormBuilder_default, z as ProgressBar_default, zt as SearchableSelect_default } from "./components-GDDvof8D.js";
1
+ import { $ as PlateEditor_default, A as SampleLegend_default, At as AppToastContainer_default, B as StatusIndicator_default, C as ChemicalFormula_default, Ct as AppAvatarMenu_default, D as ReagentEditor_default, Dt as ActionMenu_default, E as SampleHierarchyTree_default, Et as ThemeToggle_default, F as SettingsModal_default, Ft as Calendar_default, G as ControlWorkspaceView_default, H as LayoutResizeHandle_default, I as AdductText_default, It as BasePill_default, J as SampleSelector_default, K as ComponentBindingRenderer_default, L as Breadcrumb_default, Lt as SegmentedControl_default, M as BioTemplatePackWorkspaceView_default, Mt as FormField_default, N as BioTemplateExperimentWorkspaceView_default, Nt as DataFrame_default, O as SmartGroupModal_default, Ot as IconButton_default, P as BioTemplateRenderer_default, Pt as LoadingSpinner_default, Q as ReagentList_default, R as Avatar_default, Rt as BaseTabs_default, S as sequenceSamplesRemaining, St as AppTopBar_default, T as ProtocolStepEditor_default, Tt as CollapsibleCard_default, U as AppContainer_default, V as Divider_default, W as DoseDesignWorkspaceView_default, X as SmartGroupManual_default, Y as AutoGroupModal_default, Z as SmartGroupFieldRecipe_default, _ as estimateSequenceFinishDate, _t as AppLayout_default, a as ArtifactSaveDialog_default, at as GeneratedPluginView_default, b as formatSequenceRemaining, bt as FormActions_default, c as SectionCard_default, ct as GeneratedPlotlyResult_default, d as ExperimentCodeBadge_default, dt as ChartContainer_default, et as ConfirmDialog_default, f as ExperimentDataViewer_default, ft as generatedJobDefaults, g as SequenceProgressBar_default, gt as MobileSupportGate_default, h as InstrumentStateBadge_default, ht as PluginWorkspaceView_default, i as ExperimentPopover_default, it as DoseCalculator_default, j as BioTemplatePresetWorkspaceView_default, jt as AlertBox_default, k as GroupAssigner_default, kt as RuntimeUpdateNotice_default, l as ResourceCard_default, lt as PlotlyChart_default, m as AuditTrail_default, mt as normalizeGeneratedJobInput, n as FilePicker_default, nt as sampleTypeMarker, o as ArtifactSelectorModal_default, ot as JobsStatusTray_default, p as BatchProgressList_default, pt as generatedJobFormSchema, q as ScheduleCalendar_default, r as FitPanel_default, rt as ExperimentTimeline_default, s as ExperimentSelectorModal_default, st as GeneratedResultRenderer_default, tt as WellPlate_default, u as TimeRangeInput_default, ut as mintPlotlyTemplate, v as estimateSequenceRemainingSeconds, vt as AppSidebar_default, w as ScientificNumber_default, wt as PluginIcon_default, x as sequenceProgressPercent, xt as StepWizard_default, y as formatSequenceEta, yt as FormBuilder_default, z as ProgressBar_default, zt as SearchableSelect_default } from "./components-vHfxV2PB.js";
2
2
  import { a as tryUseSettingsStore, c as mintApiErrorFromResponse, i as tableDensityToSize, n as colorPalettes, o as useSettingsStore, r as paletteCssVariables, s as MintApiError, t as PALETTE_CSS_VARIABLES } from "./settings-BLr8lzw6.js";
3
3
  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-DTANyVKV.js";
4
4
  import { i as BaseSelect_default, n as Skeleton_default, o as BaseInput_default, r as EmptyState_default } from "./ResourcePickerListInternal-CFAw4vTZ.js";
package/dist/install.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as components_exports } from "./components-GDDvof8D.js";
1
+ import { t as components_exports } from "./components-vHfxV2PB.js";
2
2
  //#region src/install.ts
3
3
  /**
4
4
  * Vue plugin that registers all MINT SDK components globally.
package/dist/styles.css CHANGED
@@ -19491,8 +19491,8 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19491
19491
 
19492
19492
  /* AppTopBar page selector — left-side route/page dropdown.
19493
19493
  Trigger speaks the field language (5a): 36px (the identity tile height), hover changes the background
19494
- only, open = field focus, inline 12px chevron. Menu = .mint-popover +
19495
- .mint-menu-item (2d); __menu / __item stay as aliases. */
19494
+ only, open = field focus, inline 12px chevron. The menu keeps the 1.2 panel
19495
+ (own card, tinted active row) rather than .mint-popover + .mint-menu-item. */
19496
19496
 
19497
19497
  .mint-page-selector {
19498
19498
  position: relative;
@@ -19592,44 +19592,88 @@ html.dark .mint-experiment-selector__filters-toggle--active {
19592
19592
 
19593
19593
  .mint-page-selector__menu {
19594
19594
  position: absolute;
19595
- top: calc(100% + 0.25rem);
19595
+ top: calc(100% + 0.375rem);
19596
19596
  left: 0;
19597
19597
  width: 16.25rem;
19598
+ background: var(--bg-card);
19599
+ border: 1px solid var(--border-color);
19600
+ border-radius: var(--radius-lg);
19601
+ box-shadow: var(--shadow-md);
19602
+ padding: 0.375rem;
19598
19603
  z-index: 50;
19599
19604
  }
19600
19605
 
19601
19606
  .mint-page-selector__menu-title {
19602
- padding: 0.25rem 0.5rem 0.375rem;
19607
+ padding: 0.375rem 0.625rem 0.5rem;
19603
19608
  font-size: 0.75rem;
19604
19609
  font-weight: 500;
19605
19610
  color: var(--text-secondary);
19606
19611
  }
19607
19612
 
19613
+ .mint-page-selector__item {
19614
+ display: flex;
19615
+ align-items: center;
19616
+ gap: 0.625rem;
19617
+ width: 100%;
19618
+ padding: 0.5rem 0.625rem;
19619
+ border: 0;
19620
+ background: transparent;
19621
+ border-radius: 0.4375rem;
19622
+ color: var(--text-primary);
19623
+ font-size: 0.8125rem;
19624
+ font-weight: 500;
19625
+ font-family: inherit;
19626
+ text-align: left;
19627
+ text-decoration: none;
19628
+ cursor: pointer;
19629
+ transition: background-color var(--mint-transition);
19630
+ }
19631
+
19632
+ .mint-page-selector__item:hover:not(.mint-page-selector__item--disabled) {
19633
+ background: var(--bg-hover);
19634
+ }
19635
+
19636
+ .mint-page-selector__item--active {
19637
+ background: var(--bg-tertiary);
19638
+ font-weight: 600;
19639
+ }
19640
+
19641
+ .mint-page-selector__item--disabled {
19642
+ opacity: var(--mint-disabled-opacity);
19643
+ cursor: not-allowed;
19644
+ }
19645
+
19608
19646
  .mint-page-selector__item-icon {
19609
- width: 1.25rem;
19610
- height: 1.25rem;
19611
- border-radius: var(--radius-sm);
19647
+ width: 1.375rem;
19648
+ height: 1.375rem;
19649
+ border-radius: 0.3125rem;
19612
19650
  background: var(--bg-tertiary);
19613
- color: var(--text-secondary-strong);
19651
+ color: var(--text-secondary);
19614
19652
  display: grid;
19615
19653
  place-items: center;
19616
19654
  flex-shrink: 0;
19617
19655
  }
19618
19656
 
19619
- .mint-page-selector__item-icon--metadata {
19657
+ .mint-page-selector__item--active .mint-page-selector__item-icon {
19658
+ background: var(--color-primary-soft);
19659
+ color: var(--color-primary);
19660
+ }
19661
+
19662
+ .mint-page-selector__item-icon--metadata,
19663
+ .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
19620
19664
  background: transparent;
19621
19665
  color: inherit;
19622
19666
  }
19623
19667
 
19624
19668
  .mint-page-selector__item-icon svg {
19625
- width: 0.75rem;
19626
- height: 0.75rem;
19669
+ width: 0.8125rem;
19670
+ height: 0.8125rem;
19627
19671
  }
19628
19672
 
19629
19673
  .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
19630
- width: 1.25rem;
19631
- height: 1.25rem;
19632
- border-radius: var(--radius-sm);
19674
+ width: 1.375rem;
19675
+ height: 1.375rem;
19676
+ border-radius: 0.3125rem;
19633
19677
  }
19634
19678
 
19635
19679
  .mint-page-selector__item-label {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@morscherlab/mint-sdk",
3
- "version": "1.3.0-beta.9",
3
+ "version": "1.3.0",
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",
@@ -154,23 +154,23 @@ describe('AppTopBarPageSelectorInternal', () => {
154
154
  expect(wrapper.get('.mint-plugin-icon__img').attributes('src')).toBe(httpsIcon)
155
155
  })
156
156
 
157
- it('should render the menu on the shared popover surface when opened', async () => {
157
+ it('should render the menu as its own panel, not the shared popover, when opened', async () => {
158
158
  const wrapper = mount(AppTopBarPageSelectorInternal, {
159
159
  props: { currentPageId: 'Workspace', pages: ['Workspace', 'Results'] },
160
160
  })
161
161
 
162
162
  await wrapper.get('.mint-page-selector__trigger').trigger('click')
163
163
 
164
- expect(wrapper.get('.mint-page-selector__menu').classes()).toContain('mint-popover')
164
+ expect(wrapper.get('.mint-page-selector__menu').classes()).not.toContain('mint-popover')
165
165
  })
166
166
 
167
- it('should mark the current page as a selected menu item when opened', async () => {
167
+ it('should mark the current page as the active item when opened', async () => {
168
168
  const wrapper = mount(AppTopBarPageSelectorInternal, {
169
169
  props: { currentPageId: 'Workspace', pages: ['Workspace', 'Results'] },
170
170
  })
171
171
 
172
172
  await wrapper.get('.mint-page-selector__trigger').trigger('click')
173
173
 
174
- expect(wrapper.findAll('.mint-page-selector__item')[0].classes()).toContain('mint-menu-item--selected')
174
+ expect(wrapper.findAll('.mint-page-selector__item')[0].classes()).toContain('mint-page-selector__item--active')
175
175
  })
176
176
  })
@@ -89,7 +89,7 @@ function handleSelect(page: PageSelectorItem) {
89
89
  </span>
90
90
  </button>
91
91
 
92
- <div v-if="isOpen" class="mint-popover mint-page-selector__menu" role="menu">
92
+ <div v-if="isOpen" class="mint-page-selector__menu" role="menu">
93
93
  <div class="mint-page-selector__menu-title">Go to</div>
94
94
  <ActionItemInternal
95
95
  v-for="page in normalizedPages"
@@ -98,8 +98,8 @@ function handleSelect(page: PageSelectorItem) {
98
98
  :to="page.to"
99
99
  :disabled="page.disabled"
100
100
  :class="[
101
- 'mint-menu-item mint-page-selector__item',
102
- { 'mint-menu-item--selected mint-page-selector__item--active': page.id === current?.id },
101
+ 'mint-page-selector__item',
102
+ { 'mint-page-selector__item--active': page.id === current?.id },
103
103
  { 'mint-page-selector__item--disabled': page.disabled },
104
104
  ]"
105
105
  role="menuitem"
@@ -121,9 +121,6 @@ function handleSelect(page: PageSelectorItem) {
121
121
  </slot>
122
122
  </span>
123
123
  <span class="mint-page-selector__item-label">{{ page.label }}</span>
124
- <svg class="mint-menu-item__check" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
125
- <path d="M3.5 8.5l3 3 6-7" />
126
- </svg>
127
124
  </ActionItemInternal>
128
125
  </div>
129
126
  </div>
@@ -1,7 +1,7 @@
1
1
  /* AppTopBar page selector — left-side route/page dropdown.
2
2
  Trigger speaks the field language (5a): 36px (the identity tile height), hover changes the background
3
- only, open = field focus, inline 12px chevron. Menu = .mint-popover +
4
- .mint-menu-item (2d); __menu / __item stay as aliases. */
3
+ only, open = field focus, inline 12px chevron. The menu keeps the 1.2 panel
4
+ (own card, tinted active row) rather than .mint-popover + .mint-menu-item. */
5
5
 
6
6
  .mint-page-selector {
7
7
  position: relative;
@@ -101,44 +101,88 @@
101
101
 
102
102
  .mint-page-selector__menu {
103
103
  position: absolute;
104
- top: calc(100% + 0.25rem);
104
+ top: calc(100% + 0.375rem);
105
105
  left: 0;
106
106
  width: 16.25rem;
107
+ background: var(--bg-card);
108
+ border: 1px solid var(--border-color);
109
+ border-radius: var(--radius-lg);
110
+ box-shadow: var(--shadow-md);
111
+ padding: 0.375rem;
107
112
  z-index: 50;
108
113
  }
109
114
 
110
115
  .mint-page-selector__menu-title {
111
- padding: 0.25rem 0.5rem 0.375rem;
116
+ padding: 0.375rem 0.625rem 0.5rem;
112
117
  font-size: 0.75rem;
113
118
  font-weight: 500;
114
119
  color: var(--text-secondary);
115
120
  }
116
121
 
122
+ .mint-page-selector__item {
123
+ display: flex;
124
+ align-items: center;
125
+ gap: 0.625rem;
126
+ width: 100%;
127
+ padding: 0.5rem 0.625rem;
128
+ border: 0;
129
+ background: transparent;
130
+ border-radius: 0.4375rem;
131
+ color: var(--text-primary);
132
+ font-size: 0.8125rem;
133
+ font-weight: 500;
134
+ font-family: inherit;
135
+ text-align: left;
136
+ text-decoration: none;
137
+ cursor: pointer;
138
+ transition: background-color var(--mint-transition);
139
+ }
140
+
141
+ .mint-page-selector__item:hover:not(.mint-page-selector__item--disabled) {
142
+ background: var(--bg-hover);
143
+ }
144
+
145
+ .mint-page-selector__item--active {
146
+ background: var(--bg-tertiary);
147
+ font-weight: 600;
148
+ }
149
+
150
+ .mint-page-selector__item--disabled {
151
+ opacity: var(--mint-disabled-opacity);
152
+ cursor: not-allowed;
153
+ }
154
+
117
155
  .mint-page-selector__item-icon {
118
- width: 1.25rem;
119
- height: 1.25rem;
120
- border-radius: var(--radius-sm);
156
+ width: 1.375rem;
157
+ height: 1.375rem;
158
+ border-radius: 0.3125rem;
121
159
  background: var(--bg-tertiary);
122
- color: var(--text-secondary-strong);
160
+ color: var(--text-secondary);
123
161
  display: grid;
124
162
  place-items: center;
125
163
  flex-shrink: 0;
126
164
  }
127
165
 
128
- .mint-page-selector__item-icon--metadata {
166
+ .mint-page-selector__item--active .mint-page-selector__item-icon {
167
+ background: var(--color-primary-soft);
168
+ color: var(--color-primary);
169
+ }
170
+
171
+ .mint-page-selector__item-icon--metadata,
172
+ .mint-page-selector__item--active .mint-page-selector__item-icon--metadata {
129
173
  background: transparent;
130
174
  color: inherit;
131
175
  }
132
176
 
133
177
  .mint-page-selector__item-icon svg {
134
- width: 0.75rem;
135
- height: 0.75rem;
178
+ width: 0.8125rem;
179
+ height: 0.8125rem;
136
180
  }
137
181
 
138
182
  .mint-page-selector__metadata-icon.mint-plugin-icon--sm {
139
- width: 1.25rem;
140
- height: 1.25rem;
141
- border-radius: var(--radius-sm);
183
+ width: 1.375rem;
184
+ height: 1.375rem;
185
+ border-radius: 0.3125rem;
142
186
  }
143
187
 
144
188
  .mint-page-selector__item-label {