@morscherlab/mint-sdk 1.0.0-alpha.7 → 1.0.0-alpha.9
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
|
@@ -30,20 +30,20 @@ function handleChange(value: string | number) {
|
|
|
30
30
|
|
|
31
31
|
<template>
|
|
32
32
|
<div
|
|
33
|
-
:class="['
|
|
33
|
+
:class="['mint-radio-group', `mint-radio-group--${props.direction}`, `mint-radio-group--${props.variant}`]"
|
|
34
34
|
role="radiogroup"
|
|
35
35
|
>
|
|
36
36
|
<label
|
|
37
37
|
v-for="option in props.options"
|
|
38
38
|
:key="String(option.value)"
|
|
39
39
|
:class="[
|
|
40
|
-
'
|
|
41
|
-
props.modelValue === option.value ? '
|
|
42
|
-
(props.disabled || option.disabled) ? '
|
|
40
|
+
'mint-radio-option',
|
|
41
|
+
props.modelValue === option.value ? 'mint-radio-option--selected' : '',
|
|
42
|
+
(props.disabled || option.disabled) ? 'mint-radio-option--disabled' : '',
|
|
43
43
|
]"
|
|
44
44
|
>
|
|
45
45
|
<template v-if="props.variant === 'list'">
|
|
46
|
-
<div :class="['
|
|
46
|
+
<div :class="['mint-radio-option__input-wrapper', `mint-radio-option__input-wrapper--${props.size}`]">
|
|
47
47
|
<input
|
|
48
48
|
type="radio"
|
|
49
49
|
:name="props.name"
|
|
@@ -51,30 +51,30 @@ function handleChange(value: string | number) {
|
|
|
51
51
|
:checked="props.modelValue === option.value"
|
|
52
52
|
:disabled="props.disabled || option.disabled"
|
|
53
53
|
:aria-describedby="option.description ? `${props.name}-${option.value}-desc` : undefined"
|
|
54
|
-
class="
|
|
54
|
+
class="mint-radio-option__native"
|
|
55
55
|
@change="handleChange(option.value)"
|
|
56
56
|
/>
|
|
57
57
|
<div
|
|
58
58
|
:class="[
|
|
59
|
-
'
|
|
60
|
-
`
|
|
61
|
-
props.modelValue === option.value ? '
|
|
59
|
+
'mint-radio-option__circle',
|
|
60
|
+
`mint-radio-option__circle--${props.size}`,
|
|
61
|
+
props.modelValue === option.value ? 'mint-radio-option__circle--checked' : '',
|
|
62
62
|
]"
|
|
63
63
|
>
|
|
64
64
|
<div
|
|
65
65
|
v-if="props.modelValue === option.value"
|
|
66
|
-
:class="['
|
|
66
|
+
:class="['mint-radio-option__dot', `mint-radio-option__dot--${props.size}`]"
|
|
67
67
|
/>
|
|
68
68
|
</div>
|
|
69
69
|
</div>
|
|
70
|
-
<div class="
|
|
71
|
-
<span :class="['
|
|
70
|
+
<div class="mint-radio-option__content">
|
|
71
|
+
<span :class="['mint-radio-option__label', `mint-radio-option__label--${props.size}`]">
|
|
72
72
|
{{ option.label }}
|
|
73
73
|
</span>
|
|
74
74
|
<span
|
|
75
75
|
v-if="option.description"
|
|
76
76
|
:id="`${props.name}-${option.value}-desc`"
|
|
77
|
-
:class="['
|
|
77
|
+
:class="['mint-radio-option__description', `mint-radio-option__description--${props.size}`]"
|
|
78
78
|
>
|
|
79
79
|
{{ option.description }}
|
|
80
80
|
</span>
|
|
@@ -89,28 +89,28 @@ function handleChange(value: string | number) {
|
|
|
89
89
|
:checked="props.modelValue === option.value"
|
|
90
90
|
:disabled="props.disabled || option.disabled"
|
|
91
91
|
:aria-describedby="option.description ? `${props.name}-${option.value}-desc` : undefined"
|
|
92
|
-
class="
|
|
92
|
+
class="mint-radio-option__native"
|
|
93
93
|
@change="handleChange(option.value)"
|
|
94
94
|
/>
|
|
95
|
-
<div class="
|
|
95
|
+
<div class="mint-radio-option__head">
|
|
96
96
|
<div
|
|
97
97
|
:class="[
|
|
98
|
-
'
|
|
99
|
-
`
|
|
100
|
-
props.modelValue === option.value ? '
|
|
98
|
+
'mint-radio-option__circle',
|
|
99
|
+
`mint-radio-option__circle--${props.size}`,
|
|
100
|
+
props.modelValue === option.value ? 'mint-radio-option__circle--checked' : '',
|
|
101
101
|
]"
|
|
102
102
|
>
|
|
103
103
|
<div
|
|
104
104
|
v-if="props.modelValue === option.value"
|
|
105
|
-
:class="['
|
|
105
|
+
:class="['mint-radio-option__dot', `mint-radio-option__dot--${props.size}`]"
|
|
106
106
|
/>
|
|
107
107
|
</div>
|
|
108
|
-
<span class="
|
|
108
|
+
<span class="mint-radio-option__title">{{ option.label }}</span>
|
|
109
109
|
</div>
|
|
110
110
|
<span
|
|
111
111
|
v-if="option.description"
|
|
112
112
|
:id="`${props.name}-${option.value}-desc`"
|
|
113
|
-
class="
|
|
113
|
+
class="mint-radio-option__description"
|
|
114
114
|
>
|
|
115
115
|
{{ option.description }}
|
|
116
116
|
</span>
|
|
@@ -32,17 +32,17 @@ function handleChange(event: Event) {
|
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
34
|
<template>
|
|
35
|
-
<div class="
|
|
35
|
+
<div class="mint-select">
|
|
36
36
|
<select
|
|
37
37
|
:value="modelValue"
|
|
38
38
|
:disabled="disabled"
|
|
39
39
|
:aria-invalid="error || undefined"
|
|
40
40
|
:aria-describedby="ariaDescribedby || undefined"
|
|
41
41
|
:class="[
|
|
42
|
-
'
|
|
43
|
-
`
|
|
44
|
-
error ? '
|
|
45
|
-
disabled ? '
|
|
42
|
+
'mint-select__control',
|
|
43
|
+
`mint-select__control--${size}`,
|
|
44
|
+
error ? 'mint-select__control--error' : '',
|
|
45
|
+
disabled ? 'mint-select__control--disabled' : '',
|
|
46
46
|
]"
|
|
47
47
|
@change="handleChange"
|
|
48
48
|
>
|
|
@@ -58,7 +58,7 @@ function handleChange(event: Event) {
|
|
|
58
58
|
{{ option.label }}
|
|
59
59
|
</option>
|
|
60
60
|
</select>
|
|
61
|
-
<div class="
|
|
61
|
+
<div class="mint-select__icon">
|
|
62
62
|
<svg fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" viewBox="0 0 24 24">
|
|
63
63
|
<path d="m6 9 6 6 6-6" />
|
|
64
64
|
</svg>
|
|
@@ -63,11 +63,11 @@ function handleInput(event: Event) {
|
|
|
63
63
|
</script>
|
|
64
64
|
|
|
65
65
|
<template>
|
|
66
|
-
<div class="
|
|
67
|
-
<div class="
|
|
66
|
+
<div class="mint-slider" :class="{ 'mint-slider--disabled': disabled }">
|
|
67
|
+
<div class="mint-slider__container">
|
|
68
68
|
<!-- Track background -->
|
|
69
69
|
<div
|
|
70
|
-
class="
|
|
70
|
+
class="mint-slider__track"
|
|
71
71
|
:style="{ height: `${sizeConfig.height}px` }"
|
|
72
72
|
/>
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ function handleInput(event: Event) {
|
|
|
75
75
|
meet at every position (no gap at the right edge, no overshoot
|
|
76
76
|
at the left). -->
|
|
77
77
|
<div
|
|
78
|
-
class="
|
|
78
|
+
class="mint-slider__fill"
|
|
79
79
|
:style="{
|
|
80
80
|
height: `${sizeConfig.height}px`,
|
|
81
81
|
width: thumbPosition,
|
|
@@ -85,7 +85,7 @@ function handleInput(event: Event) {
|
|
|
85
85
|
<!-- Native range input -->
|
|
86
86
|
<input
|
|
87
87
|
type="range"
|
|
88
|
-
class="
|
|
88
|
+
class="mint-slider__input"
|
|
89
89
|
:value="currentValue"
|
|
90
90
|
:min="min"
|
|
91
91
|
:max="max"
|
|
@@ -104,8 +104,8 @@ function handleInput(event: Event) {
|
|
|
104
104
|
|
|
105
105
|
<!-- Custom thumb — translateX(-50%) centers it on `left` -->
|
|
106
106
|
<div
|
|
107
|
-
class="
|
|
108
|
-
:class="{ '
|
|
107
|
+
class="mint-slider__thumb"
|
|
108
|
+
:class="{ 'mint-slider__thumb--dragging': isDragging }"
|
|
109
109
|
:style="{
|
|
110
110
|
width: `${sizeConfig.thumb}px`,
|
|
111
111
|
height: `${sizeConfig.thumb}px`,
|
|
@@ -115,7 +115,7 @@ function handleInput(event: Event) {
|
|
|
115
115
|
</div>
|
|
116
116
|
|
|
117
117
|
<!-- Value display -->
|
|
118
|
-
<span v-if="showValue" class="
|
|
118
|
+
<span v-if="showValue" class="mint-slider__value">
|
|
119
119
|
{{ currentValue }}
|
|
120
120
|
</span>
|
|
121
121
|
</div>
|
|
@@ -28,7 +28,7 @@ function selectTab(tabId: string) {
|
|
|
28
28
|
</script>
|
|
29
29
|
|
|
30
30
|
<template>
|
|
31
|
-
<div :class="['
|
|
31
|
+
<div :class="['mint-tabs', `mint-tabs--${variant}`]" role="tablist">
|
|
32
32
|
<button
|
|
33
33
|
v-for="tab in tabs"
|
|
34
34
|
:key="tab.id"
|
|
@@ -37,16 +37,16 @@ function selectTab(tabId: string) {
|
|
|
37
37
|
:aria-selected="activeTab === tab.id"
|
|
38
38
|
:aria-disabled="tab.disabled"
|
|
39
39
|
:class="[
|
|
40
|
-
'
|
|
41
|
-
activeTab === tab.id ? '
|
|
42
|
-
tab.disabled ? '
|
|
40
|
+
'mint-tab',
|
|
41
|
+
activeTab === tab.id ? 'mint-tab--active' : '',
|
|
42
|
+
tab.disabled ? 'mint-tab--disabled' : '',
|
|
43
43
|
]"
|
|
44
44
|
@click="selectTab(tab.id)"
|
|
45
45
|
>
|
|
46
|
-
<span class="
|
|
47
|
-
<span v-if="tab.icon" class="
|
|
46
|
+
<span class="mint-tab__content">
|
|
47
|
+
<span v-if="tab.icon" class="mint-tab__icon">{{ tab.icon }}</span>
|
|
48
48
|
{{ tab.label }}
|
|
49
|
-
<span v-if="tab.badge !== undefined" class="
|
|
49
|
+
<span v-if="tab.badge !== undefined" class="mint-tab__badge">
|
|
50
50
|
{{ tab.badge }}
|
|
51
51
|
</span>
|
|
52
52
|
</span>
|
|
@@ -45,11 +45,11 @@ function handleInput(event: Event) {
|
|
|
45
45
|
:aria-invalid="props.error || undefined"
|
|
46
46
|
:aria-describedby="props.ariaDescribedby || undefined"
|
|
47
47
|
:class="[
|
|
48
|
-
'
|
|
49
|
-
`
|
|
50
|
-
`
|
|
51
|
-
props.error ? '
|
|
52
|
-
props.disabled ? '
|
|
48
|
+
'mint-textarea',
|
|
49
|
+
`mint-textarea--${props.size}`,
|
|
50
|
+
`mint-textarea--resize-${props.resize}`,
|
|
51
|
+
props.error ? 'mint-textarea--error' : '',
|
|
52
|
+
props.disabled ? 'mint-textarea--disabled' : '',
|
|
53
53
|
]"
|
|
54
54
|
@input="handleInput"
|
|
55
55
|
@focus="emit('focus', $event)"
|
|
@@ -36,9 +36,9 @@ function handleKeydown(event: KeyboardEvent) {
|
|
|
36
36
|
<template>
|
|
37
37
|
<div
|
|
38
38
|
:class="[
|
|
39
|
-
'
|
|
40
|
-
reverse ? '
|
|
41
|
-
disabled ? '
|
|
39
|
+
'mint-toggle',
|
|
40
|
+
reverse ? 'mint-toggle--reverse' : '',
|
|
41
|
+
disabled ? 'mint-toggle--disabled' : '',
|
|
42
42
|
]"
|
|
43
43
|
@click="toggle"
|
|
44
44
|
>
|
|
@@ -48,23 +48,23 @@ function handleKeydown(event: KeyboardEvent) {
|
|
|
48
48
|
:aria-checked="modelValue"
|
|
49
49
|
:aria-label="label || 'Toggle'"
|
|
50
50
|
:class="[
|
|
51
|
-
'
|
|
52
|
-
`
|
|
53
|
-
modelValue ? '
|
|
51
|
+
'mint-toggle__track',
|
|
52
|
+
`mint-toggle__track--${size}`,
|
|
53
|
+
modelValue ? 'mint-toggle__track--on' : 'mint-toggle__track--off',
|
|
54
54
|
]"
|
|
55
55
|
@keydown="handleKeydown"
|
|
56
56
|
>
|
|
57
57
|
<span
|
|
58
58
|
:class="[
|
|
59
|
-
'
|
|
60
|
-
`
|
|
61
|
-
modelValue ? `
|
|
59
|
+
'mint-toggle__knob',
|
|
60
|
+
`mint-toggle__knob--${size}`,
|
|
61
|
+
modelValue ? `mint-toggle__knob--on-${size}` : 'mint-toggle__knob--off',
|
|
62
62
|
]"
|
|
63
63
|
/>
|
|
64
64
|
</div>
|
|
65
65
|
<span
|
|
66
66
|
v-if="label"
|
|
67
|
-
:class="['
|
|
67
|
+
:class="['mint-toggle__label', `mint-toggle__label--${size}`]"
|
|
68
68
|
>
|
|
69
69
|
{{ label }}
|
|
70
70
|
</span>
|
|
@@ -61,34 +61,34 @@ watch(
|
|
|
61
61
|
</script>
|
|
62
62
|
|
|
63
63
|
<template>
|
|
64
|
-
<div class="
|
|
65
|
-
<div v-if="title" class="
|
|
66
|
-
<span class="
|
|
67
|
-
<span class="
|
|
64
|
+
<div class="mint-batch-progress">
|
|
65
|
+
<div v-if="title" class="mint-batch-progress__header">
|
|
66
|
+
<span class="mint-batch-progress__title">{{ title }}</span>
|
|
67
|
+
<span class="mint-batch-progress__percent">{{ summary.percent }}%</span>
|
|
68
68
|
</div>
|
|
69
69
|
|
|
70
|
-
<div class="
|
|
70
|
+
<div class="mint-batch-progress__overall">
|
|
71
71
|
<div
|
|
72
|
-
class="
|
|
72
|
+
class="mint-batch-progress__overall-bar"
|
|
73
73
|
:style="{ width: `${summary.percent}%` }"
|
|
74
74
|
/>
|
|
75
75
|
</div>
|
|
76
76
|
|
|
77
77
|
<slot v-if="showSummary" name="summary" :summary="summary">
|
|
78
|
-
<div class="
|
|
79
|
-
<span v-if="summary.completed" class="
|
|
78
|
+
<div class="mint-batch-progress__summary">
|
|
79
|
+
<span v-if="summary.completed" class="mint-batch-progress__summary-item mint-batch-progress__summary-item--completed">
|
|
80
80
|
{{ summary.completed }} completed
|
|
81
81
|
</span>
|
|
82
|
-
<span v-if="summary.processing" class="
|
|
82
|
+
<span v-if="summary.processing" class="mint-batch-progress__summary-item mint-batch-progress__summary-item--processing">
|
|
83
83
|
{{ summary.processing }} processing
|
|
84
84
|
</span>
|
|
85
|
-
<span v-if="summary.error" class="
|
|
85
|
+
<span v-if="summary.error" class="mint-batch-progress__summary-item mint-batch-progress__summary-item--error">
|
|
86
86
|
{{ summary.error }} failed
|
|
87
87
|
</span>
|
|
88
|
-
<span v-if="summary.pending" class="
|
|
88
|
+
<span v-if="summary.pending" class="mint-batch-progress__summary-item mint-batch-progress__summary-item--pending">
|
|
89
89
|
{{ summary.pending }} pending
|
|
90
90
|
</span>
|
|
91
|
-
<span v-if="summary.skipped" class="
|
|
91
|
+
<span v-if="summary.skipped" class="mint-batch-progress__summary-item mint-batch-progress__summary-item--skipped">
|
|
92
92
|
{{ summary.skipped }} skipped
|
|
93
93
|
</span>
|
|
94
94
|
</div>
|
|
@@ -96,19 +96,19 @@ watch(
|
|
|
96
96
|
|
|
97
97
|
<div
|
|
98
98
|
ref="listRef"
|
|
99
|
-
class="
|
|
99
|
+
class="mint-batch-progress__list"
|
|
100
100
|
:style="maxHeight ? { maxHeight, overflowY: 'auto' } : {}"
|
|
101
101
|
>
|
|
102
102
|
<div
|
|
103
103
|
v-for="item in items"
|
|
104
104
|
:key="item.id"
|
|
105
105
|
:data-item-id="item.id"
|
|
106
|
-
:class="['
|
|
106
|
+
:class="['mint-batch-progress__item', `mint-batch-progress__item--${item.status}`]"
|
|
107
107
|
>
|
|
108
108
|
<slot name="item" :item="item">
|
|
109
|
-
<div class="
|
|
109
|
+
<div class="mint-batch-progress__item-row">
|
|
110
110
|
<!-- Status icon -->
|
|
111
|
-
<div :class="['
|
|
111
|
+
<div :class="['mint-batch-progress__item-icon', `mint-batch-progress__item-icon--${item.status}`]">
|
|
112
112
|
<!-- Pending: clock -->
|
|
113
113
|
<svg v-if="item.status === 'pending'" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5">
|
|
114
114
|
<circle cx="8" cy="8" r="6.5" />
|
|
@@ -132,19 +132,19 @@ watch(
|
|
|
132
132
|
</svg>
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
|
-
<span class="
|
|
135
|
+
<span class="mint-batch-progress__item-label">{{ item.label }}</span>
|
|
136
136
|
|
|
137
137
|
<!-- Mini progress bar for processing items -->
|
|
138
|
-
<div v-if="item.status === 'processing' && item.progress !== undefined" class="
|
|
139
|
-
<div class="
|
|
138
|
+
<div v-if="item.status === 'processing' && item.progress !== undefined" class="mint-batch-progress__item-progress">
|
|
139
|
+
<div class="mint-batch-progress__item-progress-bar" :style="{ width: `${item.progress}%` }" />
|
|
140
140
|
</div>
|
|
141
141
|
|
|
142
142
|
<!-- Actions -->
|
|
143
|
-
<div class="
|
|
143
|
+
<div class="mint-batch-progress__item-actions">
|
|
144
144
|
<button
|
|
145
145
|
v-if="item.status === 'error'"
|
|
146
146
|
type="button"
|
|
147
|
-
class="
|
|
147
|
+
class="mint-batch-progress__retry-btn"
|
|
148
148
|
@click.stop="emit('retry', item.id)"
|
|
149
149
|
>
|
|
150
150
|
Retry
|
|
@@ -152,7 +152,7 @@ watch(
|
|
|
152
152
|
<button
|
|
153
153
|
v-if="item.status === 'processing'"
|
|
154
154
|
type="button"
|
|
155
|
-
class="
|
|
155
|
+
class="mint-batch-progress__cancel-btn"
|
|
156
156
|
@click.stop="emit('cancel', item.id)"
|
|
157
157
|
>
|
|
158
158
|
Cancel
|
|
@@ -161,15 +161,15 @@ watch(
|
|
|
161
161
|
</div>
|
|
162
162
|
|
|
163
163
|
<!-- Error message (expandable) -->
|
|
164
|
-
<div v-if="item.status === 'error' && item.message" class="
|
|
164
|
+
<div v-if="item.status === 'error' && item.message" class="mint-batch-progress__item-error">
|
|
165
165
|
<button
|
|
166
166
|
type="button"
|
|
167
|
-
class="
|
|
167
|
+
class="mint-batch-progress__error-toggle"
|
|
168
168
|
@click.stop="toggleError(item.id)"
|
|
169
169
|
>
|
|
170
170
|
{{ expandedErrors.has(item.id) ? 'Hide error' : 'Show error' }}
|
|
171
171
|
</button>
|
|
172
|
-
<div v-if="expandedErrors.has(item.id)" class="
|
|
172
|
+
<div v-if="expandedErrors.has(item.id)" class="mint-batch-progress__item-message">
|
|
173
173
|
{{ item.message }}
|
|
174
174
|
</div>
|
|
175
175
|
</div>
|
|
@@ -23,31 +23,31 @@ function handleClick(item: BreadcrumbItem) {
|
|
|
23
23
|
</script>
|
|
24
24
|
|
|
25
25
|
<template>
|
|
26
|
-
<nav class="
|
|
27
|
-
<ol class="
|
|
26
|
+
<nav class="mint-breadcrumb" aria-label="Breadcrumb">
|
|
27
|
+
<ol class="mint-breadcrumb__list">
|
|
28
28
|
<li
|
|
29
29
|
v-for="(item, index) in items"
|
|
30
30
|
:key="index"
|
|
31
|
-
class="
|
|
31
|
+
class="mint-breadcrumb__item"
|
|
32
32
|
>
|
|
33
33
|
<slot name="item" :item="item" :index="index" :is-last="index === items.length - 1">
|
|
34
34
|
<a
|
|
35
35
|
v-if="item.href && index !== items.length - 1"
|
|
36
36
|
:href="item.href"
|
|
37
|
-
class="
|
|
37
|
+
class="mint-breadcrumb__link"
|
|
38
38
|
>
|
|
39
39
|
{{ item.label }}
|
|
40
40
|
</a>
|
|
41
41
|
<button
|
|
42
42
|
v-else-if="index !== items.length - 1"
|
|
43
|
-
class="
|
|
43
|
+
class="mint-breadcrumb__link"
|
|
44
44
|
@click="handleClick(item)"
|
|
45
45
|
>
|
|
46
46
|
{{ item.label }}
|
|
47
47
|
</button>
|
|
48
48
|
<span
|
|
49
49
|
v-else
|
|
50
|
-
class="
|
|
50
|
+
class="mint-breadcrumb__current"
|
|
51
51
|
aria-current="page"
|
|
52
52
|
>
|
|
53
53
|
{{ item.label }}
|
|
@@ -55,11 +55,11 @@ function handleClick(item: BreadcrumbItem) {
|
|
|
55
55
|
</slot>
|
|
56
56
|
<span
|
|
57
57
|
v-if="index !== items.length - 1"
|
|
58
|
-
class="
|
|
58
|
+
class="mint-breadcrumb__separator"
|
|
59
59
|
aria-hidden="true"
|
|
60
60
|
>
|
|
61
61
|
<slot name="separator">
|
|
62
|
-
<svg v-if="separator === '/'" class="
|
|
62
|
+
<svg v-if="separator === '/'" class="mint-breadcrumb__chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
63
63
|
<path d="m9 18 6-6-6-6" />
|
|
64
64
|
</svg>
|
|
65
65
|
<template v-else>{{ separator }}</template>
|
|
@@ -291,62 +291,62 @@ function nextMonth() {
|
|
|
291
291
|
</script>
|
|
292
292
|
|
|
293
293
|
<template>
|
|
294
|
-
<div class="
|
|
295
|
-
<div v-if="showNavigation" class="
|
|
296
|
-
<button type="button" class="
|
|
294
|
+
<div class="mint-calendar">
|
|
295
|
+
<div v-if="showNavigation" class="mint-calendar__header">
|
|
296
|
+
<button type="button" class="mint-calendar__nav-btn" aria-label="Previous month" @click="prevMonth">
|
|
297
297
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
298
298
|
<path d="m15 18-6-6 6-6" />
|
|
299
299
|
</svg>
|
|
300
300
|
</button>
|
|
301
301
|
<slot name="header" :month="currentMonth" :year="currentYear" :prev-month="prevMonth" :next-month="nextMonth">
|
|
302
|
-
<span class="
|
|
302
|
+
<span class="mint-calendar__title">{{ monthLabel }}</span>
|
|
303
303
|
</slot>
|
|
304
|
-
<button type="button" class="
|
|
304
|
+
<button type="button" class="mint-calendar__nav-btn" aria-label="Next month" @click="nextMonth">
|
|
305
305
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
306
306
|
<path d="m9 18 6-6-6-6" />
|
|
307
307
|
</svg>
|
|
308
308
|
</button>
|
|
309
309
|
</div>
|
|
310
310
|
|
|
311
|
-
<div class="
|
|
311
|
+
<div class="mint-calendar__weekdays">
|
|
312
312
|
<span
|
|
313
313
|
v-for="(label, i) in weekDayLabels"
|
|
314
314
|
:key="i"
|
|
315
|
-
class="
|
|
315
|
+
class="mint-calendar__weekday"
|
|
316
316
|
>
|
|
317
317
|
<slot name="week-day" :day-name="label" :index="i">{{ label }}</slot>
|
|
318
318
|
</span>
|
|
319
319
|
</div>
|
|
320
320
|
|
|
321
|
-
<div class="
|
|
321
|
+
<div class="mint-calendar__grid">
|
|
322
322
|
<button
|
|
323
323
|
v-for="(day, i) in calendarDays"
|
|
324
324
|
:key="i"
|
|
325
325
|
type="button"
|
|
326
326
|
:disabled="day.isDisabled"
|
|
327
327
|
:class="[
|
|
328
|
-
'
|
|
328
|
+
'mint-calendar__day',
|
|
329
329
|
{
|
|
330
|
-
'
|
|
331
|
-
'
|
|
332
|
-
'
|
|
333
|
-
'
|
|
334
|
-
'
|
|
335
|
-
'
|
|
330
|
+
'mint-calendar__day--today': day.isToday,
|
|
331
|
+
'mint-calendar__day--selected': day.isSelected,
|
|
332
|
+
'mint-calendar__day--in-range': day.isInRange,
|
|
333
|
+
'mint-calendar__day--disabled': day.isDisabled,
|
|
334
|
+
'mint-calendar__day--outside': day.isOutsideMonth,
|
|
335
|
+
'mint-calendar__day--interactive': selectionMode !== 'none' && !day.isDisabled,
|
|
336
336
|
},
|
|
337
337
|
]"
|
|
338
338
|
@click="handleDayClick(day)"
|
|
339
339
|
@mouseenter="handleDayHover(day)"
|
|
340
340
|
>
|
|
341
341
|
<slot name="day-content" :day="day">
|
|
342
|
-
<span class="
|
|
343
|
-
<div v-if="day.markers.length > 0" class="
|
|
342
|
+
<span class="mint-calendar__day-number">{{ day.dayOfMonth }}</span>
|
|
343
|
+
<div v-if="day.markers.length > 0" class="mint-calendar__markers">
|
|
344
344
|
<span
|
|
345
345
|
v-for="(marker, mi) in day.markers.slice(0, 3)"
|
|
346
346
|
:key="mi"
|
|
347
347
|
:class="[
|
|
348
|
-
'
|
|
349
|
-
`
|
|
348
|
+
'mint-calendar__marker',
|
|
349
|
+
`mint-calendar__marker--${marker.type ?? 'dot'}`,
|
|
350
350
|
]"
|
|
351
351
|
:style="marker.color ? { '--marker-color': marker.color } : {}"
|
|
352
352
|
:title="marker.label"
|
|
@@ -19,20 +19,20 @@ withDefaults(defineProps<Props>(), {
|
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
21
|
<template>
|
|
22
|
-
<div class="
|
|
23
|
-
<div v-if="title || description || $slots.toolbar" class="
|
|
24
|
-
<div v-if="title || description" class="
|
|
25
|
-
<h3 v-if="title" class="
|
|
26
|
-
<p v-if="description" class="
|
|
22
|
+
<div class="mint-chart">
|
|
23
|
+
<div v-if="title || description || $slots.toolbar" class="mint-chart__header">
|
|
24
|
+
<div v-if="title || description" class="mint-chart__header-text">
|
|
25
|
+
<h3 v-if="title" class="mint-chart__title">{{ title }}</h3>
|
|
26
|
+
<p v-if="description" class="mint-chart__description">{{ description }}</p>
|
|
27
27
|
</div>
|
|
28
|
-
<div v-if="$slots.toolbar" class="
|
|
28
|
+
<div v-if="$slots.toolbar" class="mint-chart__toolbar">
|
|
29
29
|
<slot name="toolbar" />
|
|
30
30
|
</div>
|
|
31
31
|
</div>
|
|
32
32
|
|
|
33
|
-
<div class="
|
|
33
|
+
<div class="mint-chart__body">
|
|
34
34
|
<!-- Loading overlay -->
|
|
35
|
-
<div v-if="loading" class="
|
|
35
|
+
<div v-if="loading" class="mint-chart__loading-overlay">
|
|
36
36
|
<LoadingSpinner size="lg" />
|
|
37
37
|
</div>
|
|
38
38
|
|
|
@@ -53,7 +53,7 @@ withDefaults(defineProps<Props>(), {
|
|
|
53
53
|
</template>
|
|
54
54
|
</div>
|
|
55
55
|
|
|
56
|
-
<div v-if="$slots.legend" class="
|
|
56
|
+
<div v-if="$slots.legend" class="mint-chart__legend">
|
|
57
57
|
<slot name="legend" />
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
@@ -21,15 +21,15 @@ function getParts(f: string): FormulaPart[] {
|
|
|
21
21
|
<template>
|
|
22
22
|
<component
|
|
23
23
|
:is="inline ? 'span' : 'div'"
|
|
24
|
-
:class="['
|
|
24
|
+
:class="['mint-chem-formula', !inline ? 'mint-chem-formula--block' : '']"
|
|
25
25
|
>
|
|
26
26
|
<template v-for="(part, i) in getParts(formula)" :key="i">
|
|
27
|
-
<span v-if="part.type === 'element'" class="
|
|
28
|
-
<span v-else-if="part.type === 'subscript'" class="
|
|
29
|
-
<span v-else-if="part.type === 'superscript'" class="
|
|
30
|
-
<span v-else-if="part.type === 'paren'" class="
|
|
31
|
-
<span v-else-if="part.type === 'dot'" class="
|
|
32
|
-
<span v-else-if="part.type === 'charge'" class="
|
|
27
|
+
<span v-if="part.type === 'element'" class="mint-chem-formula__element">{{ part.text }}</span>
|
|
28
|
+
<span v-else-if="part.type === 'subscript'" class="mint-chem-formula__subscript">{{ part.text }}</span>
|
|
29
|
+
<span v-else-if="part.type === 'superscript'" class="mint-chem-formula__superscript">{{ part.text }}</span>
|
|
30
|
+
<span v-else-if="part.type === 'paren'" class="mint-chem-formula__paren">{{ part.text }}</span>
|
|
31
|
+
<span v-else-if="part.type === 'dot'" class="mint-chem-formula__dot">{{ part.text }}</span>
|
|
32
|
+
<span v-else-if="part.type === 'charge'" class="mint-chem-formula__charge">{{ part.text }}</span>
|
|
33
33
|
</template>
|
|
34
34
|
</component>
|
|
35
35
|
</template>
|