@morscherlab/mint-sdk 1.4.11 → 1.4.13

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 (77) hide show
  1. package/dist/{AlertBox-CIhqsWbN.js → AlertBox-CexONPhA.js} +2 -2
  2. package/dist/{AlertBox-CIhqsWbN.js.map → AlertBox-CexONPhA.js.map} +1 -1
  3. package/dist/{AppSidebar-DbftYDAY.js → AppSidebar-CIBehlYL.js} +16 -9
  4. package/dist/{AppSidebar-DbftYDAY.js.map → AppSidebar-CIBehlYL.js.map} +1 -1
  5. package/dist/{ExperimentPopover-BM92LlrQ.js → ExperimentPopover-CzV1--OY.js} +2 -2
  6. package/dist/{ExperimentPopover-BM92LlrQ.js.map → ExperimentPopover-CzV1--OY.js.map} +1 -1
  7. package/dist/{ExperimentSelectorModal-BOLK-Gl4.js → ExperimentSelectorModal-CUkKmgfr.js} +3 -3
  8. package/dist/{ExperimentSelectorModal-BOLK-Gl4.js.map → ExperimentSelectorModal-CUkKmgfr.js.map} +1 -1
  9. package/dist/{SegmentedControl-Dz41vAFM.js → SegmentedControl-C-sckoJZ.js} +2 -2
  10. package/dist/{SegmentedControl-Dz41vAFM.js.map → SegmentedControl-C-sckoJZ.js.map} +1 -1
  11. package/dist/{SettingsModal-CKWC1JNV.js → SettingsModal-jW7Z4i_1.js} +6 -6
  12. package/dist/{SettingsModal-CKWC1JNV.js.map → SettingsModal-jW7Z4i_1.js.map} +1 -1
  13. package/dist/composables/usePluginWorkspace.d.ts +2 -0
  14. package/dist/{controlSchemaModel-C20f-1_T.js → controlSchemaModel-C_XqpkgE.js} +2 -2
  15. package/dist/{controlSchemaModel-C20f-1_T.js.map → controlSchemaModel-C_XqpkgE.js.map} +1 -1
  16. package/dist/{data-C72M20rh.js → data-8G-U6Pb0.js} +9 -9
  17. package/dist/{data-C72M20rh.js.map → data-8G-U6Pb0.js.map} +1 -1
  18. package/dist/data.js +7 -7
  19. package/dist/index.js +16 -16
  20. package/dist/{install-DbF7ddGl.js → install-CM33AZhf.js} +14 -38
  21. package/dist/install-CM33AZhf.js.map +1 -0
  22. package/dist/install.js +1 -1
  23. package/dist/{lab-B5sKmlWF.js → lab-CPJ7n7e5.js} +37 -166
  24. package/dist/lab-CPJ7n7e5.js.map +1 -0
  25. package/dist/lab.js +4 -4
  26. package/dist/{records-CWRztE5M.js → records-BAymyHAn.js} +10 -110
  27. package/dist/records-BAymyHAn.js.map +1 -0
  28. package/dist/{runtime-OBeh3Knt.js → runtime-PntKXQ7K.js} +93 -52
  29. package/dist/runtime-PntKXQ7K.js.map +1 -0
  30. package/dist/runtime.js +6 -6
  31. package/dist/{shell-DDgF2bug.js → shell-B-woqThX.js} +4 -4
  32. package/dist/{shell-DDgF2bug.js.map → shell-B-woqThX.js.map} +1 -1
  33. package/dist/shell.js +4 -4
  34. package/dist/styles.css +61 -105
  35. package/dist/{useExperimentSamples-Cz2v3V_q.js → useExperimentSamples-DEDAKa2E.js} +3 -3
  36. package/dist/{useExperimentSamples-Cz2v3V_q.js.map → useExperimentSamples-DEDAKa2E.js.map} +1 -1
  37. package/dist/{useListReorder-C--K06el.js → useListReorder-W1bzK_bo.js} +2 -2
  38. package/dist/{useListReorder-C--K06el.js.map → useListReorder-W1bzK_bo.js.map} +1 -1
  39. package/dist/{useRackEditor-Cba_0OfI.js → useRackEditor-BWOnob3i.js} +154 -25
  40. package/dist/useRackEditor-BWOnob3i.js.map +1 -0
  41. package/dist/{useRealtime-CNQbrS01.js → useRealtime-B0u_FvEH.js} +2 -2
  42. package/dist/{useRealtime-CNQbrS01.js.map → useRealtime-B0u_FvEH.js.map} +1 -1
  43. package/dist/{useRequest-Bfsh7gIm.js → useRequest-D9-3BS-3.js} +2 -2
  44. package/dist/{useRequest-Bfsh7gIm.js.map → useRequest-D9-3BS-3.js.map} +1 -1
  45. package/package.json +1 -1
  46. package/src/__tests__/components/PluginWorkspaceView.test.ts +19 -0
  47. package/src/__tests__/styles/menusShellRefresh.test.ts +5 -0
  48. package/src/components/FileUploader.vue +3 -35
  49. package/src/components/GeneratedPluginView.vue +35 -81
  50. package/src/components/GeneratedResultRenderer.vue +2 -1
  51. package/src/components/PlotlyChart.vue +1 -1
  52. package/src/components/PluginWorkspaceView.vue +2 -1
  53. package/src/composables/usePluginWorkspace.ts +14 -3
  54. package/src/generated-ui/main.ts +3 -1
  55. package/src/styles/components/alert-box.css +1 -1
  56. package/src/styles/components/app-sidebar.css +5 -5
  57. package/src/styles/components/app-top-bar.css +2 -1
  58. package/src/styles/components/button.css +3 -3
  59. package/src/styles/components/checkbox.css +1 -1
  60. package/src/styles/components/collapsible-card.css +1 -1
  61. package/src/styles/components/confirm-dialog.css +2 -2
  62. package/src/styles/components/file-uploader.css +3 -3
  63. package/src/styles/components/icon-button.css +3 -3
  64. package/src/styles/components/loading-spinner.css +1 -1
  65. package/src/styles/components/pill.css +1 -1
  66. package/src/styles/components/plugin-icon.css +1 -1
  67. package/src/styles/components/presence-avatars.css +4 -4
  68. package/src/styles/components/progress-bar.css +1 -1
  69. package/src/styles/components/sequence-input.css +1 -1
  70. package/src/styles/components/slider.css +1 -1
  71. package/src/styles/components/toggle.css +1 -1
  72. package/src/styles/variables.css +4 -0
  73. package/dist/install-DbF7ddGl.js.map +0 -1
  74. package/dist/lab-B5sKmlWF.js.map +0 -1
  75. package/dist/records-CWRztE5M.js.map +0 -1
  76. package/dist/runtime-OBeh3Knt.js.map +0 -1
  77. package/dist/useRackEditor-Cba_0OfI.js.map +0 -1
package/dist/data.js CHANGED
@@ -1,10 +1,10 @@
1
- import { C as formatExperimentDate, S as experimentIdFromRoute, _ as APP_EXPERIMENT_KEY, b as SORT_OPTIONS, c as SecretInput_default, s as TagsInput_default, u as pluginSecrets_exports, v as useAppExperiment, w as resolveExperimentCode, x as datePresetToISO, y as DATE_PRESET_OPTIONS } from "./records-CWRztE5M.js";
2
- import { a as normalizeSearchQuery, i as candidateMatchesSearch, o as useTextSearch } from "./AlertBox-CIhqsWbN.js";
3
- import { i as JobsStatusTray_default } from "./useRealtime-CNQbrS01.js";
4
- import { r as useExperimentSelector, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-BOLK-Gl4.js";
1
+ import { C as formatExperimentDate, S as experimentIdFromRoute, _ as APP_EXPERIMENT_KEY, b as SORT_OPTIONS, c as SecretInput_default, s as TagsInput_default, u as pluginSecrets_exports, v as useAppExperiment, w as resolveExperimentCode, x as datePresetToISO, y as DATE_PRESET_OPTIONS } from "./records-BAymyHAn.js";
2
+ import { a as normalizeSearchQuery, i as candidateMatchesSearch, o as useTextSearch } from "./AlertBox-CexONPhA.js";
3
+ import { i as JobsStatusTray_default } from "./useRealtime-B0u_FvEH.js";
4
+ import { r as useExperimentSelector, t as ExperimentSelectorModal_default } from "./ExperimentSelectorModal-CUkKmgfr.js";
5
5
  import { t as experimentStatus_exports } from "./experimentStatus-DCn2QKG7.js";
6
6
  import { t as ANALYSIS_FILE_ARTIFACT_SCHEMA } from "./analysisArtifactTypes-Cy3D0Ipg.js";
7
- import { _ as ArtifactSaveDialog_default, a as usePlatformFilePickerAdapter, c as encodePlatformPickerPath, d as StaleFormBanner_default, f as VersionConflictDialog_default, g as ExperimentCodeBadge_default, h as FilePicker_default, i as useFileBrowser, l as fieldNameLabel, m as AuditTrail_default, n as buildAnalysisArtifactTargetQuery, o as createFilePickerAdapter, p as BatchProgressList_default, r as parseAnalysisArtifactTarget, s as decodePlatformPickerPath, u as useVersionedSave, v as ArtifactSelectorModal_default, y as useArtifacts } from "./data-C72M20rh.js";
8
- import { t as ExperimentPopover_default } from "./ExperimentPopover-BM92LlrQ.js";
9
- import { a as readTableFileAsCsv, c as useExperimentData, d as unwrapExperimentDesignData, i as readFileAsText, l as extractSampleNamesFromDesignData, n as detectDelimiter, o as useFileImport, r as parseDelimitedText, s as validateImportFile, t as useExperimentSamples, u as extractSampleOptionsFromDesignData } from "./useExperimentSamples-Cz2v3V_q.js";
7
+ import { _ as ArtifactSaveDialog_default, a as usePlatformFilePickerAdapter, c as encodePlatformPickerPath, d as StaleFormBanner_default, f as VersionConflictDialog_default, g as ExperimentCodeBadge_default, h as FilePicker_default, i as useFileBrowser, l as fieldNameLabel, m as AuditTrail_default, n as buildAnalysisArtifactTargetQuery, o as createFilePickerAdapter, p as BatchProgressList_default, r as parseAnalysisArtifactTarget, s as decodePlatformPickerPath, u as useVersionedSave, v as ArtifactSelectorModal_default, y as useArtifacts } from "./data-8G-U6Pb0.js";
8
+ import { t as ExperimentPopover_default } from "./ExperimentPopover-CzV1--OY.js";
9
+ import { a as readTableFileAsCsv, c as useExperimentData, d as unwrapExperimentDesignData, i as readFileAsText, l as extractSampleNamesFromDesignData, n as detectDelimiter, o as useFileImport, r as parseDelimitedText, s as validateImportFile, t as useExperimentSamples, u as extractSampleOptionsFromDesignData } from "./useExperimentSamples-DEDAKa2E.js";
10
10
  export { ANALYSIS_FILE_ARTIFACT_SCHEMA, APP_EXPERIMENT_KEY, ArtifactSaveDialog_default as ArtifactSaveDialog, ArtifactSelectorModal_default as ArtifactSelectorModal, AuditTrail_default as AuditTrail, BatchProgressList_default as BatchProgressList, DATE_PRESET_OPTIONS, ExperimentCodeBadge_default as ExperimentCodeBadge, ExperimentPopover_default as ExperimentPopover, ExperimentSelectorModal_default as ExperimentSelectorModal, FilePicker_default as FilePicker, JobsStatusTray_default as JobsStatusTray, SORT_OPTIONS, SecretInput_default as SecretInput, StaleFormBanner_default as StaleFormBanner, TagsInput_default as TagsInput, VersionConflictDialog_default as VersionConflictDialog, buildAnalysisArtifactTargetQuery, candidateMatchesSearch, createFilePickerAdapter, datePresetToISO, decodePlatformPickerPath, detectDelimiter, encodePlatformPickerPath, experimentIdFromRoute, experimentStatus_exports as experimentStatus, extractSampleNamesFromDesignData, extractSampleOptionsFromDesignData, fieldNameLabel, formatExperimentDate, normalizeSearchQuery, parseAnalysisArtifactTarget, parseDelimitedText, pluginSecrets_exports as pluginSecret, readFileAsText, readTableFileAsCsv, resolveExperimentCode, unwrapExperimentDesignData, useAppExperiment, useArtifacts, useExperimentData, useExperimentSamples, useExperimentSelector, useFileBrowser, useFileImport, usePlatformFilePickerAdapter, useTextSearch, useVersionedSave, validateImportFile };
package/dist/index.js CHANGED
@@ -1,24 +1,24 @@
1
1
  import { a as BaseButton_default, n as BaseModal_default } from "./useDropdownState-uFIz6Yv8.js";
2
2
  import { c as tableDensityToSize, d as MintApiError, f as mintApiErrorFromResponse, l as tryUseSettingsStore, s as colorPalettes, t as useExperimentStore, u as useSettingsStore } from "./experiment-DyO54FQB.js";
3
- import { B as Tooltip_default, C as formatExperimentDate, H as useListSelection, I as FormField_default, K as BaseInput_default, L as EmptyState_default, T as FileUploader_default, U as useSelectionLimit, V as BaseSelect_default, _ as APP_EXPERIMENT_KEY, b as SORT_OPTIONS, d as isActiveJobStatus, f as isTerminalJobStatus, g as resolveJobCapabilities, h as normalizeJobState, i as getInjectedPlatformContext, m as normalizeJobPercent, o as resolveCurrentPluginId, p as jobStatusLabel, r as Skeleton_default, v as useAppExperiment, w as resolveExperimentCode, x as datePresetToISO, y as DATE_PRESET_OPTIONS, z as BaseCheckbox_default } from "./records-CWRztE5M.js";
4
- import { B as compareSortValues, H as BaseSlider_default, I as defineDataFrame, M as usePlatform, N as NumberInput_default, P as DatePicker_default, R as definePluginWorkspaceView, S as useSequenceUtils, U as BaseRadioGroup_default, V as useSortedItems, _ as getTypeDefault, g as getFieldRegistryEntry, y as useConcentrationUnits } from "./useListReorder-C--K06el.js";
5
- import { D as BaseTabs_default, E as BasePill_default, a as useReagentSeries, b as ProgressBar_default, h as useProtocolTemplates, i as generateDilutionSeries, n as DEFAULT_PRESETS, r as DEFAULT_UNITS, v as useSampleGroups, y as SectionCard_default } from "./lab-B5sKmlWF.js";
6
- import { t as SegmentedControl_default } from "./SegmentedControl-Dz41vAFM.js";
7
- import { a as AppContainer_default, i as Divider_default, n as FormBuilder_default, o as Calendar_default, r as Breadcrumb_default, t as MINTSdk } from "./install-DbF7ddGl.js";
8
- import { r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CIhqsWbN.js";
9
- import { C as hexToHsl, D as DataFrame_default, E as sampleTypeMarker, S as deriveShade, _ as mintPlotlyTemplate, r as useScheduleDrag, s as downloadBlob, t as useRackEditor, w as hslToHex } from "./useRackEditor-Cba_0OfI.js";
10
- import { c as generatedJobFormSchema, d as PluginWorkspaceView_default, f as useControlWorkspace, g as useToast, h as AppToastContainer_default, l as normalizeGeneratedJobInput, s as generatedJobDefaults, u as Avatar_default } from "./runtime-OBeh3Knt.js";
11
- import { n as ActionMenu_default, t as useRequest } from "./useRequest-Bfsh7gIm.js";
12
- import { C as usePluginWorkspace, D as useControlSchema, E as getControlDefaults, F as getDefaultControlView, I as CollapsibleCard_default, L as ThemeToggle_default, R as useTheme, T as defineControls, d as useForm, l as useFormBuilder, p as providePluginIdentity, u as evaluateCondition, w as defineControlComponentBindings, y as PluginIcon_default } from "./AppSidebar-DbftYDAY.js";
3
+ import { B as Tooltip_default, C as formatExperimentDate, H as useListSelection, I as FormField_default, K as BaseInput_default, L as EmptyState_default, T as FileUploader_default, U as useSelectionLimit, V as BaseSelect_default, _ as APP_EXPERIMENT_KEY, b as SORT_OPTIONS, d as isActiveJobStatus, f as isTerminalJobStatus, g as resolveJobCapabilities, h as normalizeJobState, i as getInjectedPlatformContext, m as normalizeJobPercent, o as resolveCurrentPluginId, p as jobStatusLabel, r as Skeleton_default, v as useAppExperiment, w as resolveExperimentCode, x as datePresetToISO, y as DATE_PRESET_OPTIONS, z as BaseCheckbox_default } from "./records-BAymyHAn.js";
4
+ import { B as compareSortValues, H as BaseSlider_default, I as defineDataFrame, M as usePlatform, N as NumberInput_default, P as DatePicker_default, R as definePluginWorkspaceView, S as useSequenceUtils, U as BaseRadioGroup_default, V as useSortedItems, _ as getTypeDefault, g as getFieldRegistryEntry, y as useConcentrationUnits } from "./useListReorder-W1bzK_bo.js";
5
+ import { E as BaseTabs_default, T as BasePill_default, a as useReagentSeries, h as useProtocolTemplates, i as generateDilutionSeries, n as DEFAULT_PRESETS, r as DEFAULT_UNITS, v as useSampleGroups, y as ProgressBar_default } from "./lab-CPJ7n7e5.js";
6
+ import { t as SegmentedControl_default } from "./SegmentedControl-C-sckoJZ.js";
7
+ import { a as Calendar_default, i as Divider_default, n as FormBuilder_default, r as Breadcrumb_default, t as MINTSdk } from "./install-CM33AZhf.js";
8
+ import { r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CexONPhA.js";
9
+ import { C as hexToHsl, D as SectionCard_default, E as sampleTypeMarker, O as DataFrame_default, S as deriveShade, _ as mintPlotlyTemplate, r as useScheduleDrag, s as downloadBlob, t as useRackEditor, w as hslToHex } from "./useRackEditor-BWOnob3i.js";
10
+ import { _ as useToast, c as generatedJobFormSchema, d as AppContainer_default, f as PluginWorkspaceView_default, g as AppToastContainer_default, l as normalizeGeneratedJobInput, p as useControlWorkspace, s as generatedJobDefaults, u as Avatar_default } from "./runtime-PntKXQ7K.js";
11
+ import { n as ActionMenu_default, t as useRequest } from "./useRequest-D9-3BS-3.js";
12
+ import { C as usePluginWorkspace, D as useControlSchema, E as getControlDefaults, F as getDefaultControlView, I as CollapsibleCard_default, L as ThemeToggle_default, R as useTheme, T as defineControls, d as useForm, l as useFormBuilder, p as providePluginIdentity, u as evaluateCondition, w as defineControlComponentBindings, y as PluginIcon_default } from "./AppSidebar-CIBehlYL.js";
13
13
  import { r as useAuthStore } from "./auth-SliLnFre.js";
14
- import { t as defineControlModel } from "./controlSchemaModel-C20f-1_T.js";
14
+ import { t as defineControlModel } from "./controlSchemaModel-C_XqpkgE.js";
15
15
  import { t as ConfirmDialog_default } from "./ConfirmDialog-CjWoxAD1.js";
16
- import { t as SettingsModal_default } from "./SettingsModal-CKWC1JNV.js";
17
- import { r as useExperimentSelector } from "./ExperimentSelectorModal-BOLK-Gl4.js";
18
- import { i as useFileBrowser, n as buildAnalysisArtifactTargetQuery, r as parseAnalysisArtifactTarget } from "./data-C72M20rh.js";
19
- import { d as unwrapExperimentDesignData, i as readFileAsText, l as extractSampleNamesFromDesignData, n as detectDelimiter, o as useFileImport, s as validateImportFile, t as useExperimentSamples, u as extractSampleOptionsFromDesignData } from "./useExperimentSamples-Cz2v3V_q.js";
16
+ import { t as SettingsModal_default } from "./SettingsModal-jW7Z4i_1.js";
17
+ import { r as useExperimentSelector } from "./ExperimentSelectorModal-CUkKmgfr.js";
18
+ import { i as useFileBrowser, n as buildAnalysisArtifactTargetQuery, r as parseAnalysisArtifactTarget } from "./data-8G-U6Pb0.js";
19
+ import { d as unwrapExperimentDesignData, i as readFileAsText, l as extractSampleNamesFromDesignData, n as detectDelimiter, o as useFileImport, s as validateImportFile, t as useExperimentSamples, u as extractSampleOptionsFromDesignData } from "./useExperimentSamples-DEDAKa2E.js";
20
20
  import { t as useExpansionSet } from "./useExpansionSet-CvoNMZJi.js";
21
- import { a as useManualLayoutResize, i as resizedVerticalSplitPercent, n as resizedLeadingPanelWidth, r as resizedTrailingPanelWidth } from "./shell-DDgF2bug.js";
21
+ import { a as useManualLayoutResize, i as resizedVerticalSplitPercent, n as resizedLeadingPanelWidth, r as resizedTrailingPanelWidth } from "./shell-B-woqThX.js";
22
22
  import "./stores/index.js";
23
23
  import { computed } from "vue";
24
24
  //#region src/composables/useExperiment.ts
@@ -1,17 +1,17 @@
1
1
  import { a as BaseButton_default, n as BaseModal_default, o as __exportAll } from "./useDropdownState-uFIz6Yv8.js";
2
- import { B as Tooltip_default, I as FormField_default, K as BaseInput_default, L as EmptyState_default, T as FileUploader_default, V as BaseSelect_default, r as Skeleton_default, z as BaseCheckbox_default } from "./records-CWRztE5M.js";
3
- import { H as BaseSlider_default, N as NumberInput_default, P as DatePicker_default, U as BaseRadioGroup_default } from "./useListReorder-C--K06el.js";
4
- import { D as BaseTabs_default, E as BasePill_default, b as ProgressBar_default, t as lab_exports, y as SectionCard_default } from "./lab-B5sKmlWF.js";
5
- import { t as SegmentedControl_default } from "./SegmentedControl-Dz41vAFM.js";
6
- import { r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CIhqsWbN.js";
7
- import { D as DataFrame_default } from "./useRackEditor-Cba_0OfI.js";
8
- import { d as PluginWorkspaceView_default, h as AppToastContainer_default, t as runtime_exports, u as Avatar_default } from "./runtime-OBeh3Knt.js";
9
- import { n as ActionMenu_default } from "./useRequest-Bfsh7gIm.js";
10
- import { E as getControlDefaults, I as CollapsibleCard_default, L as ThemeToggle_default, N as controlsToFormSchema, n as FormSchemaInternal_default, x as normalizeLabelItemInput, y as PluginIcon_default } from "./AppSidebar-DbftYDAY.js";
2
+ import { B as Tooltip_default, I as FormField_default, K as BaseInput_default, L as EmptyState_default, T as FileUploader_default, V as BaseSelect_default, r as Skeleton_default, z as BaseCheckbox_default } from "./records-BAymyHAn.js";
3
+ import { H as BaseSlider_default, N as NumberInput_default, P as DatePicker_default, U as BaseRadioGroup_default } from "./useListReorder-W1bzK_bo.js";
4
+ import { E as BaseTabs_default, T as BasePill_default, t as lab_exports, y as ProgressBar_default } from "./lab-CPJ7n7e5.js";
5
+ import { t as SegmentedControl_default } from "./SegmentedControl-C-sckoJZ.js";
6
+ import { r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CexONPhA.js";
7
+ import { D as SectionCard_default, O as DataFrame_default } from "./useRackEditor-BWOnob3i.js";
8
+ import { d as AppContainer_default, f as PluginWorkspaceView_default, g as AppToastContainer_default, t as runtime_exports, u as Avatar_default } from "./runtime-PntKXQ7K.js";
9
+ import { n as ActionMenu_default } from "./useRequest-D9-3BS-3.js";
10
+ import { E as getControlDefaults, I as CollapsibleCard_default, L as ThemeToggle_default, N as controlsToFormSchema, n as FormSchemaInternal_default, x as normalizeLabelItemInput, y as PluginIcon_default } from "./AppSidebar-CIBehlYL.js";
11
11
  import { t as ConfirmDialog_default } from "./ConfirmDialog-CjWoxAD1.js";
12
- import { t as SettingsModal_default } from "./SettingsModal-CKWC1JNV.js";
13
- import { t as data_exports } from "./data-C72M20rh.js";
14
- import { t as shell_exports } from "./shell-DDgF2bug.js";
12
+ import { t as SettingsModal_default } from "./SettingsModal-jW7Z4i_1.js";
13
+ import { t as data_exports } from "./data-8G-U6Pb0.js";
14
+ import { t as shell_exports } from "./shell-B-woqThX.js";
15
15
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createSlots, createTextVNode, defineComponent, guardReactiveProps, normalizeClass, normalizeProps, normalizeStyle, openBlock, ref, renderList, renderSlot, toDisplayString, watch, withCtx } from "vue";
16
16
  //#region src/components/Calendar.vue?vue&type=script&setup=true&lang.ts
17
17
  var _hoisted_1$2 = { class: "mint-calendar" };
@@ -325,30 +325,6 @@ var Calendar_default = /* @__PURE__ */ defineComponent({
325
325
  }
326
326
  });
327
327
  //#endregion
328
- //#region src/components/AppContainer.vue
329
- var AppContainer_default = /* @__PURE__ */ defineComponent({
330
- __name: "AppContainer",
331
- props: {
332
- scrollable: {
333
- type: Boolean,
334
- default: false
335
- },
336
- direction: {},
337
- gap: { default: "1rem" }
338
- },
339
- setup(__props) {
340
- /** Content card with optional scroll lock, or a transparent flex layout shell with configurable direction and gap. */
341
- const props = __props;
342
- const isLayout = computed(() => !!props.direction);
343
- return (_ctx, _cache) => {
344
- return openBlock(), createElementBlock("div", {
345
- class: normalizeClass(["mint-container", isLayout.value ? ["mint-container--layout", __props.direction === "row" ? "mint-container--row" : "mint-container--column"] : ["mint-container--card", __props.scrollable ? "mint-container--scrollable" : ""]]),
346
- style: normalizeStyle(isLayout.value ? { gap: __props.gap } : void 0)
347
- }, [renderSlot(_ctx.$slots, "default")], 6);
348
- };
349
- }
350
- });
351
- //#endregion
352
328
  //#region src/components/Divider.vue?vue&type=script&setup=true&lang.ts
353
329
  var _hoisted_1$1 = {
354
330
  key: 0,
@@ -664,6 +640,6 @@ var MINTSdk = { install(app) {
664
640
  for (const [name, component] of Object.entries(components)) if (component && typeof component === "object" && ("setup" in component || "render" in component || "__name" in component)) app.component(name, component);
665
641
  } };
666
642
  //#endregion
667
- export { AppContainer_default as a, Divider_default as i, FormBuilder_default as n, Calendar_default as o, Breadcrumb_default as r, MINTSdk as t };
643
+ export { Calendar_default as a, Divider_default as i, FormBuilder_default as n, Breadcrumb_default as r, MINTSdk as t };
668
644
 
669
- //# sourceMappingURL=install-DbF7ddGl.js.map
645
+ //# sourceMappingURL=install-CM33AZhf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-CM33AZhf.js","names":["$slots"],"sources":["../src/components/Calendar.vue","../src/components/Calendar.vue","../src/components/Divider.vue","../src/components/Divider.vue","../src/components/Breadcrumb.vue","../src/components/Breadcrumb.vue","../src/components/FormBuilder.vue","../src/components/FormBuilder.vue","../src/components/index.ts","../src/install.ts"],"sourcesContent":["<script setup lang=\"ts\">\n/** Month calendar for single date, multi-date, or range selection with markers and navigation. */\nimport { ref, computed, watch } from 'vue'\nimport type { CalendarSelectionMode, CalendarMarker, CalendarDayContext } from '../types'\n\n/**\n * Calendar - Month calendar with date selection, range selection, and custom markers.\n *\n * @example\n * ```vue\n * <!-- Single date selection -->\n * <Calendar v-model=\"selectedDate\" />\n *\n * <!-- Range selection -->\n * <Calendar v-model=\"dateRange\" selection-mode=\"range\" />\n *\n * <!-- With markers -->\n * <Calendar :markers=\"[{ date: '2024-01-15', color: '#ff0000', label: 'Event' }]\" />\n * ```\n */\ninterface Props {\n /** Selected date(s) - type depends on selectionMode */\n modelValue?: Date | Date[] | { start: Date; end: Date } | null\n /** Selection behavior mode */\n selectionMode?: CalendarSelectionMode\n /** Display month (0-11) */\n month?: number\n /** Display year */\n year?: number\n /** Always show 6 weeks (42 days) */\n fixedWeeks?: boolean\n /** First day of week (0=Sunday, 1=Monday, etc.) */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** Show days from adjacent months */\n showOutsideDays?: boolean\n /** Show month navigation buttons */\n showNavigation?: boolean\n /** Visual markers on specific dates */\n markers?: CalendarMarker[]\n /** Earliest selectable date */\n minDate?: Date | string\n /** Latest selectable date */\n maxDate?: Date | string\n /** Explicitly disabled dates */\n disabledDates?: Array<Date | string>\n /** Custom disabled date logic */\n isDateDisabled?: (date: Date) => boolean\n /** Locale for date formatting */\n locale?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n selectionMode: 'single',\n fixedWeeks: true,\n weekStartsOn: 1,\n showOutsideDays: true,\n showNavigation: true,\n markers: () => [],\n disabledDates: () => [],\n locale: 'en-US',\n})\n\n/**\n * @event update:modelValue - Emitted when date selection changes (v-model support)\n * @event update:month - Emitted when displayed month changes\n * @event update:year - Emitted when displayed year changes\n * @event day-click - Emitted when a day is clicked, includes day context\n * @event navigate - Emitted when month navigation occurs\n */\nconst emit = defineEmits<{\n 'update:modelValue': [value: Date | Date[] | { start: Date; end: Date } | null]\n 'update:month': [month: number]\n 'update:year': [year: number]\n 'day-click': [context: CalendarDayContext]\n navigate: [direction: 'prev' | 'next', month: number, year: number]\n}>()\n\nconst today = new Date()\ntoday.setHours(0, 0, 0, 0)\n\nconst currentMonth = ref(props.month ?? today.getMonth())\nconst currentYear = ref(props.year ?? today.getFullYear())\n\n// Range hover tracking\nconst hoveredDate = ref<Date | null>(null)\n\nwatch(() => props.month, (val) => { if (val !== undefined) currentMonth.value = val })\nwatch(() => props.year, (val) => { if (val !== undefined) currentYear.value = val })\n\nconst monthLabel = computed(() => {\n const date = new Date(currentYear.value, currentMonth.value, 1)\n return date.toLocaleDateString(props.locale, { month: 'long', year: 'numeric' })\n})\n\nconst weekDayLabels = computed(() => {\n const labels: string[] = []\n // Use Jan 7, 2024 (Sunday) as reference, then offset by weekStartsOn\n const base = new Date(2024, 0, 7 + props.weekStartsOn)\n for (let i = 0; i < 7; i++) {\n const d = new Date(base)\n d.setDate(d.getDate() + i)\n labels.push(d.toLocaleDateString(props.locale, { weekday: 'short' }))\n }\n return labels\n})\n\nfunction toDateKey(d: Date): string {\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nfunction parseDate(val: Date | string): Date {\n if (val instanceof Date) return val\n const d = new Date(val + 'T00:00:00')\n return d\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n}\n\nconst disabledDateSet = computed(() => {\n const set = new Set<string>()\n for (const d of props.disabledDates) {\n const parsed = parseDate(d)\n set.add(toDateKey(parsed))\n }\n return set\n})\n\nconst markerMap = computed(() => {\n const map = new Map<string, CalendarMarker[]>()\n for (const marker of props.markers) {\n const date = parseDate(marker.date)\n const key = toDateKey(date)\n const markers = map.get(key)\n if (markers) {\n markers.push(marker)\n } else {\n map.set(key, [marker])\n }\n }\n return map\n})\n\nfunction isDateSelected(date: Date): boolean {\n const val = props.modelValue\n if (!val) return false\n if (val instanceof Date) return isSameDay(date, val)\n if (Array.isArray(val)) return val.some(d => isSameDay(date, d))\n if ('start' in val && 'end' in val) {\n return isSameDay(date, val.start) || isSameDay(date, val.end)\n }\n return false\n}\n\nfunction isInRange(date: Date): boolean {\n if (props.selectionMode !== 'range') return false\n const val = props.modelValue\n if (!val || !('start' in (val as object))) return false\n const range = val as { start: Date; end: Date }\n\n const t = date.getTime()\n const start = range.start?.getTime()\n if (!start) return false\n\n // If hovering during selection (before end is set)\n if (!range.end && hoveredDate.value) {\n const hov = hoveredDate.value.getTime()\n const [lo, hi] = start <= hov ? [start, hov] : [hov, start]\n return t > lo && t < hi\n }\n\n // Complete range\n if (range.end) {\n const end = range.end.getTime()\n return t > start && t < end\n }\n\n return false\n}\n\nfunction isDisabled(date: Date): boolean {\n if (disabledDateSet.value.has(toDateKey(date))) return true\n if (props.isDateDisabled?.(date)) return true\n if (props.minDate) {\n const min = parseDate(props.minDate)\n if (date < min) return true\n }\n if (props.maxDate) {\n const max = parseDate(props.maxDate)\n if (date > max) return true\n }\n return false\n}\n\nconst calendarDays = computed<CalendarDayContext[]>(() => {\n const first = new Date(currentYear.value, currentMonth.value, 1)\n const startDow = first.getDay()\n const offset = (startDow - props.weekStartsOn + 7) % 7\n\n const totalCells = props.fixedWeeks ? 42 : (() => {\n const daysInMonth = new Date(currentYear.value, currentMonth.value + 1, 0).getDate()\n const needed = offset + daysInMonth\n return Math.ceil(needed / 7) * 7\n })()\n\n const days: CalendarDayContext[] = []\n for (let i = 0; i < totalCells; i++) {\n const date = new Date(currentYear.value, currentMonth.value, 1 - offset + i)\n date.setHours(0, 0, 0, 0)\n const key = toDateKey(date)\n days.push({\n date,\n dayOfMonth: date.getDate(),\n isToday: isSameDay(date, today),\n isSelected: isDateSelected(date),\n isInRange: isInRange(date),\n isDisabled: isDisabled(date),\n isOutsideMonth: date.getMonth() !== currentMonth.value,\n markers: markerMap.value.get(key) ?? [],\n })\n }\n return days\n})\n\n// Range selection state\nconst rangeStart = ref<Date | null>(null)\n\nfunction handleDayClick(day: CalendarDayContext) {\n if (day.isDisabled) return\n if (!props.showOutsideDays && day.isOutsideMonth) return\n\n emit('day-click', day)\n\n if (props.selectionMode === 'none') return\n\n if (props.selectionMode === 'single') {\n emit('update:modelValue', day.date)\n } else if (props.selectionMode === 'multiple') {\n const current = (props.modelValue as Date[] | undefined) ?? []\n const idx = current.findIndex(d => isSameDay(d, day.date))\n if (idx >= 0) {\n const next = [...current]\n next.splice(idx, 1)\n emit('update:modelValue', next)\n } else {\n emit('update:modelValue', [...current, day.date])\n }\n } else if (props.selectionMode === 'range') {\n if (!rangeStart.value) {\n rangeStart.value = day.date\n } else {\n const start = rangeStart.value\n const end = day.date\n rangeStart.value = null\n const ordered = start.getTime() <= end.getTime()\n ? { start, end }\n : { start: end, end: start }\n emit('update:modelValue', ordered)\n }\n }\n}\n\nfunction handleDayHover(day: CalendarDayContext) {\n if (props.selectionMode === 'range' && rangeStart.value) {\n hoveredDate.value = day.date\n }\n}\n\nfunction prevMonth() {\n if (currentMonth.value === 0) {\n currentMonth.value = 11\n currentYear.value--\n emit('update:year', currentYear.value)\n } else {\n currentMonth.value--\n }\n emit('update:month', currentMonth.value)\n emit('navigate', 'prev', currentMonth.value, currentYear.value)\n}\n\nfunction nextMonth() {\n if (currentMonth.value === 11) {\n currentMonth.value = 0\n currentYear.value++\n emit('update:year', currentYear.value)\n } else {\n currentMonth.value++\n }\n emit('update:month', currentMonth.value)\n emit('navigate', 'next', currentMonth.value, currentYear.value)\n}\n</script>\n\n<template>\n <div class=\"mint-calendar\">\n <div v-if=\"showNavigation\" class=\"mint-calendar__header\">\n <button type=\"button\" class=\"mint-calendar__nav-btn\" aria-label=\"Previous month\" @click=\"prevMonth\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n <slot name=\"header\" :month=\"currentMonth\" :year=\"currentYear\" :prev-month=\"prevMonth\" :next-month=\"nextMonth\">\n <span class=\"mint-calendar__title\">{{ monthLabel }}</span>\n </slot>\n <button type=\"button\" class=\"mint-calendar__nav-btn\" aria-label=\"Next month\" @click=\"nextMonth\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n\n <div class=\"mint-calendar__weekdays\">\n <span\n v-for=\"(label, i) in weekDayLabels\"\n :key=\"i\"\n class=\"mint-calendar__weekday\"\n >\n <slot name=\"week-day\" :day-name=\"label\" :index=\"i\">{{ label }}</slot>\n </span>\n </div>\n\n <div class=\"mint-calendar__grid\">\n <button\n v-for=\"(day, i) in calendarDays\"\n :key=\"i\"\n type=\"button\"\n :disabled=\"day.isDisabled\"\n :class=\"[\n 'mint-calendar__day',\n {\n 'mint-calendar__day--today': day.isToday,\n 'mint-calendar__day--selected': day.isSelected,\n 'mint-calendar__day--in-range': day.isInRange,\n 'mint-calendar__day--disabled': day.isDisabled,\n 'mint-calendar__day--outside': day.isOutsideMonth,\n 'mint-calendar__day--interactive': selectionMode !== 'none' && !day.isDisabled,\n },\n ]\"\n @click=\"handleDayClick(day)\"\n @mouseenter=\"handleDayHover(day)\"\n >\n <slot name=\"day-content\" :day=\"day\">\n <span class=\"mint-calendar__day-number\">{{ day.dayOfMonth }}</span>\n <div v-if=\"day.markers.length > 0\" class=\"mint-calendar__markers\">\n <span\n v-for=\"(marker, mi) in day.markers.slice(0, 3)\"\n :key=\"mi\"\n :class=\"[\n 'mint-calendar__marker',\n `mint-calendar__marker--${marker.type ?? 'dot'}`,\n ]\"\n :style=\"marker.color ? { '--marker-color': marker.color } : {}\"\n :title=\"marker.label\"\n />\n </div>\n </slot>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Month calendar for single date, multi-date, or range selection with markers and navigation. */\nimport { ref, computed, watch } from 'vue'\nimport type { CalendarSelectionMode, CalendarMarker, CalendarDayContext } from '../types'\n\n/**\n * Calendar - Month calendar with date selection, range selection, and custom markers.\n *\n * @example\n * ```vue\n * <!-- Single date selection -->\n * <Calendar v-model=\"selectedDate\" />\n *\n * <!-- Range selection -->\n * <Calendar v-model=\"dateRange\" selection-mode=\"range\" />\n *\n * <!-- With markers -->\n * <Calendar :markers=\"[{ date: '2024-01-15', color: '#ff0000', label: 'Event' }]\" />\n * ```\n */\ninterface Props {\n /** Selected date(s) - type depends on selectionMode */\n modelValue?: Date | Date[] | { start: Date; end: Date } | null\n /** Selection behavior mode */\n selectionMode?: CalendarSelectionMode\n /** Display month (0-11) */\n month?: number\n /** Display year */\n year?: number\n /** Always show 6 weeks (42 days) */\n fixedWeeks?: boolean\n /** First day of week (0=Sunday, 1=Monday, etc.) */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6\n /** Show days from adjacent months */\n showOutsideDays?: boolean\n /** Show month navigation buttons */\n showNavigation?: boolean\n /** Visual markers on specific dates */\n markers?: CalendarMarker[]\n /** Earliest selectable date */\n minDate?: Date | string\n /** Latest selectable date */\n maxDate?: Date | string\n /** Explicitly disabled dates */\n disabledDates?: Array<Date | string>\n /** Custom disabled date logic */\n isDateDisabled?: (date: Date) => boolean\n /** Locale for date formatting */\n locale?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n selectionMode: 'single',\n fixedWeeks: true,\n weekStartsOn: 1,\n showOutsideDays: true,\n showNavigation: true,\n markers: () => [],\n disabledDates: () => [],\n locale: 'en-US',\n})\n\n/**\n * @event update:modelValue - Emitted when date selection changes (v-model support)\n * @event update:month - Emitted when displayed month changes\n * @event update:year - Emitted when displayed year changes\n * @event day-click - Emitted when a day is clicked, includes day context\n * @event navigate - Emitted when month navigation occurs\n */\nconst emit = defineEmits<{\n 'update:modelValue': [value: Date | Date[] | { start: Date; end: Date } | null]\n 'update:month': [month: number]\n 'update:year': [year: number]\n 'day-click': [context: CalendarDayContext]\n navigate: [direction: 'prev' | 'next', month: number, year: number]\n}>()\n\nconst today = new Date()\ntoday.setHours(0, 0, 0, 0)\n\nconst currentMonth = ref(props.month ?? today.getMonth())\nconst currentYear = ref(props.year ?? today.getFullYear())\n\n// Range hover tracking\nconst hoveredDate = ref<Date | null>(null)\n\nwatch(() => props.month, (val) => { if (val !== undefined) currentMonth.value = val })\nwatch(() => props.year, (val) => { if (val !== undefined) currentYear.value = val })\n\nconst monthLabel = computed(() => {\n const date = new Date(currentYear.value, currentMonth.value, 1)\n return date.toLocaleDateString(props.locale, { month: 'long', year: 'numeric' })\n})\n\nconst weekDayLabels = computed(() => {\n const labels: string[] = []\n // Use Jan 7, 2024 (Sunday) as reference, then offset by weekStartsOn\n const base = new Date(2024, 0, 7 + props.weekStartsOn)\n for (let i = 0; i < 7; i++) {\n const d = new Date(base)\n d.setDate(d.getDate() + i)\n labels.push(d.toLocaleDateString(props.locale, { weekday: 'short' }))\n }\n return labels\n})\n\nfunction toDateKey(d: Date): string {\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`\n}\n\nfunction parseDate(val: Date | string): Date {\n if (val instanceof Date) return val\n const d = new Date(val + 'T00:00:00')\n return d\n}\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n}\n\nconst disabledDateSet = computed(() => {\n const set = new Set<string>()\n for (const d of props.disabledDates) {\n const parsed = parseDate(d)\n set.add(toDateKey(parsed))\n }\n return set\n})\n\nconst markerMap = computed(() => {\n const map = new Map<string, CalendarMarker[]>()\n for (const marker of props.markers) {\n const date = parseDate(marker.date)\n const key = toDateKey(date)\n const markers = map.get(key)\n if (markers) {\n markers.push(marker)\n } else {\n map.set(key, [marker])\n }\n }\n return map\n})\n\nfunction isDateSelected(date: Date): boolean {\n const val = props.modelValue\n if (!val) return false\n if (val instanceof Date) return isSameDay(date, val)\n if (Array.isArray(val)) return val.some(d => isSameDay(date, d))\n if ('start' in val && 'end' in val) {\n return isSameDay(date, val.start) || isSameDay(date, val.end)\n }\n return false\n}\n\nfunction isInRange(date: Date): boolean {\n if (props.selectionMode !== 'range') return false\n const val = props.modelValue\n if (!val || !('start' in (val as object))) return false\n const range = val as { start: Date; end: Date }\n\n const t = date.getTime()\n const start = range.start?.getTime()\n if (!start) return false\n\n // If hovering during selection (before end is set)\n if (!range.end && hoveredDate.value) {\n const hov = hoveredDate.value.getTime()\n const [lo, hi] = start <= hov ? [start, hov] : [hov, start]\n return t > lo && t < hi\n }\n\n // Complete range\n if (range.end) {\n const end = range.end.getTime()\n return t > start && t < end\n }\n\n return false\n}\n\nfunction isDisabled(date: Date): boolean {\n if (disabledDateSet.value.has(toDateKey(date))) return true\n if (props.isDateDisabled?.(date)) return true\n if (props.minDate) {\n const min = parseDate(props.minDate)\n if (date < min) return true\n }\n if (props.maxDate) {\n const max = parseDate(props.maxDate)\n if (date > max) return true\n }\n return false\n}\n\nconst calendarDays = computed<CalendarDayContext[]>(() => {\n const first = new Date(currentYear.value, currentMonth.value, 1)\n const startDow = first.getDay()\n const offset = (startDow - props.weekStartsOn + 7) % 7\n\n const totalCells = props.fixedWeeks ? 42 : (() => {\n const daysInMonth = new Date(currentYear.value, currentMonth.value + 1, 0).getDate()\n const needed = offset + daysInMonth\n return Math.ceil(needed / 7) * 7\n })()\n\n const days: CalendarDayContext[] = []\n for (let i = 0; i < totalCells; i++) {\n const date = new Date(currentYear.value, currentMonth.value, 1 - offset + i)\n date.setHours(0, 0, 0, 0)\n const key = toDateKey(date)\n days.push({\n date,\n dayOfMonth: date.getDate(),\n isToday: isSameDay(date, today),\n isSelected: isDateSelected(date),\n isInRange: isInRange(date),\n isDisabled: isDisabled(date),\n isOutsideMonth: date.getMonth() !== currentMonth.value,\n markers: markerMap.value.get(key) ?? [],\n })\n }\n return days\n})\n\n// Range selection state\nconst rangeStart = ref<Date | null>(null)\n\nfunction handleDayClick(day: CalendarDayContext) {\n if (day.isDisabled) return\n if (!props.showOutsideDays && day.isOutsideMonth) return\n\n emit('day-click', day)\n\n if (props.selectionMode === 'none') return\n\n if (props.selectionMode === 'single') {\n emit('update:modelValue', day.date)\n } else if (props.selectionMode === 'multiple') {\n const current = (props.modelValue as Date[] | undefined) ?? []\n const idx = current.findIndex(d => isSameDay(d, day.date))\n if (idx >= 0) {\n const next = [...current]\n next.splice(idx, 1)\n emit('update:modelValue', next)\n } else {\n emit('update:modelValue', [...current, day.date])\n }\n } else if (props.selectionMode === 'range') {\n if (!rangeStart.value) {\n rangeStart.value = day.date\n } else {\n const start = rangeStart.value\n const end = day.date\n rangeStart.value = null\n const ordered = start.getTime() <= end.getTime()\n ? { start, end }\n : { start: end, end: start }\n emit('update:modelValue', ordered)\n }\n }\n}\n\nfunction handleDayHover(day: CalendarDayContext) {\n if (props.selectionMode === 'range' && rangeStart.value) {\n hoveredDate.value = day.date\n }\n}\n\nfunction prevMonth() {\n if (currentMonth.value === 0) {\n currentMonth.value = 11\n currentYear.value--\n emit('update:year', currentYear.value)\n } else {\n currentMonth.value--\n }\n emit('update:month', currentMonth.value)\n emit('navigate', 'prev', currentMonth.value, currentYear.value)\n}\n\nfunction nextMonth() {\n if (currentMonth.value === 11) {\n currentMonth.value = 0\n currentYear.value++\n emit('update:year', currentYear.value)\n } else {\n currentMonth.value++\n }\n emit('update:month', currentMonth.value)\n emit('navigate', 'next', currentMonth.value, currentYear.value)\n}\n</script>\n\n<template>\n <div class=\"mint-calendar\">\n <div v-if=\"showNavigation\" class=\"mint-calendar__header\">\n <button type=\"button\" class=\"mint-calendar__nav-btn\" aria-label=\"Previous month\" @click=\"prevMonth\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m15 18-6-6 6-6\" />\n </svg>\n </button>\n <slot name=\"header\" :month=\"currentMonth\" :year=\"currentYear\" :prev-month=\"prevMonth\" :next-month=\"nextMonth\">\n <span class=\"mint-calendar__title\">{{ monthLabel }}</span>\n </slot>\n <button type=\"button\" class=\"mint-calendar__nav-btn\" aria-label=\"Next month\" @click=\"nextMonth\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n </button>\n </div>\n\n <div class=\"mint-calendar__weekdays\">\n <span\n v-for=\"(label, i) in weekDayLabels\"\n :key=\"i\"\n class=\"mint-calendar__weekday\"\n >\n <slot name=\"week-day\" :day-name=\"label\" :index=\"i\">{{ label }}</slot>\n </span>\n </div>\n\n <div class=\"mint-calendar__grid\">\n <button\n v-for=\"(day, i) in calendarDays\"\n :key=\"i\"\n type=\"button\"\n :disabled=\"day.isDisabled\"\n :class=\"[\n 'mint-calendar__day',\n {\n 'mint-calendar__day--today': day.isToday,\n 'mint-calendar__day--selected': day.isSelected,\n 'mint-calendar__day--in-range': day.isInRange,\n 'mint-calendar__day--disabled': day.isDisabled,\n 'mint-calendar__day--outside': day.isOutsideMonth,\n 'mint-calendar__day--interactive': selectionMode !== 'none' && !day.isDisabled,\n },\n ]\"\n @click=\"handleDayClick(day)\"\n @mouseenter=\"handleDayHover(day)\"\n >\n <slot name=\"day-content\" :day=\"day\">\n <span class=\"mint-calendar__day-number\">{{ day.dayOfMonth }}</span>\n <div v-if=\"day.markers.length > 0\" class=\"mint-calendar__markers\">\n <span\n v-for=\"(marker, mi) in day.markers.slice(0, 3)\"\n :key=\"mi\"\n :class=\"[\n 'mint-calendar__marker',\n `mint-calendar__marker--${marker.type ?? 'dot'}`,\n ]\"\n :style=\"marker.color ? { '--marker-color': marker.color } : {}\"\n :title=\"marker.label\"\n />\n </div>\n </slot>\n </button>\n </div>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Horizontal or vertical rule with optional inline text label at center or left. */\ninterface Props {\n vertical?: boolean\n label?: string\n align?: 'center' | 'left'\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nwithDefaults(defineProps<Props>(), {\n vertical: false,\n label: undefined,\n align: 'center',\n spacing: 'md',\n})\n</script>\n\n<template>\n <div\n v-if=\"vertical\"\n :class=\"[\n 'mint-divider',\n 'mint-divider--vertical',\n `mint-divider--${spacing}`,\n ]\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <div\n v-else\n :class=\"[\n 'mint-divider',\n `mint-divider--${spacing}`,\n label ? `mint-divider--labeled mint-divider--${align}` : '',\n ]\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n >\n <template v-if=\"label\">\n <span v-if=\"align === 'center'\" class=\"mint-divider__line\" />\n <span class=\"mint-divider__label\">{{ label }}</span>\n <span class=\"mint-divider__line\" />\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Horizontal or vertical rule with optional inline text label at center or left. */\ninterface Props {\n vertical?: boolean\n label?: string\n align?: 'center' | 'left'\n spacing?: 'sm' | 'md' | 'lg'\n}\n\nwithDefaults(defineProps<Props>(), {\n vertical: false,\n label: undefined,\n align: 'center',\n spacing: 'md',\n})\n</script>\n\n<template>\n <div\n v-if=\"vertical\"\n :class=\"[\n 'mint-divider',\n 'mint-divider--vertical',\n `mint-divider--${spacing}`,\n ]\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <div\n v-else\n :class=\"[\n 'mint-divider',\n `mint-divider--${spacing}`,\n label ? `mint-divider--labeled mint-divider--${align}` : '',\n ]\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n >\n <template v-if=\"label\">\n <span v-if=\"align === 'center'\" class=\"mint-divider__line\" />\n <span class=\"mint-divider__label\">{{ label }}</span>\n <span class=\"mint-divider__line\" />\n </template>\n </div>\n</template>\n","<script setup lang=\"ts\">\n/** Renders a breadcrumb trail where ancestors are links or emit-based buttons and the last item is the current page. */\nimport { computed, ref, watch } from 'vue'\nimport type { BreadcrumbItem, BreadcrumbItemInput } from '../types'\nimport { normalizeLabelItemInput } from '../utils/items'\n\ninterface Props {\n items: BreadcrumbItemInput[]\n separator?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n separator: '/',\n})\n\nconst emit = defineEmits<{\n navigate: [item: BreadcrumbItem]\n}>()\n\nconst normalizedItems = computed<BreadcrumbItem[]>(() =>\n props.items.map(normalizeLabelItemInput)\n)\n\n/** Trails longer than this collapse their middle into \"…\" (4e). */\nconst MAX_VISIBLE = 4\n\nconst expanded = ref(false)\n\n// A new trail (navigation) starts collapsed again; keyed on labels so a parent\n// re-render with an equal inline array does not collapse it.\nwatch(() => normalizedItems.value.map(item => item.label).join('\\u0000'), () => {\n expanded.value = false\n})\n\n/** Visible segments with their index in the full trail; `null` marks the collapsed \"…\". */\nconst segments = computed<({ item: BreadcrumbItem; index: number } | null)[]>(() => {\n const all = normalizedItems.value.map((item, index) => ({ item, index }))\n if (expanded.value || all.length <= MAX_VISIBLE) return all\n return [all[0], null, ...all.slice(-2)]\n})\n\nconst hiddenCount = computed(() => normalizedItems.value.length - 3)\n\n/** ID-like segments (EXP-042) render mono. */\nfunction isIdLabel(label: string): boolean {\n return /^[A-Z]+-\\d+$/.test(label)\n}\n\nfunction handleClick(item: BreadcrumbItem) {\n if (!item.href) {\n emit('navigate', item)\n }\n}\n</script>\n\n<template>\n <nav class=\"mint-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"mint-breadcrumb__list\">\n <li\n v-for=\"(segment, position) in segments\"\n :key=\"segment ? segment.index : 'ellipsis'\"\n class=\"mint-breadcrumb__item\"\n >\n <button\n v-if=\"!segment\"\n type=\"button\"\n class=\"mint-breadcrumb__link mint-breadcrumb__ellipsis\"\n :aria-label=\"`Show ${hiddenCount} hidden levels`\"\n :aria-expanded=\"false\"\n @click=\"expanded = true\"\n >\n …\n </button>\n <slot v-else name=\"item\" :item=\"segment.item\" :index=\"segment.index\" :is-last=\"segment.index === normalizedItems.length - 1\">\n <a\n v-if=\"segment.item.href && segment.index !== normalizedItems.length - 1\"\n :href=\"segment.item.href\"\n :class=\"['mint-breadcrumb__link', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n >\n {{ segment.item.label }}\n </a>\n <button\n v-else-if=\"segment.index !== normalizedItems.length - 1\"\n :class=\"['mint-breadcrumb__link', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n @click=\"handleClick(segment.item)\"\n >\n {{ segment.item.label }}\n </button>\n <span\n v-else\n :class=\"['mint-breadcrumb__current', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n aria-current=\"page\"\n >\n {{ segment.item.label }}\n </span>\n </slot>\n <span\n v-if=\"position !== segments.length - 1\"\n class=\"mint-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n <slot name=\"separator\">\n <svg v-if=\"separator === '/'\" class=\"mint-breadcrumb__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n <template v-else>{{ separator }}</template>\n </slot>\n </span>\n </li>\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\n/** Renders a breadcrumb trail where ancestors are links or emit-based buttons and the last item is the current page. */\nimport { computed, ref, watch } from 'vue'\nimport type { BreadcrumbItem, BreadcrumbItemInput } from '../types'\nimport { normalizeLabelItemInput } from '../utils/items'\n\ninterface Props {\n items: BreadcrumbItemInput[]\n separator?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n separator: '/',\n})\n\nconst emit = defineEmits<{\n navigate: [item: BreadcrumbItem]\n}>()\n\nconst normalizedItems = computed<BreadcrumbItem[]>(() =>\n props.items.map(normalizeLabelItemInput)\n)\n\n/** Trails longer than this collapse their middle into \"…\" (4e). */\nconst MAX_VISIBLE = 4\n\nconst expanded = ref(false)\n\n// A new trail (navigation) starts collapsed again; keyed on labels so a parent\n// re-render with an equal inline array does not collapse it.\nwatch(() => normalizedItems.value.map(item => item.label).join('\\u0000'), () => {\n expanded.value = false\n})\n\n/** Visible segments with their index in the full trail; `null` marks the collapsed \"…\". */\nconst segments = computed<({ item: BreadcrumbItem; index: number } | null)[]>(() => {\n const all = normalizedItems.value.map((item, index) => ({ item, index }))\n if (expanded.value || all.length <= MAX_VISIBLE) return all\n return [all[0], null, ...all.slice(-2)]\n})\n\nconst hiddenCount = computed(() => normalizedItems.value.length - 3)\n\n/** ID-like segments (EXP-042) render mono. */\nfunction isIdLabel(label: string): boolean {\n return /^[A-Z]+-\\d+$/.test(label)\n}\n\nfunction handleClick(item: BreadcrumbItem) {\n if (!item.href) {\n emit('navigate', item)\n }\n}\n</script>\n\n<template>\n <nav class=\"mint-breadcrumb\" aria-label=\"Breadcrumb\">\n <ol class=\"mint-breadcrumb__list\">\n <li\n v-for=\"(segment, position) in segments\"\n :key=\"segment ? segment.index : 'ellipsis'\"\n class=\"mint-breadcrumb__item\"\n >\n <button\n v-if=\"!segment\"\n type=\"button\"\n class=\"mint-breadcrumb__link mint-breadcrumb__ellipsis\"\n :aria-label=\"`Show ${hiddenCount} hidden levels`\"\n :aria-expanded=\"false\"\n @click=\"expanded = true\"\n >\n …\n </button>\n <slot v-else name=\"item\" :item=\"segment.item\" :index=\"segment.index\" :is-last=\"segment.index === normalizedItems.length - 1\">\n <a\n v-if=\"segment.item.href && segment.index !== normalizedItems.length - 1\"\n :href=\"segment.item.href\"\n :class=\"['mint-breadcrumb__link', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n >\n {{ segment.item.label }}\n </a>\n <button\n v-else-if=\"segment.index !== normalizedItems.length - 1\"\n :class=\"['mint-breadcrumb__link', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n @click=\"handleClick(segment.item)\"\n >\n {{ segment.item.label }}\n </button>\n <span\n v-else\n :class=\"['mint-breadcrumb__current', { 'mint-breadcrumb__segment--id': isIdLabel(segment.item.label) }]\"\n aria-current=\"page\"\n >\n {{ segment.item.label }}\n </span>\n </slot>\n <span\n v-if=\"position !== segments.length - 1\"\n class=\"mint-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n <slot name=\"separator\">\n <svg v-if=\"separator === '/'\" class=\"mint-breadcrumb__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <path d=\"m9 18 6-6-6-6\" />\n </svg>\n <template v-else>{{ separator }}</template>\n </slot>\n </span>\n </li>\n </ol>\n </nav>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Generated form for a control model built with `defineControlModel()`.\n *\n * The control model holds the controls, sections, columns, the submit / cancel\n * bar (`actions`) and `enhancements` (dynamic options, validators, a submit\n * handler and field callbacks). Bind the values with `v-model`; the `submit`\n * event carries only the values of the visible fields.\n *\n * Exposes `form`, `validate`, `reset`, `updateSchema`, `goNext`, `goBack`,\n * `goToStep`, and `builder` for imperative control via template refs.\n *\n * Slots:\n * - `field:<name>` — override a single field's input component\n * - `section:<id>` — replace an entire section body\n * - `section:<id>:after` — inject content after a section\n * - `actions` — replace the default action bar when the model sets `actions`\n *\n * @example Recommended\n * ```vue\n * <FormBuilder v-model=\"values\" :spec=\"formModel\" />\n * ```\n */\nimport { computed, ref } from 'vue'\nimport type { FormSchema } from '../types/form-builder'\nimport {\n controlsToFormSchema,\n getControlDefaults,\n type ControlModelBinding,\n} from '../composables/useControlSchema'\nimport FormSchemaInternal from './internal/FormSchemaInternal.vue'\n\ninterface Props {\n /** Control model built with defineControlModel(). Optional: without it the form is empty. */\n spec?: ControlModelBinding\n modelValue?: Record<string, unknown>\n loading?: boolean\n disabled?: boolean\n size?: 'sm' | 'md' | 'lg'\n readonly?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n spec: undefined,\n modelValue: undefined,\n loading: false,\n disabled: false,\n size: undefined,\n readonly: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [data: Record<string, unknown>]\n submit: [data: Record<string, unknown>]\n cancel: []\n}>()\n\nconst schema = computed<FormSchema>(() =>\n props.spec ? controlsToFormSchema(props.spec.controls, props.spec.controlOptions) : { sections: [] },\n)\n\nconst defaults = computed<Record<string, unknown>>(() => ({\n ...(props.spec ? getControlDefaults(props.spec.controls) : {}),\n ...(props.spec?.controlOptions.initialValues ?? {}),\n}))\n\nconst inner = ref<InstanceType<typeof FormSchemaInternal> | null>(null)\n\ndefineExpose({\n get form() { return inner.value?.form },\n get builder() { return inner.value?.builder },\n validate: () => inner.value?.validate(),\n reset: (...args: Parameters<InstanceType<typeof FormSchemaInternal>['reset']>) => inner.value?.reset(...args),\n updateSchema: (...args: Parameters<InstanceType<typeof FormSchemaInternal>['updateSchema']>) => inner.value?.updateSchema(...args),\n goNext: () => inner.value?.goNext(),\n goBack: () => inner.value?.goBack(),\n goToStep: (step: number) => inner.value?.goToStep(step),\n})\n</script>\n\n<template>\n <FormSchemaInternal\n ref=\"inner\"\n :schema=\"schema\"\n :defaults=\"defaults\"\n :model-value=\"modelValue\"\n :enhancements=\"spec?.controlOptions.enhancements\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :size=\"size\"\n :readonly=\"readonly\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @submit=\"emit('submit', $event)\"\n @cancel=\"emit('cancel')\"\n >\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps ?? {}\" />\n </template>\n </FormSchemaInternal>\n</template>\n","<script setup lang=\"ts\">\n/**\n * Generated form for a control model built with `defineControlModel()`.\n *\n * The control model holds the controls, sections, columns, the submit / cancel\n * bar (`actions`) and `enhancements` (dynamic options, validators, a submit\n * handler and field callbacks). Bind the values with `v-model`; the `submit`\n * event carries only the values of the visible fields.\n *\n * Exposes `form`, `validate`, `reset`, `updateSchema`, `goNext`, `goBack`,\n * `goToStep`, and `builder` for imperative control via template refs.\n *\n * Slots:\n * - `field:<name>` — override a single field's input component\n * - `section:<id>` — replace an entire section body\n * - `section:<id>:after` — inject content after a section\n * - `actions` — replace the default action bar when the model sets `actions`\n *\n * @example Recommended\n * ```vue\n * <FormBuilder v-model=\"values\" :spec=\"formModel\" />\n * ```\n */\nimport { computed, ref } from 'vue'\nimport type { FormSchema } from '../types/form-builder'\nimport {\n controlsToFormSchema,\n getControlDefaults,\n type ControlModelBinding,\n} from '../composables/useControlSchema'\nimport FormSchemaInternal from './internal/FormSchemaInternal.vue'\n\ninterface Props {\n /** Control model built with defineControlModel(). Optional: without it the form is empty. */\n spec?: ControlModelBinding\n modelValue?: Record<string, unknown>\n loading?: boolean\n disabled?: boolean\n size?: 'sm' | 'md' | 'lg'\n readonly?: boolean\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n spec: undefined,\n modelValue: undefined,\n loading: false,\n disabled: false,\n size: undefined,\n readonly: false,\n})\n\nconst emit = defineEmits<{\n 'update:modelValue': [data: Record<string, unknown>]\n submit: [data: Record<string, unknown>]\n cancel: []\n}>()\n\nconst schema = computed<FormSchema>(() =>\n props.spec ? controlsToFormSchema(props.spec.controls, props.spec.controlOptions) : { sections: [] },\n)\n\nconst defaults = computed<Record<string, unknown>>(() => ({\n ...(props.spec ? getControlDefaults(props.spec.controls) : {}),\n ...(props.spec?.controlOptions.initialValues ?? {}),\n}))\n\nconst inner = ref<InstanceType<typeof FormSchemaInternal> | null>(null)\n\ndefineExpose({\n get form() { return inner.value?.form },\n get builder() { return inner.value?.builder },\n validate: () => inner.value?.validate(),\n reset: (...args: Parameters<InstanceType<typeof FormSchemaInternal>['reset']>) => inner.value?.reset(...args),\n updateSchema: (...args: Parameters<InstanceType<typeof FormSchemaInternal>['updateSchema']>) => inner.value?.updateSchema(...args),\n goNext: () => inner.value?.goNext(),\n goBack: () => inner.value?.goBack(),\n goToStep: (step: number) => inner.value?.goToStep(step),\n})\n</script>\n\n<template>\n <FormSchemaInternal\n ref=\"inner\"\n :schema=\"schema\"\n :defaults=\"defaults\"\n :model-value=\"modelValue\"\n :enhancements=\"spec?.controlOptions.enhancements\"\n :loading=\"loading\"\n :disabled=\"disabled\"\n :size=\"size\"\n :readonly=\"readonly\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @submit=\"emit('submit', $event)\"\n @cancel=\"emit('cancel')\"\n >\n <template v-for=\"(_, name) in $slots\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps ?? {}\" />\n </template>\n </FormSchemaInternal>\n</template>\n","// Components exported from the package root. Lab, shell, data and runtime\n// components are exported from their subpath entries (`src/lab.ts`, ...).\n\n// Base components\nexport { default as BaseButton } from './BaseButton.vue'\nexport { default as BaseInput } from './BaseInput.vue'\nexport { default as BaseSelect } from './BaseSelect.vue'\nexport { default as BaseCheckbox } from './BaseCheckbox.vue'\nexport { default as BaseRadioGroup } from './BaseRadioGroup.vue'\nexport { default as BaseSlider } from './BaseSlider.vue'\nexport { default as BaseTabs } from './BaseTabs.vue'\nexport { default as BaseModal } from './BaseModal.vue'\nexport { default as SegmentedControl } from './SegmentedControl.vue'\nexport { default as BasePill } from './BasePill.vue'\nexport { default as Calendar } from './Calendar.vue'\nexport { default as DataFrame } from './DataFrame.vue'\n\n// Form components\nexport { default as FormField } from './FormField.vue'\nexport { default as DatePicker } from './DatePicker.vue'\nexport { default as NumberInput } from './NumberInput.vue'\nexport { default as FileUploader } from './FileUploader.vue'\n\n// Feedback components\nexport { default as AlertBox } from './AlertBox.vue'\nexport { default as AppToastContainer } from './AppToastContainer.vue'\n\n// Action components\nexport { default as ActionMenu } from './ActionMenu.vue'\nexport { default as ThemeToggle } from './ThemeToggle.vue'\n\n// Layout components\nexport { default as CollapsibleCard } from './CollapsibleCard.vue'\nexport { default as PluginWorkspaceView } from './PluginWorkspaceView.vue'\nexport { default as AppContainer } from './AppContainer.vue'\nexport { default as PluginIcon } from './PluginIcon.vue'\n\n// Utility components\nexport { default as Skeleton } from './Skeleton.vue'\nexport { default as LoadingSpinner } from './LoadingSpinner.vue'\nexport { default as Divider } from './Divider.vue'\nexport { default as ProgressBar } from './ProgressBar.vue'\nexport { default as Avatar } from './Avatar.vue'\nexport { default as EmptyState } from './EmptyState.vue'\nexport { default as Breadcrumb } from './Breadcrumb.vue'\nexport { default as Tooltip } from './Tooltip.vue'\nexport { default as ConfirmDialog } from './ConfirmDialog.vue'\nexport { default as SettingsModal } from './SettingsModal.vue'\n\n// Scientific input components\n\n// Form builder components\nexport { default as FormBuilder } from './FormBuilder.vue'\n\n// Scheduling / booking components\nexport { default as SectionCard } from './SectionCard.vue'\n","import * as rootComponents from './components'\nimport * as dataComponents from './data'\nimport * as labComponents from './lab'\nimport * as runtimeComponents from './runtime'\nimport * as shellComponents from './shell'\n\nconst components = {\n ...rootComponents,\n ...labComponents,\n ...shellComponents,\n ...dataComponents,\n ...runtimeComponents,\n}\n\ntype ComponentRegistryApp = {\n component: (name: string, component: any) => unknown\n}\n\nexport interface MINTSdkPlugin {\n install(app: ComponentRegistryApp): void\n}\n\n/**\n * Vue plugin that registers all MINT SDK components globally, including the\n * components of the `lab`, `shell`, `data` and `runtime` subpaths.\n *\n * @example\n * ```typescript\n * import { createApp } from 'vue'\n * import { MINTSdk } from '@morscherlab/mint-sdk'\n * import '@morscherlab/mint-sdk/styles'\n *\n * const app = createApp(App)\n * app.use(MINTSdk)\n * ```\n */\nexport const MINTSdk: MINTSdkPlugin = {\n install(app) {\n for (const [name, component] of Object.entries(components)) {\n // Check if it's a valid Vue component (has setup, render, or template)\n if (\n component &&\n typeof component === 'object' &&\n ('setup' in component || 'render' in component || '__name' in component)\n ) {\n app.component(name, component)\n }\n }\n },\n}\n\nexport default MINTSdk\n"],"mappings":"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"}
package/dist/install.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as MINTSdk } from "./install-DbF7ddGl.js";
1
+ import { t as MINTSdk } from "./install-CM33AZhf.js";
2
2
  export { MINTSdk, MINTSdk as default };
@@ -1,22 +1,22 @@
1
1
  import { a as BaseButton_default, n as BaseModal_default, o as __exportAll } from "./useDropdownState-uFIz6Yv8.js";
2
2
  import { o as useApi } from "./experiment-DyO54FQB.js";
3
- import { D as compareTime, G as normalizeOptionInput, H as useListSelection, I as FormField_default, K as BaseInput_default, O as durationMinutes, P as time_exports, R as useRovingFocus, V as BaseSelect_default, z as BaseCheckbox_default } from "./records-CWRztE5M.js";
4
- import { C as FormulaInput_default, D as _plugin_vue_export_helper_default, L as definePlateEditor, N as NumberInput_default, P as DatePicker_default, S as useSequenceUtils, T as renderFormulaParts, a as StepWizard_default, b as MoleculeInput_default, i as useReorderAnnouncer, m as recordValue, r as useListReorder, v as ConcentrationInput_default, w as formula_exports, x as SequenceInput_default, y as useConcentrationUnits, z as defineWellPlate } from "./useListReorder-C--K06el.js";
5
- import { t as SegmentedControl_default } from "./SegmentedControl-Dz41vAFM.js";
6
- import { n as DataStateInternal_default, o as useTextSearch, r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CIhqsWbN.js";
7
- import { C as hexToHsl, E as sampleTypeMarker, S as deriveShade, T as WellPlate_default, _ as mintPlotlyTemplate, b as PlateEditor_default, g as ChartContainer_default, h as PlotlyChart_default, i as GeneratedResultRenderer_default, n as ScheduleCalendar_default, r as useScheduleDrag, t as useRackEditor, v as DoseCalculator_default, w as hslToHex, x as SAMPLE_GROUP_TOKENS, y as dose_exports } from "./useRackEditor-Cba_0OfI.js";
8
- import { n as ActionMenu_default } from "./useRequest-Bfsh7gIm.js";
9
- import { t as defineControlModel } from "./controlSchemaModel-C20f-1_T.js";
10
- import { d as unwrapExperimentDesignData, i as readFileAsText, t as useExperimentSamples } from "./useExperimentSamples-Cz2v3V_q.js";
3
+ import { D as compareTime, G as normalizeOptionInput, H as useListSelection, I as FormField_default, K as BaseInput_default, O as durationMinutes, P as time_exports, R as useRovingFocus, V as BaseSelect_default, z as BaseCheckbox_default } from "./records-BAymyHAn.js";
4
+ import { C as FormulaInput_default, D as _plugin_vue_export_helper_default, L as definePlateEditor, N as NumberInput_default, P as DatePicker_default, S as useSequenceUtils, T as renderFormulaParts, a as StepWizard_default, b as MoleculeInput_default, i as useReorderAnnouncer, m as recordValue, r as useListReorder, v as ConcentrationInput_default, w as formula_exports, x as SequenceInput_default, y as useConcentrationUnits, z as defineWellPlate } from "./useListReorder-W1bzK_bo.js";
5
+ import { t as SegmentedControl_default } from "./SegmentedControl-C-sckoJZ.js";
6
+ import { n as DataStateInternal_default, o as useTextSearch, r as LoadingSpinner_default, t as AlertBox_default } from "./AlertBox-CexONPhA.js";
7
+ import { C as hexToHsl, D as SectionCard_default, E as sampleTypeMarker, S as deriveShade, T as WellPlate_default, _ as mintPlotlyTemplate, b as PlateEditor_default, g as ChartContainer_default, h as PlotlyChart_default, i as GeneratedResultRenderer_default, n as ScheduleCalendar_default, r as useScheduleDrag, t as useRackEditor, v as DoseCalculator_default, w as hslToHex, x as SAMPLE_GROUP_TOKENS, y as dose_exports } from "./useRackEditor-BWOnob3i.js";
8
+ import { n as ActionMenu_default } from "./useRequest-D9-3BS-3.js";
9
+ import { t as defineControlModel } from "./controlSchemaModel-C_XqpkgE.js";
10
+ import { d as unwrapExperimentDesignData, i as readFileAsText, t as useExperimentSamples } from "./useExperimentSamples-DEDAKa2E.js";
11
11
  import { t as useExpansionSet } from "./useExpansionSet-CvoNMZJi.js";
12
- import { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, mergeModels, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, toDisplayString, toHandlers, toValue, unref, useId, useModel, vModelText, vShow, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
12
+ import { Fragment, Transition, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, h, mergeProps, nextTick, normalizeClass, normalizeStyle, onMounted, openBlock, ref, renderList, renderSlot, resolveComponent, resolveDynamicComponent, toDisplayString, toHandlers, toValue, unref, useId, vModelText, watch, withCtx, withDirectives, withKeys, withModifiers } from "vue";
13
13
  import { Layers, RotateCcw, WandSparkles } from "lucide-vue-next";
14
14
  //#region src/components/BaseTabs.vue?vue&type=script&setup=true&lang.ts
15
- var _hoisted_1$17 = {
15
+ var _hoisted_1$16 = {
16
16
  class: "mint-tabs mint-tabs--underline",
17
17
  role: "tablist"
18
18
  };
19
- var _hoisted_2$17 = [
19
+ var _hoisted_2$16 = [
20
20
  "id",
21
21
  "aria-selected",
22
22
  "aria-disabled",
@@ -24,8 +24,8 @@ var _hoisted_2$17 = [
24
24
  "tabindex",
25
25
  "onClick"
26
26
  ];
27
- var _hoisted_3$14 = { class: "mint-tab__content" };
28
- var _hoisted_4$13 = {
27
+ var _hoisted_3$13 = { class: "mint-tab__content" };
28
+ var _hoisted_4$12 = {
29
29
  key: 0,
30
30
  class: "mint-tab__icon mint-tab__icon--svg",
31
31
  viewBox: "0 0 24 24",
@@ -36,13 +36,13 @@ var _hoisted_4$13 = {
36
36
  "stroke-linejoin": "round",
37
37
  "aria-hidden": "true"
38
38
  };
39
- var _hoisted_5$12 = ["d"];
40
- var _hoisted_6$9 = ["d"];
41
- var _hoisted_7$9 = {
39
+ var _hoisted_5$11 = ["d"];
40
+ var _hoisted_6$8 = ["d"];
41
+ var _hoisted_7$8 = {
42
42
  key: 1,
43
43
  class: "mint-tab__icon"
44
44
  };
45
- var _hoisted_8$9 = {
45
+ var _hoisted_8$8 = {
46
46
  key: 2,
47
47
  class: "mint-tab__badge"
48
48
  };
@@ -87,7 +87,7 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
87
87
  getElement: (id) => tabButtonRefs.get(id)
88
88
  });
89
89
  return (_ctx, _cache) => {
90
- return openBlock(), createElementBlock("div", _hoisted_1$17, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedTabs.value, (tab) => {
90
+ return openBlock(), createElementBlock("div", _hoisted_1$16, [(openBlock(true), createElementBlock(Fragment, null, renderList(normalizedTabs.value, (tab) => {
91
91
  return openBlock(), createElementBlock("button", {
92
92
  id: `mint-tab-${tab.id}`,
93
93
  key: tab.id,
@@ -106,30 +106,30 @@ var BaseTabs_default = /* @__PURE__ */ defineComponent({
106
106
  ]),
107
107
  onClick: ($event) => selectTab(tab.id),
108
108
  onKeydown: _cache[0] || (_cache[0] = (...args) => unref(handleKeydown) && unref(handleKeydown)(...args))
109
- }, [createElementVNode("span", _hoisted_3$14, [
110
- isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_4$13, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
109
+ }, [createElementVNode("span", _hoisted_3$13, [
110
+ isSvgIcon(tab.icon) ? (openBlock(), createElementBlock("svg", _hoisted_4$12, [Array.isArray(tab.icon) ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(tab.icon, (d, index) => {
111
111
  return openBlock(), createElementBlock("path", {
112
112
  key: index,
113
113
  d
114
- }, null, 8, _hoisted_5$12);
114
+ }, null, 8, _hoisted_5$11);
115
115
  }), 128)) : (openBlock(), createElementBlock("path", {
116
116
  key: 1,
117
117
  d: tab.icon
118
- }, null, 8, _hoisted_6$9))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_7$9, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
118
+ }, null, 8, _hoisted_6$8))])) : tab.icon ? (openBlock(), createElementBlock("span", _hoisted_7$8, toDisplayString(tab.icon), 1)) : createCommentVNode("", true),
119
119
  createTextVNode(" " + toDisplayString(tab.label) + " ", 1),
120
- tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_8$9, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
121
- ])], 42, _hoisted_2$17);
120
+ tab.badge !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_8$8, toDisplayString(tab.badge), 1)) : createCommentVNode("", true)
121
+ ])], 42, _hoisted_2$16);
122
122
  }), 128))]);
123
123
  };
124
124
  }
125
125
  });
126
126
  //#endregion
127
127
  //#region src/components/BasePill.vue?vue&type=script&setup=true&lang.ts
128
- var _hoisted_1$16 = {
128
+ var _hoisted_1$15 = {
129
129
  key: 1,
130
130
  class: "mint-pill__icon"
131
131
  };
132
- var _hoisted_2$16 = { class: "mint-pill__label" };
132
+ var _hoisted_2$15 = { class: "mint-pill__label" };
133
133
  //#endregion
134
134
  //#region src/components/BasePill.vue
135
135
  var BasePill_default = /* @__PURE__ */ defineComponent({
@@ -193,8 +193,8 @@ var BasePill_default = /* @__PURE__ */ defineComponent({
193
193
  class: normalizeClass(["mint-pill__dot", { "mint-pill__dot--pulse": __props.pulse }]),
194
194
  "aria-hidden": "true"
195
195
  }, null, 2)) : createCommentVNode("", true),
196
- __props.icon ? (openBlock(), createElementBlock("span", _hoisted_1$16, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
197
- createElementVNode("span", _hoisted_2$16, [renderSlot(_ctx.$slots, "default")]),
196
+ __props.icon ? (openBlock(), createElementBlock("span", _hoisted_1$15, [renderSlot(_ctx.$slots, "icon")])) : createCommentVNode("", true),
197
+ createElementVNode("span", _hoisted_2$15, [renderSlot(_ctx.$slots, "default")]),
198
198
  __props.removable && !__props.disabled ? (openBlock(), createElementBlock("button", {
199
199
  key: 2,
200
200
  type: "button",
@@ -374,20 +374,20 @@ function updateWellsFromDoseResults(source) {
374
374
  }
375
375
  //#endregion
376
376
  //#region src/components/ProgressBar.vue?vue&type=script&setup=true&lang.ts
377
- var _hoisted_1$15 = { class: "mint-progress" };
378
- var _hoisted_2$15 = {
377
+ var _hoisted_1$14 = { class: "mint-progress" };
378
+ var _hoisted_2$14 = {
379
379
  key: 0,
380
380
  class: "mint-progress__header"
381
381
  };
382
- var _hoisted_3$13 = {
382
+ var _hoisted_3$12 = {
383
383
  key: 0,
384
384
  class: "mint-progress__label"
385
385
  };
386
- var _hoisted_4$12 = {
386
+ var _hoisted_4$11 = {
387
387
  key: 1,
388
388
  class: "mint-progress__value"
389
389
  };
390
- var _hoisted_5$11 = [
390
+ var _hoisted_5$10 = [
391
391
  "aria-valuenow",
392
392
  "aria-valuemin",
393
393
  "aria-valuemax",
@@ -421,7 +421,7 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
421
421
  return { width: `${clampedValue.value}%` };
422
422
  });
423
423
  return (_ctx, _cache) => {
424
- return openBlock(), createElementBlock("div", _hoisted_1$15, [__props.label || __props.showValue ? (openBlock(), createElementBlock("div", _hoisted_2$15, [__props.label ? (openBlock(), createElementBlock("span", _hoisted_3$13, toDisplayString(__props.label), 1)) : createCommentVNode("", true), __props.showValue && !__props.indeterminate ? (openBlock(), createElementBlock("span", _hoisted_4$12, toDisplayString(clampedValue.value) + "%", 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
424
+ return openBlock(), createElementBlock("div", _hoisted_1$14, [__props.label || __props.showValue ? (openBlock(), createElementBlock("div", _hoisted_2$14, [__props.label ? (openBlock(), createElementBlock("span", _hoisted_3$12, toDisplayString(__props.label), 1)) : createCommentVNode("", true), __props.showValue && !__props.indeterminate ? (openBlock(), createElementBlock("span", _hoisted_4$11, toDisplayString(clampedValue.value) + "%", 1)) : createCommentVNode("", true)])) : createCommentVNode("", true), createElementVNode("div", {
425
425
  class: normalizeClass(["mint-progress__track", `mint-progress__track--${__props.size}`]),
426
426
  role: "progressbar",
427
427
  "aria-valuenow": __props.indeterminate ? void 0 : clampedValue.value,
@@ -435,136 +435,7 @@ var ProgressBar_default = /* @__PURE__ */ defineComponent({
435
435
  __props.indeterminate ? "mint-progress__bar--indeterminate" : ""
436
436
  ]),
437
437
  style: normalizeStyle(barStyle.value)
438
- }, null, 6)], 10, _hoisted_5$11)]);
439
- };
440
- }
441
- });
442
- //#endregion
443
- //#region src/components/SectionCard.vue?vue&type=script&setup=true&lang.ts
444
- var _hoisted_1$14 = {
445
- class: "mint-section-card__icon",
446
- viewBox: "0 0 24 24",
447
- fill: "none",
448
- stroke: "currentColor",
449
- "stroke-width": "2",
450
- "stroke-linecap": "round",
451
- "stroke-linejoin": "round",
452
- "aria-hidden": "true"
453
- };
454
- var _hoisted_2$14 = ["d"];
455
- var _hoisted_3$12 = ["aria-expanded", "aria-controls"];
456
- var _hoisted_4$11 = {
457
- key: 0,
458
- class: "mint-section-card__count"
459
- };
460
- var _hoisted_5$10 = {
461
- key: 1,
462
- class: "mint-section-card__count"
463
- };
464
- var _hoisted_6$8 = {
465
- key: 0,
466
- class: "mint-section-card__toolbar"
467
- };
468
- var _hoisted_7$8 = ["id"];
469
- var _hoisted_8$8 = {
470
- key: 1,
471
- class: "mint-section-card__footer"
472
- };
473
- //#endregion
474
- //#region src/components/SectionCard.vue
475
- var SectionCard_default = /* @__PURE__ */ defineComponent({
476
- __name: "SectionCard",
477
- props: /*@__PURE__*/ mergeModels({
478
- title: {},
479
- count: { default: void 0 },
480
- icon: { default: void 0 },
481
- accent: { default: "primary" },
482
- uppercase: {
483
- type: Boolean,
484
- default: false
485
- },
486
- divider: { default: "strong" },
487
- fill: {
488
- type: Boolean,
489
- default: false
490
- },
491
- collapsible: {
492
- type: Boolean,
493
- default: false
494
- }
495
- }, {
496
- "collapsed": {
497
- type: Boolean,
498
- default: false
499
- },
500
- "collapsedModifiers": {}
501
- }),
502
- emits: ["update:collapsed"],
503
- setup(__props) {
504
- /** One-card page region from the MINT 1.1 card system: 12px radius, the
505
- * single --card-shadow token, a header strip (icon chip, title, mono count,
506
- * actions), and hairline-separated content — no card-in-card. */
507
- const props = __props;
508
- const collapsed = useModel(__props, "collapsed");
509
- const bodyId = useId();
510
- /** `collapsed` hides content only on a card that also shows the toggle to open it again. */
511
- const hidden = computed(() => props.collapsible && collapsed.value);
512
- const iconPaths = computed(() => props.icon === void 0 ? [] : Array.isArray(props.icon) ? props.icon : [props.icon]);
513
- const headerClasses = computed(() => [
514
- "mint-section-card__header",
515
- props.divider === "light" ? "mint-section-card__header--divider-light" : "",
516
- hidden.value ? "mint-section-card__header--collapsed" : ""
517
- ]);
518
- const titleClasses = computed(() => ["mint-section-card__title", props.uppercase ? "mint-section-card__title--uppercase" : ""]);
519
- const cardClasses = computed(() => [
520
- "mint-section-card",
521
- props.fill ? "mint-section-card--fill" : "",
522
- hidden.value ? "mint-section-card--collapsed" : ""
523
- ]);
524
- return (_ctx, _cache) => {
525
- return openBlock(), createElementBlock("section", { class: normalizeClass(cardClasses.value) }, [
526
- createElementVNode("div", { class: normalizeClass(headerClasses.value) }, [
527
- iconPaths.value.length ? (openBlock(), createElementBlock("span", {
528
- key: 0,
529
- class: normalizeClass(["mint-section-card__icon-chip", `mint-section-card__icon-chip--${__props.accent}`])
530
- }, [(openBlock(), createElementBlock("svg", _hoisted_1$14, [(openBlock(true), createElementBlock(Fragment, null, renderList(iconPaths.value, (d, i) => {
531
- return openBlock(), createElementBlock("path", {
532
- key: i,
533
- d
534
- }, null, 8, _hoisted_2$14);
535
- }), 128))]))], 2)) : createCommentVNode("", true),
536
- createElementVNode("h2", { class: normalizeClass(titleClasses.value) }, [__props.collapsible ? (openBlock(), createElementBlock("button", {
537
- key: 0,
538
- type: "button",
539
- class: "mint-section-card__toggle",
540
- "aria-expanded": !collapsed.value,
541
- "aria-controls": unref(bodyId),
542
- onClick: _cache[0] || (_cache[0] = ($event) => collapsed.value = !collapsed.value)
543
- }, [
544
- createTextVNode(toDisplayString(__props.title) + " ", 1),
545
- __props.count !== void 0 ? (openBlock(), createElementBlock("span", _hoisted_4$11, toDisplayString(__props.count), 1)) : createCommentVNode("", true),
546
- _cache[1] || (_cache[1] = createElementVNode("svg", {
547
- class: "mint-section-card__chevron",
548
- viewBox: "0 0 24 24",
549
- fill: "none",
550
- stroke: "currentColor",
551
- "stroke-width": "2",
552
- "stroke-linecap": "round",
553
- "stroke-linejoin": "round",
554
- "aria-hidden": "true"
555
- }, [createElementVNode("path", { d: "m6 9 6 6 6-6" })], -1))
556
- ], 8, _hoisted_3$12)) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [createTextVNode(toDisplayString(__props.title), 1)], 64))], 2),
557
- __props.count !== void 0 && !__props.collapsible ? (openBlock(), createElementBlock("span", _hoisted_5$10, toDisplayString(__props.count), 1)) : createCommentVNode("", true),
558
- _cache[2] || (_cache[2] = createElementVNode("div", { class: "mint-section-card__spacer" }, null, -1)),
559
- renderSlot(_ctx.$slots, "actions")
560
- ], 2),
561
- _ctx.$slots.toolbar ? withDirectives((openBlock(), createElementBlock("div", _hoisted_6$8, [renderSlot(_ctx.$slots, "toolbar")], 512)), [[vShow, !hidden.value]]) : createCommentVNode("", true),
562
- withDirectives(createElementVNode("div", {
563
- id: unref(bodyId),
564
- class: "mint-section-card__body"
565
- }, [renderSlot(_ctx.$slots, "default")], 8, _hoisted_7$8), [[vShow, !hidden.value]]),
566
- _ctx.$slots.footer ? withDirectives((openBlock(), createElementBlock("div", _hoisted_8$8, [renderSlot(_ctx.$slots, "footer")], 512)), [[vShow, !hidden.value]]) : createCommentVNode("", true)
567
- ], 2);
438
+ }, null, 6)], 10, _hoisted_5$10)]);
568
439
  };
569
440
  }
570
441
  });
@@ -7547,6 +7418,6 @@ var lab_exports = /* @__PURE__ */ __exportAll({
7547
7418
  useSequenceUtils: () => useSequenceUtils
7548
7419
  });
7549
7420
  //#endregion
7550
- export { defineWellPlateControlProps as C, BaseTabs_default as D, BasePill_default as E, defineDoseDesignControlModel as S, defineWellPlateDoseControlProps as T, SampleSelector_default as _, useReagentSeries as a, ProgressBar_default as b, InstrumentStatusPanels_default as c, ChemicalFormula_default as d, AdductText_default as f, SampleHierarchyTree_default as g, useProtocolTemplates as h, generateDilutionSeries as i, InstrumentStateBadge_default as l, ProtocolStepEditor_default as m, DEFAULT_PRESETS as n, ResourceCard_default as o, ScientificNumber_default as p, DEFAULT_UNITS as r, TimeRangeInput_default as s, lab_exports as t, SequenceProgressBar_default as u, useSampleGroups as v, defineWellPlateDoseComponentBindings as w, defineDoseCalculatorControlProps as x, SectionCard_default as y };
7421
+ export { defineWellPlateDoseComponentBindings as C, BaseTabs_default as E, defineWellPlateControlProps as S, BasePill_default as T, SampleSelector_default as _, useReagentSeries as a, defineDoseCalculatorControlProps as b, InstrumentStatusPanels_default as c, ChemicalFormula_default as d, AdductText_default as f, SampleHierarchyTree_default as g, useProtocolTemplates as h, generateDilutionSeries as i, InstrumentStateBadge_default as l, ProtocolStepEditor_default as m, DEFAULT_PRESETS as n, ResourceCard_default as o, ScientificNumber_default as p, DEFAULT_UNITS as r, TimeRangeInput_default as s, lab_exports as t, SequenceProgressBar_default as u, useSampleGroups as v, defineWellPlateDoseControlProps as w, defineDoseDesignControlModel as x, ProgressBar_default as y };
7551
7422
 
7552
- //# sourceMappingURL=lab-B5sKmlWF.js.map
7423
+ //# sourceMappingURL=lab-CPJ7n7e5.js.map