@visns-studio/visns-components 4.7.2 → 4.7.4

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 (99) hide show
  1. package/package.json +15 -14
  2. package/src/components/cms/DataGrid.jsx +1461 -0
  3. package/src/components/cms/DropZone.jsx +349 -0
  4. package/src/components/cms/Field.jsx +802 -0
  5. package/src/components/cms/Form.jsx +476 -0
  6. package/src/components/cms/generic/CmsDetail.jsx +36 -0
  7. package/src/components/cms/generic/CmsIndex.jsx +73 -0
  8. package/src/components/cms/generic/CmsSort.jsx +125 -0
  9. package/src/components/cms/sorting/Item.jsx +115 -0
  10. package/src/components/cms/sorting/List.jsx +30 -0
  11. package/src/components/crm/AsyncSelect.jsx +125 -0
  12. package/src/components/crm/Autocomplete.jsx +174 -0
  13. package/src/components/crm/Breadcrumb.jsx +52 -0
  14. package/src/components/crm/Call.jsx +220 -0
  15. package/src/components/crm/DataGrid.jsx +2701 -0
  16. package/src/components/crm/Download.jsx +101 -0
  17. package/src/components/crm/Fetch.jsx +119 -0
  18. package/src/components/crm/Field.jsx +1637 -0
  19. package/src/components/crm/Form.jsx +1409 -0
  20. package/src/components/crm/Loader.jsx +29 -0
  21. package/src/components/crm/MultiSelect.jsx +78 -0
  22. package/src/components/crm/Navigation.jsx +619 -0
  23. package/src/components/crm/Notification.jsx +197 -0
  24. package/src/components/crm/QrCode.jsx +83 -0
  25. package/src/components/crm/Select.jsx +58 -0
  26. package/src/components/crm/SelectList.jsx +21 -0
  27. package/src/components/crm/TableFilter.jsx +198 -0
  28. package/src/components/crm/auth/Login.jsx +223 -0
  29. package/src/components/crm/auth/Profile.jsx +280 -0
  30. package/src/components/crm/auth/Reset.jsx +111 -0
  31. package/src/components/crm/auth/Verify.jsx +174 -0
  32. package/src/components/crm/auth/styles/Login.module.scss +243 -0
  33. package/src/components/crm/auth/styles/Profile.module.scss +222 -0
  34. package/src/components/crm/auth/styles/Reset.module.scss +216 -0
  35. package/src/components/crm/auth/styles/Verify.module.scss +216 -0
  36. package/src/components/crm/generic/AuditLog.jsx +108 -0
  37. package/src/components/crm/generic/AuditLogs.jsx +115 -0
  38. package/src/components/crm/generic/GenericAuth.jsx +166 -0
  39. package/src/components/crm/generic/GenericDashboard.jsx +42 -0
  40. package/src/components/crm/generic/GenericDetail.jsx +1499 -0
  41. package/src/components/crm/generic/GenericDynamic.jsx +916 -0
  42. package/src/components/crm/generic/GenericFormBuilder.jsx +1909 -0
  43. package/src/components/crm/generic/GenericIndex.jsx +376 -0
  44. package/src/components/crm/generic/GenericMain.jsx +129 -0
  45. package/src/components/crm/generic/GenericSort.jsx +188 -0
  46. package/src/components/crm/generic/NotificationList.jsx +64 -0
  47. package/src/components/crm/generic/styles/AuditLog.module.scss +147 -0
  48. package/src/components/crm/generic/styles/AuditLogs.module.scss +92 -0
  49. package/src/components/crm/generic/styles/GenericDetail.module.scss +634 -0
  50. package/src/components/crm/generic/styles/GenericDynamic.module.scss +932 -0
  51. package/src/components/crm/generic/styles/GenericFormBuilder.module.scss +944 -0
  52. package/src/components/crm/generic/styles/GenericIndex.module.scss +247 -0
  53. package/src/components/crm/generic/styles/GenericMain.module.scss +91 -0
  54. package/src/components/crm/generic/styles/GenericSort.module.scss +123 -0
  55. package/src/components/crm/generic/styles/NotificationList.module.scss +67 -0
  56. package/src/components/crm/sorting/Item.jsx +117 -0
  57. package/src/components/crm/sorting/List.jsx +32 -0
  58. package/src/components/crm/sorting/styles/Item.module.scss +68 -0
  59. package/src/components/crm/sorting/styles/List.module.scss +68 -0
  60. package/src/components/crm/styles/AsyncSelect.module.scss +8 -0
  61. package/src/components/crm/styles/Autocomplete.module.scss +44 -0
  62. package/src/components/crm/styles/DataGrid.module.scss +210 -0
  63. package/src/components/crm/styles/Field.module.scss +311 -0
  64. package/src/components/crm/styles/Form.module.scss +499 -0
  65. package/src/components/crm/styles/Loader.module.scss +94 -0
  66. package/src/components/crm/styles/MultiSelect.module.scss +8 -0
  67. package/src/components/crm/styles/Navigation.module.scss +978 -0
  68. package/src/components/crm/styles/Notification.module.scss +147 -0
  69. package/src/components/crm/styles/QrCode.module.scss +87 -0
  70. package/src/components/crm/styles/TableFilter.module.scss +52 -0
  71. package/src/components/styles/global.css +73 -0
  72. package/src/index.js +86 -0
  73. package/dist/104e5636d8ddb791614c.woff2 +0 -0
  74. package/dist/11fe6a83d647de5daf95.woff +0 -0
  75. package/dist/141e2a8c7836495afe2a.woff +0 -0
  76. package/dist/2ba5877f7079830b5383.woff +0 -0
  77. package/dist/2d6836f45b2037be41f3.woff +0 -0
  78. package/dist/399.0a0f3e0d21be1057d599.css +0 -8
  79. package/dist/399.b8f57fa3f8c0c10119e4.js +0 -1
  80. package/dist/47d566c3b1293dfd9d77.woff +0 -0
  81. package/dist/6282a13cbba671a71913.woff2 +0 -0
  82. package/dist/78266f551031aa9db127.woff +0 -0
  83. package/dist/7b7da89f1e3fdcbfe36c.woff2 +0 -0
  84. package/dist/7e78e8338af7efeda712.woff2 +0 -0
  85. package/dist/7fa387951673abf164b1.woff2 +0 -0
  86. package/dist/819d59862c2d0640aad8.woff +0 -0
  87. package/dist/b615e1a6c838ea059a56.woff +0 -0
  88. package/dist/b9b1aa739c660c4ce67c.woff2 +0 -0
  89. package/dist/c5f3640b11df9414facb.woff +0 -0
  90. package/dist/da26d162ff5af71d6590.woff2 +0 -0
  91. package/dist/dd5b2912dbf896310865.woff2 +0 -0
  92. package/dist/f282b331272463c1aa6c.woff2 +0 -0
  93. package/dist/index.css +0 -2902
  94. package/dist/index.js +0 -2
  95. package/dist/index.js.LICENSE.txt +0 -150
  96. package/dist/main.83b033670d64419bb497.css +0 -1
  97. package/dist/main.b1723d17cd2d3513ab62.js +0 -1
  98. package/dist/report.html +0 -39
  99. package/dist/runtime.33c276593b23f8035b8d.js +0 -1
@@ -0,0 +1,174 @@
1
+ import '../../styles/global.css';
2
+
3
+ import React, { useState } from 'react';
4
+ import { useNavigate, useParams } from 'react-router-dom';
5
+ import { toast } from 'react-toastify';
6
+ import parse from 'html-react-parser';
7
+ import validator from 'validator';
8
+ import Reveal from 'react-reveal/Reveal';
9
+
10
+ import CustomFetch from '../Fetch';
11
+
12
+ const Verify = ({ logo }) => {
13
+ const navigate = useNavigate();
14
+ const { code } = useParams();
15
+ const [formData, setFormData] = useState({
16
+ password: '',
17
+ passwordRepeat: '',
18
+ passwordClass: '',
19
+ passwordRepeatClass: '',
20
+ });
21
+
22
+ const { password, passwordRepeat, passwordClass, passwordRepeatClass } =
23
+ formData;
24
+
25
+ const handleInputChange = (e) => {
26
+ const { name, value } = e.target;
27
+ setFormData((prevFormData) => ({
28
+ ...prevFormData,
29
+ [name]: value,
30
+ passwordClass: '',
31
+ passwordRepeatClass: '',
32
+ }));
33
+ };
34
+
35
+ const validatePassword = () => {
36
+ let _error = '';
37
+
38
+ if (password === '') {
39
+ _error = 'Please type in your new password.';
40
+ setFormData((prevFormData) => ({
41
+ ...prevFormData,
42
+ passwordClass: 'inputError',
43
+ }));
44
+ } else {
45
+ if (password !== passwordRepeat) {
46
+ _error =
47
+ 'The password does not match, please re-type the password.';
48
+ setFormData((prevFormData) => ({
49
+ ...prevFormData,
50
+ passwordClass: 'inputError',
51
+ passwordRepeatClass: 'inputError',
52
+ }));
53
+ } else {
54
+ if (!validator.isStrongPassword(password)) {
55
+ _error =
56
+ 'Your password is too weak it must contain the following:<br />- Must contain at least 8 characters.<br />- Must contain at least one uppercase letter.<br />- Must contain at least one lowercase letter.<br />- Must contain at least one number.<br />- Must contain at least one symbol.<br />';
57
+ }
58
+ }
59
+ }
60
+
61
+ return _error;
62
+ };
63
+
64
+ const handleSubmit = (e) => {
65
+ if (e) {
66
+ e.preventDefault();
67
+ const errorMsg = validatePassword();
68
+
69
+ if (errorMsg === '') {
70
+ CustomFetch(
71
+ '/password/reset',
72
+ 'POST',
73
+ {
74
+ code: code,
75
+ password: password,
76
+ password_confirmation: passwordRepeat,
77
+ },
78
+ function (result) {
79
+ if (result.error === '') {
80
+ toast.success(
81
+ 'You have successfully set a new password, please use your new password to login into the system.'
82
+ );
83
+
84
+ navigate('/login');
85
+ } else {
86
+ toast.error(result.error);
87
+ }
88
+ }
89
+ );
90
+ } else {
91
+ toast.error(<div>{parse(errorMsg)}</div>);
92
+ }
93
+ }
94
+ };
95
+
96
+ return (
97
+ <div className={styles.lcontainer}>
98
+ <div className={styles.lwrap}>
99
+ <aside
100
+ className={styles.aside}
101
+ style={{
102
+ backgroundImage: `url(${loginBg})`,
103
+ backgroundSize: 'cover',
104
+ }}
105
+ ></aside>
106
+ <div className={styles.logincontainer}>
107
+ <form onSubmit={handleSubmit}>
108
+ <Reveal effect="fadeInUp">
109
+ <div className={styles.login}>
110
+ <img
111
+ src={logo}
112
+ alt="CRM"
113
+ className={styles.loginlogo}
114
+ />
115
+ <div
116
+ className={`${styles.formItem} ${styles.fwItem}`}
117
+ >
118
+ <h1>Reset your password</h1>
119
+ </div>
120
+ <div
121
+ className={`${styles.formItem} ${styles.fwItem}`}
122
+ >
123
+ <label className={styles.fi__label}>
124
+ <input
125
+ type="password"
126
+ name="password"
127
+ value={password}
128
+ onChange={handleInputChange}
129
+ tabIndex="1"
130
+ className={passwordClass}
131
+ />
132
+ <span className={styles.fi__span}>
133
+ Password
134
+ </span>
135
+ </label>
136
+ </div>
137
+ <div
138
+ className={`${styles.formItem} ${styles.fwItem}`}
139
+ >
140
+ <label className={styles.fi__label}>
141
+ <input
142
+ type="password"
143
+ name="passwordRepeat"
144
+ value={passwordRepeat}
145
+ onChange={handleInputChange}
146
+ tabIndex="2"
147
+ className={passwordRepeatClass}
148
+ />
149
+ <span className={styles.fi__span}>
150
+ Re-type Password
151
+ </span>
152
+ </label>
153
+ </div>
154
+ <div
155
+ className={`${styles.formItem} ${styles.fwItem} ${styles.lastItem}`}
156
+ >
157
+ <button
158
+ className={styles.btn}
159
+ type="submit"
160
+ tabIndex="3"
161
+ >
162
+ Reset
163
+ </button>
164
+ </div>
165
+ </div>
166
+ </Reveal>
167
+ </form>
168
+ </div>
169
+ </div>
170
+ </div>
171
+ );
172
+ };
173
+
174
+ export default Verify;
@@ -0,0 +1,243 @@
1
+ .formItem {
2
+ width: 50%;
3
+ padding: 0.5em;
4
+ position: relative;
5
+ box-sizing: border-box;
6
+
7
+ .fi__label {
8
+ position: relative;
9
+ }
10
+
11
+ .fi__span {
12
+ position: absolute;
13
+ transition: all 200ms;
14
+ opacity: 0.8;
15
+ left: 0;
16
+ padding: 19px 20px;
17
+ transform-origin: top left;
18
+ cursor: text;
19
+ }
20
+
21
+ .fi__div {
22
+ transition: all 200ms;
23
+ opacity: 0.8;
24
+ left: 0;
25
+ padding: 19px 13px;
26
+ border-radius: var(--br);
27
+ border: 1px solid rgba(var(--paragraph-color-rgb), 0.15);
28
+ box-shadow: none;
29
+ }
30
+
31
+ .fi__toggle {
32
+ width: max-content;
33
+ padding: 0px 10px 0px 0;
34
+ box-sizing: border-box;
35
+ display: inline;
36
+ }
37
+
38
+ .fi__toggletxt {
39
+ position: relative;
40
+ left: 5px;
41
+ font-size: 0.95em;
42
+ top: -5px;
43
+ }
44
+ }
45
+
46
+ .fwItem {
47
+ flex-basis: 100%;
48
+ }
49
+
50
+ .lastItem {
51
+ .btn {
52
+ width: 100%;
53
+ }
54
+ }
55
+
56
+ .loginlogo {
57
+ display: block;
58
+ width: 100%;
59
+ max-width: 140px;
60
+ height: auto;
61
+ margin: 0 auto;
62
+ padding-bottom: 1rem;
63
+ }
64
+
65
+ .logincontainer {
66
+ min-height: 100vh;
67
+ flex-grow: 1;
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ align-content: center;
72
+ flex-wrap: wrap;
73
+ }
74
+
75
+ .login {
76
+ width: 35rem;
77
+ height: auto;
78
+ padding: 1rem;
79
+ margin: 0;
80
+ display: flex;
81
+ flex-wrap: wrap;
82
+
83
+ > .formItem {
84
+ padding: 0.25em 0;
85
+
86
+ small {
87
+ position: absolute;
88
+ width: 18px;
89
+ height: 18px;
90
+ right: 18px;
91
+ top: 18px;
92
+ opacity: 0.15;
93
+ }
94
+ }
95
+
96
+ > .loginitem {
97
+ width: 100%;
98
+ padding: 0.25em 0;
99
+
100
+ label {
101
+ width: 100%;
102
+ padding-bottom: 0.25rem;
103
+ }
104
+
105
+ button {
106
+ width: 100%;
107
+ }
108
+ }
109
+ }
110
+
111
+ .forgotten {
112
+ span {
113
+ display: block;
114
+ text-align: center;
115
+ color: var(--paragraph-color);
116
+ padding: 1rem 0;
117
+
118
+ a {
119
+ color: var(--highlight-color);
120
+ text-decoration: none;
121
+ }
122
+ }
123
+ }
124
+
125
+ .lcontainer {
126
+ --sidebar-width: 35%;
127
+ min-height: 100vh;
128
+ }
129
+
130
+ .lwrap {
131
+ display: flex;
132
+ }
133
+
134
+ .aside {
135
+ opacity: 1;
136
+ position: fixed;
137
+ overflow: hidden;
138
+ height: 101%;
139
+ width: var(--sidebar-width);
140
+ }
141
+
142
+ .fwItem {
143
+ flex-basis: 100%;
144
+ }
145
+
146
+ .lastItem .btn {
147
+ width: 100%;
148
+ }
149
+
150
+ .login .formItem {
151
+ padding: 0.25em 0;
152
+ }
153
+
154
+ .login .formItem small {
155
+ position: absolute;
156
+ width: 18px;
157
+ height: 18px;
158
+ right: 18px;
159
+ top: 18px;
160
+ opacity: 0.15;
161
+ }
162
+
163
+ .login .loginitem {
164
+ width: 100%;
165
+ padding: 0.25em 0;
166
+ }
167
+
168
+ .login .loginitem label {
169
+ width: 100%;
170
+ padding-bottom: 0.25rem;
171
+ }
172
+
173
+ .login .loginitem button {
174
+ width: 100%;
175
+ }
176
+
177
+ .forgotten span {
178
+ display: block;
179
+ text-align: center;
180
+ color: var(--paragraph-color);
181
+ padding: 1rem 0;
182
+ }
183
+
184
+ .forgotten span a {
185
+ color: var(--highlight-color);
186
+ text-decoration: none;
187
+ }
188
+
189
+ .btn {
190
+ width: max-content;
191
+ display: inline-block;
192
+ position: relative;
193
+ padding: 0.65rem 1rem;
194
+ cursor: pointer;
195
+ font-size: 1rem;
196
+ color: var(--tertiary-color);
197
+ text-decoration: none;
198
+ overflow: hidden;
199
+ background: var(--primary-color);
200
+ border: 1px solid rgba(var(--primary-color--rgb), 1.1);
201
+ border-radius: var(--br);
202
+ outline: none;
203
+ transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1) 0s;
204
+ font-size: 1.25em;
205
+ }
206
+
207
+ input:not(:placeholder-shown) + .fi__span,
208
+ textarea:not(:placeholder-shown) + .fi__span,
209
+ select:not(:placeholder-shown) + .fi__span {
210
+ transform: translateY(-40%) translateX(10px) scale(0.75);
211
+ opacity: 1;
212
+ padding: 0 4px;
213
+ background: var(--tertiary-color);
214
+ font-weight: 300;
215
+ }
216
+
217
+ @media (max-width: 1024px) {
218
+ body {
219
+ font-size: 85%;
220
+ }
221
+
222
+ .aside {
223
+ width: 100%;
224
+ transform: translateX(-2000px);
225
+ transition: all 0.55s cubic-bezier(0.25, 0.8, 0.25, 1);
226
+ will-change: transform;
227
+ z-index: 500;
228
+ }
229
+
230
+ .logincontainer {
231
+ min-height: 100vh;
232
+ flex-grow: 1;
233
+ display: flex;
234
+ align-items: center;
235
+ justify-content: center;
236
+ align-content: center;
237
+ flex-wrap: wrap;
238
+ }
239
+
240
+ .login {
241
+ width: 95%;
242
+ }
243
+ }
@@ -0,0 +1,222 @@
1
+ /* Profile.module.css */
2
+
3
+ input:not(:placeholder-shown) + .fi__span,
4
+ textarea:not(:placeholder-shown) + .fi__span,
5
+ select:not(:placeholder-shown) + .fi__span {
6
+ transform: translateY(-40%) translateX(10px) scale(0.75);
7
+ opacity: 1;
8
+ padding: 0 4px;
9
+ background: var(--tertiary-color);
10
+ font-weight: 300;
11
+ border-radius: var(--br);
12
+ }
13
+
14
+ .grid {
15
+ width: 100%;
16
+ display: flex;
17
+ align-items: flex-start;
18
+ flex-wrap: nowrap;
19
+ height: auto;
20
+ }
21
+
22
+ .grid__row {
23
+ width: 100%;
24
+ display: flex;
25
+ align-items: flex-start;
26
+ flex-wrap: nowrap;
27
+ height: auto;
28
+ }
29
+
30
+ .grid__full {
31
+ width: 100%;
32
+ background: white;
33
+ border-radius: var(--br);
34
+ border: 1px solid var(--border-color);
35
+ box-sizing: border-box;
36
+ overflow: visible;
37
+ position: relative;
38
+ padding: 0;
39
+ margin: 5px;
40
+ }
41
+
42
+ .crmtitle {
43
+ border: none;
44
+ min-height: auto;
45
+ padding: 10px 20px;
46
+ margin: 5px;
47
+ background: var(--item-color);
48
+ border-radius: var(--br);
49
+ border: 1px solid var(--border-color);
50
+ position: relative;
51
+ }
52
+
53
+ .crmtitle h1 {
54
+ font-weight: 700;
55
+ font-size: 1.25em;
56
+ margin: 0;
57
+ padding: 0.25rem 0;
58
+ color: var(--paragraph-color);
59
+ text-transform: capitalize;
60
+ }
61
+
62
+ .grid__subrow {
63
+ width: 100%;
64
+ display: flex;
65
+ flex-wrap: wrap;
66
+ height: auto;
67
+ }
68
+
69
+ .grid__subnav {
70
+ flex: 1;
71
+ background: white;
72
+ border-radius: var(--br);
73
+ border: 1px solid var(--border-color);
74
+ box-sizing: border-box;
75
+ padding: 5px;
76
+ margin: 5px;
77
+ height: auto;
78
+ }
79
+
80
+ .grid__subcontent {
81
+ flex: 0 1 85%;
82
+ background: white;
83
+ border-radius: var(--br);
84
+ border: 1px solid var(--border-color);
85
+ box-sizing: border-box;
86
+ padding: 0;
87
+ margin: 5px;
88
+ height: auto;
89
+ position: relative;
90
+ }
91
+
92
+ .gridtxt__header {
93
+ width: 100%;
94
+ display: block;
95
+ background: var(--border-color);
96
+ box-sizing: border-box;
97
+ padding: 10px 20px;
98
+ border-top-left-radius: var(--br);
99
+ border-top-right-radius: var(--br);
100
+ margin-bottom: 0;
101
+ font-weight: 700;
102
+ text-align: center;
103
+ color: var(--paragraph-color);
104
+ position: relative;
105
+ }
106
+
107
+ .formcontainer {
108
+ width: 100%;
109
+ }
110
+
111
+ .modalForm {
112
+ width: 100%;
113
+ display: flex;
114
+ align-items: flex-start;
115
+ flex-wrap: wrap;
116
+ }
117
+
118
+ .formItem {
119
+ width: 50%;
120
+ padding: 0.35em;
121
+ position: relative;
122
+ box-sizing: border-box;
123
+ }
124
+
125
+ .fi__label {
126
+ position: relative;
127
+ display: block;
128
+ }
129
+
130
+ .fi__span {
131
+ position: absolute;
132
+ transition: all 200ms;
133
+ opacity: 0.8;
134
+ left: 0;
135
+ padding: 19px 20px;
136
+ transform-origin: top left;
137
+ cursor: text;
138
+ }
139
+
140
+ .prefocus {
141
+ transform: translateY(-40%) translateX(10px) scale(0.75);
142
+ opacity: 1;
143
+ padding: 0 4px;
144
+ background: var(--tertiary-color);
145
+ font-weight: 300;
146
+ border-radius: var(--br);
147
+ z-index: 500;
148
+ }
149
+
150
+ .input,
151
+ .textarea,
152
+ .select {
153
+ background: var(--item-color);
154
+ border-radius: var(--br);
155
+ border: 1px solid transparent;
156
+ padding: 1rem;
157
+ outline: none;
158
+ width: 100%;
159
+ box-sizing: border-box;
160
+ color: var(--paragraph-color);
161
+ transition: box-shadow 0.15s linear;
162
+ }
163
+
164
+ .input:hover,
165
+ .textarea:hover,
166
+ .select:hover {
167
+ border: 1px solid rgba(var(--highlight-color-rgb), 0.85);
168
+ transition: border 0.15s linear;
169
+ }
170
+
171
+ .input:focus,
172
+ .textarea:focus,
173
+ .select:focus {
174
+ border: 1px solid rgba(var(--highlight-color-rgb), 0.85);
175
+ }
176
+
177
+ .sigcanvas {
178
+ border: 2px solid #ccc;
179
+ border-radius: 10px;
180
+ padding: 10px;
181
+ }
182
+
183
+ .polActions {
184
+ position: fixed;
185
+ bottom: 20px;
186
+ right: 20px;
187
+ width: auto;
188
+ }
189
+
190
+ .polActions button {
191
+ display: block;
192
+ float: left;
193
+ padding: 0.65em 1em;
194
+ margin: 0 0.25em;
195
+ }
196
+
197
+ .btn {
198
+ width: max-content;
199
+ display: inline-block;
200
+ position: relative;
201
+ padding: 0.65rem 1rem;
202
+ cursor: pointer;
203
+ font-size: 1rem;
204
+ color: var(--secondary-color);
205
+ text-decoration: none;
206
+ overflow: hidden;
207
+ background: var(--primary-color);
208
+ border: 1px solid rgba(var(--primary-color-rgb), 1.1);
209
+ border-radius: var(--br);
210
+ outline: none;
211
+ transition: all 0.2s cubic-bezier(0.85, 0, 0.15, 1) 0s;
212
+ }
213
+
214
+ .btn:hover {
215
+ color: var(--tertiary-color);
216
+ background: var(--secondary-color);
217
+ border: 1px solid rgba(var(--secondary-color-rgb), 1.1);
218
+ }
219
+
220
+ .inputError {
221
+ border-color: red !important;
222
+ }