intelicoreact 0.0.2 → 0.0.6

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 (208) hide show
  1. package/.eslintignore +10 -0
  2. package/.eslintrc.json +93 -0
  3. package/dist/Atomic/FormElements/Calendar/Calendar.js +145 -0
  4. package/dist/Atomic/FormElements/Calendar/Calendar.scss +543 -0
  5. package/dist/Atomic/FormElements/Calendar/Calendar.stories.js +33 -0
  6. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +3 -5
  7. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +2 -5
  8. package/dist/Atomic/FormElements/DateTime/DateTime.stories.js +1 -3
  9. package/dist/Atomic/FormElements/DoubleString/DoubleString.stories.js +0 -2
  10. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +19 -19
  11. package/dist/Atomic/FormElements/Dropdown/Dropdown.scss +8 -3
  12. package/dist/Atomic/FormElements/Dropdown/Dropdown.stories.js +20 -7
  13. package/dist/Atomic/FormElements/Header/Header.js +9 -11
  14. package/dist/Atomic/FormElements/Header/Header.scss +16 -5
  15. package/dist/Atomic/FormElements/Header/Header.stories.js +0 -2
  16. package/dist/Atomic/FormElements/Input/Input.js +94 -102
  17. package/dist/Atomic/FormElements/Input/Input.scss +26 -19
  18. package/dist/Atomic/FormElements/Input/Input.stories.js +42 -27
  19. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +89 -0
  20. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +46 -0
  21. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +238 -0
  22. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +468 -0
  23. package/dist/Atomic/FormElements/InputDateRange/components/InputDateRange.js +248 -0
  24. package/dist/Atomic/FormElements/InputDateRange/components/InputDateRange.scss +598 -0
  25. package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +147 -0
  26. package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +38 -0
  27. package/dist/Atomic/FormElements/InputDateRange/index.js +248 -0
  28. package/dist/Atomic/FormElements/InputsRow/InputsRow.js +30 -7
  29. package/dist/Atomic/FormElements/InputsRow/InputsRow.scss +1 -3
  30. package/dist/Atomic/FormElements/InputsRow/InputsRow.stories.js +0 -2
  31. package/dist/Atomic/FormElements/Label/Label.js +5 -14
  32. package/dist/Atomic/FormElements/Label/Label.scss +3 -3
  33. package/dist/Atomic/FormElements/Label/Label.stories.js +5 -6
  34. package/dist/Atomic/FormElements/Modal/Modal.js +5 -7
  35. package/dist/Atomic/FormElements/Modal/Modal.scss +61 -7
  36. package/dist/Atomic/FormElements/Modal/Modal.stories.js +64 -18
  37. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +3 -5
  38. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.scss +1 -3
  39. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.stories.js +0 -2
  40. package/dist/Atomic/FormElements/NavLine/NavLine.js +2 -2
  41. package/dist/Atomic/FormElements/NavLine/NavLine.scss +4 -6
  42. package/dist/Atomic/FormElements/NavLine/NavLine.stories.js +21 -13
  43. package/dist/Atomic/FormElements/RadioInput/RadioInput.scss +1 -1
  44. package/dist/Atomic/FormElements/RadioInput/RadioInput.stories.js +0 -2
  45. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +162 -0
  46. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.scss +101 -0
  47. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.stories.js +81 -0
  48. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +0 -2
  49. package/dist/Atomic/FormElements/Switcher/Switcher.js +1 -1
  50. package/dist/Atomic/FormElements/Switcher/Switcher.scss +1 -1
  51. package/dist/Atomic/FormElements/Switcher/Switcher.stories.js +0 -2
  52. package/dist/Atomic/FormElements/Table/Partials/TdCell.js +1 -1
  53. package/dist/Atomic/FormElements/Table/Partials/TdHeader.js +2 -2
  54. package/dist/Atomic/FormElements/Table/TdTypes/TdActions.js +5 -5
  55. package/dist/Atomic/FormElements/Table/TdTypes/TdPriority.js +3 -3
  56. package/dist/Atomic/FormElements/Table/TdTypes/TdTypes.scss +4 -6
  57. package/dist/Atomic/FormElements/Table/TdTypes/TdWeight.js +2 -2
  58. package/dist/Atomic/FormElements/Tag/Tag.js +2 -2
  59. package/dist/Atomic/FormElements/Tag/Tag.scss +1 -1
  60. package/dist/Atomic/FormElements/Tag/Tag.stories.js +0 -2
  61. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +3 -3
  62. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.scss +1 -1
  63. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +0 -2
  64. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.scss +1 -1
  65. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +0 -2
  66. package/dist/Atomic/FormElements/Textarea/Textarea.scss +1 -1
  67. package/dist/Atomic/FormElements/Textarea/Textarea.stories.js +0 -2
  68. package/dist/Atomic/FormElements/TimeRange/TimeRange.js +1 -1
  69. package/dist/Atomic/FormElements/TimeRange/TimeRange.stories.js +0 -2
  70. package/dist/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.js +5 -5
  71. package/dist/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.scss +2 -2
  72. package/dist/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.stories.js +11 -11
  73. package/dist/Atomic/UI/Accordion/Accordion.js +2 -2
  74. package/dist/Atomic/UI/Accordion/Accordion.stories.js +4 -4
  75. package/dist/Atomic/UI/Accordion/AccordionItem.js +3 -3
  76. package/dist/Atomic/UI/AdvancedTag/AdvTag.js +3 -3
  77. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +4 -3
  78. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.scss +3 -5
  79. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.stories.js +1 -3
  80. package/dist/Atomic/UI/Alert/Alert.js +7 -4
  81. package/dist/Atomic/UI/Alert/Alert.scss +7 -0
  82. package/dist/Atomic/UI/Alert/Alert.stories.js +1 -3
  83. package/dist/Atomic/UI/Arrow/Arrow.js +80 -0
  84. package/dist/Atomic/UI/Arrow/Arrow.scss +22 -0
  85. package/dist/Atomic/UI/Arrow/Arrow.stories.js +46 -0
  86. package/dist/Atomic/UI/Button/Button.js +10 -19
  87. package/dist/Atomic/UI/Button/Button.scss +69 -41
  88. package/dist/Atomic/UI/Button/Button.stories.js +9 -25
  89. package/dist/Atomic/UI/Calendar/Calendar.js +145 -0
  90. package/dist/Atomic/UI/Calendar/Calendar.scss +544 -0
  91. package/dist/Atomic/UI/Calendar/Calendar.stories.js +37 -0
  92. package/dist/Atomic/UI/Header/partials/default_ava.png +0 -0
  93. package/dist/Atomic/{FormElements → UI}/Hint/Hint.js +8 -13
  94. package/{src/Atomic/FormElements → dist/Atomic/UI}/Hint/Hint.scss +8 -12
  95. package/dist/Atomic/{FormElements → UI}/Hint/Hint.stories.js +3 -4
  96. package/dist/Atomic/UI/Price/Price.js +33 -0
  97. package/dist/Atomic/UI/Price/Price.stories.js +42 -0
  98. package/dist/Atomic/{FormElements → UI}/Status/Status.js +4 -6
  99. package/dist/Atomic/{FormElements → UI}/Status/Status.scss +0 -0
  100. package/dist/Atomic/{FormElements → UI}/Status/Status.stories.js +4 -3
  101. package/dist/Functions/useClickOutside.js +25 -0
  102. package/dist/Functions/utils.js +10 -2
  103. package/dist/Molecular/FormElements/FormElement.js +40 -0
  104. package/dist/Molecular/FormElements/FormElement.scss +8 -0
  105. package/dist/Molecular/FormElements/FormElement.stories.js +73 -0
  106. package/dist/scss/main.scss +2 -2
  107. package/package.json +10 -6
  108. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +3 -5
  109. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +3 -5
  110. package/src/Atomic/FormElements/DateTime/DateTime.stories.js +1 -3
  111. package/src/Atomic/FormElements/DoubleString/DoubleString.stories.js +0 -2
  112. package/src/Atomic/FormElements/Dropdown/Dropdown.js +12 -8
  113. package/src/Atomic/FormElements/Dropdown/Dropdown.scss +8 -3
  114. package/src/Atomic/FormElements/Dropdown/Dropdown.stories.js +15 -7
  115. package/src/Atomic/FormElements/Header/Header.js +9 -10
  116. package/src/Atomic/FormElements/Header/Header.scss +16 -5
  117. package/src/Atomic/FormElements/Header/Header.stories.js +0 -2
  118. package/src/Atomic/FormElements/Input/Input.js +79 -73
  119. package/src/Atomic/FormElements/Input/Input.scss +26 -19
  120. package/src/Atomic/FormElements/Input/Input.stories.js +28 -29
  121. package/src/Atomic/FormElements/InputCalendar/InputCalendar.js +43 -0
  122. package/src/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +27 -0
  123. package/src/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +142 -0
  124. package/src/Atomic/FormElements/InputDateRange/components/Datepicker.js +394 -0
  125. package/src/Atomic/FormElements/InputDateRange/components/InputDateRange.js +230 -0
  126. package/src/Atomic/FormElements/InputDateRange/components/InputDateRange.scss +598 -0
  127. package/src/Atomic/FormElements/InputDateRange/components/OpenedPart.js +109 -0
  128. package/src/Atomic/FormElements/InputDateRange/components/SelectItem.js +22 -0
  129. package/src/Atomic/FormElements/InputDateRange/index.js +157 -0
  130. package/src/Atomic/FormElements/InputsRow/InputsRow.js +28 -5
  131. package/src/Atomic/FormElements/InputsRow/InputsRow.scss +1 -3
  132. package/src/Atomic/FormElements/InputsRow/InputsRow.stories.js +0 -2
  133. package/src/Atomic/FormElements/Label/Label.js +4 -9
  134. package/src/Atomic/FormElements/Label/Label.scss +3 -3
  135. package/src/Atomic/FormElements/Label/Label.stories.js +6 -6
  136. package/src/Atomic/FormElements/Modal/Modal.js +5 -8
  137. package/src/Atomic/FormElements/Modal/Modal.scss +61 -7
  138. package/src/Atomic/FormElements/Modal/Modal.stories.js +60 -15
  139. package/src/Atomic/FormElements/MultiSelect/MultiSelect.js +3 -5
  140. package/src/Atomic/FormElements/MultiSelect/MultiSelect.scss +1 -3
  141. package/src/Atomic/FormElements/MultiSelect/MultiSelect.stories.js +1 -2
  142. package/src/Atomic/FormElements/NavLine/NavLine.js +4 -4
  143. package/src/Atomic/FormElements/NavLine/NavLine.scss +4 -6
  144. package/src/Atomic/FormElements/NavLine/NavLine.stories.js +24 -14
  145. package/src/Atomic/FormElements/RadioInput/RadioInput.scss +1 -1
  146. package/src/Atomic/FormElements/RadioInput/RadioInput.stories.js +0 -2
  147. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.js +143 -0
  148. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.scss +101 -0
  149. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.stories.js +54 -0
  150. package/src/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +0 -1
  151. package/src/Atomic/FormElements/Switcher/Switcher.js +1 -1
  152. package/src/Atomic/FormElements/Switcher/Switcher.scss +1 -1
  153. package/src/Atomic/FormElements/Switcher/Switcher.stories.js +0 -2
  154. package/src/Atomic/FormElements/Table/Partials/TdCell.js +1 -1
  155. package/src/Atomic/FormElements/Table/Partials/TdHeader.js +1 -1
  156. package/src/Atomic/FormElements/Table/TdTypes/TdActions.js +5 -5
  157. package/src/Atomic/FormElements/Table/TdTypes/TdPriority.js +3 -3
  158. package/src/Atomic/FormElements/Table/TdTypes/TdTypes.scss +4 -6
  159. package/src/Atomic/FormElements/Table/TdTypes/TdWeight.js +2 -2
  160. package/src/Atomic/FormElements/Tag/Tag.js +2 -2
  161. package/src/Atomic/FormElements/Tag/Tag.scss +1 -1
  162. package/src/Atomic/FormElements/Tag/Tag.stories.js +0 -2
  163. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.js +3 -3
  164. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.scss +1 -1
  165. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +0 -2
  166. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.scss +1 -1
  167. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +0 -2
  168. package/src/Atomic/FormElements/Textarea/Textarea.scss +1 -1
  169. package/src/Atomic/FormElements/Textarea/Textarea.stories.js +0 -2
  170. package/src/Atomic/FormElements/TimeRange/TimeRange.js +1 -1
  171. package/src/Atomic/FormElements/TimeRange/TimeRange.stories.js +0 -2
  172. package/src/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.js +5 -5
  173. package/src/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.scss +2 -2
  174. package/src/Atomic/{FormElements/MainMenu → MainMenu}/MainMenu.stories.js +11 -11
  175. package/src/Atomic/UI/Accordion/Accordion.js +2 -2
  176. package/src/Atomic/UI/Accordion/Accordion.stories.js +4 -4
  177. package/src/Atomic/UI/Accordion/AccordionItem.js +3 -3
  178. package/src/Atomic/UI/AdvancedTag/AdvTag.js +3 -3
  179. package/src/Atomic/UI/AdvancedTag/AdvancedTags.js +3 -3
  180. package/src/Atomic/UI/AdvancedTag/AdvancedTags.scss +3 -5
  181. package/src/Atomic/UI/AdvancedTag/AdvancedTags.stories.js +1 -3
  182. package/src/Atomic/UI/Alert/Alert.js +9 -6
  183. package/src/Atomic/UI/Alert/Alert.scss +7 -0
  184. package/src/Atomic/UI/Alert/Alert.stories.js +1 -3
  185. package/src/Atomic/UI/Arrow/Arrow.js +41 -0
  186. package/src/Atomic/UI/Arrow/Arrow.scss +22 -0
  187. package/src/Atomic/UI/Arrow/Arrow.stories.js +32 -0
  188. package/src/Atomic/UI/Button/Button.js +6 -10
  189. package/src/Atomic/UI/Button/Button.scss +69 -41
  190. package/src/Atomic/UI/Button/Button.stories.js +9 -25
  191. package/src/Atomic/UI/Calendar/Calendar.js +109 -0
  192. package/src/Atomic/UI/Calendar/Calendar.scss +544 -0
  193. package/src/Atomic/UI/Calendar/Calendar.stories.js +23 -0
  194. package/src/Atomic/UI/Header/partials/default_ava.png +0 -0
  195. package/src/Atomic/{FormElements → UI}/Hint/Hint.js +6 -9
  196. package/{dist/Atomic/FormElements → src/Atomic/UI}/Hint/Hint.scss +8 -12
  197. package/src/Atomic/{FormElements → UI}/Hint/Hint.stories.js +3 -3
  198. package/src/Atomic/UI/Price/Price.js +20 -0
  199. package/src/Atomic/UI/Price/Price.stories.js +30 -0
  200. package/src/Atomic/{FormElements → UI}/Status/Status.js +2 -4
  201. package/src/Atomic/{FormElements → UI}/Status/Status.scss +0 -0
  202. package/src/Atomic/{FormElements → UI}/Status/Status.stories.js +4 -3
  203. package/src/Functions/useClickOutside.js +15 -0
  204. package/src/Functions/utils.js +6 -0
  205. package/src/Molecular/FormElements/FormElement.js +18 -0
  206. package/src/Molecular/FormElements/FormElement.scss +8 -0
  207. package/src/Molecular/FormElements/FormElement.stories.js +59 -0
  208. package/src/scss/main.scss +2 -2
@@ -1,4 +1,4 @@
1
- @import "../../../../scss/vars";
1
+ @import "../../../scss/vars";
2
2
 
3
3
  .dropdown {
4
4
  display: inline-flex;
@@ -13,7 +13,6 @@
13
13
  border-radius: 3px;
14
14
  width: 100%;
15
15
  height: 28px;
16
- display: flex;
17
16
  align-items: center;
18
17
  cursor: pointer;
19
18
  padding-left: 9px;
@@ -26,9 +25,12 @@
26
25
  position: relative;
27
26
  text-align: left;
28
27
 
29
- &_error {
28
+ &.error {
30
29
  border-color: $color--secondary;
31
30
  }
31
+ &.placeholder .text{
32
+ opacity: .7;
33
+ }
32
34
  }
33
35
 
34
36
  &__input {
@@ -71,6 +73,8 @@
71
73
  display: flex;
72
74
  align-items: center;
73
75
  //justify-content: center;
76
+ border: none;
77
+ background: transparent;
74
78
  padding: 0 20px 0 30px;
75
79
  position: relative;
76
80
  cursor: pointer;
@@ -101,6 +105,7 @@
101
105
  display: flex;
102
106
  align-items: center;
103
107
  width: 16px;
108
+ height: 16px;
104
109
  position: absolute;
105
110
  right: 4px;
106
111
  top: 50%;
@@ -1,16 +1,24 @@
1
1
  import React, { useState } from 'react';
2
2
  import Dropdown from './Dropdown';
3
3
 
4
- import '../../../../scss/main.scss';
5
-
6
4
  global.lng = 'en';
7
5
  export default {
8
6
  title: 'Dropdown',
9
- component: Dropdown
7
+ component: Dropdown,
8
+ argTypes: {
9
+ className: {
10
+ description: 'string'
11
+ },
12
+ value: { description: 'string - current option'},
13
+ isSearchable: {
14
+ description: 'boolean - enable search',
15
+ },
16
+ onChange: { description: 'callback return selected value'}
17
+ }
10
18
  };
11
19
 
12
20
  const Template = args => {
13
- const [value, setValue] = useState({});
21
+ const [value, setValue] = useState('');
14
22
  return (
15
23
  <div style={{ width: 200 }}>
16
24
  <Dropdown {...args} value={value} onChange={setValue} />
@@ -22,10 +30,9 @@ export const DropdownTemplate = Template.bind({});
22
30
 
23
31
  DropdownTemplate.args = {
24
32
  placeholder: 'Placeholder',
25
- label: '',
26
33
  isSearchable: true,
27
34
  options: [
28
- { label: 'Dropdown1', value: 'drop1' },
35
+ { label: 'Dropdown1', value: 'drop1', className: 'status status--approved' },
29
36
  { label: 'Dropdown2', value: 'drop2' },
30
37
  { label: 'Dropdown3', value: 'drop3', disabled: true },
31
38
  { label: 'Dropdown4', value: 'drop4' },
@@ -47,5 +54,6 @@ DropdownTemplate.args = {
47
54
  { label: 'Group 23', value: 'group23' }
48
55
  ]
49
56
  }
50
- ]
57
+ ],
58
+ error: ''
51
59
  };
@@ -1,11 +1,10 @@
1
1
  import React, { useRef, useState } from 'react';
2
- import { FiChevronRight, FiBell, FiPower } from 'react-icons/fi';
2
+ import { ChevronRight, Bell, Power } from 'react-feather';
3
3
  import { GoPrimitiveDot } from 'react-icons/go';
4
4
  import cn from 'classnames';
5
5
 
6
6
  import { logout, useOutsideToggle } from '../../../Functions/utils';
7
- import Hint from '../Hint/Hint';
8
- import defaultAva from '../../../../assets/images/default_ava.png';
7
+ import Hint from '../../UI/Hint/Hint';
9
8
 
10
9
  import './Header.scss';
11
10
 
@@ -30,19 +29,19 @@ const Header = ({ name = 'John', surname = 'Silver', status = 'admin', img = '',
30
29
  useOutsideToggle(userMenu, handle.closeMenu);
31
30
 
32
31
  return (
33
- <header className="header">
32
+ <header className={cn('header', className)}>
34
33
  <div className="df">
35
34
  <Hint side="bottom" hint={hintText} className="header__hint" label={hintLabel} iconOutline />
36
35
  </div>
37
36
 
38
- <div className="j6 user-menu rel">
37
+ <div className="j6 user-menu">
39
38
  <div onClick={() => {}} className="header--bell">
40
- <FiBell className="header--bell-icon" />
41
- <GoPrimitiveDot className="header--bell-notification-icon" />
39
+ <Bell className="header--bell-icon" />
40
+ <div className="header--bell-notification-icon" />
42
41
  </div>
43
42
 
44
43
  <div className="header--user-ava">
45
- <img src={img || defaultAva} alt="" />
44
+ <img src={img} alt="" />
46
45
  </div>
47
46
 
48
47
  <div className="dfc mr10">
@@ -52,11 +51,11 @@ const Header = ({ name = 'John', surname = 'Silver', status = 'admin', img = '',
52
51
  <span className="header--user-status">{status}</span>
53
52
  </div>
54
53
 
55
- <FiChevronRight onClick={handle.toggleMenu} className={cn('accordion--title-chevron', { 'accordion--title-chevron-open': isOpen })} />
54
+ <ChevronRight onClick={handle.toggleMenu} className={cn('accordion--title-chevron', { 'accordion--title-chevron-open': isOpen })} />
56
55
  {isOpen && (
57
56
  <div className="user-menu__dropdown" ref={userMenu}>
58
57
  <div className="user-menu__item" onClick={handle.logout}>
59
- <FiPower className="mr10" /> Logout
58
+ <Power className="mr10" /> Logout
60
59
  </div>
61
60
  </div>
62
61
  )}
@@ -1,5 +1,3 @@
1
- @import "../../../scss/anme/anme-vars";
2
-
3
1
  .header {
4
2
  display: flex;
5
3
  align-items: center;
@@ -43,12 +41,20 @@
43
41
  position: relative;
44
42
  margin-right: 22px;
45
43
  cursor: pointer;
44
+ width: 16px;
45
+ height: 16px;
46
+ max-width: 16px;
47
+ min-width: 16px;
46
48
 
47
49
  &-notification-icon {
50
+ content: "";
51
+ width: 7px;
52
+ height: 7px;
53
+ border-radius: 15px;
48
54
  position: absolute;
49
- color: #f06d8d;
50
- top: -8px;
51
- left: 10px;
55
+ top: -3px;
56
+ right: -6px;
57
+ background-color: #f06d8d;
52
58
  }
53
59
  }
54
60
 
@@ -76,7 +82,12 @@
76
82
  .user-menu__item {
77
83
  padding: 5px 15px;
78
84
  cursor: pointer;
85
+
79
86
  &:hover {
80
87
  background: #e2e5ec;
81
88
  }
82
89
  }
90
+
91
+ .user-menu {
92
+ position: relative;
93
+ }
@@ -1,8 +1,6 @@
1
1
  import React from 'react';
2
2
  import Header from './Header';
3
3
 
4
- import '../../../../scss/main.scss';
5
-
6
4
  global.lng = 'en';
7
5
 
8
6
  export default {
@@ -1,107 +1,113 @@
1
1
  import React, { useState, useEffect, useRef } from 'react';
2
2
  import cn from 'classnames';
3
- import { FiMinus, FiPlus } from 'react-icons/fi';
4
-
5
- import Label from '../Label/Label';
3
+ import { Minus, Plus } from 'react-feather';
4
+ import InputMask from 'react-input-mask';
6
5
 
7
6
  import './Input.scss';
8
7
 
9
- const RC = 'input-classic';
10
-
11
8
  const Input = ({
12
- error,
13
9
  onChange,
14
10
  disabled,
15
11
  withDelete,
16
12
  isNumeric,
17
- min,
13
+ numStep = 1,
14
+ min = 0,
18
15
  max,
19
- value = min,
16
+ value,
20
17
  placeholder,
21
- hint,
22
- label,
23
- hintSide,
24
18
  className,
25
- isLabelBold,
26
19
  type = 'text',
27
- onBlur = () => {},
20
+ onBlur,
21
+ onFocus,
22
+ onKeyUp,
23
+ mask,
24
+ error,
28
25
  icon,
29
- isRequired,
30
- ...props
26
+ symbolsLimit,
31
27
  }) => {
28
+ // STATES
32
29
  const [isFocused, setIsFocused] = useState(false);
33
- const [onInputHover, setOnInputHover] = useState(false);
34
30
  const [isEditing, setEditing] = useState(false);
35
31
  const inputRef = useRef(null);
36
-
37
- const changeHandler = inputValue => {
38
- if (isNumeric || (type === 'number' && inputValue !== '')) {
39
- const totalValue = Number(+inputValue);
40
- if (totalValue >= (min ?? -Infinity) && totalValue <= (max ?? Infinity)) onChange(totalValue);
41
- return;
42
- }
43
- onChange(inputValue);
44
- };
45
-
46
- const toggleEditing = () => {
47
- setEditing(!isEditing);
32
+ // HANDLES
33
+ const handle = {
34
+ change: e => {
35
+ let inputValue = e.target ? e.target.value : e;
36
+ if (isNumeric || (type === 'number' && inputValue !== '')) {
37
+ inputValue = parseFloat(inputValue) || '';
38
+ if (min && +min > inputValue) {
39
+ inputValue = min;
40
+ } else if (max && +max < inputValue) inputValue = max;
41
+ } else if (symbolsLimit && inputValue.length > +symbolsLimit) inputValue = inputValue.substring(0, +symbolsLimit);
42
+ onChange(inputValue.toString());
43
+ },
44
+ toggleEdit: () => {
45
+ setEditing(!isEditing);
46
+ onChange('');
47
+ },
48
+ focus: e => {
49
+ setIsFocused(true);
50
+ if (onFocus) onFocus(e);
51
+ },
52
+ blur: e => {
53
+ setIsFocused(false);
54
+ setEditing(false);
55
+ if (onBlur) onBlur(e);
56
+ },
57
+ keyUp: e => (onKeyUp ? onKeyUp(e.keyCode, event) : null)
48
58
  };
49
59
 
50
60
  useEffect(() => {
51
- if (isEditing) {
52
- inputRef.current.focus();
53
- }
61
+ if (isEditing) inputRef.current.focus();
54
62
  }, [isEditing, isFocused]);
55
63
 
56
- return (
57
- <div className={cn(className, RC)}>
58
- {label && <Label className={`${RC}-label`} isBold={isLabelBold} label={label} hint={hint} hintSide={hintSide} isRequired={isRequired} />}
64
+ const uniProps = {
65
+ className: `input ${className}`,
66
+ placeholder,
67
+ value: value || '',
68
+ disabled,
69
+ onChange: handle.change,
70
+ onFocus: handle.focus,
71
+ onBlur: handle.blur,
72
+ onKeyUp: handle.keyUp,
73
+ min,
74
+ max,
75
+ };
76
+
77
+ function renderInput() {
78
+ if (mask) {
79
+ return <InputMask {...uniProps} ref={inputRef} mask={mask} />;
80
+ }
59
81
 
60
- <div
61
- onMouseEnter={() => setOnInputHover(true)}
62
- onMouseLeave={() => setOnInputHover(false)}
63
- className={cn(`${RC}__wrap`, { [`${RC}__wrap_focus`]: isFocused }, { [`${RC}__wrap_error`]: error }, { [`${RC}__wrap_disabled`]: disabled })}
64
- >
65
- <input
66
- ref={inputRef}
67
- className={cn(`${RC}__input`)}
68
- type={isNumeric ? 'number' : type}
69
- onChange={e => changeHandler(e.target.value)}
70
- value={value || ''}
71
- disabled={disabled}
72
- onBlur={() => {
73
- setIsFocused(false);
74
- setEditing(false);
75
- onBlur();
76
- }}
77
- onFocus={() => setIsFocused(true)}
78
- placeholder={placeholder}
79
- {...props}
80
- />
82
+ return (
83
+ <>
84
+ <input {...uniProps} ref={inputRef} type={isNumeric ? 'number' : type} />
81
85
  {isNumeric && (
82
- <div className={`${RC}__nums`}>
83
- <button onClick={() => changeHandler(value - 1)} className={cn(`${RC}__num-btn`, { disabled: value === min })}>
84
- <FiMinus />
86
+ <div className="input__nums">
87
+ <button onClick={() => handle.change(value - numStep)} className={cn(`input__num-btn`, { disabled: value <= min })}>
88
+ <Minus />
85
89
  </button>
86
- <button onClick={() => changeHandler(value + 1)} className={cn(`${RC}__num-btn`, { disabled: value === max })}>
87
- <FiPlus />
90
+ <button onClick={() => handle.change(+value + +numStep)} className={cn(`input__num-btn`, { disabled: value >= max })}>
91
+ <Plus />
88
92
  </button>
89
93
  </div>
90
94
  )}
95
+ </>
96
+ );
97
+ }
91
98
 
92
- {withDelete && onInputHover && !isNumeric && (
93
- <button
94
- className={cn(`${RC}__close`, { hidden: !value })}
95
- onClick={() => {
96
- toggleEditing();
97
- onChange('');
98
- }}
99
- />
100
- )}
101
- {icon ?? null}
102
- </div>
103
-
104
- {error && <span className={`${RC}__error`}>{error}</span>}
99
+ return (
100
+ <div
101
+ className={cn(
102
+ `input__wrap`,
103
+ { [`input__wrap_focus`]: isFocused },
104
+ { [`input__wrap_error`]: error },
105
+ { [`input__wrap_disabled`]: disabled }
106
+ )}
107
+ >
108
+ {renderInput()}
109
+ {icon}
110
+ {withDelete && !isNumeric && <span className={cn(`input__close`, { hidden: !value })} onClick={handle.toggleEdit} />}
105
111
  </div>
106
112
  );
107
113
  };
@@ -1,8 +1,14 @@
1
- @import "../../../../scss/vars";
2
-
3
- .input-classic {
1
+ .input {
4
2
  position: relative;
5
3
  word-break: break-all;
4
+ border: none;
5
+ background: none;
6
+ padding: 0 10px;
7
+ width: 100%;
8
+ &::-webkit-outer-spin-button,
9
+ &::-webkit-inner-spin-button {
10
+ -webkit-appearance: none;
11
+ }
6
12
 
7
13
  &__wrap {
8
14
  display: flex;
@@ -12,8 +18,9 @@
12
18
  background-color: #fff;
13
19
  height: 28px;
14
20
  border-radius: 4px;
21
+
15
22
  &_focus {
16
- border-color: $color--primary;
23
+ border-color: #6b81dd;
17
24
  filter: drop-shadow(0px 0px 4px rgba(93, 120, 255, 0.5));
18
25
  }
19
26
 
@@ -25,7 +32,7 @@
25
32
  }
26
33
 
27
34
  &_error {
28
- border-color: $color--secondary;
35
+ border-color: #f06d8d;
29
36
  }
30
37
  }
31
38
 
@@ -37,7 +44,7 @@
37
44
  }
38
45
 
39
46
  &_error {
40
- border-color: $color--secondary;
47
+ border-color: #f06d8d;
41
48
  }
42
49
 
43
50
  svg {
@@ -50,21 +57,12 @@
50
57
  box-sizing: border-box;
51
58
  font-size: 13px;
52
59
  font-weight: 400;
53
- color: $color--dark;
60
+ color: #1e1e2d;
54
61
  border: none;
55
62
  padding: 0 5px;
56
63
  border-radius: 4px;
57
64
  }
58
65
 
59
- &__error {
60
- margin-top: 2px;
61
- margin-left: 1px;
62
- position: absolute;
63
- display: block;
64
- font-size: 10px;
65
- color: $color--secondary;
66
- }
67
-
68
66
  &__close {
69
67
  position: relative;
70
68
  opacity: 0.6;
@@ -73,7 +71,8 @@
73
71
  background: none;
74
72
  cursor: pointer;
75
73
  margin-right: 4px;
76
-
74
+ visibility: hidden;
75
+ pointer-events: none;
77
76
  &:hover {
78
77
  opacity: 1;
79
78
  }
@@ -88,7 +87,7 @@
88
87
  margin: auto;
89
88
  height: 14px;
90
89
  width: 2px;
91
- background-color: $color--gray--dark;
90
+ background-color: #9aa0b9;
92
91
  }
93
92
 
94
93
  &:before {
@@ -117,7 +116,9 @@
117
116
  background: none;
118
117
  font-size: 20px;
119
118
  user-select: none;
120
-
119
+ &.disabled {
120
+ opacity: 0.3;
121
+ }
121
122
  svg {
122
123
  margin-right: 0;
123
124
  }
@@ -127,3 +128,9 @@
127
128
  margin-bottom: 5px;
128
129
  }
129
130
  }
131
+
132
+ .input__wrap:hover .input__close {
133
+ visibility: visible;
134
+ pointer-events: all;
135
+ }
136
+
@@ -1,54 +1,52 @@
1
1
  import React, { useState } from 'react';
2
+ import {User} from 'react-feather';
2
3
  import Input from './Input';
3
4
 
4
- import '../../../../scss/main.scss';
5
-
6
5
  global.lng = 'en';
6
+
7
7
  export default {
8
- title: 'Input',
8
+ title: 'Form Elements/Input',
9
9
  component: Input,
10
10
  argTypes: {
11
- hintSide: {
12
- description: 'string: ["right", "bottom", "top", "left"]',
13
- control: {
14
- type: 'select',
15
- options: ['right', 'bottom', 'top', 'left']
16
- }
17
- },
18
- hint: {
19
- description: 'string'
20
- },
21
11
  disabled: {
22
- description: 'boolean'
12
+ description: 'boolean',
23
13
  },
24
14
  error: {
25
- description: 'text'
15
+ description: 'text - coloring input if is errored'
26
16
  },
27
17
  withDelete: {
28
- description: 'boolean'
18
+ description: 'boolean - add clear-cross by hover'
29
19
  },
30
20
  isNumeric: {
31
- description: 'boolean'
21
+ description: 'boolean - add plus/minus buttons, force input to numeric type'
22
+ },
23
+ numStep: {
24
+ description: 'number/text - plus/minus buttons factor (default: 1)'
32
25
  },
33
26
  min: {
34
- description: 'number'
27
+ description: 'number/text - minimal number for numeric input'
35
28
  },
36
29
  max: {
37
- description: 'number'
30
+ description: 'number/text - maximal number for numeric input'
38
31
  },
39
32
  placeholder: {
40
33
  description: 'text'
41
34
  },
42
- label: {
43
- description: 'text'
44
- },
45
35
  type: {
46
- description: 'string: any input type',
36
+ description: "'text', 'number', 'password', 'color', 'date', 'datetime-local', 'month', 'time', 'email', 'range'",
47
37
  control: {
48
38
  type: 'select',
49
- options: ['text', 'number']
39
+ options: ['text', 'number', 'password', 'color', 'date', 'datetime-local', 'month', 'time', 'email', 'range']
50
40
  }
51
- }
41
+ },
42
+ icon: { description: 'JSX' },
43
+ value: { description: '(* - required prop)' },
44
+ className: { description: 'string' },
45
+ mask: { description: 'string: force input to masked https://www.npmjs.com/package/react-input-mask' },
46
+ symbolsLimit: { description: 'Set limit of symbols in input, overhead will be ignored' },
47
+ onBlur: { description: 'custom callback on blur' },
48
+ onFocus: { description: 'custom callback on focus' },
49
+ onKeyUp: { description: 'custom callback on keyup, returns event keyCode' }
52
50
  }
53
51
  };
54
52
 
@@ -65,10 +63,11 @@ InputTemplate.args = {
65
63
  error: '',
66
64
  withDelete: true,
67
65
  isNumeric: false,
66
+ numStep: 1,
68
67
  min: '0',
69
- max: 5,
68
+ max: '5',
70
69
  placeholder: 'Placeholder',
71
- label: 'label',
72
- hint: 'hint',
73
- hintSide: 'bottom'
70
+ mask: '',
71
+ icon: <User />,
72
+ symbolsLimit: 225
74
73
  };
@@ -0,0 +1,43 @@
1
+ import React, { useState, useRef } from 'react';
2
+ import moment from 'moment';
3
+ import InputMask from 'react-input-mask';
4
+ import Calendar from '../../UI/Calendar/Calendar';
5
+ import { useClickOutside } from '../../../Functions/useClickOutside';
6
+
7
+ const InputCalendar = ({ data, params }) => {
8
+ const [date, setDate] = useState(data);
9
+ const [inputValue, setInputValue] = useState(date);
10
+ const [isOpened, setIsOpened] = useState(false);
11
+ const calendarRef = useRef(null);
12
+
13
+ useClickOutside(calendarRef, () => setIsOpened(false));
14
+
15
+ const changeInputValue = value => {
16
+ if (!value.includes('_') && value) {
17
+ setDate(moment(value).format('L'));
18
+ setInputValue(moment(value).format('L'));
19
+ } else {
20
+ setInputValue(value);
21
+ }
22
+ };
23
+
24
+ const changeCalendarDay = value => {
25
+ setDate(value);
26
+ setInputValue(value);
27
+ };
28
+
29
+ return (
30
+ <div className="calendar-container" ref={calendarRef}>
31
+ <InputMask
32
+ mask="99/99/9999"
33
+ value={inputValue}
34
+ onChange={e => changeInputValue(e.target.value)}
35
+ className="calendar-dropdown"
36
+ onFocus={() => setIsOpened(!isOpened)}
37
+ />
38
+ {isOpened ? <Calendar date={date} setDate={(newDate) => changeCalendarDay(newDate)} params={params} /> : null}
39
+ </div>
40
+ );
41
+ };
42
+
43
+ export default InputCalendar;
@@ -0,0 +1,27 @@
1
+ import React, { useRef, useState } from 'react';
2
+ import { ref } from 'yup';
3
+ import InputCalendar from './InputCalendar';
4
+
5
+ global.lng = 'en';
6
+
7
+ export default {
8
+ title: 'Form Elements/InputCalendar',
9
+ component: InputCalendar,
10
+ };
11
+
12
+ const Template = (args) => {
13
+ const params = {
14
+ minDate: args?.minDate,
15
+ maxDate: args?.maxDate,
16
+ };
17
+
18
+ return <InputCalendar data={args.date} params={params} />;
19
+ };
20
+
21
+ export const Calendar = Template.bind({});
22
+
23
+ Calendar.args = {
24
+ date: '10/14/2021',
25
+ minDate: '10/11/2021',
26
+ maxDate: '10/25/2021',
27
+ };