@visns-studio/visns-components 5.0.0 → 5.0.1-8.1

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 (37) hide show
  1. package/package.json +3 -1
  2. package/src/components/crm/AsyncSelect.jsx +121 -15
  3. package/src/components/crm/DataGrid.jsx +26 -5
  4. package/src/components/crm/Field.jsx +174 -148
  5. package/src/components/crm/Form.jsx +46 -33
  6. package/src/components/crm/MultiSelect.jsx +96 -29
  7. package/src/components/crm/Navigation.jsx +2 -81
  8. package/src/components/crm/QrCode.jsx +12 -8
  9. package/src/components/crm/auth/Login.jsx +9 -1
  10. package/src/components/crm/auth/Profile.jsx +4 -2
  11. package/src/components/crm/auth/styles/Login.module.scss +52 -82
  12. package/src/components/crm/auth/styles/Profile.module.scss +150 -44
  13. package/src/components/crm/auth/styles/Reset.module.scss +55 -37
  14. package/src/components/crm/auth/styles/Verify.module.scss +55 -76
  15. package/src/components/crm/generic/GenericAuth.jsx +17 -6
  16. package/src/components/crm/generic/GenericDetail.jsx +509 -18
  17. package/src/components/crm/generic/GenericEditableTable.jsx +407 -0
  18. package/src/components/crm/generic/styles/AuditLog.module.scss +4 -37
  19. package/src/components/crm/generic/styles/AuditLogs.module.scss +0 -51
  20. package/src/components/crm/generic/styles/GenericDetail.module.scss +263 -193
  21. package/src/components/crm/generic/styles/GenericDynamic.module.scss +100 -198
  22. package/src/components/crm/generic/styles/GenericEditableTable.module.scss +178 -0
  23. package/src/components/crm/generic/styles/GenericFormBuilder.module.scss +63 -96
  24. package/src/components/crm/generic/styles/GenericIndex.module.scss +46 -66
  25. package/src/components/crm/generic/styles/GenericMain.module.scss +7 -7
  26. package/src/components/crm/generic/styles/GenericSort.module.scss +0 -36
  27. package/src/components/crm/generic/styles/NotificationList.module.scss +1 -32
  28. package/src/components/crm/styles/Autocomplete.module.scss +12 -20
  29. package/src/components/crm/styles/DataGrid.module.scss +6 -89
  30. package/src/components/crm/styles/Field.module.scss +72 -42
  31. package/src/components/crm/styles/Form.module.scss +148 -379
  32. package/src/components/crm/styles/Navigation.module.scss +356 -501
  33. package/src/components/crm/styles/Notification.module.scss +1 -0
  34. package/src/components/crm/styles/QrCode.module.scss +4 -0
  35. package/src/components/crm/styles/SwitchAccount.module.scss +0 -1
  36. package/src/components/crm/styles/TableFilter.module.scss +2 -1
  37. package/src/components/styles/global.css +164 -34
@@ -3,11 +3,11 @@
3
3
  input:not(:placeholder-shown) + .fi__span,
4
4
  textarea:not(:placeholder-shown) + .fi__span,
5
5
  select:not(:placeholder-shown) + .fi__span {
6
- transform: translateY(-40%) translateX(10px) scale(0.75);
6
+ transform: translateY(-40%) translateX(10px) scale(0.9);
7
7
  opacity: 1;
8
- padding: 0 4px;
8
+ padding: 0 0.25rem;
9
9
  background: var(--tertiary-color);
10
- font-weight: 300;
10
+ font-weight: 400;
11
11
  border-radius: var(--br);
12
12
  }
13
13
 
@@ -41,42 +41,12 @@ select:not(:placeholder-shown) + .fi__span {
41
41
  box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
42
42
  }
43
43
 
44
- .crmtitle {
45
- border: none;
46
- min-height: auto;
47
- padding: 10px 20px;
48
- margin: 0;
49
- background: var(--tertiary-color);
50
- border-radius: var(--br);
51
- border: 1px solid rgba(var(--item-color-rgb), 1.15);
52
- position: relative;
53
- }
54
-
55
- .crmtitle h1 {
56
- font-weight: 700;
57
- font-size: 1.45em;
58
- margin: 0;
59
- padding: 0.65rem 0;
60
- }
61
-
62
- .crmtitle h1 a {
63
- text-decoration: none;
64
- color: rgba(var(--secondary-color-rgb), 1.1);
65
- font-weight: 300;
66
- }
67
-
68
- .crmtitle h1 svg {
69
- color: rgba(var(--primary-color-rgb), 0.25);
70
- position: relative;
71
- top: 2px;
72
- margin: 0 0.25rem;
73
- }
74
-
75
44
  .grid__subrow {
76
45
  width: 100%;
77
46
  display: flex;
78
47
  flex-wrap: wrap;
79
48
  height: auto;
49
+ gap: 0.35rem;
80
50
  }
81
51
 
82
52
  .grid__subnav {
@@ -86,35 +56,127 @@ select:not(:placeholder-shown) + .fi__span {
86
56
  border: 1px solid var(--border-color);
87
57
  box-sizing: border-box;
88
58
  padding: 5px;
89
- margin: 5px;
59
+ margin: 0.5rem 0;
90
60
  height: auto;
91
61
  }
92
62
 
93
- .grid__subcontent {
94
- flex: 0 1 85%;
63
+ .grid__subnav {
64
+ flex: 1;
95
65
  background: white;
96
66
  border-radius: var(--br);
97
- border: 1px solid var(--border-color);
98
67
  box-sizing: border-box;
68
+ padding: 5px;
69
+ margin: 8px 0;
70
+ height: auto;
71
+ box-shadow: 0 4px 0 rgba(var(--primary-color-rgb), 0.05);
72
+ }
73
+
74
+ .grid__subnav > ul {
75
+ width: 100%;
76
+ list-style: none;
99
77
  padding: 0;
100
- margin: 5px;
78
+ margin: 0;
79
+ display: flex;
80
+ flex-wrap: wrap;
81
+ }
82
+
83
+ .grid__subnav > ul li {
84
+ width: 100%;
85
+ margin-bottom: 3px;
86
+ }
87
+
88
+ .grid__subnav > ul li a {
89
+ width: 100%;
90
+ padding: 0.35rem 1rem;
91
+ box-sizing: border-box;
92
+ display: block;
93
+ text-decoration: none;
94
+ background: rgba(var(--primary-rgb), 0.05);
95
+ color: var(--primary-color);
96
+ border-radius: 5px;
97
+ transition: background 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
98
+ outline: none;
99
+ cursor: pointer;
100
+ }
101
+
102
+ .grid__subnav > ul li:hover a {
103
+ background: var(--primary-color);
104
+ color: var(--tertiary-color);
105
+ }
106
+
107
+ .grid__subnav > ul li .subactive {
108
+ font-weight: 700;
109
+ background: var(--primary-color);
110
+ color: var(--tertiary-color);
111
+ }
112
+
113
+ .grid__subcontent {
114
+ flex: 0 1 80%;
115
+ background: var(--tertiary-color);
116
+ border-radius: var(--br);
117
+ border: 1px solid rgba(var(--primary-rgb), 0.05);
118
+ box-sizing: border-box;
119
+ padding: 2px;
120
+ margin: 8px 0;
101
121
  height: auto;
102
122
  position: relative;
103
123
  }
104
124
 
125
+ .grid__subcontent h2 {
126
+ color: var(--primary-color);
127
+ font-size: 1.35em;
128
+ padding: 0;
129
+ margin: 0 0 30px 0;
130
+ }
131
+
105
132
  .gridtxt__header {
106
133
  width: 100%;
107
134
  display: block;
108
- background: var(--border-color);
135
+ background: rgba(var(--primary-rgb), 0.05);
109
136
  box-sizing: border-box;
110
137
  padding: 10px 20px;
111
- border-top-left-radius: var(--br);
112
- border-top-right-radius: var(--br);
138
+ border-radius: var(--br);
113
139
  margin-bottom: 0;
114
140
  font-weight: 700;
115
141
  text-align: center;
116
142
  color: var(--paragraph-color);
117
- position: relative;
143
+ }
144
+
145
+ .gridtxt__header span {
146
+ font-weight: 700;
147
+ }
148
+
149
+ .gridtxt > ul {
150
+ width: 100%;
151
+ display: flex;
152
+ justify-content: flex-start;
153
+ flex-direction: row;
154
+ flex-wrap: wrap;
155
+ list-style: none;
156
+ box-sizing: border-box;
157
+ padding: 0.85rem;
158
+ margin: 0;
159
+ }
160
+
161
+ .gridtxt > ul li {
162
+ flex: 0 0 calc(50% - 10px);
163
+ padding: 0.85rem;
164
+ box-sizing: border-box;
165
+ border: 1px solid rgba(var(--primary-rgb), 0.095);
166
+ color: var(--paragraph-color);
167
+ background: rgba(var(--primary-rgb), 0.015);
168
+ margin: 5px;
169
+ border-radius: var(--br);
170
+ line-height: 1.45;
171
+ font-size: 1rem;
172
+ }
173
+
174
+ .gridtxt > ul .fw-grid-item {
175
+ flex: 0 0 calc(100% - 10px);
176
+ }
177
+
178
+ .gridtxt > ul .notecolor {
179
+ border: 1px solid var(--secondary-color);
118
180
  }
119
181
 
120
182
  .formcontainer {
@@ -143,7 +205,7 @@ select:not(:placeholder-shown) + .fi__span {
143
205
  .fi__span {
144
206
  position: absolute;
145
207
  transition: all 200ms;
146
- opacity: 0.8;
208
+ opacity: 1;
147
209
  left: 0;
148
210
  padding: 19px 20px;
149
211
  transform-origin: top left;
@@ -233,3 +295,47 @@ select:not(:placeholder-shown) + .fi__span {
233
295
  .inputError {
234
296
  border-color: red !important;
235
297
  }
298
+
299
+
300
+ .crmtitle {
301
+ min-height: auto;
302
+ padding: 1rem;
303
+ margin: 0;
304
+ background: white;
305
+ border-radius: var(--br);
306
+ border: 1px solid rgba(var(--primary-rgb), 0.15);
307
+ position: relative;
308
+ display: flex;
309
+ align-items: center;
310
+ justify-content: space-between;
311
+
312
+ h1 {
313
+ font-weight: 700;
314
+ font-size: 1.25rem;
315
+ margin: 0;
316
+ padding: 0;
317
+ line-height: 1;
318
+
319
+ a {
320
+ text-decoration: none;
321
+ color: var(--secondary-color);
322
+ font-weight: 400;
323
+ }
324
+
325
+ svg {
326
+ color: rgba(var(--primary-color-rgb), 0.5);
327
+ position: relative;
328
+ top: 2px;
329
+ margin: 0 0.25rem;
330
+ }
331
+ }
332
+
333
+ .titleInfo {
334
+ width: max-content;
335
+ }
336
+
337
+ .titleInfo span {
338
+ font-size: 0.875em;
339
+ color: rgba(var(--paragraph-color-rgb), 0.65);
340
+ }
341
+ }
@@ -1,11 +1,17 @@
1
1
  .formItem {
2
2
  width: 50%;
3
- padding: 0.5em;
4
3
  position: relative;
5
4
  box-sizing: border-box;
6
5
 
6
+ h1 {
7
+ text-align: center;
8
+ font-size: 1.25rem;
9
+ }
10
+
7
11
  .fi__label {
8
12
  position: relative;
13
+ display: flex;
14
+ align-items: center;
9
15
  }
10
16
 
11
17
  .fi__span {
@@ -13,9 +19,9 @@
13
19
  transition: all 200ms;
14
20
  opacity: 0.8;
15
21
  left: 0;
16
- padding: 19px 20px;
17
22
  transform-origin: top left;
18
23
  cursor: text;
24
+ padding: 0 1rem;
19
25
  }
20
26
 
21
27
  .fi__div {
@@ -23,14 +29,14 @@
23
29
  opacity: 0.8;
24
30
  left: 0;
25
31
  padding: 19px 13px;
26
- border-radius: var(--br);
27
- border: 1px solid rgba(var(--paragraph-color-rgb), 0.15);
32
+ border-radius: var(--radius);
33
+ border: 1px solid rgba(var(--paragraph-rgb), 0.15);
28
34
  box-shadow: none;
29
35
  }
30
36
 
31
37
  .fi__toggle {
32
38
  width: max-content;
33
- padding: 0px 10px 0px 0;
39
+ padding: 0 10px 0 0;
34
40
  box-sizing: border-box;
35
41
  display: inline;
36
42
  }
@@ -43,8 +49,10 @@
43
49
  }
44
50
  }
45
51
 
46
- .fwItem {
47
- flex-basis: 100%;
52
+ .fwItem,
53
+ .fwBuilderItem {
54
+ grid-column: 1 / -1;
55
+ width: 100%;
48
56
  }
49
57
 
50
58
  .lastItem {
@@ -72,16 +80,33 @@
72
80
  flex-wrap: wrap;
73
81
  }
74
82
 
83
+ .loginlogo {
84
+ display: block;
85
+ width: 100%;
86
+ max-width: 200px;
87
+ height: auto;
88
+ margin: 0 auto;
89
+ padding-bottom: 1rem;
90
+ }
91
+
92
+ .logincontainer {
93
+ width: 100%;
94
+ min-height: 100vh;
95
+ display: grid;
96
+ place-items: center;
97
+ padding: 1rem;
98
+ }
99
+
75
100
  .login {
76
101
  width: 35rem;
77
- height: auto;
78
102
  padding: 1rem;
79
103
  margin: 0;
80
- display: flex;
81
- flex-wrap: wrap;
104
+ display: grid;
105
+ grid-template-columns: 1fr;
106
+ gap: 0.5rem;
82
107
 
83
108
  > .formItem {
84
- padding: 0.25em 0;
109
+ padding: 0;
85
110
 
86
111
  small {
87
112
  position: absolute;
@@ -94,12 +119,11 @@
94
119
  }
95
120
 
96
121
  > .loginitem {
97
- width: 100%;
122
+ grid-column: 1 / -1;
98
123
  padding: 0.25em 0;
99
124
 
100
125
  label {
101
126
  width: 100%;
102
- padding-bottom: 0.25rem;
103
127
  }
104
128
 
105
129
  button {
@@ -108,27 +132,28 @@
108
132
  }
109
133
  }
110
134
 
111
- .forgotten {
112
- span {
113
- display: block;
114
- text-align: center;
115
- color: var(--paragraph-color);
116
- padding: 1rem 0;
135
+ .forgotten span {
136
+ display: block;
137
+ text-align: center;
138
+ color: var(--paragraph-color);
139
+ padding: 1rem 0;
117
140
 
118
- a {
119
- color: var(--highlight-color);
120
- text-decoration: none;
121
- }
141
+ a {
142
+ color: var(--secondary-color);
143
+ text-decoration: none;
122
144
  }
123
145
  }
124
146
 
125
147
  .lcontainer {
126
- --sidebar-width: 35%;
127
148
  min-height: 100vh;
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
128
152
  }
129
153
 
130
154
  .lwrap {
131
- display: flex;
155
+ display: grid;
156
+ grid-template-columns: var(--sidebar-width) 1fr;
132
157
  }
133
158
 
134
159
  .aside {
@@ -139,14 +164,6 @@
139
164
  width: var(--sidebar-width);
140
165
  }
141
166
 
142
- .fwItem {
143
- flex-basis: 100%;
144
- }
145
-
146
- .lastItem .btn {
147
- width: 100%;
148
- }
149
-
150
167
  .btn {
151
168
  width: max-content;
152
169
  display: inline-block;
@@ -168,9 +185,10 @@
168
185
  input:not(:placeholder-shown) + .fi__span,
169
186
  textarea:not(:placeholder-shown) + .fi__span,
170
187
  select:not(:placeholder-shown) + .fi__span {
171
- transform: translateY(-40%) translateX(10px) scale(0.75);
188
+ transform: translateY(-110%) translateX(10px) scale(0.75);
172
189
  opacity: 1;
173
- padding: 0 4px;
174
- background: var(--tertiary-color);
190
+ padding: 0;
191
+ background: var(--bg-color);
175
192
  font-weight: 300;
176
- }
193
+ transition: all 0.5s cubic-bezier(0.5, 0.5, 0, 1);
194
+ }
@@ -1,11 +1,17 @@
1
1
  .formItem {
2
2
  width: 50%;
3
- padding: 0.5em;
4
3
  position: relative;
5
4
  box-sizing: border-box;
6
5
 
6
+ h1 {
7
+ text-align: center;
8
+ font-size: 1.25rem;
9
+ }
10
+
7
11
  .fi__label {
8
12
  position: relative;
13
+ display: flex;
14
+ align-items: center;
9
15
  }
10
16
 
11
17
  .fi__span {
@@ -13,9 +19,9 @@
13
19
  transition: all 200ms;
14
20
  opacity: 0.8;
15
21
  left: 0;
16
- padding: 19px 20px;
17
22
  transform-origin: top left;
18
23
  cursor: text;
24
+ padding: 0 1rem;
19
25
  }
20
26
 
21
27
  .fi__div {
@@ -23,14 +29,14 @@
23
29
  opacity: 0.8;
24
30
  left: 0;
25
31
  padding: 19px 13px;
26
- border-radius: var(--br);
27
- border: 1px solid rgba(var(--paragraph-color-rgb), 0.15);
32
+ border-radius: var(--radius);
33
+ border: 1px solid rgba(var(--paragraph-rgb), 0.15);
28
34
  box-shadow: none;
29
35
  }
30
36
 
31
37
  .fi__toggle {
32
38
  width: max-content;
33
- padding: 0px 10px 0px 0;
39
+ padding: 0 10px 0 0;
34
40
  box-sizing: border-box;
35
41
  display: inline;
36
42
  }
@@ -43,8 +49,10 @@
43
49
  }
44
50
  }
45
51
 
46
- .fwItem {
47
- flex-basis: 100%;
52
+ .fwItem,
53
+ .fwBuilderItem {
54
+ grid-column: 1 / -1;
55
+ width: 100%;
48
56
  }
49
57
 
50
58
  .lastItem {
@@ -72,16 +80,33 @@
72
80
  flex-wrap: wrap;
73
81
  }
74
82
 
83
+ .loginlogo {
84
+ display: block;
85
+ width: 100%;
86
+ max-width: 200px;
87
+ height: auto;
88
+ margin: 0 auto;
89
+ padding-bottom: 1rem;
90
+ }
91
+
92
+ .logincontainer {
93
+ width: 100%;
94
+ min-height: 100vh;
95
+ display: grid;
96
+ place-items: center;
97
+ padding: 1rem;
98
+ }
99
+
75
100
  .login {
76
101
  width: 35rem;
77
- height: auto;
78
102
  padding: 1rem;
79
103
  margin: 0;
80
- display: flex;
81
- flex-wrap: wrap;
104
+ display: grid;
105
+ grid-template-columns: 1fr;
106
+ gap: 0.5rem;
82
107
 
83
108
  > .formItem {
84
- padding: 0.25em 0;
109
+ padding: 0;
85
110
 
86
111
  small {
87
112
  position: absolute;
@@ -94,12 +119,11 @@
94
119
  }
95
120
 
96
121
  > .loginitem {
97
- width: 100%;
122
+ grid-column: 1 / -1;
98
123
  padding: 0.25em 0;
99
124
 
100
125
  label {
101
126
  width: 100%;
102
- padding-bottom: 0.25rem;
103
127
  }
104
128
 
105
129
  button {
@@ -108,27 +132,28 @@
108
132
  }
109
133
  }
110
134
 
111
- .forgotten {
112
- span {
113
- display: block;
114
- text-align: center;
115
- color: var(--paragraph-color);
116
- padding: 1rem 0;
135
+ .forgotten span {
136
+ display: block;
137
+ text-align: center;
138
+ color: var(--paragraph-color);
139
+ padding: 1rem 0;
117
140
 
118
- a {
119
- color: var(--highlight-color);
120
- text-decoration: none;
121
- }
141
+ a {
142
+ color: var(--secondary-color);
143
+ text-decoration: none;
122
144
  }
123
145
  }
124
146
 
125
147
  .lcontainer {
126
- --sidebar-width: 35%;
127
148
  min-height: 100vh;
149
+ display: flex;
150
+ align-items: center;
151
+ justify-content: center;
128
152
  }
129
153
 
130
154
  .lwrap {
131
- display: flex;
155
+ display: grid;
156
+ grid-template-columns: var(--sidebar-width) 1fr;
132
157
  }
133
158
 
134
159
  .aside {
@@ -139,53 +164,6 @@
139
164
  width: var(--sidebar-width);
140
165
  }
141
166
 
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
167
  .btn {
190
168
  width: max-content;
191
169
  display: inline-block;
@@ -207,9 +185,10 @@
207
185
  input:not(:placeholder-shown) + .fi__span,
208
186
  textarea:not(:placeholder-shown) + .fi__span,
209
187
  select:not(:placeholder-shown) + .fi__span {
210
- transform: translateY(-40%) translateX(10px) scale(0.75);
188
+ transform: translateY(-110%) translateX(10px) scale(0.75);
211
189
  opacity: 1;
212
- padding: 0 4px;
213
- background: var(--tertiary-color);
190
+ padding: 0;
191
+ background: var(--bg-color);
214
192
  font-weight: 300;
215
- }
193
+ transition: all 0.5s cubic-bezier(0.5, 0.5, 0, 1);
194
+ }
@@ -7,7 +7,7 @@ import {
7
7
  Navigate,
8
8
  Outlet,
9
9
  } from 'react-router-dom';
10
- import { ToastContainer } from 'react-toastify';
10
+ import { Flip, ToastContainer } from 'react-toastify';
11
11
  import { Tooltip } from 'react-tooltip';
12
12
  import 'react-tooltip/dist/react-tooltip.css';
13
13
  import 'react-toastify/dist/ReactToastify.css';
@@ -51,8 +51,11 @@ const GenericAuth = ({
51
51
  const updateAuthStatus = async () => {
52
52
  try {
53
53
  const { data } = await CustomFetch('/ajax/user/profile', 'GET');
54
- setUserProfile(data);
55
- setIsAuthenticated(true);
54
+
55
+ if (data && data.id) {
56
+ setUserProfile(data);
57
+ setIsAuthenticated(true);
58
+ }
56
59
  setIsLoading(false);
57
60
 
58
61
  if (location.pathname.split('/')[1] === 'login') {
@@ -134,9 +137,17 @@ const GenericAuth = ({
134
137
  </Route>
135
138
  </Routes>
136
139
  <ToastContainer
137
- theme="light"
138
- position="bottom-center"
139
- style={{ width: '600px' }}
140
+ position="bottom-right"
141
+ autoClose={7000}
142
+ hideProgressBar={false}
143
+ newestOnTop
144
+ closeOnClick
145
+ rtl={false}
146
+ pauseOnFocusLoss
147
+ draggable={false}
148
+ pauseOnHover
149
+ theme="dark"
150
+ transition={Flip}
140
151
  />
141
152
  <Tooltip id="system-tooltip" />
142
153
  </>