intelicoreact 0.0.24 → 0.0.41

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 (147) hide show
  1. package/dist/Atomic/FormElements/Calendar/Calendar.js +134 -0
  2. package/dist/Atomic/FormElements/Calendar/Calendar.scss +543 -0
  3. package/dist/Atomic/FormElements/Calendar/Calendar.stories.js +75 -0
  4. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +3 -5
  5. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +2 -5
  6. package/dist/Atomic/FormElements/DateTime/DateTime.stories.js +0 -2
  7. package/dist/Atomic/FormElements/DoubleString/DoubleString.stories.js +0 -2
  8. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +3 -3
  9. package/dist/Atomic/FormElements/Dropdown/Dropdown.stories.js +0 -2
  10. package/dist/Atomic/FormElements/Header/Header.js +8 -10
  11. package/dist/Atomic/FormElements/Header/Header.scss +16 -5
  12. package/dist/Atomic/FormElements/Header/Header.stories.js +0 -2
  13. package/dist/Atomic/FormElements/Input/Input.js +93 -103
  14. package/dist/Atomic/FormElements/Input/Input.scss +25 -10
  15. package/dist/Atomic/FormElements/Input/Input.stories.js +32 -27
  16. package/dist/Atomic/FormElements/InputsRow/InputsRow.js +30 -7
  17. package/dist/Atomic/FormElements/InputsRow/InputsRow.scss +1 -3
  18. package/dist/Atomic/FormElements/InputsRow/InputsRow.stories.js +0 -2
  19. package/dist/Atomic/FormElements/Label/Label.js +2 -4
  20. package/dist/Atomic/FormElements/Label/Label.scss +1 -3
  21. package/dist/Atomic/FormElements/Label/Label.stories.js +0 -2
  22. package/dist/Atomic/FormElements/Modal/Modal.js +5 -7
  23. package/dist/Atomic/FormElements/Modal/Modal.scss +61 -7
  24. package/dist/Atomic/FormElements/Modal/Modal.stories.js +3 -3
  25. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +3 -5
  26. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.scss +1 -3
  27. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.stories.js +0 -2
  28. package/dist/Atomic/FormElements/NavLine/NavLine.js +2 -2
  29. package/dist/Atomic/FormElements/NavLine/NavLine.scss +4 -6
  30. package/dist/Atomic/FormElements/NavLine/NavLine.stories.js +21 -13
  31. package/dist/Atomic/FormElements/RadioInput/RadioInput.stories.js +0 -2
  32. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +0 -2
  33. package/dist/Atomic/FormElements/Switcher/Switcher.stories.js +0 -2
  34. package/dist/Atomic/FormElements/Table/Partials/TdCell.js +1 -1
  35. package/dist/Atomic/FormElements/Table/Partials/TdHeader.js +2 -2
  36. package/dist/Atomic/FormElements/Table/TdTypes/TdActions.js +5 -5
  37. package/dist/Atomic/FormElements/Table/TdTypes/TdPriority.js +3 -3
  38. package/dist/Atomic/FormElements/Table/TdTypes/TdTypes.scss +4 -6
  39. package/dist/Atomic/FormElements/Table/TdTypes/TdWeight.js +2 -2
  40. package/dist/Atomic/FormElements/Tag/Tag.js +2 -2
  41. package/dist/Atomic/FormElements/Tag/Tag.stories.js +0 -2
  42. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +3 -3
  43. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +0 -2
  44. package/dist/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +0 -2
  45. package/dist/Atomic/FormElements/Textarea/Textarea.stories.js +0 -2
  46. package/dist/Atomic/FormElements/TimeRange/TimeRange.js +1 -1
  47. package/dist/Atomic/FormElements/TimeRange/TimeRange.stories.js +0 -2
  48. package/dist/Atomic/MainMenu/MainMenu.js +4 -4
  49. package/dist/Atomic/MainMenu/MainMenu.stories.js +11 -11
  50. package/dist/Atomic/UI/Accordion/Accordion.js +1 -1
  51. package/dist/Atomic/UI/Accordion/Accordion.stories.js +4 -4
  52. package/dist/Atomic/UI/Accordion/AccordionItem.js +3 -3
  53. package/dist/Atomic/UI/AdvancedTag/AdvTag.js +3 -3
  54. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.js +4 -3
  55. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.scss +3 -5
  56. package/dist/Atomic/UI/AdvancedTag/AdvancedTags.stories.js +1 -3
  57. package/dist/Atomic/UI/Alert/Alert.js +7 -4
  58. package/dist/Atomic/UI/Alert/Alert.scss +7 -0
  59. package/dist/Atomic/UI/Alert/Alert.stories.js +1 -3
  60. package/dist/Atomic/UI/Button/Button.js +8 -19
  61. package/dist/Atomic/UI/Button/Button.scss +44 -42
  62. package/dist/Atomic/UI/Button/Button.stories.js +7 -23
  63. package/dist/Atomic/UI/Header/partials/default_ava.png +0 -0
  64. package/dist/Atomic/UI/Hint/Hint.js +8 -13
  65. package/dist/Atomic/UI/Hint/Hint.scss +8 -12
  66. package/dist/Atomic/UI/Hint/Hint.stories.js +3 -4
  67. package/dist/Atomic/UI/Price/Price.js +32 -0
  68. package/dist/Atomic/UI/Price/Price.stories.js +42 -0
  69. package/dist/Atomic/{FormElements → UI}/Status/Status.js +4 -6
  70. package/dist/Atomic/{FormElements → UI}/Status/Status.scss +0 -0
  71. package/dist/Atomic/{FormElements → UI}/Status/Status.stories.js +4 -3
  72. package/dist/Functions/useClickOutside.js +25 -0
  73. package/dist/scss/main.scss +2 -2
  74. package/package.json +7 -5
  75. package/src/Atomic/FormElements/Calendar/Calendar.js +106 -0
  76. package/src/Atomic/FormElements/Calendar/Calendar.scss +543 -0
  77. package/src/Atomic/FormElements/Calendar/Calendar.stories.js +38 -0
  78. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +3 -5
  79. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +3 -5
  80. package/src/Atomic/FormElements/DateTime/DateTime.stories.js +0 -2
  81. package/src/Atomic/FormElements/DoubleString/DoubleString.stories.js +0 -2
  82. package/src/Atomic/FormElements/Dropdown/Dropdown.js +3 -3
  83. package/src/Atomic/FormElements/Dropdown/Dropdown.stories.js +0 -1
  84. package/src/Atomic/FormElements/Header/Header.js +8 -9
  85. package/src/Atomic/FormElements/Header/Header.scss +16 -5
  86. package/src/Atomic/FormElements/Header/Header.stories.js +0 -2
  87. package/src/Atomic/FormElements/Input/Input.js +77 -73
  88. package/src/Atomic/FormElements/Input/Input.scss +25 -10
  89. package/src/Atomic/FormElements/Input/Input.stories.js +24 -29
  90. package/src/Atomic/FormElements/InputsRow/InputsRow.js +28 -5
  91. package/src/Atomic/FormElements/InputsRow/InputsRow.scss +1 -3
  92. package/src/Atomic/FormElements/InputsRow/InputsRow.stories.js +0 -2
  93. package/src/Atomic/FormElements/Label/Label.js +2 -4
  94. package/src/Atomic/FormElements/Label/Label.scss +1 -3
  95. package/src/Atomic/FormElements/Label/Label.stories.js +1 -2
  96. package/src/Atomic/FormElements/Modal/Modal.js +5 -8
  97. package/src/Atomic/FormElements/Modal/Modal.scss +61 -7
  98. package/src/Atomic/FormElements/Modal/Modal.stories.js +3 -3
  99. package/src/Atomic/FormElements/MultiSelect/MultiSelect.js +3 -5
  100. package/src/Atomic/FormElements/MultiSelect/MultiSelect.scss +1 -3
  101. package/src/Atomic/FormElements/MultiSelect/MultiSelect.stories.js +1 -2
  102. package/src/Atomic/FormElements/NavLine/NavLine.js +4 -4
  103. package/src/Atomic/FormElements/NavLine/NavLine.scss +4 -6
  104. package/src/Atomic/FormElements/NavLine/NavLine.stories.js +24 -14
  105. package/src/Atomic/FormElements/RadioInput/RadioInput.stories.js +0 -2
  106. package/src/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +0 -1
  107. package/src/Atomic/FormElements/Switcher/Switcher.stories.js +0 -2
  108. package/src/Atomic/FormElements/Table/Partials/TdCell.js +1 -1
  109. package/src/Atomic/FormElements/Table/Partials/TdHeader.js +1 -1
  110. package/src/Atomic/FormElements/Table/TdTypes/TdActions.js +5 -5
  111. package/src/Atomic/FormElements/Table/TdTypes/TdPriority.js +3 -3
  112. package/src/Atomic/FormElements/Table/TdTypes/TdTypes.scss +4 -6
  113. package/src/Atomic/FormElements/Table/TdTypes/TdWeight.js +2 -2
  114. package/src/Atomic/FormElements/Tag/Tag.js +2 -2
  115. package/src/Atomic/FormElements/Tag/Tag.stories.js +0 -2
  116. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.js +3 -3
  117. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +0 -2
  118. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +0 -2
  119. package/src/Atomic/FormElements/Textarea/Textarea.stories.js +0 -2
  120. package/src/Atomic/FormElements/TimeRange/TimeRange.js +1 -1
  121. package/src/Atomic/FormElements/TimeRange/TimeRange.stories.js +0 -2
  122. package/src/Atomic/MainMenu/MainMenu.js +4 -4
  123. package/src/Atomic/MainMenu/MainMenu.stories.js +11 -11
  124. package/src/Atomic/UI/Accordion/Accordion.js +1 -1
  125. package/src/Atomic/UI/Accordion/Accordion.stories.js +4 -4
  126. package/src/Atomic/UI/Accordion/AccordionItem.js +3 -3
  127. package/src/Atomic/UI/AdvancedTag/AdvTag.js +3 -3
  128. package/src/Atomic/UI/AdvancedTag/AdvancedTags.js +3 -3
  129. package/src/Atomic/UI/AdvancedTag/AdvancedTags.scss +3 -5
  130. package/src/Atomic/UI/AdvancedTag/AdvancedTags.stories.js +1 -3
  131. package/src/Atomic/UI/Alert/Alert.js +9 -6
  132. package/src/Atomic/UI/Alert/Alert.scss +7 -0
  133. package/src/Atomic/UI/Alert/Alert.stories.js +1 -3
  134. package/src/Atomic/UI/Button/Button.js +5 -9
  135. package/src/Atomic/UI/Button/Button.scss +44 -42
  136. package/src/Atomic/UI/Button/Button.stories.js +6 -23
  137. package/src/Atomic/UI/Header/partials/default_ava.png +0 -0
  138. package/src/Atomic/UI/Hint/Hint.js +6 -9
  139. package/src/Atomic/UI/Hint/Hint.scss +8 -12
  140. package/src/Atomic/UI/Hint/Hint.stories.js +3 -3
  141. package/src/Atomic/UI/Price/Price.js +19 -0
  142. package/src/Atomic/UI/Price/Price.stories.js +30 -0
  143. package/src/Atomic/{FormElements → UI}/Status/Status.js +2 -4
  144. package/src/Atomic/{FormElements → UI}/Status/Status.scss +0 -0
  145. package/src/Atomic/{FormElements → UI}/Status/Status.stories.js +4 -3
  146. package/src/Functions/useClickOutside.js +15 -0
  147. package/src/scss/main.scss +2 -2
@@ -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
7
  import Hint from '../../UI/Hint/Hint';
8
- import defaultAva from '../../../../assets/images/default_ava.png';
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,111 @@
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 = () => {},
28
- icon,
29
- isRequired,
30
- ...props
20
+ onBlur,
21
+ onFocus,
22
+ onKeyUp,
23
+ mask,
24
+ error
31
25
  }) => {
26
+ // STATES
32
27
  const [isFocused, setIsFocused] = useState(false);
33
- const [onInputHover, setOnInputHover] = useState(false);
34
28
  const [isEditing, setEditing] = useState(false);
35
29
  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);
30
+ // HANDLES
31
+ const handle = {
32
+ change: event => {
33
+ let inputValue = event.target.value;
34
+ if (isNumeric || (type === 'number' && inputValue !== '')) {
35
+ inputValue = parseFloat(inputValue) || '';
36
+ if (min && +min > inputValue) {
37
+ inputValue = min;
38
+ } else if (max && +max < inputValue) inputValue = max;
39
+ }
40
+ onChange(inputValue.toString());
41
+ },
42
+ toggleEdit: () => {
43
+ setEditing(!isEditing);
44
+ onChange('');
45
+ },
46
+ focus: () => {
47
+ setIsFocused(true);
48
+ if (onFocus) onFocus();
49
+ },
50
+ blur: () => {
51
+ setIsFocused(false);
52
+ setEditing(false);
53
+ if (onBlur) onBlur();
54
+ },
55
+ keyUp: e => (onKeyUp ? onKeyUp(e.keyCode) : null)
48
56
  };
49
57
 
50
58
  useEffect(() => {
51
- if (isEditing) {
52
- inputRef.current.focus();
53
- }
59
+ if (isEditing) inputRef.current.focus();
54
60
  }, [isEditing, isFocused]);
55
61
 
56
- return (
57
- <div className={cn(className, RC)}>
58
- {label && <Label className={`${RC}-label`} isBold={isLabelBold} label={label} hint={hint} hintSide={hintSide} isRequired={isRequired} />}
62
+ const uniProps = {
63
+ className: `input-classic ${className}`,
64
+ placeholder,
65
+ value: value || '',
66
+ disabled,
67
+ onChange: handle.change,
68
+ onFocus: handle.focus,
69
+ onBlur: handle.blur,
70
+ onKeyUp: handle.keyUp,
71
+ min,
72
+ max
73
+ };
74
+
75
+ function renderInput() {
76
+ if (mask) {
77
+ return <InputMask {...uniProps} ref={inputRef} mask={mask} />;
78
+ }
59
79
 
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
- />
80
+ return (
81
+ <>
82
+ <input {...uniProps} ref={inputRef} type={isNumeric ? 'number' : type} />
81
83
  {isNumeric && (
82
- <div className={`${RC}__nums`}>
83
- <button onClick={() => changeHandler(value - 1)} className={cn(`${RC}__num-btn`, { disabled: value === min })}>
84
- <FiMinus />
84
+ <div className="input-classic__nums">
85
+ <button onClick={() => handle.change(value - numStep)} className={cn(`input-classic__num-btn`, { disabled: value <= min })}>
86
+ <Minus />
85
87
  </button>
86
- <button onClick={() => changeHandler(value + 1)} className={cn(`${RC}__num-btn`, { disabled: value === max })}>
87
- <FiPlus />
88
+ <button onClick={() => handle.change(+value + +numStep)} className={cn(`input-classic__num-btn`, { disabled: value >= max })}>
89
+ <Plus />
88
90
  </button>
89
91
  </div>
90
92
  )}
93
+ </>
94
+ );
95
+ }
91
96
 
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>
97
+ return (
98
+ <div
99
+ className={cn(
100
+ `input-classic__wrap`,
101
+ { [`input-classic__wrap_focus`]: isFocused },
102
+ { [`input-classic__wrap_error`]: error },
103
+ { [`input-classic__wrap_disabled`]: disabled }
104
+ )}
105
+ >
106
+ {renderInput()}
103
107
 
104
- {error && <span className={`${RC}__error`}>{error}</span>}
108
+ {withDelete && !isNumeric && <span className={cn(`input-classic__close`, { hidden: !value })} onClick={handle.toggleEdit} />}
105
109
  </div>
106
110
  );
107
111
  };
@@ -1,8 +1,14 @@
1
- @import "../../../scss/vars";
2
-
3
1
  .input-classic {
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,7 +57,7 @@
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;
@@ -62,7 +69,7 @@
62
69
  position: absolute;
63
70
  display: block;
64
71
  font-size: 10px;
65
- color: $color--secondary;
72
+ color: #f06d8d;
66
73
  }
67
74
 
68
75
  &__close {
@@ -73,7 +80,8 @@
73
80
  background: none;
74
81
  cursor: pointer;
75
82
  margin-right: 4px;
76
-
83
+ visibility: hidden;
84
+ pointer-events: none;
77
85
  &:hover {
78
86
  opacity: 1;
79
87
  }
@@ -88,7 +96,7 @@
88
96
  margin: auto;
89
97
  height: 14px;
90
98
  width: 2px;
91
- background-color: $color--gray--dark;
99
+ background-color: #9aa0b9;
92
100
  }
93
101
 
94
102
  &:before {
@@ -117,7 +125,9 @@
117
125
  background: none;
118
126
  font-size: 20px;
119
127
  user-select: none;
120
-
128
+ &.disabled {
129
+ opacity: 0.3;
130
+ }
121
131
  svg {
122
132
  margin-right: 0;
123
133
  }
@@ -127,3 +137,8 @@
127
137
  margin-bottom: 5px;
128
138
  }
129
139
  }
140
+
141
+ .input-classic__wrap:hover .input-classic__close {
142
+ visibility: visible;
143
+ pointer-events: all;
144
+ }
@@ -1,54 +1,50 @@
1
1
  import React, { useState } from 'react';
2
2
  import Input from './Input';
3
3
 
4
- import '../../../../scss/main.scss';
5
-
6
4
  global.lng = 'en';
5
+
7
6
  export default {
8
- title: 'Input',
7
+ title: 'Form Elements/Input',
9
8
  component: Input,
10
9
  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
10
  disabled: {
22
- description: 'boolean'
11
+ description: 'boolean',
23
12
  },
24
13
  error: {
25
- description: 'text'
14
+ description: 'text - coloring input if is errored'
26
15
  },
27
16
  withDelete: {
28
- description: 'boolean'
17
+ description: 'boolean - add clear-cross by hover'
29
18
  },
30
19
  isNumeric: {
31
- description: 'boolean'
20
+ description: 'boolean - add plus/minus buttons, force input to numeric type'
21
+ },
22
+ numStep: {
23
+ description: 'number/text - plus/minus buttons factor (default: 1)'
32
24
  },
33
25
  min: {
34
- description: 'number'
26
+ description: 'number/text - minimal number for numeric input'
35
27
  },
36
28
  max: {
37
- description: 'number'
29
+ description: 'number/text - maximal number for numeric input'
38
30
  },
39
31
  placeholder: {
40
32
  description: 'text'
41
33
  },
42
- label: {
43
- description: 'text'
44
- },
45
34
  type: {
46
- description: 'string: any input type',
35
+
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
+ value: { description: '(* - required prop)' },
43
+ className: { description: 'string' },
44
+ mask: { description: 'string: force input to masked https://www.npmjs.com/package/react-input-mask' },
45
+ onBlur: { description: 'custom callback on blur' },
46
+ onFocus: { description: 'custom callback on focus' },
47
+ onKeyUp: { description: 'custom callback on keyup, returns event keyCode' }
52
48
  }
53
49
  };
54
50
 
@@ -65,10 +61,9 @@ InputTemplate.args = {
65
61
  error: '',
66
62
  withDelete: true,
67
63
  isNumeric: false,
64
+ numStep: 1,
68
65
  min: '0',
69
- max: 5,
66
+ max: '5',
70
67
  placeholder: 'Placeholder',
71
- label: 'label',
72
- hint: 'hint',
73
- hintSide: 'bottom'
68
+ mask: ''
74
69
  };
@@ -1,13 +1,36 @@
1
1
  import React, { useState } from 'react';
2
2
  import { v4 as uuid } from 'uuid';
3
- import { FiTrash2 } from 'react-icons/fi';
3
+ import { Trash2 } from 'react-feather';
4
4
 
5
- import { handleObjectChange } from '../../../Functions/utils';
6
5
  import Input from '../Input/Input';
7
6
  import Button from '../../UI/Button/Button';
8
7
 
9
8
  import './InputsRow.scss';
10
9
 
10
+ const getRandomInRange = (min, max) => {
11
+ return Math.floor(Math.random() * (max - min + 1)) + min;
12
+ };
13
+
14
+ const handleObjectChange =
15
+ (updateObject, updateFunction) =>
16
+ (data, prop = '', isNumber) => {
17
+ let value;
18
+ if (data?.target) {
19
+ value = data.target.type === 'checkbox' ? data.target.checked : data.target.value;
20
+ } else value = data;
21
+
22
+ value = isNumber ? +value : value;
23
+
24
+ const props = prop.split('.');
25
+ const currentObject = props.reduce((res, chapter, index) => {
26
+ if (props.length !== index + 1) res = res[chapter];
27
+ return res;
28
+ }, updateObject);
29
+
30
+ currentObject[props.pop()] = value;
31
+ updateFunction();
32
+ };
33
+
11
34
  const InputsRow = ({ items, title, paramPlaceholder = '', valuePlaceholder = '', descriptionPlaceholder = '' }) => {
12
35
  const initialRows = [
13
36
  {
@@ -34,7 +57,7 @@ const InputsRow = ({ items, title, paramPlaceholder = '', valuePlaceholder = '',
34
57
  param: '',
35
58
  value: '',
36
59
  description: '',
37
- rowId: uuid()
60
+ rowId: getRandomInRange(1, 1000)
38
61
  }
39
62
  ];
40
63
  setRows(newRow);
@@ -75,13 +98,13 @@ const InputsRow = ({ items, title, paramPlaceholder = '', valuePlaceholder = '',
75
98
 
76
99
  {rows.length > 1 && (
77
100
  <div onClick={() => onDelete(index)} className="inputs-row--trash">
78
- <FiTrash2 />
101
+ <Trash2 />
79
102
  </div>
80
103
  )}
81
104
  </div>
82
105
  ))}
83
106
 
84
- {rows.length < 10 && <Button onClick={handleAddRow} text="Add row" className="inputs-row--add-btn" />}
107
+ {rows.length < 10 && <Button onClick={handleAddRow} label="Add row" className="inputs-row--add-btn" />}
85
108
  </div>
86
109
  );
87
110
  };
@@ -1,5 +1,3 @@
1
- @import "../../../scss/vars";
2
-
3
1
  .inputs-row {
4
2
  &--input {
5
3
  width: 200px;
@@ -20,7 +18,7 @@
20
18
  border-radius: 5px;
21
19
 
22
20
  svg {
23
- color: $color--secondary;
21
+ color: #f06d8d;
24
22
  }
25
23
  }
26
24
 
@@ -1,8 +1,6 @@
1
1
  import React from 'react';
2
2
  import InputsRow from './InputsRow';
3
3
 
4
- import '../../../../scss/main.scss';
5
-
6
4
  global.lng = 'en';
7
5
 
8
6
  export default {
@@ -3,13 +3,11 @@ import cn from 'classnames';
3
3
  import Hint from '../../UI/Hint/Hint';
4
4
  import './Label.scss';
5
5
 
6
- const RC = 'label';
7
-
8
6
  const Label = ({ label, isBold, hint, hintSide, className, isRequired }) => (
9
- <span className={cn(`${RC}`, { [`${RC}_bold`]: isBold }, className)}>
7
+ <span className={cn(`label`, { [`label_bold`]: isBold }, className)}>
10
8
  {label}
11
9
  {isRequired && <span className="label_isRequired">*</span>}
12
- {hint && <Hint hint={hint} side={hintSide} className={`${RC}-hint`} />}
10
+ {hint && <Hint hint={hint} side={hintSide} className="label-hint" />}
13
11
  </span>
14
12
  );
15
13
 
@@ -1,8 +1,6 @@
1
- @import '../../../scss/vars';
2
-
3
1
  .label {
4
2
  display: flex;
5
- color: $color--dark;
3
+ color: #1e1e2d;
6
4
  font-size: 13px;
7
5
 
8
6
  &_bold {
@@ -1,9 +1,8 @@
1
1
  import React from 'react';
2
2
  import Label from './Label';
3
3
 
4
- import '../../../../scss/main.scss';
5
-
6
4
  global.lng = 'en';
5
+
7
6
  export default {
8
7
  title: 'Label',
9
8
  component: Label
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import cn from 'classnames';
3
- import { IoClose } from 'react-icons/io5';
3
+ import { X } from 'react-feather';
4
4
 
5
5
  import Button from '../../UI/Button/Button';
6
6
 
7
- import '../../../../scss/main.scss';
8
7
  import './Modal.scss';
9
8
 
10
9
  const Modal = ({
@@ -41,23 +40,21 @@ const Modal = ({
41
40
 
42
41
  <div className={cn(className, { [`modal-${size}`]: size }, `${isOpen ? 'modal' : 'hidden'}`)}>
43
42
  <div className={cn('modal__header', { [`modal__header-${variant}`]: variant })}>
44
- <span className={cn('modal__header-title', { [`modal__header-${variant}-title`]: variant })}>
45
- <span>{renderModalTitle()}</span>
46
- </span>
43
+ <span className={cn('modal__header-title', { [`modal__header-${variant}-title`]: variant })}>{renderModalTitle()}</span>
47
44
 
48
45
  <div onClick={closeModal} className={cn('modal-close-icon-box', { 'modal-close-icon-box-primary': variant === 'primary' })}>
49
- <IoClose className="modal-close-icon" />
46
+ <X className="modal-close-icon" />
50
47
  </div>
51
48
  </div>
52
49
 
53
50
  <div className="modal__body">{children}</div>
54
51
  {!noFooter && (
55
52
  <div className="modal__footer">
56
- <Button variant="dark-outline" onClick={closeModal} text={closeBtnText || 'Cancel'} />
53
+ <Button variant="dark-outline" onClick={closeModal} label={closeBtnText || 'Cancel'} />
57
54
  {!noConfirmBtn && (
58
55
  <Button
59
56
  onClick={() => handleConfirm()}
60
- text={confirmBtnLabel || mode?.[0].toUpperCase() + mode?.slice(1) || 'Apply'}
57
+ label={confirmBtnLabel || mode?.[0].toUpperCase() + mode?.slice(1) || 'Apply'}
61
58
  className="ml5"
62
59
  variant={confirmBtnVariant}
63
60
  />