@citizenplane/pimp 18.6.2 → 18.8.0
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/biome.json +178 -0
- package/dist/components/BaseInputLabel.vue.d.ts.map +1 -1
- package/dist/components/BaseSelectClearButton.vue.d.ts.map +1 -1
- package/dist/components/CpAccordion.vue.d.ts.map +1 -1
- package/dist/components/CpAlert.vue.d.ts.map +1 -1
- package/dist/components/CpBadge.vue.d.ts.map +1 -1
- package/dist/components/CpButton.vue.d.ts.map +1 -1
- package/dist/components/CpButtonToggle.vue.d.ts +1 -1
- package/dist/components/CpButtonToggle.vue.d.ts.map +1 -1
- package/dist/components/CpCalendar.vue.d.ts.map +1 -1
- package/dist/components/CpCheckbox.vue.d.ts.map +1 -1
- package/dist/components/CpContextualMenu.vue.d.ts.map +1 -1
- package/dist/components/CpDate.vue.d.ts.map +1 -1
- package/dist/components/CpDatepicker.vue.d.ts.map +1 -1
- package/dist/components/CpInput.vue.d.ts.map +1 -1
- package/dist/components/CpItemActions.vue.d.ts +2 -0
- package/dist/components/CpItemActions.vue.d.ts.map +1 -1
- package/dist/components/CpMenu.vue.d.ts.map +1 -1
- package/dist/components/CpMenuItem.vue.d.ts.map +1 -1
- package/dist/components/CpMultiselect.vue.d.ts.map +1 -1
- package/dist/components/CpRadio.vue.d.ts.map +1 -1
- package/dist/components/CpRadioGroup.vue.d.ts.map +1 -1
- package/dist/components/CpRadioNew.vue.d.ts.map +1 -1
- package/dist/components/CpSelect.vue.d.ts.map +1 -1
- package/dist/components/CpSelectMenu.vue.d.ts.map +1 -1
- package/dist/components/CpSelectableButton.vue.d.ts +1 -1
- package/dist/components/CpSelectableButton.vue.d.ts.map +1 -1
- package/dist/components/CpSwitch.vue.d.ts.map +1 -1
- package/dist/components/CpTable.vue.d.ts.map +1 -1
- package/dist/components/CpTelInput.vue.d.ts.map +1 -1
- package/dist/components/CpTooltip.vue.d.ts +2 -0
- package/dist/components/CpTooltip.vue.d.ts.map +1 -1
- package/dist/components/CpTrip.vue.d.ts +48 -0
- package/dist/components/CpTrip.vue.d.ts.map +1 -0
- package/dist/components/CpTripTimeline.vue.d.ts +24 -0
- package/dist/components/CpTripTimeline.vue.d.ts.map +1 -0
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/composables/useDynamicSize.d.ts +9 -0
- package/dist/composables/useDynamicSize.d.ts.map +1 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/layout/Breakpoints.d.ts +9 -0
- package/dist/constants/layout/Breakpoints.d.ts.map +1 -0
- package/dist/constants/layout/Sizes.d.ts +2 -0
- package/dist/constants/layout/Sizes.d.ts.map +1 -0
- package/dist/constants/layout/index.d.ts +3 -0
- package/dist/constants/layout/index.d.ts.map +1 -0
- package/dist/helpers/functions.d.ts +1 -0
- package/dist/helpers/functions.d.ts.map +1 -1
- package/dist/libs/CoreDatepicker.vue.d.ts.map +1 -1
- package/dist/pimp.es.js +6797 -6461
- package/dist/pimp.umd.js +54 -54
- package/dist/style.css +1 -1
- package/package.json +14 -24
- package/src/assets/css/base.css +17 -11
- package/src/assets/css/colors.css +12 -22
- package/src/assets/css/dimensions.css +4 -0
- package/src/assets/css/shadows.css +0 -3
- package/src/assets/css/tokens.css +21 -65
- package/src/assets/css/typography.css +0 -17
- package/src/assets/main.css +7 -7
- package/src/assets/styles/helpers/_functions.scss +2 -2
- package/src/assets/styles/utilities/_index.scss +2 -3
- package/src/components/BaseInputLabel.vue +7 -11
- package/src/components/BaseSelectClearButton.vue +6 -7
- package/src/components/CpAccordion.vue +27 -28
- package/src/components/CpAccordionGroup.vue +2 -2
- package/src/components/CpAlert.vue +12 -11
- package/src/components/CpBadge.vue +4 -19
- package/src/components/CpButton.vue +23 -25
- package/src/components/CpButtonGroup.vue +2 -2
- package/src/components/CpButtonToggle.vue +22 -22
- package/src/components/CpCalendar.vue +30 -26
- package/src/components/CpCheckbox.vue +29 -33
- package/src/components/CpContextualMenu.vue +1 -2
- package/src/components/CpDate.vue +72 -76
- package/src/components/CpDatepicker.vue +2 -3
- package/src/components/CpDialog.vue +8 -8
- package/src/components/CpHeading.vue +6 -6
- package/src/components/CpIcon.vue +2 -2
- package/src/components/CpInput.vue +46 -48
- package/src/components/CpItemActions.vue +17 -16
- package/src/components/CpMenu.vue +8 -9
- package/src/components/CpMenuItem.vue +7 -7
- package/src/components/CpMenuList.vue +3 -3
- package/src/components/CpMultiselect.vue +29 -30
- package/src/components/CpRadio.vue +53 -59
- package/src/components/CpRadioGroup.vue +11 -12
- package/src/components/CpRadioNew.vue +56 -58
- package/src/components/CpSelect.vue +42 -42
- package/src/components/CpSelectMenu.vue +32 -32
- package/src/components/CpSelectableButton.vue +50 -51
- package/src/components/CpSwitch.vue +43 -44
- package/src/components/CpTable.vue +69 -81
- package/src/components/CpTableColumnEditor.vue +16 -16
- package/src/components/CpTableEmptyState.vue +4 -4
- package/src/components/CpTableFooter.vue +2 -2
- package/src/components/CpTableFooterDesktop.vue +2 -2
- package/src/components/CpTableFooterDetails.vue +2 -2
- package/src/components/CpTableFooterMobile.vue +4 -4
- package/src/components/CpTabs.vue +1 -1
- package/src/components/CpTelInput.vue +31 -32
- package/src/components/CpTextarea.vue +13 -13
- package/src/components/CpToast.vue +25 -24
- package/src/components/CpTooltip.vue +15 -13
- package/src/components/CpTransitionCounter.vue +1 -1
- package/src/components/CpTransitionExpand.vue +5 -5
- package/src/components/CpTransitionSize.vue +1 -1
- package/src/components/CpTrip.vue +190 -0
- package/src/components/CpTripTimeline.vue +272 -0
- package/src/components/index.ts +36 -34
- package/src/composables/useDynamicSize.ts +60 -0
- package/src/constants/index.ts +2 -2
- package/src/constants/layout/Breakpoints.ts +8 -0
- package/src/constants/layout/Sizes.ts +1 -0
- package/src/constants/layout/index.ts +3 -0
- package/src/directives/ClickOutside.ts +1 -1
- package/src/directives/ResizeSelect.ts +1 -1
- package/src/helpers/functions.ts +1 -1
- package/src/helpers/index.ts +1 -1
- package/src/libs/CoreDatepicker.vue +115 -134
- package/src/stories/Colors.stories.ts +2 -1
- package/src/stories/CpAccordion.stories.ts +2 -2
- package/src/stories/CpAccordionGroup.stories.ts +1 -2
- package/src/stories/CpButtonToggle.stories.ts +1 -2
- package/src/stories/CpCheckbox.stories.ts +1 -2
- package/src/stories/CpContextualMenu.stories.ts +1 -2
- package/src/stories/CpDate.stories.ts +1 -2
- package/src/stories/CpDatepicker.stories.ts +1 -2
- package/src/stories/CpDialog.stories.ts +1 -2
- package/src/stories/CpInput.stories.ts +1 -2
- package/src/stories/CpItemActions.stories.ts +10 -5
- package/src/stories/CpMenu.stories.ts +1 -2
- package/src/stories/CpMenuItem.stories.ts +1 -2
- package/src/stories/CpMultiselect.stories.ts +1 -2
- package/src/stories/CpRadio.stories.ts +1 -2
- package/src/stories/CpRadioGroup.stories.ts +1 -2
- package/src/stories/CpSelect.stories.ts +1 -2
- package/src/stories/CpSelectMenu.stories.ts +1 -2
- package/src/stories/CpSwitch.stories.ts +1 -2
- package/src/stories/CpTable.stories.ts +2 -3
- package/src/stories/CpTabs.stories.ts +1 -2
- package/src/stories/CpText.stories.ts +2 -1
- package/src/stories/CpTextarea.stories.ts +1 -2
- package/src/stories/CpToast.stories.ts +2 -3
- package/src/stories/CpTransitionCounter.stories.ts +1 -2
- package/src/stories/CpTransitionExpand.stories.ts +1 -2
- package/src/stories/CpTransitionListItems.stories.ts +1 -2
- package/src/stories/CpTransitionSize.stories.ts +1 -2
- package/src/stories/CpTransitionSlide.stories.ts +1 -2
- package/src/stories/CpTransitionTabContent.stories.ts +1 -2
- package/src/stories/CpTrip.stories.ts +323 -0
- package/src/stories/Dimensions.stories.ts +1 -0
- package/src/stories/Shadows.stories.ts +1 -0
- package/src/stories/Typography.stories.ts +1 -0
- package/src/vendors/ff-polyfill.ts +1 -1
- package/vitest.workspace.js +1 -1
- package/src/components/Pimp.vue +0 -10
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
<script setup lang="ts">
|
|
20
20
|
import { computed, provide, reactive, toRef, useId } from 'vue'
|
|
21
21
|
|
|
22
|
-
import CpRadioNew, { type RadioOption } from './CpRadioNew.vue'
|
|
23
22
|
import { capitalizeFirstLetter } from '@/helpers'
|
|
23
|
+
import CpRadioNew, { type RadioOption } from './CpRadioNew.vue'
|
|
24
24
|
|
|
25
25
|
interface Props {
|
|
26
26
|
autofocus?: boolean
|
|
@@ -83,9 +83,9 @@ provide(
|
|
|
83
83
|
<style lang="scss">
|
|
84
84
|
.cpRadioGroup {
|
|
85
85
|
display: flex;
|
|
86
|
-
gap: var(--cp-spacing-md);
|
|
87
|
-
flex-direction: column;
|
|
88
86
|
width: 100%;
|
|
87
|
+
flex-direction: column;
|
|
88
|
+
gap: var(--cp-spacing-md);
|
|
89
89
|
|
|
90
90
|
&__options {
|
|
91
91
|
display: flex;
|
|
@@ -94,16 +94,15 @@ provide(
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
&--isHorizontal .cpRadioGroup__options {
|
|
97
|
-
flex-
|
|
98
|
-
gap: var(--cp-spacing-2xl);
|
|
99
|
-
flex-wrap: wrap;
|
|
97
|
+
flex-flow: row wrap;
|
|
100
98
|
align-items: flex-start;
|
|
99
|
+
gap: var(--cp-spacing-2xl);
|
|
101
100
|
}
|
|
102
101
|
|
|
103
102
|
&__header {
|
|
104
103
|
display: flex;
|
|
105
104
|
flex-direction: column;
|
|
106
|
-
font-family:
|
|
105
|
+
font-family: Figtree, sans-serif;
|
|
107
106
|
font-size: var(--cp-text-size-sm);
|
|
108
107
|
line-height: var(--cp-line-height-sm);
|
|
109
108
|
}
|
|
@@ -114,16 +113,16 @@ provide(
|
|
|
114
113
|
}
|
|
115
114
|
|
|
116
115
|
&__label {
|
|
117
|
-
font-weight: 500;
|
|
118
|
-
color: var(--cp-text-primary);
|
|
119
116
|
display: flex;
|
|
120
|
-
gap: var(--cp-spacing-sm);
|
|
121
117
|
align-items: baseline;
|
|
118
|
+
color: var(--cp-text-primary);
|
|
119
|
+
font-weight: 500;
|
|
120
|
+
gap: var(--cp-spacing-sm);
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
&__helperText {
|
|
125
|
-
font-weight: 400;
|
|
126
124
|
color: var(--cp-text-secondary);
|
|
125
|
+
font-weight: 400;
|
|
127
126
|
}
|
|
128
127
|
|
|
129
128
|
&__required {
|
|
@@ -133,8 +132,8 @@ provide(
|
|
|
133
132
|
|
|
134
133
|
&__optional {
|
|
135
134
|
color: var(--cp-text-secondary);
|
|
136
|
-
font-weight: 400;
|
|
137
135
|
font-size: var(--cp-text-size-xs);
|
|
136
|
+
font-weight: 400;
|
|
138
137
|
line-height: var(--cp-line-height-xs);
|
|
139
138
|
}
|
|
140
139
|
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
</template>
|
|
25
25
|
|
|
26
26
|
<script setup lang="ts">
|
|
27
|
-
import {
|
|
27
|
+
import { computed, inject } from 'vue'
|
|
28
28
|
|
|
29
29
|
export interface RadioOption {
|
|
30
30
|
disabled?: boolean
|
|
@@ -63,9 +63,41 @@ const radioId = computed(() => getRadioId(props.option.value))
|
|
|
63
63
|
.cpRadioNew {
|
|
64
64
|
position: relative;
|
|
65
65
|
display: flex;
|
|
66
|
-
gap: var(--cp-spacing-md);
|
|
67
66
|
align-items: flex-start;
|
|
68
67
|
cursor: pointer;
|
|
68
|
+
gap: var(--cp-spacing-md);
|
|
69
|
+
|
|
70
|
+
&__label {
|
|
71
|
+
display: flex;
|
|
72
|
+
align-items: baseline;
|
|
73
|
+
font-weight: 500;
|
|
74
|
+
gap: var(--cp-spacing-sm);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
&__helperText {
|
|
78
|
+
color: var(--cp-text-secondary);
|
|
79
|
+
font-weight: 400;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&__required {
|
|
83
|
+
color: var(--cp-text-error-primary);
|
|
84
|
+
font-family: Figtree, sans-serif;
|
|
85
|
+
font-size: var(--cp-text-size-sm);
|
|
86
|
+
font-weight: 700;
|
|
87
|
+
line-height: var(--cp-line-height-sm);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
&__optional {
|
|
91
|
+
color: var(--cp-text-secondary);
|
|
92
|
+
font-size: var(--cp-text-size-xs);
|
|
93
|
+
font-weight: 400;
|
|
94
|
+
line-height: var(--cp-line-height-xs);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
&--lg .cpRadioNew__optional {
|
|
98
|
+
font-size: var(--cp-text-size-sm);
|
|
99
|
+
line-height: var(--cp-line-height-sm);
|
|
100
|
+
}
|
|
69
101
|
|
|
70
102
|
&:not(:has(.cpRadioNew__helperText)) {
|
|
71
103
|
align-items: center;
|
|
@@ -75,7 +107,7 @@ const radioId = computed(() => getRadioId(props.option.value))
|
|
|
75
107
|
&:has(:disabled) * {
|
|
76
108
|
cursor: not-allowed;
|
|
77
109
|
}
|
|
78
|
-
|
|
110
|
+
|
|
79
111
|
&:has(:disabled) .cpRadioNew__helperText,
|
|
80
112
|
&:has(:disabled) .cpRadioNew__label,
|
|
81
113
|
&:has(:disabled) .cpRadioNew__optional {
|
|
@@ -95,76 +127,49 @@ const radioId = computed(() => getRadioId(props.option.value))
|
|
|
95
127
|
line-height: var(--cp-line-height-md);
|
|
96
128
|
}
|
|
97
129
|
|
|
98
|
-
&--lg
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
&__label {
|
|
104
|
-
font-weight: 500;
|
|
105
|
-
display: flex;
|
|
106
|
-
gap: var(--cp-spacing-sm);
|
|
107
|
-
align-items: baseline;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
&__helperText {
|
|
111
|
-
font-weight: 400;
|
|
112
|
-
color: var(--cp-text-secondary);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
&__required {
|
|
116
|
-
color: var(--cp-text-error-primary);
|
|
117
|
-
font-weight: 700;
|
|
118
|
-
font-size: var(--cp-text-size-sm);
|
|
119
|
-
line-height: var(--cp-line-height-sm);
|
|
120
|
-
font-family: 'Figtree', sans-serif;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
&__optional {
|
|
124
|
-
color: var(--cp-text-secondary);
|
|
125
|
-
font-weight: 400;
|
|
126
|
-
font-size: var(--cp-text-size-xs);
|
|
127
|
-
line-height: var(--cp-line-height-xs);
|
|
130
|
+
&--lg {
|
|
131
|
+
input {
|
|
132
|
+
width: var(--cp-dimensions-5);
|
|
133
|
+
height: var(--cp-dimensions-5);
|
|
134
|
+
}
|
|
128
135
|
}
|
|
129
136
|
|
|
130
137
|
input {
|
|
131
|
-
-webkit-appearance: none;
|
|
132
|
-
-moz-appearance: none;
|
|
133
|
-
appearance: none;
|
|
134
|
-
border: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
135
|
-
border-radius: var(--cp-radius-full);
|
|
136
138
|
width: var(--cp-dimensions-4);
|
|
137
139
|
height: var(--cp-dimensions-4);
|
|
140
|
+
border: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
141
|
+
border-radius: var(--cp-radius-full);
|
|
142
|
+
margin: var(--cp-spacing-sm);
|
|
143
|
+
appearance: none;
|
|
144
|
+
background-color: var(--cp-background-primary);
|
|
145
|
+
box-shadow: var(--cp-shadows-3xs);
|
|
138
146
|
transition:
|
|
139
147
|
transform 0.1s linear,
|
|
140
148
|
box-shadow 0.1s linear,
|
|
141
149
|
background-color 0.1s linear;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
150
|
+
|
|
151
|
+
&:focus {
|
|
152
|
+
box-shadow: var(--cp-shadow-focus-ring-accent);
|
|
153
|
+
}
|
|
145
154
|
|
|
146
155
|
&:checked {
|
|
147
|
-
background-color: var(--cp-foreground-accent-primary);
|
|
148
156
|
border-color: var(--cp-foreground-accent-primary);
|
|
157
|
+
background-color: var(--cp-foreground-accent-primary);
|
|
149
158
|
}
|
|
150
159
|
|
|
151
160
|
&:hover:checked {
|
|
152
161
|
background-color: var(--cp-foreground-accent-primary-hover);
|
|
153
162
|
}
|
|
154
163
|
|
|
155
|
-
|
|
156
|
-
box-shadow: var(--cp-shadow-focus-ring-accent);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
&:before {
|
|
160
|
-
content: '';
|
|
164
|
+
&::before {
|
|
161
165
|
display: flex;
|
|
162
166
|
width: 100%;
|
|
163
167
|
height: 100%;
|
|
164
168
|
border-radius: var(--cp-radius-full);
|
|
165
169
|
background-color: var(--cp-background-primary);
|
|
166
|
-
|
|
170
|
+
content: '';
|
|
167
171
|
transform: scale(0);
|
|
172
|
+
transition: transform 0.15s linear;
|
|
168
173
|
}
|
|
169
174
|
|
|
170
175
|
&:hover:not(:checked, :disabled) {
|
|
@@ -175,7 +180,7 @@ const radioId = computed(() => getRadioId(props.option.value))
|
|
|
175
180
|
transform: scale(0.8);
|
|
176
181
|
}
|
|
177
182
|
|
|
178
|
-
&:checked
|
|
183
|
+
&:checked::before {
|
|
179
184
|
transform: scale(0.5);
|
|
180
185
|
}
|
|
181
186
|
|
|
@@ -184,16 +189,9 @@ const radioId = computed(() => getRadioId(props.option.value))
|
|
|
184
189
|
background-color: var(--cp-background-disabled);
|
|
185
190
|
}
|
|
186
191
|
|
|
187
|
-
&:checked:disabled
|
|
192
|
+
&:checked:disabled::before {
|
|
188
193
|
background-color: var(--cp-foreground-disabled);
|
|
189
194
|
}
|
|
190
195
|
}
|
|
191
|
-
|
|
192
|
-
&--lg {
|
|
193
|
-
input {
|
|
194
|
-
width: var(--cp-dimensions-5);
|
|
195
|
-
height: var(--cp-dimensions-5);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
196
|
}
|
|
199
197
|
</style>
|
|
@@ -38,10 +38,11 @@
|
|
|
38
38
|
<script setup lang="ts">
|
|
39
39
|
import { computed, useId } from 'vue'
|
|
40
40
|
|
|
41
|
+
import type { Sizes } from '@/constants'
|
|
42
|
+
|
|
41
43
|
import BaseInputLabel from '@/components/BaseInputLabel.vue'
|
|
42
44
|
import CpTransitionExpand from '@/components/CpTransitionExpand.vue'
|
|
43
45
|
|
|
44
|
-
import type { Sizes } from '@/constants'
|
|
45
46
|
import { capitalizeFirstLetter } from '@/helpers'
|
|
46
47
|
|
|
47
48
|
interface SelectOption {
|
|
@@ -106,48 +107,47 @@ const displayErrorMessage = computed(() => props.isInvalid && props.errorMessage
|
|
|
106
107
|
.cpSelect {
|
|
107
108
|
position: relative;
|
|
108
109
|
|
|
109
|
-
&:has(.cpSelect__help, .cpSelect__error) .cpSelect__container {
|
|
110
|
-
margin-bottom: var(--cp-spacing-md);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
110
|
&__container {
|
|
114
111
|
position: relative;
|
|
115
112
|
|
|
116
|
-
|
|
117
|
-
width: var(--cp-dimensions-4);
|
|
118
|
-
height: var(--cp-dimensions-4);
|
|
119
|
-
|
|
120
|
-
content: '';
|
|
113
|
+
&::after {
|
|
121
114
|
position: absolute;
|
|
122
|
-
right: var(--cp-dimensions-3);
|
|
123
115
|
top: 50%;
|
|
124
|
-
|
|
116
|
+
right: var(--cp-dimensions-3);
|
|
117
|
+
width: var(--cp-dimensions-4);
|
|
118
|
+
height: var(--cp-dimensions-4);
|
|
125
119
|
background-color: var(--cp-foreground-secondary);
|
|
120
|
+
content: '';
|
|
126
121
|
mask-image: url('@/assets/images/icons/chevron-down-icon.svg');
|
|
127
|
-
mask-size: cover;
|
|
128
122
|
mask-repeat: no-repeat;
|
|
123
|
+
mask-size: cover;
|
|
129
124
|
pointer-events: none;
|
|
125
|
+
transform: translateY(-50%);
|
|
130
126
|
}
|
|
131
127
|
}
|
|
132
128
|
|
|
129
|
+
&:has(.cpSelect__help, .cpSelect__error) .cpSelect__container {
|
|
130
|
+
margin-bottom: var(--cp-spacing-md);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
133
|
&__inner {
|
|
134
134
|
@extend %u-text-ellipsis;
|
|
135
135
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
136
|
+
width: 100%;
|
|
137
|
+
padding: var(--cp-spacing-md)
|
|
138
|
+
calc(var(--cp-spacing-lg) + var(--cp-spacing-sm) + var(--cp-dimensions-4) + var(--cp-spacing-md))
|
|
139
|
+
var(--cp-spacing-md) var(--cp-spacing-xl);
|
|
140
140
|
border: none;
|
|
141
141
|
border-radius: var(--cp-radius-md);
|
|
142
|
+
appearance: none;
|
|
142
143
|
background-color: var(--cp-background-primary);
|
|
143
|
-
|
|
144
|
+
box-shadow:
|
|
145
|
+
var(--cp-shadows-3xs),
|
|
146
|
+
0 0 0 var(--cp-dimensions-0_25) var(--cp-border-soft);
|
|
144
147
|
color: var(--cp-foreground-primary);
|
|
145
148
|
cursor: pointer;
|
|
146
|
-
padding: var(--cp-spacing-md)
|
|
147
|
-
calc(var(--cp-spacing-lg) + var(--cp-spacing-sm) + var(--cp-dimensions-4) + var(--cp-spacing-md))
|
|
148
|
-
var(--cp-spacing-md) var(--cp-spacing-xl);
|
|
149
|
-
line-height: var(--cp-line-height-md);
|
|
150
149
|
font-size: var(--cp-text-size-sm);
|
|
150
|
+
line-height: var(--cp-line-height-md);
|
|
151
151
|
|
|
152
152
|
&:hover {
|
|
153
153
|
box-shadow:
|
|
@@ -156,8 +156,8 @@ const displayErrorMessage = computed(() => props.isInvalid && props.errorMessage
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
&:focus {
|
|
159
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
|
|
160
159
|
background-color: var(--cp-background-primary);
|
|
160
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-focus);
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
@@ -181,34 +181,22 @@ const displayErrorMessage = computed(() => props.isInvalid && props.errorMessage
|
|
|
181
181
|
|
|
182
182
|
&--isDisabled {
|
|
183
183
|
.cpSelect__inner {
|
|
184
|
-
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-disabled);
|
|
185
184
|
background: var(--cp-background-disabled);
|
|
185
|
+
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-disabled);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
.cpSelect__inner,
|
|
189
|
-
.cpSelect__container
|
|
190
|
-
cursor: not-allowed;
|
|
189
|
+
.cpSelect__container::after {
|
|
191
190
|
color: var(--cp-text-disabled);
|
|
191
|
+
cursor: not-allowed;
|
|
192
192
|
opacity: 1;
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
.cpSelect__container
|
|
195
|
+
.cpSelect__container::after {
|
|
196
196
|
background-color: var(--cp-foreground-disabled);
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
&--isInvalid {
|
|
201
|
-
.cpSelect__inner,
|
|
202
|
-
.cpSelect__inner:hover,
|
|
203
|
-
.cpSelect__inner:focus {
|
|
204
|
-
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-error-solid);
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.cpSelect__inner:focus {
|
|
208
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-border-error-solid);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
200
|
&--sm {
|
|
213
201
|
.cpSelect__inner {
|
|
214
202
|
padding: var(--cp-spacing-sm) calc(var(--cp-spacing-2xl) + var(--cp-dimensions-3)) var(--cp-spacing-sm)
|
|
@@ -218,16 +206,28 @@ const displayErrorMessage = computed(() => props.isInvalid && props.errorMessage
|
|
|
218
206
|
|
|
219
207
|
&--lg {
|
|
220
208
|
.cpSelect__inner {
|
|
221
|
-
border-radius: var(--cp-radius-md-lg);
|
|
222
|
-
font-size: var(--cp-text-size-md);
|
|
223
209
|
padding: var(--cp-spacing-lg) calc(var(--cp-spacing-xl) + var(--cp-dimensions-5) + var(--cp-spacing-sm))
|
|
224
210
|
var(--cp-spacing-lg) var(--cp-spacing-xl);
|
|
211
|
+
border-radius: var(--cp-radius-md-lg);
|
|
212
|
+
font-size: var(--cp-text-size-md);
|
|
225
213
|
}
|
|
226
214
|
|
|
227
|
-
.cpSelect__container
|
|
215
|
+
.cpSelect__container::after {
|
|
228
216
|
width: var(--cp-dimensions-5);
|
|
229
217
|
height: var(--cp-dimensions-5);
|
|
230
218
|
}
|
|
231
219
|
}
|
|
220
|
+
|
|
221
|
+
&--isInvalid {
|
|
222
|
+
.cpSelect__inner,
|
|
223
|
+
.cpSelect__inner:hover,
|
|
224
|
+
.cpSelect__inner:focus {
|
|
225
|
+
box-shadow: 0 0 0 var(--cp-dimensions-0_25) var(--cp-border-error-solid);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.cpSelect__inner:focus {
|
|
229
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-border-error-solid);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
232
|
}
|
|
233
233
|
</style>
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
</template>
|
|
48
48
|
|
|
49
49
|
<script setup lang="ts">
|
|
50
|
-
import {
|
|
50
|
+
import { computed, nextTick, ref } from 'vue'
|
|
51
51
|
|
|
52
52
|
export interface SelectValue {
|
|
53
53
|
label: string
|
|
@@ -77,7 +77,6 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
77
77
|
dropdownTitle: 'Select value',
|
|
78
78
|
dropdownFilterPlaceholder: 'Filter...',
|
|
79
79
|
dropdownEmptyViewPlaceholder: 'No option found',
|
|
80
|
-
// eslint-disable-next-line vue/no-boolean-default
|
|
81
80
|
closeOnSelect: true,
|
|
82
81
|
})
|
|
83
82
|
|
|
@@ -142,19 +141,19 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
142
141
|
font-size: var(--cp-text-size-sm);
|
|
143
142
|
|
|
144
143
|
&__button {
|
|
145
|
-
box-shadow: inset 0 var(--cp-dimensions-0_25) var(--cp-dimensions-0_5) rgba(0, 0, 0, 0.12);
|
|
146
|
-
border: none;
|
|
147
|
-
outline: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
148
|
-
border-radius: var(--cp-radius-md-lg);
|
|
149
|
-
background: var(--cp-background-white);
|
|
150
|
-
padding: var(--cp-spacing-md);
|
|
151
|
-
width: 100%;
|
|
152
144
|
display: flex;
|
|
145
|
+
width: 100%;
|
|
153
146
|
align-items: center;
|
|
154
147
|
justify-content: space-between;
|
|
148
|
+
padding: var(--cp-spacing-md);
|
|
149
|
+
border: none;
|
|
150
|
+
border-radius: var(--cp-radius-md-lg);
|
|
151
|
+
background: var(--cp-background-white);
|
|
152
|
+
box-shadow: inset 0 var(--cp-dimensions-0_25) var(--cp-dimensions-0_5) rgba(0, 0, 0, 12%);
|
|
155
153
|
font-size: inherit;
|
|
156
|
-
line-height: var(--cp-line-height-md);
|
|
157
154
|
font-weight: normal;
|
|
155
|
+
line-height: var(--cp-line-height-md);
|
|
156
|
+
outline: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
158
157
|
text-transform: capitalize;
|
|
159
158
|
|
|
160
159
|
&:hover,
|
|
@@ -164,8 +163,8 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
164
163
|
}
|
|
165
164
|
|
|
166
165
|
&:focus {
|
|
167
|
-
outline: var(--cp-dimensions-0_5) solid var(--cp-background-accent-solid);
|
|
168
166
|
box-shadow: 0 0 0 var(--cp-dimensions-0_5) var(--cp-background-accent-solid);
|
|
167
|
+
outline: var(--cp-dimensions-0_5) solid var(--cp-background-accent-solid);
|
|
169
168
|
}
|
|
170
169
|
}
|
|
171
170
|
|
|
@@ -174,10 +173,10 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
174
173
|
}
|
|
175
174
|
|
|
176
175
|
&__icon {
|
|
177
|
-
margin-left: var(--cp-dimensions-3);
|
|
178
176
|
width: var(--cp-dimensions-5);
|
|
179
177
|
height: var(--cp-dimensions-5);
|
|
180
178
|
flex-shrink: 0;
|
|
179
|
+
margin-left: var(--cp-dimensions-3);
|
|
181
180
|
transition: transform 0.2s ease-out;
|
|
182
181
|
|
|
183
182
|
&--isOpened {
|
|
@@ -186,14 +185,14 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
186
185
|
}
|
|
187
186
|
|
|
188
187
|
&__dropdown {
|
|
189
|
-
z-index: 3;
|
|
190
188
|
position: absolute;
|
|
189
|
+
z-index: 3;
|
|
191
190
|
top: calc(100% + var(--cp-dimensions-1));
|
|
192
191
|
left: 0;
|
|
192
|
+
width: max(100%, calc(var(--cp-dimensions-1) * 62.5));
|
|
193
193
|
border: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
194
194
|
border-radius: var(--cp-radius-md-lg);
|
|
195
195
|
background: var(--cp-background-white);
|
|
196
|
-
width: max(100%, calc(var(--cp-dimensions-1) * 62.5));
|
|
197
196
|
font-size: inherit;
|
|
198
197
|
}
|
|
199
198
|
|
|
@@ -204,50 +203,51 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
204
203
|
}
|
|
205
204
|
|
|
206
205
|
&__title {
|
|
207
|
-
padding: var(--cp-spacing-lg) var(--cp-spacing-md);
|
|
208
206
|
display: flex;
|
|
209
207
|
align-items: center;
|
|
210
208
|
justify-content: space-between;
|
|
211
|
-
|
|
212
|
-
font-weight: 600;
|
|
209
|
+
padding: var(--cp-spacing-lg) var(--cp-spacing-md);
|
|
213
210
|
color: var(--cp-text-primary);
|
|
211
|
+
font-weight: 600;
|
|
212
|
+
white-space: normal;
|
|
214
213
|
}
|
|
215
214
|
|
|
216
215
|
&__filterBar {
|
|
216
|
+
display: flex;
|
|
217
|
+
align-items: center;
|
|
218
|
+
padding: var(--cp-spacing-md);
|
|
217
219
|
border-top: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
218
220
|
border-bottom: var(--cp-dimensions-0_25) solid var(--cp-border-soft);
|
|
219
221
|
background-color: var(--cp-background-disabled);
|
|
220
|
-
padding: var(--cp-spacing-md);
|
|
221
|
-
display: flex;
|
|
222
|
-
align-items: center;
|
|
223
222
|
|
|
224
223
|
& > input {
|
|
225
|
-
background-color: transparent;
|
|
226
224
|
flex: 1;
|
|
225
|
+
background-color: transparent;
|
|
227
226
|
color: var(--cp-text-primary);
|
|
228
227
|
|
|
228
|
+
// stylelint-disable-next-line max-nesting-depth
|
|
229
229
|
&::placeholder {
|
|
230
230
|
color: var(--cp-text-secondary);
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
i {
|
|
235
|
+
flex-shrink: 0;
|
|
235
236
|
margin-right: var(--cp-spacing-md);
|
|
236
237
|
color: var(--cp-text-primary);
|
|
237
|
-
flex-shrink: 0;
|
|
238
238
|
}
|
|
239
239
|
}
|
|
240
240
|
|
|
241
241
|
&__list {
|
|
242
242
|
display: flex;
|
|
243
|
-
flex-direction: column;
|
|
244
243
|
min-height: calc(var(--cp-dimensions-1) * 62.5);
|
|
244
|
+
flex-direction: column;
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
&__items {
|
|
248
|
-
margin: var(--cp-spacing-sm) 0;
|
|
249
|
-
padding: 0;
|
|
250
248
|
max-height: calc(var(--cp-dimensions-1) * 62.5);
|
|
249
|
+
padding: 0;
|
|
250
|
+
margin: var(--cp-spacing-sm) 0;
|
|
251
251
|
overflow-y: auto;
|
|
252
252
|
|
|
253
253
|
li {
|
|
@@ -257,11 +257,11 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
257
257
|
|
|
258
258
|
&__item {
|
|
259
259
|
position: relative;
|
|
260
|
-
padding: var(--cp-spacing-md) var(--cp-spacing-xl) var(--cp-spacing-md) calc(var(--cp-dimensions-1) * 9);
|
|
261
|
-
width: 100%;
|
|
262
260
|
display: flex;
|
|
263
|
-
|
|
261
|
+
width: 100%;
|
|
262
|
+
padding: var(--cp-spacing-md) var(--cp-spacing-xl) var(--cp-spacing-md) calc(var(--cp-dimensions-1) * 9);
|
|
264
263
|
cursor: pointer;
|
|
264
|
+
text-align: initial;
|
|
265
265
|
text-transform: capitalize;
|
|
266
266
|
|
|
267
267
|
&:hover {
|
|
@@ -275,18 +275,18 @@ const isSelectedValue = (value: string): boolean => {
|
|
|
275
275
|
|
|
276
276
|
&__icon {
|
|
277
277
|
position: absolute;
|
|
278
|
-
left: var(--cp-spacing-md);
|
|
279
278
|
top: 50%;
|
|
280
|
-
|
|
279
|
+
left: var(--cp-spacing-md);
|
|
281
280
|
color: var(--cp-background-accent-solid);
|
|
281
|
+
transform: translateY(-50%);
|
|
282
282
|
}
|
|
283
283
|
|
|
284
284
|
&__emptyState {
|
|
285
|
-
padding: var(--cp-spacing-xl) var(--cp-spacing-md);
|
|
286
|
-
flex: 1;
|
|
287
285
|
display: flex;
|
|
286
|
+
flex: 1;
|
|
288
287
|
align-items: center;
|
|
289
288
|
justify-content: center;
|
|
289
|
+
padding: var(--cp-spacing-xl) var(--cp-spacing-md);
|
|
290
290
|
color: var(--cp-text-secondary);
|
|
291
291
|
}
|
|
292
292
|
}
|