no-frills-ui 0.0.14-alpha.3 → 0.0.14-alpha.5
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/index.js +1622 -539
- package/dist/index.js.map +1 -1
- package/lib-esm/components/Accordion/AccordionStep.d.ts.map +1 -1
- package/lib-esm/components/Accordion/AccordionStep.js +27 -38
- package/lib-esm/components/Accordion/AccordionStep.js.map +1 -1
- package/lib-esm/components/Badge/Badge.js +7 -7
- package/lib-esm/components/Badge/Badge.js.map +1 -1
- package/lib-esm/components/Button/ActionButton.d.ts.map +1 -1
- package/lib-esm/components/Button/ActionButton.js +12 -11
- package/lib-esm/components/Button/ActionButton.js.map +1 -1
- package/lib-esm/components/Button/Button.d.ts +2 -2
- package/lib-esm/components/Button/Button.d.ts.map +1 -1
- package/lib-esm/components/Button/Button.js +19 -14
- package/lib-esm/components/Button/Button.js.map +1 -1
- package/lib-esm/components/Button/IconButton.d.ts.map +1 -1
- package/lib-esm/components/Button/IconButton.js +15 -14
- package/lib-esm/components/Button/IconButton.js.map +1 -1
- package/lib-esm/components/Button/LinkButton.d.ts.map +1 -1
- package/lib-esm/components/Button/LinkButton.js +7 -6
- package/lib-esm/components/Button/LinkButton.js.map +1 -1
- package/lib-esm/components/Button/RaisedButton.d.ts.map +1 -1
- package/lib-esm/components/Button/RaisedButton.js +15 -14
- package/lib-esm/components/Button/RaisedButton.js.map +1 -1
- package/lib-esm/components/Card/Card.d.ts.map +1 -1
- package/lib-esm/components/Card/Card.js +4 -4
- package/lib-esm/components/Card/Card.js.map +1 -1
- package/lib-esm/components/Chip/Chip.d.ts +5 -2
- package/lib-esm/components/Chip/Chip.d.ts.map +1 -1
- package/lib-esm/components/Chip/Chip.js +20 -14
- package/lib-esm/components/Chip/Chip.js.map +1 -1
- package/lib-esm/components/ChipInput/ChipInput.d.ts +9 -0
- package/lib-esm/components/ChipInput/ChipInput.d.ts.map +1 -1
- package/lib-esm/components/ChipInput/ChipInput.js +63 -24
- package/lib-esm/components/ChipInput/ChipInput.js.map +1 -1
- package/lib-esm/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/lib-esm/components/Dialog/AlertDialog.js +4 -1
- package/lib-esm/components/Dialog/AlertDialog.js.map +1 -1
- package/lib-esm/components/Dialog/Dialog.d.ts +32 -2
- package/lib-esm/components/Dialog/Dialog.d.ts.map +1 -1
- package/lib-esm/components/Dialog/Dialog.js +84 -1
- package/lib-esm/components/Dialog/Dialog.js.map +1 -1
- package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts +24 -0
- package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts.map +1 -1
- package/lib-esm/components/DragAndDrop/DragAndDrop.js +85 -3
- package/lib-esm/components/DragAndDrop/DragAndDrop.js.map +1 -1
- package/lib-esm/components/DragAndDrop/DragItem.d.ts +4 -0
- package/lib-esm/components/DragAndDrop/DragItem.d.ts.map +1 -1
- package/lib-esm/components/DragAndDrop/DragItem.js +92 -12
- package/lib-esm/components/DragAndDrop/DragItem.js.map +1 -1
- package/lib-esm/components/DragAndDrop/types.d.ts +19 -0
- package/lib-esm/components/DragAndDrop/types.d.ts.map +1 -1
- package/lib-esm/components/DragAndDrop/types.js.map +1 -1
- package/lib-esm/components/Drawer/Drawer.d.ts +76 -1
- package/lib-esm/components/Drawer/Drawer.d.ts.map +1 -1
- package/lib-esm/components/Drawer/Drawer.js +158 -24
- package/lib-esm/components/Drawer/Drawer.js.map +1 -1
- package/lib-esm/components/Groups/Group.d.ts.map +1 -1
- package/lib-esm/components/Groups/Group.js +10 -8
- package/lib-esm/components/Groups/Group.js.map +1 -1
- package/lib-esm/components/Groups/GroupLabel.d.ts.map +1 -1
- package/lib-esm/components/Groups/GroupLabel.js +3 -3
- package/lib-esm/components/Groups/GroupLabel.js.map +1 -1
- package/lib-esm/components/Input/Checkbox.d.ts.map +1 -1
- package/lib-esm/components/Input/Checkbox.js +63 -58
- package/lib-esm/components/Input/Checkbox.js.map +1 -1
- package/lib-esm/components/Input/Dropdown.d.ts +8 -0
- package/lib-esm/components/Input/Dropdown.d.ts.map +1 -1
- package/lib-esm/components/Input/Dropdown.js +54 -31
- package/lib-esm/components/Input/Dropdown.js.map +1 -1
- package/lib-esm/components/Input/Input.d.ts.map +1 -1
- package/lib-esm/components/Input/Input.js +27 -22
- package/lib-esm/components/Input/Input.js.map +1 -1
- package/lib-esm/components/Input/Radio.d.ts.map +1 -1
- package/lib-esm/components/Input/Radio.js +58 -42
- package/lib-esm/components/Input/Radio.js.map +1 -1
- package/lib-esm/components/Input/RadioButton.d.ts.map +1 -1
- package/lib-esm/components/Input/RadioButton.js +12 -12
- package/lib-esm/components/Input/RadioButton.js.map +1 -1
- package/lib-esm/components/Input/Select.d.ts.map +1 -1
- package/lib-esm/components/Input/Select.js +27 -22
- package/lib-esm/components/Input/Select.js.map +1 -1
- package/lib-esm/components/Input/TextArea.d.ts.map +1 -1
- package/lib-esm/components/Input/TextArea.js +27 -22
- package/lib-esm/components/Input/TextArea.js.map +1 -1
- package/lib-esm/components/Input/Toggle.d.ts.map +1 -1
- package/lib-esm/components/Input/Toggle.js +17 -14
- package/lib-esm/components/Input/Toggle.js.map +1 -1
- package/lib-esm/components/Menu/Menu.d.ts +13 -1
- package/lib-esm/components/Menu/Menu.d.ts.map +1 -1
- package/lib-esm/components/Menu/Menu.js +98 -3
- package/lib-esm/components/Menu/Menu.js.map +1 -1
- package/lib-esm/components/Menu/MenuItem.d.ts +6 -3
- package/lib-esm/components/Menu/MenuItem.d.ts.map +1 -1
- package/lib-esm/components/Menu/MenuItem.js +10 -10
- package/lib-esm/components/Menu/MenuItem.js.map +1 -1
- package/lib-esm/components/Modal/Modal.d.ts +70 -1
- package/lib-esm/components/Modal/Modal.d.ts.map +1 -1
- package/lib-esm/components/Modal/Modal.js +145 -11
- package/lib-esm/components/Modal/Modal.js.map +1 -1
- package/lib-esm/components/Notification/Notification.d.ts +11 -7
- package/lib-esm/components/Notification/Notification.d.ts.map +1 -1
- package/lib-esm/components/Notification/Notification.js +54 -25
- package/lib-esm/components/Notification/Notification.js.map +1 -1
- package/lib-esm/components/Notification/NotificationManager.d.ts +11 -1
- package/lib-esm/components/Notification/NotificationManager.d.ts.map +1 -1
- package/lib-esm/components/Notification/NotificationManager.js +43 -8
- package/lib-esm/components/Notification/NotificationManager.js.map +1 -1
- package/lib-esm/components/Notification/style.d.ts +4 -0
- package/lib-esm/components/Notification/style.d.ts.map +1 -1
- package/lib-esm/components/Notification/style.js +30 -15
- package/lib-esm/components/Notification/style.js.map +1 -1
- package/lib-esm/components/Notification/types.d.ts +2 -0
- package/lib-esm/components/Notification/types.d.ts.map +1 -1
- package/lib-esm/components/Notification/types.js.map +1 -1
- package/lib-esm/components/Popover/Popover.d.ts.map +1 -1
- package/lib-esm/components/Popover/Popover.js +17 -2
- package/lib-esm/components/Popover/Popover.js.map +1 -1
- package/lib-esm/components/Spinner/Spinner.d.ts +3 -0
- package/lib-esm/components/Spinner/Spinner.d.ts.map +1 -1
- package/lib-esm/components/Spinner/Spinner.js +19 -4
- package/lib-esm/components/Spinner/Spinner.js.map +1 -1
- package/lib-esm/components/Stepper/Stepper.d.ts.map +1 -1
- package/lib-esm/components/Stepper/Stepper.js +29 -10
- package/lib-esm/components/Stepper/Stepper.js.map +1 -1
- package/lib-esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/lib-esm/components/Tabs/Tabs.js +45 -12
- package/lib-esm/components/Tabs/Tabs.js.map +1 -1
- package/lib-esm/components/Toast/Toast.d.ts +25 -4
- package/lib-esm/components/Toast/Toast.d.ts.map +1 -1
- package/lib-esm/components/Toast/Toast.js +114 -18
- package/lib-esm/components/Toast/Toast.js.map +1 -1
- package/lib-esm/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/lib-esm/components/Tooltip/Tooltip.js +16 -5
- package/lib-esm/components/Tooltip/Tooltip.js.map +1 -1
- package/lib-esm/shared/LayerManager.d.ts.map +1 -1
- package/lib-esm/shared/LayerManager.js +63 -1
- package/lib-esm/shared/LayerManager.js.map +1 -1
- package/lib-esm/shared/constants.d.ts +58 -27
- package/lib-esm/shared/constants.d.ts.map +1 -1
- package/lib-esm/shared/constants.js +88 -25
- package/lib-esm/shared/constants.js.map +1 -1
- package/lib-esm/shared/styles.d.ts +1 -1
- package/lib-esm/shared/styles.d.ts.map +1 -1
- package/lib-esm/shared/styles.js +5 -3
- package/lib-esm/shared/styles.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,78 +1,94 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
|
-
import
|
|
4
|
+
import { getThemeValue, THEME_NAME } from '../../shared/constants';
|
|
5
5
|
const Label = styled.label `
|
|
6
6
|
display: inline-flex;
|
|
7
7
|
align-items: center;
|
|
8
8
|
margin: 5px 0;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
position: relative;
|
|
9
11
|
`;
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const StyledRadio = styled.span `
|
|
13
|
+
width: 16px;
|
|
14
|
+
height: 16px;
|
|
15
|
+
margin-right: 5px;
|
|
16
|
+
border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};
|
|
17
|
+
border-radius: 50%;
|
|
18
|
+
display: block;
|
|
19
|
+
transition: background-color 0.3s ease;
|
|
20
|
+
position: relative;
|
|
21
|
+
flex-shrink: 0;
|
|
13
22
|
|
|
14
|
-
&::
|
|
15
|
-
content: '
|
|
16
|
-
width:
|
|
17
|
-
height:
|
|
18
|
-
margin: 0 5px;
|
|
19
|
-
border: 1px solid var(--border-color, ${constants.BORDER_COLOR});
|
|
23
|
+
&::after {
|
|
24
|
+
content: '';
|
|
25
|
+
width: 100%;
|
|
26
|
+
height: 100%;
|
|
20
27
|
border-radius: 50%;
|
|
21
|
-
|
|
22
|
-
|
|
28
|
+
position: absolute;
|
|
29
|
+
top: 0;
|
|
30
|
+
left: 0;
|
|
31
|
+
box-shadow: inset 0 0 0 3px ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
32
|
+
opacity: 0;
|
|
33
|
+
transition: opacity 0.2s ease;
|
|
23
34
|
}
|
|
35
|
+
`;
|
|
36
|
+
const HiddenInput = styled.input `
|
|
37
|
+
opacity: 0;
|
|
38
|
+
width: 0;
|
|
39
|
+
height: 0;
|
|
40
|
+
position: absolute;
|
|
41
|
+
margin: 0;
|
|
24
42
|
|
|
25
43
|
/* checked */
|
|
26
|
-
&:checked
|
|
27
|
-
border:
|
|
28
|
-
background-color:
|
|
29
|
-
|
|
44
|
+
&:checked + ${StyledRadio} {
|
|
45
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
46
|
+
background-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
&:checked + ${StyledRadio}::after {
|
|
50
|
+
opacity: 1;
|
|
30
51
|
}
|
|
31
52
|
|
|
32
53
|
/* focus */
|
|
33
|
-
&:enabled:focus
|
|
34
|
-
border:
|
|
35
|
-
box-shadow: 0 0 0 3px
|
|
36
|
-
cursor: pointer;
|
|
54
|
+
&:enabled:focus + ${StyledRadio} {
|
|
55
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
56
|
+
box-shadow: 0 0 0 3px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
37
57
|
}
|
|
38
58
|
|
|
39
|
-
&:enabled:checked:focus
|
|
40
|
-
border:
|
|
41
|
-
box-shadow:
|
|
42
|
-
0 0 0 3px var(--primary, ${constants.PRIMARY_LIGHT}),
|
|
43
|
-
inset 0 0 0 3px var(--background, ${constants.BACKGROUND});
|
|
44
|
-
cursor: pointer;
|
|
59
|
+
&:enabled:checked:focus + ${StyledRadio} {
|
|
60
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
61
|
+
box-shadow: 0 0 0 3px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
45
62
|
}
|
|
46
63
|
|
|
47
64
|
/* hover */
|
|
48
|
-
&:enabled:hover
|
|
49
|
-
border:
|
|
50
|
-
cursor: pointer;
|
|
65
|
+
&:enabled:hover + ${StyledRadio} {
|
|
66
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
51
67
|
}
|
|
52
68
|
|
|
53
|
-
&:enabled:hover
|
|
54
|
-
color:
|
|
55
|
-
cursor: pointer;
|
|
69
|
+
&:enabled:hover ~ span {
|
|
70
|
+
color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
56
71
|
}
|
|
57
72
|
|
|
58
73
|
/* disabled */
|
|
59
|
-
&:disabled
|
|
60
|
-
border:
|
|
61
|
-
background-color:
|
|
74
|
+
&:disabled + ${StyledRadio} {
|
|
75
|
+
border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
76
|
+
background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};
|
|
77
|
+
cursor: not-allowed;
|
|
62
78
|
}
|
|
63
79
|
|
|
64
|
-
&:disabled:checked
|
|
65
|
-
border:
|
|
66
|
-
background-color:
|
|
67
|
-
box-shadow: inset 0 0 0 3px var(--background, ${constants.BACKGROUND});
|
|
80
|
+
&:disabled:checked + ${StyledRadio} {
|
|
81
|
+
border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
82
|
+
background-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
68
83
|
}
|
|
69
84
|
|
|
70
|
-
&:disabled
|
|
71
|
-
color:
|
|
85
|
+
&:disabled ~ span {
|
|
86
|
+
color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
87
|
+
cursor: not-allowed;
|
|
72
88
|
}
|
|
73
89
|
`;
|
|
74
90
|
function Radio(props) {
|
|
75
|
-
return (_jsxs(Label, { children: [_jsx(
|
|
91
|
+
return (_jsxs(Label, { children: [_jsx(HiddenInput, Object.assign({}, props, { type: "radio" })), _jsx(StyledRadio, {}), _jsx("span", { children: props.label })] }));
|
|
76
92
|
}
|
|
77
93
|
Radio.propTypes = {
|
|
78
94
|
/** Label for the field */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../src/components/Input/Radio.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../src/components/Input/Radio.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;CAMzB,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAA;;;;wBAIP,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC;;;;;;;;;;;;;;;sCAexB,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;;;;CAIzE,CAAC;AAEF,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;;;kBAQd,WAAW;wBACL,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;4BAC7B,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;;;kBAG3C,WAAW;;;;;wBAKL,WAAW;wBACX,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;gCACzB,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC;;;gCAGvC,WAAW;wBACnB,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;gCACzB,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC;;;;wBAI/C,WAAW;wBACX,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;;;;iBAIxC,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;;;;mBAI/B,WAAW;wBACN,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;4BACrC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC;;;;2BAIrC,WAAW;wBACd,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;4BACrC,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;;;;iBAIpD,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;;;CAGzD,CAAC;AAEF,SAAS,KAAK,CACV,KAA+F;IAE/F,OAAO,CACH,MAAC,KAAK,eACF,KAAC,WAAW,oBAAK,KAAK,IAAE,IAAI,EAAC,OAAO,IAAG,EACvC,KAAC,WAAW,KAAG,EACf,yBAAO,KAAK,CAAC,KAAK,GAAQ,IACtB,CACX,CAAC;AACN,CAAC;AAED,KAAK,CAAC,SAAS,GAAG;IACd,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC,MAAM;CAC1B,CAAC;AAEF,eAAe,KAAK,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\n\nconst Label = styled.label`\n display: inline-flex;\n align-items: center;\n margin: 5px 0;\n cursor: pointer;\n position: relative;\n`;\n\nconst StyledRadio = styled.span`\n width: 16px;\n height: 16px;\n margin-right: 5px;\n border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};\n border-radius: 50%;\n display: block;\n transition: background-color 0.3s ease;\n position: relative;\n flex-shrink: 0;\n\n &::after {\n content: '';\n width: 100%;\n height: 100%;\n border-radius: 50%;\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: inset 0 0 0 3px ${getThemeValue(THEME_NAME.BACKGROUND)};\n opacity: 0;\n transition: opacity 0.2s ease;\n }\n`;\n\nconst HiddenInput = styled.input`\n opacity: 0;\n width: 0;\n height: 0;\n position: absolute;\n margin: 0;\n\n /* checked */\n &:checked + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n background-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n &:checked + ${StyledRadio}::after {\n opacity: 1;\n }\n\n /* focus */\n &:enabled:focus + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n box-shadow: 0 0 0 3px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n &:enabled:checked:focus + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n box-shadow: 0 0 0 3px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n /* hover */\n &:enabled:hover + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n &:enabled:hover ~ span {\n color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /* disabled */\n &:disabled + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};\n cursor: not-allowed;\n }\n\n &:disabled:checked + ${StyledRadio} {\n border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n }\n\n &:disabled ~ span {\n color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n cursor: not-allowed;\n }\n`;\n\nfunction Radio(\n props: PropTypes.InferProps<React.AllHTMLAttributes<HTMLInputElement> & typeof Radio.propTypes>,\n) {\n return (\n <Label>\n <HiddenInput {...props} type=\"radio\" />\n <StyledRadio />\n <span>{props.label}</span>\n </Label>\n );\n}\n\nRadio.propTypes = {\n /** Label for the field */\n label: PropTypes.string,\n};\n\nexport default Radio;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../../../src/components/Input/RadioButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAoDnC,eAAO,MAAM,UAAU;;
|
|
1
|
+
{"version":3,"file":"RadioButton.d.ts","sourceRoot":"","sources":["../../../src/components/Input/RadioButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AAoDnC,eAAO,MAAM,UAAU;;SAhC8C,MACjE,WAEE;qFA0CL,CAAC;AAEF,iBAAS,WAAW,CAChB,KAAK,EAAE,SAAS,CAAC,UAAU,CACvB,KAAK,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,OAAO,WAAW,CAAC,SAAS,CAC3E,oDAQJ;kBAXQ,WAAW;;QAchB,0BAA0B;;;;AAI9B,eAAe,WAAW,CAAC"}
|
|
@@ -1,44 +1,44 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
|
-
import
|
|
4
|
+
import { getThemeValue, THEME_NAME } from '../../shared/constants';
|
|
5
5
|
const Input = styled.input `
|
|
6
6
|
appearance: none;
|
|
7
7
|
margin: 0;
|
|
8
8
|
width: 0;
|
|
9
9
|
|
|
10
10
|
& + span {
|
|
11
|
-
color:
|
|
11
|
+
color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
12
12
|
padding: 6px 12px;
|
|
13
13
|
border: none;
|
|
14
|
-
border: 1px solid
|
|
14
|
+
border: 1px solid ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
15
15
|
cursor: pointer;
|
|
16
16
|
margin-right: -1px;
|
|
17
17
|
line-height: 18px;
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
&:enabled:focus + span {
|
|
21
|
-
box-shadow: 0 0 0 4px
|
|
21
|
+
box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
&:enabled:hover + span {
|
|
25
|
-
background-color:
|
|
26
|
-
color:
|
|
25
|
+
background-color: ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
26
|
+
color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
&:enabled:checked + span {
|
|
30
|
-
background-color:
|
|
31
|
-
color:
|
|
30
|
+
background-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
31
|
+
color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
&:disabled + span {
|
|
35
|
-
background-color:
|
|
36
|
-
color:
|
|
35
|
+
background-color: ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};
|
|
36
|
+
color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
&:disabled:checked + span {
|
|
40
|
-
background-color:
|
|
41
|
-
color:
|
|
40
|
+
background-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
41
|
+
color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};
|
|
42
42
|
}
|
|
43
43
|
`;
|
|
44
44
|
const Label = styled.label `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RadioButton.js","sourceRoot":"","sources":["../../../src/components/Input/RadioButton.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"RadioButton.js","sourceRoot":"","sources":["../../../src/components/Input/RadioButton.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEnE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;iBAMT,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;;;4BAGtB,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;;;;;;;gCAO7B,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC;;;;4BAI3C,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC;iBAClD,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;;4BAI/B,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC;iBAC5C,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC;;;;4BAI/B,aAAa,CAAC,UAAU,CAAC,kBAAkB,CAAC;iBACvD,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;;;;4BAI9B,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC;iBACpD,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC;;CAE1D,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;CAMzB,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;QAM5B,KAAK;;;;QAIL,KAAK;;;CAGZ,CAAC;AAEF,SAAS,WAAW,CAChB,KAEC;IAED,OAAO,CACH,MAAC,KAAK,eACF,KAAC,KAAK,oBAAK,KAAK,IAAE,IAAI,EAAC,OAAO,IAAG,EACjC,yBAAO,KAAK,CAAC,KAAK,GAAQ,IACtB,CACX,CAAC;AACN,CAAC;AAED,WAAW,CAAC,SAAS,GAAG;IACpB,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC,MAAM;CAC1B,CAAC;AAEF,eAAe,WAAW,CAAC","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\n\nconst Input = styled.input`\n appearance: none;\n margin: 0;\n width: 0;\n\n & + span {\n color: ${getThemeValue(THEME_NAME.PRIMARY)};\n padding: 6px 12px;\n border: none;\n border: 1px solid ${getThemeValue(THEME_NAME.PRIMARY)};\n cursor: pointer;\n margin-right: -1px;\n line-height: 18px;\n }\n\n &:enabled:focus + span {\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n &:enabled:hover + span {\n background-color: ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};\n }\n\n &:enabled:checked + span {\n background-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};\n }\n\n &:disabled + span {\n background-color: ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n }\n\n &:disabled:checked + span {\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_LIGHT)};\n }\n`;\n\nconst Label = styled.label`\n display: inline-flex;\n\n &:focus-within {\n z-index: 1;\n }\n`;\n\nexport const RadioGroup = styled.div`\n display: inline-flex;\n align-items: center;\n border-radius: 3px;\n margin: 5px 0;\n\n & ${Label}:first-child > span {\n border-radius: 3px 0 0 3px;\n }\n\n & ${Label}:last-child > span {\n border-radius: 0 3px 3px 0;\n }\n`;\n\nfunction RadioButton(\n props: PropTypes.InferProps<\n React.AllHTMLAttributes<HTMLInputElement> & typeof RadioButton.propTypes\n >,\n) {\n return (\n <Label>\n <Input {...props} type=\"radio\" />\n <span>{props.label}</span>\n </Label>\n );\n}\n\nRadioButton.propTypes = {\n /** Label for the field */\n label: PropTypes.string,\n};\n\nexport default RadioButton;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAC1D,OAAO,SAAS,MAAM,YAAY,CAAC;AAKnC,UAAU,WACN,SACI,SAAS,CAAC,SAAS,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,EAC5C,KAAK,CAAC,mBAAmB,CAAC,iBAAiB,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AA0ID,iBAAwB,MAAM,CAAC,KAAK,EAAE,WAAW,oDAkDhD;kBAlDuB,MAAM;;QAqD1B,0BAA0B;;QAE1B,6CAA6C;;;;eAvDzB,MAAM"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useState, useEffect, useId } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import styled from '@emotion/styled';
|
|
5
5
|
import ExpandMore from '../../icons/ExpandMore';
|
|
6
|
-
import
|
|
6
|
+
import { getThemeValue, THEME_NAME } from '../../shared/constants';
|
|
7
7
|
const Label = styled.label `
|
|
8
8
|
display: inline-flex;
|
|
9
9
|
flex-direction: column;
|
|
10
|
-
flex: 1;
|
|
11
10
|
position: relative;
|
|
12
11
|
margin: 10px 5px;
|
|
13
12
|
pointer-events: none;
|
|
@@ -25,48 +24,48 @@ const SelectField = styled.select `
|
|
|
25
24
|
min-height: 32px;
|
|
26
25
|
width: 268px;
|
|
27
26
|
border-radius: 3px;
|
|
28
|
-
border: 1px solid
|
|
27
|
+
border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};
|
|
29
28
|
display: inline-block;
|
|
30
|
-
background-color:
|
|
29
|
+
background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
31
30
|
pointer-events: auto;
|
|
32
31
|
appearance: none;
|
|
33
32
|
|
|
34
33
|
/** Focused */
|
|
35
34
|
&:focus,
|
|
36
35
|
&:active {
|
|
37
|
-
border-color:
|
|
38
|
-
box-shadow: 0 0 0 4px
|
|
36
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
37
|
+
box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
&:focus ~ span,
|
|
42
41
|
&:active ~ span {
|
|
43
|
-
color:
|
|
42
|
+
color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
/** Disabled */
|
|
47
46
|
&:disabled {
|
|
48
|
-
border-color:
|
|
49
|
-
background-color:
|
|
47
|
+
border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
48
|
+
background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
&:disabled ~ span {
|
|
53
|
-
color:
|
|
52
|
+
color: ${getThemeValue(THEME_NAME.DISABLED)};
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
/** Invalid */
|
|
57
56
|
&:focus:invalid {
|
|
58
|
-
border-color:
|
|
59
|
-
box-shadow: 0 0 0 4px
|
|
57
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
58
|
+
box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.ERROR_LIGHT)};
|
|
60
59
|
}
|
|
61
60
|
|
|
62
61
|
${(props) => props.touched
|
|
63
62
|
? `
|
|
64
63
|
&:invalid {
|
|
65
|
-
border-color:
|
|
64
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
66
65
|
}
|
|
67
66
|
|
|
68
67
|
&:invalid ~ span {
|
|
69
|
-
color:
|
|
68
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
70
69
|
}
|
|
71
70
|
`
|
|
72
71
|
: ''}
|
|
@@ -74,10 +73,10 @@ const SelectField = styled.select `
|
|
|
74
73
|
/** Error */
|
|
75
74
|
${(props) => props.errorText
|
|
76
75
|
? `
|
|
77
|
-
border-color:
|
|
76
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
78
77
|
|
|
79
78
|
& ~ span {
|
|
80
|
-
color:
|
|
79
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
81
80
|
}
|
|
82
81
|
`
|
|
83
82
|
: ''}
|
|
@@ -86,7 +85,7 @@ const SelectField = styled.select `
|
|
|
86
85
|
&:required + span:after {
|
|
87
86
|
content: '*';
|
|
88
87
|
margin-left: 2px;
|
|
89
|
-
color:
|
|
88
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
90
89
|
}
|
|
91
90
|
|
|
92
91
|
/** Label Animation */
|
|
@@ -104,7 +103,7 @@ const SelectField = styled.select `
|
|
|
104
103
|
? `
|
|
105
104
|
& + span {
|
|
106
105
|
top: -8px;
|
|
107
|
-
background:
|
|
106
|
+
background: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
108
107
|
font-size: 12px;
|
|
109
108
|
line-height: 14px;
|
|
110
109
|
}
|
|
@@ -113,13 +112,13 @@ const SelectField = styled.select `
|
|
|
113
112
|
|
|
114
113
|
&:focus + span, &:placeholder-shown + span {
|
|
115
114
|
top: -8px;
|
|
116
|
-
background:
|
|
115
|
+
background: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
117
116
|
font-size: 12px;
|
|
118
117
|
line-height: 14px;
|
|
119
118
|
}
|
|
120
119
|
`;
|
|
121
120
|
const ErrorContainer = styled.div `
|
|
122
|
-
color:
|
|
121
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
123
122
|
padding-top: 3px;
|
|
124
123
|
font-size: 12px;
|
|
125
124
|
line-height: 14px;
|
|
@@ -133,6 +132,12 @@ const ArrowContainer = styled.span `
|
|
|
133
132
|
export default function Select(props) {
|
|
134
133
|
const [touched, setTouched] = useState(false);
|
|
135
134
|
const [value, setValue] = useState(props.value || '');
|
|
135
|
+
const errorId = useId();
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (props.value !== undefined) {
|
|
138
|
+
setValue(props.value);
|
|
139
|
+
}
|
|
140
|
+
}, [props.value]);
|
|
136
141
|
const handleFocus = (e) => {
|
|
137
142
|
setTouched(true);
|
|
138
143
|
if (props.onFocus) {
|
|
@@ -148,7 +153,7 @@ export default function Select(props) {
|
|
|
148
153
|
setValue(e.target.value);
|
|
149
154
|
}
|
|
150
155
|
};
|
|
151
|
-
return (_jsxs(Label, { children: [_jsxs(SelectField, Object.assign({}, props, { multiple: false, value: value, onChange: onChangeHandler, onFocus: handleFocus, touched: touched, children: [_jsx("option", {}), props.children] })), _jsx("span", { children: props.label }), _jsx(ArrowContainer, { children: _jsx(ExpandMore, {}) }), props.errorText && _jsx(ErrorContainer, { children: props.errorText })] }));
|
|
156
|
+
return (_jsxs(Label, { children: [_jsxs(SelectField, Object.assign({}, props, { multiple: false, value: value, onChange: onChangeHandler, onFocus: handleFocus, touched: touched, "aria-invalid": !!props.errorText, "aria-required": props.required, "aria-describedby": props.errorText ? errorId : undefined, children: [_jsx("option", {}), props.children] })), _jsx("span", { children: props.label }), _jsx(ArrowContainer, { "aria-hidden": "true", children: _jsx(ExpandMore, {}) }), props.errorText && _jsx(ErrorContainer, { id: errorId, children: props.errorText })] }));
|
|
152
157
|
}
|
|
153
158
|
Select.propTypes = {
|
|
154
159
|
/** Label for the field */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Input/Select.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Select.js","sourceRoot":"","sources":["../../../src/components/Input/Select.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useId } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport ExpandMore from '../../icons/ExpandMore';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\n\ninterface SelectProps\n extends\n PropTypes.InferType<typeof Select.propTypes>,\n React.InputHTMLAttributes<HTMLSelectElement> {\n value?: string;\n}\n\ntype SelectInternalProps = SelectProps & {\n touched: boolean;\n};\n\nconst Label = styled.label`\n display: inline-flex;\n flex-direction: column;\n position: relative;\n margin: 10px 5px;\n pointer-events: none;\n max-width: 268px;\n\n & svg {\n fill: currentColor;\n }\n`;\n\nconst SelectField = styled.select<SelectInternalProps>`\n border: none;\n color: inherit;\n padding: 0 8px;\n line-height: 30px;\n min-height: 32px;\n width: 268px;\n border-radius: 3px;\n border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};\n display: inline-block;\n background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};\n pointer-events: auto;\n appearance: none;\n\n /** Focused */\n &:focus,\n &:active {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n &:focus ~ span,\n &:active ~ span {\n color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /** Disabled */\n &:disabled {\n border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};\n }\n\n &:disabled ~ span {\n color: ${getThemeValue(THEME_NAME.DISABLED)};\n }\n\n /** Invalid */\n &:focus:invalid {\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.ERROR_LIGHT)};\n }\n\n ${(props) =>\n props.touched\n ? `\n &:invalid {\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n\n &:invalid ~ span {\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n `\n : ''}\n\n /** Error */\n ${(props) =>\n props.errorText\n ? `\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n\n & ~ span {\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n `\n : ''}\n\n /** Required */\n &:required + span:after {\n content: '*';\n margin-left: 2px;\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n\n /** Label Animation */\n & + span {\n position: absolute;\n padding: 0 5px;\n top: 0px;\n left: 4px;\n font-size: 14px;\n line-height: 32px;\n transition: all 300ms ease;\n }\n\n ${(props) =>\n props.value !== ''\n ? `\n & + span {\n top: -8px;\n background: ${getThemeValue(THEME_NAME.BACKGROUND)};\n font-size: 12px;\n line-height: 14px;\n }\n `\n : ''}\n\n &:focus + span, &:placeholder-shown + span {\n top: -8px;\n background: ${getThemeValue(THEME_NAME.BACKGROUND)};\n font-size: 12px;\n line-height: 14px;\n }\n`;\n\nconst ErrorContainer = styled.div`\n color: ${getThemeValue(THEME_NAME.ERROR)};\n padding-top: 3px;\n font-size: 12px;\n line-height: 14px;\n margin-left: 3px;\n`;\n\nconst ArrowContainer = styled.span`\n position: absolute;\n right: 8px;\n top: 8px;\n`;\n\nexport default function Select(props: SelectProps) {\n const [touched, setTouched] = useState(false);\n const [value, setValue] = useState(props.value || '');\n const errorId = useId();\n\n useEffect(() => {\n if (props.value !== undefined) {\n setValue(props.value);\n }\n }, [props.value]);\n\n const handleFocus = (e: React.FocusEvent<HTMLSelectElement>) => {\n setTouched(true);\n if (props.onFocus) {\n props.onFocus(e);\n }\n };\n\n const onChangeHandler = (e: React.ChangeEvent<HTMLSelectElement>) => {\n if (props.onChange) {\n setValue(e.target.value);\n props.onChange(e);\n } else {\n setValue(e.target.value);\n }\n };\n\n return (\n <Label>\n <SelectField\n {...props}\n multiple={false}\n value={value}\n onChange={onChangeHandler}\n onFocus={handleFocus}\n touched={touched}\n aria-invalid={!!props.errorText}\n aria-required={props.required}\n aria-describedby={props.errorText ? errorId : undefined}\n >\n <option />\n {props.children}\n </SelectField>\n <span>{props.label}</span>\n <ArrowContainer aria-hidden=\"true\">\n <ExpandMore />\n </ArrowContainer>\n {props.errorText && <ErrorContainer id={errorId}>{props.errorText}</ErrorContainer>}\n </Label>\n );\n}\n\nSelect.propTypes = {\n /** Label for the field */\n label: PropTypes.string,\n /** Error text to be shown below the field */\n errorText: PropTypes.string,\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../src/components/Input/TextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../src/components/Input/TextArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqC,MAAM,OAAO,CAAC;AAC1D,OAAO,SAAS,MAAM,YAAY,CAAC;AAInC,UAAU,aACN,SACI,SAAS,CAAC,SAAS,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,EAC9C,KAAK,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AA2HD,iBAAwB,QAAQ,CAAC,KAAK,EAAE,aAAa,oDA2CpD;kBA3CuB,QAAQ;;QA8C5B,0BAA0B;;QAE1B,6CAA6C;;;;eAhDzB,QAAQ"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { useState } from 'react';
|
|
2
|
+
import { useState, useEffect, useId } from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import styled from '@emotion/styled';
|
|
5
|
-
import
|
|
5
|
+
import { getThemeValue, THEME_NAME } from '../../shared/constants';
|
|
6
6
|
const Label = styled.label `
|
|
7
7
|
display: inline-flex;
|
|
8
8
|
flex-direction: column;
|
|
9
|
-
flex: 1;
|
|
10
9
|
position: relative;
|
|
11
10
|
margin: 10px 5px;
|
|
12
11
|
`;
|
|
@@ -17,46 +16,46 @@ const TextField = styled.textarea `
|
|
|
17
16
|
min-height: 150px;
|
|
18
17
|
min-width: 250px;
|
|
19
18
|
border-radius: 3px;
|
|
20
|
-
border: 1px solid
|
|
19
|
+
border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};
|
|
21
20
|
display: inline-block;
|
|
22
|
-
background-color:
|
|
21
|
+
background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
23
22
|
|
|
24
23
|
/** Focused */
|
|
25
24
|
&:focus,
|
|
26
25
|
&:active {
|
|
27
|
-
border-color:
|
|
28
|
-
box-shadow: 0 0 0 4px
|
|
26
|
+
border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
27
|
+
box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
&:focus + span,
|
|
32
31
|
&:active + span {
|
|
33
|
-
color:
|
|
32
|
+
color: ${getThemeValue(THEME_NAME.PRIMARY)};
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
/** Disabled */
|
|
37
36
|
&:disabled {
|
|
38
|
-
border-color:
|
|
39
|
-
background-color:
|
|
37
|
+
border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};
|
|
38
|
+
background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
&:disabled + span {
|
|
43
|
-
color:
|
|
42
|
+
color: ${getThemeValue(THEME_NAME.DISABLED)};
|
|
44
43
|
}
|
|
45
44
|
|
|
46
45
|
/** Invalid */
|
|
47
46
|
&:focus:invalid {
|
|
48
|
-
border-color:
|
|
49
|
-
box-shadow: 0 0 0 4px
|
|
47
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
48
|
+
box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.ERROR_LIGHT)};
|
|
50
49
|
}
|
|
51
50
|
|
|
52
51
|
${(props) => props.touched
|
|
53
52
|
? `
|
|
54
53
|
&:invalid {
|
|
55
|
-
border-color:
|
|
54
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
56
55
|
}
|
|
57
56
|
|
|
58
57
|
&:invalid + span {
|
|
59
|
-
color:
|
|
58
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
60
59
|
}
|
|
61
60
|
`
|
|
62
61
|
: ''}
|
|
@@ -64,10 +63,10 @@ const TextField = styled.textarea `
|
|
|
64
63
|
/** Error */
|
|
65
64
|
${(props) => props.errorText
|
|
66
65
|
? `
|
|
67
|
-
border-color:
|
|
66
|
+
border-color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
68
67
|
|
|
69
68
|
& + span {
|
|
70
|
-
color:
|
|
69
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
71
70
|
}
|
|
72
71
|
`
|
|
73
72
|
: ''}
|
|
@@ -76,7 +75,7 @@ const TextField = styled.textarea `
|
|
|
76
75
|
&:required + span:after {
|
|
77
76
|
content: '*';
|
|
78
77
|
margin-left: 2px;
|
|
79
|
-
color:
|
|
78
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
80
79
|
}
|
|
81
80
|
|
|
82
81
|
/** Label Animation */
|
|
@@ -94,7 +93,7 @@ const TextField = styled.textarea `
|
|
|
94
93
|
? `
|
|
95
94
|
& + span {
|
|
96
95
|
top: -8px;
|
|
97
|
-
background:
|
|
96
|
+
background: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
98
97
|
font-size: 12px;
|
|
99
98
|
line-height: 14px;
|
|
100
99
|
}
|
|
@@ -103,13 +102,13 @@ const TextField = styled.textarea `
|
|
|
103
102
|
|
|
104
103
|
&:focus + span, &:placeholder-shown + span {
|
|
105
104
|
top: -8px;
|
|
106
|
-
background:
|
|
105
|
+
background: ${getThemeValue(THEME_NAME.BACKGROUND)};
|
|
107
106
|
font-size: 12px;
|
|
108
107
|
line-height: 14px;
|
|
109
108
|
}
|
|
110
109
|
`;
|
|
111
110
|
const ErrorContainer = styled.div `
|
|
112
|
-
color:
|
|
111
|
+
color: ${getThemeValue(THEME_NAME.ERROR)};
|
|
113
112
|
padding-top: 3px;
|
|
114
113
|
font-size: 12px;
|
|
115
114
|
line-height: 14px;
|
|
@@ -118,6 +117,12 @@ const ErrorContainer = styled.div `
|
|
|
118
117
|
export default function TextArea(props) {
|
|
119
118
|
const [touched, setTouched] = useState(false);
|
|
120
119
|
const [value, setValue] = useState(props.value || '');
|
|
120
|
+
const errorId = useId();
|
|
121
|
+
useEffect(() => {
|
|
122
|
+
if (props.value !== undefined) {
|
|
123
|
+
setValue(props.value);
|
|
124
|
+
}
|
|
125
|
+
}, [props.value]);
|
|
121
126
|
const handleFocus = (e) => {
|
|
122
127
|
setTouched(true);
|
|
123
128
|
if (props.onFocus) {
|
|
@@ -133,7 +138,7 @@ export default function TextArea(props) {
|
|
|
133
138
|
setValue(e.target.value);
|
|
134
139
|
}
|
|
135
140
|
};
|
|
136
|
-
return (_jsxs(Label, { children: [_jsx(TextField, Object.assign({}, props, { value: value, onChange: onChangeHandler, onFocus: handleFocus, touched: touched })), _jsx("span", { children: props.label }), props.errorText && _jsx(ErrorContainer, { children: props.errorText })] }));
|
|
141
|
+
return (_jsxs(Label, { children: [_jsx(TextField, Object.assign({}, props, { value: value, onChange: onChangeHandler, onFocus: handleFocus, touched: touched, "aria-invalid": !!props.errorText, "aria-required": props.required, "aria-describedby": props.errorText ? errorId : undefined })), _jsx("span", { children: props.label }), props.errorText && _jsx(ErrorContainer, { id: errorId, children: props.errorText })] }));
|
|
137
142
|
}
|
|
138
143
|
TextArea.propTypes = {
|
|
139
144
|
/** Label for the field */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextArea.js","sourceRoot":"","sources":["../../../src/components/Input/TextArea.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TextArea.js","sourceRoot":"","sources":["../../../src/components/Input/TextArea.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect, useId } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\n\ninterface TextAreaProps\n extends\n PropTypes.InferType<typeof TextArea.propTypes>,\n React.InputHTMLAttributes<HTMLTextAreaElement> {\n value?: string;\n}\n\ntype TextAreaInternalProps = TextAreaProps & {\n touched: boolean;\n};\n\nconst Label = styled.label`\n display: inline-flex;\n flex-direction: column;\n position: relative;\n margin: 10px 5px;\n`;\n\nconst TextField = styled.textarea<TextAreaInternalProps>`\n border: none;\n color: inherit;\n padding: 8px;\n min-height: 150px;\n min-width: 250px;\n border-radius: 3px;\n border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};\n display: inline-block;\n background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};\n\n /** Focused */\n &:focus,\n &:active {\n border-color: ${getThemeValue(THEME_NAME.PRIMARY)};\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};\n }\n\n &:focus + span,\n &:active + span {\n color: ${getThemeValue(THEME_NAME.PRIMARY)};\n }\n\n /** Disabled */\n &:disabled {\n border-color: ${getThemeValue(THEME_NAME.DISABLED_BORDER)};\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};\n }\n\n &:disabled + span {\n color: ${getThemeValue(THEME_NAME.DISABLED)};\n }\n\n /** Invalid */\n &:focus:invalid {\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.ERROR_LIGHT)};\n }\n\n ${(props) =>\n props.touched\n ? `\n &:invalid {\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n\n &:invalid + span {\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n `\n : ''}\n\n /** Error */\n ${(props) =>\n props.errorText\n ? `\n border-color: ${getThemeValue(THEME_NAME.ERROR)};\n\n & + span {\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n `\n : ''}\n\n /** Required */\n &:required + span:after {\n content: '*';\n margin-left: 2px;\n color: ${getThemeValue(THEME_NAME.ERROR)};\n }\n\n /** Label Animation */\n & + span {\n position: absolute;\n padding: 0 5px;\n top: 0px;\n left: 4px;\n font-size: 14px;\n line-height: 32px;\n transition: all 300ms ease;\n }\n\n ${(props) =>\n props.value !== ''\n ? `\n & + span {\n top: -8px;\n background: ${getThemeValue(THEME_NAME.BACKGROUND)};\n font-size: 12px;\n line-height: 14px;\n }\n `\n : ''}\n\n &:focus + span, &:placeholder-shown + span {\n top: -8px;\n background: ${getThemeValue(THEME_NAME.BACKGROUND)};\n font-size: 12px;\n line-height: 14px;\n }\n`;\n\nconst ErrorContainer = styled.div`\n color: ${getThemeValue(THEME_NAME.ERROR)};\n padding-top: 3px;\n font-size: 12px;\n line-height: 14px;\n margin-left: 3px;\n`;\n\nexport default function TextArea(props: TextAreaProps) {\n const [touched, setTouched] = useState(false);\n const [value, setValue] = useState(props.value || '');\n const errorId = useId();\n\n useEffect(() => {\n if (props.value !== undefined) {\n setValue(props.value);\n }\n }, [props.value]);\n\n const handleFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setTouched(true);\n if (props.onFocus) {\n props.onFocus(e);\n }\n };\n\n const onChangeHandler = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (props.onChange) {\n setValue(e.target.value);\n props.onChange(e);\n } else {\n setValue(e.target.value);\n }\n };\n\n return (\n <Label>\n <TextField\n {...props}\n value={value}\n onChange={onChangeHandler}\n onFocus={handleFocus}\n touched={touched}\n aria-invalid={!!props.errorText}\n aria-required={props.required}\n aria-describedby={props.errorText ? errorId : undefined}\n />\n <span>{props.label}</span>\n {props.errorText && <ErrorContainer id={errorId}>{props.errorText}</ErrorContainer>}\n </Label>\n );\n}\n\nTextArea.propTypes = {\n /** Label for the field */\n label: PropTypes.string,\n /** Error text to be shown below the field */\n errorText: PropTypes.string,\n};\n"]}
|