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.
Files changed (146) hide show
  1. package/dist/index.js +1622 -539
  2. package/dist/index.js.map +1 -1
  3. package/lib-esm/components/Accordion/AccordionStep.d.ts.map +1 -1
  4. package/lib-esm/components/Accordion/AccordionStep.js +27 -38
  5. package/lib-esm/components/Accordion/AccordionStep.js.map +1 -1
  6. package/lib-esm/components/Badge/Badge.js +7 -7
  7. package/lib-esm/components/Badge/Badge.js.map +1 -1
  8. package/lib-esm/components/Button/ActionButton.d.ts.map +1 -1
  9. package/lib-esm/components/Button/ActionButton.js +12 -11
  10. package/lib-esm/components/Button/ActionButton.js.map +1 -1
  11. package/lib-esm/components/Button/Button.d.ts +2 -2
  12. package/lib-esm/components/Button/Button.d.ts.map +1 -1
  13. package/lib-esm/components/Button/Button.js +19 -14
  14. package/lib-esm/components/Button/Button.js.map +1 -1
  15. package/lib-esm/components/Button/IconButton.d.ts.map +1 -1
  16. package/lib-esm/components/Button/IconButton.js +15 -14
  17. package/lib-esm/components/Button/IconButton.js.map +1 -1
  18. package/lib-esm/components/Button/LinkButton.d.ts.map +1 -1
  19. package/lib-esm/components/Button/LinkButton.js +7 -6
  20. package/lib-esm/components/Button/LinkButton.js.map +1 -1
  21. package/lib-esm/components/Button/RaisedButton.d.ts.map +1 -1
  22. package/lib-esm/components/Button/RaisedButton.js +15 -14
  23. package/lib-esm/components/Button/RaisedButton.js.map +1 -1
  24. package/lib-esm/components/Card/Card.d.ts.map +1 -1
  25. package/lib-esm/components/Card/Card.js +4 -4
  26. package/lib-esm/components/Card/Card.js.map +1 -1
  27. package/lib-esm/components/Chip/Chip.d.ts +5 -2
  28. package/lib-esm/components/Chip/Chip.d.ts.map +1 -1
  29. package/lib-esm/components/Chip/Chip.js +20 -14
  30. package/lib-esm/components/Chip/Chip.js.map +1 -1
  31. package/lib-esm/components/ChipInput/ChipInput.d.ts +9 -0
  32. package/lib-esm/components/ChipInput/ChipInput.d.ts.map +1 -1
  33. package/lib-esm/components/ChipInput/ChipInput.js +63 -24
  34. package/lib-esm/components/ChipInput/ChipInput.js.map +1 -1
  35. package/lib-esm/components/Dialog/AlertDialog.d.ts.map +1 -1
  36. package/lib-esm/components/Dialog/AlertDialog.js +4 -1
  37. package/lib-esm/components/Dialog/AlertDialog.js.map +1 -1
  38. package/lib-esm/components/Dialog/Dialog.d.ts +32 -2
  39. package/lib-esm/components/Dialog/Dialog.d.ts.map +1 -1
  40. package/lib-esm/components/Dialog/Dialog.js +84 -1
  41. package/lib-esm/components/Dialog/Dialog.js.map +1 -1
  42. package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts +24 -0
  43. package/lib-esm/components/DragAndDrop/DragAndDrop.d.ts.map +1 -1
  44. package/lib-esm/components/DragAndDrop/DragAndDrop.js +85 -3
  45. package/lib-esm/components/DragAndDrop/DragAndDrop.js.map +1 -1
  46. package/lib-esm/components/DragAndDrop/DragItem.d.ts +4 -0
  47. package/lib-esm/components/DragAndDrop/DragItem.d.ts.map +1 -1
  48. package/lib-esm/components/DragAndDrop/DragItem.js +92 -12
  49. package/lib-esm/components/DragAndDrop/DragItem.js.map +1 -1
  50. package/lib-esm/components/DragAndDrop/types.d.ts +19 -0
  51. package/lib-esm/components/DragAndDrop/types.d.ts.map +1 -1
  52. package/lib-esm/components/DragAndDrop/types.js.map +1 -1
  53. package/lib-esm/components/Drawer/Drawer.d.ts +76 -1
  54. package/lib-esm/components/Drawer/Drawer.d.ts.map +1 -1
  55. package/lib-esm/components/Drawer/Drawer.js +158 -24
  56. package/lib-esm/components/Drawer/Drawer.js.map +1 -1
  57. package/lib-esm/components/Groups/Group.d.ts.map +1 -1
  58. package/lib-esm/components/Groups/Group.js +10 -8
  59. package/lib-esm/components/Groups/Group.js.map +1 -1
  60. package/lib-esm/components/Groups/GroupLabel.d.ts.map +1 -1
  61. package/lib-esm/components/Groups/GroupLabel.js +3 -3
  62. package/lib-esm/components/Groups/GroupLabel.js.map +1 -1
  63. package/lib-esm/components/Input/Checkbox.d.ts.map +1 -1
  64. package/lib-esm/components/Input/Checkbox.js +63 -58
  65. package/lib-esm/components/Input/Checkbox.js.map +1 -1
  66. package/lib-esm/components/Input/Dropdown.d.ts +8 -0
  67. package/lib-esm/components/Input/Dropdown.d.ts.map +1 -1
  68. package/lib-esm/components/Input/Dropdown.js +54 -31
  69. package/lib-esm/components/Input/Dropdown.js.map +1 -1
  70. package/lib-esm/components/Input/Input.d.ts.map +1 -1
  71. package/lib-esm/components/Input/Input.js +27 -22
  72. package/lib-esm/components/Input/Input.js.map +1 -1
  73. package/lib-esm/components/Input/Radio.d.ts.map +1 -1
  74. package/lib-esm/components/Input/Radio.js +58 -42
  75. package/lib-esm/components/Input/Radio.js.map +1 -1
  76. package/lib-esm/components/Input/RadioButton.d.ts.map +1 -1
  77. package/lib-esm/components/Input/RadioButton.js +12 -12
  78. package/lib-esm/components/Input/RadioButton.js.map +1 -1
  79. package/lib-esm/components/Input/Select.d.ts.map +1 -1
  80. package/lib-esm/components/Input/Select.js +27 -22
  81. package/lib-esm/components/Input/Select.js.map +1 -1
  82. package/lib-esm/components/Input/TextArea.d.ts.map +1 -1
  83. package/lib-esm/components/Input/TextArea.js +27 -22
  84. package/lib-esm/components/Input/TextArea.js.map +1 -1
  85. package/lib-esm/components/Input/Toggle.d.ts.map +1 -1
  86. package/lib-esm/components/Input/Toggle.js +17 -14
  87. package/lib-esm/components/Input/Toggle.js.map +1 -1
  88. package/lib-esm/components/Menu/Menu.d.ts +13 -1
  89. package/lib-esm/components/Menu/Menu.d.ts.map +1 -1
  90. package/lib-esm/components/Menu/Menu.js +98 -3
  91. package/lib-esm/components/Menu/Menu.js.map +1 -1
  92. package/lib-esm/components/Menu/MenuItem.d.ts +6 -3
  93. package/lib-esm/components/Menu/MenuItem.d.ts.map +1 -1
  94. package/lib-esm/components/Menu/MenuItem.js +10 -10
  95. package/lib-esm/components/Menu/MenuItem.js.map +1 -1
  96. package/lib-esm/components/Modal/Modal.d.ts +70 -1
  97. package/lib-esm/components/Modal/Modal.d.ts.map +1 -1
  98. package/lib-esm/components/Modal/Modal.js +145 -11
  99. package/lib-esm/components/Modal/Modal.js.map +1 -1
  100. package/lib-esm/components/Notification/Notification.d.ts +11 -7
  101. package/lib-esm/components/Notification/Notification.d.ts.map +1 -1
  102. package/lib-esm/components/Notification/Notification.js +54 -25
  103. package/lib-esm/components/Notification/Notification.js.map +1 -1
  104. package/lib-esm/components/Notification/NotificationManager.d.ts +11 -1
  105. package/lib-esm/components/Notification/NotificationManager.d.ts.map +1 -1
  106. package/lib-esm/components/Notification/NotificationManager.js +43 -8
  107. package/lib-esm/components/Notification/NotificationManager.js.map +1 -1
  108. package/lib-esm/components/Notification/style.d.ts +4 -0
  109. package/lib-esm/components/Notification/style.d.ts.map +1 -1
  110. package/lib-esm/components/Notification/style.js +30 -15
  111. package/lib-esm/components/Notification/style.js.map +1 -1
  112. package/lib-esm/components/Notification/types.d.ts +2 -0
  113. package/lib-esm/components/Notification/types.d.ts.map +1 -1
  114. package/lib-esm/components/Notification/types.js.map +1 -1
  115. package/lib-esm/components/Popover/Popover.d.ts.map +1 -1
  116. package/lib-esm/components/Popover/Popover.js +17 -2
  117. package/lib-esm/components/Popover/Popover.js.map +1 -1
  118. package/lib-esm/components/Spinner/Spinner.d.ts +3 -0
  119. package/lib-esm/components/Spinner/Spinner.d.ts.map +1 -1
  120. package/lib-esm/components/Spinner/Spinner.js +19 -4
  121. package/lib-esm/components/Spinner/Spinner.js.map +1 -1
  122. package/lib-esm/components/Stepper/Stepper.d.ts.map +1 -1
  123. package/lib-esm/components/Stepper/Stepper.js +29 -10
  124. package/lib-esm/components/Stepper/Stepper.js.map +1 -1
  125. package/lib-esm/components/Tabs/Tabs.d.ts.map +1 -1
  126. package/lib-esm/components/Tabs/Tabs.js +45 -12
  127. package/lib-esm/components/Tabs/Tabs.js.map +1 -1
  128. package/lib-esm/components/Toast/Toast.d.ts +25 -4
  129. package/lib-esm/components/Toast/Toast.d.ts.map +1 -1
  130. package/lib-esm/components/Toast/Toast.js +114 -18
  131. package/lib-esm/components/Toast/Toast.js.map +1 -1
  132. package/lib-esm/components/Tooltip/Tooltip.d.ts.map +1 -1
  133. package/lib-esm/components/Tooltip/Tooltip.js +16 -5
  134. package/lib-esm/components/Tooltip/Tooltip.js.map +1 -1
  135. package/lib-esm/shared/LayerManager.d.ts.map +1 -1
  136. package/lib-esm/shared/LayerManager.js +63 -1
  137. package/lib-esm/shared/LayerManager.js.map +1 -1
  138. package/lib-esm/shared/constants.d.ts +58 -27
  139. package/lib-esm/shared/constants.d.ts.map +1 -1
  140. package/lib-esm/shared/constants.js +88 -25
  141. package/lib-esm/shared/constants.js.map +1 -1
  142. package/lib-esm/shared/styles.d.ts +1 -1
  143. package/lib-esm/shared/styles.d.ts.map +1 -1
  144. package/lib-esm/shared/styles.js +5 -3
  145. package/lib-esm/shared/styles.js.map +1 -1
  146. 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 constants from '../../shared/constants';
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 Input = styled.input `
11
- appearance: none;
12
- margin: 0;
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
- &::before {
15
- content: ' ';
16
- width: 16px;
17
- height: 16px;
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
- display: block;
22
- transition: background-color 0.3s ease;
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::before {
27
- border: 1px solid var(--primary, ${constants.PRIMARY});
28
- background-color: var(--primary, ${constants.PRIMARY});
29
- box-shadow: inset 0 0 0 3px var(--background, ${constants.BACKGROUND});
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::before {
34
- border: 1px solid var(--primary, ${constants.PRIMARY});
35
- box-shadow: 0 0 0 3px var(--primary, ${constants.PRIMARY_LIGHT});
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::before {
40
- border: 1px solid var(--primary, ${constants.PRIMARY});
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::before {
49
- border: 1px solid var(--primary, ${constants.PRIMARY});
50
- cursor: pointer;
65
+ &:enabled:hover + ${StyledRadio} {
66
+ border-color: ${getThemeValue(THEME_NAME.PRIMARY)};
51
67
  }
52
68
 
53
- &:enabled:hover + span {
54
- color: var(--primary, ${constants.PRIMARY});
55
- cursor: pointer;
69
+ &:enabled:hover ~ span {
70
+ color: ${getThemeValue(THEME_NAME.PRIMARY)};
56
71
  }
57
72
 
58
73
  /* disabled */
59
- &:disabled::before {
60
- border: 1px solid var(--disabled-border, ${constants.DISABLED_BORDER});
61
- background-color: var(--light-grey, ${constants.LIGHT_GREY});
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::before {
65
- border: 1px solid var(--disabled-border, ${constants.DISABLED_BORDER});
66
- background-color: var(--disabled-border, ${constants.DISABLED_BORDER});
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 + span {
71
- color: var(--disabled-border, ${constants.DISABLED_BORDER});
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(Input, Object.assign({}, props, { type: "radio" })), _jsx("span", { children: props.label })] }));
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,SAAS,MAAM,wBAAwB,CAAC;AAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;CAIzB,CAAC;AAEF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;;;;gDASsB,SAAS,CAAC,YAAY;;;;;;;;2CAQ3B,SAAS,CAAC,OAAO;2CACjB,SAAS,CAAC,OAAO;wDACJ,SAAS,CAAC,UAAU;;;;;2CAKjC,SAAS,CAAC,OAAO;+CACb,SAAS,CAAC,aAAa;;;;;2CAK3B,SAAS,CAAC,OAAO;;uCAErB,SAAS,CAAC,aAAa;gDACd,SAAS,CAAC,UAAU;;;;;;2CAMzB,SAAS,CAAC,OAAO;;;;;gCAK5B,SAAS,CAAC,OAAO;;;;;;mDAME,SAAS,CAAC,eAAe;8CAC9B,SAAS,CAAC,UAAU;;;;mDAIf,SAAS,CAAC,eAAe;mDACzB,SAAS,CAAC,eAAe;wDACpB,SAAS,CAAC,UAAU;;;;wCAIpC,SAAS,CAAC,eAAe;;CAEhE,CAAC;AAEF,SAAS,KAAK,CACV,KAA+F;IAE/F,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,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 constants from '../../shared/constants';\n\nconst Label = styled.label`\n display: inline-flex;\n align-items: center;\n margin: 5px 0;\n`;\n\nconst Input = styled.input`\n appearance: none;\n margin: 0;\n\n &::before {\n content: ' ';\n width: 16px;\n height: 16px;\n margin: 0 5px;\n border: 1px solid var(--border-color, ${constants.BORDER_COLOR});\n border-radius: 50%;\n display: block;\n transition: background-color 0.3s ease;\n }\n\n /* checked */\n &:checked::before {\n border: 1px solid var(--primary, ${constants.PRIMARY});\n background-color: var(--primary, ${constants.PRIMARY});\n box-shadow: inset 0 0 0 3px var(--background, ${constants.BACKGROUND});\n }\n\n /* focus */\n &:enabled:focus::before {\n border: 1px solid var(--primary, ${constants.PRIMARY});\n box-shadow: 0 0 0 3px var(--primary, ${constants.PRIMARY_LIGHT});\n cursor: pointer;\n }\n\n &:enabled:checked:focus::before {\n border: 1px solid var(--primary, ${constants.PRIMARY});\n box-shadow:\n 0 0 0 3px var(--primary, ${constants.PRIMARY_LIGHT}),\n inset 0 0 0 3px var(--background, ${constants.BACKGROUND});\n cursor: pointer;\n }\n\n /* hover */\n &:enabled:hover::before {\n border: 1px solid var(--primary, ${constants.PRIMARY});\n cursor: pointer;\n }\n\n &:enabled:hover + span {\n color: var(--primary, ${constants.PRIMARY});\n cursor: pointer;\n }\n\n /* disabled */\n &:disabled::before {\n border: 1px solid var(--disabled-border, ${constants.DISABLED_BORDER});\n background-color: var(--light-grey, ${constants.LIGHT_GREY});\n }\n\n &:disabled:checked::before {\n border: 1px solid var(--disabled-border, ${constants.DISABLED_BORDER});\n background-color: var(--disabled-border, ${constants.DISABLED_BORDER});\n box-shadow: inset 0 0 0 3px var(--background, ${constants.BACKGROUND});\n }\n\n &:disabled + span {\n color: var(--disabled-border, ${constants.DISABLED_BORDER});\n }\n`;\n\nfunction Radio(\n props: PropTypes.InferProps<React.AllHTMLAttributes<HTMLInputElement> & typeof Radio.propTypes>,\n) {\n return (\n <Label>\n <Input {...props} type=\"radio\" />\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
+ {"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;;SA7Bf,MAAO,WAAW;qFA0CzB,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
+ {"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 constants from '../../shared/constants';
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: var(--primary, ${constants.PRIMARY});
11
+ color: ${getThemeValue(THEME_NAME.PRIMARY)};
12
12
  padding: 6px 12px;
13
13
  border: none;
14
- border: 1px solid var(--primary, ${constants.PRIMARY});
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 var(--primary, ${constants.PRIMARY_LIGHT});
21
+ box-shadow: 0 0 0 4px ${getThemeValue(THEME_NAME.PRIMARY_LIGHT)};
22
22
  }
23
23
 
24
24
  &:enabled:hover + span {
25
- background-color: var(--primary, ${constants.PRIMARY_LIGHT});
26
- color: #fff;
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: var(--primary, ${constants.PRIMARY});
31
- color: #fff;
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: var(--border-light-color, ${constants.BORDER_LIGHT_COLOR});
36
- color: var(--disabled-border, ${constants.DISABLED_BORDER});
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: var(--disabled-border, ${constants.DISABLED_BORDER});
41
- color: #fff;
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,SAAS,MAAM,wBAAwB,CAAC;AAE/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;gCAMM,SAAS,CAAC,OAAO;;;2CAGN,SAAS,CAAC,OAAO;;;;;;;+CAOb,SAAS,CAAC,aAAa;;;;2CAI3B,SAAS,CAAC,aAAa;;;;;2CAKvB,SAAS,CAAC,OAAO;;;;;sDAKN,SAAS,CAAC,kBAAkB;wCAC1C,SAAS,CAAC,eAAe;;;;mDAId,SAAS,CAAC,eAAe;;;CAG3E,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 constants from '../../shared/constants';\n\nconst Input = styled.input`\n appearance: none;\n margin: 0;\n width: 0;\n\n & + span {\n color: var(--primary, ${constants.PRIMARY});\n padding: 6px 12px;\n border: none;\n border: 1px solid var(--primary, ${constants.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 var(--primary, ${constants.PRIMARY_LIGHT});\n }\n\n &:enabled:hover + span {\n background-color: var(--primary, ${constants.PRIMARY_LIGHT});\n color: #fff;\n }\n\n &:enabled:checked + span {\n background-color: var(--primary, ${constants.PRIMARY});\n color: #fff;\n }\n\n &:disabled + span {\n background-color: var(--border-light-color, ${constants.BORDER_LIGHT_COLOR});\n color: var(--disabled-border, ${constants.DISABLED_BORDER});\n }\n\n &:disabled:checked + span {\n background-color: var(--disabled-border, ${constants.DISABLED_BORDER});\n color: #fff;\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
+ {"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,KAAmB,MAAM,OAAO,CAAC;AACxC,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;AA2ID,iBAAwB,MAAM,CAAC,KAAK,EAAE,WAAW,oDAwChD;kBAxCuB,MAAM;;QA2C1B,0BAA0B;;QAE1B,6CAA6C;;;;eA7CzB,MAAM"}
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 constants from '../../shared/constants';
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 var(--border-color, ${constants.BORDER_COLOR});
27
+ border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};
29
28
  display: inline-block;
30
- background-color: var(--background, ${constants.BACKGROUND});
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: var(--primary, ${constants.PRIMARY});
38
- box-shadow: 0 0 0 4px var(--primary, ${constants.PRIMARY_LIGHT});
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: var(--primary, ${constants.PRIMARY});
42
+ color: ${getThemeValue(THEME_NAME.PRIMARY)};
44
43
  }
45
44
 
46
45
  /** Disabled */
47
46
  &:disabled {
48
- border-color: var(--disabled-border, ${constants.DISABLED_BORDER});
49
- background-color: var(--disabled-background, ${constants.DISABLED_BACKGROUND});
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: var(--disabled, ${constants.DISABLED});
52
+ color: ${getThemeValue(THEME_NAME.DISABLED)};
54
53
  }
55
54
 
56
55
  /** Invalid */
57
56
  &:focus:invalid {
58
- border-color: var(--error, ${constants.ERROR});
59
- box-shadow: 0 0 0 4px var(--error-light, ${constants.ERROR_LIGHT});
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: var(--error, ${constants.ERROR});
64
+ border-color: ${getThemeValue(THEME_NAME.ERROR)};
66
65
  }
67
66
 
68
67
  &:invalid ~ span {
69
- color: var(--error, ${constants.ERROR});
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: var(--error, ${constants.ERROR});
76
+ border-color: ${getThemeValue(THEME_NAME.ERROR)};
78
77
 
79
78
  & ~ span {
80
- color: var(--error, ${constants.ERROR});
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: var(--error, ${constants.ERROR});
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: var(--background, ${constants.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: var(--background, ${constants.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: var(--error, ${constants.ERROR});
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":"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","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport ExpandMore from '../../icons/ExpandMore';\nimport constants 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 flex: 1;\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 var(--border-color, ${constants.BORDER_COLOR});\n display: inline-block;\n background-color: var(--background, ${constants.BACKGROUND});\n pointer-events: auto;\n appearance: none;\n\n /** Focused */\n &:focus,\n &:active {\n border-color: var(--primary, ${constants.PRIMARY});\n box-shadow: 0 0 0 4px var(--primary, ${constants.PRIMARY_LIGHT});\n }\n\n &:focus ~ span,\n &:active ~ span {\n color: var(--primary, ${constants.PRIMARY});\n }\n\n /** Disabled */\n &:disabled {\n border-color: var(--disabled-border, ${constants.DISABLED_BORDER});\n background-color: var(--disabled-background, ${constants.DISABLED_BACKGROUND});\n }\n\n &:disabled ~ span {\n color: var(--disabled, ${constants.DISABLED});\n }\n\n /** Invalid */\n &:focus:invalid {\n border-color: var(--error, ${constants.ERROR});\n box-shadow: 0 0 0 4px var(--error-light, ${constants.ERROR_LIGHT});\n }\n\n ${(props) =>\n props.touched\n ? `\n &:invalid {\n border-color: var(--error, ${constants.ERROR});\n }\n\n &:invalid ~ span {\n color: var(--error, ${constants.ERROR});\n }\n `\n : ''}\n\n /** Error */\n ${(props) =>\n props.errorText\n ? `\n border-color: var(--error, ${constants.ERROR});\n\n & ~ span {\n color: var(--error, ${constants.ERROR});\n }\n `\n : ''}\n\n /** Required */\n &:required + span:after {\n content: '*';\n margin-left: 2px;\n color: var(--error, ${constants.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: var(--background, ${constants.BACKGROUND});\n font-size: 12px;\n line-height: 14px;\n }\n `\n : ''}\n\n &:focus + span, &:placeholder-shown + span {\n top: -8px;\n background: var(--background, ${constants.BACKGROUND});\n font-size: 12px;\n line-height: 14px;\n }\n`;\n\nconst ErrorContainer = styled.div`\n color: var(--error, ${constants.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\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 >\n <option />\n {props.children}\n </SelectField>\n <span>{props.label}</span>\n <ArrowContainer>\n <ExpandMore />\n </ArrowContainer>\n {props.errorText && <ErrorContainer>{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
+ {"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,KAAmB,MAAM,OAAO,CAAC;AACxC,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;AA4HD,iBAAwB,QAAQ,CAAC,KAAK,EAAE,aAAa,oDAiCpD;kBAjCuB,QAAQ;;QAoC5B,0BAA0B;;QAE1B,6CAA6C;;;;eAtCzB,QAAQ"}
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 constants from '../../shared/constants';
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 var(--border-color, ${constants.BORDER_COLOR});
19
+ border: 1px solid ${getThemeValue(THEME_NAME.BORDER_COLOR)};
21
20
  display: inline-block;
22
- background-color: var(--background, ${constants.BACKGROUND});
21
+ background-color: ${getThemeValue(THEME_NAME.BACKGROUND)};
23
22
 
24
23
  /** Focused */
25
24
  &:focus,
26
25
  &:active {
27
- border-color: var(--primary, ${constants.PRIMARY});
28
- box-shadow: 0 0 0 4px var(--primary, ${constants.PRIMARY_LIGHT});
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: var(--primary, ${constants.PRIMARY});
32
+ color: ${getThemeValue(THEME_NAME.PRIMARY)};
34
33
  }
35
34
 
36
35
  /** Disabled */
37
36
  &:disabled {
38
- border-color: var(--disabled-border, ${constants.DISABLED_BORDER});
39
- background-color: var(--disabled-background, ${constants.DISABLED_BACKGROUND});
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: var(--disabled, ${constants.DISABLED});
42
+ color: ${getThemeValue(THEME_NAME.DISABLED)};
44
43
  }
45
44
 
46
45
  /** Invalid */
47
46
  &:focus:invalid {
48
- border-color: var(--error, ${constants.ERROR});
49
- box-shadow: 0 0 0 4px var(--error-light, ${constants.ERROR_LIGHT});
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: var(--error, ${constants.ERROR});
54
+ border-color: ${getThemeValue(THEME_NAME.ERROR)};
56
55
  }
57
56
 
58
57
  &:invalid + span {
59
- color: var(--error, ${constants.ERROR});
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: var(--error, ${constants.ERROR});
66
+ border-color: ${getThemeValue(THEME_NAME.ERROR)};
68
67
 
69
68
  & + span {
70
- color: var(--error, ${constants.ERROR});
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: var(--error, ${constants.ERROR});
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: var(--background, ${constants.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: var(--background, ${constants.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: var(--error, ${constants.ERROR});
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;AACxC,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,MAAM,MAAM,iBAAiB,CAAC;AACrC,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAa/C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;;;;;;CAMzB,CAAC;AAEF,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAuB;;;;;;;4CAOZ,SAAS,CAAC,YAAY;;0CAExB,SAAS,CAAC,UAAU;;;;;uCAKvB,SAAS,CAAC,OAAO;+CACT,SAAS,CAAC,aAAa;;;;;gCAKtC,SAAS,CAAC,OAAO;;;;;+CAKF,SAAS,CAAC,eAAe;uDACjB,SAAS,CAAC,mBAAmB;;;;iCAInD,SAAS,CAAC,QAAQ;;;;;qCAKd,SAAS,CAAC,KAAK;mDACD,SAAS,CAAC,WAAW;;;MAGlE,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,OAAO;IACT,CAAC,CAAC;;qCAEuB,SAAS,CAAC,KAAK;;;;8BAItB,SAAS,CAAC,KAAK;;KAExC;IACO,CAAC,CAAC,EAAE;;;MAGV,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,SAAS;IACX,CAAC,CAAC;iCACmB,SAAS,CAAC,KAAK;;;8BAGlB,SAAS,CAAC,KAAK;;KAExC;IACO,CAAC,CAAC,EAAE;;;;;;8BAMc,SAAS,CAAC,KAAK;;;;;;;;;;;;;;MAcvC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,KAAK,KAAK,EAAE;IACd,CAAC,CAAC;;;wCAG0B,SAAS,CAAC,UAAU;;;;KAIvD;IACO,CAAC,CAAC,EAAE;;;;wCAIwB,SAAS,CAAC,UAAU;;;;CAI3D,CAAC;AAEF,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;0BACP,SAAS,CAAC,KAAK;;;;;CAKxC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,CAAC,CAAwC,EAAE,EAAE;QAC7D,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,CAAyC,EAAE,EAAE;QAClE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACzB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACJ,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,MAAC,KAAK,eACF,KAAC,SAAS,oBACF,KAAK,IACT,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,IAClB,EACF,yBAAO,KAAK,CAAC,KAAK,GAAQ,EACzB,KAAK,CAAC,SAAS,IAAI,KAAC,cAAc,cAAE,KAAK,CAAC,SAAS,GAAkB,IAClE,CACX,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,SAAS,GAAG;IACjB,0BAA0B;IAC1B,KAAK,EAAE,SAAS,CAAC,MAAM;IACvB,6CAA6C;IAC7C,SAAS,EAAE,SAAS,CAAC,MAAM;CAC9B,CAAC","sourcesContent":["import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport constants 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 flex: 1;\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 var(--border-color, ${constants.BORDER_COLOR});\n display: inline-block;\n background-color: var(--background, ${constants.BACKGROUND});\n\n /** Focused */\n &:focus,\n &:active {\n border-color: var(--primary, ${constants.PRIMARY});\n box-shadow: 0 0 0 4px var(--primary, ${constants.PRIMARY_LIGHT});\n }\n\n &:focus + span,\n &:active + span {\n color: var(--primary, ${constants.PRIMARY});\n }\n\n /** Disabled */\n &:disabled {\n border-color: var(--disabled-border, ${constants.DISABLED_BORDER});\n background-color: var(--disabled-background, ${constants.DISABLED_BACKGROUND});\n }\n\n &:disabled + span {\n color: var(--disabled, ${constants.DISABLED});\n }\n\n /** Invalid */\n &:focus:invalid {\n border-color: var(--error, ${constants.ERROR});\n box-shadow: 0 0 0 4px var(--error-light, ${constants.ERROR_LIGHT});\n }\n\n ${(props) =>\n props.touched\n ? `\n &:invalid {\n border-color: var(--error, ${constants.ERROR});\n }\n\n &:invalid + span {\n color: var(--error, ${constants.ERROR});\n }\n `\n : ''}\n\n /** Error */\n ${(props) =>\n props.errorText\n ? `\n border-color: var(--error, ${constants.ERROR});\n\n & + span {\n color: var(--error, ${constants.ERROR});\n }\n `\n : ''}\n\n /** Required */\n &:required + span:after {\n content: '*';\n margin-left: 2px;\n color: var(--error, ${constants.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: var(--background, ${constants.BACKGROUND});\n font-size: 12px;\n line-height: 14px;\n }\n `\n : ''}\n\n &:focus + span, &:placeholder-shown + span {\n top: -8px;\n background: var(--background, ${constants.BACKGROUND});\n font-size: 12px;\n line-height: 14px;\n }\n`;\n\nconst ErrorContainer = styled.div`\n color: var(--error, ${constants.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\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 />\n <span>{props.label}</span>\n {props.errorText && <ErrorContainer>{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"]}
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"]}