@morscherlab/mint-sdk 1.4.0-beta.9 → 1.4.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/README.md +14 -3
- package/dist/{AlertBox-B2Bgr3ei.js → AlertBox-DwgNTEqf.js} +3 -3
- package/dist/{AlertBox-B2Bgr3ei.js.map → AlertBox-DwgNTEqf.js.map} +1 -1
- package/dist/{AppSidebar-Dq9W1jE2.js → AppSidebar-CZZaxni0.js} +1103 -144
- package/dist/AppSidebar-CZZaxni0.js.map +1 -0
- package/dist/{ConfirmDialog-nbJj51is.js → ConfirmDialog-CjWoxAD1.js} +2 -2
- package/dist/{ConfirmDialog-nbJj51is.js.map → ConfirmDialog-CjWoxAD1.js.map} +1 -1
- package/dist/{ExperimentPopover-5T1fAq2L.js → ExperimentPopover-DujiuQIO.js} +5 -5
- package/dist/{ExperimentPopover-5T1fAq2L.js.map → ExperimentPopover-DujiuQIO.js.map} +1 -1
- package/dist/{ExperimentSelectorModal-65peG4Up.js → ExperimentSelectorModal-B4j4eUOJ.js} +114 -98
- package/dist/ExperimentSelectorModal-B4j4eUOJ.js.map +1 -0
- package/dist/{SegmentedControl-BtnnjWzs.js → SegmentedControl-DyUPH3I5.js} +2 -2
- package/dist/{SegmentedControl-BtnnjWzs.js.map → SegmentedControl-DyUPH3I5.js.map} +1 -1
- package/dist/{SettingsModal-483nyI6b.js → SettingsModal-D2MOOtuO.js} +26 -25
- package/dist/SettingsModal-D2MOOtuO.js.map +1 -0
- package/dist/__stories__/experiment-helpers.d.ts +10 -0
- package/dist/__tests__/components/AppTopBarOnboarding.test.d.ts +1 -0
- package/dist/__tests__/components/FloatingPanelsInModal.test.d.ts +1 -0
- package/dist/__tests__/composables/useFloatingPanel.test.d.ts +1 -0
- package/dist/__tests__/composables/useOnboarding.test.d.ts +1 -0
- package/dist/__tests__/styles/paletteTokens.test.d.ts +1 -0
- package/dist/__tests__/styles/v2AuditRules.test.d.ts +1 -0
- package/dist/components/AppTopBar.vue.d.ts +20 -5
- package/dist/components/BaseButton.vue.d.ts +4 -2
- package/dist/components/ExperimentSelectorModal.vue.d.ts +15 -1
- package/dist/components/JobsStatusTray.vue.d.ts +15 -4
- package/dist/components/PluginWorkspaceView.props.d.ts +3 -0
- package/dist/components/PluginWorkspaceView.vue.d.ts +3 -0
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +3 -3
- package/dist/components/internal/AppTopBarOnboardingInternal.vue.d.ts +7 -0
- package/dist/components/internal/AppTopBarPageSelectorInternal.vue.d.ts +2 -1
- package/dist/components/internal/AutoGroupModalInternal.vue.d.ts +2 -2
- package/dist/components/internal/OnboardingLayerInternal.vue.d.ts +7 -0
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +8 -0
- package/dist/composables/pluginWorkspaceModel.d.ts +2 -2
- package/dist/composables/useFileImport.d.ts +7 -0
- package/dist/composables/useFloatingPanel.d.ts +29 -0
- package/dist/composables/useJobCenter.d.ts +41 -3
- package/dist/composables/useOnboarding.d.ts +119 -0
- package/dist/{controlSchemaModel-B8CTXagP.js → controlSchemaModel-Bsg0t5Ab.js} +2 -2
- package/dist/{controlSchemaModel-B8CTXagP.js.map → controlSchemaModel-Bsg0t5Ab.js.map} +1 -1
- package/dist/{data-CgILxDLW.js → data-Boeh4uPI.js} +13 -12
- package/dist/{data-CgILxDLW.js.map → data-Boeh4uPI.js.map} +1 -1
- package/dist/data.d.ts +1 -1
- package/dist/data.js +9 -9
- package/dist/{experiment-43OJtH7R.js → experiment-DyO54FQB.js} +25 -61
- package/dist/experiment-DyO54FQB.js.map +1 -0
- package/dist/{experimentStatus-Cqp6qNrR.js → experimentStatus-DCn2QKG7.js} +2 -2
- package/dist/{experimentStatus-Cqp6qNrR.js.map → experimentStatus-DCn2QKG7.js.map} +1 -1
- package/dist/index.js +20 -20
- package/dist/{install-BtLWTk6H.js → install-BEHp7Mo-.js} +15 -15
- package/dist/{install-BtLWTk6H.js.map → install-BEHp7Mo-.js.map} +1 -1
- package/dist/install.js +1 -1
- package/dist/{lab-MHzp-_J8.js → lab-D61eaX6f.js} +68 -61
- package/dist/{lab-MHzp-_J8.js.map → lab-D61eaX6f.js.map} +1 -1
- package/dist/lab.js +4 -4
- package/dist/{records-B6gpM_3e.js → records-D4aQXyZu.js} +193 -133
- package/dist/records-D4aQXyZu.js.map +1 -0
- package/dist/{runtime-7vfl_bI3.js → runtime-q-R0CNLh.js} +400 -33
- package/dist/runtime-q-R0CNLh.js.map +1 -0
- package/dist/runtime.d.ts +1 -1
- package/dist/runtime.js +7 -7
- package/dist/{shell-Cs9OJMnm.js → shell-6CGFvUUw.js} +10 -5
- package/dist/{shell-Cs9OJMnm.js.map → shell-6CGFvUUw.js.map} +1 -1
- package/dist/shell.d.ts +1 -0
- package/dist/shell.js +6 -6
- package/dist/stores/index.d.ts +1 -1
- package/dist/stores/index.js +2 -2
- package/dist/stores/settings.d.ts +4 -12
- package/dist/styles.css +1191 -479
- package/dist/types/components.d.ts +2 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/jobs.d.ts +9 -0
- package/dist/types/platform.d.ts +1 -1
- package/dist/{useDropdownState-8yWMu-7_.js → useDropdownState-uFIz6Yv8.js} +16 -4
- package/dist/useDropdownState-uFIz6Yv8.js.map +1 -0
- package/dist/{useExperimentSamples-DHnxKFAF.js → useExperimentSamples-QEFoq4tf.js} +48 -6
- package/dist/useExperimentSamples-QEFoq4tf.js.map +1 -0
- package/dist/{useListReorder-BitdUhxn.js → useListReorder-DsuzwWGS.js} +122 -172
- package/dist/useListReorder-DsuzwWGS.js.map +1 -0
- package/dist/{useRackEditor-DiwCt77M.js → useRackEditor-KpZ4iJ6o.js} +22 -32
- package/dist/useRackEditor-KpZ4iJ6o.js.map +1 -0
- package/dist/useRealtime-B58Lo-Tm.js +508 -0
- package/dist/useRealtime-B58Lo-Tm.js.map +1 -0
- package/dist/{useRequest-D506eHi8.js → useRequest-BuDmW8Jc.js} +8 -37
- package/dist/useRequest-BuDmW8Jc.js.map +1 -0
- package/package.json +3 -2
- package/src/__stories__/experiment-helpers.ts +3 -3
- package/src/__tests__/components/ActionMenu.test.ts +2 -2
- package/src/__tests__/components/AppTopBar.test.ts +206 -1
- package/src/__tests__/components/AppTopBarOnboarding.test.ts +160 -0
- package/src/__tests__/components/AppTopBarPageSelector.test.ts +125 -9
- package/src/__tests__/components/BaseButton.test.ts +19 -0
- package/src/__tests__/components/BaseModal.test.ts +13 -0
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +34 -1
- package/src/__tests__/components/FloatingPanelsInModal.test.ts +94 -0
- package/src/__tests__/components/GeneratedPluginView.test.ts +1 -1
- package/src/__tests__/components/JobsStatusTray.test.ts +373 -71
- package/src/__tests__/components/PluginWorkspaceView.test.ts +63 -1
- package/src/__tests__/components/SampleSelector.test.ts +20 -0
- package/src/__tests__/components/SettingsModal.test.ts +9 -2
- package/src/__tests__/composables/useFileImport.test.ts +36 -0
- package/src/__tests__/composables/useFloatingPanel.test.ts +68 -0
- package/src/__tests__/composables/useJobCenter.test.ts +262 -3
- package/src/__tests__/composables/useOnboarding.test.ts +317 -0
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +4 -3
- package/src/__tests__/fixtures/table-import/cells.xlsx +0 -0
- package/src/__tests__/fixtures/table-import/samples.xlsx +0 -0
- package/src/__tests__/stores/settings.test.ts +21 -21
- package/src/__tests__/styles/cssTokens.test.ts +4 -1
- package/src/__tests__/styles/menusShellRefresh.test.ts +8 -2
- package/src/__tests__/styles/paletteTokens.test.ts +44 -0
- package/src/__tests__/styles/v2AuditRules.test.ts +104 -0
- package/src/components/ActionMenu.vue +6 -37
- package/src/components/AppTopBar.onboarding.story.vue +69 -0
- package/src/components/AppTopBar.story.vue +59 -4
- package/src/components/AppTopBar.vue +132 -10
- package/src/components/BaseButton.vue +16 -2
- package/src/components/BaseModal.vue +2 -1
- package/src/components/ExperimentSelectorModal.story.vue +38 -0
- package/src/components/ExperimentSelectorModal.vue +20 -1
- package/src/components/GeneratedPluginView.vue +4 -9
- package/src/components/GeneratedResultRenderer.vue +3 -4
- package/src/components/JobsStatusTray.story.vue +97 -43
- package/src/components/JobsStatusTray.vue +287 -290
- package/src/components/LayoutResizeHandle.story.vue +65 -4
- package/src/components/PluginWorkspaceView.props.ts +3 -0
- package/src/components/PluginWorkspaceView.vue +17 -0
- package/src/components/SampleSelector.story.vue +21 -6
- package/src/components/SampleSelector.vue +10 -3
- package/src/components/SectionCard.story.vue +33 -0
- package/src/components/SettingsModal.vue +7 -12
- package/src/components/Tooltip.vue +9 -32
- package/src/components/internal/AppTopBarOnboardingInternal.vue +172 -0
- package/src/components/internal/AppTopBarPageSelectorInternal.vue +140 -72
- package/src/components/internal/DatePickerDateInternal.vue +7 -45
- package/src/components/internal/DatePickerDateTimeInternal.vue +7 -1
- package/src/components/internal/DatePickerTimeInternal.vue +8 -1
- package/src/components/internal/NumberUnitInputInternal.vue +4 -18
- package/src/components/internal/OnboardingLayerInternal.vue +173 -0
- package/src/components/internal/SelectMultipleInternal.vue +6 -1
- package/src/components/internal/SelectSearchableInternal.vue +6 -1
- package/src/components/internal/WellEditPopupInternal.vue +11 -22
- package/src/components/internal/WorkspaceShellInternal.vue +12 -0
- package/src/composables/pluginWorkspaceModel.ts +2 -2
- package/src/composables/useFileImport.ts +51 -1
- package/src/composables/useFloatingPanel.ts +107 -0
- package/src/composables/useJobCenter.ts +188 -6
- package/src/composables/useOnboarding.ts +465 -0
- package/src/composables/usePluginWorkspace.ts +1 -1
- package/src/data.ts +1 -0
- package/src/runtime.ts +2 -1
- package/src/shell.ts +17 -0
- package/src/stores/index.ts +0 -2
- package/src/stores/settings.ts +20 -50
- package/src/styles/components/action-menu.css +1 -1
- package/src/styles/components/app-layout.css +6 -3
- package/src/styles/components/app-page-selector.css +120 -45
- package/src/styles/components/app-top-bar.css +165 -3
- package/src/styles/components/button.css +8 -0
- package/src/styles/components/dataframe.css +1 -1
- package/src/styles/components/date-picker.css +4 -2
- package/src/styles/components/datetime-picker.css +4 -4
- package/src/styles/components/experiment-selector-modal.css +13 -0
- package/src/styles/components/jobs-status-tray.css +134 -296
- package/src/styles/components/layout-resize-handle.css +59 -16
- package/src/styles/components/modal.css +3 -3
- package/src/styles/components/number-input.css +1 -1
- package/src/styles/components/onboarding.css +368 -0
- package/src/styles/components/progress-bar.css +3 -3
- package/src/styles/components/sample-selector.css +43 -0
- package/src/styles/components/searchable-select.css +3 -7
- package/src/styles/components/section-card.css +30 -6
- package/src/styles/components/settings-modal.css +7 -2
- package/src/styles/components/time-picker.css +3 -6
- package/src/styles/components/toast.css +1 -1
- package/src/styles/components/tooltip.css +2 -2
- package/src/styles/components/unit-input.css +1 -1
- package/src/styles/components/well-edit-popup.css +2 -2
- package/src/styles/index.css +1 -0
- package/src/styles/variables.css +153 -15
- package/src/types/components.ts +2 -0
- package/src/types/index.ts +1 -0
- package/src/types/jobs.ts +10 -0
- package/src/types/platform.ts +1 -1
- package/dist/AppSidebar-Dq9W1jE2.js.map +0 -1
- package/dist/ExperimentSelectorModal-65peG4Up.js.map +0 -1
- package/dist/SettingsModal-483nyI6b.js.map +0 -1
- package/dist/experiment-43OJtH7R.js.map +0 -1
- package/dist/records-B6gpM_3e.js.map +0 -1
- package/dist/runtime-7vfl_bI3.js.map +0 -1
- package/dist/useDropdownState-8yWMu-7_.js.map +0 -1
- package/dist/useExperimentSamples-DHnxKFAF.js.map +0 -1
- package/dist/useListReorder-BitdUhxn.js.map +0 -1
- package/dist/useRackEditor-DiwCt77M.js.map +0 -1
- package/dist/useRealtime-C3iy9QkU.js +0 -699
- package/dist/useRealtime-C3iy9QkU.js.map +0 -1
- package/dist/useRequest-D506eHi8.js.map +0 -1
package/src/styles/variables.css
CHANGED
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
@import url('https://fonts.googleapis.com/css2?family=Geist:wght@400;500;600;700&family=Geist+Mono:wght@400;500;600&display=swap');
|
|
7
7
|
|
|
8
|
+
/* Tailwind v4's layer order, declared first so the SDK's base and utilities
|
|
9
|
+
layers sort the same way with or without Tailwind in the host. */
|
|
10
|
+
@layer theme, base, components, utilities;
|
|
11
|
+
|
|
8
12
|
/* ==========================================================================
|
|
9
13
|
CSS Variables - Light Mode
|
|
10
14
|
========================================================================== */
|
|
@@ -47,13 +51,8 @@
|
|
|
47
51
|
where --text-secondary would drop to ~4.35:1. */
|
|
48
52
|
--text-secondary-strong: #475569;
|
|
49
53
|
|
|
50
|
-
/* Brand colors
|
|
51
|
-
|
|
52
|
-
--color-primary: #0D9488;
|
|
53
|
-
--color-primary-hover: #0F766E;
|
|
54
|
-
--color-primary-pressed: #115E59;
|
|
55
|
-
--color-primary-soft: rgba(13, 148, 136, 0.10);
|
|
56
|
-
--color-primary-border: #99F6E4;
|
|
54
|
+
/* Brand colors: the accent (--color-primary*) comes from the palette
|
|
55
|
+
blocks below the dark block (html[data-palette], default teal). */
|
|
57
56
|
/* Fixed teal scale, the same in both themes. */
|
|
58
57
|
--color-primary-50: #F0FDFA;
|
|
59
58
|
--color-primary-100: #CCFBF1;
|
|
@@ -135,6 +134,8 @@
|
|
|
135
134
|
--form-height-md: 2rem;
|
|
136
135
|
--form-height-lg: 2.5rem;
|
|
137
136
|
--mint-gutter: 0.5rem;
|
|
137
|
+
/* Distance from the outermost cards to the window edge, in every density. */
|
|
138
|
+
--mint-page-inset: 1rem;
|
|
138
139
|
|
|
139
140
|
/* Semantic colors */
|
|
140
141
|
--mint-success: #10B981;
|
|
@@ -169,7 +170,7 @@
|
|
|
169
170
|
/* Soft focus rings — 3px translucent. Used by all form primitives
|
|
170
171
|
post-0.16 visual refresh. Solid variants above kept for legacy
|
|
171
172
|
components that haven't migrated yet. */
|
|
172
|
-
--focus-ring-soft: 0 0 0 3px
|
|
173
|
+
--focus-ring-soft: 0 0 0 3px color-mix(in srgb, var(--color-primary) 18%, transparent);
|
|
173
174
|
/* Red is perceptually brighter than teal at equal alpha; drop 2pp to keep visual weight matched. */
|
|
174
175
|
--focus-ring-soft-error: 0 0 0 3px rgba(239, 68, 68, 0.18);
|
|
175
176
|
|
|
@@ -191,6 +192,12 @@
|
|
|
191
192
|
--mint-border-focus: var(--color-primary);
|
|
192
193
|
/* Colour-only transitions; no lift, bounce or glow. */
|
|
193
194
|
--mint-transition: 120ms ease;
|
|
195
|
+
/* Stacking layers: modal < jobs tray < onboarding tour < floating panels < tooltips and toasts. */
|
|
196
|
+
--mint-z-modal: 50;
|
|
197
|
+
--mint-z-tray: 1000;
|
|
198
|
+
--mint-z-tour: 1100;
|
|
199
|
+
--mint-z-popover: 1200;
|
|
200
|
+
--mint-z-toast: 9999;
|
|
194
201
|
}
|
|
195
202
|
|
|
196
203
|
/* ==========================================================================
|
|
@@ -207,12 +214,7 @@ html.dark {
|
|
|
207
214
|
--border-light: #172033;
|
|
208
215
|
--border-strong: #334155;
|
|
209
216
|
|
|
210
|
-
/* Brand colors - Dark mode
|
|
211
|
-
--color-primary: #2DD4BF;
|
|
212
|
-
--color-primary-hover: #5EEAD4;
|
|
213
|
-
--color-primary-pressed: #99F6E4;
|
|
214
|
-
--color-primary-soft: rgba(45, 212, 191, 0.12);
|
|
215
|
-
--color-primary-border: rgba(45, 212, 191, 0.35);
|
|
217
|
+
/* Brand colors - Dark mode: the accent comes from the palette blocks below. */
|
|
216
218
|
/* Dark ink on the light accent fill (10.1:1 on #2DD4BF). */
|
|
217
219
|
--text-on-accent: #0B1120;
|
|
218
220
|
--color-experiment-hover: #E2E8F0;
|
|
@@ -248,7 +250,7 @@ html.dark {
|
|
|
248
250
|
|
|
249
251
|
/* Focus ring - dark mode offset uses bg-primary instead of white */
|
|
250
252
|
--focus-ring-offset: 0 0 0 2px var(--bg-primary), 0 0 0 4px var(--color-primary);
|
|
251
|
-
--focus-ring-soft: 0 0 0 3px
|
|
253
|
+
--focus-ring-soft: 0 0 0 3px color-mix(in srgb, var(--color-primary) 22%, transparent);
|
|
252
254
|
--focus-ring-soft-error: 0 0 0 3px rgba(248, 113, 113, 0.26);
|
|
253
255
|
|
|
254
256
|
/* Legacy aliases */
|
|
@@ -258,6 +260,122 @@ html.dark {
|
|
|
258
260
|
color-scheme: dark;
|
|
259
261
|
}
|
|
260
262
|
|
|
263
|
+
/* Accent palettes (Settings → Color palette). The settings store writes
|
|
264
|
+
html[data-palette]; the palette swatches set the same attribute on their
|
|
265
|
+
strip to preview a palette. Each palette is one accent in both themes: white
|
|
266
|
+
text on the light-mode fill, dark text (--text-on-accent) on the dark-mode
|
|
267
|
+
fill. Hues come from the biology plot-style palettes. */
|
|
268
|
+
|
|
269
|
+
/* Teal (default): teal-600 fill, teal-700 hover + ink, teal-800 pressed.
|
|
270
|
+
White on #0D9488 is 3.74:1, a known AA exception. */
|
|
271
|
+
:root,
|
|
272
|
+
[data-palette="default"] {
|
|
273
|
+
--color-primary: #0D9488;
|
|
274
|
+
--color-primary-hover: #0F766E;
|
|
275
|
+
--color-primary-pressed: #115E59;
|
|
276
|
+
--color-primary-soft: rgba(13, 148, 136, 0.10);
|
|
277
|
+
--color-primary-border: #99F6E4;
|
|
278
|
+
}
|
|
279
|
+
html.dark,
|
|
280
|
+
html.dark [data-palette="default"] {
|
|
281
|
+
--color-primary: #2DD4BF;
|
|
282
|
+
--color-primary-hover: #5EEAD4;
|
|
283
|
+
--color-primary-pressed: #99F6E4;
|
|
284
|
+
--color-primary-soft: rgba(45, 212, 191, 0.12);
|
|
285
|
+
--color-primary-border: rgba(45, 212, 191, 0.35);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/* Colour-blind safe: Okabe-Ito blue accent, and Okabe-Ito bluish green,
|
|
289
|
+
vermilion and orange for status, so success and error differ for every
|
|
290
|
+
colour-vision type. White on #0072B2 is 5.19:1. */
|
|
291
|
+
:root[data-palette="colorblind"],
|
|
292
|
+
[data-palette="colorblind"] {
|
|
293
|
+
--color-primary: #0072B2;
|
|
294
|
+
--color-primary-hover: #005F94;
|
|
295
|
+
--color-primary-pressed: #004C77;
|
|
296
|
+
--color-primary-soft: rgba(0, 114, 178, 0.10);
|
|
297
|
+
--color-primary-border: #B3D5EA;
|
|
298
|
+
--mint-success: #009E73;
|
|
299
|
+
--mint-success-hover: #00805D;
|
|
300
|
+
--mint-success-bg: rgba(0, 158, 115, 0.1);
|
|
301
|
+
--mint-success-border: rgba(0, 158, 115, 0.3);
|
|
302
|
+
--mint-error: #D55E00;
|
|
303
|
+
--mint-error-hover: #B34E00;
|
|
304
|
+
--mint-error-bg: rgba(213, 94, 0, 0.1);
|
|
305
|
+
--mint-error-border: rgba(213, 94, 0, 0.3);
|
|
306
|
+
--mint-warning: #E69F00;
|
|
307
|
+
--mint-warning-hover: #C78800;
|
|
308
|
+
--mint-warning-bg: rgba(230, 159, 0, 0.1);
|
|
309
|
+
--mint-warning-border: rgba(230, 159, 0, 0.3);
|
|
310
|
+
--mint-warning-text: #8F5F00;
|
|
311
|
+
}
|
|
312
|
+
html.dark[data-palette="colorblind"],
|
|
313
|
+
html.dark [data-palette="colorblind"] {
|
|
314
|
+
--color-primary: #56B4E9;
|
|
315
|
+
--color-primary-hover: #7CC5EE;
|
|
316
|
+
--color-primary-pressed: #A3D6F3;
|
|
317
|
+
--color-primary-soft: rgba(86, 180, 233, 0.14);
|
|
318
|
+
--color-primary-border: rgba(86, 180, 233, 0.38);
|
|
319
|
+
--mint-success-bg: rgba(0, 158, 115, 0.15);
|
|
320
|
+
--mint-error-bg: rgba(213, 94, 0, 0.15);
|
|
321
|
+
--mint-warning-bg: rgba(230, 159, 0, 0.15);
|
|
322
|
+
--mint-warning-text: #FCD34D;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/* Purple: plot-style purple #8781bd, deepened so white text is 5.15:1. */
|
|
326
|
+
:root[data-palette="purple"],
|
|
327
|
+
[data-palette="purple"] {
|
|
328
|
+
--color-primary: #6B64B0;
|
|
329
|
+
--color-primary-hover: #5A539E;
|
|
330
|
+
--color-primary-pressed: #4A448A;
|
|
331
|
+
--color-primary-soft: rgba(107, 100, 176, 0.10);
|
|
332
|
+
--color-primary-border: #D3D0EC;
|
|
333
|
+
}
|
|
334
|
+
html.dark[data-palette="purple"],
|
|
335
|
+
html.dark [data-palette="purple"] {
|
|
336
|
+
--color-primary: #A9A3DB;
|
|
337
|
+
--color-primary-hover: #C2BDE7;
|
|
338
|
+
--color-primary-pressed: #D8D4F1;
|
|
339
|
+
--color-primary-soft: rgba(169, 163, 219, 0.14);
|
|
340
|
+
--color-primary-border: rgba(169, 163, 219, 0.38);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/* Ocean: plot-style ocean ramp, #2171B5 fill (white 5.13:1), #6BAED6 dark. */
|
|
344
|
+
:root[data-palette="ocean"],
|
|
345
|
+
[data-palette="ocean"] {
|
|
346
|
+
--color-primary: #2171B5;
|
|
347
|
+
--color-primary-hover: #1B5F99;
|
|
348
|
+
--color-primary-pressed: #164E7E;
|
|
349
|
+
--color-primary-soft: rgba(33, 113, 181, 0.10);
|
|
350
|
+
--color-primary-border: #BBD7EE;
|
|
351
|
+
}
|
|
352
|
+
html.dark[data-palette="ocean"],
|
|
353
|
+
html.dark [data-palette="ocean"] {
|
|
354
|
+
--color-primary: #6BAED6;
|
|
355
|
+
--color-primary-hover: #8EC2E2;
|
|
356
|
+
--color-primary-pressed: #B0D5EC;
|
|
357
|
+
--color-primary-soft: rgba(107, 174, 214, 0.14);
|
|
358
|
+
--color-primary-border: rgba(107, 174, 214, 0.38);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* Forest: plot-style forest_clay, #2F6B4F fill (white 6.29:1), #7AA874 dark. */
|
|
362
|
+
:root[data-palette="forest"],
|
|
363
|
+
[data-palette="forest"] {
|
|
364
|
+
--color-primary: #2F6B4F;
|
|
365
|
+
--color-primary-hover: #275A42;
|
|
366
|
+
--color-primary-pressed: #1F4935;
|
|
367
|
+
--color-primary-soft: rgba(47, 107, 79, 0.10);
|
|
368
|
+
--color-primary-border: #BFD8C6;
|
|
369
|
+
}
|
|
370
|
+
html.dark[data-palette="forest"],
|
|
371
|
+
html.dark [data-palette="forest"] {
|
|
372
|
+
--color-primary: #7AA874;
|
|
373
|
+
--color-primary-hover: #95BC90;
|
|
374
|
+
--color-primary-pressed: #B1CFAD;
|
|
375
|
+
--color-primary-soft: rgba(122, 168, 116, 0.14);
|
|
376
|
+
--color-primary-border: rgba(122, 168, 116, 0.38);
|
|
377
|
+
}
|
|
378
|
+
|
|
261
379
|
/* Comfortable density (html[data-density], written by the settings store):
|
|
262
380
|
the pre-v2 control heights and a wider gutter. */
|
|
263
381
|
[data-density="comfortable"] {
|
|
@@ -281,6 +399,22 @@ body {
|
|
|
281
399
|
transition: background-color 0.15s, color 0.15s;
|
|
282
400
|
}
|
|
283
401
|
|
|
402
|
+
/* No page-level rubber-band bounce or pull-to-refresh; overflow: hidden does
|
|
403
|
+
not stop it. Panels still scroll, and their overscroll stops at their own
|
|
404
|
+
edge. A browser tab keeps the horizontal swipe for back and forward; an
|
|
405
|
+
installed PWA has no history swipe, so it drops both axes. */
|
|
406
|
+
html,
|
|
407
|
+
body {
|
|
408
|
+
overscroll-behavior-y: none;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
@media (display-mode: standalone) {
|
|
412
|
+
html,
|
|
413
|
+
body {
|
|
414
|
+
overscroll-behavior: none;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
284
418
|
code, pre {
|
|
285
419
|
font-family: var(--font-mono);
|
|
286
420
|
}
|
|
@@ -344,6 +478,9 @@ button, input, select, textarea {
|
|
|
344
478
|
/* ==========================================================================
|
|
345
479
|
MINT Utility Classes (for Tailwind v4 compatibility)
|
|
346
480
|
========================================================================== */
|
|
481
|
+
/* In Tailwind's utilities layer: unlayered, these beat every layered rule, so a
|
|
482
|
+
host's responsive variant (`lg:flex-row`) lost to the SDK's `.flex-col`. */
|
|
483
|
+
@layer utilities {
|
|
347
484
|
.bg-bg-hover {
|
|
348
485
|
background-color: var(--bg-tertiary);
|
|
349
486
|
}
|
|
@@ -719,6 +856,7 @@ button, input, select, textarea {
|
|
|
719
856
|
.max-w-sm {
|
|
720
857
|
max-width: 24rem;
|
|
721
858
|
}
|
|
859
|
+
} /* @layer utilities */
|
|
722
860
|
|
|
723
861
|
/* ==========================================================================
|
|
724
862
|
Reduced Motion
|
package/src/types/components.ts
CHANGED
|
@@ -317,6 +317,8 @@ export interface PluginWorkspaceViewSpec {
|
|
|
317
317
|
disabled?: import('vue').MaybeRefOrGetter<boolean>
|
|
318
318
|
reason?: import('vue').MaybeRefOrGetter<string | undefined>
|
|
319
319
|
}
|
|
320
|
+
/** Job source: the top bar shows the viewer's job and opens a JobsStatusTray. Read once at setup, like `experiment`. */
|
|
321
|
+
jobs?: import('vue').MaybeRefOrGetter<import('../composables/useJobCenter').PluginJobCenterSource | undefined>
|
|
320
322
|
}
|
|
321
323
|
|
|
322
324
|
|
package/src/types/index.ts
CHANGED
package/src/types/jobs.ts
CHANGED
|
@@ -68,3 +68,13 @@ export interface JobSnapshotPayload {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
export type JobStreamData = JobStateInput | JobSnapshotPayload
|
|
71
|
+
|
|
72
|
+
/** What the top-bar run slot shows for the viewer's own job. The plugin picks the job. */
|
|
73
|
+
export interface TopBarJob {
|
|
74
|
+
/** Lifecycle of the shown job; sets the icon and the tone. */
|
|
75
|
+
status: JobStatus
|
|
76
|
+
/** Tooltip and accessible name, e.g. "Extracting", "Saved to EXP-0142". Not shown as text. */
|
|
77
|
+
label: string
|
|
78
|
+
/** 0-100; drawn as a small bar after the icon. */
|
|
79
|
+
percent?: number | null
|
|
80
|
+
}
|
package/src/types/platform.ts
CHANGED
|
@@ -66,5 +66,5 @@ export type PlatformContext = Partial<Omit<PlatformFrontendContext, 'plugin'>> &
|
|
|
66
66
|
|
|
67
67
|
// Settings state types
|
|
68
68
|
export type ThemeMode = 'light' | 'dark' | 'system'
|
|
69
|
-
export type ColorPalette = 'default' | 'colorblind' | '
|
|
69
|
+
export type ColorPalette = 'default' | 'colorblind' | 'purple' | 'ocean' | 'forest'
|
|
70
70
|
export type TableDensity = 'compact' | 'normal' | 'comfortable'
|