@morscherlab/mint-sdk 1.3.11 → 1.4.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +152 -177
- package/dist/AlertBox-B2Bgr3ei.js +276 -0
- package/dist/AlertBox-B2Bgr3ei.js.map +1 -0
- package/dist/AppSidebar-mvm--GxN.js +3565 -0
- package/dist/AppSidebar-mvm--GxN.js.map +1 -0
- package/dist/ConfirmDialog-nbJj51is.js +102 -0
- package/dist/ConfirmDialog-nbJj51is.js.map +1 -0
- package/dist/ExperimentPopover-5T1fAq2L.js +337 -0
- package/dist/ExperimentPopover-5T1fAq2L.js.map +1 -0
- package/dist/ExperimentSelectorModal-65peG4Up.js +544 -0
- package/dist/ExperimentSelectorModal-65peG4Up.js.map +1 -0
- package/dist/SegmentedControl-BtnnjWzs.js +129 -0
- package/dist/SegmentedControl-BtnnjWzs.js.map +1 -0
- package/dist/SettingsModal-DO3IZ7qz.js +666 -0
- package/dist/SettingsModal-DO3IZ7qz.js.map +1 -0
- package/dist/analysisArtifactTypes-Cy3D0Ipg.js.map +1 -1
- package/dist/auth-SliLnFre.js +65 -0
- package/dist/auth-SliLnFre.js.map +1 -0
- package/dist/components/ActionMenu.vue.d.ts +1 -1
- package/dist/components/AdductText.vue.d.ts +1 -1
- package/dist/components/AlertBox.vue.d.ts +3 -3
- package/dist/components/AppContainer.vue.d.ts +1 -1
- package/dist/components/AppSidebar.vue.d.ts +15 -95
- package/dist/components/AppTopBar.vue.d.ts +16 -70
- package/dist/components/ArtifactSaveDialog.vue.d.ts +13 -5
- package/dist/components/ArtifactSelectorModal.vue.d.ts +4 -4
- package/dist/components/AuditTrail.vue.d.ts +2 -2
- package/dist/components/BaseButton.vue.d.ts +11 -4
- package/dist/components/BaseCheckbox.vue.d.ts +9 -3
- package/dist/components/BaseInput.vue.d.ts +13 -9
- package/dist/components/BaseModal.vue.d.ts +4 -4
- package/dist/components/BasePill.vue.d.ts +15 -8
- package/dist/components/BaseRadioGroup.vue.d.ts +2 -2
- package/dist/components/BaseSelect.vue.d.ts +51 -19
- package/dist/components/BaseTabs.vue.d.ts +6 -5
- package/dist/components/BatchProgressList.vue.d.ts +2 -2
- package/dist/components/ChartContainer.vue.d.ts +4 -2
- package/dist/components/ChemicalFormula.vue.d.ts +2 -2
- package/dist/components/CollapsibleCard.vue.d.ts +3 -3
- package/dist/components/ComponentBindingRenderer.vue.d.ts +2 -3
- package/dist/components/ConcentrationInput.vue.d.ts +2 -2
- package/dist/components/ConfirmDialog.vue.d.ts +8 -7
- package/dist/components/DataFrame.vue.d.ts +32 -74
- package/dist/components/DatePicker.vue.d.ts +24 -2
- package/dist/components/DoseCalculator.vue.d.ts +1 -1
- package/dist/components/DoseCalculatorVolumeField.vue.d.ts +1 -1
- package/dist/components/EmptyState.vue.d.ts +3 -2
- package/dist/components/ExperimentPopover.vue.d.ts +18 -0
- package/dist/components/ExperimentSelectorModal.vue.d.ts +3 -7
- package/dist/components/FilePicker.vue.d.ts +1 -1
- package/dist/components/FileUploader.vue.d.ts +2 -2
- package/dist/components/FormBuilder.vue.d.ts +17 -74
- package/dist/components/FormulaInput.vue.d.ts +2 -2
- package/dist/components/GeneratedPluginView.vue.d.ts +1 -1
- package/dist/components/GeneratedResultRenderer.vue.d.ts +5 -1
- package/dist/components/{StatusIndicator.vue.d.ts → InstrumentStatusPanels.vue.d.ts} +8 -9
- package/dist/components/JobsStatusTray.vue.d.ts +2 -9
- package/dist/components/LoadingSpinner.vue.d.ts +3 -3
- package/dist/components/MoleculeInput.vue.d.ts +2 -2
- package/dist/components/NumberInput.vue.d.ts +19 -5
- package/dist/components/PlateEditor.vue.d.ts +11 -61
- package/dist/components/PlotlyChart.vue.d.ts +2 -2
- package/dist/components/PluginIcon.vue.d.ts +5 -1
- package/dist/components/PluginWorkspaceView.controls.d.ts +2 -9
- package/dist/components/PluginWorkspaceView.navigation.d.ts +1 -7
- package/dist/components/PluginWorkspaceView.props.d.ts +18 -137
- package/dist/components/PluginWorkspaceView.shell.d.ts +2 -10
- package/dist/components/PluginWorkspaceView.vue.d.ts +14 -84
- package/dist/components/PresenceAvatars.vue.d.ts +31 -0
- package/dist/components/ProgressBar.vue.d.ts +3 -2
- package/dist/components/ProtocolStep.presentation.d.ts +0 -1
- package/dist/components/SampleHierarchyTree.vue.d.ts +3 -3
- package/dist/components/SampleSelector.vue.d.ts +8 -8
- package/dist/components/ScheduleCalendar.vue.d.ts +1 -1
- package/dist/components/ScientificNumber.vue.d.ts +1 -1
- package/dist/components/SecretInput.vue.d.ts +2 -2
- package/dist/components/SegmentedControl.vue.d.ts +2 -2
- package/dist/components/SequenceInput.vue.d.ts +2 -2
- package/dist/components/SequenceProgressBar.vue.d.ts +3 -0
- package/dist/components/SettingsModal.vue.d.ts +12 -20
- package/dist/components/SmartGroup.types.d.ts +0 -1
- package/dist/components/SmartGroupFieldRecipe.vue.d.ts +1 -1
- package/dist/components/StaleFormBanner.vue.d.ts +20 -0
- package/dist/components/StepWizard.vue.d.ts +3 -0
- package/dist/components/TagsInput.vue.d.ts +4 -3
- package/dist/components/TimeRangeInput.vue.d.ts +2 -2
- package/dist/components/VersionConflictDialog.vue.d.ts +24 -0
- package/dist/components/WellPlate.geometry.d.ts +0 -6
- package/dist/components/WellPlate.rendering.d.ts +0 -2
- package/dist/components/WellPlate.vue.d.ts +7 -52
- package/dist/components/index.d.ts +0 -90
- package/dist/components/{AutoGroupModal.adapter.d.ts → internal/AutoGroupModalInternal.adapter.d.ts} +6 -6
- package/dist/components/{AutoGroupModal.vue.d.ts → internal/AutoGroupModalInternal.vue.d.ts} +6 -6
- package/dist/components/{BaseToggle.vue.d.ts → internal/CheckboxSwitchInternal.vue.d.ts} +2 -2
- package/dist/components/{MultiSelect.vue.d.ts → internal/DatePickerDateInternal.vue.d.ts} +11 -9
- package/dist/components/{DateTimePicker.vue.d.ts → internal/DatePickerDateTimeInternal.vue.d.ts} +2 -2
- package/dist/components/{TimePicker.vue.d.ts → internal/DatePickerTimeInternal.vue.d.ts} +4 -4
- package/dist/components/internal/FilePickerListInternal.vue.d.ts +2 -2
- package/dist/components/internal/FormSchemaInternal.vue.d.ts +95 -0
- package/dist/components/{UnitInput.vue.d.ts → internal/NumberUnitInputInternal.vue.d.ts} +6 -14
- package/dist/components/internal/PlateEditorBindingInternal.vue.d.ts +3 -2
- package/dist/components/internal/ResourcePickerListInternal.vue.d.ts +5 -10
- package/dist/components/internal/SelectMultipleInternal.vue.d.ts +27 -0
- package/dist/components/{SearchableSelect.vue.d.ts → internal/SelectSearchableInternal.vue.d.ts} +5 -2
- package/dist/components/internal/WorkspaceShellInternal.vue.d.ts +1 -15
- package/dist/components/internal/WorkspaceSidebarInternal.vue.d.ts +4 -4
- package/dist/{composables → components/internal}/autoGroup/classKey.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/classify.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/columns.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/compose.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/cooccurrence.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/csv-shim.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/fingerprint.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/template.d.ts +1 -1
- package/dist/{composables → components/internal}/autoGroup/tokenLength.d.ts +1 -1
- package/dist/components/internal/generatedJobsApi.d.ts +1 -1
- package/dist/{composables → components/internal}/useAutoGroup.d.ts +9 -18
- package/dist/composables/componentSpecs.d.ts +41 -0
- package/dist/composables/controlComponentBindings.d.ts +6 -0
- package/dist/composables/controlSchemaAdapters.d.ts +28 -2
- package/dist/composables/controlSchemaDoseDesign.d.ts +1 -1
- package/dist/composables/controlSchemaModel.d.ts +1 -1
- package/dist/composables/controlSchemaTypes.d.ts +35 -23
- package/dist/composables/{usePluginClient.d.ts → createClient.d.ts} +22 -49
- package/dist/composables/{useEventStream.d.ts → eventStream.d.ts} +2 -2
- package/dist/composables/experiment-utils.d.ts +1 -6
- package/dist/composables/index.d.ts +7 -59
- package/dist/composables/platformContextHelpers.d.ts +0 -11
- package/dist/composables/pluginEndpointBuilder.d.ts +2 -2
- package/dist/composables/pluginIdentity.d.ts +24 -0
- package/dist/composables/pluginWorkspaceModel.d.ts +16 -99
- package/dist/composables/useApi.d.ts +1 -3
- package/dist/composables/useAppExperiment.d.ts +9 -1
- package/dist/composables/{useAnalysisArtifacts.d.ts → useArtifacts.d.ts} +6 -6
- package/dist/composables/useCalendarGrid.d.ts +1 -1
- package/dist/composables/useExperiment.d.ts +30 -0
- package/dist/composables/useExperimentSelector.d.ts +6 -2
- package/dist/composables/useFilePicker.d.ts +2 -2
- package/dist/composables/useJobCenter.d.ts +63 -0
- package/dist/composables/{useGeneratedAnalysis.d.ts → useJobsEndpoint.d.ts} +22 -23
- package/dist/composables/useMenuKeyboard.d.ts +1 -1
- package/dist/composables/usePlatform.d.ts +64 -0
- package/dist/composables/usePluginWorkspace.d.ts +6 -11
- package/dist/composables/usePresence.d.ts +41 -0
- package/dist/composables/useRackEditor.d.ts +2 -2
- package/dist/composables/useRealtime.d.ts +71 -0
- package/dist/composables/{useRequestSyncState.d.ts → useRequest.d.ts} +12 -17
- package/dist/composables/useToast.d.ts +7 -5
- package/dist/composables/useVersionedSave.d.ts +76 -0
- package/dist/controlSchemaModel-B8CTXagP.js +95 -0
- package/dist/controlSchemaModel-B8CTXagP.js.map +1 -0
- package/dist/data-CgILxDLW.js +3865 -0
- package/dist/data-CgILxDLW.js.map +1 -0
- package/dist/data.d.ts +32 -0
- package/dist/data.js +10 -0
- package/dist/deprecatedRootExports.d.ts +191 -0
- package/dist/experiment-43OJtH7R.js +673 -0
- package/dist/experiment-43OJtH7R.js.map +1 -0
- package/dist/experimentStatus-Cqp6qNrR.js +60 -0
- package/dist/experimentStatus-Cqp6qNrR.js.map +1 -0
- package/dist/host.d.ts +10 -0
- package/dist/host.js +26 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +1 -12
- package/dist/index.js +65 -277
- package/dist/index.js.map +1 -1
- package/dist/install-CsPFJSx3.js +669 -0
- package/dist/install-CsPFJSx3.js.map +1 -0
- package/dist/install.d.ts +2 -1
- package/dist/install.js +1 -21
- package/dist/instrument.d.ts +0 -6
- package/dist/lab-MHzp-_J8.js +7494 -0
- package/dist/lab-MHzp-_J8.js.map +1 -0
- package/dist/lab.d.ts +42 -0
- package/dist/lab.js +5 -0
- package/dist/permissions.d.ts +0 -4
- package/dist/permissions.js +1 -20
- package/dist/permissions.js.map +1 -1
- package/dist/records-B6gpM_3e.js +3268 -0
- package/dist/records-B6gpM_3e.js.map +1 -0
- package/dist/runtime-8bs8EogX.js +1491 -0
- package/dist/runtime-8bs8EogX.js.map +1 -0
- package/dist/runtime.d.ts +25 -0
- package/dist/runtime.js +8 -0
- package/dist/shell-CywENwBT.js +197 -0
- package/dist/shell-CywENwBT.js.map +1 -0
- package/dist/shell.d.ts +16 -0
- package/dist/shell.js +8 -0
- package/dist/stores/auth.d.ts +13 -35
- package/dist/stores/experiment.d.ts +4 -0
- package/dist/stores/index.js +2 -2
- package/dist/styles.css +12161 -15036
- package/dist/types/analysisArtifactTypes.d.ts +1 -1
- package/dist/types/auth.d.ts +0 -8
- package/dist/types/componentLabTypes.d.ts +98 -34
- package/dist/types/componentWorkflowTypes.d.ts +2 -27
- package/dist/types/components.d.ts +145 -74
- package/dist/types/form-builder.d.ts +4 -0
- package/dist/types/generated/platformContext.d.ts +53 -0
- package/dist/types/generated-ui.d.ts +6 -2
- package/dist/types/index.d.ts +4 -5
- package/dist/types/instrument.d.ts +41 -0
- package/dist/types/platform.d.ts +20 -58
- package/dist/useDebouncedWatch-BPwyl6eS.js +73 -0
- package/dist/useDebouncedWatch-BPwyl6eS.js.map +1 -0
- package/dist/{experiment-utils-DTANyVKV.js → useDropdownState-8yWMu-7_.js} +127 -144
- package/dist/useDropdownState-8yWMu-7_.js.map +1 -0
- package/dist/useExpansionSet-CvoNMZJi.js +68 -0
- package/dist/useExpansionSet-CvoNMZJi.js.map +1 -0
- package/dist/useExperimentSamples-DHnxKFAF.js +366 -0
- package/dist/useExperimentSamples-DHnxKFAF.js.map +1 -0
- package/dist/useListReorder-BitdUhxn.js +5294 -0
- package/dist/useListReorder-BitdUhxn.js.map +1 -0
- package/dist/useRackEditor-DiwCt77M.js +5930 -0
- package/dist/useRackEditor-DiwCt77M.js.map +1 -0
- package/dist/useRealtime-C3iy9QkU.js +699 -0
- package/dist/useRealtime-C3iy9QkU.js.map +1 -0
- package/dist/useRequest-D506eHi8.js +244 -0
- package/dist/useRequest-D506eHi8.js.map +1 -0
- package/dist/utils/color.d.ts +0 -5
- package/dist/{composables/useDoseCalculator.d.ts → utils/dose.d.ts} +10 -13
- package/dist/utils/experimentStatus.d.ts +9 -0
- package/dist/{composables/useChemicalFormula.d.ts → utils/formula.d.ts} +3 -6
- package/dist/utils/integrationHost.d.ts +18 -0
- package/dist/utils/plotlyTemplate.d.ts +2 -0
- package/dist/utils/pluginSecrets.d.ts +12 -12
- package/dist/utils/presenceAvatars.d.ts +30 -0
- package/dist/utils/records.d.ts +0 -2
- package/dist/{composables/useTimeUtils.d.ts → utils/time.d.ts} +7 -18
- package/package.json +20 -17
- package/src/__tests__/components/ActionMenu.test.ts +0 -13
- package/src/__tests__/components/AlertBox.test.ts +1 -1
- package/src/__tests__/components/AppSidebar.test.ts +119 -167
- package/src/__tests__/components/AppToastContainer.test.ts +2 -2
- package/src/__tests__/components/AppTopBar.test.ts +230 -176
- package/src/__tests__/components/AppTopBarPillNav.test.ts +35 -0
- package/src/__tests__/components/ArtifactSaveDialog.test.ts +83 -3
- package/src/__tests__/components/ArtifactSelectorModal.test.ts +6 -4
- package/src/__tests__/components/AuditTrail.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.adapter.test.ts +1 -1
- package/src/__tests__/components/AutoGroupModal.anatomy.test.ts +2 -2
- package/src/__tests__/components/AutoGroupModal.wiring.test.ts +2 -2
- package/src/__tests__/components/BaseButton.test.ts +51 -0
- package/src/__tests__/components/{BaseToggle.test.ts → BaseCheckbox.switch.test.ts} +8 -6
- package/src/__tests__/components/BaseInput.test.ts +13 -34
- package/src/__tests__/components/BaseModal.test.ts +6 -6
- package/src/__tests__/components/BasePill.test.ts +33 -39
- package/src/__tests__/components/BaseSelect.multiple.test.ts +118 -0
- package/src/__tests__/components/{SearchableSelect.test.ts → BaseSelect.searchable.test.ts} +19 -9
- package/src/__tests__/components/BaseSelect.test.ts +11 -0
- package/src/__tests__/components/BaseTabs.test.ts +13 -13
- package/src/__tests__/components/BatchProgressList.test.ts +16 -0
- package/src/__tests__/components/CalendarGridPanel.test.ts +2 -2
- package/src/__tests__/components/ChartContainer.test.ts +11 -0
- package/src/__tests__/components/ChemicalFormula.test.ts +6 -3
- package/src/__tests__/components/CollapsibleCard.test.ts +1 -1
- package/src/__tests__/components/ComponentBindingRenderer.test.ts +25 -73
- package/src/__tests__/components/ConcentrationInput.test.ts +3 -3
- package/src/__tests__/components/ConfirmDialog.test.ts +23 -0
- package/src/__tests__/components/DataFrame.test.ts +140 -142
- package/src/__tests__/components/DataStates.test.ts +6 -22
- package/src/__tests__/components/{DateTimePicker.test.ts → DatePicker.datetime.test.ts} +15 -7
- package/src/__tests__/components/DatePicker.test.ts +21 -0
- package/src/__tests__/components/{TimePicker.test.ts → DatePicker.time.test.ts} +20 -19
- package/src/__tests__/components/DoseCalculator.test.ts +12 -7
- package/src/__tests__/components/DoseCalculatorVolumeField.test.ts +6 -6
- package/src/__tests__/components/EmptyState.test.ts +1 -1
- package/src/__tests__/components/ExperimentPopover.test.ts +125 -16
- package/src/__tests__/components/ExperimentSelectorModal.test.ts +134 -28
- package/src/__tests__/components/FormBuilder.test.ts +49 -167
- package/src/__tests__/components/FormSchemaInternal.test.ts +91 -0
- package/src/__tests__/components/GeneratedPathInput.test.ts +18 -13
- package/src/__tests__/components/GeneratedPluginView.test.ts +60 -25
- package/src/__tests__/components/GeneratedResultRenderer.test.ts +6 -4
- package/src/__tests__/components/InstrumentStateBadge.test.ts +4 -4
- package/src/__tests__/components/InstrumentStatusPanels.test.ts +79 -0
- package/src/__tests__/components/JobsStatusTray.test.ts +4 -4
- package/src/__tests__/components/NumberInput.test.ts +28 -0
- package/src/__tests__/components/{UnitInput.test.ts → NumberInput.units.test.ts} +6 -6
- package/src/__tests__/components/PlateEditor.test.ts +108 -108
- package/src/__tests__/components/PlateEditorBindingInternal.test.ts +13 -13
- package/src/__tests__/components/PlotlyChart.test.ts +1 -1
- package/src/__tests__/components/PluginIcon.test.ts +9 -4
- package/src/__tests__/components/PluginWorkspaceView.controls.test.ts +16 -29
- package/src/__tests__/components/PluginWorkspaceView.internal.test.ts +28 -34
- package/src/__tests__/components/PluginWorkspaceView.navigation.test.ts +4 -19
- package/src/__tests__/components/PluginWorkspaceView.shell.test.ts +1 -6
- package/src/__tests__/components/PluginWorkspaceView.test.ts +183 -155
- package/src/__tests__/components/PresenceAvatars.test.ts +90 -0
- package/src/__tests__/components/ProtocolStep.presentation.test.ts +1 -3
- package/src/__tests__/components/ProtocolStepEditor.test.ts +10 -11
- package/src/__tests__/components/ProtocolStepParameterField.test.ts +8 -7
- package/src/__tests__/components/ResourcePickerListInternal.test.ts +2 -22
- package/src/__tests__/components/RetiredStyles.test.ts +0 -18
- package/src/__tests__/components/SampleSelector.test.ts +30 -25
- package/src/__tests__/components/SecretInput.test.ts +14 -19
- package/src/__tests__/components/SequenceProgressBar.test.ts +12 -0
- package/src/__tests__/components/SettingsModal.test.ts +76 -84
- package/src/__tests__/components/StaleFormBanner.test.ts +48 -0
- package/src/__tests__/components/StepWizard.test.ts +11 -0
- package/src/__tests__/components/ThemeToggle.test.ts +1 -1
- package/src/__tests__/components/WellPlate.decoration.test.ts +20 -11
- package/src/__tests__/components/WellPlate.interaction.test.ts +6 -7
- package/src/__tests__/components/WellPlate.keyboard.test.ts +2 -2
- package/src/__tests__/components/deprecationTags.test.ts +90 -0
- package/src/__tests__/composables/analysisArtifactTarget.test.ts +1 -12
- package/src/__tests__/composables/autoGroup/classKey.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/classify.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/columns.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/compose.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/cooccurrence.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fieldEdits.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/fingerprint.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/golden.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupByOrder.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/groupTree.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/integration.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/template.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenLength.test.ts +1 -1
- package/src/__tests__/composables/autoGroup/tokenize.test.ts +1 -1
- package/src/__tests__/composables/{usePluginClient.test.ts → createClient.test.ts} +84 -222
- package/src/__tests__/composables/{useEventStream.test.ts → eventStream.test.ts} +6 -6
- package/src/__tests__/composables/experiment-utils.test.ts +13 -14
- package/src/__tests__/composables/useApi.test.ts +32 -21
- package/src/__tests__/composables/useAppExperiment.test.ts +46 -3
- package/src/__tests__/composables/{useAnalysisArtifacts.test.ts → useArtifacts.test.ts} +19 -27
- package/src/__tests__/composables/useAutoGroup.test.ts +3 -13
- package/src/__tests__/composables/useCalendarGrid.test.ts +4 -2
- package/src/__tests__/composables/useControlSchema.test.ts +41 -99
- package/src/__tests__/composables/useExperiment.test.ts +63 -0
- package/src/__tests__/composables/useExperimentSelector.test.ts +111 -0
- package/src/__tests__/composables/useFileBrowser.test.ts +4 -6
- package/src/__tests__/composables/{useJobsStatusTray.test.ts → useJobCenter.test.ts} +31 -31
- package/src/__tests__/composables/{useGeneratedAnalysis.test.ts → useJobsEndpoint.test.ts} +213 -139
- package/src/__tests__/composables/usePlatform.test.ts +102 -0
- package/src/__tests__/composables/usePresence.test.ts +164 -0
- package/src/__tests__/composables/useRackEditor.test.ts +2 -2
- package/src/__tests__/composables/useRealtime.test.ts +196 -0
- package/src/__tests__/composables/{useRequestSyncState.test.ts → useRequest.test.ts} +32 -47
- package/src/__tests__/composables/useVersionedSave.test.ts +194 -0
- package/src/__tests__/docs/extractDocsComponents.test.ts +36 -0
- package/src/__tests__/docs/extractDocsParsing.test.ts +2 -2
- package/src/__tests__/docs/extractDocsTheme.test.ts +1 -46
- package/src/__tests__/docs/frontendDocsCatalog.test.ts +164 -84
- package/src/__tests__/styles/baseControlsRules.test.ts +7 -3
- package/src/__tests__/styles/controlRefreshRules.test.ts +0 -6
- package/src/__tests__/styles/cssTokens.test.ts +2 -2
- package/src/__tests__/styles/darkModeRules.test.ts +0 -6
- package/src/__tests__/styles/menusShellRefresh.test.ts +14 -10
- package/src/__tests__/{composables/useChemicalFormula.test.ts → utils/formula.test.ts} +3 -5
- package/src/__tests__/utils/permissions.test.ts +1 -36
- package/src/__tests__/utils/plotlyTemplate.test.ts +20 -5
- package/src/__tests__/{composables/useTimeUtils.test.ts → utils/time.test.ts} +18 -8
- package/src/components/ActionMenu.vue +7 -13
- package/src/components/AdductText.story.vue +7 -0
- package/src/components/AdductText.vue +1 -1
- package/src/components/AlertBox.story.vue +27 -27
- package/src/components/AlertBox.vue +22 -20
- package/src/components/AppLayout.story.vue +33 -44
- package/src/components/AppLayout.vue +1 -1
- package/src/components/AppSidebar.story.vue +40 -101
- package/src/components/AppSidebar.vue +66 -147
- package/src/components/AppToastContainer.story.vue +1 -1
- package/src/components/AppTopBar.story.vue +97 -111
- package/src/components/AppTopBar.vue +170 -290
- package/src/components/ArtifactSaveDialog.story.vue +32 -9
- package/src/components/ArtifactSaveDialog.vue +125 -38
- package/src/components/ArtifactSelectorModal.story.vue +4 -4
- package/src/components/ArtifactSelectorModal.vue +10 -10
- package/src/components/AuditTrail.story.vue +6 -5
- package/src/components/AuditTrail.vue +5 -24
- package/src/components/Avatar.story.vue +2 -3
- package/src/components/Avatar.vue +11 -16
- package/src/components/BaseButton.story.vue +25 -0
- package/src/components/BaseButton.vue +39 -10
- package/src/components/BaseCheckbox.story.vue +2 -2
- package/src/components/{BaseToggle.story.vue → BaseCheckbox.switch.story.vue} +22 -19
- package/src/components/BaseCheckbox.vue +39 -7
- package/src/components/BaseInput.story.vue +3 -15
- package/src/components/{BaseTextarea.story.vue → BaseInput.textarea.story.vue} +14 -10
- package/src/components/BaseInput.vue +53 -26
- package/src/components/BaseModal.story.vue +11 -11
- package/src/components/BaseModal.vue +8 -8
- package/src/components/BasePill.story.vue +48 -28
- package/src/components/BasePill.vue +22 -11
- package/src/components/BaseRadioGroup.story.vue +4 -4
- package/src/components/BaseRadioGroup.vue +3 -3
- package/src/components/{MultiSelect.story.vue → BaseSelect.multiple.story.vue} +33 -16
- package/src/components/{SearchableSelect.story.vue → BaseSelect.searchable.story.vue} +4 -4
- package/src/components/BaseSelect.story.vue +2 -2
- package/src/components/BaseSelect.vue +118 -22
- package/src/components/BaseTabs.story.vue +20 -20
- package/src/components/BaseTabs.vue +17 -9
- package/src/components/BatchProgressList.vue +38 -28
- package/src/components/ChartContainer.story.vue +9 -13
- package/src/components/ChartContainer.vue +10 -8
- package/src/components/ChemicalFormula.vue +1 -2
- package/src/components/CollapsibleCard.vue +5 -4
- package/src/components/ComponentBindingRenderer.story.vue +0 -29
- package/src/components/ComponentBindingRenderer.vue +15 -39
- package/src/components/ConcentrationInput.story.vue +2 -2
- package/src/components/ConcentrationInput.vue +9 -9
- package/src/components/ConfirmDialog.story.vue +22 -22
- package/src/components/ConfirmDialog.vue +15 -14
- package/src/components/DataFrame.story.vue +28 -40
- package/src/components/DataFrame.vue +112 -128
- package/src/components/{DateTimePicker.story.vue → DatePicker.datetime.story.vue} +19 -14
- package/src/components/DatePicker.story.vue +2 -2
- package/src/components/{TimePicker.story.vue → DatePicker.time.story.vue} +15 -12
- package/src/components/DatePicker.vue +82 -220
- package/src/components/DoseCalculator.vue +13 -19
- package/src/components/DoseCalculatorVolumeField.vue +6 -6
- package/src/components/EmptyState.story.vue +17 -17
- package/src/components/EmptyState.vue +6 -5
- package/src/components/ExperimentPopover.story.vue +165 -53
- package/src/components/ExperimentPopover.vue +172 -190
- package/src/components/ExperimentSelectorModal.story.vue +43 -39
- package/src/components/ExperimentSelectorModal.vue +134 -122
- package/src/components/FilePicker.vue +1 -1
- package/src/components/FormBuilder.story.vue +9 -4
- package/src/components/FormBuilder.vue +46 -253
- package/src/components/FormField.story.vue +9 -50
- package/src/components/FormulaInput.story.vue +2 -2
- package/src/components/FormulaInput.vue +5 -6
- package/src/components/GeneratedPathInput.vue +8 -9
- package/src/components/GeneratedPluginView.story.vue +1 -1
- package/src/components/GeneratedPluginView.vue +29 -22
- package/src/components/GeneratedResultRenderer.vue +16 -17
- package/src/components/InstrumentStateBadge.vue +1 -1
- package/src/components/InstrumentStatusPanels.story.vue +64 -0
- package/src/components/InstrumentStatusPanels.vue +133 -0
- package/src/components/JobsStatusTray.story.vue +2 -2
- package/src/components/JobsStatusTray.vue +5 -20
- package/src/components/LoadingSpinner.story.vue +11 -11
- package/src/components/LoadingSpinner.vue +7 -5
- package/src/components/MoleculeInput.story.vue +2 -2
- package/src/components/MoleculeInput.vue +3 -3
- package/src/components/NumberInput.story.vue +55 -15
- package/src/components/NumberInput.vue +83 -24
- package/src/components/PlateEditor.story.vue +51 -43
- package/src/components/PlateEditor.vue +97 -128
- package/src/components/PlotlyChart.story.vue +1 -1
- package/src/components/PlotlyChart.vue +6 -4
- package/src/components/PluginIcon.story.vue +6 -11
- package/src/components/PluginIcon.vue +7 -2
- package/src/components/PluginWorkspaceView.controls.ts +9 -29
- package/src/components/PluginWorkspaceView.navigation.ts +2 -23
- package/src/components/PluginWorkspaceView.props.ts +17 -151
- package/src/components/PluginWorkspaceView.shell.ts +13 -24
- package/src/components/PluginWorkspaceView.story.vue +65 -63
- package/src/components/PluginWorkspaceView.vue +21 -78
- package/src/components/PresenceAvatars.story.vue +75 -0
- package/src/components/PresenceAvatars.vue +114 -0
- package/src/components/ProgressBar.story.vue +7 -7
- package/src/components/ProgressBar.vue +4 -3
- package/src/components/ProtocolStep.presentation.ts +0 -11
- package/src/components/ProtocolStepEditor.vue +6 -5
- package/src/components/ProtocolStepParameterField.vue +15 -12
- package/src/components/RuntimeUpdateNotice.vue +1 -1
- package/src/components/SampleSelector.colors.ts +1 -1
- package/src/components/SampleSelector.story.vue +1 -1
- package/src/components/SampleSelector.vue +33 -43
- package/src/components/SampleSelectorGroupNode.vue +1 -1
- package/src/components/ScheduleCalendar.vue +4 -4
- package/src/components/SecretInput.story.vue +1 -1
- package/src/components/SecretInput.vue +16 -25
- package/src/components/SectionCard.story.vue +2 -2
- package/src/components/SegmentedControl.story.vue +7 -7
- package/src/components/SegmentedControl.vue +5 -3
- package/src/components/SequenceInput.story.vue +2 -2
- package/src/components/SequenceInput.vue +3 -3
- package/src/components/SequenceProgressBar.story.vue +9 -0
- package/src/components/SequenceProgressBar.vue +6 -1
- package/src/components/SettingsModal.schema.ts +1 -1
- package/src/components/SettingsModal.story.vue +13 -14
- package/src/components/SettingsModal.vue +31 -49
- package/src/components/SmartGroup.types.ts +4 -6
- package/src/components/SmartGroupFieldRecipe.story.vue +1 -1
- package/src/components/SmartGroupFieldRecipe.vue +7 -5
- package/src/components/SmartGroupManual.story.vue +1 -1
- package/src/components/StaleFormBanner.story.vue +90 -0
- package/src/components/StaleFormBanner.vue +83 -0
- package/src/components/StepWizard.story.vue +33 -0
- package/src/components/StepWizard.vue +8 -1
- package/src/components/TagsInput.story.vue +7 -7
- package/src/components/TagsInput.vue +7 -6
- package/src/components/ThemeToggle.vue +5 -30
- package/src/components/TimeRangeInput.story.vue +1 -1
- package/src/components/TimeRangeInput.vue +10 -8
- package/src/components/VersionConflictDialog.story.vue +60 -0
- package/src/components/VersionConflictDialog.vue +79 -0
- package/src/components/WellPlate.geometry.ts +0 -38
- package/src/components/WellPlate.rendering.ts +0 -13
- package/src/components/WellPlate.story.vue +64 -51
- package/src/components/WellPlate.vue +68 -87
- package/src/components/index.ts +3 -105
- package/src/components/internal/AppTopBarPillNavInternal.vue +33 -2
- package/src/components/{AutoGroupModal.adapter.ts → internal/AutoGroupModalInternal.adapter.ts} +8 -8
- package/src/components/{AutoGroupModal.vue → internal/AutoGroupModalInternal.vue} +23 -23
- package/src/components/{BaseToggle.vue → internal/CheckboxSwitchInternal.vue} +8 -8
- package/src/components/internal/DataStateInternal.vue +1 -1
- package/src/components/internal/DatePickerDateInternal.vue +219 -0
- package/src/components/{DateTimePicker.vue → internal/DatePickerDateTimeInternal.vue} +12 -22
- package/src/components/{TimePicker.vue → internal/DatePickerTimeInternal.vue} +12 -15
- package/src/components/internal/FilePickerListInternal.vue +8 -14
- package/src/components/{FormActions.vue → internal/FormActionsInternal.vue} +2 -2
- package/src/components/internal/FormFieldRendererInternal.vue +1 -1
- package/src/components/internal/FormSchemaInternal.vue +253 -0
- package/src/components/{UnitInput.vue → internal/NumberUnitInputInternal.vue} +28 -28
- package/src/components/internal/PlateEditorBindingInternal.vue +8 -7
- package/src/components/internal/ResourcePickerListInternal.vue +48 -88
- package/src/components/internal/SelectMultipleInternal.vue +242 -0
- package/src/components/{SearchableSelect.vue → internal/SelectSearchableInternal.vue} +26 -11
- package/src/components/internal/WellEditPopupInternal.vue +4 -9
- package/src/components/internal/WorkspaceShellInternal.vue +3 -36
- package/src/components/internal/WorkspaceSidebarInternal.vue +4 -25
- package/src/{composables → components/internal}/autoGroup/classKey.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/classify.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/columns.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/compose.ts +3 -3
- package/src/{composables → components/internal}/autoGroup/cooccurrence.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/csv-shim.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/fingerprint.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/index.ts +1 -2
- package/src/{composables → components/internal}/autoGroup/template.ts +1 -1
- package/src/{composables → components/internal}/autoGroup/tokenLength.ts +1 -1
- package/src/components/internal/generatedJobsApi.ts +1 -1
- package/src/{composables → components/internal}/useAutoGroup.ts +3 -57
- package/src/composables/componentSpecs.ts +62 -0
- package/src/composables/controlComponentBindings.ts +7 -0
- package/src/composables/controlSchemaAdapters.ts +45 -7
- package/src/composables/controlSchemaDoseDesign.ts +16 -5
- package/src/composables/controlSchemaModel.ts +1 -1
- package/src/composables/controlSchemaTypes.ts +31 -22
- package/src/composables/{usePluginClient.ts → createClient.ts} +54 -190
- package/src/composables/{useEventStream.ts → eventStream.ts} +3 -3
- package/src/composables/experiment-utils.ts +1 -39
- package/src/composables/formBuilderRegistry.ts +6 -12
- package/src/composables/index.ts +17 -480
- package/src/composables/platformContextHelpers.ts +0 -57
- package/src/composables/pluginEndpointBuilder.ts +8 -10
- package/src/composables/pluginIdentity.ts +31 -0
- package/src/composables/pluginWorkspaceModel.ts +16 -107
- package/src/composables/useApi.ts +18 -30
- package/src/composables/useAppExperiment.ts +26 -5
- package/src/composables/{useAnalysisArtifacts.ts → useArtifacts.ts} +18 -19
- package/src/composables/useCalendarGrid.ts +4 -3
- package/src/composables/useControlSchema.ts +5 -9
- package/src/composables/useControlWorkspace.ts +4 -7
- package/src/composables/useExperiment.ts +49 -0
- package/src/composables/useExperimentData.ts +4 -4
- package/src/composables/useExperimentSelector.ts +82 -36
- package/src/composables/useFileBrowser.ts +5 -13
- package/src/composables/useFilePicker.ts +2 -2
- package/src/composables/useFormBuilder.ts +3 -4
- package/src/composables/useJobCenter.ts +324 -0
- package/src/composables/{useGeneratedAnalysis.ts → useJobsEndpoint.ts} +53 -67
- package/src/composables/useMenuKeyboard.ts +1 -1
- package/src/composables/usePlatform.ts +95 -0
- package/src/composables/usePlatformFilePickerAdapter.ts +2 -1
- package/src/composables/usePluginWorkspace.ts +62 -107
- package/src/composables/usePresence.ts +110 -0
- package/src/composables/useRackEditor.ts +3 -3
- package/src/composables/useRealtime.ts +194 -0
- package/src/composables/{useRequestSyncState.ts → useRequest.ts} +25 -48
- package/src/composables/useScheduleCalendarLayout.ts +1 -1
- package/src/composables/useToast.ts +14 -11
- package/src/composables/useVersionedSave.ts +165 -0
- package/src/data.ts +130 -0
- package/src/deprecatedRootExports.ts +226 -0
- package/src/generated/schema.ts +1 -0
- package/src/host.ts +27 -0
- package/src/index.ts +2 -71
- package/src/install.ts +15 -2
- package/src/instrument.ts +1 -6
- package/src/lab.ts +128 -0
- package/src/permissions.ts +0 -27
- package/src/runtime.ts +145 -0
- package/src/shell.ts +103 -0
- package/src/stores/auth.ts +26 -162
- package/src/stores/experiment.ts +27 -1
- package/src/styles/components/action-menu.css +0 -5
- package/src/styles/components/adduct-text.css +13 -5
- package/src/styles/components/alert-box.css +39 -40
- package/src/styles/components/app-layout.css +6 -5
- package/src/styles/components/app-page-selector.css +3 -1
- package/src/styles/components/app-pill-nav.css +11 -12
- package/src/styles/components/app-sidebar.css +9 -18
- package/src/styles/components/app-top-bar.css +64 -103
- package/src/styles/components/artifact-save-dialog.css +153 -2
- package/src/styles/components/audit-trail.css +16 -19
- package/src/styles/components/avatar.css +6 -4
- package/src/styles/components/batch-progress-list.css +38 -36
- package/src/styles/components/button.css +40 -59
- package/src/styles/components/calendar.css +12 -12
- package/src/styles/components/chart-container.css +34 -23
- package/src/styles/components/checkbox.css +3 -13
- package/src/styles/components/collapsible-card.css +28 -30
- package/src/styles/components/confirm-dialog.css +31 -16
- package/src/styles/components/dataframe.css +12 -4
- package/src/styles/components/date-picker.css +80 -92
- package/src/styles/components/datetime-picker.css +31 -43
- package/src/styles/components/divider.css +20 -20
- package/src/styles/components/dose-calculator.css +3 -3
- package/src/styles/components/empty-state.css +23 -18
- package/src/styles/components/experiment-code-badge.css +2 -0
- package/src/styles/components/experiment-popover.css +174 -329
- package/src/styles/components/experiment-selector-modal.css +75 -56
- package/src/styles/components/file-picker.css +4 -4
- package/src/styles/components/file-uploader.css +38 -49
- package/src/styles/components/form-builder.css +3 -3
- package/src/styles/components/formula-input.css +1 -1
- package/src/styles/components/icon-button.css +19 -25
- package/src/styles/components/input.css +5 -4
- package/src/styles/components/instrument-monitor.css +13 -15
- package/src/styles/components/jobs-status-tray.css +31 -25
- package/src/styles/components/loading-spinner.css +9 -12
- package/src/styles/components/modal.css +2 -4
- package/src/styles/components/molecule-input.css +2 -2
- package/src/styles/components/multi-select.css +65 -112
- package/src/styles/components/number-input.css +26 -19
- package/src/styles/components/pill.css +43 -37
- package/src/styles/components/plate-editor.css +0 -1
- package/src/styles/components/plugin-icon.css +34 -22
- package/src/styles/components/popover.css +2 -2
- package/src/styles/components/presence-avatars.css +194 -0
- package/src/styles/components/progress-bar.css +2 -0
- package/src/styles/components/protocol-step-editor.css +1 -3
- package/src/styles/components/resource-card.css +2 -2
- package/src/styles/components/resource-picker-list.css +6 -57
- package/src/styles/components/sample-hierarchy-tree.css +4 -4
- package/src/styles/components/sample-selector.css +95 -79
- package/src/styles/components/schedule-calendar.css +8 -8
- package/src/styles/components/searchable-select.css +15 -12
- package/src/styles/components/section-card.css +28 -47
- package/src/styles/components/segmented-control.css +18 -15
- package/src/styles/components/select.css +3 -3
- package/src/styles/components/sequence-input.css +2 -2
- package/src/styles/components/sequence-progress-bar.css +17 -8
- package/src/styles/components/smart-group.css +19 -24
- package/src/styles/components/step-wizard.css +52 -16
- package/src/styles/components/tabs.css +2 -2
- package/src/styles/components/textarea.css +4 -4
- package/src/styles/components/time-picker.css +36 -21
- package/src/styles/components/toast.css +12 -10
- package/src/styles/components/toggle.css +3 -13
- package/src/styles/components/tooltip.css +10 -9
- package/src/styles/components/unit-input.css +8 -7
- package/src/styles/components/version-conflict.css +122 -0
- package/src/styles/components/well-plate.css +8 -8
- package/src/styles/index.css +2 -11
- package/src/styles/variables.css +107 -602
- package/src/types/analysisArtifactTypes.ts +1 -1
- package/src/types/auth.ts +0 -10
- package/src/types/componentLabTypes.ts +103 -53
- package/src/types/componentWorkflowTypes.ts +4 -33
- package/src/types/components.ts +148 -114
- package/src/types/form-builder.ts +4 -0
- package/src/types/generated/platformContext.ts +60 -0
- package/src/types/generated-ui.ts +6 -2
- package/src/types/index.ts +15 -53
- package/src/types/instrument.ts +27 -0
- package/src/types/platform.ts +25 -89
- package/src/utils/color.ts +1 -12
- package/src/utils/dose.ts +335 -0
- package/src/utils/experimentStatus.ts +43 -0
- package/src/utils/formula.ts +292 -0
- package/src/utils/integrationHost.ts +27 -0
- package/src/utils/plotlyTemplate.ts +6 -0
- package/src/utils/pluginSecrets.ts +23 -23
- package/src/utils/presenceAvatars.ts +53 -0
- package/src/utils/records.ts +0 -5
- package/src/{composables/useTimeUtils.ts → utils/time.ts} +21 -21
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js +0 -605
- package/dist/ResourcePickerListInternal-CFAw4vTZ.js.map +0 -1
- package/dist/__tests__/composables/useBioTemplatePackWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplatePresetWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useBioTemplateWorkspace.test.d.ts +0 -1
- package/dist/__tests__/composables/useChemicalFormula.test.d.ts +0 -1
- package/dist/__tests__/composables/useEventStream.test.d.ts +0 -1
- package/dist/__tests__/composables/useExperimentSave.test.d.ts +0 -1
- package/dist/__tests__/composables/useGeneratedAnalysis.test.d.ts +0 -1
- package/dist/__tests__/composables/useGroupAssignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useJobsStatusTray.test.d.ts +0 -1
- package/dist/__tests__/composables/useMobileSupportGate.test.d.ts +0 -1
- package/dist/__tests__/composables/usePlatformContext.test.d.ts +0 -1
- package/dist/__tests__/composables/usePluginClient.test.d.ts +0 -1
- package/dist/__tests__/composables/usePresenceHeartbeat.test.d.ts +0 -1
- package/dist/__tests__/composables/useRequestSyncState.test.d.ts +0 -1
- package/dist/__tests__/composables/useRuntimeAlignment.test.d.ts +0 -1
- package/dist/__tests__/composables/useTemplateCollection.test.d.ts +0 -1
- package/dist/__tests__/composables/useTimeUtils.test.d.ts +0 -1
- package/dist/__tests__/docs/extractDocsTemplates.test.d.ts +0 -1
- package/dist/__tests__/templates/templates.test.d.ts +0 -1
- package/dist/__tests__/templates/templatesDeprecation.test.d.ts +0 -1
- package/dist/__tests__/utils/lcms.test.d.ts +0 -1
- package/dist/__tests__/utils/rack.test.d.ts +0 -1
- package/dist/components/AppAvatarMenu.vue.d.ts +0 -47
- package/dist/components/AppTopBar.navigation.d.ts +0 -10
- package/dist/components/BaseTextarea.vue.d.ts +0 -31
- package/dist/components/BioTemplateExperimentWorkspaceView.vue.d.ts +0 -112
- package/dist/components/BioTemplatePackWorkspaceView.vue.d.ts +0 -86
- package/dist/components/BioTemplatePresetWorkspaceView.vue.d.ts +0 -80
- package/dist/components/BioTemplateRenderer.vue.d.ts +0 -30
- package/dist/components/ControlWorkspaceView.vue.d.ts +0 -138
- package/dist/components/DoseDesignWorkspaceView.vue.d.ts +0 -140
- package/dist/components/ExperimentDataViewer.vue.d.ts +0 -54
- package/dist/components/ExperimentTimeline.vue.d.ts +0 -70
- package/dist/components/FitPanel.vue.d.ts +0 -56
- package/dist/components/GroupAssigner.vue.d.ts +0 -26
- package/dist/components/IconButton.vue.d.ts +0 -30
- package/dist/components/MobileSupportGate.vue.d.ts +0 -32
- package/dist/components/ReagentEditor.vue.d.ts +0 -31
- package/dist/components/ReagentList.presentation.d.ts +0 -17
- package/dist/components/ReagentList.vue.d.ts +0 -58
- package/dist/components/SampleLegend.vue.d.ts +0 -33
- package/dist/components/SmartGroupModal.vue.d.ts +0 -29
- package/dist/components/index.js +0 -5
- package/dist/components-BOA5e7kb.js +0 -23137
- package/dist/components-BOA5e7kb.js.map +0 -1
- package/dist/composables/flattenWorkspaceBindings.d.ts +0 -61
- package/dist/composables/index.js +0 -7
- package/dist/composables/useBioTemplateComponents.d.ts +0 -34
- package/dist/composables/useBioTemplateControls.d.ts +0 -10
- package/dist/composables/useBioTemplatePackWorkspace.d.ts +0 -56
- package/dist/composables/useBioTemplatePresetWorkspace.d.ts +0 -79
- package/dist/composables/useBioTemplateWorkspace.d.ts +0 -39
- package/dist/composables/useExperimentSave.d.ts +0 -69
- package/dist/composables/useGroupAssignment.d.ts +0 -35
- package/dist/composables/useJobsStatusTray.d.ts +0 -87
- package/dist/composables/useMobileSupportGate.d.ts +0 -14
- package/dist/composables/usePlatformContext.d.ts +0 -218
- package/dist/composables/usePresenceHeartbeat.d.ts +0 -49
- package/dist/composables/useRuntimeAlignment.d.ts +0 -44
- package/dist/composables/useTemplateCollection.d.ts +0 -62
- package/dist/composables/workspaceRecipes.d.ts +0 -189
- package/dist/composables-izSQH8Ky.js +0 -591
- package/dist/composables-izSQH8Ky.js.map +0 -1
- package/dist/experiment-D49y_Kro.js +0 -459
- package/dist/experiment-D49y_Kro.js.map +0 -1
- package/dist/experiment-utils-DTANyVKV.js.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/lcms.d.ts +0 -38
- package/dist/settings-BG6v13Zq.js +0 -341
- package/dist/settings-BG6v13Zq.js.map +0 -1
- package/dist/tailwind.preset.d.ts +0 -63
- package/dist/tailwind.preset.js +0 -71
- package/dist/tailwind.preset.js.map +0 -1
- package/dist/templates/adapters.d.ts +0 -19
- package/dist/templates/assayLookups.d.ts +0 -3
- package/dist/templates/assayMatrixAdapters.d.ts +0 -13
- package/dist/templates/assayMatrixBuilder.d.ts +0 -3
- package/dist/templates/assayNormalizers.d.ts +0 -4
- package/dist/templates/builderIdUtils.d.ts +0 -4
- package/dist/templates/builderPresetControls.d.ts +0 -11
- package/dist/templates/builderReadUtils.d.ts +0 -8
- package/dist/templates/builders.d.ts +0 -26
- package/dist/templates/calibrationCurveAdapters.d.ts +0 -7
- package/dist/templates/calibrationCurveBuilder.d.ts +0 -3
- package/dist/templates/calibrationNormalizers.d.ts +0 -5
- package/dist/templates/catalog.d.ts +0 -192
- package/dist/templates/componentBindingCatalog.d.ts +0 -25
- package/dist/templates/componentBindingHelpers.d.ts +0 -17
- package/dist/templates/componentBindings.d.ts +0 -97
- package/dist/templates/componentDoseResponseProps.d.ts +0 -3
- package/dist/templates/componentGenericProps.d.ts +0 -8
- package/dist/templates/componentPlateHelpers.d.ts +0 -11
- package/dist/templates/componentPlateMapProps.d.ts +0 -3
- package/dist/templates/componentPropsFactory.d.ts +0 -3
- package/dist/templates/componentQpcrPlateProps.d.ts +0 -3
- package/dist/templates/componentTargetResolvers.d.ts +0 -5
- package/dist/templates/componentTemplateProps.d.ts +0 -3
- package/dist/templates/controlSchemaClone.d.ts +0 -4
- package/dist/templates/controlSchemaConstants.d.ts +0 -10
- package/dist/templates/controlSchemaMerge.d.ts +0 -3
- package/dist/templates/controlSchemaTargets.d.ts +0 -17
- package/dist/templates/controlSchemaTypes.d.ts +0 -4
- package/dist/templates/controlSchemas.d.ts +0 -34
- package/dist/templates/defaultBioTemplateBuilder.d.ts +0 -3
- package/dist/templates/doseResponseAdapters.d.ts +0 -6
- package/dist/templates/doseResponseBuilder.d.ts +0 -3
- package/dist/templates/elisaAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates/flowCytometryPanelBuilder.d.ts +0 -3
- package/dist/templates/flowNormalizers.d.ts +0 -8
- package/dist/templates/flowPanelAdapters.d.ts +0 -7
- package/dist/templates/index.d.ts +0 -15
- package/dist/templates/index.js +0 -2
- package/dist/templates/instrumentRunAdapterHelpers.d.ts +0 -8
- package/dist/templates/instrumentRunAdapters.d.ts +0 -19
- package/dist/templates/instrumentRunBuilder.d.ts +0 -3
- package/dist/templates/lcmsBatchCollectionBuilder.d.ts +0 -3
- package/dist/templates/lookup.d.ts +0 -4
- package/dist/templates/packs.d.ts +0 -21
- package/dist/templates/plateMapAdapters.d.ts +0 -5
- package/dist/templates/plateMapBuilder.d.ts +0 -3
- package/dist/templates/presetControlSchemas.d.ts +0 -534
- package/dist/templates/presets.d.ts +0 -106
- package/dist/templates/protocolAdapters.d.ts +0 -9
- package/dist/templates/protocolNormalizers.d.ts +0 -6
- package/dist/templates/protocolStepsBuilder.d.ts +0 -3
- package/dist/templates/qpcrAdapters.d.ts +0 -9
- package/dist/templates/qpcrExpressionCollectionBuilder.d.ts +0 -3
- package/dist/templates/qpcrPlateBuilder.d.ts +0 -3
- package/dist/templates/reagentAdapters.d.ts +0 -9
- package/dist/templates/reagentListBuilder.d.ts +0 -3
- package/dist/templates/runNormalizers.d.ts +0 -10
- package/dist/templates/sampleNormalizers.d.ts +0 -4
- package/dist/templates/samplePrepAdapters.d.ts +0 -7
- package/dist/templates/samplePrepBuilder.d.ts +0 -3
- package/dist/templates/sampleSheetAdapters.d.ts +0 -9
- package/dist/templates/sampleSheetBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsCollectionBuilder.d.ts +0 -3
- package/dist/templates/targetedMetabolomicsHelpers.d.ts +0 -5
- package/dist/templates/templateAdapterTypes.d.ts +0 -48
- package/dist/templates/templateControlSchemas.d.ts +0 -400
- package/dist/templates/templateCreateOptions.d.ts +0 -165
- package/dist/templates/templateEnvelopes.d.ts +0 -17
- package/dist/templates/templatePackCollectionBuilder.d.ts +0 -3
- package/dist/templates/templatePresetCollectionBuilder.d.ts +0 -20
- package/dist/templates/templateQpcrTypes.d.ts +0 -42
- package/dist/templates/templateValidators.d.ts +0 -25
- package/dist/templates/timeCourseAdapters.d.ts +0 -9
- package/dist/templates/timeCourseBuilder.d.ts +0 -3
- package/dist/templates/types.d.ts +0 -304
- package/dist/templates/wellPlateScreenCollectionBuilder.d.ts +0 -3
- package/dist/templates/westernBlotAssayCollectionBuilder.d.ts +0 -3
- package/dist/templates-B2DB0MCM.js +0 -12304
- package/dist/templates-B2DB0MCM.js.map +0 -1
- package/dist/utils/rack.d.ts +0 -63
- package/dist/validation-C_eH_vIg.js +0 -7999
- package/dist/validation-C_eH_vIg.js.map +0 -1
- package/src/__tests__/components/AppAvatarMenu.test.ts +0 -186
- package/src/__tests__/components/AppTopBar.navigation.test.ts +0 -68
- package/src/__tests__/components/AppTopBarPresence.test.ts +0 -47
- package/src/__tests__/components/BioTemplateExperimentWorkspaceView.test.ts +0 -159
- package/src/__tests__/components/BioTemplatePackWorkspaceView.test.ts +0 -192
- package/src/__tests__/components/BioTemplatePresetWorkspaceView.test.ts +0 -307
- package/src/__tests__/components/BioTemplateRenderer.test.ts +0 -96
- package/src/__tests__/components/ControlWorkspaceView.test.ts +0 -1100
- package/src/__tests__/components/DoseDesignWorkspaceView.test.ts +0 -183
- package/src/__tests__/components/ExperimentTimeline.test.ts +0 -108
- package/src/__tests__/components/FitPanel.test.ts +0 -96
- package/src/__tests__/components/GroupAssigner.test.ts +0 -101
- package/src/__tests__/components/MobileSupportGate.test.ts +0 -120
- package/src/__tests__/components/MultiSelect.test.ts +0 -54
- package/src/__tests__/components/ReagentList.presentation.test.ts +0 -73
- package/src/__tests__/components/ReagentList.test.ts +0 -167
- package/src/__tests__/components/SampleLegend.test.ts +0 -18
- package/src/__tests__/components/SmartGroupModal.test.ts +0 -69
- package/src/__tests__/components/WellPlate.sampleTypeIndicator.test.ts +0 -58
- package/src/__tests__/components/iconButtonIconSizing.test.ts +0 -18
- package/src/__tests__/composables/useBioTemplatePackWorkspace.test.ts +0 -125
- package/src/__tests__/composables/useBioTemplatePresetWorkspace.test.ts +0 -199
- package/src/__tests__/composables/useBioTemplateWorkspace.test.ts +0 -104
- package/src/__tests__/composables/useExperimentSave.test.ts +0 -542
- package/src/__tests__/composables/useGroupAssignment.test.ts +0 -73
- package/src/__tests__/composables/useMobileSupportGate.test.ts +0 -74
- package/src/__tests__/composables/usePlatformContext.test.ts +0 -148
- package/src/__tests__/composables/usePresenceHeartbeat.test.ts +0 -164
- package/src/__tests__/composables/useRuntimeAlignment.test.ts +0 -145
- package/src/__tests__/composables/useTemplateCollection.test.ts +0 -147
- package/src/__tests__/docs/extractDocsTemplates.test.ts +0 -53
- package/src/__tests__/fixtures/templates/dose-response.json +0 -81
- package/src/__tests__/fixtures/templates/plate-map.json +0 -54
- package/src/__tests__/fixtures/templates/qpcr-plate.json +0 -96
- package/src/__tests__/fixtures/templates/sample-sheet.json +0 -71
- package/src/__tests__/templates/templates.test.ts +0 -1235
- package/src/__tests__/templates/templatesDeprecation.test.ts +0 -78
- package/src/__tests__/utils/lcms.test.ts +0 -73
- package/src/__tests__/utils/rack.test.ts +0 -120
- package/src/components/AppAvatarMenu.story.vue +0 -155
- package/src/components/AppAvatarMenu.vue +0 -154
- package/src/components/AppTopBar.navigation.ts +0 -60
- package/src/components/AutoGroupModal.story.vue +0 -458
- package/src/components/BaseTextarea.vue +0 -58
- package/src/components/BioTemplateExperimentWorkspaceView.story.vue +0 -123
- package/src/components/BioTemplateExperimentWorkspaceView.vue +0 -339
- package/src/components/BioTemplatePackWorkspaceView.story.vue +0 -107
- package/src/components/BioTemplatePackWorkspaceView.vue +0 -180
- package/src/components/BioTemplatePresetWorkspaceView.story.vue +0 -163
- package/src/components/BioTemplatePresetWorkspaceView.vue +0 -403
- package/src/components/BioTemplateRenderer.story.vue +0 -57
- package/src/components/BioTemplateRenderer.vue +0 -64
- package/src/components/ControlWorkspaceView.story.vue +0 -347
- package/src/components/ControlWorkspaceView.vue +0 -370
- package/src/components/DoseDesignWorkspaceView.story.vue +0 -77
- package/src/components/DoseDesignWorkspaceView.vue +0 -243
- package/src/components/ExperimentDataViewer.story.vue +0 -177
- package/src/components/ExperimentDataViewer.vue +0 -313
- package/src/components/ExperimentTimeline.story.vue +0 -208
- package/src/components/ExperimentTimeline.vue +0 -383
- package/src/components/FitPanel.story.vue +0 -191
- package/src/components/FitPanel.vue +0 -168
- package/src/components/FormActions.story.vue +0 -96
- package/src/components/GroupAssigner.story.vue +0 -83
- package/src/components/GroupAssigner.vue +0 -319
- package/src/components/IconButton.story.vue +0 -140
- package/src/components/IconButton.vue +0 -69
- package/src/components/MobileSupportGate.story.vue +0 -52
- package/src/components/MobileSupportGate.vue +0 -111
- package/src/components/MultiSelect.vue +0 -119
- package/src/components/ReagentEditor.story.vue +0 -153
- package/src/components/ReagentEditor.vue +0 -414
- package/src/components/ReagentList.presentation.ts +0 -106
- package/src/components/ReagentList.story.vue +0 -155
- package/src/components/ReagentList.vue +0 -438
- package/src/components/SampleLegend.story.vue +0 -91
- package/src/components/SampleLegend.vue +0 -121
- package/src/components/SmartGroupModal.story.vue +0 -61
- package/src/components/SmartGroupModal.vue +0 -61
- package/src/components/StatusIndicator.story.vue +0 -99
- package/src/components/StatusIndicator.vue +0 -36
- package/src/components/UnitInput.story.vue +0 -194
- package/src/composables/flattenWorkspaceBindings.ts +0 -104
- package/src/composables/useBioTemplateComponents.ts +0 -117
- package/src/composables/useBioTemplateControls.ts +0 -45
- package/src/composables/useBioTemplatePackWorkspace.ts +0 -201
- package/src/composables/useBioTemplatePresetWorkspace.ts +0 -329
- package/src/composables/useBioTemplateWorkspace.ts +0 -120
- package/src/composables/useChemicalFormula.ts +0 -301
- package/src/composables/useDoseCalculator.ts +0 -370
- package/src/composables/useExperimentSave.ts +0 -348
- package/src/composables/useGroupAssignment.ts +0 -152
- package/src/composables/useJobsStatusTray.ts +0 -493
- package/src/composables/useMobileSupportGate.ts +0 -80
- package/src/composables/usePlatformContext.ts +0 -299
- package/src/composables/usePresenceHeartbeat.ts +0 -201
- package/src/composables/useRuntimeAlignment.ts +0 -184
- package/src/composables/useTemplateCollection.ts +0 -233
- package/src/composables/workspaceRecipes.ts +0 -268
- package/src/lcms.ts +0 -119
- package/src/styles/components/app-avatar-menu.css +0 -121
- package/src/styles/components/experiment-data-viewer.css +0 -138
- package/src/styles/components/experiment-timeline.css +0 -572
- package/src/styles/components/fit-panel.css +0 -153
- package/src/styles/components/group-assigner.css +0 -198
- package/src/styles/components/mobile-support-gate.css +0 -117
- package/src/styles/components/reagent-editor.css +0 -501
- package/src/styles/components/reagent-list.css +0 -408
- package/src/styles/components/sample-legend.css +0 -212
- package/src/styles/components/status-indicator.css +0 -66
- package/src/styles/components/theme-toggle.css +0 -6
- package/src/tailwind.preset.ts +0 -66
- package/src/templates/adapters.ts +0 -141
- package/src/templates/assayLookups.ts +0 -33
- package/src/templates/assayMatrixAdapters.ts +0 -85
- package/src/templates/assayMatrixBuilder.ts +0 -60
- package/src/templates/assayNormalizers.ts +0 -34
- package/src/templates/builderIdUtils.ts +0 -20
- package/src/templates/builderPresetControls.ts +0 -166
- package/src/templates/builderReadUtils.ts +0 -55
- package/src/templates/builders.ts +0 -122
- package/src/templates/calibrationCurveAdapters.ts +0 -62
- package/src/templates/calibrationCurveBuilder.ts +0 -100
- package/src/templates/calibrationNormalizers.ts +0 -60
- package/src/templates/catalog.ts +0 -249
- package/src/templates/componentBindingCatalog.ts +0 -90
- package/src/templates/componentBindingHelpers.ts +0 -93
- package/src/templates/componentBindings.ts +0 -279
- package/src/templates/componentDoseResponseProps.ts +0 -41
- package/src/templates/componentGenericProps.ts +0 -77
- package/src/templates/componentPlateHelpers.ts +0 -52
- package/src/templates/componentPlateMapProps.ts +0 -34
- package/src/templates/componentPropsFactory.ts +0 -21
- package/src/templates/componentQpcrPlateProps.ts +0 -27
- package/src/templates/componentTargetResolvers.ts +0 -67
- package/src/templates/componentTemplateProps.ts +0 -78
- package/src/templates/controlSchemaClone.ts +0 -32
- package/src/templates/controlSchemaConstants.ts +0 -11
- package/src/templates/controlSchemaMerge.ts +0 -40
- package/src/templates/controlSchemaTargets.ts +0 -85
- package/src/templates/controlSchemaTypes.ts +0 -20
- package/src/templates/controlSchemas.ts +0 -113
- package/src/templates/defaultBioTemplateBuilder.ts +0 -125
- package/src/templates/doseResponseAdapters.ts +0 -36
- package/src/templates/doseResponseBuilder.ts +0 -45
- package/src/templates/elisaAssayCollectionBuilder.ts +0 -63
- package/src/templates/flowCytometryAssayCollectionBuilder.ts +0 -42
- package/src/templates/flowCytometryPanelBuilder.ts +0 -54
- package/src/templates/flowNormalizers.ts +0 -58
- package/src/templates/flowPanelAdapters.ts +0 -61
- package/src/templates/index.ts +0 -330
- package/src/templates/instrumentRunAdapterHelpers.ts +0 -94
- package/src/templates/instrumentRunAdapters.ts +0 -174
- package/src/templates/instrumentRunBuilder.ts +0 -98
- package/src/templates/lcmsBatchCollectionBuilder.ts +0 -39
- package/src/templates/lookup.ts +0 -18
- package/src/templates/packs.ts +0 -166
- package/src/templates/plateMapAdapters.ts +0 -38
- package/src/templates/plateMapBuilder.ts +0 -44
- package/src/templates/presetControlSchemas.ts +0 -258
- package/src/templates/presets.ts +0 -183
- package/src/templates/protocolAdapters.ts +0 -73
- package/src/templates/protocolNormalizers.ts +0 -37
- package/src/templates/protocolStepsBuilder.ts +0 -37
- package/src/templates/qpcrAdapters.ts +0 -108
- package/src/templates/qpcrExpressionCollectionBuilder.ts +0 -34
- package/src/templates/qpcrPlateBuilder.ts +0 -97
- package/src/templates/reagentAdapters.ts +0 -81
- package/src/templates/reagentListBuilder.ts +0 -31
- package/src/templates/runNormalizers.ts +0 -63
- package/src/templates/sampleNormalizers.ts +0 -58
- package/src/templates/samplePrepAdapters.ts +0 -66
- package/src/templates/samplePrepBuilder.ts +0 -52
- package/src/templates/sampleSheetAdapters.ts +0 -79
- package/src/templates/sampleSheetBuilder.ts +0 -24
- package/src/templates/targetedMetabolomicsCollectionBuilder.ts +0 -80
- package/src/templates/targetedMetabolomicsHelpers.ts +0 -102
- package/src/templates/templateAdapterTypes.ts +0 -58
- package/src/templates/templateControlSchemas.ts +0 -320
- package/src/templates/templateCreateOptions.ts +0 -208
- package/src/templates/templateEnvelopes.ts +0 -145
- package/src/templates/templatePackCollectionBuilder.ts +0 -24
- package/src/templates/templatePresetCollectionBuilder.ts +0 -141
- package/src/templates/templateQpcrTypes.ts +0 -48
- package/src/templates/templateValidators.ts +0 -426
- package/src/templates/timeCourseAdapters.ts +0 -77
- package/src/templates/timeCourseBuilder.ts +0 -65
- package/src/templates/types.ts +0 -493
- package/src/templates/wellPlateScreenCollectionBuilder.ts +0 -37
- package/src/templates/westernBlotAssayCollectionBuilder.ts +0 -69
- package/src/utils/rack.ts +0 -225
- /package/dist/__tests__/components/{AppAvatarMenu.test.d.ts → BaseButton.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBar.navigation.test.d.ts → BaseCheckbox.switch.test.d.ts} +0 -0
- /package/dist/__tests__/components/{AppTopBarPresence.test.d.ts → BaseSelect.multiple.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BaseToggle.test.d.ts → BaseSelect.searchable.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateExperimentWorkspaceView.test.d.ts → ConfirmDialog.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePackWorkspaceView.test.d.ts → DatePicker.datetime.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplatePresetWorkspaceView.test.d.ts → DatePicker.time.test.d.ts} +0 -0
- /package/dist/__tests__/components/{BioTemplateRenderer.test.d.ts → FormSchemaInternal.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ControlWorkspaceView.test.d.ts → InstrumentStatusPanels.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DateTimePicker.test.d.ts → NumberInput.units.test.d.ts} +0 -0
- /package/dist/__tests__/components/{DoseDesignWorkspaceView.test.d.ts → PresenceAvatars.test.d.ts} +0 -0
- /package/dist/__tests__/components/{ExperimentTimeline.test.d.ts → StaleFormBanner.test.d.ts} +0 -0
- /package/dist/__tests__/components/{FitPanel.test.d.ts → deprecationTags.test.d.ts} +0 -0
- /package/dist/__tests__/{components/GroupAssigner.test.d.ts → composables/createClient.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MobileSupportGate.test.d.ts → composables/eventStream.test.d.ts} +0 -0
- /package/dist/__tests__/{components/MultiSelect.test.d.ts → composables/useArtifacts.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.presentation.test.d.ts → composables/useExperiment.test.d.ts} +0 -0
- /package/dist/__tests__/{components/ReagentList.test.d.ts → composables/useJobCenter.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SampleLegend.test.d.ts → composables/useJobsEndpoint.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SearchableSelect.test.d.ts → composables/usePlatform.test.d.ts} +0 -0
- /package/dist/__tests__/{components/SmartGroupModal.test.d.ts → composables/usePresence.test.d.ts} +0 -0
- /package/dist/__tests__/{components/TimePicker.test.d.ts → composables/useRealtime.test.d.ts} +0 -0
- /package/dist/__tests__/{components/UnitInput.test.d.ts → composables/useRequest.test.d.ts} +0 -0
- /package/dist/__tests__/{components/WellPlate.sampleTypeIndicator.test.d.ts → composables/useVersionedSave.test.d.ts} +0 -0
- /package/dist/__tests__/{components/iconButtonIconSizing.test.d.ts → utils/formula.test.d.ts} +0 -0
- /package/dist/__tests__/{composables/useAnalysisArtifacts.test.d.ts → utils/time.test.d.ts} +0 -0
- /package/dist/components/{FormActions.vue.d.ts → internal/FormActionsInternal.vue.d.ts} +0 -0
- /package/dist/{composables → components/internal}/autoGroup/colors.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/index.d.ts +0 -0
- /package/dist/{composables → components/internal}/autoGroup/tokenize.d.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/colors.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/tokenize.ts +0 -0
- /package/src/{composables → components/internal}/autoGroup/vocab.json +0 -0
|
@@ -3,7 +3,7 @@ import { mount } from '@vue/test-utils'
|
|
|
3
3
|
import { createPinia, setActivePinia } from 'pinia'
|
|
4
4
|
import DataFrame from '../../components/DataFrame.vue'
|
|
5
5
|
import { useSettingsStore } from '../../stores/settings'
|
|
6
|
-
import type { DataFrameColumn, SortState
|
|
6
|
+
import type { DataFrameColumn, SortState } from '../../types'
|
|
7
7
|
|
|
8
8
|
describe('DataFrame', () => {
|
|
9
9
|
const mockData = [
|
|
@@ -21,7 +21,7 @@ describe('DataFrame', () => {
|
|
|
21
21
|
describe('rendering with default props', () => {
|
|
22
22
|
it('should render table container', () => {
|
|
23
23
|
const wrapper = mount(DataFrame, {
|
|
24
|
-
props: {
|
|
24
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
25
25
|
})
|
|
26
26
|
expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
|
|
27
27
|
expect(wrapper.find('.mint-dataframe__table').exists()).toBe(true)
|
|
@@ -29,7 +29,7 @@ describe('DataFrame', () => {
|
|
|
29
29
|
|
|
30
30
|
it('should render column headers', () => {
|
|
31
31
|
const wrapper = mount(DataFrame, {
|
|
32
|
-
props: {
|
|
32
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
33
33
|
})
|
|
34
34
|
const headers = wrapper.findAll('.mint-dataframe__th')
|
|
35
35
|
expect(headers).toHaveLength(3)
|
|
@@ -40,7 +40,7 @@ describe('DataFrame', () => {
|
|
|
40
40
|
|
|
41
41
|
it('should render data rows', () => {
|
|
42
42
|
const wrapper = mount(DataFrame, {
|
|
43
|
-
props: {
|
|
43
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
44
44
|
})
|
|
45
45
|
const rows = wrapper.findAll('.mint-dataframe__row')
|
|
46
46
|
expect(rows).toHaveLength(3)
|
|
@@ -48,7 +48,7 @@ describe('DataFrame', () => {
|
|
|
48
48
|
|
|
49
49
|
it('should render cell values', () => {
|
|
50
50
|
const wrapper = mount(DataFrame, {
|
|
51
|
-
props: {
|
|
51
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
52
52
|
})
|
|
53
53
|
const firstRow = wrapper.findAll('.mint-dataframe__row')[0]
|
|
54
54
|
const cells = firstRow.findAll('.mint-dataframe__td')
|
|
@@ -59,14 +59,14 @@ describe('DataFrame', () => {
|
|
|
59
59
|
|
|
60
60
|
it('should apply bordered class by default', () => {
|
|
61
61
|
const wrapper = mount(DataFrame, {
|
|
62
|
-
props: {
|
|
62
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
63
63
|
})
|
|
64
64
|
expect(wrapper.find('.mint-dataframe--bordered').exists()).toBe(true)
|
|
65
65
|
})
|
|
66
66
|
|
|
67
67
|
it('should apply striped rows by default', () => {
|
|
68
68
|
const wrapper = mount(DataFrame, {
|
|
69
|
-
props: {
|
|
69
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
70
70
|
})
|
|
71
71
|
const rows = wrapper.findAll('.mint-dataframe__row')
|
|
72
72
|
expect(rows[1].classes()).toContain('mint-dataframe__row--striped')
|
|
@@ -76,7 +76,7 @@ describe('DataFrame', () => {
|
|
|
76
76
|
describe('column configuration', () => {
|
|
77
77
|
it('should apply column alignment', () => {
|
|
78
78
|
const wrapper = mount(DataFrame, {
|
|
79
|
-
props: {
|
|
79
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
80
80
|
})
|
|
81
81
|
const ageHeader = wrapper.findAll('.mint-dataframe__th')[1]
|
|
82
82
|
expect(ageHeader.classes()).toContain('mint-dataframe__th--align-right')
|
|
@@ -87,7 +87,7 @@ describe('DataFrame', () => {
|
|
|
87
87
|
{ key: 'name', label: 'Name', width: 200 },
|
|
88
88
|
]
|
|
89
89
|
const wrapper = mount(DataFrame, {
|
|
90
|
-
props: {
|
|
90
|
+
props: { spec: { columns }, data: mockData },
|
|
91
91
|
})
|
|
92
92
|
const header = wrapper.find('.mint-dataframe__th')
|
|
93
93
|
expect(header.attributes('style')).toContain('width: 200px')
|
|
@@ -98,7 +98,7 @@ describe('DataFrame', () => {
|
|
|
98
98
|
{ key: 'name', label: 'Name', width: '20rem' },
|
|
99
99
|
]
|
|
100
100
|
const wrapper = mount(DataFrame, {
|
|
101
|
-
props: {
|
|
101
|
+
props: { spec: { columns }, data: mockData },
|
|
102
102
|
})
|
|
103
103
|
const header = wrapper.find('.mint-dataframe__th')
|
|
104
104
|
expect(header.attributes('style')).toContain('width: 20rem')
|
|
@@ -109,7 +109,7 @@ describe('DataFrame', () => {
|
|
|
109
109
|
{ key: 'name', label: 'Name', minWidth: 150 },
|
|
110
110
|
]
|
|
111
111
|
const wrapper = mount(DataFrame, {
|
|
112
|
-
props: {
|
|
112
|
+
props: { spec: { columns }, data: mockData },
|
|
113
113
|
})
|
|
114
114
|
const header = wrapper.find('.mint-dataframe__th')
|
|
115
115
|
expect(header.attributes('style')).toContain('min-width: 150px')
|
|
@@ -120,7 +120,7 @@ describe('DataFrame', () => {
|
|
|
120
120
|
{ key: 'name', label: 'Name', ellipsis: true },
|
|
121
121
|
]
|
|
122
122
|
const wrapper = mount(DataFrame, {
|
|
123
|
-
props: {
|
|
123
|
+
props: { spec: { columns }, data: mockData },
|
|
124
124
|
})
|
|
125
125
|
const cell = wrapper.find('.mint-dataframe__td')
|
|
126
126
|
expect(cell.classes()).toContain('mint-dataframe__td--ellipsis')
|
|
@@ -135,7 +135,7 @@ describe('DataFrame', () => {
|
|
|
135
135
|
},
|
|
136
136
|
]
|
|
137
137
|
const wrapper = mount(DataFrame, {
|
|
138
|
-
props: {
|
|
138
|
+
props: { spec: { columns }, data: mockData },
|
|
139
139
|
})
|
|
140
140
|
const ageCell = wrapper.findAll('.mint-dataframe__row')[0].findAll('.mint-dataframe__td')[0]
|
|
141
141
|
expect(ageCell.text()).toBe('30 years old')
|
|
@@ -150,7 +150,7 @@ describe('DataFrame', () => {
|
|
|
150
150
|
|
|
151
151
|
it('should show sort icon on sortable columns', () => {
|
|
152
152
|
const wrapper = mount(DataFrame, {
|
|
153
|
-
props: {
|
|
153
|
+
props: { spec: { columns: sortableColumns }, data: mockData },
|
|
154
154
|
})
|
|
155
155
|
const sortIcons = wrapper.findAll('.mint-dataframe__sort-icon')
|
|
156
156
|
expect(sortIcons).toHaveLength(2)
|
|
@@ -158,7 +158,7 @@ describe('DataFrame', () => {
|
|
|
158
158
|
|
|
159
159
|
it('should apply sortable class to sortable headers', () => {
|
|
160
160
|
const wrapper = mount(DataFrame, {
|
|
161
|
-
props: {
|
|
161
|
+
props: { spec: { columns: sortableColumns }, data: mockData },
|
|
162
162
|
})
|
|
163
163
|
const headers = wrapper.findAll('.mint-dataframe__th')
|
|
164
164
|
expect(headers[0].classes()).toContain('mint-dataframe__th--sortable')
|
|
@@ -166,7 +166,7 @@ describe('DataFrame', () => {
|
|
|
166
166
|
|
|
167
167
|
it('should sort ascending on first click', async () => {
|
|
168
168
|
const wrapper = mount(DataFrame, {
|
|
169
|
-
props: {
|
|
169
|
+
props: { spec: { columns: sortableColumns }, data: mockData },
|
|
170
170
|
})
|
|
171
171
|
const nameHeader = wrapper.findAll('.mint-dataframe__th')[0]
|
|
172
172
|
await nameHeader.get('.mint-dataframe__th-button').trigger('click')
|
|
@@ -180,8 +180,8 @@ describe('DataFrame', () => {
|
|
|
180
180
|
it('should sort descending on second click', async () => {
|
|
181
181
|
const wrapper = mount(DataFrame, {
|
|
182
182
|
props: {
|
|
183
|
+
spec: { columns: sortableColumns },
|
|
183
184
|
data: mockData,
|
|
184
|
-
columns: sortableColumns,
|
|
185
185
|
sort: { key: 'name', direction: 'asc' },
|
|
186
186
|
},
|
|
187
187
|
})
|
|
@@ -195,8 +195,8 @@ describe('DataFrame', () => {
|
|
|
195
195
|
it('should clear sort on third click', async () => {
|
|
196
196
|
const wrapper = mount(DataFrame, {
|
|
197
197
|
props: {
|
|
198
|
+
spec: { columns: sortableColumns },
|
|
198
199
|
data: mockData,
|
|
199
|
-
columns: sortableColumns,
|
|
200
200
|
sort: { key: 'name', direction: 'desc' },
|
|
201
201
|
},
|
|
202
202
|
})
|
|
@@ -209,7 +209,7 @@ describe('DataFrame', () => {
|
|
|
209
209
|
|
|
210
210
|
it('should sort data internally when sort prop is not provided', async () => {
|
|
211
211
|
const wrapper = mount(DataFrame, {
|
|
212
|
-
props: {
|
|
212
|
+
props: { spec: { columns: sortableColumns }, data: mockData },
|
|
213
213
|
})
|
|
214
214
|
const nameHeader = wrapper.findAll('.mint-dataframe__th')[0]
|
|
215
215
|
await nameHeader.get('.mint-dataframe__th-button').trigger('click')
|
|
@@ -222,7 +222,7 @@ describe('DataFrame', () => {
|
|
|
222
222
|
|
|
223
223
|
it('should sort numeric columns correctly', async () => {
|
|
224
224
|
const wrapper = mount(DataFrame, {
|
|
225
|
-
props: {
|
|
225
|
+
props: { spec: { columns: sortableColumns }, data: mockData },
|
|
226
226
|
})
|
|
227
227
|
const ageHeader = wrapper.findAll('.mint-dataframe__th')[1]
|
|
228
228
|
await ageHeader.get('.mint-dataframe__th-button').trigger('click')
|
|
@@ -236,8 +236,8 @@ describe('DataFrame', () => {
|
|
|
236
236
|
it('should apply sorted class to active column', () => {
|
|
237
237
|
const wrapper = mount(DataFrame, {
|
|
238
238
|
props: {
|
|
239
|
+
spec: { columns: sortableColumns },
|
|
239
240
|
data: mockData,
|
|
240
|
-
columns: sortableColumns,
|
|
241
241
|
sort: { key: 'name', direction: 'asc' },
|
|
242
242
|
},
|
|
243
243
|
})
|
|
@@ -251,7 +251,7 @@ describe('DataFrame', () => {
|
|
|
251
251
|
{ key: 'age', label: 'Age' },
|
|
252
252
|
]
|
|
253
253
|
const wrapper = mount(DataFrame, {
|
|
254
|
-
props: {
|
|
254
|
+
props: { spec: { columns, sortable: true }, data: mockData },
|
|
255
255
|
})
|
|
256
256
|
const sortableHeaders = wrapper.findAll('.mint-dataframe__th--sortable')
|
|
257
257
|
expect(sortableHeaders).toHaveLength(2)
|
|
@@ -261,14 +261,14 @@ describe('DataFrame', () => {
|
|
|
261
261
|
describe('search filtering', () => {
|
|
262
262
|
it('should show search input when searchable is true', () => {
|
|
263
263
|
const wrapper = mount(DataFrame, {
|
|
264
|
-
props: {
|
|
264
|
+
props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
|
|
265
265
|
})
|
|
266
266
|
expect(wrapper.find('.mint-dataframe__search').exists()).toBe(true)
|
|
267
267
|
})
|
|
268
268
|
|
|
269
269
|
it('should filter data based on search query', async () => {
|
|
270
270
|
const wrapper = mount(DataFrame, {
|
|
271
|
-
props: {
|
|
271
|
+
props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
|
|
272
272
|
})
|
|
273
273
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
274
274
|
await searchInput.setValue('Alice')
|
|
@@ -280,7 +280,7 @@ describe('DataFrame', () => {
|
|
|
280
280
|
|
|
281
281
|
it('should search across all columns by default', async () => {
|
|
282
282
|
const wrapper = mount(DataFrame, {
|
|
283
|
-
props: {
|
|
283
|
+
props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
|
|
284
284
|
})
|
|
285
285
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
286
286
|
await searchInput.setValue('bob@example.com')
|
|
@@ -293,10 +293,8 @@ describe('DataFrame', () => {
|
|
|
293
293
|
it('should search only specified columns', async () => {
|
|
294
294
|
const wrapper = mount(DataFrame, {
|
|
295
295
|
props: {
|
|
296
|
+
spec: { columns: mockColumns, searchable: true, searchKeys: ['name'] },
|
|
296
297
|
data: mockData,
|
|
297
|
-
columns: mockColumns,
|
|
298
|
-
searchable: true,
|
|
299
|
-
searchKeys: ['name'],
|
|
300
298
|
},
|
|
301
299
|
})
|
|
302
300
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
@@ -309,7 +307,7 @@ describe('DataFrame', () => {
|
|
|
309
307
|
|
|
310
308
|
it('should treat whitespace-only search as empty', async () => {
|
|
311
309
|
const wrapper = mount(DataFrame, {
|
|
312
|
-
props: {
|
|
310
|
+
props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
|
|
313
311
|
})
|
|
314
312
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
315
313
|
await searchInput.setValue(' ')
|
|
@@ -320,7 +318,7 @@ describe('DataFrame', () => {
|
|
|
320
318
|
|
|
321
319
|
it('should be case-insensitive', async () => {
|
|
322
320
|
const wrapper = mount(DataFrame, {
|
|
323
|
-
props: {
|
|
321
|
+
props: { spec: { columns: mockColumns, searchable: true }, data: mockData },
|
|
324
322
|
})
|
|
325
323
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
326
324
|
await searchInput.setValue('ALICE')
|
|
@@ -332,10 +330,8 @@ describe('DataFrame', () => {
|
|
|
332
330
|
it('should use custom placeholder', () => {
|
|
333
331
|
const wrapper = mount(DataFrame, {
|
|
334
332
|
props: {
|
|
333
|
+
spec: { columns: mockColumns, searchable: true, searchPlaceholder: 'Type to search...' },
|
|
335
334
|
data: mockData,
|
|
336
|
-
columns: mockColumns,
|
|
337
|
-
searchable: true,
|
|
338
|
-
searchPlaceholder: 'Type to search...',
|
|
339
335
|
},
|
|
340
336
|
})
|
|
341
337
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
@@ -344,15 +340,11 @@ describe('DataFrame', () => {
|
|
|
344
340
|
})
|
|
345
341
|
|
|
346
342
|
describe('pagination', () => {
|
|
347
|
-
const paginationState
|
|
348
|
-
page: 1,
|
|
349
|
-
pageSize: 2,
|
|
350
|
-
total: 3,
|
|
351
|
-
}
|
|
343
|
+
const paginationState = { pageSize: 2 }
|
|
352
344
|
|
|
353
345
|
it('should show pagination controls', () => {
|
|
354
346
|
const wrapper = mount(DataFrame, {
|
|
355
|
-
props: {
|
|
347
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
356
348
|
})
|
|
357
349
|
expect(wrapper.find('.mint-dataframe__footer').exists()).toBe(true)
|
|
358
350
|
expect(wrapper.find('.mint-dataframe__page-controls').exists()).toBe(true)
|
|
@@ -360,7 +352,7 @@ describe('DataFrame', () => {
|
|
|
360
352
|
|
|
361
353
|
it('should display page info', () => {
|
|
362
354
|
const wrapper = mount(DataFrame, {
|
|
363
|
-
props: {
|
|
355
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
364
356
|
})
|
|
365
357
|
const pageInfo = wrapper.find('.mint-dataframe__page-info')
|
|
366
358
|
expect(pageInfo.text()).toContain('1')
|
|
@@ -369,36 +361,53 @@ describe('DataFrame', () => {
|
|
|
369
361
|
|
|
370
362
|
it('should paginate data', () => {
|
|
371
363
|
const wrapper = mount(DataFrame, {
|
|
372
|
-
props: {
|
|
364
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
373
365
|
})
|
|
374
366
|
const rows = wrapper.findAll('.mint-dataframe__row')
|
|
375
367
|
expect(rows).toHaveLength(2) // pageSize is 2
|
|
376
368
|
})
|
|
377
369
|
|
|
378
|
-
it('should emit
|
|
370
|
+
it('should emit update:page on page change', async () => {
|
|
379
371
|
const wrapper = mount(DataFrame, {
|
|
380
|
-
props: {
|
|
372
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
381
373
|
})
|
|
382
374
|
const nextButton = wrapper.findAll('.mint-dataframe__page-btn')[1]
|
|
383
375
|
await nextButton.trigger('click')
|
|
384
376
|
|
|
385
|
-
expect(wrapper.emitted('update:
|
|
386
|
-
|
|
387
|
-
|
|
377
|
+
expect(wrapper.emitted('update:page')).toEqual([[2]])
|
|
378
|
+
})
|
|
379
|
+
|
|
380
|
+
it('should move to the next page when page is not bound', async () => {
|
|
381
|
+
const wrapper = mount(DataFrame, {
|
|
382
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
383
|
+
})
|
|
384
|
+
await wrapper.findAll('.mint-dataframe__page-btn')[1].trigger('click')
|
|
385
|
+
|
|
386
|
+
expect(wrapper.findAll('.mint-dataframe__row')).toHaveLength(1)
|
|
387
|
+
})
|
|
388
|
+
|
|
389
|
+
it('should show the last page that has rows when a search leaves fewer pages', async () => {
|
|
390
|
+
const wrapper = mount(DataFrame, {
|
|
391
|
+
props: { spec: { columns: mockColumns, pagination: paginationState, searchable: true }, data: mockData },
|
|
392
|
+
})
|
|
393
|
+
await wrapper.findAll('.mint-dataframe__page-btn')[1].trigger('click')
|
|
394
|
+
|
|
395
|
+
await wrapper.find('.mint-dataframe__search').setValue('Alice')
|
|
396
|
+
|
|
397
|
+
expect(wrapper.findAll('.mint-dataframe__row')).toHaveLength(1)
|
|
388
398
|
})
|
|
389
399
|
|
|
390
400
|
it('should disable prev button on first page', () => {
|
|
391
401
|
const wrapper = mount(DataFrame, {
|
|
392
|
-
props: {
|
|
402
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData },
|
|
393
403
|
})
|
|
394
404
|
const prevButton = wrapper.findAll('.mint-dataframe__page-btn')[0]
|
|
395
405
|
expect(prevButton.attributes('disabled')).toBeDefined()
|
|
396
406
|
})
|
|
397
407
|
|
|
398
408
|
it('should disable next button on last page', () => {
|
|
399
|
-
const lastPageState: PaginationState = { page: 2, pageSize: 2, total: 3 }
|
|
400
409
|
const wrapper = mount(DataFrame, {
|
|
401
|
-
props: {
|
|
410
|
+
props: { spec: { columns: mockColumns, pagination: paginationState }, data: mockData, page: 2 },
|
|
402
411
|
})
|
|
403
412
|
const nextButton = wrapper.findAll('.mint-dataframe__page-btn')[1]
|
|
404
413
|
expect(nextButton.attributes('disabled')).toBeDefined()
|
|
@@ -406,7 +415,7 @@ describe('DataFrame', () => {
|
|
|
406
415
|
|
|
407
416
|
it('should not show pagination when false', () => {
|
|
408
417
|
const wrapper = mount(DataFrame, {
|
|
409
|
-
props: {
|
|
418
|
+
props: { spec: { columns: mockColumns, pagination: false }, data: mockData },
|
|
410
419
|
})
|
|
411
420
|
expect(wrapper.find('.mint-dataframe__footer').exists()).toBe(false)
|
|
412
421
|
})
|
|
@@ -415,68 +424,64 @@ describe('DataFrame', () => {
|
|
|
415
424
|
describe('row selection', () => {
|
|
416
425
|
it('should show checkbox column when selectable', () => {
|
|
417
426
|
const wrapper = mount(DataFrame, {
|
|
418
|
-
props: {
|
|
427
|
+
props: { spec: { columns: mockColumns, selectable: true }, data: mockData },
|
|
419
428
|
})
|
|
420
429
|
expect(wrapper.find('.mint-dataframe__th--checkbox').exists()).toBe(true)
|
|
421
430
|
})
|
|
422
431
|
|
|
423
432
|
it('should show checkboxes for each row', () => {
|
|
424
433
|
const wrapper = mount(DataFrame, {
|
|
425
|
-
props: {
|
|
434
|
+
props: { spec: { columns: mockColumns, selectable: true }, data: mockData },
|
|
426
435
|
})
|
|
427
436
|
const checkboxes = wrapper.findAll('.mint-dataframe__checkbox')
|
|
428
437
|
// One for header + one for each row
|
|
429
438
|
expect(checkboxes.length).toBeGreaterThan(mockData.length)
|
|
430
439
|
})
|
|
431
440
|
|
|
432
|
-
it('should emit
|
|
441
|
+
it('should emit selected on row selection', async () => {
|
|
433
442
|
const wrapper = mount(DataFrame, {
|
|
434
|
-
props: {
|
|
443
|
+
props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
|
|
435
444
|
})
|
|
436
445
|
const rowCheckboxes = wrapper.findAll('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
|
|
437
446
|
await rowCheckboxes[0].trigger('change')
|
|
438
447
|
|
|
439
|
-
expect(wrapper.emitted('update:
|
|
440
|
-
const keys = wrapper.emitted('update:
|
|
448
|
+
expect(wrapper.emitted('update:selected')).toHaveLength(1)
|
|
449
|
+
const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
|
|
441
450
|
expect(keys).toContain(1)
|
|
442
451
|
})
|
|
443
452
|
|
|
444
453
|
it('should toggle selection on row checkbox click', async () => {
|
|
445
454
|
const wrapper = mount(DataFrame, {
|
|
446
455
|
props: {
|
|
456
|
+
spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
|
|
447
457
|
data: mockData,
|
|
448
|
-
|
|
449
|
-
selectable: true,
|
|
450
|
-
rowKey: 'id',
|
|
451
|
-
selectedKeys: [1],
|
|
458
|
+
selected: [1],
|
|
452
459
|
},
|
|
453
460
|
})
|
|
454
461
|
const rowCheckboxes = wrapper.findAll('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
|
|
455
462
|
await rowCheckboxes[0].trigger('change')
|
|
456
463
|
|
|
457
|
-
const keys = wrapper.emitted('update:
|
|
464
|
+
const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
|
|
458
465
|
expect(keys).not.toContain(1)
|
|
459
466
|
})
|
|
460
467
|
|
|
461
468
|
it('should select all rows with header checkbox', async () => {
|
|
462
469
|
const wrapper = mount(DataFrame, {
|
|
463
|
-
props: {
|
|
470
|
+
props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
|
|
464
471
|
})
|
|
465
472
|
const headerCheckbox = wrapper.find('.mint-dataframe__th--checkbox .mint-dataframe__checkbox input')
|
|
466
473
|
await headerCheckbox.trigger('change')
|
|
467
474
|
|
|
468
|
-
const keys = wrapper.emitted('update:
|
|
475
|
+
const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
|
|
469
476
|
expect(keys).toHaveLength(3)
|
|
470
477
|
})
|
|
471
478
|
|
|
472
479
|
it('should apply selected class to selected rows', () => {
|
|
473
480
|
const wrapper = mount(DataFrame, {
|
|
474
481
|
props: {
|
|
482
|
+
spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
|
|
475
483
|
data: mockData,
|
|
476
|
-
|
|
477
|
-
selectable: true,
|
|
478
|
-
rowKey: 'id',
|
|
479
|
-
selectedKeys: [1],
|
|
484
|
+
selected: [1],
|
|
480
485
|
},
|
|
481
486
|
})
|
|
482
487
|
const selectedRow = wrapper.find('.mint-dataframe__row--selected')
|
|
@@ -485,14 +490,14 @@ describe('DataFrame', () => {
|
|
|
485
490
|
|
|
486
491
|
it('should render row checkboxes as BaseCheckbox sm when selectable', () => {
|
|
487
492
|
const wrapper = mount(DataFrame, {
|
|
488
|
-
props: {
|
|
493
|
+
props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData },
|
|
489
494
|
})
|
|
490
495
|
expect(wrapper.find('.mint-dataframe__td--checkbox .mint-checkbox__box--sm').exists()).toBe(true)
|
|
491
496
|
})
|
|
492
497
|
|
|
493
498
|
it('should mark the header checkbox mixed when some rows are selected', () => {
|
|
494
499
|
const wrapper = mount(DataFrame, {
|
|
495
|
-
props: {
|
|
500
|
+
props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData, selected: [1] },
|
|
496
501
|
})
|
|
497
502
|
const header = wrapper.find('.mint-dataframe__th--checkbox input')
|
|
498
503
|
expect(header.attributes('aria-checked')).toBe('mixed')
|
|
@@ -500,10 +505,10 @@ describe('DataFrame', () => {
|
|
|
500
505
|
|
|
501
506
|
it('should select all rows when the mixed header checkbox is clicked', async () => {
|
|
502
507
|
const wrapper = mount(DataFrame, {
|
|
503
|
-
props: {
|
|
508
|
+
props: { spec: { columns: mockColumns, selectable: true, rowKey: 'id' }, data: mockData, selected: [1] },
|
|
504
509
|
})
|
|
505
510
|
await wrapper.find('.mint-dataframe__th--checkbox input').setValue(true)
|
|
506
|
-
const keys = wrapper.emitted('update:
|
|
511
|
+
const keys = wrapper.emitted('update:selected')?.[0]?.[0] as number[]
|
|
507
512
|
expect(keys).toHaveLength(3)
|
|
508
513
|
})
|
|
509
514
|
})
|
|
@@ -511,7 +516,7 @@ describe('DataFrame', () => {
|
|
|
511
516
|
describe('events', () => {
|
|
512
517
|
it('should emit row-click event', async () => {
|
|
513
518
|
const wrapper = mount(DataFrame, {
|
|
514
|
-
props: {
|
|
519
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
515
520
|
})
|
|
516
521
|
const firstRow = wrapper.findAll('.mint-dataframe__row')[0]
|
|
517
522
|
await firstRow.trigger('click')
|
|
@@ -524,7 +529,7 @@ describe('DataFrame', () => {
|
|
|
524
529
|
|
|
525
530
|
it('should emit cell-click event', async () => {
|
|
526
531
|
const wrapper = mount(DataFrame, {
|
|
527
|
-
props: {
|
|
532
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
528
533
|
})
|
|
529
534
|
const firstCell = wrapper.find('.mint-dataframe__td')
|
|
530
535
|
await firstCell.trigger('click')
|
|
@@ -538,7 +543,7 @@ describe('DataFrame', () => {
|
|
|
538
543
|
|
|
539
544
|
it('should emit row-click from cell clicks when clickableRows is true', async () => {
|
|
540
545
|
const wrapper = mount(DataFrame, {
|
|
541
|
-
props: {
|
|
546
|
+
props: { spec: { columns: mockColumns, clickableRows: true }, data: mockData },
|
|
542
547
|
})
|
|
543
548
|
const firstCell = wrapper.find('.mint-dataframe__td')
|
|
544
549
|
await firstCell.trigger('click')
|
|
@@ -552,7 +557,7 @@ describe('DataFrame', () => {
|
|
|
552
557
|
|
|
553
558
|
it('should make clickable rows keyboard accessible', async () => {
|
|
554
559
|
const wrapper = mount(DataFrame, {
|
|
555
|
-
props: {
|
|
560
|
+
props: { spec: { columns: mockColumns, clickableRows: true }, data: mockData },
|
|
556
561
|
})
|
|
557
562
|
const firstRow = wrapper.find('.mint-dataframe__row')
|
|
558
563
|
expect(firstRow.attributes('tabindex')).toBe('0')
|
|
@@ -566,7 +571,7 @@ describe('DataFrame', () => {
|
|
|
566
571
|
|
|
567
572
|
it('should keep non-clickable rows out of the tab order', () => {
|
|
568
573
|
const wrapper = mount(DataFrame, {
|
|
569
|
-
props: {
|
|
574
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
570
575
|
})
|
|
571
576
|
const firstRow = wrapper.find('.mint-dataframe__row')
|
|
572
577
|
expect(firstRow.attributes('tabindex')).toBeUndefined()
|
|
@@ -577,7 +582,7 @@ describe('DataFrame', () => {
|
|
|
577
582
|
describe('empty state', () => {
|
|
578
583
|
it('should show empty state when no data', () => {
|
|
579
584
|
const wrapper = mount(DataFrame, {
|
|
580
|
-
props: {
|
|
585
|
+
props: { spec: { columns: mockColumns }, data: [] },
|
|
581
586
|
})
|
|
582
587
|
expect(wrapper.find('.mint-dataframe__state').exists()).toBe(true)
|
|
583
588
|
expect(wrapper.find('[data-state="empty"]').exists()).toBe(true)
|
|
@@ -585,28 +590,28 @@ describe('DataFrame', () => {
|
|
|
585
590
|
|
|
586
591
|
it('should display empty text', () => {
|
|
587
592
|
const wrapper = mount(DataFrame, {
|
|
588
|
-
props: {
|
|
593
|
+
props: { spec: { columns: mockColumns }, data: [] },
|
|
589
594
|
})
|
|
590
595
|
expect(wrapper.find('.mint-empty-state__title').text()).toBe('No data')
|
|
591
596
|
})
|
|
592
597
|
|
|
593
598
|
it('should use custom empty text', () => {
|
|
594
599
|
const wrapper = mount(DataFrame, {
|
|
595
|
-
props: {
|
|
600
|
+
props: { spec: { columns: mockColumns }, data: [], emptyText: 'No records found' },
|
|
596
601
|
})
|
|
597
602
|
expect(wrapper.find('.mint-empty-state__title').text()).toBe('No records found')
|
|
598
603
|
})
|
|
599
604
|
|
|
600
605
|
it('should not show empty state when loading', () => {
|
|
601
606
|
const wrapper = mount(DataFrame, {
|
|
602
|
-
props: {
|
|
607
|
+
props: { spec: { columns: mockColumns }, data: [], loading: true },
|
|
603
608
|
})
|
|
604
609
|
expect(wrapper.find('[data-state="empty"]').exists()).toBe(false)
|
|
605
610
|
})
|
|
606
611
|
|
|
607
612
|
it('should render the empty slot instead of the default placeholder', () => {
|
|
608
613
|
const wrapper = mount(DataFrame, {
|
|
609
|
-
props: {
|
|
614
|
+
props: { spec: { columns: mockColumns }, data: [] },
|
|
610
615
|
slots: { empty: '<p class="custom-empty">Nothing here</p>' },
|
|
611
616
|
})
|
|
612
617
|
expect(wrapper.find('.custom-empty').exists()).toBe(true)
|
|
@@ -617,14 +622,14 @@ describe('DataFrame', () => {
|
|
|
617
622
|
describe('loading state', () => {
|
|
618
623
|
it('should show loading overlay', () => {
|
|
619
624
|
const wrapper = mount(DataFrame, {
|
|
620
|
-
props: {
|
|
625
|
+
props: { spec: { columns: mockColumns }, data: mockData, loading: true },
|
|
621
626
|
})
|
|
622
627
|
expect(wrapper.find('.mint-dataframe__loading').exists()).toBe(true)
|
|
623
628
|
})
|
|
624
629
|
|
|
625
630
|
it('should show loading spinner', () => {
|
|
626
631
|
const wrapper = mount(DataFrame, {
|
|
627
|
-
props: {
|
|
632
|
+
props: { spec: { columns: mockColumns }, data: mockData, loading: true },
|
|
628
633
|
})
|
|
629
634
|
expect(wrapper.find('.mint-spinner').exists()).toBe(true)
|
|
630
635
|
})
|
|
@@ -633,14 +638,14 @@ describe('DataFrame', () => {
|
|
|
633
638
|
describe('error state', () => {
|
|
634
639
|
it('should render nothing extra when error is not passed', () => {
|
|
635
640
|
const wrapper = mount(DataFrame, {
|
|
636
|
-
props: {
|
|
641
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
637
642
|
})
|
|
638
643
|
expect(wrapper.find('[data-state="error"]').exists()).toBe(false)
|
|
639
644
|
})
|
|
640
645
|
|
|
641
646
|
it('should replace the empty state with an error state', () => {
|
|
642
647
|
const wrapper = mount(DataFrame, {
|
|
643
|
-
props: {
|
|
648
|
+
props: { spec: { columns: mockColumns }, data: [], error: 'Request failed' },
|
|
644
649
|
})
|
|
645
650
|
expect(wrapper.find('[data-state="error"]').exists()).toBe(true)
|
|
646
651
|
expect(wrapper.find('[data-state="empty"]').exists()).toBe(false)
|
|
@@ -649,14 +654,14 @@ describe('DataFrame', () => {
|
|
|
649
654
|
|
|
650
655
|
it('should take precedence over the empty state even with rows present', () => {
|
|
651
656
|
const wrapper = mount(DataFrame, {
|
|
652
|
-
props: {
|
|
657
|
+
props: { spec: { columns: mockColumns }, data: mockData, error: 'Boom' },
|
|
653
658
|
})
|
|
654
659
|
expect(wrapper.find('[data-state="error"]').exists()).toBe(true)
|
|
655
660
|
})
|
|
656
661
|
|
|
657
662
|
it('should render the error slot with the message', () => {
|
|
658
663
|
const wrapper = mount(DataFrame, {
|
|
659
|
-
props: {
|
|
664
|
+
props: { spec: { columns: mockColumns }, data: [], error: 'Boom' },
|
|
660
665
|
slots: { error: '<p class="custom-error">custom error</p>' },
|
|
661
666
|
})
|
|
662
667
|
expect(wrapper.find('.custom-error').exists()).toBe(true)
|
|
@@ -666,21 +671,21 @@ describe('DataFrame', () => {
|
|
|
666
671
|
describe('styling props', () => {
|
|
667
672
|
it('should not apply striped when striped is false', () => {
|
|
668
673
|
const wrapper = mount(DataFrame, {
|
|
669
|
-
props: {
|
|
674
|
+
props: { spec: { columns: mockColumns, striped: false }, data: mockData },
|
|
670
675
|
})
|
|
671
676
|
expect(wrapper.find('.mint-dataframe__row--striped').exists()).toBe(false)
|
|
672
677
|
})
|
|
673
678
|
|
|
674
679
|
it('should not apply bordered when bordered is false', () => {
|
|
675
680
|
const wrapper = mount(DataFrame, {
|
|
676
|
-
props: {
|
|
681
|
+
props: { spec: { columns: mockColumns, bordered: false }, data: mockData },
|
|
677
682
|
})
|
|
678
683
|
expect(wrapper.find('.mint-dataframe--bordered').exists()).toBe(false)
|
|
679
684
|
})
|
|
680
685
|
|
|
681
686
|
it('should apply size class to cells', () => {
|
|
682
687
|
const wrapper = mount(DataFrame, {
|
|
683
|
-
props: {
|
|
688
|
+
props: { spec: { columns: mockColumns, size: 'sm' }, data: mockData },
|
|
684
689
|
})
|
|
685
690
|
const cell = wrapper.find('.mint-dataframe__td')
|
|
686
691
|
expect(cell.classes()).toContain('mint-dataframe__td--sm')
|
|
@@ -688,14 +693,14 @@ describe('DataFrame', () => {
|
|
|
688
693
|
|
|
689
694
|
it('should apply sticky header class', () => {
|
|
690
695
|
const wrapper = mount(DataFrame, {
|
|
691
|
-
props: {
|
|
696
|
+
props: { spec: { columns: mockColumns, stickyHeader: true }, data: mockData },
|
|
692
697
|
})
|
|
693
698
|
expect(wrapper.find('.mint-dataframe__thead--sticky').exists()).toBe(true)
|
|
694
699
|
})
|
|
695
700
|
|
|
696
701
|
it('should apply maxHeight style', () => {
|
|
697
702
|
const wrapper = mount(DataFrame, {
|
|
698
|
-
props: {
|
|
703
|
+
props: { spec: { columns: mockColumns, maxHeight: 400 }, data: mockData },
|
|
699
704
|
})
|
|
700
705
|
const tableWrapper = wrapper.find('.mint-dataframe__table-wrapper')
|
|
701
706
|
expect(tableWrapper.attributes('style')).toContain('max-height: 400px')
|
|
@@ -703,7 +708,7 @@ describe('DataFrame', () => {
|
|
|
703
708
|
|
|
704
709
|
it('should support string maxHeight', () => {
|
|
705
710
|
const wrapper = mount(DataFrame, {
|
|
706
|
-
props: {
|
|
711
|
+
props: { spec: { columns: mockColumns, maxHeight: '50vh' }, data: mockData },
|
|
707
712
|
})
|
|
708
713
|
const tableWrapper = wrapper.find('.mint-dataframe__table-wrapper')
|
|
709
714
|
expect(tableWrapper.attributes('style')).toContain('max-height: 50vh')
|
|
@@ -720,7 +725,7 @@ describe('DataFrame', () => {
|
|
|
720
725
|
{ key: 'user.email', label: 'Email' },
|
|
721
726
|
]
|
|
722
727
|
const wrapper = mount(DataFrame, {
|
|
723
|
-
props: {
|
|
728
|
+
props: { spec: { columns: nestedColumns }, data: nestedData },
|
|
724
729
|
})
|
|
725
730
|
const cells = wrapper.findAll('.mint-dataframe__td')
|
|
726
731
|
expect(cells[0].text()).toBe('Alice')
|
|
@@ -732,10 +737,8 @@ describe('DataFrame', () => {
|
|
|
732
737
|
it('should use string rowKey', () => {
|
|
733
738
|
const wrapper = mount(DataFrame, {
|
|
734
739
|
props: {
|
|
740
|
+
spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
|
|
735
741
|
data: mockData,
|
|
736
|
-
columns: mockColumns,
|
|
737
|
-
selectable: true,
|
|
738
|
-
rowKey: 'id',
|
|
739
742
|
},
|
|
740
743
|
})
|
|
741
744
|
expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
|
|
@@ -744,10 +747,8 @@ describe('DataFrame', () => {
|
|
|
744
747
|
it('should use function rowKey', () => {
|
|
745
748
|
const wrapper = mount(DataFrame, {
|
|
746
749
|
props: {
|
|
750
|
+
spec: { columns: mockColumns, selectable: true, rowKey: (row) => `row-${row.id}` },
|
|
747
751
|
data: mockData,
|
|
748
|
-
columns: mockColumns,
|
|
749
|
-
selectable: true,
|
|
750
|
-
rowKey: (row) => `row-${row.id}`,
|
|
751
752
|
},
|
|
752
753
|
})
|
|
753
754
|
expect(wrapper.find('.mint-dataframe').exists()).toBe(true)
|
|
@@ -757,7 +758,7 @@ describe('DataFrame', () => {
|
|
|
757
758
|
describe('slots', () => {
|
|
758
759
|
it('should support header slot', () => {
|
|
759
760
|
const wrapper = mount(DataFrame, {
|
|
760
|
-
props: {
|
|
761
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
761
762
|
slots: {
|
|
762
763
|
'header-name': '<div class="custom-header">Custom Name</div>',
|
|
763
764
|
},
|
|
@@ -768,7 +769,7 @@ describe('DataFrame', () => {
|
|
|
768
769
|
|
|
769
770
|
it('should support cell slot', () => {
|
|
770
771
|
const wrapper = mount(DataFrame, {
|
|
771
|
-
props: {
|
|
772
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
772
773
|
slots: {
|
|
773
774
|
'cell-name': '<div class="custom-cell">{{ value }}</div>',
|
|
774
775
|
},
|
|
@@ -778,7 +779,7 @@ describe('DataFrame', () => {
|
|
|
778
779
|
|
|
779
780
|
it('should support empty slot', () => {
|
|
780
781
|
const wrapper = mount(DataFrame, {
|
|
781
|
-
props: {
|
|
782
|
+
props: { spec: { columns: mockColumns }, data: [] },
|
|
782
783
|
slots: {
|
|
783
784
|
empty: '<div class="custom-empty">Nothing here</div>',
|
|
784
785
|
},
|
|
@@ -789,7 +790,7 @@ describe('DataFrame', () => {
|
|
|
789
790
|
|
|
790
791
|
it('should support loading slot', () => {
|
|
791
792
|
const wrapper = mount(DataFrame, {
|
|
792
|
-
props: {
|
|
793
|
+
props: { spec: { columns: mockColumns }, data: mockData, loading: true },
|
|
793
794
|
slots: {
|
|
794
795
|
loading: '<div class="custom-loading">Loading...</div>',
|
|
795
796
|
},
|
|
@@ -800,9 +801,8 @@ describe('DataFrame', () => {
|
|
|
800
801
|
it('should support footer slot', () => {
|
|
801
802
|
const wrapper = mount(DataFrame, {
|
|
802
803
|
props: {
|
|
804
|
+
spec: { columns: mockColumns, pagination: { pageSize: 2 } },
|
|
803
805
|
data: mockData,
|
|
804
|
-
columns: mockColumns,
|
|
805
|
-
pagination: { page: 1, pageSize: 2, total: 3 },
|
|
806
806
|
},
|
|
807
807
|
slots: {
|
|
808
808
|
footer: '<div class="custom-footer">Custom Footer</div>',
|
|
@@ -818,16 +818,23 @@ describe('DataFrame', () => {
|
|
|
818
818
|
{ id: 1, name: null, age: undefined, email: 'test@example.com' },
|
|
819
819
|
]
|
|
820
820
|
const wrapper = mount(DataFrame, {
|
|
821
|
-
props: {
|
|
821
|
+
props: { spec: { columns: mockColumns }, data: dataWithNulls },
|
|
822
822
|
})
|
|
823
823
|
const cells = wrapper.findAll('.mint-dataframe__td')
|
|
824
824
|
expect(cells[0].text()).toBe('')
|
|
825
825
|
expect(cells[1].text()).toBe('')
|
|
826
826
|
})
|
|
827
827
|
|
|
828
|
+
it('should derive one column per key of the first row when the spec has no columns', () => {
|
|
829
|
+
const wrapper = mount(DataFrame, {
|
|
830
|
+
props: { data: mockData },
|
|
831
|
+
})
|
|
832
|
+
expect(wrapper.findAll('.mint-dataframe__th').map(th => th.text())).toEqual(['id', 'name', 'age', 'email'])
|
|
833
|
+
})
|
|
834
|
+
|
|
828
835
|
it('should handle empty columns array', () => {
|
|
829
836
|
const wrapper = mount(DataFrame, {
|
|
830
|
-
props: {
|
|
837
|
+
props: { spec: { columns: [] }, data: mockData },
|
|
831
838
|
})
|
|
832
839
|
expect(wrapper.find('.mint-dataframe__table').exists()).toBe(true)
|
|
833
840
|
})
|
|
@@ -840,9 +847,8 @@ describe('DataFrame', () => {
|
|
|
840
847
|
}))
|
|
841
848
|
const wrapper = mount(DataFrame, {
|
|
842
849
|
props: {
|
|
850
|
+
spec: { columns: mockColumns, pagination: { pageSize: 10 } },
|
|
843
851
|
data: largeData,
|
|
844
|
-
columns: mockColumns,
|
|
845
|
-
pagination: { page: 1, pageSize: 10, total: 1000 },
|
|
846
852
|
},
|
|
847
853
|
})
|
|
848
854
|
const rows = wrapper.findAll('.mint-dataframe__row')
|
|
@@ -852,10 +858,8 @@ describe('DataFrame', () => {
|
|
|
852
858
|
it('should handle search with filtered pagination', async () => {
|
|
853
859
|
const wrapper = mount(DataFrame, {
|
|
854
860
|
props: {
|
|
861
|
+
spec: { columns: mockColumns, searchable: true, pagination: { pageSize: 2 } },
|
|
855
862
|
data: mockData,
|
|
856
|
-
columns: mockColumns,
|
|
857
|
-
searchable: true,
|
|
858
|
-
pagination: { page: 1, pageSize: 2, total: 3 },
|
|
859
863
|
},
|
|
860
864
|
})
|
|
861
865
|
const searchInput = wrapper.find('.mint-dataframe__search')
|
|
@@ -868,10 +872,8 @@ describe('DataFrame', () => {
|
|
|
868
872
|
it('should stop propagation on checkbox clicks', async () => {
|
|
869
873
|
const wrapper = mount(DataFrame, {
|
|
870
874
|
props: {
|
|
875
|
+
spec: { columns: mockColumns, selectable: true, rowKey: 'id' },
|
|
871
876
|
data: mockData,
|
|
872
|
-
columns: mockColumns,
|
|
873
|
-
selectable: true,
|
|
874
|
-
rowKey: 'id',
|
|
875
877
|
},
|
|
876
878
|
})
|
|
877
879
|
const checkbox = wrapper.find('.mint-dataframe__td--checkbox .mint-dataframe__checkbox input')
|
|
@@ -885,14 +887,14 @@ describe('DataFrame', () => {
|
|
|
885
887
|
describe('row deletion', () => {
|
|
886
888
|
it('should not show an actions column by default', () => {
|
|
887
889
|
const wrapper = mount(DataFrame, {
|
|
888
|
-
props: {
|
|
890
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
889
891
|
})
|
|
890
892
|
expect(wrapper.find('.mint-dataframe__td--actions').exists()).toBe(false)
|
|
891
893
|
})
|
|
892
894
|
|
|
893
895
|
it('should show a delete button per row when deletable', () => {
|
|
894
896
|
const wrapper = mount(DataFrame, {
|
|
895
|
-
props: {
|
|
897
|
+
props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
|
|
896
898
|
})
|
|
897
899
|
expect(wrapper.find('.mint-dataframe__th--actions').exists()).toBe(true)
|
|
898
900
|
expect(wrapper.findAll('.mint-dataframe__delete-btn')).toHaveLength(mockData.length)
|
|
@@ -900,7 +902,7 @@ describe('DataFrame', () => {
|
|
|
900
902
|
|
|
901
903
|
it('should emit delete-row with the row and index', async () => {
|
|
902
904
|
const wrapper = mount(DataFrame, {
|
|
903
|
-
props: {
|
|
905
|
+
props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
|
|
904
906
|
})
|
|
905
907
|
await wrapper.findAll('.mint-dataframe__delete-btn')[1].trigger('click')
|
|
906
908
|
|
|
@@ -912,7 +914,7 @@ describe('DataFrame', () => {
|
|
|
912
914
|
|
|
913
915
|
it('should not emit row-click when the delete button is clicked', async () => {
|
|
914
916
|
const wrapper = mount(DataFrame, {
|
|
915
|
-
props: {
|
|
917
|
+
props: { spec: { columns: mockColumns, deletable: true }, data: mockData },
|
|
916
918
|
})
|
|
917
919
|
await wrapper.find('.mint-dataframe__delete-btn').trigger('click')
|
|
918
920
|
expect(wrapper.emitted('row-click')).toBeUndefined()
|
|
@@ -920,7 +922,7 @@ describe('DataFrame', () => {
|
|
|
920
922
|
|
|
921
923
|
it('should use a custom delete label', () => {
|
|
922
924
|
const wrapper = mount(DataFrame, {
|
|
923
|
-
props: {
|
|
925
|
+
props: { spec: { columns: mockColumns, deletable: true, deleteLabel: 'Remove' }, data: mockData },
|
|
924
926
|
})
|
|
925
927
|
expect(wrapper.find('.mint-dataframe__delete-btn').attributes('aria-label')).toBe('Remove')
|
|
926
928
|
})
|
|
@@ -929,21 +931,21 @@ describe('DataFrame', () => {
|
|
|
929
931
|
describe('column resizing', () => {
|
|
930
932
|
it('should not show resize handles by default', () => {
|
|
931
933
|
const wrapper = mount(DataFrame, {
|
|
932
|
-
props: {
|
|
934
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
933
935
|
})
|
|
934
936
|
expect(wrapper.find('.mint-dataframe__resize-handle').exists()).toBe(false)
|
|
935
937
|
})
|
|
936
938
|
|
|
937
939
|
it('should show a resize handle per column when resizable', () => {
|
|
938
940
|
const wrapper = mount(DataFrame, {
|
|
939
|
-
props: {
|
|
941
|
+
props: { spec: { columns: mockColumns, resizable: true }, data: mockData },
|
|
940
942
|
})
|
|
941
943
|
expect(wrapper.findAll('.mint-dataframe__resize-handle')).toHaveLength(mockColumns.length)
|
|
942
944
|
})
|
|
943
945
|
|
|
944
946
|
it('should emit update:columnWidths while dragging a handle', async () => {
|
|
945
947
|
const wrapper = mount(DataFrame, {
|
|
946
|
-
props: {
|
|
948
|
+
props: { spec: { columns: mockColumns, resizable: true }, data: mockData },
|
|
947
949
|
})
|
|
948
950
|
const handle = wrapper.findAll('.mint-dataframe__resize-handle')[0]
|
|
949
951
|
await handle.trigger('mousedown', { clientX: 100 })
|
|
@@ -959,9 +961,8 @@ describe('DataFrame', () => {
|
|
|
959
961
|
it('should honor controlled columnWidths', () => {
|
|
960
962
|
const wrapper = mount(DataFrame, {
|
|
961
963
|
props: {
|
|
964
|
+
spec: { columns: mockColumns, resizable: true },
|
|
962
965
|
data: mockData,
|
|
963
|
-
columns: mockColumns,
|
|
964
|
-
resizable: true,
|
|
965
966
|
columnWidths: { name: 321 },
|
|
966
967
|
},
|
|
967
968
|
})
|
|
@@ -972,9 +973,8 @@ describe('DataFrame', () => {
|
|
|
972
973
|
it('should not trigger sort when the resize handle is clicked', async () => {
|
|
973
974
|
const wrapper = mount(DataFrame, {
|
|
974
975
|
props: {
|
|
976
|
+
spec: { columns: [{ key: 'name', label: 'Name', sortable: true }], resizable: true },
|
|
975
977
|
data: mockData,
|
|
976
|
-
columns: [{ key: 'name', label: 'Name', sortable: true }],
|
|
977
|
-
resizable: true,
|
|
978
978
|
},
|
|
979
979
|
})
|
|
980
980
|
await wrapper.find('.mint-dataframe__resize-handle').trigger('click')
|
|
@@ -984,9 +984,8 @@ describe('DataFrame', () => {
|
|
|
984
984
|
it('should expose the resize handle as a slider with its current width', () => {
|
|
985
985
|
const wrapper = mount(DataFrame, {
|
|
986
986
|
props: {
|
|
987
|
+
spec: { columns: [{ key: 'name', label: 'Name', minWidth: 80 }], resizable: true },
|
|
987
988
|
data: mockData,
|
|
988
|
-
columns: [{ key: 'name', label: 'Name', minWidth: 80 }],
|
|
989
|
-
resizable: true,
|
|
990
989
|
columnWidths: { name: 240 },
|
|
991
990
|
},
|
|
992
991
|
})
|
|
@@ -1002,9 +1001,8 @@ describe('DataFrame', () => {
|
|
|
1002
1001
|
it('should resize a column with the arrow keys, clamped to the minimum width', async () => {
|
|
1003
1002
|
const wrapper = mount(DataFrame, {
|
|
1004
1003
|
props: {
|
|
1004
|
+
spec: { columns: [{ key: 'name', label: 'Name' }], resizable: true },
|
|
1005
1005
|
data: mockData,
|
|
1006
|
-
columns: [{ key: 'name', label: 'Name' }],
|
|
1007
|
-
resizable: true,
|
|
1008
1006
|
columnWidths: { name: 120 },
|
|
1009
1007
|
},
|
|
1010
1008
|
})
|
|
@@ -1028,8 +1026,8 @@ describe('DataFrame', () => {
|
|
|
1028
1026
|
it('should render sortable headers as buttons and plain headers without one', () => {
|
|
1029
1027
|
const wrapper = mount(DataFrame, {
|
|
1030
1028
|
props: {
|
|
1029
|
+
spec: { columns: [...sortableColumn, { key: 'age', label: 'Age' }] },
|
|
1031
1030
|
data: mockData,
|
|
1032
|
-
columns: [...sortableColumn, { key: 'age', label: 'Age' }],
|
|
1033
1031
|
},
|
|
1034
1032
|
})
|
|
1035
1033
|
|
|
@@ -1041,8 +1039,8 @@ describe('DataFrame', () => {
|
|
|
1041
1039
|
it('should reflect the sort direction with aria-sort', async () => {
|
|
1042
1040
|
const wrapper = mount(DataFrame, {
|
|
1043
1041
|
props: {
|
|
1042
|
+
spec: { columns: [...sortableColumn, { key: 'age', label: 'Age' }] },
|
|
1044
1043
|
data: mockData,
|
|
1045
|
-
columns: [...sortableColumn, { key: 'age', label: 'Age' }],
|
|
1046
1044
|
},
|
|
1047
1045
|
})
|
|
1048
1046
|
|
|
@@ -1062,7 +1060,7 @@ describe('DataFrame', () => {
|
|
|
1062
1060
|
|
|
1063
1061
|
it('should sort from the keyboard with Enter and Space', async () => {
|
|
1064
1062
|
const wrapper = mount(DataFrame, {
|
|
1065
|
-
props: {
|
|
1063
|
+
props: { spec: { columns: sortableColumn }, data: mockData },
|
|
1066
1064
|
})
|
|
1067
1065
|
|
|
1068
1066
|
const button = wrapper.get('.mint-dataframe__th-button')
|
|
@@ -1082,7 +1080,7 @@ describe('DataFrame', () => {
|
|
|
1082
1080
|
it('falls back to md when no settings store is installed', () => {
|
|
1083
1081
|
setActivePinia(undefined)
|
|
1084
1082
|
const wrapper = mount(DataFrame, {
|
|
1085
|
-
props: {
|
|
1083
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
1086
1084
|
})
|
|
1087
1085
|
expect(wrapper.find('.mint-dataframe__td--md').exists()).toBe(true)
|
|
1088
1086
|
})
|
|
@@ -1092,7 +1090,7 @@ describe('DataFrame', () => {
|
|
|
1092
1090
|
useSettingsStore().tableDensity = 'compact'
|
|
1093
1091
|
|
|
1094
1092
|
const wrapper = mount(DataFrame, {
|
|
1095
|
-
props: {
|
|
1093
|
+
props: { spec: { columns: mockColumns }, data: mockData },
|
|
1096
1094
|
})
|
|
1097
1095
|
expect(wrapper.find('.mint-dataframe__td--sm').exists()).toBe(true)
|
|
1098
1096
|
expect(wrapper.find('.mint-dataframe__td--md').exists()).toBe(false)
|
|
@@ -1103,7 +1101,7 @@ describe('DataFrame', () => {
|
|
|
1103
1101
|
useSettingsStore().tableDensity = 'compact'
|
|
1104
1102
|
|
|
1105
1103
|
const wrapper = mount(DataFrame, {
|
|
1106
|
-
props: {
|
|
1104
|
+
props: { spec: { columns: mockColumns, size: 'lg' }, data: mockData },
|
|
1107
1105
|
})
|
|
1108
1106
|
expect(wrapper.find('.mint-dataframe__td--lg').exists()).toBe(true)
|
|
1109
1107
|
})
|
|
@@ -1116,7 +1114,7 @@ describe('DataFrame', () => {
|
|
|
1116
1114
|
{ key: 'conc', label: 'Conc', unit: 'µM', type: 'number' },
|
|
1117
1115
|
{ key: 'rt', label: 'RT', unit: 'min', type: 'number', precision: 2 },
|
|
1118
1116
|
]
|
|
1119
|
-
const mountMeasures = () => mount(DataFrame, { props: {
|
|
1117
|
+
const mountMeasures = () => mount(DataFrame, { props: { spec: { columns: measureColumns }, data: measureData } })
|
|
1120
1118
|
|
|
1121
1119
|
it('should render the unit in its own element when a column declares a unit', () => {
|
|
1122
1120
|
const header = mountMeasures().findAll('.mint-dataframe__th')[1]
|
|
@@ -1150,7 +1148,7 @@ describe('DataFrame', () => {
|
|
|
1150
1148
|
|
|
1151
1149
|
it('should keep an explicit align when the column type is number', () => {
|
|
1152
1150
|
const wrapper = mount(DataFrame, {
|
|
1153
|
-
props: {
|
|
1151
|
+
props: { spec: { columns: [{ key: 'conc', label: 'Conc', type: 'number', align: 'center' }] }, data: measureData },
|
|
1154
1152
|
})
|
|
1155
1153
|
expect(wrapper.find('.mint-dataframe__td').classes()).toContain('mint-dataframe__td--align-center')
|
|
1156
1154
|
})
|
|
@@ -1173,8 +1171,8 @@ describe('DataFrame', () => {
|
|
|
1173
1171
|
it('should let the formatter win when a column declares both formatter and precision', () => {
|
|
1174
1172
|
const wrapper = mount(DataFrame, {
|
|
1175
1173
|
props: {
|
|
1174
|
+
spec: { columns: [{ key: 'rt', label: 'RT', precision: 2, formatter: (v: unknown) => `~${String(v)}` }] },
|
|
1176
1175
|
data: measureData,
|
|
1177
|
-
columns: [{ key: 'rt', label: 'RT', precision: 2, formatter: (v: unknown) => `~${String(v)}` }],
|
|
1178
1176
|
},
|
|
1179
1177
|
})
|
|
1180
1178
|
expect(wrapper.find('.mint-dataframe__td').text()).toBe('~2.4')
|
|
@@ -1182,7 +1180,7 @@ describe('DataFrame', () => {
|
|
|
1182
1180
|
|
|
1183
1181
|
it('should leave non-numeric values untouched when a column declares precision', () => {
|
|
1184
1182
|
const wrapper = mount(DataFrame, {
|
|
1185
|
-
props: {
|
|
1183
|
+
props: { spec: { columns: [{ key: 'rt', label: 'RT', type: 'number', precision: 2 }] }, data: [{ rt: 'n/a' }] },
|
|
1186
1184
|
})
|
|
1187
1185
|
expect(wrapper.find('.mint-dataframe__td').text()).toBe('n/a')
|
|
1188
1186
|
})
|