@pareto-engineering/design-system 4.0.0-alpha.35 → 4.0.0-alpha.37
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/dist/cjs/f/common/InputWrapper/InputWrapper.js +74 -0
- package/dist/cjs/f/common/InputWrapper/index.js +13 -0
- package/dist/cjs/f/common/InputWrapper/styles.scss +13 -0
- package/dist/cjs/f/common/Label/Label.js +18 -4
- package/dist/cjs/f/common/Label/styles.scss +8 -2
- package/dist/cjs/f/common/index.js +8 -1
- package/dist/cjs/f/fields/Checkbox/Checkbox.js +40 -10
- package/dist/cjs/f/fields/Checkbox/styles.scss +6 -8
- package/dist/cjs/f/fields/ChoicesInput/ChoicesInput.js +42 -20
- package/dist/cjs/f/fields/ChoicesInput/common/Choice/Choice.js +1 -1
- package/dist/cjs/f/fields/ChoicesInput/styles.scss +50 -35
- package/dist/cjs/f/fields/QueryChoices/QueryChoices.js +26 -2
- package/dist/cjs/f/fields/QueryCombobox/QueryCombobox.js +35 -5
- package/dist/cjs/f/fields/QueryCombobox/common/Combobox/Combobox.js +41 -14
- package/dist/cjs/f/fields/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +33 -23
- package/dist/cjs/f/fields/QueryCombobox/styles.scss +58 -28
- package/dist/cjs/f/fields/QuerySelect/QuerySelect.js +17 -3
- package/dist/cjs/f/fields/RatingsInput/RatingsInput.js +41 -19
- package/dist/cjs/f/fields/RatingsInput/common/Rating/Rating.js +3 -3
- package/dist/cjs/f/fields/RatingsInput/styles.scss +6 -13
- package/dist/cjs/f/fields/SelectInput/SelectInput.js +45 -15
- package/dist/cjs/f/fields/SelectInput/styles.scss +41 -18
- package/dist/cjs/f/fields/TextInput/TextInput.js +38 -16
- package/dist/cjs/f/fields/TextInput/styles.scss +28 -22
- package/dist/cjs/f/fields/TextareaInput/TextareaInput.js +42 -21
- package/dist/cjs/f/fields/TextareaInput/styles.scss +42 -27
- package/dist/es/f/common/InputWrapper/InputWrapper.js +66 -0
- package/dist/es/f/common/InputWrapper/index.js +2 -0
- package/dist/es/f/common/InputWrapper/styles.scss +13 -0
- package/dist/es/f/common/Label/Label.js +18 -4
- package/dist/es/f/common/Label/styles.scss +8 -2
- package/dist/es/f/common/index.js +2 -1
- package/dist/es/f/fields/Checkbox/Checkbox.js +41 -11
- package/dist/es/f/fields/Checkbox/styles.scss +6 -8
- package/dist/es/f/fields/ChoicesInput/ChoicesInput.js +43 -21
- package/dist/es/f/fields/ChoicesInput/common/Choice/Choice.js +1 -1
- package/dist/es/f/fields/ChoicesInput/styles.scss +50 -35
- package/dist/es/f/fields/QueryChoices/QueryChoices.js +26 -2
- package/dist/es/f/fields/QueryCombobox/QueryCombobox.js +35 -5
- package/dist/es/f/fields/QueryCombobox/common/Combobox/Combobox.js +41 -14
- package/dist/es/f/fields/QueryCombobox/common/MultipleCombobox/MultipleCombobox.js +33 -23
- package/dist/es/f/fields/QueryCombobox/styles.scss +58 -28
- package/dist/es/f/fields/QuerySelect/QuerySelect.js +17 -3
- package/dist/es/f/fields/RatingsInput/RatingsInput.js +42 -20
- package/dist/es/f/fields/RatingsInput/common/Rating/Rating.js +3 -3
- package/dist/es/f/fields/RatingsInput/styles.scss +6 -13
- package/dist/es/f/fields/SelectInput/SelectInput.js +46 -16
- package/dist/es/f/fields/SelectInput/styles.scss +41 -18
- package/dist/es/f/fields/TextInput/TextInput.js +39 -17
- package/dist/es/f/fields/TextInput/styles.scss +28 -22
- package/dist/es/f/fields/TextareaInput/TextareaInput.js +43 -22
- package/dist/es/f/fields/TextareaInput/styles.scss +42 -27
- package/package.json +2 -2
- package/src/stories/f/Checkbox.stories.jsx +22 -7
- package/src/stories/f/ChoicesInput.stories.jsx +21 -7
- package/src/stories/f/QueryChoices.stories.jsx +20 -4
- package/src/stories/f/QueryCombobox.stories.jsx +25 -13
- package/src/stories/f/QuerySelect.stories.jsx +20 -5
- package/src/stories/f/RatingsInput.stories.jsx +16 -2
- package/src/stories/f/SelectInput.stories.jsx +20 -5
- package/src/stories/f/TextInput.stories.jsx +23 -9
- package/src/stories/f/TextareaInput.stories.jsx +16 -2
- package/src/ui/f/common/InputWrapper/InputWrapper.jsx +89 -0
- package/src/ui/f/common/InputWrapper/index.js +2 -0
- package/src/ui/f/common/InputWrapper/styles.scss +13 -0
- package/src/ui/f/common/Label/Label.jsx +18 -2
- package/src/ui/f/common/Label/styles.scss +8 -2
- package/src/ui/f/common/index.js +1 -0
- package/src/ui/f/fields/Checkbox/Checkbox.jsx +65 -27
- package/src/ui/f/fields/Checkbox/styles.scss +6 -8
- package/src/ui/f/fields/ChoicesInput/ChoicesInput.jsx +75 -47
- package/src/ui/f/fields/ChoicesInput/common/Choice/Choice.jsx +10 -3
- package/src/ui/f/fields/ChoicesInput/styles.scss +50 -35
- package/src/ui/f/fields/QueryChoices/QueryChoices.jsx +28 -0
- package/src/ui/f/fields/QueryCombobox/QueryCombobox.jsx +37 -2
- package/src/ui/f/fields/QueryCombobox/common/Combobox/Combobox.jsx +67 -38
- package/src/ui/f/fields/QueryCombobox/common/MultipleCombobox/MultipleCombobox.jsx +81 -66
- package/src/ui/f/fields/QueryCombobox/styles.scss +58 -28
- package/src/ui/f/fields/QuerySelect/QuerySelect.jsx +16 -1
- package/src/ui/f/fields/RatingsInput/RatingsInput.jsx +55 -28
- package/src/ui/f/fields/RatingsInput/common/Rating/Rating.jsx +3 -3
- package/src/ui/f/fields/RatingsInput/styles.scss +6 -13
- package/src/ui/f/fields/SelectInput/SelectInput.jsx +88 -49
- package/src/ui/f/fields/SelectInput/styles.scss +41 -18
- package/src/ui/f/fields/TextInput/TextInput.jsx +52 -29
- package/src/ui/f/fields/TextInput/styles.scss +28 -22
- package/src/ui/f/fields/TextareaInput/TextareaInput.jsx +65 -43
- package/src/ui/f/fields/TextareaInput/styles.scss +42 -27
- package/tests/__snapshots__/Storyshots.test.js.snap +4698 -3122
|
@@ -11,7 +11,7 @@ import styleNames from '@pareto-engineering/bem/exports'
|
|
|
11
11
|
|
|
12
12
|
import { Choice } from './common'
|
|
13
13
|
|
|
14
|
-
import { FormDescription, FormLabel } from '../../common'
|
|
14
|
+
import { FormDescription, FormLabel, InputWrapper } from '../../common'
|
|
15
15
|
|
|
16
16
|
const baseClassName = styleNames.base
|
|
17
17
|
|
|
@@ -28,14 +28,17 @@ const ChoicesInput = ({
|
|
|
28
28
|
validate,
|
|
29
29
|
options,
|
|
30
30
|
multiple,
|
|
31
|
-
gridColumnsMobile,
|
|
32
|
-
gridColumnsDesktop,
|
|
33
31
|
color,
|
|
34
32
|
label,
|
|
33
|
+
labelColor,
|
|
35
34
|
optional,
|
|
36
35
|
disabled,
|
|
37
36
|
description,
|
|
38
37
|
spaceBetween,
|
|
38
|
+
labelSpan,
|
|
39
|
+
desktopLabelSpan,
|
|
40
|
+
inputSpan,
|
|
41
|
+
desktopInputSpan,
|
|
39
42
|
...otherProps
|
|
40
43
|
}) => {
|
|
41
44
|
useInsertionEffect(() => {
|
|
@@ -43,48 +46,50 @@ const ChoicesInput = ({
|
|
|
43
46
|
}, [])
|
|
44
47
|
|
|
45
48
|
return (
|
|
46
|
-
|
|
47
|
-
id={id}
|
|
48
|
-
className={[
|
|
49
|
-
|
|
50
|
-
baseClassName,
|
|
51
|
-
|
|
52
|
-
componentClassName,
|
|
53
|
-
userClassName,
|
|
54
|
-
multiple && 'multiple',
|
|
55
|
-
color && `x-${color}`,
|
|
56
|
-
]
|
|
57
|
-
.filter((e) => e)
|
|
58
|
-
.join(' ')}
|
|
59
|
-
style={{
|
|
60
|
-
'--grid-columns-desktop':gridColumnsDesktop,
|
|
61
|
-
'--grid-columns-mobile' :gridColumnsMobile,
|
|
62
|
-
...style,
|
|
63
|
-
}}
|
|
64
|
-
// {...otherProps}
|
|
65
|
-
>
|
|
49
|
+
<>
|
|
66
50
|
{label && (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
51
|
+
<FormLabel
|
|
52
|
+
name={name}
|
|
53
|
+
color={labelColor}
|
|
54
|
+
optional={optional}
|
|
55
|
+
columnSpan={labelSpan}
|
|
56
|
+
desktopColumnSpan={desktopLabelSpan}
|
|
57
|
+
// {...otherProps}
|
|
58
|
+
>
|
|
59
|
+
{label}
|
|
60
|
+
</FormLabel>
|
|
70
61
|
)}
|
|
71
|
-
<
|
|
72
|
-
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
))}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
62
|
+
<InputWrapper
|
|
63
|
+
id={id}
|
|
64
|
+
className={[
|
|
65
|
+
baseClassName,
|
|
66
|
+
componentClassName,
|
|
67
|
+
userClassName,
|
|
68
|
+
]
|
|
69
|
+
.filter((e) => e)
|
|
70
|
+
.join(' ')}
|
|
71
|
+
style={style}
|
|
72
|
+
columnSpan={inputSpan}
|
|
73
|
+
desktopColumnSpan={desktopInputSpan}
|
|
74
|
+
>
|
|
75
|
+
<div className={['choices', spaceBetween && 'space-between'].filter(Boolean).join(' ')}>
|
|
76
|
+
{ options.map((choice) => (
|
|
77
|
+
<Choice
|
|
78
|
+
className={`x-${color}`}
|
|
79
|
+
key={choice.value}
|
|
80
|
+
name={name}
|
|
81
|
+
id={`${name}-${choice.value}`}
|
|
82
|
+
multiple={multiple}
|
|
83
|
+
validate={validate}
|
|
84
|
+
disabled={disabled}
|
|
85
|
+
{...otherProps}
|
|
86
|
+
{...choice}
|
|
87
|
+
/>
|
|
88
|
+
))}
|
|
89
|
+
</div>
|
|
90
|
+
<FormDescription className="s-1" description={description} name={name} />
|
|
91
|
+
</InputWrapper>
|
|
92
|
+
</>
|
|
88
93
|
)
|
|
89
94
|
}
|
|
90
95
|
|
|
@@ -156,13 +161,36 @@ ChoicesInput.propTypes = {
|
|
|
156
161
|
* The select input description
|
|
157
162
|
*/
|
|
158
163
|
description:PropTypes.string,
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* The number of columns the label should span
|
|
167
|
+
*/
|
|
168
|
+
labelSpan:PropTypes.number,
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* The number of columns the input should span
|
|
172
|
+
*/
|
|
173
|
+
inputSpan:PropTypes.number,
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* The number of columns the label should span on desktop
|
|
177
|
+
*/
|
|
178
|
+
desktopLabelSpan:PropTypes.number,
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* The number of columns the input should span on desktop
|
|
182
|
+
*/
|
|
183
|
+
desktopInputSpan:PropTypes.number,
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* The color of the label
|
|
187
|
+
*/
|
|
188
|
+
labelColor:PropTypes.string,
|
|
159
189
|
}
|
|
160
190
|
|
|
161
191
|
ChoicesInput.defaultProps = {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
color :'interactive',
|
|
165
|
-
disabled :false,
|
|
192
|
+
color :'interactive',
|
|
193
|
+
disabled:false,
|
|
166
194
|
}
|
|
167
195
|
|
|
168
196
|
export default memo(ChoicesInput)
|
|
@@ -40,9 +40,7 @@ const Choice = ({
|
|
|
40
40
|
return (
|
|
41
41
|
<div
|
|
42
42
|
className={[
|
|
43
|
-
|
|
44
43
|
baseClassName,
|
|
45
|
-
|
|
46
44
|
componentClassName,
|
|
47
45
|
userClassName,
|
|
48
46
|
]
|
|
@@ -58,7 +56,16 @@ const Choice = ({
|
|
|
58
56
|
value={value}
|
|
59
57
|
disabled={disabled}
|
|
60
58
|
/>
|
|
61
|
-
<label
|
|
59
|
+
<label
|
|
60
|
+
htmlFor={id}
|
|
61
|
+
className={[
|
|
62
|
+
labelClassName,
|
|
63
|
+
disabled && 'disabled',
|
|
64
|
+
]
|
|
65
|
+
.filter((e) => e)
|
|
66
|
+
.join(' ')}
|
|
67
|
+
style={labelStyle}
|
|
68
|
+
>
|
|
62
69
|
{ label }
|
|
63
70
|
</label>
|
|
64
71
|
</div>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* @pareto-engineering/generator-front 1.0.12 */
|
|
2
2
|
/* stylelint-disable selector-max-compound-selectors -- exception */
|
|
3
|
+
/* stylelint-disable max-nesting-depth -- exception */
|
|
3
4
|
|
|
4
5
|
@use "@pareto-engineering/bem";
|
|
5
6
|
@use "@pareto-engineering/styles/src/mixins";
|
|
@@ -9,52 +10,66 @@ $default-flex-separator:calc(1em / 2) calc(.75em / 2);
|
|
|
9
10
|
$default-transition:var(--theme-default-transition);
|
|
10
11
|
$default-label-padding: .3em 1em calc(2em - .3em);
|
|
11
12
|
$default-label-height: .5em;
|
|
13
|
+
$default-input-border-radius: var(--theme-default-input-border-radius);
|
|
14
|
+
$default-border: var(--theme-default-input-border);
|
|
15
|
+
$hover-border: var(--theme-hover-input-border);
|
|
16
|
+
$focus-border: var(--theme-focus-input-border);
|
|
17
|
+
$default-background: var(--background-inputs);
|
|
18
|
+
$disabled-background: var(--background-inputs-30);
|
|
12
19
|
|
|
13
20
|
.#{bem.$base}.choices-input {
|
|
14
|
-
|
|
21
|
+
&.#{bem.$base}.input-wrapper {
|
|
15
22
|
display: flex;
|
|
16
|
-
flex-
|
|
17
|
-
gap: $default-flex-separator;
|
|
23
|
+
flex-direction: column;
|
|
18
24
|
|
|
19
|
-
|
|
20
|
-
justify-content: space-between;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
>.choice {
|
|
25
|
+
> .choices {
|
|
24
26
|
display: flex;
|
|
27
|
+
flex-wrap: wrap;
|
|
28
|
+
gap: $default-flex-separator;
|
|
25
29
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
position: absolute;
|
|
29
|
-
visibility: none;
|
|
30
|
-
z-index: -1;
|
|
30
|
+
&.space-between {
|
|
31
|
+
justify-content: space-between;
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
34
|
+
>.choice {
|
|
35
|
+
display: flex;
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
display: block;
|
|
43
|
-
height: $default-label-height;
|
|
44
|
-
max-width: 100%;
|
|
45
|
-
padding: $default-label-padding;
|
|
46
|
-
position: relative;
|
|
47
|
-
transition: $default-transition;
|
|
48
|
-
white-space: nowrap;
|
|
49
|
-
|
|
50
|
-
&:hover {
|
|
51
|
-
box-shadow: var(--theme-default-input-box-shadow);
|
|
37
|
+
input {
|
|
38
|
+
opacity: 0;
|
|
39
|
+
position: absolute;
|
|
40
|
+
visibility: none;
|
|
41
|
+
z-index: -1;
|
|
52
42
|
}
|
|
53
|
-
}
|
|
54
43
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
44
|
+
input:disabled + label {
|
|
45
|
+
background-color: $disabled-background;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
> label {
|
|
49
|
+
background-color: $default-background;
|
|
50
|
+
border: $default-border;
|
|
51
|
+
border-radius: $default-input-border-radius;
|
|
52
|
+
color: var(--paragraph);
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
display: block;
|
|
55
|
+
height: $default-label-height;
|
|
56
|
+
max-width: 100%;
|
|
57
|
+
padding: $default-label-padding;
|
|
58
|
+
position: relative;
|
|
59
|
+
transition: $default-transition;
|
|
60
|
+
white-space: nowrap;
|
|
61
|
+
|
|
62
|
+
&:not(.disabled) {
|
|
63
|
+
&:hover {
|
|
64
|
+
border: $hover-border;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
input:checked + label {
|
|
70
|
+
background: var(--x);
|
|
71
|
+
color: var(--on-x);
|
|
72
|
+
}
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
}
|
|
@@ -22,6 +22,10 @@ const QueryChoices = ({
|
|
|
22
22
|
validate,
|
|
23
23
|
loadingOption,
|
|
24
24
|
extraVariables,
|
|
25
|
+
labelSpan,
|
|
26
|
+
desktopLabelSpan,
|
|
27
|
+
inputSpan,
|
|
28
|
+
desktopInputSpan,
|
|
25
29
|
...otherProps
|
|
26
30
|
}) => {
|
|
27
31
|
const [, , helpers] = useField({ name, validate })
|
|
@@ -84,6 +88,10 @@ const QueryChoices = ({
|
|
|
84
88
|
name={name}
|
|
85
89
|
validate={validate}
|
|
86
90
|
options={options}
|
|
91
|
+
labelSpan={labelSpan}
|
|
92
|
+
desktopLabelSpan={desktopLabelSpan}
|
|
93
|
+
inputSpan={inputSpan}
|
|
94
|
+
desktopInputSpan={desktopInputSpan}
|
|
87
95
|
{...otherProps}
|
|
88
96
|
/>
|
|
89
97
|
)
|
|
@@ -140,6 +148,26 @@ QueryChoices.propTypes = {
|
|
|
140
148
|
* select options.
|
|
141
149
|
*/
|
|
142
150
|
extraVariables:PropTypes.objectOf(PropTypes.string),
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* The number of columns the label should span
|
|
154
|
+
*/
|
|
155
|
+
labelSpan:PropTypes.number,
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* The number of columns the input should span
|
|
159
|
+
*/
|
|
160
|
+
inputSpan:PropTypes.number,
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* The number of columns the label should span on desktop
|
|
164
|
+
*/
|
|
165
|
+
desktopLabelSpan:PropTypes.number,
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* The number of columns the input should span on desktop
|
|
169
|
+
*/
|
|
170
|
+
desktopInputSpan:PropTypes.number,
|
|
143
171
|
}
|
|
144
172
|
|
|
145
173
|
QueryChoices.defaultProps = {
|
|
@@ -24,6 +24,7 @@ const QueryCombobox = ({
|
|
|
24
24
|
multiple,
|
|
25
25
|
name,
|
|
26
26
|
label,
|
|
27
|
+
labelColor,
|
|
27
28
|
color,
|
|
28
29
|
optional,
|
|
29
30
|
description,
|
|
@@ -35,6 +36,10 @@ const QueryCombobox = ({
|
|
|
35
36
|
minLength,
|
|
36
37
|
transformSearch,
|
|
37
38
|
validate,
|
|
39
|
+
labelSpan,
|
|
40
|
+
desktopLabelSpan,
|
|
41
|
+
inputSpan,
|
|
42
|
+
desktopInputSpan,
|
|
38
43
|
// ...otherProps
|
|
39
44
|
}) => {
|
|
40
45
|
useInsertionEffect(() => {
|
|
@@ -101,6 +106,7 @@ const QueryCombobox = ({
|
|
|
101
106
|
disabled,
|
|
102
107
|
name,
|
|
103
108
|
label,
|
|
109
|
+
labelColor,
|
|
104
110
|
optional,
|
|
105
111
|
description,
|
|
106
112
|
setValue,
|
|
@@ -110,6 +116,10 @@ const QueryCombobox = ({
|
|
|
110
116
|
className,
|
|
111
117
|
minLength,
|
|
112
118
|
transformSearch,
|
|
119
|
+
labelSpan,
|
|
120
|
+
desktopLabelSpan,
|
|
121
|
+
inputSpan,
|
|
122
|
+
desktopInputSpan,
|
|
113
123
|
}
|
|
114
124
|
|
|
115
125
|
const Input = multiple ? MultipleCombobox : Combobox
|
|
@@ -143,6 +153,11 @@ QueryCombobox.propTypes = {
|
|
|
143
153
|
*/
|
|
144
154
|
label:PropTypes.string,
|
|
145
155
|
|
|
156
|
+
/**
|
|
157
|
+
* The label color of the custom select input
|
|
158
|
+
*/
|
|
159
|
+
labelColor:PropTypes.string,
|
|
160
|
+
|
|
146
161
|
/**
|
|
147
162
|
* The custom select input description
|
|
148
163
|
*/
|
|
@@ -154,7 +169,7 @@ QueryCombobox.propTypes = {
|
|
|
154
169
|
disabled:PropTypes.bool,
|
|
155
170
|
|
|
156
171
|
/**
|
|
157
|
-
* The base color of the
|
|
172
|
+
* The base color of the tiles
|
|
158
173
|
*/
|
|
159
174
|
color:PropTypes.string,
|
|
160
175
|
|
|
@@ -217,6 +232,26 @@ QueryCombobox.propTypes = {
|
|
|
217
232
|
* Whether the input is optional or not
|
|
218
233
|
*/
|
|
219
234
|
optional:PropTypes.bool,
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The number of columns the label should span
|
|
238
|
+
*/
|
|
239
|
+
labelSpan:PropTypes.number,
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* The number of columns the input should span
|
|
243
|
+
*/
|
|
244
|
+
inputSpan:PropTypes.number,
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* The number of columns the label should span on desktop
|
|
248
|
+
*/
|
|
249
|
+
desktopLabelSpan:PropTypes.number,
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* The number of columns the input should span on desktop
|
|
253
|
+
*/
|
|
254
|
+
desktopInputSpan:PropTypes.number,
|
|
220
255
|
}
|
|
221
256
|
|
|
222
257
|
QueryCombobox.defaultProps = {
|
|
@@ -225,7 +260,7 @@ QueryCombobox.defaultProps = {
|
|
|
225
260
|
getLabel:(node) => node.name,
|
|
226
261
|
},
|
|
227
262
|
multiple :false,
|
|
228
|
-
color :'
|
|
263
|
+
color :'interactive',
|
|
229
264
|
searchVariable :'search',
|
|
230
265
|
transformSearch:(search) => search,
|
|
231
266
|
minLength :2,
|
|
@@ -15,6 +15,8 @@ import { Popover, LoadingCircle } from 'ui/a'
|
|
|
15
15
|
|
|
16
16
|
import { Button } from 'ui/b'
|
|
17
17
|
|
|
18
|
+
import { InputWrapper } from '../../../../common'
|
|
19
|
+
|
|
18
20
|
// Local Definitions
|
|
19
21
|
|
|
20
22
|
import { Menu } from '../Menu'
|
|
@@ -31,6 +33,7 @@ const Combobox = ({
|
|
|
31
33
|
className:userClassName,
|
|
32
34
|
style,
|
|
33
35
|
label,
|
|
36
|
+
labelColor,
|
|
34
37
|
name,
|
|
35
38
|
options:items,
|
|
36
39
|
getOptions,
|
|
@@ -43,6 +46,10 @@ const Combobox = ({
|
|
|
43
46
|
transformSearch,
|
|
44
47
|
disabled,
|
|
45
48
|
optional,
|
|
49
|
+
labelSpan,
|
|
50
|
+
desktopLabelSpan,
|
|
51
|
+
inputSpan,
|
|
52
|
+
desktopInputSpan,
|
|
46
53
|
// ...otherProps
|
|
47
54
|
}) => {
|
|
48
55
|
const {
|
|
@@ -89,58 +96,60 @@ const Combobox = ({
|
|
|
89
96
|
const resetInputValue = () => setInputValue('')
|
|
90
97
|
|
|
91
98
|
return (
|
|
92
|
-
|
|
93
|
-
id={id}
|
|
94
|
-
className={[
|
|
95
|
-
|
|
96
|
-
baseClassName,
|
|
97
|
-
|
|
98
|
-
componentClassName,
|
|
99
|
-
userClassName,
|
|
100
|
-
`y-${color}`,
|
|
101
|
-
]
|
|
102
|
-
.filter((e) => e)
|
|
103
|
-
.join(' ')}
|
|
104
|
-
style={style}
|
|
105
|
-
ref={parentRef}
|
|
106
|
-
>
|
|
99
|
+
<>
|
|
107
100
|
<FormLabel
|
|
108
101
|
{...getLabelProps()}
|
|
109
102
|
name={name}
|
|
110
103
|
optional={optional}
|
|
104
|
+
color={labelColor}
|
|
105
|
+
columnSpan={labelSpan}
|
|
106
|
+
desktopColumnSpan={desktopLabelSpan}
|
|
111
107
|
>
|
|
112
108
|
{label}
|
|
113
109
|
</FormLabel>
|
|
114
110
|
|
|
115
|
-
<
|
|
111
|
+
<InputWrapper
|
|
112
|
+
id={id}
|
|
113
|
+
className={[
|
|
114
|
+
baseClassName,
|
|
115
|
+
componentClassName,
|
|
116
|
+
userClassName,
|
|
117
|
+
]
|
|
118
|
+
.filter((e) => e)
|
|
119
|
+
.join(' ')}
|
|
120
|
+
style={style}
|
|
121
|
+
ref={parentRef}
|
|
122
|
+
{...getComboboxProps()}
|
|
123
|
+
columnSpan={inputSpan}
|
|
124
|
+
desktopColumnSpan={desktopInputSpan}
|
|
125
|
+
>
|
|
116
126
|
<input {...getInputProps()} className="input" disabled={disabled} />
|
|
117
127
|
{isFetching && (
|
|
118
|
-
|
|
128
|
+
<LoadingCircle className="x-main" />
|
|
119
129
|
)}
|
|
120
130
|
{inputValue.length > minLength && !isFetching && (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
131
|
+
<Button isSimple isCompact color="heading" onClick={resetInputValue}>
|
|
132
|
+
<span className="icon">
|
|
133
|
+
Y
|
|
134
|
+
</span>
|
|
135
|
+
</Button>
|
|
126
136
|
)}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<Popover
|
|
130
|
-
isOpen={isOpen}
|
|
131
|
-
parentRef={parentRef}
|
|
132
|
-
>
|
|
133
|
-
<Menu
|
|
137
|
+
<FormDescription className="s-1" description={description} name={name} />
|
|
138
|
+
<Popover
|
|
134
139
|
isOpen={isOpen}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
140
|
+
parentRef={parentRef}
|
|
141
|
+
>
|
|
142
|
+
<Menu
|
|
143
|
+
className={`y-${color}`}
|
|
144
|
+
isOpen={isOpen}
|
|
145
|
+
getItemProps={getItemProps}
|
|
146
|
+
highlightedIndex={highlightedIndex}
|
|
147
|
+
items={items}
|
|
148
|
+
{...getMenuProps()}
|
|
149
|
+
/>
|
|
150
|
+
</Popover>
|
|
151
|
+
</InputWrapper>
|
|
152
|
+
</>
|
|
144
153
|
)
|
|
145
154
|
}
|
|
146
155
|
|
|
@@ -228,6 +237,26 @@ Combobox.propTypes = {
|
|
|
228
237
|
*/
|
|
229
238
|
disabled:PropTypes.bool,
|
|
230
239
|
|
|
240
|
+
/**
|
|
241
|
+
* The number of columns the label should span
|
|
242
|
+
*/
|
|
243
|
+
labelSpan:PropTypes.number,
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* The number of columns the input should span
|
|
247
|
+
*/
|
|
248
|
+
inputSpan:PropTypes.number,
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* The number of columns the label should span on desktop
|
|
252
|
+
*/
|
|
253
|
+
desktopLabelSpan:PropTypes.number,
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* The number of columns the input should span on desktop
|
|
257
|
+
*/
|
|
258
|
+
desktopInputSpan:PropTypes.number,
|
|
259
|
+
|
|
231
260
|
/**
|
|
232
261
|
* Whether the input is optional or not
|
|
233
262
|
*/
|