@morscherlab/mint-sdk 1.0.0-alpha.8 → 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -15
- package/dist/{auth-BYmxZdJl.js → auth-DsI0rQ7_.js} +6 -6
- package/dist/auth-DsI0rQ7_.js.map +1 -0
- package/dist/components/index.js +2 -2
- package/dist/{components-CKf-UpGi.js → components-CzbQQPCb.js} +1429 -1429
- package/dist/components-CzbQQPCb.js.map +1 -0
- package/dist/composables/index.js +2 -2
- package/dist/composables/usePlatformContext.d.ts +3 -3
- package/dist/{composables-D0QfFzq1.js → composables-BXklV5ii.js} +3 -3
- package/dist/{composables-D0QfFzq1.js.map → composables-BXklV5ii.js.map} +1 -1
- package/dist/index.js +4 -4
- package/dist/install.d.ts +3 -3
- package/dist/install.js +5 -5
- package/dist/install.js.map +1 -1
- package/dist/stores/auth.d.ts +1 -1
- package/dist/stores/index.js +1 -1
- package/dist/stores/settings.d.ts +1 -1
- package/dist/styles.css +5388 -5388
- package/dist/types/platform.d.ts +1 -1
- package/dist/{useScheduleDrag-DAJueTbK.js → useScheduleDrag-CxBeqYcu.js} +331 -331
- package/dist/useScheduleDrag-CxBeqYcu.js.map +1 -0
- package/package.json +2 -2
- package/src/__tests__/components/AppLayout.test.ts +23 -23
- package/src/__tests__/components/AppSidebar.test.ts +29 -29
- package/src/__tests__/components/AppTopBar.test.ts +45 -45
- package/src/__tests__/components/BaseInput.test.ts +2 -2
- package/src/__tests__/components/BasePill.test.ts +37 -37
- package/src/__tests__/components/Calendar.test.ts +52 -52
- package/src/__tests__/components/CollapsibleCard.test.ts +81 -81
- package/src/__tests__/components/DataFrame.test.ts +80 -80
- package/src/__tests__/components/DropdownButton.test.ts +80 -80
- package/src/__tests__/composables/usePlatformContext.test.ts +1 -1
- package/src/components/AlertBox.story.vue +1 -1
- package/src/components/AlertBox.vue +14 -14
- package/src/components/AppAvatarMenu.vue +26 -26
- package/src/components/AppContainer.vue +3 -3
- package/src/components/AppLayout.vue +7 -7
- package/src/components/AppPageSelector.vue +30 -30
- package/src/components/AppPillNav.vue +10 -10
- package/src/components/AppPluginSwitcher.vue +31 -31
- package/src/components/AppSidebar.vue +8 -8
- package/src/components/AppTopBar.story.vue +7 -7
- package/src/components/AppTopBar.vue +102 -102
- package/src/components/AuditTrail.vue +19 -19
- package/src/components/AutoGroupModal.vue +76 -76
- package/src/components/Avatar.vue +6 -6
- package/src/components/BaseButton.vue +6 -6
- package/src/components/BaseCheckbox.vue +9 -9
- package/src/components/BaseInput.vue +4 -4
- package/src/components/BaseModal.story.vue +1 -1
- package/src/components/BaseModal.vue +14 -14
- package/src/components/BasePill.vue +9 -9
- package/src/components/BaseRadioGroup.vue +21 -21
- package/src/components/BaseSelect.vue +6 -6
- package/src/components/BaseSlider.vue +8 -8
- package/src/components/BaseTabs.vue +7 -7
- package/src/components/BaseTextarea.vue +5 -5
- package/src/components/BaseToggle.vue +10 -10
- package/src/components/BatchProgressList.vue +25 -25
- package/src/components/Breadcrumb.vue +8 -8
- package/src/components/Calendar.vue +19 -19
- package/src/components/ChartContainer.vue +9 -9
- package/src/components/ChemicalFormula.vue +7 -7
- package/src/components/CollapsibleCard.vue +20 -20
- package/src/components/ColorSlider.vue +6 -6
- package/src/components/ConcentrationInput.vue +12 -12
- package/src/components/ConfirmDialog.story.vue +1 -1
- package/src/components/ConfirmDialog.vue +7 -7
- package/src/components/DataFrame.vue +40 -40
- package/src/components/DatePicker.vue +29 -29
- package/src/components/DateTimePicker.vue +41 -41
- package/src/components/Divider.vue +9 -9
- package/src/components/DoseCalculator.vue +66 -66
- package/src/components/DropdownButton.vue +19 -19
- package/src/components/EmptyState.vue +9 -9
- package/src/components/ExperimentCodeBadge.vue +3 -3
- package/src/components/ExperimentDataViewer.vue +25 -25
- package/src/components/ExperimentPopover.vue +35 -35
- package/src/components/ExperimentSelectorModal.vue +40 -40
- package/src/components/ExperimentTimeline.vue +48 -48
- package/src/components/FileUploader.vue +31 -31
- package/src/components/FitPanel.vue +9 -9
- package/src/components/FormActions.vue +1 -1
- package/src/components/FormBuilder.vue +2 -2
- package/src/components/FormField.vue +7 -7
- package/src/components/FormSection.vue +7 -7
- package/src/components/FormulaInput.vue +10 -10
- package/src/components/GroupAssigner.vue +40 -40
- package/src/components/GroupingModal.vue +45 -45
- package/src/components/IconButton.vue +6 -6
- package/src/components/LoadingSpinner.vue +5 -5
- package/src/components/MoleculeInput.vue +21 -21
- package/src/components/MultiSelect.vue +13 -13
- package/src/components/NumberInput.vue +13 -13
- package/src/components/PlateMapEditor.vue +63 -63
- package/src/components/ProgressBar.vue +18 -18
- package/src/components/ProtocolStepEditor.vue +57 -57
- package/src/components/RackEditor.vue +28 -28
- package/src/components/ReagentEditor.vue +61 -61
- package/src/components/ReagentList.vue +49 -49
- package/src/components/ResourceCard.vue +28 -28
- package/src/components/SampleHierarchyTree.vue +13 -13
- package/src/components/SampleLegend.vue +12 -12
- package/src/components/SampleSelector.vue +104 -104
- package/src/components/ScheduleCalendar.vue +42 -42
- package/src/components/ScientificNumber.vue +11 -11
- package/src/components/SegmentedControl.vue +12 -12
- package/src/components/SequenceInput.vue +32 -32
- package/src/components/SettingsButton.vue +5 -5
- package/src/components/SettingsModal.vue +17 -17
- package/src/components/StatusIndicator.vue +5 -5
- package/src/components/StepWizard.vue +16 -16
- package/src/components/TagsInput.vue +20 -20
- package/src/components/ThemeToggle.vue +3 -3
- package/src/components/TimePicker.vue +21 -21
- package/src/components/TimeRangeInput.vue +5 -5
- package/src/components/ToastNotification.vue +8 -8
- package/src/components/Tooltip.vue +7 -7
- package/src/components/UnitInput.vue +12 -12
- package/src/components/WellEditPopup.vue +28 -28
- package/src/components/WellPlate.vue +37 -37
- package/src/composables/useAppExperiment.ts +1 -1
- package/src/composables/usePlatformContext.ts +16 -16
- package/src/composables/useProtocolTemplates.ts +1 -1
- package/src/install.ts +3 -3
- package/src/stores/auth.ts +3 -3
- package/src/stores/settings.ts +2 -2
- package/src/styles/components/alert-box.css +30 -30
- package/src/styles/components/app-avatar-menu.css +23 -23
- package/src/styles/components/app-container.css +6 -6
- package/src/styles/components/app-layout.css +15 -15
- package/src/styles/components/app-page-selector.css +26 -26
- package/src/styles/components/app-pill-nav.css +7 -7
- package/src/styles/components/app-plugin-switcher.css +27 -27
- package/src/styles/components/app-sidebar.css +24 -24
- package/src/styles/components/app-top-bar.css +65 -65
- package/src/styles/components/audit-trail.css +29 -29
- package/src/styles/components/auto-group-modal.css +91 -91
- package/src/styles/components/avatar.css +15 -15
- package/src/styles/components/batch-progress-list.css +40 -40
- package/src/styles/components/breadcrumb.css +8 -8
- package/src/styles/components/button.css +31 -31
- package/src/styles/components/calendar.css +27 -27
- package/src/styles/components/chart-container.css +9 -9
- package/src/styles/components/checkbox.css +20 -20
- package/src/styles/components/chemical-formula.css +8 -8
- package/src/styles/components/collapsible-card.css +35 -35
- package/src/styles/components/color-slider.css +8 -8
- package/src/styles/components/concentration-input.css +27 -27
- package/src/styles/components/confirm-dialog.css +32 -32
- package/src/styles/components/dataframe.css +66 -66
- package/src/styles/components/date-picker.css +40 -40
- package/src/styles/components/datetime-picker.css +37 -37
- package/src/styles/components/divider.css +13 -13
- package/src/styles/components/dose-calculator.css +43 -43
- package/src/styles/components/dropdown-button.css +46 -46
- package/src/styles/components/empty-state.css +44 -44
- package/src/styles/components/experiment-code-badge.css +8 -8
- package/src/styles/components/experiment-data-viewer.css +23 -23
- package/src/styles/components/experiment-popover.css +97 -97
- package/src/styles/components/experiment-selector-modal.css +39 -39
- package/src/styles/components/experiment-timeline.css +98 -98
- package/src/styles/components/file-uploader.css +44 -44
- package/src/styles/components/fit-panel.css +12 -12
- package/src/styles/components/form-builder.css +11 -11
- package/src/styles/components/form-field.css +7 -7
- package/src/styles/components/formula-input.css +17 -17
- package/src/styles/components/group-assigner.css +26 -26
- package/src/styles/components/grouping-modal.css +51 -51
- package/src/styles/components/icon-button.css +41 -41
- package/src/styles/components/input.css +13 -13
- package/src/styles/components/loading-spinner.css +12 -12
- package/src/styles/components/modal.css +69 -69
- package/src/styles/components/molecule-input.css +27 -27
- package/src/styles/components/multi-select.css +23 -23
- package/src/styles/components/number-input.css +32 -32
- package/src/styles/components/pill.css +37 -37
- package/src/styles/components/plate-map-editor.css +67 -67
- package/src/styles/components/progress-bar.css +41 -41
- package/src/styles/components/protocol-step-editor.css +63 -63
- package/src/styles/components/rack-editor.css +34 -34
- package/src/styles/components/radio-group.css +41 -41
- package/src/styles/components/reagent-editor.css +70 -70
- package/src/styles/components/reagent-list.css +65 -65
- package/src/styles/components/resource-card.css +52 -52
- package/src/styles/components/sample-hierarchy-tree.css +56 -56
- package/src/styles/components/sample-legend.css +37 -37
- package/src/styles/components/sample-selector.css +121 -121
- package/src/styles/components/schedule-calendar.css +67 -67
- package/src/styles/components/scientific-number.css +11 -11
- package/src/styles/components/segmented-control.css +33 -33
- package/src/styles/components/select.css +11 -11
- package/src/styles/components/sequence-input.css +29 -29
- package/src/styles/components/settings-button.css +16 -16
- package/src/styles/components/settings-modal.css +14 -14
- package/src/styles/components/skeleton.css +2 -2
- package/src/styles/components/slider.css +10 -10
- package/src/styles/components/status-indicator.css +12 -12
- package/src/styles/components/step-wizard.css +32 -32
- package/src/styles/components/tabs.css +16 -16
- package/src/styles/components/tags-input.css +46 -46
- package/src/styles/components/textarea.css +17 -17
- package/src/styles/components/theme-toggle.css +13 -13
- package/src/styles/components/time-picker.css +28 -28
- package/src/styles/components/time-range-input.css +8 -8
- package/src/styles/components/toast.css +18 -18
- package/src/styles/components/toggle.css +27 -27
- package/src/styles/components/tooltip.css +18 -18
- package/src/styles/components/unit-input.css +25 -25
- package/src/styles/components/well-edit-popup.css +32 -32
- package/src/styles/components/well-plate.css +49 -49
- package/src/styles/index.css +1 -1
- package/src/styles/variables.css +3 -3
- package/src/types/platform.ts +6 -6
- package/dist/auth-BYmxZdJl.js.map +0 -1
- package/dist/components-CKf-UpGi.js.map +0 -1
- package/dist/useScheduleDrag-DAJueTbK.js.map +0 -1
|
@@ -15,36 +15,36 @@ describe('DropdownButton', () => {
|
|
|
15
15
|
const wrapper = mount(DropdownButton, {
|
|
16
16
|
props: { options: mockOptions },
|
|
17
17
|
})
|
|
18
|
-
expect(wrapper.find('.
|
|
19
|
-
expect(wrapper.find('.
|
|
18
|
+
expect(wrapper.find('.mint-dropdown-button').exists()).toBe(true)
|
|
19
|
+
expect(wrapper.find('.mint-dropdown-button__trigger').exists()).toBe(true)
|
|
20
20
|
})
|
|
21
21
|
|
|
22
22
|
it('should show placeholder when no value is selected', () => {
|
|
23
23
|
const wrapper = mount(DropdownButton, {
|
|
24
24
|
props: { options: mockOptions },
|
|
25
25
|
})
|
|
26
|
-
expect(wrapper.find('.
|
|
26
|
+
expect(wrapper.find('.mint-dropdown-button__label').text()).toBe('Select...')
|
|
27
27
|
})
|
|
28
28
|
|
|
29
29
|
it('should show custom placeholder', () => {
|
|
30
30
|
const wrapper = mount(DropdownButton, {
|
|
31
31
|
props: { options: mockOptions, placeholder: 'Choose an option' },
|
|
32
32
|
})
|
|
33
|
-
expect(wrapper.find('.
|
|
33
|
+
expect(wrapper.find('.mint-dropdown-button__label').text()).toBe('Choose an option')
|
|
34
34
|
})
|
|
35
35
|
|
|
36
36
|
it('should be closed by default', () => {
|
|
37
37
|
const wrapper = mount(DropdownButton, {
|
|
38
38
|
props: { options: mockOptions },
|
|
39
39
|
})
|
|
40
|
-
expect(wrapper.find('.
|
|
40
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
41
41
|
})
|
|
42
42
|
|
|
43
43
|
it('should have chevron icon', () => {
|
|
44
44
|
const wrapper = mount(DropdownButton, {
|
|
45
45
|
props: { options: mockOptions },
|
|
46
46
|
})
|
|
47
|
-
expect(wrapper.find('.
|
|
47
|
+
expect(wrapper.find('.mint-dropdown-button__chevron').exists()).toBe(true)
|
|
48
48
|
})
|
|
49
49
|
})
|
|
50
50
|
|
|
@@ -53,22 +53,22 @@ describe('DropdownButton', () => {
|
|
|
53
53
|
const wrapper = mount(DropdownButton, {
|
|
54
54
|
props: { options: mockOptions, modelValue: 'b' },
|
|
55
55
|
})
|
|
56
|
-
expect(wrapper.find('.
|
|
56
|
+
expect(wrapper.find('.mint-dropdown-button__label').text()).toBe('Option B')
|
|
57
57
|
})
|
|
58
58
|
|
|
59
59
|
it('should fallback to value when option not found', () => {
|
|
60
60
|
const wrapper = mount(DropdownButton, {
|
|
61
61
|
props: { options: mockOptions, modelValue: 'unknown' },
|
|
62
62
|
})
|
|
63
|
-
expect(wrapper.find('.
|
|
63
|
+
expect(wrapper.find('.mint-dropdown-button__label').text()).toBe('unknown')
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
it('should emit update:modelValue when option is selected', async () => {
|
|
67
67
|
const wrapper = mount(DropdownButton, {
|
|
68
68
|
props: { options: mockOptions },
|
|
69
69
|
})
|
|
70
|
-
await wrapper.find('.
|
|
71
|
-
await wrapper.findAll('.
|
|
70
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
71
|
+
await wrapper.findAll('.mint-dropdown-button__option')[0].trigger('click')
|
|
72
72
|
|
|
73
73
|
expect(wrapper.emitted('update:modelValue')).toHaveLength(1)
|
|
74
74
|
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(['a'])
|
|
@@ -78,8 +78,8 @@ describe('DropdownButton', () => {
|
|
|
78
78
|
const wrapper = mount(DropdownButton, {
|
|
79
79
|
props: { options: mockOptions },
|
|
80
80
|
})
|
|
81
|
-
await wrapper.find('.
|
|
82
|
-
await wrapper.findAll('.
|
|
81
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
82
|
+
await wrapper.findAll('.mint-dropdown-button__option')[1].trigger('click')
|
|
83
83
|
|
|
84
84
|
expect(wrapper.emitted('select')).toHaveLength(1)
|
|
85
85
|
expect(wrapper.emitted('select')?.[0]).toEqual([mockOptions[1]])
|
|
@@ -91,46 +91,46 @@ describe('DropdownButton', () => {
|
|
|
91
91
|
const wrapper = mount(DropdownButton, {
|
|
92
92
|
props: { options: mockOptions },
|
|
93
93
|
})
|
|
94
|
-
await wrapper.find('.
|
|
95
|
-
expect(wrapper.find('.
|
|
94
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
95
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
96
96
|
})
|
|
97
97
|
|
|
98
98
|
it('should close menu when trigger is clicked again', async () => {
|
|
99
99
|
const wrapper = mount(DropdownButton, {
|
|
100
100
|
props: { options: mockOptions },
|
|
101
101
|
})
|
|
102
|
-
const trigger = wrapper.find('.
|
|
102
|
+
const trigger = wrapper.find('.mint-dropdown-button__trigger')
|
|
103
103
|
await trigger.trigger('click')
|
|
104
|
-
expect(wrapper.find('.
|
|
104
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
105
105
|
await trigger.trigger('click')
|
|
106
|
-
expect(wrapper.find('.
|
|
106
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
107
107
|
})
|
|
108
108
|
|
|
109
109
|
it('should apply open class to trigger when menu is open', async () => {
|
|
110
110
|
const wrapper = mount(DropdownButton, {
|
|
111
111
|
props: { options: mockOptions },
|
|
112
112
|
})
|
|
113
|
-
await wrapper.find('.
|
|
114
|
-
expect(wrapper.find('.
|
|
113
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
114
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--open').exists()).toBe(true)
|
|
115
115
|
})
|
|
116
116
|
|
|
117
117
|
it('should rotate chevron when open', async () => {
|
|
118
118
|
const wrapper = mount(DropdownButton, {
|
|
119
119
|
props: { options: mockOptions },
|
|
120
120
|
})
|
|
121
|
-
await wrapper.find('.
|
|
122
|
-
expect(wrapper.find('.
|
|
121
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
122
|
+
expect(wrapper.find('.mint-dropdown-button__chevron--open').exists()).toBe(true)
|
|
123
123
|
})
|
|
124
124
|
|
|
125
125
|
it('should close menu after selecting an option', async () => {
|
|
126
126
|
const wrapper = mount(DropdownButton, {
|
|
127
127
|
props: { options: mockOptions },
|
|
128
128
|
})
|
|
129
|
-
await wrapper.find('.
|
|
130
|
-
expect(wrapper.find('.
|
|
129
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
130
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
131
131
|
|
|
132
|
-
await wrapper.findAll('.
|
|
133
|
-
expect(wrapper.find('.
|
|
132
|
+
await wrapper.findAll('.mint-dropdown-button__option')[0].trigger('click')
|
|
133
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
134
134
|
})
|
|
135
135
|
})
|
|
136
136
|
|
|
@@ -139,9 +139,9 @@ describe('DropdownButton', () => {
|
|
|
139
139
|
const wrapper = mount(DropdownButton, {
|
|
140
140
|
props: { options: mockOptions },
|
|
141
141
|
})
|
|
142
|
-
await wrapper.find('.
|
|
142
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
143
143
|
|
|
144
|
-
const options = wrapper.findAll('.
|
|
144
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
145
145
|
expect(options).toHaveLength(3)
|
|
146
146
|
})
|
|
147
147
|
|
|
@@ -149,9 +149,9 @@ describe('DropdownButton', () => {
|
|
|
149
149
|
const wrapper = mount(DropdownButton, {
|
|
150
150
|
props: { options: mockOptions },
|
|
151
151
|
})
|
|
152
|
-
await wrapper.find('.
|
|
152
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
153
153
|
|
|
154
|
-
const labels = wrapper.findAll('.
|
|
154
|
+
const labels = wrapper.findAll('.mint-dropdown-button__option-label')
|
|
155
155
|
expect(labels[0].text()).toBe('Option A')
|
|
156
156
|
expect(labels[1].text()).toBe('Option B')
|
|
157
157
|
expect(labels[2].text()).toBe('Option C')
|
|
@@ -161,9 +161,9 @@ describe('DropdownButton', () => {
|
|
|
161
161
|
const wrapper = mount(DropdownButton, {
|
|
162
162
|
props: { options: mockOptions },
|
|
163
163
|
})
|
|
164
|
-
await wrapper.find('.
|
|
164
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
165
165
|
|
|
166
|
-
const descriptions = wrapper.findAll('.
|
|
166
|
+
const descriptions = wrapper.findAll('.mint-dropdown-button__option-description')
|
|
167
167
|
expect(descriptions).toHaveLength(1)
|
|
168
168
|
expect(descriptions[0].text()).toBe('Description for B')
|
|
169
169
|
})
|
|
@@ -172,9 +172,9 @@ describe('DropdownButton', () => {
|
|
|
172
172
|
const wrapper = mount(DropdownButton, {
|
|
173
173
|
props: { options: mockOptions, modelValue: 'a' },
|
|
174
174
|
})
|
|
175
|
-
await wrapper.find('.
|
|
175
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
176
176
|
|
|
177
|
-
const selectedOption = wrapper.find('.
|
|
177
|
+
const selectedOption = wrapper.find('.mint-dropdown-button__option--selected')
|
|
178
178
|
expect(selectedOption.exists()).toBe(true)
|
|
179
179
|
})
|
|
180
180
|
|
|
@@ -182,10 +182,10 @@ describe('DropdownButton', () => {
|
|
|
182
182
|
const wrapper = mount(DropdownButton, {
|
|
183
183
|
props: { options: mockOptions, modelValue: 'b' },
|
|
184
184
|
})
|
|
185
|
-
await wrapper.find('.
|
|
185
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
186
186
|
|
|
187
|
-
const options = wrapper.findAll('.
|
|
188
|
-
const checkmark = options[1].find('.
|
|
187
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
188
|
+
const checkmark = options[1].find('.mint-dropdown-button__option-check')
|
|
189
189
|
expect(checkmark.exists()).toBe(true)
|
|
190
190
|
})
|
|
191
191
|
|
|
@@ -193,19 +193,19 @@ describe('DropdownButton', () => {
|
|
|
193
193
|
const wrapper = mount(DropdownButton, {
|
|
194
194
|
props: { options: mockOptions },
|
|
195
195
|
})
|
|
196
|
-
await wrapper.find('.
|
|
196
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
197
197
|
|
|
198
|
-
const options = wrapper.findAll('.
|
|
199
|
-
expect(options[2].classes()).toContain('
|
|
198
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
199
|
+
expect(options[2].classes()).toContain('mint-dropdown-button__option--disabled')
|
|
200
200
|
})
|
|
201
201
|
|
|
202
202
|
it('should not select disabled options', async () => {
|
|
203
203
|
const wrapper = mount(DropdownButton, {
|
|
204
204
|
props: { options: mockOptions },
|
|
205
205
|
})
|
|
206
|
-
await wrapper.find('.
|
|
206
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
207
207
|
|
|
208
|
-
const disabledOption = wrapper.findAll('.
|
|
208
|
+
const disabledOption = wrapper.findAll('.mint-dropdown-button__option')[2]
|
|
209
209
|
await disabledOption.trigger('click')
|
|
210
210
|
|
|
211
211
|
expect(wrapper.emitted('update:modelValue')).toBeUndefined()
|
|
@@ -217,21 +217,21 @@ describe('DropdownButton', () => {
|
|
|
217
217
|
const wrapper = mount(DropdownButton, {
|
|
218
218
|
props: { options: mockOptions },
|
|
219
219
|
})
|
|
220
|
-
expect(wrapper.find('.
|
|
220
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--secondary').exists()).toBe(true)
|
|
221
221
|
})
|
|
222
222
|
|
|
223
223
|
it('should apply primary variant', () => {
|
|
224
224
|
const wrapper = mount(DropdownButton, {
|
|
225
225
|
props: { options: mockOptions, variant: 'primary' },
|
|
226
226
|
})
|
|
227
|
-
expect(wrapper.find('.
|
|
227
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--primary').exists()).toBe(true)
|
|
228
228
|
})
|
|
229
229
|
|
|
230
230
|
it('should apply danger variant', () => {
|
|
231
231
|
const wrapper = mount(DropdownButton, {
|
|
232
232
|
props: { options: mockOptions, variant: 'danger' },
|
|
233
233
|
})
|
|
234
|
-
expect(wrapper.find('.
|
|
234
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--danger').exists()).toBe(true)
|
|
235
235
|
})
|
|
236
236
|
})
|
|
237
237
|
|
|
@@ -240,21 +240,21 @@ describe('DropdownButton', () => {
|
|
|
240
240
|
const wrapper = mount(DropdownButton, {
|
|
241
241
|
props: { options: mockOptions },
|
|
242
242
|
})
|
|
243
|
-
expect(wrapper.find('.
|
|
243
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--md').exists()).toBe(true)
|
|
244
244
|
})
|
|
245
245
|
|
|
246
246
|
it('should apply small size', () => {
|
|
247
247
|
const wrapper = mount(DropdownButton, {
|
|
248
248
|
props: { options: mockOptions, size: 'sm' },
|
|
249
249
|
})
|
|
250
|
-
expect(wrapper.find('.
|
|
250
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--sm').exists()).toBe(true)
|
|
251
251
|
})
|
|
252
252
|
|
|
253
253
|
it('should apply large size', () => {
|
|
254
254
|
const wrapper = mount(DropdownButton, {
|
|
255
255
|
props: { options: mockOptions, size: 'lg' },
|
|
256
256
|
})
|
|
257
|
-
expect(wrapper.find('.
|
|
257
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--lg').exists()).toBe(true)
|
|
258
258
|
})
|
|
259
259
|
})
|
|
260
260
|
|
|
@@ -263,7 +263,7 @@ describe('DropdownButton', () => {
|
|
|
263
263
|
const wrapper = mount(DropdownButton, {
|
|
264
264
|
props: { options: mockOptions, disabled: true },
|
|
265
265
|
})
|
|
266
|
-
const trigger = wrapper.find('.
|
|
266
|
+
const trigger = wrapper.find('.mint-dropdown-button__trigger')
|
|
267
267
|
expect(trigger.attributes('disabled')).toBeDefined()
|
|
268
268
|
})
|
|
269
269
|
|
|
@@ -271,15 +271,15 @@ describe('DropdownButton', () => {
|
|
|
271
271
|
const wrapper = mount(DropdownButton, {
|
|
272
272
|
props: { options: mockOptions, disabled: true },
|
|
273
273
|
})
|
|
274
|
-
expect(wrapper.find('.
|
|
274
|
+
expect(wrapper.find('.mint-dropdown-button__trigger--disabled').exists()).toBe(true)
|
|
275
275
|
})
|
|
276
276
|
|
|
277
277
|
it('should not open menu when disabled', async () => {
|
|
278
278
|
const wrapper = mount(DropdownButton, {
|
|
279
279
|
props: { options: mockOptions, disabled: true },
|
|
280
280
|
})
|
|
281
|
-
await wrapper.find('.
|
|
282
|
-
expect(wrapper.find('.
|
|
281
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
282
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
283
283
|
})
|
|
284
284
|
})
|
|
285
285
|
|
|
@@ -288,14 +288,14 @@ describe('DropdownButton', () => {
|
|
|
288
288
|
const wrapper = mount(DropdownButton, {
|
|
289
289
|
props: { options: mockOptions, loading: true },
|
|
290
290
|
})
|
|
291
|
-
expect(wrapper.find('.
|
|
291
|
+
expect(wrapper.find('.mint-dropdown-button__spinner').exists()).toBe(true)
|
|
292
292
|
})
|
|
293
293
|
|
|
294
294
|
it('should disable button when loading', () => {
|
|
295
295
|
const wrapper = mount(DropdownButton, {
|
|
296
296
|
props: { options: mockOptions, loading: true },
|
|
297
297
|
})
|
|
298
|
-
const trigger = wrapper.find('.
|
|
298
|
+
const trigger = wrapper.find('.mint-dropdown-button__trigger')
|
|
299
299
|
expect(trigger.attributes('disabled')).toBeDefined()
|
|
300
300
|
})
|
|
301
301
|
|
|
@@ -303,8 +303,8 @@ describe('DropdownButton', () => {
|
|
|
303
303
|
const wrapper = mount(DropdownButton, {
|
|
304
304
|
props: { options: mockOptions, loading: true },
|
|
305
305
|
})
|
|
306
|
-
await wrapper.find('.
|
|
307
|
-
expect(wrapper.find('.
|
|
306
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
307
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
308
308
|
})
|
|
309
309
|
})
|
|
310
310
|
|
|
@@ -323,14 +323,14 @@ describe('DropdownButton', () => {
|
|
|
323
323
|
attachTo: document.body,
|
|
324
324
|
})
|
|
325
325
|
|
|
326
|
-
await wrapper.find('.
|
|
327
|
-
expect(wrapper.find('.
|
|
326
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
327
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
328
328
|
|
|
329
329
|
// Simulate click outside
|
|
330
330
|
document.body.click()
|
|
331
331
|
await wrapper.vm.$nextTick()
|
|
332
332
|
|
|
333
|
-
expect(wrapper.find('.
|
|
333
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
334
334
|
wrapper.unmount()
|
|
335
335
|
})
|
|
336
336
|
|
|
@@ -339,12 +339,12 @@ describe('DropdownButton', () => {
|
|
|
339
339
|
props: { options: mockOptions },
|
|
340
340
|
})
|
|
341
341
|
|
|
342
|
-
await wrapper.find('.
|
|
343
|
-
expect(wrapper.find('.
|
|
342
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
343
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
344
344
|
|
|
345
345
|
// Click on the container itself
|
|
346
|
-
await wrapper.find('.
|
|
347
|
-
expect(wrapper.find('.
|
|
346
|
+
await wrapper.find('.mint-dropdown-button').trigger('click')
|
|
347
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
348
348
|
})
|
|
349
349
|
})
|
|
350
350
|
|
|
@@ -355,15 +355,15 @@ describe('DropdownButton', () => {
|
|
|
355
355
|
attachTo: document.body,
|
|
356
356
|
})
|
|
357
357
|
|
|
358
|
-
await wrapper.find('.
|
|
359
|
-
expect(wrapper.find('.
|
|
358
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
359
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(true)
|
|
360
360
|
|
|
361
361
|
// Simulate Escape key press
|
|
362
362
|
const event = new KeyboardEvent('keydown', { key: 'Escape' })
|
|
363
363
|
document.dispatchEvent(event)
|
|
364
364
|
await wrapper.vm.$nextTick()
|
|
365
365
|
|
|
366
|
-
expect(wrapper.find('.
|
|
366
|
+
expect(wrapper.find('.mint-dropdown-button__menu').exists()).toBe(false)
|
|
367
367
|
wrapper.unmount()
|
|
368
368
|
})
|
|
369
369
|
})
|
|
@@ -373,14 +373,14 @@ describe('DropdownButton', () => {
|
|
|
373
373
|
const wrapper = mount(DropdownButton, {
|
|
374
374
|
props: { options: mockOptions },
|
|
375
375
|
})
|
|
376
|
-
expect(wrapper.find('.
|
|
376
|
+
expect(wrapper.find('.mint-dropdown-button__trigger').attributes('type')).toBe('button')
|
|
377
377
|
})
|
|
378
378
|
|
|
379
379
|
it('should have aria-expanded attribute', async () => {
|
|
380
380
|
const wrapper = mount(DropdownButton, {
|
|
381
381
|
props: { options: mockOptions },
|
|
382
382
|
})
|
|
383
|
-
const trigger = wrapper.find('.
|
|
383
|
+
const trigger = wrapper.find('.mint-dropdown-button__trigger')
|
|
384
384
|
expect(trigger.attributes('aria-expanded')).toBe('false')
|
|
385
385
|
|
|
386
386
|
await trigger.trigger('click')
|
|
@@ -391,23 +391,23 @@ describe('DropdownButton', () => {
|
|
|
391
391
|
const wrapper = mount(DropdownButton, {
|
|
392
392
|
props: { options: mockOptions },
|
|
393
393
|
})
|
|
394
|
-
expect(wrapper.find('.
|
|
394
|
+
expect(wrapper.find('.mint-dropdown-button__trigger').attributes('aria-haspopup')).toBe('listbox')
|
|
395
395
|
})
|
|
396
396
|
|
|
397
397
|
it('should have role="listbox" on menu', async () => {
|
|
398
398
|
const wrapper = mount(DropdownButton, {
|
|
399
399
|
props: { options: mockOptions },
|
|
400
400
|
})
|
|
401
|
-
await wrapper.find('.
|
|
402
|
-
expect(wrapper.find('.
|
|
401
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
402
|
+
expect(wrapper.find('.mint-dropdown-button__menu').attributes('role')).toBe('listbox')
|
|
403
403
|
})
|
|
404
404
|
|
|
405
405
|
it('should have role="option" on options', async () => {
|
|
406
406
|
const wrapper = mount(DropdownButton, {
|
|
407
407
|
props: { options: mockOptions },
|
|
408
408
|
})
|
|
409
|
-
await wrapper.find('.
|
|
410
|
-
const options = wrapper.findAll('.
|
|
409
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
410
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
411
411
|
options.forEach(opt => {
|
|
412
412
|
expect(opt.attributes('role')).toBe('option')
|
|
413
413
|
})
|
|
@@ -417,9 +417,9 @@ describe('DropdownButton', () => {
|
|
|
417
417
|
const wrapper = mount(DropdownButton, {
|
|
418
418
|
props: { options: mockOptions, modelValue: 'a' },
|
|
419
419
|
})
|
|
420
|
-
await wrapper.find('.
|
|
420
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
421
421
|
|
|
422
|
-
const options = wrapper.findAll('.
|
|
422
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
423
423
|
expect(options[0].attributes('aria-selected')).toBe('true')
|
|
424
424
|
expect(options[1].attributes('aria-selected')).toBe('false')
|
|
425
425
|
})
|
|
@@ -428,9 +428,9 @@ describe('DropdownButton', () => {
|
|
|
428
428
|
const wrapper = mount(DropdownButton, {
|
|
429
429
|
props: { options: mockOptions },
|
|
430
430
|
})
|
|
431
|
-
await wrapper.find('.
|
|
431
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
432
432
|
|
|
433
|
-
const disabledOption = wrapper.findAll('.
|
|
433
|
+
const disabledOption = wrapper.findAll('.mint-dropdown-button__option')[2]
|
|
434
434
|
expect(disabledOption.attributes('aria-disabled')).toBe('true')
|
|
435
435
|
})
|
|
436
436
|
})
|
|
@@ -440,7 +440,7 @@ describe('DropdownButton', () => {
|
|
|
440
440
|
const wrapper = mount(DropdownButton, {
|
|
441
441
|
props: { options: [] },
|
|
442
442
|
})
|
|
443
|
-
expect(wrapper.find('.
|
|
443
|
+
expect(wrapper.find('.mint-dropdown-button').exists()).toBe(true)
|
|
444
444
|
})
|
|
445
445
|
|
|
446
446
|
it('should handle numeric option values', async () => {
|
|
@@ -451,7 +451,7 @@ describe('DropdownButton', () => {
|
|
|
451
451
|
const wrapper = mount(DropdownButton, {
|
|
452
452
|
props: { options: numericOptions, modelValue: 1 },
|
|
453
453
|
})
|
|
454
|
-
expect(wrapper.find('.
|
|
454
|
+
expect(wrapper.find('.mint-dropdown-button__label').text()).toBe('One')
|
|
455
455
|
})
|
|
456
456
|
|
|
457
457
|
it('should handle options with same labels', async () => {
|
|
@@ -462,9 +462,9 @@ describe('DropdownButton', () => {
|
|
|
462
462
|
const wrapper = mount(DropdownButton, {
|
|
463
463
|
props: { options: duplicateLabels },
|
|
464
464
|
})
|
|
465
|
-
await wrapper.find('.
|
|
465
|
+
await wrapper.find('.mint-dropdown-button__trigger').trigger('click')
|
|
466
466
|
|
|
467
|
-
const options = wrapper.findAll('.
|
|
467
|
+
const options = wrapper.findAll('.mint-dropdown-button__option')
|
|
468
468
|
expect(options).toHaveLength(2)
|
|
469
469
|
})
|
|
470
470
|
})
|
|
@@ -122,7 +122,7 @@ function handleAction(label: string) {
|
|
|
122
122
|
<div style="padding: 2rem; max-width: 600px; margin: 0 auto;">
|
|
123
123
|
<AlertBox type="error" title="Plugin conflict detected">
|
|
124
124
|
<template #default>
|
|
125
|
-
|
|
125
|
+
mint-plugin-drp requires numpy >=2.0 but the current environment has numpy 1.26.4.
|
|
126
126
|
</template>
|
|
127
127
|
<template #actions>
|
|
128
128
|
<button
|
|
@@ -26,42 +26,42 @@ const hasActions = () => !!props.actionLabel || !!slots.actions
|
|
|
26
26
|
|
|
27
27
|
<template>
|
|
28
28
|
<div
|
|
29
|
-
class="
|
|
30
|
-
:class="`
|
|
29
|
+
class="mint-alert"
|
|
30
|
+
:class="`mint-alert--${props.type}`"
|
|
31
31
|
role="alert"
|
|
32
32
|
>
|
|
33
33
|
<!-- Lucide circle-check -->
|
|
34
|
-
<svg v-if="props.type === 'success'" class="
|
|
34
|
+
<svg v-if="props.type === 'success'" class="mint-alert__icon mint-alert__icon--success" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
35
35
|
<circle cx="12" cy="12" r="10" /><path d="m9 12 2 2 4-4" />
|
|
36
36
|
</svg>
|
|
37
37
|
<!-- Lucide circle-x -->
|
|
38
|
-
<svg v-else-if="props.type === 'error'" class="
|
|
38
|
+
<svg v-else-if="props.type === 'error'" class="mint-alert__icon mint-alert__icon--error" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
39
39
|
<circle cx="12" cy="12" r="10" /><path d="m15 9-6 6" /><path d="m9 9 6 6" />
|
|
40
40
|
</svg>
|
|
41
41
|
<!-- Lucide triangle-alert -->
|
|
42
|
-
<svg v-else-if="props.type === 'warning'" class="
|
|
42
|
+
<svg v-else-if="props.type === 'warning'" class="mint-alert__icon mint-alert__icon--warning" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
43
43
|
<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" /><path d="M12 9v4" /><path d="M12 17h.01" />
|
|
44
44
|
</svg>
|
|
45
45
|
<!-- Lucide info -->
|
|
46
|
-
<svg v-else class="
|
|
46
|
+
<svg v-else class="mint-alert__icon mint-alert__icon--info" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
47
47
|
<circle cx="12" cy="12" r="10" /><path d="M12 16v-4" /><path d="M12 8h.01" />
|
|
48
48
|
</svg>
|
|
49
49
|
|
|
50
|
-
<div class="
|
|
51
|
-
<h4 v-if="props.title" class="
|
|
50
|
+
<div class="mint-alert__content">
|
|
51
|
+
<h4 v-if="props.title" class="mint-alert__title">
|
|
52
52
|
{{ props.title }}
|
|
53
53
|
</h4>
|
|
54
|
-
<div class="
|
|
54
|
+
<div class="mint-alert__message">
|
|
55
55
|
<slot />
|
|
56
56
|
</div>
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
|
-
<div v-if="hasActions()" class="
|
|
59
|
+
<div v-if="hasActions()" class="mint-alert__actions">
|
|
60
60
|
<slot name="actions">
|
|
61
61
|
<button
|
|
62
62
|
type="button"
|
|
63
|
-
class="
|
|
64
|
-
:class="`
|
|
63
|
+
class="mint-alert__action-btn"
|
|
64
|
+
:class="`mint-alert__action-btn--${props.type}`"
|
|
65
65
|
@click="emit('action')"
|
|
66
66
|
>
|
|
67
67
|
{{ props.actionLabel }}
|
|
@@ -72,11 +72,11 @@ const hasActions = () => !!props.actionLabel || !!slots.actions
|
|
|
72
72
|
<button
|
|
73
73
|
v-if="props.dismissible"
|
|
74
74
|
type="button"
|
|
75
|
-
class="
|
|
75
|
+
class="mint-alert__dismiss"
|
|
76
76
|
aria-label="Dismiss"
|
|
77
77
|
@click="emit('dismiss')"
|
|
78
78
|
>
|
|
79
|
-
<svg class="
|
|
79
|
+
<svg class="mint-alert__dismiss-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
80
80
|
<path d="M18 6 6 18" /><path d="m6 6 12 12" />
|
|
81
81
|
</svg>
|
|
82
82
|
</button>
|