pixel-react 1.1.0 → 1.1.2
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/.yarn/install-state.gz +0 -0
- package/lib/components/Charts/DashboardDonutChart/DashboardDonutChart.d.ts +5 -0
- package/lib/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.d.ts +7 -0
- package/lib/components/Charts/DashboardDonutChart/index.d.ts +1 -0
- package/lib/components/Charts/DashboardDonutChart/types.d.ts +21 -0
- package/lib/components/Charts/PieChart/PieChart.d.ts +5 -0
- package/lib/components/Charts/PieChart/PieChart.stories.d.ts +7 -0
- package/lib/components/Charts/PieChart/index.d.ts +1 -0
- package/lib/components/Charts/PieChart/types.d.ts +27 -0
- package/lib/components/FF_Captcha/Recaptcha.d.ts +5 -0
- package/lib/components/FF_Captcha/captcha.stories.d.ts +8 -0
- package/lib/components/FF_Captcha/types.d.ts +20 -0
- package/lib/components/MultiSelect/MultiSelect.d.ts +1 -1
- package/lib/components/MultiSelect/MultiSelectTypes.d.ts +1 -1
- package/lib/components/NLPInput/NlpInput.d.ts +4 -0
- package/lib/components/NLPInput/NlpInput.stories.d.ts +7 -0
- package/lib/components/NLPInput/components/NlpDropDown/NlpDropDownType.d.ts +19 -0
- package/lib/components/NLPInput/components/NlpDropDown/NlpDropdown.d.ts +4 -0
- package/lib/components/NLPInput/index.d.ts +1 -0
- package/lib/components/NLPInput/type.d.ts +70 -0
- package/lib/components/Table/Table.d.ts +1 -1
- package/lib/index.d.ts +96 -19
- package/lib/index.esm.js +2951 -249
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +2953 -247
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/getEncryptedData/getEncryptedData.d.ts +2 -0
- package/lib/utils/getEncryptedData/getEncryptedData.stories.d.ts +6 -0
- package/package.json +6 -2
- package/src/StyleGuide/ColorPalette/ColorPalette.tsx +2 -4
- package/src/StyleGuide/ColorPalette/colorPaletteList.ts +95 -20
- package/src/assets/Themes/BaseTheme.scss +2 -3
- package/src/assets/Themes/DarkTheme.scss +9 -8
- package/src/assets/icons/wswb_delete_icon.svg +4 -0
- package/src/assets/icons/wswb_plus_icon.svg +5 -0
- package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.scss +145 -0
- package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.stories.tsx +52 -0
- package/src/components/Charts/DashboardDonutChart/DashboardDonutChart.tsx +335 -0
- package/src/components/Charts/DashboardDonutChart/index.ts +1 -0
- package/src/components/Charts/DashboardDonutChart/types.ts +33 -0
- package/src/components/Charts/PieChart/PieChart.scss +39 -0
- package/src/components/Charts/PieChart/PieChart.stories.tsx +46 -0
- package/src/components/Charts/PieChart/PieChart.tsx +193 -0
- package/src/components/Charts/PieChart/index.ts +1 -0
- package/src/components/Charts/PieChart/types.ts +28 -0
- package/src/components/FF_Captcha/Recaptcha.scss +11 -0
- package/src/components/FF_Captcha/Recaptcha.tsx +41 -0
- package/src/components/FF_Captcha/captcha.stories.tsx +40 -0
- package/src/components/FF_Captcha/index.ts +0 -0
- package/src/components/FF_Captcha/types.ts +22 -0
- package/src/components/Icon/iconList.ts +6 -0
- package/src/components/Modal/modal.scss +1 -1
- package/src/components/MultiSelect/MultiSelect.stories.tsx +2 -3
- package/src/components/MultiSelect/MultiSelect.tsx +35 -23
- package/src/components/MultiSelect/MultiSelectTypes.ts +1 -1
- package/src/components/NLPInput/NLPInput.scss +246 -0
- package/src/components/NLPInput/NlpInput.stories.tsx +136 -0
- package/src/components/NLPInput/NlpInput.tsx +374 -0
- package/src/components/NLPInput/components/NlpDropDown/NlpDropDownType.ts +60 -0
- package/src/components/NLPInput/components/NlpDropDown/NlpDropdown.scss +83 -0
- package/src/components/NLPInput/components/NlpDropDown/NlpDropdown.tsx +180 -0
- package/src/components/NLPInput/index.ts +1 -0
- package/src/components/NLPInput/type.tsx +124 -0
- package/src/components/Table/Table.scss +5 -0
- package/src/components/Table/Table.stories.tsx +12 -0
- package/src/components/Table/Table.tsx +25 -14
- package/src/components/TextArea/Textarea.scss +1 -1
- package/src/index.ts +8 -1
- package/src/utils/getEncryptedData/getEncryptedData.stories.tsx +55 -0
- package/src/utils/getEncryptedData/getEncryptedData.ts +10 -0
- package/lib/components/AddButton/AddButton.d.ts +0 -5
- package/lib/components/AddButton/AddButton.stories.d.ts +0 -6
- package/lib/components/AddButton/index.d.ts +0 -1
- package/lib/components/AddButton/types.d.ts +0 -4
@@ -0,0 +1,41 @@
|
|
1
|
+
import { useState, forwardRef } from 'react';
|
2
|
+
import ReCAPTCHA from 'react-google-recaptcha';
|
3
|
+
import { RecaptchaProps } from './types';
|
4
|
+
import './Recaptcha.scss';
|
5
|
+
import classNames from 'classnames';
|
6
|
+
import Typography from '../Typography';
|
7
|
+
|
8
|
+
const Recaptcha = forwardRef<ReCAPTCHA, RecaptchaProps>(
|
9
|
+
({ onVerify, className = '', error: externalError, sitekey, ...props }, ref) => {
|
10
|
+
const [internalError, setInternalError] = useState<string | null>(null);
|
11
|
+
|
12
|
+
const handleChange = (token: string | null) => {
|
13
|
+
if (token) {
|
14
|
+
setInternalError(null);
|
15
|
+
onVerify(token);
|
16
|
+
} else {
|
17
|
+
setInternalError('Please complete the CAPTCHA');
|
18
|
+
}
|
19
|
+
};
|
20
|
+
|
21
|
+
const error = externalError || internalError;
|
22
|
+
|
23
|
+
return (
|
24
|
+
<div className={classNames('ff-recaptcha-wrapper', className)}>
|
25
|
+
<ReCAPTCHA
|
26
|
+
ref={ref}
|
27
|
+
sitekey={sitekey}
|
28
|
+
onChange={handleChange}
|
29
|
+
{...props}
|
30
|
+
/>
|
31
|
+
{error && (
|
32
|
+
<div className="ff-recaptcha-error">
|
33
|
+
<Typography fontSize={12}>{error}</Typography>
|
34
|
+
</div>
|
35
|
+
)}
|
36
|
+
</div>
|
37
|
+
);
|
38
|
+
}
|
39
|
+
);
|
40
|
+
|
41
|
+
export default Recaptcha;
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
2
|
+
import Recaptcha from './Recaptcha';
|
3
|
+
|
4
|
+
const meta: Meta<typeof Recaptcha> = {
|
5
|
+
title: 'Components/Recaptcha',
|
6
|
+
component: Recaptcha,
|
7
|
+
parameters: {
|
8
|
+
layout: 'centered',
|
9
|
+
},
|
10
|
+
tags: ['autodocs'],
|
11
|
+
};
|
12
|
+
|
13
|
+
type Story = StoryObj<typeof Recaptcha>;
|
14
|
+
|
15
|
+
const defaultArgs = {
|
16
|
+
sitekey: '6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI', // Test key
|
17
|
+
onVerify: () => {},
|
18
|
+
};
|
19
|
+
|
20
|
+
export const Default: Story = {
|
21
|
+
args: {
|
22
|
+
...defaultArgs,
|
23
|
+
},
|
24
|
+
};
|
25
|
+
|
26
|
+
export const WithError: Story = {
|
27
|
+
args: {
|
28
|
+
...defaultArgs,
|
29
|
+
error: 'Custom error message',
|
30
|
+
},
|
31
|
+
};
|
32
|
+
|
33
|
+
export const WithCustomTheme: Story = {
|
34
|
+
args: {
|
35
|
+
...defaultArgs,
|
36
|
+
theme: 'dark',
|
37
|
+
},
|
38
|
+
};
|
39
|
+
|
40
|
+
export default meta;
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import { ComponentProps } from 'react';
|
2
|
+
import ReCAPTCHA from 'react-google-recaptcha';
|
3
|
+
|
4
|
+
export interface RecaptchaProps extends Omit<ComponentProps<typeof ReCAPTCHA>, 'onChange'> {
|
5
|
+
/**
|
6
|
+
* Callback function that receives the verification token
|
7
|
+
*/
|
8
|
+
onVerify: (token: string | null) => void;
|
9
|
+
/**
|
10
|
+
* Optional CSS class name
|
11
|
+
*/
|
12
|
+
className?: string;
|
13
|
+
/**
|
14
|
+
* Optional error message to display
|
15
|
+
*/
|
16
|
+
error?: string | null;
|
17
|
+
/**
|
18
|
+
* reCAPTCHA site key
|
19
|
+
*/
|
20
|
+
sitekey: string;
|
21
|
+
}
|
22
|
+
|
@@ -65,6 +65,10 @@ import AndroidIcon from '../../assets/icons/android_icon.svg?react';
|
|
65
65
|
|
66
66
|
import SwitchLicenseIcon from '../../assets/icons/switch_license_icon.svg?react';
|
67
67
|
import FireflinkLogo from '../../assets/icons/fireflink_logo.svg?react';
|
68
|
+
import WSWBDeleteIcon from '../../assets/icons/wswb_delete_icon.svg?react'
|
69
|
+
import WSWBPlusIcon from '../../assets/icons/wswb_plus_icon.svg?react'
|
70
|
+
|
71
|
+
|
68
72
|
//icons
|
69
73
|
Components['delete_info'] = DeleteInfoIcon;
|
70
74
|
Components['success'] = ToastSuccessIcon;
|
@@ -130,5 +134,7 @@ Components['android_icon'] = AndroidIcon;
|
|
130
134
|
|
131
135
|
Components['select_license'] = SwitchLicenseIcon;
|
132
136
|
Components['fireflink-logo'] = FireflinkLogo;
|
137
|
+
Components['wswb_delete_icon'] = WSWBDeleteIcon;
|
138
|
+
Components['wswb_plus_icon'] = WSWBPlusIcon;
|
133
139
|
|
134
140
|
export default Components;
|
@@ -60,14 +60,14 @@ export const EmailGroup: Story = {
|
|
60
60
|
]);
|
61
61
|
const [selectedOptions, setSelectedOptions] = useState<
|
62
62
|
{ label?: string; value?: string }[]
|
63
|
-
>([{ label: 'Sample1@gmail.com', value: 'sample1@gmail.com'}]);
|
63
|
+
>([{ label: 'Sample1@gmail.com', value: 'sample1@gmail.com' }]);
|
64
64
|
const onChange = (options: { label?: string; value?: string }[]) => {
|
65
65
|
setSelectedOptions(options);
|
66
66
|
};
|
67
67
|
return (
|
68
68
|
<MultiSelect
|
69
69
|
label={'Enter Email'}
|
70
|
-
type=
|
70
|
+
type="email"
|
71
71
|
required
|
72
72
|
options={options}
|
73
73
|
selectedOptions={selectedOptions}
|
@@ -101,7 +101,6 @@ export const Controlled: Story = {
|
|
101
101
|
};
|
102
102
|
return (
|
103
103
|
<MultiSelect
|
104
|
-
// disabled
|
105
104
|
label={'Fruits'}
|
106
105
|
required
|
107
106
|
options={options}
|
@@ -29,8 +29,8 @@ const ChipElement = ({
|
|
29
29
|
return null;
|
30
30
|
};
|
31
31
|
const MultiSelect = ({
|
32
|
-
options,
|
33
|
-
type =
|
32
|
+
options = [],
|
33
|
+
type = 'text',
|
34
34
|
selectedOptions = [],
|
35
35
|
onChange = () => {},
|
36
36
|
acceptNewOption = false,
|
@@ -42,7 +42,7 @@ const MultiSelect = ({
|
|
42
42
|
errorMessage = 'Fill this field',
|
43
43
|
withSelectButton = false,
|
44
44
|
onSelect = () => {},
|
45
|
-
displayCount = false
|
45
|
+
displayCount = false,
|
46
46
|
}: MultiSelectProps) => {
|
47
47
|
const [isOpen, setIsOpen] = useState<boolean>(false);
|
48
48
|
const [allOptions, setAllOptions] = useState(options);
|
@@ -50,7 +50,7 @@ const MultiSelect = ({
|
|
50
50
|
const [searchedKeyword, setSearchedKeyword] = useState('');
|
51
51
|
const [isSelectFocusedOnce, setIsSelectFocusedOnce] =
|
52
52
|
useState<boolean>(false);
|
53
|
-
const [inputError, setInputError] = useState<string>('')
|
53
|
+
const [inputError, setInputError] = useState<string>('');
|
54
54
|
|
55
55
|
const [dropdownPosition, setDropdownPosition] = useState<{
|
56
56
|
top: number;
|
@@ -110,13 +110,13 @@ const MultiSelect = ({
|
|
110
110
|
handleOptionChange(option, false);
|
111
111
|
};
|
112
112
|
const handleKeyEnter = (e: React.KeyboardEvent<HTMLDivElement>) => {
|
113
|
-
if (acceptNewOption && e.key ===
|
113
|
+
if (acceptNewOption && e.key === 'Enter') {
|
114
114
|
setInputError('');
|
115
|
-
if (type ===
|
115
|
+
if (type === 'email') {
|
116
116
|
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
117
117
|
if (!emailPattern.test(searchedKeyword)) {
|
118
118
|
setIsOpen(false);
|
119
|
-
setInputError(
|
119
|
+
setInputError('Please enter a valid email address.');
|
120
120
|
return;
|
121
121
|
}
|
122
122
|
}
|
@@ -126,11 +126,16 @@ const MultiSelect = ({
|
|
126
126
|
value: searchedKeyword.toLowerCase(),
|
127
127
|
isChecked: true,
|
128
128
|
};
|
129
|
-
const filteredOptions = [...allOptions].filter(
|
129
|
+
const filteredOptions = [...allOptions].filter(
|
130
|
+
(option) => option.isChecked === true
|
131
|
+
);
|
130
132
|
|
131
133
|
setAllOptions([...allOptions, newOption]);
|
132
134
|
setSearchedKeyword('');
|
133
|
-
onChange?.([
|
135
|
+
onChange?.([
|
136
|
+
...filteredOptions,
|
137
|
+
{ label: searchedKeyword, value: searchedKeyword.toLocaleLowerCase() },
|
138
|
+
]);
|
134
139
|
setIsOpen(false);
|
135
140
|
}
|
136
141
|
};
|
@@ -148,6 +153,17 @@ const MultiSelect = ({
|
|
148
153
|
});
|
149
154
|
}
|
150
155
|
};
|
156
|
+
const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {
|
157
|
+
if (!isOpen) {
|
158
|
+
setIsOpen(true);
|
159
|
+
}
|
160
|
+
const input = e.target.value;
|
161
|
+
setSearchedKeyword(input);
|
162
|
+
const filteredOptions = options.filter((option) =>
|
163
|
+
option.value?.toLowerCase().includes(input.toLowerCase())
|
164
|
+
);
|
165
|
+
onSearch?.(input, filteredOptions.length);
|
166
|
+
};
|
151
167
|
useEffect(() => {
|
152
168
|
if (isOpen) {
|
153
169
|
calculatePosition();
|
@@ -192,7 +208,7 @@ const MultiSelect = ({
|
|
192
208
|
!dropdownRef.current.contains(event?.target as Node) &&
|
193
209
|
!selectWrapper.current.contains(event?.target as Node)
|
194
210
|
) {
|
195
|
-
setInputError('')
|
211
|
+
setInputError('');
|
196
212
|
setIsOpen(false);
|
197
213
|
if (!isSelectFocusedOnce) {
|
198
214
|
setIsSelectFocusedOnce(true);
|
@@ -213,7 +229,8 @@ const MultiSelect = ({
|
|
213
229
|
className={classNames('ff-multiselect-wrapper', {
|
214
230
|
'ff-multiselect-wrapper--with-options': selectedOptions?.length,
|
215
231
|
'ff-multiselect-wrapper--opened-dropdown': isOpen,
|
216
|
-
'ff-multiselect-wrapper--error':
|
232
|
+
'ff-multiselect-wrapper--error':
|
233
|
+
(isFieldSkipped && required) || inputError,
|
217
234
|
'ff-multiselect-wrapper--disabled': disabled,
|
218
235
|
})}
|
219
236
|
>
|
@@ -231,7 +248,7 @@ const MultiSelect = ({
|
|
231
248
|
{label}
|
232
249
|
</span>
|
233
250
|
<div className="ff-multiselect-chip-container">
|
234
|
-
{displayCount ?
|
251
|
+
{displayCount ? (
|
235
252
|
<>
|
236
253
|
{selectedOptions.slice(0, maxVisibleChips).map((option) => (
|
237
254
|
<ChipElement
|
@@ -240,7 +257,8 @@ const MultiSelect = ({
|
|
240
257
|
onChipCloseClick={(e) => handleChipCloseClick(option, e)}
|
241
258
|
/>
|
242
259
|
))}
|
243
|
-
</>
|
260
|
+
</>
|
261
|
+
) : (
|
244
262
|
selectedOptions.map((option) => (
|
245
263
|
<ChipElement
|
246
264
|
key={option?.label}
|
@@ -248,7 +266,7 @@ const MultiSelect = ({
|
|
248
266
|
onChipCloseClick={(e) => handleChipCloseClick(option, e)}
|
249
267
|
/>
|
250
268
|
))
|
251
|
-
}
|
269
|
+
)}
|
252
270
|
<div className="ff-multiselect-input-container">
|
253
271
|
<input
|
254
272
|
value={searchedKeyword}
|
@@ -256,13 +274,7 @@ const MultiSelect = ({
|
|
256
274
|
autoComplete="off"
|
257
275
|
placeholder="search..."
|
258
276
|
ref={inputRef}
|
259
|
-
onChange={
|
260
|
-
if (!isOpen) {
|
261
|
-
setIsOpen(true);
|
262
|
-
}
|
263
|
-
setSearchedKeyword(e.target.value);
|
264
|
-
onSearch?.(e.target.value);
|
265
|
-
}}
|
277
|
+
onChange={handleSearch}
|
266
278
|
onKeyDown={handleKeyEnter}
|
267
279
|
id="input-ele"
|
268
280
|
className="ff-select-input"
|
@@ -295,7 +307,7 @@ const MultiSelect = ({
|
|
295
307
|
</div>
|
296
308
|
<div ref={dropdownWrapper}>
|
297
309
|
{(inputError || (isFieldSkipped && required && errorMessage)) && (
|
298
|
-
<div className="error-text">{inputError || errorMessage
|
310
|
+
<div className="error-text">{inputError || errorMessage}</div>
|
299
311
|
)}
|
300
312
|
{isOpen &&
|
301
313
|
createPortal(
|
@@ -317,4 +329,4 @@ const MultiSelect = ({
|
|
317
329
|
);
|
318
330
|
};
|
319
331
|
|
320
|
-
export default MultiSelect;
|
332
|
+
export default MultiSelect;
|
@@ -10,7 +10,7 @@ interface MultiSelectProps {
|
|
10
10
|
label: string;
|
11
11
|
selectedOptions?: Option[];
|
12
12
|
disabled?: boolean;
|
13
|
-
onSearch?: (searchedKeyword: string) => void;
|
13
|
+
onSearch?: (searchedKeyword: string, resultsLength: number) => void;
|
14
14
|
onChange?: (selectedOptions: Option[]) => void;
|
15
15
|
acceptNewOption?: boolean;
|
16
16
|
zIndex?: number;
|
@@ -0,0 +1,246 @@
|
|
1
|
+
@use '../../assets/styles/fonts';
|
2
|
+
|
3
|
+
@mixin transition-all($time: 0.3s) {
|
4
|
+
transition: opacity $time ease-out, transform $time ease-out,
|
5
|
+
font-size $time ease-out, padding $time ease-out;
|
6
|
+
}
|
7
|
+
|
8
|
+
@mixin absolute-position($top: auto, $right: auto, $bottom: auto, $left: auto) {
|
9
|
+
position: absolute;
|
10
|
+
top: $top;
|
11
|
+
right: $right;
|
12
|
+
bottom: $bottom;
|
13
|
+
left: $left;
|
14
|
+
}
|
15
|
+
|
16
|
+
@mixin opacity-style($opacity: 1, $color: null, $border-color-arg: null) {
|
17
|
+
opacity: $opacity;
|
18
|
+
|
19
|
+
@if $color {
|
20
|
+
color: $color;
|
21
|
+
}
|
22
|
+
|
23
|
+
@if $border-color-arg {
|
24
|
+
border-color: $border-color-arg;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
.ff-nlp-input-wrapper {
|
29
|
+
position: relative;
|
30
|
+
|
31
|
+
.ff-nlp-input {
|
32
|
+
@extend .fontSm;
|
33
|
+
margin: 0;
|
34
|
+
padding: 0;
|
35
|
+
box-sizing: border-box;
|
36
|
+
min-height: 32px;
|
37
|
+
min-width: 489px;
|
38
|
+
display: flex;
|
39
|
+
align-items: end;
|
40
|
+
position: relative;
|
41
|
+
|
42
|
+
&-fieldset {
|
43
|
+
margin: 0;
|
44
|
+
padding: 25px 0px 0px 8px;
|
45
|
+
border: 1px solid transparent;
|
46
|
+
box-sizing: border-box;
|
47
|
+
height: 100%;
|
48
|
+
width: 100%;
|
49
|
+
border-radius: 4px;
|
50
|
+
display: block;
|
51
|
+
|
52
|
+
&--border-radius {
|
53
|
+
border-radius: 0px 4px 4px 0px;
|
54
|
+
}
|
55
|
+
|
56
|
+
&--no-label {
|
57
|
+
padding: 30px 0px 0px 8px;
|
58
|
+
}
|
59
|
+
|
60
|
+
&--default {
|
61
|
+
@include opacity-style(0, null, var(--ff-nlp-input-border-color));
|
62
|
+
}
|
63
|
+
|
64
|
+
&--active {
|
65
|
+
@include opacity-style(1, null, var(--ff-nlp-input-brand-color));
|
66
|
+
}
|
67
|
+
|
68
|
+
&--option {
|
69
|
+
opacity: 1;
|
70
|
+
}
|
71
|
+
|
72
|
+
&--no-border {
|
73
|
+
border-color: transparent;
|
74
|
+
}
|
75
|
+
|
76
|
+
&--error {
|
77
|
+
border-color: var(--error-light);
|
78
|
+
}
|
79
|
+
|
80
|
+
.ff-nlp-input-legend {
|
81
|
+
@extend .font-size-8;
|
82
|
+
padding: 0 2px;
|
83
|
+
letter-spacing: 0.5px;
|
84
|
+
|
85
|
+
&--default {
|
86
|
+
@include transition-all(0.3s);
|
87
|
+
opacity: 0;
|
88
|
+
}
|
89
|
+
|
90
|
+
&--active {
|
91
|
+
@include transition-all(0.25s);
|
92
|
+
@include opacity-style(1, var(--ff-nlp-input-brand-color));
|
93
|
+
}
|
94
|
+
|
95
|
+
&--option {
|
96
|
+
@include opacity-style(1, var(--ff-nlp-input-default-color));
|
97
|
+
}
|
98
|
+
|
99
|
+
&--error {
|
100
|
+
color: var(--error-light);
|
101
|
+
}
|
102
|
+
|
103
|
+
&--required {
|
104
|
+
margin-right: 2px;
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
&-input {
|
110
|
+
@extend .fontSm;
|
111
|
+
@include absolute-position(6px, auto, auto, auto);
|
112
|
+
width: calc(100% - 38px);
|
113
|
+
min-height: calc(100% - 8px);
|
114
|
+
padding: 0 28px 0 8px;
|
115
|
+
border-radius: 4px;
|
116
|
+
border: 1px solid transparent;
|
117
|
+
z-index: 100;
|
118
|
+
background: transparent;
|
119
|
+
outline: none;
|
120
|
+
color: var(--ff-nlp-input-text-color);
|
121
|
+
|
122
|
+
&:hover {
|
123
|
+
~ .ff-nlp-input-label {
|
124
|
+
color: var(--ff-nlp-input-text-hover-color);
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
&--border-radius {
|
129
|
+
border-radius: 0px 4px 4px 0px;
|
130
|
+
}
|
131
|
+
|
132
|
+
&--default {
|
133
|
+
@include opacity-style(1, null, var(--ff-nlp-input-border-color));
|
134
|
+
|
135
|
+
&:hover {
|
136
|
+
border-color: var(--ff-nlp-input-text-color);
|
137
|
+
|
138
|
+
~ .ff-nlp-input-fieldset--option {
|
139
|
+
border-color: var(--ff-nlp-input-text-color);
|
140
|
+
|
141
|
+
.ff-nlp-input-legend--option {
|
142
|
+
color: var(--ff-nlp-input-text-color);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
&--no-label {
|
149
|
+
min-height: calc(100% - 2px);
|
150
|
+
margin-top: 0px;
|
151
|
+
top: 0px;
|
152
|
+
}
|
153
|
+
|
154
|
+
&--active {
|
155
|
+
border-color: transparent;
|
156
|
+
|
157
|
+
&:hover {
|
158
|
+
border-color: transparent;
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
&--no-border {
|
163
|
+
border: none;
|
164
|
+
border-color: transparent;
|
165
|
+
|
166
|
+
&:hover {
|
167
|
+
border-color: transparent;
|
168
|
+
|
169
|
+
~ .ff-nlp-input-fieldset--no-border {
|
170
|
+
border-color: transparent;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
|
175
|
+
&--disable {
|
176
|
+
border-color: var(--ff-nlp-input-border-color);
|
177
|
+
|
178
|
+
&:hover {
|
179
|
+
border-color: var(--ff-nlp-input-border-color);
|
180
|
+
|
181
|
+
~ .ff-nlp-input-label--default {
|
182
|
+
color: var(--ff-nlp-input-default-color);
|
183
|
+
}
|
184
|
+
}
|
185
|
+
}
|
186
|
+
|
187
|
+
&--error {
|
188
|
+
border-color: var(--error-light);
|
189
|
+
|
190
|
+
&:hover {
|
191
|
+
border-color: var(--error-light);
|
192
|
+
}
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
&-label {
|
197
|
+
@include absolute-position(13px, auto, auto, 8px);
|
198
|
+
z-index: 1;
|
199
|
+
font-size: 12px;
|
200
|
+
top: 60%;
|
201
|
+
padding-left: 8px;
|
202
|
+
|
203
|
+
&--default {
|
204
|
+
@include transition-all;
|
205
|
+
@include opacity-style(1, var(--ff-nlp-input-default-color));
|
206
|
+
|
207
|
+
transform: translateY(-50%);
|
208
|
+
}
|
209
|
+
|
210
|
+
&--active {
|
211
|
+
@extend .font-size-8;
|
212
|
+
@include transition-all;
|
213
|
+
opacity: 0;
|
214
|
+
transform: translateY(-150%);
|
215
|
+
padding: 0 6px;
|
216
|
+
}
|
217
|
+
|
218
|
+
&--required {
|
219
|
+
margin-right: 2px;
|
220
|
+
}
|
221
|
+
}
|
222
|
+
|
223
|
+
&-arrow {
|
224
|
+
position: absolute;
|
225
|
+
top: 60%;
|
226
|
+
height: 100%;
|
227
|
+
right: 10px;
|
228
|
+
transform: rotateX(180deg) translateY(50%);
|
229
|
+
cursor: pointer;
|
230
|
+
|
231
|
+
&--no-label {
|
232
|
+
top: 50%;
|
233
|
+
}
|
234
|
+
|
235
|
+
&--down {
|
236
|
+
transform: rotateX(0deg) translateY(-50%);
|
237
|
+
z-index: 101;
|
238
|
+
}
|
239
|
+
}
|
240
|
+
}
|
241
|
+
|
242
|
+
&-error-text {
|
243
|
+
@include absolute-position(auto, auto, -14px, 12px);
|
244
|
+
white-space: nowrap;
|
245
|
+
}
|
246
|
+
}
|