@morscherlab/mint-sdk 1.1.0 → 1.1.1

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 (94) hide show
  1. package/dist/{EmptyState-DgBRoYAy.js → EmptyState-LMPS3keb.js} +3 -193
  2. package/dist/EmptyState-LMPS3keb.js.map +1 -0
  3. package/dist/{ExperimentPopover-BFw3QX8L.js → ExperimentPopover-D6_RGzTY.js} +113 -35
  4. package/dist/ExperimentPopover-D6_RGzTY.js.map +1 -0
  5. package/dist/{ExperimentSelectorModal-BBWXC7KW.js → ExperimentSelectorModal-CDNsNudn.js} +9 -11
  6. package/dist/ExperimentSelectorModal-CDNsNudn.js.map +1 -0
  7. package/dist/{SettingsModal-Dpg-X1OM.js → SettingsModal-BGBimSIA.js} +5 -5
  8. package/dist/{SettingsModal-Dpg-X1OM.js.map → SettingsModal-BGBimSIA.js.map} +1 -1
  9. package/dist/__stories__/experiment-helpers.d.ts +3 -0
  10. package/dist/__tests__/stores/experiment.test.d.ts +1 -0
  11. package/dist/{analysisArtifactTypes-ejqR8MX3.js → analysisArtifactTypes-DQ0MjwHZ.js} +1 -1
  12. package/dist/{analysisArtifactTypes-ejqR8MX3.js.map → analysisArtifactTypes-DQ0MjwHZ.js.map} +1 -1
  13. package/dist/components/ExperimentPopover.vue.d.ts +5 -0
  14. package/dist/components/ExperimentSelectorModal.vue.d.ts +1 -5
  15. package/dist/components/PluginWorkspaceView.props.d.ts +1 -4
  16. package/dist/components/PluginWorkspaceView.vue.d.ts +0 -1
  17. package/dist/components/SmartGroupFieldRecipe.vue.d.ts +2 -2
  18. package/dist/components/index.js +7 -7
  19. package/dist/{components-Ci_BTx00.js → components-BbOyjE2T.js} +24 -29
  20. package/dist/components-BbOyjE2T.js.map +1 -0
  21. package/dist/composables/experiment-utils.d.ts +10 -0
  22. package/dist/composables/index.d.ts +2 -2
  23. package/dist/composables/index.js +11 -10
  24. package/dist/composables/useAppExperiment.d.ts +29 -17
  25. package/dist/composables/usePlatformContext.d.ts +3 -3
  26. package/dist/{composables-C0VEJ73O.js → composables-CW8NRXLB.js} +5 -5
  27. package/dist/{composables-C0VEJ73O.js.map → composables-CW8NRXLB.js.map} +1 -1
  28. package/dist/experiment-Y9Iz7KYi.js +95 -0
  29. package/dist/experiment-Y9Iz7KYi.js.map +1 -0
  30. package/dist/{experiment-utils-CxkruZ3G.js → experiment-utils-7Yw-h0tD.js} +16 -2
  31. package/dist/{experiment-utils-CxkruZ3G.js.map → experiment-utils-7Yw-h0tD.js.map} +1 -1
  32. package/dist/index.js +16 -15
  33. package/dist/index.js.map +1 -1
  34. package/dist/install.js +7 -7
  35. package/dist/{plotly.min-BR53hja4.js → plotly.min-c2Sez60c.js} +1 -1
  36. package/dist/{plotly.min-BR53hja4.js.map → plotly.min-c2Sez60c.js.map} +1 -1
  37. package/dist/stores/auth.d.ts +6 -6
  38. package/dist/stores/experiment.d.ts +166 -0
  39. package/dist/stores/index.d.ts +1 -0
  40. package/dist/stores/index.js +3 -2
  41. package/dist/styles.css +188 -0
  42. package/dist/templates/index.js +4 -4
  43. package/dist/{templates-Cdj93S9C.js → templates-CJRFiWUX.js} +2 -2
  44. package/dist/{templates-Cdj93S9C.js.map → templates-CJRFiWUX.js.map} +1 -1
  45. package/dist/types/auth.d.ts +1 -1
  46. package/dist/types/index.js +1 -1
  47. package/dist/types/platform.d.ts +1 -1
  48. package/dist/{auth-B87xM--s.js → useApi-CDBq6z23.js} +191 -2
  49. package/dist/useApi-CDBq6z23.js.map +1 -0
  50. package/dist/{useControlSchema-B_qgU4rW.js → useControlSchema-BEAgLyyx.js} +5 -4
  51. package/dist/{useControlSchema-B_qgU4rW.js.map → useControlSchema-BEAgLyyx.js.map} +1 -1
  52. package/dist/{useDropdownState-gVaMXtwW.js → useDropdownState-Be-ug_ci.js} +2 -2
  53. package/dist/{useDropdownState-gVaMXtwW.js.map → useDropdownState-Be-ug_ci.js.map} +1 -1
  54. package/dist/{useExperimentSelector-BuQZRgMt.js → useExperimentSelector-Dld4841S.js} +4 -3
  55. package/dist/{useExperimentSelector-BuQZRgMt.js.map → useExperimentSelector-Dld4841S.js.map} +1 -1
  56. package/dist/{useFormBuilder-D1G5J5Z5.js → useFormBuilder-CR9pBApW.js} +2 -2
  57. package/dist/{useFormBuilder-D1G5J5Z5.js.map → useFormBuilder-CR9pBApW.js.map} +1 -1
  58. package/dist/{useProtocolTemplates-DeaOmMaw.js → useProtocolTemplates-DXeIHMwV.js} +38 -42
  59. package/dist/useProtocolTemplates-DXeIHMwV.js.map +1 -0
  60. package/package.json +1 -1
  61. package/src/__stories__/experiment-helpers.ts +12 -9
  62. package/src/__tests__/components/AppTopBar.test.ts +10 -6
  63. package/src/__tests__/components/ExperimentPopover.test.ts +64 -0
  64. package/src/__tests__/components/ExperimentSelectorModal.test.ts +86 -41
  65. package/src/__tests__/components/PluginWorkspaceView.test.ts +103 -19
  66. package/src/__tests__/components/SettingsModal.test.ts +1 -1
  67. package/src/__tests__/composables/experiment-utils.test.ts +33 -0
  68. package/src/__tests__/composables/useAppExperiment.test.ts +331 -92
  69. package/src/__tests__/composables/useAuth.test.ts +2 -2
  70. package/src/__tests__/composables/usePlatformContext.test.ts +5 -1
  71. package/src/__tests__/stores/experiment.test.ts +300 -0
  72. package/src/components/AppTopBar.vue +0 -2
  73. package/src/components/ExperimentPopover.story.vue +59 -0
  74. package/src/components/ExperimentPopover.vue +96 -6
  75. package/src/components/ExperimentSelectorModal.story.vue +6 -16
  76. package/src/components/ExperimentSelectorModal.vue +8 -4
  77. package/src/components/PluginWorkspaceView.props.ts +1 -4
  78. package/src/components/PluginWorkspaceView.story.vue +12 -5
  79. package/src/components/PluginWorkspaceView.vue +0 -2
  80. package/src/composables/experiment-utils.ts +22 -0
  81. package/src/composables/index.ts +1 -2
  82. package/src/composables/useAppExperiment.ts +57 -67
  83. package/src/composables/useAuth.ts +1 -1
  84. package/src/stores/experiment.ts +120 -0
  85. package/src/stores/index.ts +1 -0
  86. package/src/styles/components/experiment-popover.css +105 -0
  87. package/src/types/auth.ts +1 -1
  88. package/src/types/platform.ts +1 -1
  89. package/dist/EmptyState-DgBRoYAy.js.map +0 -1
  90. package/dist/ExperimentPopover-BFw3QX8L.js.map +0 -1
  91. package/dist/ExperimentSelectorModal-BBWXC7KW.js.map +0 -1
  92. package/dist/auth-B87xM--s.js.map +0 -1
  93. package/dist/components-Ci_BTx00.js.map +0 -1
  94. package/dist/useProtocolTemplates-DeaOmMaw.js.map +0 -1
@@ -5,6 +5,9 @@ export declare function installMockInterceptor(): void;
5
5
  * Wrapper component that fakes integrated mode and provides useAppExperiment context.
6
6
  * Use in story files to demonstrate experiment selector integration.
7
7
  *
8
+ * The preselected experiment is committed to the shared store as a full
9
+ * platform record — the same path the selector modal uses at runtime.
10
+ *
8
11
  * Props:
9
12
  * preselect (boolean, default true) - pre-select the first mock experiment
10
13
  */
@@ -0,0 +1 @@
1
+ export {};
@@ -4,4 +4,4 @@ var ANALYSIS_FILE_ARTIFACT_SCHEMA = "mint.analysis_file.v1";
4
4
  //#endregion
5
5
  export { ANALYSIS_FILE_ARTIFACT_SCHEMA as t };
6
6
 
7
- //# sourceMappingURL=analysisArtifactTypes-ejqR8MX3.js.map
7
+ //# sourceMappingURL=analysisArtifactTypes-DQ0MjwHZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysisArtifactTypes-ejqR8MX3.js","names":[],"sources":["../src/types/analysisArtifactTypes.ts"],"sourcesContent":["import type { TreeNode } from './componentLabTypes'\nimport type { SummaryData } from './componentWorkflowTypes'\n\n/** Result schema identifier for file-backed analysis artifacts. */\nexport const ANALYSIS_FILE_ARTIFACT_SCHEMA = 'mint.analysis_file.v1'\n\n/** Known artifact lifecycle states; kept open for forward compatibility. */\nexport type AnalysisArtifactStatus = 'active' | 'archived' | (string & {})\n\n/** Status filter vocabulary for artifact lists. */\nexport type AnalysisArtifactStatusFilter = 'active' | 'archived' | 'all'\n\n/** Summary row returned by GET /experiments/{id}/analysis-artifacts. */\nexport interface AnalysisArtifactSummary {\n id: number\n experiment_id: number\n plugin_id: string\n artifact_key: string\n display_name: string\n note?: string | null\n status: AnalysisArtifactStatus\n result_keys: string[]\n created_at?: string | null\n updated_at?: string | null\n archived_at?: string | null\n archived_by?: number | null\n}\n\n/** Full artifact returned by GET /experiments/{id}/analysis-artifacts/{artifactId}. */\nexport interface AnalysisArtifactDetail extends AnalysisArtifactSummary {\n result: Record<string, unknown>\n tree: TreeNode[]\n summary: SummaryData | null\n}\n\n/** Response of GET /experiments/{id}/analysis-artifacts. */\nexport interface AnalysisArtifactListResponse {\n artifacts: AnalysisArtifactSummary[]\n}\n\n/** Stable identity used when one plugin opens another plugin's artifact. */\nexport interface AnalysisArtifactTarget {\n experimentId: number\n artifactPluginId: string\n artifactKey: string\n /** Optional lookup hint. The stable identity remains the three fields above. */\n artifactId?: number\n}\n\n/** Body of PATCH /experiments/{id}/analysis-artifacts/{artifactId}. */\nexport interface AnalysisArtifactMetadataUpdate {\n display_name?: string\n /** undefined = keep, string = set, null = clear. */\n note?: string | null\n}\n\n/** How a save payload should be applied by the plugin backend. */\nexport type ArtifactSaveMode = 'create' | 'upsert' | 'update'\n\n/** Where file content comes from when a plugin uses ArtifactSaveDialog. */\nexport type ArtifactFileSource = 'upload' | 'handler'\n\ninterface ArtifactSavePayloadBase {\n experimentId: number\n artifactKey: string\n}\n\n/**\n * JSON artifact save — handler maps to save_analysis_artifact, which upserts by key.\n * That call only assigns display_name/note when they are provided, and cannot clear\n * either; use the metadata PATCH (useAnalysisArtifacts.updateMetadata) for that.\n */\nexport interface JsonArtifactSavePayload extends ArtifactSavePayloadBase {\n kind: 'json'\n mode: 'create' | 'upsert'\n result: Record<string, unknown>\n displayName?: string\n note?: string\n}\n\n/** File artifact create — handler maps to save_analysis_file_artifact (create-only: a reused key conflicts). */\nexport interface FileArtifactCreatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'create'\n file: File\n /** Maps to the Python `kind=` argument (defaults to \"file\" backend-side). */\n fileKind: string\n filename?: string\n displayName?: string\n note?: string\n contentType?: string\n metadata?: Record<string, unknown>\n}\n\n/**\n * File artifact replacement — handler maps to update_analysis_file_artifact\n * (transactional CAS replace). `kind` and `filename` are immutable backend-side, so\n * `fileKind` echoes the artifact's existing kind and no filename is carried. `note`\n * is three-state: omitted preserves, null clears, a string sets. `metadata` REPLACES\n * the previous result metadata rather than merging, so it always carries the full\n * intended map — omitting it clears whatever was there.\n */\nexport interface FileArtifactUpdatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'update'\n file: File\n fileKind: string\n note?: string | null\n contentType?: string\n metadata?: Record<string, unknown>\n}\n\n/**\n * File artifact create where the plugin handler produces the bytes itself.\n * This is intended for server-side serialization of in-memory analysis state;\n * the browser neither fabricates nor uploads a placeholder File.\n */\nexport interface HandlerFileArtifactCreatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'create'\n source: 'handler'\n fileKind: string\n displayName?: string\n note?: string\n metadata?: Record<string, unknown>\n}\n\n/** File artifact replacement where the plugin handler produces the bytes itself. */\nexport interface HandlerFileArtifactUpdatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'update'\n source: 'handler'\n fileKind: string\n note?: string | null\n metadata?: Record<string, unknown>\n}\n\nexport type ArtifactSavePayload =\n | JsonArtifactSavePayload\n | FileArtifactCreatePayload\n | FileArtifactUpdatePayload\n\n/** Payloads accepted when `ArtifactSaveDialog.fileSource` is `handler`. */\nexport type HandlerArtifactSavePayload =\n | JsonArtifactSavePayload\n | HandlerFileArtifactCreatePayload\n | HandlerFileArtifactUpdatePayload\n\n/** Every payload variant the dialog can emit across both file sources. */\nexport type ArtifactSaveDialogPayload =\n | ArtifactSavePayload\n | HandlerFileArtifactCreatePayload\n | HandlerFileArtifactUpdatePayload\n\n/** Optional handler result; cleanupPending surfaces AnalysisFileArtifactUpdate.cleanup_pending. */\nexport interface ArtifactSaveResult {\n artifact?: AnalysisArtifactSummary\n cleanupPending?: boolean\n}\n\n/**\n * Plugin-supplied save handler. The dialog never writes to the platform;\n * the handler forwards the payload to the plugin backend, which calls\n * save_analysis_artifact / save_analysis_file_artifact / update_analysis_file_artifact.\n */\nexport type ArtifactSaveHandler = (\n payload: ArtifactSavePayload,\n) => Promise<ArtifactSaveResult | void>\n\n/** Save handler paired with `ArtifactSaveDialog.fileSource=\"handler\"`. */\nexport type HandlerArtifactSaveHandler = (\n payload: HandlerArtifactSavePayload,\n) => Promise<ArtifactSaveResult | void>\n\n/** Handler accepted by ArtifactSaveDialog; `fileSource` selects the payload family. */\nexport type ArtifactSaveDialogHandler = ArtifactSaveHandler | HandlerArtifactSaveHandler\n"],"mappings":";;AAIA,IAAa,gCAAgC"}
1
+ {"version":3,"file":"analysisArtifactTypes-DQ0MjwHZ.js","names":[],"sources":["../src/types/analysisArtifactTypes.ts"],"sourcesContent":["import type { TreeNode } from './componentLabTypes'\nimport type { SummaryData } from './componentWorkflowTypes'\n\n/** Result schema identifier for file-backed analysis artifacts. */\nexport const ANALYSIS_FILE_ARTIFACT_SCHEMA = 'mint.analysis_file.v1'\n\n/** Known artifact lifecycle states; kept open for forward compatibility. */\nexport type AnalysisArtifactStatus = 'active' | 'archived' | (string & {})\n\n/** Status filter vocabulary for artifact lists. */\nexport type AnalysisArtifactStatusFilter = 'active' | 'archived' | 'all'\n\n/** Summary row returned by GET /experiments/{id}/analysis-artifacts. */\nexport interface AnalysisArtifactSummary {\n id: number\n experiment_id: number\n plugin_id: string\n artifact_key: string\n display_name: string\n note?: string | null\n status: AnalysisArtifactStatus\n result_keys: string[]\n created_at?: string | null\n updated_at?: string | null\n archived_at?: string | null\n archived_by?: number | null\n}\n\n/** Full artifact returned by GET /experiments/{id}/analysis-artifacts/{artifactId}. */\nexport interface AnalysisArtifactDetail extends AnalysisArtifactSummary {\n result: Record<string, unknown>\n tree: TreeNode[]\n summary: SummaryData | null\n}\n\n/** Response of GET /experiments/{id}/analysis-artifacts. */\nexport interface AnalysisArtifactListResponse {\n artifacts: AnalysisArtifactSummary[]\n}\n\n/** Stable identity used when one plugin opens another plugin's artifact. */\nexport interface AnalysisArtifactTarget {\n experimentId: number\n artifactPluginId: string\n artifactKey: string\n /** Optional lookup hint. The stable identity remains the three fields above. */\n artifactId?: number\n}\n\n/** Body of PATCH /experiments/{id}/analysis-artifacts/{artifactId}. */\nexport interface AnalysisArtifactMetadataUpdate {\n display_name?: string\n /** undefined = keep, string = set, null = clear. */\n note?: string | null\n}\n\n/** How a save payload should be applied by the plugin backend. */\nexport type ArtifactSaveMode = 'create' | 'upsert' | 'update'\n\n/** Where file content comes from when a plugin uses ArtifactSaveDialog. */\nexport type ArtifactFileSource = 'upload' | 'handler'\n\ninterface ArtifactSavePayloadBase {\n experimentId: number\n artifactKey: string\n}\n\n/**\n * JSON artifact save — handler maps to save_analysis_artifact, which upserts by key.\n * That call only assigns display_name/note when they are provided, and cannot clear\n * either; use the metadata PATCH (useAnalysisArtifacts.updateMetadata) for that.\n */\nexport interface JsonArtifactSavePayload extends ArtifactSavePayloadBase {\n kind: 'json'\n mode: 'create' | 'upsert'\n result: Record<string, unknown>\n displayName?: string\n note?: string\n}\n\n/** File artifact create — handler maps to save_analysis_file_artifact (create-only: a reused key conflicts). */\nexport interface FileArtifactCreatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'create'\n file: File\n /** Maps to the Python `kind=` argument (defaults to \"file\" backend-side). */\n fileKind: string\n filename?: string\n displayName?: string\n note?: string\n contentType?: string\n metadata?: Record<string, unknown>\n}\n\n/**\n * File artifact replacement — handler maps to update_analysis_file_artifact\n * (transactional CAS replace). `kind` and `filename` are immutable backend-side, so\n * `fileKind` echoes the artifact's existing kind and no filename is carried. `note`\n * is three-state: omitted preserves, null clears, a string sets. `metadata` REPLACES\n * the previous result metadata rather than merging, so it always carries the full\n * intended map — omitting it clears whatever was there.\n */\nexport interface FileArtifactUpdatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'update'\n file: File\n fileKind: string\n note?: string | null\n contentType?: string\n metadata?: Record<string, unknown>\n}\n\n/**\n * File artifact create where the plugin handler produces the bytes itself.\n * This is intended for server-side serialization of in-memory analysis state;\n * the browser neither fabricates nor uploads a placeholder File.\n */\nexport interface HandlerFileArtifactCreatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'create'\n source: 'handler'\n fileKind: string\n displayName?: string\n note?: string\n metadata?: Record<string, unknown>\n}\n\n/** File artifact replacement where the plugin handler produces the bytes itself. */\nexport interface HandlerFileArtifactUpdatePayload extends ArtifactSavePayloadBase {\n kind: 'file'\n mode: 'update'\n source: 'handler'\n fileKind: string\n note?: string | null\n metadata?: Record<string, unknown>\n}\n\nexport type ArtifactSavePayload =\n | JsonArtifactSavePayload\n | FileArtifactCreatePayload\n | FileArtifactUpdatePayload\n\n/** Payloads accepted when `ArtifactSaveDialog.fileSource` is `handler`. */\nexport type HandlerArtifactSavePayload =\n | JsonArtifactSavePayload\n | HandlerFileArtifactCreatePayload\n | HandlerFileArtifactUpdatePayload\n\n/** Every payload variant the dialog can emit across both file sources. */\nexport type ArtifactSaveDialogPayload =\n | ArtifactSavePayload\n | HandlerFileArtifactCreatePayload\n | HandlerFileArtifactUpdatePayload\n\n/** Optional handler result; cleanupPending surfaces AnalysisFileArtifactUpdate.cleanup_pending. */\nexport interface ArtifactSaveResult {\n artifact?: AnalysisArtifactSummary\n cleanupPending?: boolean\n}\n\n/**\n * Plugin-supplied save handler. The dialog never writes to the platform;\n * the handler forwards the payload to the plugin backend, which calls\n * save_analysis_artifact / save_analysis_file_artifact / update_analysis_file_artifact.\n */\nexport type ArtifactSaveHandler = (\n payload: ArtifactSavePayload,\n) => Promise<ArtifactSaveResult | void>\n\n/** Save handler paired with `ArtifactSaveDialog.fileSource=\"handler\"`. */\nexport type HandlerArtifactSaveHandler = (\n payload: HandlerArtifactSavePayload,\n) => Promise<ArtifactSaveResult | void>\n\n/** Handler accepted by ArtifactSaveDialog; `fileSource` selects the payload family. */\nexport type ArtifactSaveDialogHandler = ArtifactSaveHandler | HandlerArtifactSaveHandler\n"],"mappings":";;AAIA,IAAa,gCAAgC"}
@@ -2,6 +2,10 @@ interface Props {
2
2
  experimentName?: string;
3
3
  experimentCode?: string;
4
4
  experimentStatus?: string;
5
+ /** An experiment is bound but the platform has not returned its record yet. */
6
+ isResolving?: boolean;
7
+ /** Message explaining why the bound experiment could not be resolved. */
8
+ error?: string;
5
9
  showSave?: boolean;
6
10
  showDetach?: boolean;
7
11
  saveDisabled?: boolean;
@@ -21,6 +25,7 @@ declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, imp
21
25
  onSave?: (() => any) | undefined;
22
26
  onDetach?: (() => any) | undefined;
23
27
  }>, {
28
+ isResolving: boolean;
24
29
  showSave: boolean;
25
30
  showDetach: boolean;
26
31
  saveDisabled: boolean;
@@ -1,4 +1,4 @@
1
- import { ModalSize, ExperimentSummary } from '../types';
1
+ import { ModalSize } from '../types';
2
2
  interface Props {
3
3
  modelValue: boolean;
4
4
  experimentType?: string;
@@ -10,13 +10,9 @@ interface Props {
10
10
  showFilters?: boolean;
11
11
  }
12
12
  declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
13
- select: (experiment: ExperimentSummary) => any;
14
13
  "update:modelValue": (value: boolean) => any;
15
- deselect: () => any;
16
14
  }, string, import('vue').PublicProps, Readonly<Props> & Readonly<{
17
- onSelect?: ((experiment: ExperimentSummary) => any) | undefined;
18
15
  "onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
19
- onDeselect?: (() => any) | undefined;
20
16
  }>, {
21
17
  size: ModalSize;
22
18
  title: string;
@@ -1,7 +1,6 @@
1
1
  import { AccountMenuItem, PageSelectorItemInput, PillNavItemInput, PluginSwitcherInfo, SidebarToolSection, TopBarSettingsConfig, TopBarVariant } from '../types';
2
2
  import { FormEnhancements, FormSchema } from '../types/form-builder';
3
3
  import { ControlComponentBinding, ControlComponentBindingsById, ControlComponentBindingsConfig, ControlComponentPropsByIdMap, ControlComponentPropsMap, ControlModel, ControlModelBinding, ControlSchema, ControlWorkspaceOptions } from '../composables/useControlSchema';
4
- import { AppExperimentRecord } from '../composables/useAppExperiment';
5
4
  export type PluginWorkspaceSidebarVariant = 'default' | 'analysis';
6
5
  export interface PluginWorkspaceViewProps {
7
6
  /** App or plugin title shown in the top bar. */
@@ -52,10 +51,8 @@ export interface PluginWorkspaceViewProps {
52
51
  userInitial?: string;
53
52
  /** Classic profile email. */
54
53
  userEmail?: string;
55
- /** Enable the built-in AppTopBar experiment popover and selector flow. */
54
+ /** Enable the built-in AppTopBar experiment popover and selector flow. The current experiment comes from the shared experiment store, not from a prop. Keep this comment on one line — the docs extractor drops multi-line JSDoc. */
56
55
  experimentShell?: boolean;
57
- /** Current experiment mirrored into the AppTopBar experiment chip when experimentShell is enabled. */
58
- experiment?: AppExperimentRecord | null;
59
56
  /** Save handler used by the AppTopBar experiment chip. Return a message to flash success. */
60
57
  experimentSave?: () => string | null | Promise<string | null>;
61
58
  /** Disable the experiment save action. */
@@ -89,7 +89,6 @@ declare const __VLS_component: import('vue').DefineComponent<PluginWorkspaceView
89
89
  "onUpdate:sidebarCollapsed"?: ((value: boolean) => any) | undefined;
90
90
  }>, {
91
91
  values: Record<string, unknown>;
92
- experiment: import('..').AppExperimentRecord | null;
93
92
  modelValue: Record<string, unknown>;
94
93
  title: string;
95
94
  floating: boolean;
@@ -4,8 +4,8 @@ declare const _default: import('vue').DefineComponent<SmartGroupFieldRecipeProps
4
4
  toggle: (index: number) => any;
5
5
  cancel: () => any;
6
6
  close: () => any;
7
- apply: (payload: FieldRecipeApplyPayload) => any;
8
7
  manual: () => any;
8
+ apply: (payload: FieldRecipeApplyPayload) => any;
9
9
  "update:route": (route: QcRoute) => any;
10
10
  "csv-file": (file: File) => any;
11
11
  "download-template": () => any;
@@ -14,8 +14,8 @@ declare const _default: import('vue').DefineComponent<SmartGroupFieldRecipeProps
14
14
  onToggle?: ((index: number) => any) | undefined;
15
15
  onCancel?: (() => any) | undefined;
16
16
  onClose?: (() => any) | undefined;
17
- onApply?: ((payload: FieldRecipeApplyPayload) => any) | undefined;
18
17
  onManual?: (() => any) | undefined;
18
+ onApply?: ((payload: FieldRecipeApplyPayload) => any) | undefined;
19
19
  "onUpdate:route"?: ((route: QcRoute) => any) | undefined;
20
20
  "onCsv-file"?: ((file: File) => any) | undefined;
21
21
  "onDownload-template"?: (() => any) | undefined;
@@ -1,8 +1,8 @@
1
- import { d as BaseModal_default, p as BaseButton_default } from "../experiment-utils-CxkruZ3G.js";
2
- import { c as BaseSelect_default, n as Skeleton_default, s as BasePill_default, t as EmptyState_default, u as BaseInput_default } from "../EmptyState-DgBRoYAy.js";
3
- import { At as BaseCheckbox_default, Ct as DatePicker_default, Dt as BaseSlider_default, L as GeneratedPathInput_default, M as SequenceInput_default, Mt as BaseTextarea_default, O as ConcentrationInput_default, Ot as BaseRadioGroup_default, P as FormulaInput_default, at as TagsInput_default, it as NumberInput_default, j as MoleculeInput_default, jt as Tooltip_default, k as UnitInput_default, kt as BaseToggle_default, nt as AlertBox_default, ot as TimePicker_default, rt as FileUploader_default, tt as DateTimePicker_default, wt as MultiSelect_default, z as ArtifactSelectorModal_default } from "../useControlSchema-B_qgU4rW.js";
4
- import { $ as SmartGroupFieldRecipe_default, A as ProtocolStepEditor_default, At as DataFrame_default, B as Breadcrumb_default, Ct as AppPluginSwitcher_default, Dt as ThemeToggle_default, Et as CollapsibleCard_default, F as RackEditor_default, Ft as ColorSlider_default, G as AppContainer_default, H as ProgressBar_default, I as BioTemplatePresetWorkspaceView_default, J as ComponentBindingRenderer_default, K as DoseDesignWorkspaceView_default, L as BioTemplatePackWorkspaceView_default, M as ReagentEditor_default, Mt as DropdownButton_default, N as SmartGroupModal_default, Nt as SegmentedControl_default, O as ChemicalFormula_default, Ot as IconButton_default, P as GroupAssigner_default, Pt as BaseTabs_default, Q as SmartGroupManual_default, R as BioTemplateExperimentWorkspaceView_default, St as AppTopBar_default, Tt as PluginIcon_default, U as StatusIndicator_default, V as Avatar_default, W as Divider_default, X as SampleSelector_default, Y as ScheduleCalendar_default, Z as AutoGroupModal_default, _t as AppLayout_default, a as ResourceCard_default, at as DoseCalculator_default, b as InstrumentAlertLog_default, bt as FormActions_default, c as BatchProgressList_default, ct as GeneratedResultRenderer_default, dt as LoadingSpinner_default, et as ReagentList_default, gt as MobileSupportGate_default, ht as PluginWorkspaceView_default, i as SectionCard_default, it as ExperimentTimeline_default, j as SampleHierarchyTree_default, jt as Calendar_default, k as ScientificNumber_default, kt as AppToastContainer_default, l as AuditTrail_default, lt as GeneratedPlotlyResult_default, n as FitPanel_default, nt as SampleLegend_default, o as TimeRangeInput_default, ot as GeneratedPluginView_default, q as ControlWorkspaceView_default, r as ArtifactSaveDialog_default, rt as WellPlate_default, s as ExperimentDataViewer_default, st as JobsStatusTray_default, tt as PlateMapEditor_default, u as LcmsSequenceTable_default, ut as ChartContainer_default, v as InstrumentStatusCard_default, vt as AppSidebar_default, wt as AppAvatarMenu_default, x as SequenceProgressBar_default, xt as StepWizard_default, y as InstrumentStateBadge_default, yt as FormBuilder_default, z as BioTemplateRenderer_default } from "../components-Ci_BTx00.js";
5
- import { s as FormField_default, t as SettingsModal_default } from "../SettingsModal-Dpg-X1OM.js";
6
- import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "../ExperimentPopover-BFw3QX8L.js";
7
- import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "../ExperimentSelectorModal-BBWXC7KW.js";
1
+ import { f as BaseModal_default, m as BaseButton_default } from "../experiment-utils-7Yw-h0tD.js";
2
+ import { a as BaseSelect_default, i as BasePill_default, n as Skeleton_default, s as BaseInput_default, t as EmptyState_default } from "../EmptyState-LMPS3keb.js";
3
+ import { At as BaseCheckbox_default, Ct as DatePicker_default, Dt as BaseSlider_default, L as GeneratedPathInput_default, M as SequenceInput_default, Mt as BaseTextarea_default, O as ConcentrationInput_default, Ot as BaseRadioGroup_default, P as FormulaInput_default, at as TagsInput_default, it as NumberInput_default, j as MoleculeInput_default, jt as Tooltip_default, k as UnitInput_default, kt as BaseToggle_default, nt as AlertBox_default, ot as TimePicker_default, rt as FileUploader_default, tt as DateTimePicker_default, wt as MultiSelect_default, z as ArtifactSelectorModal_default } from "../useControlSchema-BEAgLyyx.js";
4
+ import { $ as SmartGroupFieldRecipe_default, A as ProtocolStepEditor_default, At as DataFrame_default, B as Breadcrumb_default, Ct as AppPluginSwitcher_default, Dt as ThemeToggle_default, Et as CollapsibleCard_default, F as RackEditor_default, Ft as ColorSlider_default, G as AppContainer_default, H as ProgressBar_default, I as BioTemplatePresetWorkspaceView_default, J as ComponentBindingRenderer_default, K as DoseDesignWorkspaceView_default, L as BioTemplatePackWorkspaceView_default, M as ReagentEditor_default, Mt as DropdownButton_default, N as SmartGroupModal_default, Nt as SegmentedControl_default, O as ChemicalFormula_default, Ot as IconButton_default, P as GroupAssigner_default, Pt as BaseTabs_default, Q as SmartGroupManual_default, R as BioTemplateExperimentWorkspaceView_default, St as AppTopBar_default, Tt as PluginIcon_default, U as StatusIndicator_default, V as Avatar_default, W as Divider_default, X as SampleSelector_default, Y as ScheduleCalendar_default, Z as AutoGroupModal_default, _t as AppLayout_default, a as ResourceCard_default, at as DoseCalculator_default, b as InstrumentAlertLog_default, bt as FormActions_default, c as BatchProgressList_default, ct as GeneratedResultRenderer_default, dt as LoadingSpinner_default, et as ReagentList_default, gt as MobileSupportGate_default, ht as PluginWorkspaceView_default, i as SectionCard_default, it as ExperimentTimeline_default, j as SampleHierarchyTree_default, jt as Calendar_default, k as ScientificNumber_default, kt as AppToastContainer_default, l as AuditTrail_default, lt as GeneratedPlotlyResult_default, n as FitPanel_default, nt as SampleLegend_default, o as TimeRangeInput_default, ot as GeneratedPluginView_default, q as ControlWorkspaceView_default, r as ArtifactSaveDialog_default, rt as WellPlate_default, s as ExperimentDataViewer_default, st as JobsStatusTray_default, tt as PlateMapEditor_default, u as LcmsSequenceTable_default, ut as ChartContainer_default, v as InstrumentStatusCard_default, vt as AppSidebar_default, wt as AppAvatarMenu_default, x as SequenceProgressBar_default, xt as StepWizard_default, y as InstrumentStateBadge_default, yt as FormBuilder_default, z as BioTemplateRenderer_default } from "../components-BbOyjE2T.js";
5
+ import { s as FormField_default, t as SettingsModal_default } from "../SettingsModal-BGBimSIA.js";
6
+ import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "../ExperimentPopover-D6_RGzTY.js";
7
+ import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "../ExperimentSelectorModal-CDNsNudn.js";
8
8
  export { AlertBox_default as AlertBox, AppAvatarMenu_default as AppAvatarMenu, AppContainer_default as AppContainer, AppLayout_default as AppLayout, AppPluginSwitcher_default as AppPluginSwitcher, AppSidebar_default as AppSidebar, AppToastContainer_default as AppToastContainer, AppTopBar_default as AppTopBar, ArtifactSaveDialog_default as ArtifactSaveDialog, ArtifactSelectorModal_default as ArtifactSelectorModal, AuditTrail_default as AuditTrail, AutoGroupModal_default as AutoGroupModal, Avatar_default as Avatar, BaseButton_default as BaseButton, BaseCheckbox_default as BaseCheckbox, BaseInput_default as BaseInput, BaseModal_default as BaseModal, BasePill_default as BasePill, BaseRadioGroup_default as BaseRadioGroup, BaseSelect_default as BaseSelect, BaseSlider_default as BaseSlider, BaseTabs_default as BaseTabs, BaseTextarea_default as BaseTextarea, BaseToggle_default as BaseToggle, BatchProgressList_default as BatchProgressList, BioTemplateExperimentWorkspaceView_default as BioTemplateExperimentWorkspaceView, BioTemplatePackWorkspaceView_default as BioTemplatePackWorkspaceView, BioTemplatePresetWorkspaceView_default as BioTemplatePresetWorkspaceView, BioTemplateRenderer_default as BioTemplateRenderer, Breadcrumb_default as Breadcrumb, Calendar_default as Calendar, ChartContainer_default as ChartContainer, ChemicalFormula_default as ChemicalFormula, CollapsibleCard_default as CollapsibleCard, ColorSlider_default as ColorSlider, ComponentBindingRenderer_default as ComponentBindingRenderer, ConcentrationInput_default as ConcentrationInput, ConfirmDialog_default as ConfirmDialog, ControlWorkspaceView_default as ControlWorkspaceView, DataFrame_default as DataFrame, DatePicker_default as DatePicker, DateTimePicker_default as DateTimePicker, Divider_default as Divider, DoseCalculator_default as DoseCalculator, DoseDesignWorkspaceView_default as DoseDesignWorkspaceView, DropdownButton_default as DropdownButton, EmptyState_default as EmptyState, ExperimentCodeBadge_default as ExperimentCodeBadge, ExperimentDataViewer_default as ExperimentDataViewer, ExperimentPopover_default as ExperimentPopover, ExperimentSelectorModal_default as ExperimentSelectorModal, ExperimentTimeline_default as ExperimentTimeline, FileUploader_default as FileUploader, FitPanel_default as FitPanel, FormActions_default as FormActions, FormBuilder_default as FormBuilder, FormField_default as FormField, FormulaInput_default as FormulaInput, GeneratedPathInput_default as GeneratedPathInput, GeneratedPlotlyResult_default as GeneratedPlotlyResult, GeneratedPluginView_default as GeneratedPluginView, GeneratedResultRenderer_default as GeneratedResultRenderer, GroupAssigner_default as GroupAssigner, IconButton_default as IconButton, InstrumentAlertLog_default as InstrumentAlertLog, InstrumentStateBadge_default as InstrumentStateBadge, InstrumentStatusCard_default as InstrumentStatusCard, JobsStatusTray_default as JobsStatusTray, LcmsSequenceTable_default as LcmsSequenceTable, LoadingSpinner_default as LoadingSpinner, MobileSupportGate_default as MobileSupportGate, MoleculeInput_default as MoleculeInput, MultiSelect_default as MultiSelect, NumberInput_default as NumberInput, PlateMapEditor_default as PlateMapEditor, PluginIcon_default as PluginIcon, PluginWorkspaceView_default as PluginWorkspaceView, ProgressBar_default as ProgressBar, ProtocolStepEditor_default as ProtocolStepEditor, RackEditor_default as RackEditor, ReagentEditor_default as ReagentEditor, ReagentList_default as ReagentList, ResourceCard_default as ResourceCard, SampleHierarchyTree_default as SampleHierarchyTree, SampleLegend_default as SampleLegend, SampleSelector_default as SampleSelector, ScheduleCalendar_default as ScheduleCalendar, ScientificNumber_default as ScientificNumber, SectionCard_default as SectionCard, SegmentedControl_default as SegmentedControl, SequenceInput_default as SequenceInput, SequenceProgressBar_default as SequenceProgressBar, SettingsModal_default as SettingsModal, Skeleton_default as Skeleton, SmartGroupFieldRecipe_default as SmartGroupFieldRecipe, SmartGroupManual_default as SmartGroupManual, SmartGroupModal_default as SmartGroupModal, StatusIndicator_default as StatusIndicator, StepWizard_default as StepWizard, TagsInput_default as TagsInput, ThemeToggle_default as ThemeToggle, TimePicker_default as TimePicker, TimeRangeInput_default as TimeRangeInput, Tooltip_default as Tooltip, UnitInput_default as UnitInput, WellPlate_default as WellPlate };
@@ -1,15 +1,16 @@
1
1
  import { n as __exportAll, r as __toESM } from "./chunk-BoAXSpZd.js";
2
- import { d as BaseModal_default, f as useEventListener, p as BaseButton_default } from "./experiment-utils-CxkruZ3G.js";
3
- import { c as BaseSelect_default, l as normalizeOptionInput, n as Skeleton_default, o as useApi, r as useRequestSyncState, s as BasePill_default, t as EmptyState_default, u as BaseInput_default } from "./EmptyState-DgBRoYAy.js";
4
- import { A as useConcentrationUnits, At as BaseCheckbox_default, Ct as DatePicker_default, Dt as BaseSlider_default, H as getInjectedPlatformContext, I as useChemicalFormula, L as GeneratedPathInput_default, M as SequenceInput_default, Mt as BaseTextarea_default, O as ConcentrationInput_default, Ot as BaseRadioGroup_default, P as FormulaInput_default, Q as normalizeJobPercent, R as _plugin_vue_export_helper_default, T as getDefaultControlView, Tt as useListSelection, W as resolveCurrentExperimentId, Z as jobStatusLabel, _ as controlsToFormSchema, at as TagsInput_default, ct as compareTime, f as resolveControlModel, ft as formatDuration, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, it as NumberInput_default, j as MoleculeInput_default, jt as Tooltip_default, k as UnitInput_default, kt as BaseToggle_default, lt as durationMinutes, m as controlValuesToComponentBindingsById, nt as AlertBox_default, o as defineDoseDesignControlModel, ot as TimePicker_default, p as controlValuesToComponentBindings, pt as formatTime, q as useGeneratedAnalysis, r as getControlDefaults, rt as FileUploader_default, tt as DateTimePicker_default, u as useControlWorkspace, w as controlsToViewItems, wt as MultiSelect_default, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as ArtifactSelectorModal_default } from "./useControlSchema-B_qgU4rW.js";
5
- import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-Dpg-X1OM.js";
6
- import { t as useDropdownState } from "./useDropdownState-gVaMXtwW.js";
7
- import { D as readFileAsText, G as useAppExperiment, H as DEFAULT_MOBILE_VIEWPORT_QUERY, I as DEFAULT_COLORS, K as useTheme, L as useWellPlateEditor, M as parseCSV, Q as useSortedItems, R as useDoseCalculator, U as useMobileSupportGate, V as usePluginJobCenter, W as APP_EXPERIMENT_KEY, X as useTextSearch, _ as useScheduleDrag, a as useReagentSeries, b as useExpansionSet, c as useBioTemplatePresetWorkspace, j as useAutoGroup, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, q as useToast, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData } from "./useProtocolTemplates-DeaOmMaw.js";
8
- import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-D1G5J5Z5.js";
9
- import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-ejqR8MX3.js";
10
- import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-BFw3QX8L.js";
11
- import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-Cdj93S9C.js";
12
- import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-BBWXC7KW.js";
2
+ import { f as BaseModal_default, m as BaseButton_default, p as useEventListener } from "./experiment-utils-7Yw-h0tD.js";
3
+ import { a as BaseSelect_default, i as BasePill_default, n as Skeleton_default, o as normalizeOptionInput, r as useRequestSyncState, s as BaseInput_default, t as EmptyState_default } from "./EmptyState-LMPS3keb.js";
4
+ import { A as useConcentrationUnits, At as BaseCheckbox_default, Ct as DatePicker_default, Dt as BaseSlider_default, H as getInjectedPlatformContext, I as useChemicalFormula, L as GeneratedPathInput_default, M as SequenceInput_default, Mt as BaseTextarea_default, O as ConcentrationInput_default, Ot as BaseRadioGroup_default, P as FormulaInput_default, Q as normalizeJobPercent, R as _plugin_vue_export_helper_default, T as getDefaultControlView, Tt as useListSelection, W as resolveCurrentExperimentId, Z as jobStatusLabel, _ as controlsToFormSchema, at as TagsInput_default, ct as compareTime, f as resolveControlModel, ft as formatDuration, g as mergeControlWorkspaceOptions, h as controlValuesToComponentProps, it as NumberInput_default, j as MoleculeInput_default, jt as Tooltip_default, k as UnitInput_default, kt as BaseToggle_default, lt as durationMinutes, m as controlValuesToComponentBindingsById, nt as AlertBox_default, o as defineDoseDesignControlModel, ot as TimePicker_default, p as controlValuesToComponentBindings, pt as formatTime, q as useGeneratedAnalysis, r as getControlDefaults, rt as FileUploader_default, tt as DateTimePicker_default, u as useControlWorkspace, w as controlsToViewItems, wt as MultiSelect_default, x as controlsToSidebarPanels, y as controlsToSectionFormSchemas, z as ArtifactSelectorModal_default } from "./useControlSchema-BEAgLyyx.js";
5
+ import { a as pickExistingRecordKeys, c as normalizeItemInput, i as formSchemaFieldNames, l as normalizeLabelItemInput, o as recordValuesEqualForKeys, r as FormFieldRendererInternal_default, s as FormField_default, t as SettingsModal_default } from "./SettingsModal-BGBimSIA.js";
6
+ import { t as useDropdownState } from "./useDropdownState-Be-ug_ci.js";
7
+ import { D as readFileAsText, G as useAppExperiment, H as DEFAULT_MOBILE_VIEWPORT_QUERY, I as DEFAULT_COLORS, K as useTheme, L as useWellPlateEditor, M as parseCSV, Q as useSortedItems, R as useDoseCalculator, U as useMobileSupportGate, V as usePluginJobCenter, W as APP_EXPERIMENT_KEY, X as useTextSearch, _ as useScheduleDrag, a as useReagentSeries, b as useExpansionSet, c as useBioTemplatePresetWorkspace, j as useAutoGroup, l as useBioTemplatePackWorkspace, n as DEFAULT_PRESETS, o as useGroupAssignment, q as useToast, r as DEFAULT_UNITS, s as useRackEditor, t as useProtocolTemplates, v as useExperimentSamples, x as useSampleGroups, y as useExperimentData } from "./useProtocolTemplates-DXeIHMwV.js";
8
+ import { r as useApi } from "./useApi-CDBq6z23.js";
9
+ import { i as usePlatformContext, t as useFormBuilder } from "./useFormBuilder-CR9pBApW.js";
10
+ import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-DQ0MjwHZ.js";
11
+ import { r as ConfirmDialog_default, t as ExperimentPopover_default } from "./ExperimentPopover-D6_RGzTY.js";
12
+ import { B as toBioTemplateComponentProps, F as getBioTemplateComponentProps, H as toBioTemplateComponentPropsById, L as toBioTemplateComponentBindings, R as toBioTemplateComponentBindingsById, V as toBioTemplateComponentPropsByComponent, dn as extractTemplateCollection } from "./templates-CJRFiWUX.js";
13
+ import { r as ExperimentCodeBadge_default, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-CDNsNudn.js";
13
14
  import { Fragment, Teleport, Transition, TransitionGroup, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createStaticVNode, createTextVNode, createVNode, defineAsyncComponent, defineComponent, effectScope, guardReactiveProps, h, inject, mergeModels, mergeProps, nextTick, normalizeClass, normalizeProps, normalizeStyle, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, openBlock, reactive, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, shallowRef, toDisplayString, toRaw, toRef, unref, useId, useModel, useSlots, vModelCheckbox, vModelSelect, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
14
15
  //#region src/components/ColorSlider.vue?vue&type=script&setup=true&lang.ts
15
16
  var _hoisted_1$74 = { class: "mint-color-slider__row" };
@@ -2877,9 +2878,9 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
2877
2878
  setup(__props, { emit: __emit }) {
2878
2879
  /** Full application top bar with brand logo, page selector or plugin switcher, centered pill nav, experiment popover, and avatar menu. */
2879
2880
  const props = __props;
2880
- const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-Dpg-X1OM.js").then((n) => n.n));
2881
- const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-BFw3QX8L.js").then((n) => n.n));
2882
- const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-BBWXC7KW.js").then((n) => n.n));
2881
+ const SettingsModal = defineAsyncComponent(() => import("./SettingsModal-BGBimSIA.js").then((n) => n.n));
2882
+ const ExperimentPopover = defineAsyncComponent(() => import("./ExperimentPopover-D6_RGzTY.js").then((n) => n.n));
2883
+ const ExperimentSelectorModal = defineAsyncComponent(() => import("./ExperimentSelectorModal-CDNsNudn.js").then((n) => n.n));
2883
2884
  const emit = __emit;
2884
2885
  const settingsOpen = ref(false);
2885
2886
  const { isIntegrated, plugin } = usePlatformContext();
@@ -2924,7 +2925,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
2924
2925
  tone: pluginIcon.value.color,
2925
2926
  size: "md",
2926
2927
  variant: "solid"
2927
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_4$45, [..._cache[19] || (_cache[19] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])], 8, _hoisted_3$46)) : __props.homePath ? (openBlock(), createBlock(_component_router_link, {
2928
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_4$45, [..._cache[17] || (_cache[17] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])], 8, _hoisted_3$46)) : __props.homePath ? (openBlock(), createBlock(_component_router_link, {
2928
2929
  key: 1,
2929
2930
  to: __props.homePath,
2930
2931
  class: "mint-topbar-home-link"
@@ -2936,7 +2937,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
2936
2937
  tone: pluginIcon.value.color,
2937
2938
  size: "md",
2938
2939
  variant: "solid"
2939
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_5$43, [..._cache[20] || (_cache[20] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
2940
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_5$43, [..._cache[18] || (_cache[18] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
2940
2941
  _: 3
2941
2942
  }, 8, ["to"])) : renderSlot(_ctx.$slots, "icon", { key: 2 }, () => [pluginIcon.value ? (openBlock(), createBlock(PluginIcon_default, {
2942
2943
  key: 0,
@@ -2945,7 +2946,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
2945
2946
  tone: pluginIcon.value.color,
2946
2947
  size: "md",
2947
2948
  variant: "solid"
2948
- }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_6$40, [..._cache[21] || (_cache[21] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
2949
+ }, null, 8, ["icon", "tone"])) : renderSlot(_ctx.$slots, "logo", { key: 1 }, () => [__props.showLogo ? (openBlock(), createElementBlock("div", _hoisted_6$40, [..._cache[19] || (_cache[19] = [createElementVNode("div", { class: "mint-topbar__logo-icon" }, [createElementVNode("span", { class: "mint-topbar__logo-text" }, "M")], -1)])])) : createCommentVNode("", true)])])]),
2949
2950
  hasPluginSwitcher.value && __props.pluginSwitcher ? (openBlock(), createBlock(AppPluginSwitcher_default, {
2950
2951
  key: 0,
2951
2952
  current: __props.pluginSwitcher.current,
@@ -2997,7 +2998,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
2997
2998
  class: "mint-topbar__icon-btn",
2998
2999
  "aria-label": "Notifications",
2999
3000
  onClick: _cache[8] || (_cache[8] = ($event) => emit("notifications-click"))
3000
- }, [_cache[22] || (_cache[22] = createElementVNode("svg", {
3001
+ }, [_cache[20] || (_cache[20] = createElementVNode("svg", {
3001
3002
  class: "mint-topbar__icon-btn-icon",
3002
3003
  viewBox: "0 0 24 24",
3003
3004
  fill: "none",
@@ -3016,7 +3017,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3016
3017
  class: "mint-topbar__settings-btn",
3017
3018
  "aria-label": "Open settings",
3018
3019
  onClick: _cache[9] || (_cache[9] = ($event) => settingsOpen.value = true)
3019
- }, [..._cache[23] || (_cache[23] = [createElementVNode("svg", {
3020
+ }, [..._cache[21] || (_cache[21] = [createElementVNode("svg", {
3020
3021
  class: "mint-topbar__settings-icon",
3021
3022
  viewBox: "0 0 24 24",
3022
3023
  fill: "none",
@@ -3036,7 +3037,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3036
3037
  "aria-label": "Admin Dashboard",
3037
3038
  onClick: _cache[10] || (_cache[10] = ($event) => emit("admin-click"))
3038
3039
  }, {
3039
- default: withCtx(() => [..._cache[24] || (_cache[24] = [createElementVNode("svg", {
3040
+ default: withCtx(() => [..._cache[22] || (_cache[22] = [createElementVNode("svg", {
3040
3041
  class: "mint-topbar__admin-icon",
3041
3042
  viewBox: "0 0 24 24",
3042
3043
  fill: "none",
@@ -3117,11 +3118,7 @@ var AppTopBar_default = /* @__PURE__ */ defineComponent({
3117
3118
  "enhancements",
3118
3119
  "user-type"
3119
3120
  ])) : createCommentVNode("", true),
3120
- unref(appExperiment) && !isStandalone.value && unref(appExperiment).selectorModal.value.modelValue ? (openBlock(), createBlock(unref(ExperimentSelectorModal), mergeProps({ key: 1 }, unref(appExperiment).selectorModal.value, {
3121
- "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $event ? unref(appExperiment).openModal() : unref(appExperiment).closeModal()),
3122
- onSelect: _cache[17] || (_cache[17] = ($event) => unref(appExperiment).handleSelect($event)),
3123
- onDeselect: _cache[18] || (_cache[18] = ($event) => unref(appExperiment).handleDetach())
3124
- }), null, 16)) : createCommentVNode("", true)
3121
+ unref(appExperiment) && !isStandalone.value && unref(appExperiment).selectorModal.value.modelValue ? (openBlock(), createBlock(unref(ExperimentSelectorModal), mergeProps({ key: 1 }, unref(appExperiment).selectorModal.value, { "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => $event ? unref(appExperiment).openModal() : unref(appExperiment).closeModal()) }), null, 16)) : createCommentVNode("", true)
3125
3122
  ], 64);
3126
3123
  };
3127
3124
  }
@@ -4555,7 +4552,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
4555
4552
  type: Boolean,
4556
4553
  default: false
4557
4554
  },
4558
- experiment: { default: void 0 },
4559
4555
  experimentSave: {
4560
4556
  type: Function,
4561
4557
  default: void 0
@@ -4669,7 +4665,6 @@ var PluginWorkspaceView_default = /* @__PURE__ */ defineComponent({
4669
4665
  const emit = __emit;
4670
4666
  const slots = useSlots();
4671
4667
  if (props.experimentShell) useAppExperiment({
4672
- experiment: computed(() => props.experiment),
4673
4668
  onSelect: (experiment) => emit("experiment-select", experiment),
4674
4669
  onSave: props.experimentSave,
4675
4670
  onDetach: () => emit("experiment-detach"),
@@ -5141,7 +5136,7 @@ var GeneratedPlotlyResult_default = /* @__PURE__ */ _plugin_vue_export_helper_de
5141
5136
  const failed = ref(false);
5142
5137
  let plotly = null;
5143
5138
  async function loadPlotly() {
5144
- const module = await import("./plotly.min-BR53hja4.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
5139
+ const module = await import("./plotly.min-c2Sez60c.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
5145
5140
  return "default" in module ? module.default : module;
5146
5141
  }
5147
5142
  async function renderChart() {
@@ -17877,4 +17872,4 @@ var components_exports = /* @__PURE__ */ __exportAll({
17877
17872
  //#endregion
17878
17873
  export { SmartGroupFieldRecipe_default as $, ProtocolStepEditor_default as A, DataFrame_default as At, Breadcrumb_default as B, estimateSequenceRemainingSeconds as C, AppPluginSwitcher_default as Ct, sequenceSamplesRemaining as D, ThemeToggle_default as Dt, sequenceProgressPercent as E, CollapsibleCard_default as Et, RackEditor_default as F, ColorSlider_default as Ft, AppContainer_default as G, ProgressBar_default as H, BioTemplatePresetWorkspaceView_default as I, ComponentBindingRenderer_default as J, DoseDesignWorkspaceView_default as K, BioTemplatePackWorkspaceView_default as L, ReagentEditor_default as M, DropdownButton_default as Mt, SmartGroupModal_default as N, SegmentedControl_default as Nt, ChemicalFormula_default as O, IconButton_default as Ot, GroupAssigner_default as P, BaseTabs_default as Pt, SmartGroupManual_default as Q, BioTemplateExperimentWorkspaceView_default as R, estimateSequenceFinishDate as S, AppTopBar_default as St, formatSequenceRemaining as T, PluginIcon_default as Tt, StatusIndicator_default as U, Avatar_default as V, Divider_default as W, SampleSelector_default as X, ScheduleCalendar_default as Y, AutoGroupModal_default as Z, reconstructLcmsPlateCellsFromSequenceItems as _, AppLayout_default as _t, ResourceCard_default as a, DoseCalculator_default as at, InstrumentAlertLog_default as b, FormActions_default as bt, BatchProgressList_default as c, GeneratedResultRenderer_default as ct, DEFAULT_LCMS_SEQUENCE_COLUMNS as d, LoadingSpinner_default as dt, ReagentList_default as et, basenameFromWindowsPath as f, generatedJobDefaults as ft, lcmsWellIdFromPosition as g, MobileSupportGate_default as gt, inferLcmsPlateTypeFromWellIds as h, PluginWorkspaceView_default as ht, SectionCard_default as i, ExperimentTimeline_default as it, SampleHierarchyTree_default as j, Calendar_default as jt, ScientificNumber_default as k, AppToastContainer_default as kt, AuditTrail_default as l, GeneratedPlotlyResult_default as lt, extractLcmsSampleName as m, normalizeGeneratedJobInput as mt, FitPanel_default as n, SampleLegend_default as nt, TimeRangeInput_default as o, GeneratedPluginView_default as ot, extractLcmsCommonPrefix as p, generatedJobFormSchema as pt, ControlWorkspaceView_default as q, ArtifactSaveDialog_default as r, WellPlate_default as rt, ExperimentDataViewer_default as s, JobsStatusTray_default as st, components_exports as t, PlateMapEditor_default as tt, LcmsSequenceTable_default as u, ChartContainer_default as ut, InstrumentStatusCard_default as v, AppSidebar_default as vt, formatSequenceEta as w, AppAvatarMenu_default as wt, SequenceProgressBar_default as x, StepWizard_default as xt, InstrumentStateBadge_default as y, FormBuilder_default as yt, BioTemplateRenderer_default as z };
17879
17874
 
17880
- //# sourceMappingURL=components-Ci_BTx00.js.map
17875
+ //# sourceMappingURL=components-BbOyjE2T.js.map