@visns-studio/visns-components 4.3.11 → 4.4.0

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.
@@ -7,7 +7,7 @@ import {
7
7
  Briefcase,
8
8
  Bug,
9
9
  Calendar,
10
- CHatDots,
10
+ ChatDots,
11
11
  Clipboard,
12
12
  DoubleSword,
13
13
  Draft,
@@ -39,11 +39,11 @@ import {
39
39
  TextAlignLeft,
40
40
  Ticket,
41
41
  Utensils,
42
- ChatDots,
43
42
  } from 'akar-icons';
44
-
45
43
  import CustomFetch from './Fetch';
46
44
  import Notification from './Notification';
45
+ import classNames from 'classnames';
46
+ import styles from './styles/Navigation.module.css';
47
47
 
48
48
  function Navigation({
49
49
  children,
@@ -57,10 +57,13 @@ function Navigation({
57
57
  const location = useLocation();
58
58
  const navigate = useNavigate();
59
59
  const currentPage = location.pathname.substr(1) || 'dashboard';
60
- const [isOpen, setOpen] = useState('false');
60
+ const [isOpen, setOpen] = useState(false);
61
61
  const [isScrolled, setIsScrolled] = useState(false);
62
62
  const [navData, setNavData] = useState(navConfig);
63
- const appNavClasses = `app-nav ${isScrolled ? 'navscrolled' : ''}`;
63
+
64
+ const appNavClasses = classNames(styles['app-nav'], {
65
+ [styles['navscrolled']]: isScrolled,
66
+ });
64
67
 
65
68
  const handleLogout = () => {
66
69
  CustomFetch('/logout', 'GET', {}, () => {
@@ -150,7 +153,7 @@ function Navigation({
150
153
  questionFill: QuestionFill,
151
154
  settingsVertical: SettingsVertical,
152
155
  signOut: SignOut,
153
- shippingboxv1: ShippingBoxV1,
156
+ shippingBoxV1: ShippingBoxV1,
154
157
  statisticUp: StatisticUp,
155
158
  textAlignLeft: TextAlignLeft,
156
159
  ticket: Ticket,
@@ -158,16 +161,19 @@ function Navigation({
158
161
  };
159
162
 
160
163
  const IconComponent = iconComponents[n.icon];
164
+ const navItemClasses = classNames(
165
+ n.class.split(' ').map((cls) => styles[cls])
166
+ );
161
167
 
162
168
  const renderChildren = () => {
163
169
  if (n.children && n.children.length > 0) {
164
170
  return (
165
- <ul>
171
+ <ul className={styles.subnav}>
166
172
  {n.children.map(
167
173
  (child, childKey) =>
168
174
  child.permission === true && (
169
175
  <li
170
- className="sub-nav-item"
176
+ className={styles['sub-nav-item']}
171
177
  key={`nav-child-${childKey}`}
172
178
  >
173
179
  <Link
@@ -186,7 +192,7 @@ function Navigation({
186
192
  };
187
193
 
188
194
  return (
189
- <li className={n.class}>
195
+ <li className={navItemClasses}>
190
196
  {n.url ? (
191
197
  <Link to={n.url}>
192
198
  <IconComponent strokeWidth={2} size={18} />
@@ -231,7 +237,6 @@ function Navigation({
231
237
  const matchingPermission = permissions.includes(
232
238
  nav.permissionKey
233
239
  );
234
-
235
240
  return {
236
241
  ...nav,
237
242
  permission: matchingPermission,
@@ -250,7 +255,6 @@ function Navigation({
250
255
  const matchingPermission = permissions.includes(
251
256
  nav.permissionKey
252
257
  );
253
-
254
258
  return {
255
259
  ...nav,
256
260
  permission: matchingPermission,
@@ -281,14 +285,12 @@ function Navigation({
281
285
  useEffect(() => {
282
286
  setNavData((prevNavData) => {
283
287
  const updateNavItems = (nav) => {
284
- const cleanUrl = (url) => {
285
- return url && url.startsWith('/')
288
+ const cleanUrl = (url) =>
289
+ url && url.startsWith('/')
286
290
  ? url.substr(1).split('/')[0]
287
291
  : url
288
292
  ? url.split('/')[0]
289
293
  : '';
290
- };
291
-
292
294
  const currentUrl = cleanUrl(currentPage);
293
295
  const navUrl = nav.url
294
296
  ? cleanUrl(nav.url)
@@ -325,8 +327,6 @@ function Navigation({
325
327
  return () => {
326
328
  window.removeEventListener('scroll', handleScroll);
327
329
  };
328
-
329
- console.info(layout);
330
330
  }, []);
331
331
 
332
332
  return layout === 'simple' || layout === 'cms' ? (
@@ -338,7 +338,7 @@ function Navigation({
338
338
  >
339
339
  <div className="logo">
340
340
  <Link to="/">
341
- <img src={logo} alt="Visns Studio CRM" />
341
+ <img src={logo} alt="System Logo" />
342
342
  </Link>
343
343
  </div>
344
344
  <div className="awrap">
@@ -364,9 +364,7 @@ function Navigation({
364
364
  className={
365
365
  isOpen ? 'mobmenu' : 'mobmenu mobmenu--open'
366
366
  }
367
- onClick={() => {
368
- setOpen(!isOpen);
369
- }}
367
+ onClick={() => setOpen(!isOpen)}
370
368
  >
371
369
  <span></span>
372
370
  <span></span>
@@ -394,38 +392,35 @@ function Navigation({
394
392
  </main>
395
393
  </div>
396
394
  ) : (
397
- <header className="header">
398
- <div className="hwrap">
399
- <div className="logo">
400
- <Link to="/">
401
- <img src={logo} alt="Visns Studio CRM" />
402
- </Link>
403
- </div>
404
- <div className="navwrap">
405
- <ul className={appNavClasses}>
406
- {navData.navigations.map((nav, navKey) =>
407
- nav.permission === true ||
408
- nav.permissionKey === '' ? (
409
- <React.Fragment key={`nav-item-${navKey}`}>
410
- {renderNav(nav)}
411
- </React.Fragment>
412
- ) : null
413
- )}
414
- </ul>
415
- </div>
416
- <div className="hactions">
417
- <ul>
418
- {navData.settings.map((setting, settingKey) =>
419
- setting.permission === true ? (
420
- <React.Fragment key={`setting-${settingKey}`}>
421
- {renderSetting(setting)}
422
- </React.Fragment>
423
- ) : null
424
- )}
425
- </ul>
426
- </div>
395
+ <div className={styles.hwrap}>
396
+ <div className={styles.logo}>
397
+ <Link to="/">
398
+ <img src={logo} alt="System Logo" />
399
+ </Link>
400
+ </div>
401
+ <div className={styles.navwrap}>
402
+ <ul className={appNavClasses}>
403
+ {navData.navigations.map((nav, navKey) =>
404
+ nav.permission === true || nav.permissionKey === '' ? (
405
+ <React.Fragment key={`nav-item-${navKey}`}>
406
+ {renderNav(nav)}
407
+ </React.Fragment>
408
+ ) : null
409
+ )}
410
+ </ul>
427
411
  </div>
428
- </header>
412
+ <div className={styles.hactions}>
413
+ <ul>
414
+ {navData.settings.map((setting, settingKey) =>
415
+ setting.permission === true ? (
416
+ <React.Fragment key={`setting-${settingKey}`}>
417
+ {renderSetting(setting)}
418
+ </React.Fragment>
419
+ ) : null
420
+ )}
421
+ </ul>
422
+ </div>
423
+ </div>
429
424
  );
430
425
  }
431
426
 
@@ -2,22 +2,15 @@ import React, { useState, useEffect, useRef } from 'react';
2
2
  import { useNavigate } from 'react-router-dom';
3
3
  import moment from 'moment';
4
4
  import parse from 'html-react-parser';
5
- import { TooltipWrapper } from 'react-tooltip';
6
5
  import { toast } from 'react-toastify';
7
6
  import { Bell, CircleX } from 'akar-icons';
8
-
9
7
  import CustomFetch from './Fetch';
8
+ import styles from './styles/Notification.module.css';
10
9
 
11
10
  function Notification(props) {
12
11
  let interval;
13
12
  const navigate = useNavigate();
14
13
  const wrapperRef = useRef(null);
15
- const [containerClass] = useState('notibox');
16
- const [divClass] = useState('notibox-item');
17
- const [iconBellBlinkClass] = useState('cis-bell-exclamation noti');
18
- const [iconBellClass] = useState('cis-bell-exclamation');
19
- const [iconXClass] = useState('cis-x-circle noti-read');
20
- const [actionClass] = useState('notibox-actions');
21
14
  const [items, setItems] = useState([]);
22
15
  const [show, setShow] = useState(false);
23
16
  const { setSystemAuth } = props;
@@ -37,7 +30,6 @@ function Notification(props) {
37
30
  if (error === 'Unauthenticated.') {
38
31
  setSystemAuth(false);
39
32
  }
40
-
41
33
  toast.error(String(error));
42
34
  }
43
35
  }
@@ -62,9 +54,7 @@ function Notification(props) {
62
54
  setItems(array);
63
55
  }
64
56
 
65
- let formData = {
66
- id: id,
67
- };
57
+ let formData = { id: id };
68
58
 
69
59
  CustomFetch(
70
60
  '/ajax/user/notification/markasread',
@@ -82,30 +72,22 @@ function Notification(props) {
82
72
  let array = items;
83
73
  setItems([]);
84
74
 
85
- {
86
- array.map((item) => {
87
- let formData = {
88
- id: item.id,
89
- };
90
-
91
- CustomFetch(
92
- '/ajax/user/notification/markasread',
93
- 'POST',
94
- formData,
95
- function () {
96
- fetchNotification();
97
- }
98
- );
99
- });
100
- }
75
+ array.map((item) => {
76
+ let formData = { id: item.id };
77
+
78
+ CustomFetch(
79
+ '/ajax/user/notification/markasread',
80
+ 'POST',
81
+ formData,
82
+ function () {
83
+ fetchNotification();
84
+ }
85
+ );
86
+ });
101
87
  };
102
88
 
103
89
  const toggleNotification = () => {
104
- if (show === false) {
105
- setShow(true);
106
- } else {
107
- setShow(false);
108
- }
90
+ setShow(!show);
109
91
  };
110
92
 
111
93
  const showAllNotifications = () => {
@@ -126,8 +108,7 @@ function Notification(props) {
126
108
 
127
109
  return function cleanup() {
128
110
  clearInterval(interval);
129
-
130
- document.addEventListener('mousedown', handleClick, false);
111
+ document.removeEventListener('mousedown', handleClick, false);
131
112
  };
132
113
  }, []);
133
114
 
@@ -143,22 +124,29 @@ function Notification(props) {
143
124
  size={19}
144
125
  strokeWidth={2}
145
126
  className={
146
- items.length > 0 ? iconBellBlinkClass : iconBellClass
127
+ items.length > 0
128
+ ? styles.noti
129
+ : styles['cis-bell-exclamation']
147
130
  }
148
131
  />
149
132
  </a>
150
133
 
151
- {show === true ? (
134
+ {show && (
152
135
  <div ref={wrapperRef}>
153
136
  {items.length > 0 ? (
154
- <div className={containerClass}>
155
- <div className="notiscrollwrap">
137
+ <div className={styles.notibox}>
138
+ <div className={styles.notiscrollwrap}>
156
139
  {items.map((item, index) => (
157
- <div className={divClass} key={item.id}>
140
+ <div
141
+ className={styles['notibox-item']}
142
+ key={item.id}
143
+ >
158
144
  <Bell
159
145
  size={19}
160
146
  strokeWidth={2}
161
- className={iconBellClass}
147
+ className={
148
+ styles.cisBellExclamation
149
+ }
162
150
  />{' '}
163
151
  {parse(item.data.label)}{' '}
164
152
  <span>
@@ -173,13 +161,13 @@ function Notification(props) {
173
161
  size={24}
174
162
  data-id={item.id}
175
163
  data-index={index}
176
- className={iconXClass}
164
+ className={styles.notiRead}
177
165
  />
178
166
  </button>
179
167
  </div>
180
168
  ))}
181
169
  </div>
182
- <div className={actionClass}>
170
+ <div className={styles['notibox-actions']}>
183
171
  <button onClick={showAllNotifications}>
184
172
  View All
185
173
  </button>
@@ -189,11 +177,11 @@ function Notification(props) {
189
177
  </div>
190
178
  </div>
191
179
  ) : (
192
- <div className={containerClass}>
193
- <div className={divClass}>
180
+ <div className={styles.notibox}>
181
+ <div className={styles['notibox-item']}>
194
182
  No new notifications available.
195
183
  </div>
196
- <div className={actionClass}>
184
+ <div className={styles['notibox-actions']}>
197
185
  <button onClick={showAllNotifications}>
198
186
  View All
199
187
  </button>
@@ -201,8 +189,6 @@ function Notification(props) {
201
189
  </div>
202
190
  )}
203
191
  </div>
204
- ) : (
205
- <div></div>
206
192
  )}
207
193
  </>
208
194
  );
@@ -691,7 +691,16 @@ select:not(:placeholder-shown) + .fi__span {
691
691
  padding: 0;
692
692
  }
693
693
 
694
- .contentTable th,
694
+ .contentTable th {
695
+ font-size: 0.95em;
696
+ padding: 8px 15px;
697
+ color: var(--table-text-color, var(--paragraph-color));
698
+ border-right: 1px solid var(--table-border);
699
+ line-height: 1;
700
+ border-spacing: 0;
701
+ border-collapse: collapse;
702
+ }
703
+
695
704
  .contentTable td {
696
705
  font-size: 0.95em;
697
706
  padding: 8px 15px;
@@ -176,8 +176,7 @@ input[type='file']:hover {
176
176
  padding: 0;
177
177
  }
178
178
 
179
- .contentTable th,
180
- .contentTable td {
179
+ .contentTable th {
181
180
  font-size: 0.95em;
182
181
  padding: 8px 15px;
183
182
  color: var(--table-text-color, var(--paragraph-color));
@@ -187,6 +186,16 @@ input[type='file']:hover {
187
186
  border-collapse: collapse;
188
187
  }
189
188
 
189
+ .contentTable td {
190
+ font-size: 0.95em;
191
+ padding: 8px 15px;
192
+ color: var(--paragraph-color);
193
+ border-right: 1px solid var(--table-border);
194
+ line-height: 1;
195
+ border-spacing: 0;
196
+ border-collapse: collapse;
197
+ }
198
+
190
199
  .contentTable th:last-of-type,
191
200
  .contentTable td:last-of-type,
192
201
  .contentTable th:last-child,
@@ -0,0 +1,260 @@
1
+ .hwrap {
2
+ width: 100%;
3
+ display: flex;
4
+ align-items: center;
5
+ }
6
+
7
+ .hwrap .logo {
8
+ width: 100px;
9
+ padding: 0 1rem 0 0.5rem;
10
+ margin: 0;
11
+ line-height: 1.45;
12
+ }
13
+
14
+ .hwrap .logo img {
15
+ width: 100%;
16
+ max-width: 80px;
17
+ height: auto;
18
+ display: block;
19
+ margin: 0 auto;
20
+ }
21
+
22
+ .branding {
23
+ margin: 0;
24
+ padding: 0;
25
+ font-weight: 700;
26
+ letter-spacing: -1px;
27
+ text-align: center;
28
+ }
29
+
30
+ .branding .highlight {
31
+ color: white;
32
+ }
33
+
34
+ .branding .light {
35
+ font-weight: 300;
36
+ color: var(--secondary-color);
37
+ }
38
+
39
+ .navwrap {
40
+ flex: 1;
41
+ }
42
+
43
+ .app-nav {
44
+ display: flex;
45
+ flex-wrap: nowrap;
46
+ flex-direction: row;
47
+ padding: 0.85rem 0;
48
+ margin: 0;
49
+ list-style: none;
50
+ align-items: center;
51
+ }
52
+
53
+ .nav-item {
54
+ cursor: pointer;
55
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
56
+ box-sizing: border-box;
57
+ position: relative;
58
+ }
59
+
60
+ .nav-item a {
61
+ display: flex;
62
+ flex-wrap: nowrap;
63
+ align-items: center;
64
+ gap: 0.25rem;
65
+ color: var(--tertiary-color);
66
+ box-sizing: border-box;
67
+ padding: 0.5em;
68
+ margin: 0 0.25em;
69
+ text-decoration: none;
70
+ background: var(--primary-color);
71
+ outline: none;
72
+ border-radius: var(--br);
73
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
74
+ }
75
+
76
+ .nav-item a svg {
77
+ color: var(--secondary-color);
78
+ display: block;
79
+ width: 100%;
80
+ max-width: 15px;
81
+ height: auto;
82
+ position: relative;
83
+ }
84
+
85
+ .nav-item:hover a,
86
+ .nav-item.active a {
87
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
88
+ background: var(--primary-color-lighter);
89
+ color: var(--tertiary-color);
90
+ }
91
+
92
+ .nav-item:hover a svg,
93
+ .nav-item.active a svg {
94
+ color: var(--secondary-color);
95
+ }
96
+
97
+ .nav-item:hover ul,
98
+ .nav-item.active ul {
99
+ opacity: 1;
100
+ }
101
+
102
+ .nav-item:hover ul {
103
+ display: block;
104
+ }
105
+
106
+ .nav-item.active a,
107
+ .nav-item.active span {
108
+ background: var(--primary-color-lighter);
109
+ color: var(--tertiary-color);
110
+ }
111
+
112
+ .nav-item span svg {
113
+ color: var(--secondary-color);
114
+ }
115
+
116
+ .nav-item.active a svg,
117
+ .nav-item.active span svg {
118
+ color: var(--secondary-color);
119
+ }
120
+
121
+ .nav-item span {
122
+ display: flex;
123
+ flex-wrap: nowrap;
124
+ align-items: center;
125
+ gap: 0.25rem;
126
+ color: var(--tertiary-color);
127
+ box-sizing: border-box;
128
+ padding: 0.5em;
129
+ line-height: 1.25;
130
+ text-decoration: none;
131
+ background: var(--primary-color);
132
+ border-radius: var(--br);
133
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
134
+ }
135
+
136
+ .nav-item span:hover {
137
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
138
+ background: var(--primary-color-lighter);
139
+ color: var(--tertiary-color);
140
+ }
141
+
142
+ .nav-item span:hover svg {
143
+ color: var(--secondary-color);
144
+ }
145
+
146
+ .nav-item ul {
147
+ width: 200px;
148
+ position: absolute;
149
+ height: auto;
150
+ margin: 0;
151
+ padding: 0;
152
+ list-style: none;
153
+ display: none;
154
+ opacity: 0;
155
+ background: rgba(var(--primary-color-rgb), 0.75);
156
+ border-radius: 5px;
157
+ }
158
+
159
+ .nav-item ul li {
160
+ display: block;
161
+ position: relative;
162
+ margin: 1px 0;
163
+ }
164
+
165
+ .nav-item ul li:last-of-type {
166
+ margin-bottom: 0;
167
+ }
168
+
169
+ .nav-item ul li a {
170
+ width: 100%;
171
+ padding: 8px 20px;
172
+ box-sizing: border-box;
173
+ display: block;
174
+ text-decoration: none;
175
+ background: rgba(var(--primary-color-rgb), 0.9);
176
+ color: var(--tertiary-color);
177
+ border-radius: 3px;
178
+ transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
179
+ outline: none;
180
+ margin: 0;
181
+ }
182
+
183
+ .nav-item ul li:hover a {
184
+ background: rgba(var(--primary-color-rgb), 0.8);
185
+ color: var(--highlight-color);
186
+ transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
187
+ }
188
+
189
+ .navscrolled .nav-item a {
190
+ padding: 0.25em 1em;
191
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
192
+ }
193
+
194
+ .navscrolled .nav-item span {
195
+ padding: 0.25em 1em;
196
+ transition: all 0.15s cubic-bezier(0.25, 0.8, 0.25, 1);
197
+ }
198
+
199
+ .hactions > ul {
200
+ list-style: none;
201
+ display: flex;
202
+ padding: 0 1rem 0 0;
203
+ margin: 0;
204
+ flex-wrap: nowrap;
205
+ flex-direction: row;
206
+ align-items: center;
207
+ justify-content: center;
208
+ }
209
+
210
+ .hactions > ul li {
211
+ margin: 0 5px;
212
+ }
213
+
214
+ .hactions > ul a {
215
+ color: var(--tertiary-color);
216
+ box-sizing: border-box;
217
+ padding: 0.35rem;
218
+ text-decoration: none;
219
+ background: none;
220
+ border: 2px solid var(--primary-color-lighter);
221
+ border-radius: 100%;
222
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
223
+ display: flex;
224
+ align-items: center;
225
+ }
226
+
227
+ .hactions > ul a:hover {
228
+ background: var(--primary-color-lighter);
229
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
230
+ }
231
+
232
+ .hactions > ul a:hover svg {
233
+ color: var(--highlight-color);
234
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
235
+ }
236
+
237
+ .hactions button {
238
+ color: var(--tertiary-color);
239
+ box-sizing: border-box;
240
+ padding: 0.35rem;
241
+ text-decoration: none;
242
+ background: none;
243
+ border: 1px solid var(--primary-color-lighter);
244
+ border-radius: 100%;
245
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
246
+ display: flex;
247
+ align-items: center;
248
+ outline: none;
249
+ appearance: none;
250
+ }
251
+
252
+ .hactions button:hover {
253
+ background: var(--primary-color-lighter);
254
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
255
+ }
256
+
257
+ .hactions button:hover svg {
258
+ color: var(--highlight-color);
259
+ transition: all 0.65s cubic-bezier(0.25, 0.8, 0.25, 1);
260
+ }
@@ -0,0 +1,129 @@
1
+ .notibox {
2
+ background: #fff;
3
+ border: 1px solid var(--primary-color-lighter);
4
+ border-top-color: rgb(204, 204, 204);
5
+ border-right-color: rgb(204, 204, 204);
6
+ border-bottom-color: rgb(204, 204, 204);
7
+ border-left-color: rgb(204, 204, 204);
8
+ border-color: rgba(0, 0, 0, 0.2);
9
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
10
+ display: block;
11
+ opacity: 1;
12
+ outline: none;
13
+ overflow: hidden;
14
+ position: absolute;
15
+ padding: 6px;
16
+ border-radius: var(--br);
17
+ width: 550px;
18
+ overflow-y: scroll;
19
+ transform: translateX(-470px);
20
+ text-align: left;
21
+ color: var(--paragraph-color);
22
+ box-sizing: border-box;
23
+ transition: all 0.25s cubic-bezier(0.25, 0.8, 0.25, 1);
24
+ z-index: 999;
25
+ }
26
+
27
+ .notibox .notiscrollwrap {
28
+ max-height: 190px;
29
+ overflow-y: auto;
30
+ }
31
+
32
+ .notibox .notibox-item {
33
+ width: 100%;
34
+ display: block;
35
+ background: #f0f0f0;
36
+ border-radius: var(--br);
37
+ padding: 9px 36px 8px 6px;
38
+ box-sizing: border-box;
39
+ margin-bottom: 4px;
40
+ position: relative;
41
+ }
42
+
43
+ .notibox .notibox-item span {
44
+ color: var(--paragraph-color);
45
+ font-size: 80%;
46
+ }
47
+
48
+ .notibox .notibox-item > button {
49
+ position: absolute;
50
+ right: 6px;
51
+ top: 5px;
52
+ cursor: pointer;
53
+ padding: 0;
54
+ margin: 0;
55
+ outline: none;
56
+ background: none;
57
+ border: none;
58
+ }
59
+
60
+ .notibox .notibox-item > button svg {
61
+ width: 100%;
62
+ max-width: 20px;
63
+ }
64
+
65
+ .notibox .notibox-item .noti-read {
66
+ color: var(--primary-color);
67
+ }
68
+
69
+ .notibox .notibox-item .cis-bell-exclamation {
70
+ display: none;
71
+ visibility: hidden;
72
+ }
73
+
74
+ .notibox .notibox-actions {
75
+ width: 100%;
76
+ display: block;
77
+ border-top: 1px solid darken(#f0f0f0, 5%);
78
+ padding: 10px 0 5px 0;
79
+ margin-top: 10px;
80
+ }
81
+
82
+ .notibox .notibox-actions button {
83
+ display: inline-block;
84
+ border-radius: 6px;
85
+ border: 1px solid var(--primary-color-lighter);
86
+ margin-right: 5px;
87
+ padding: 8px;
88
+ font-size: 0.875em;
89
+ outline: none;
90
+ color: var(--tertiary-color);
91
+ background: var(--primary-color);
92
+ }
93
+
94
+ .notilink {
95
+ background: none;
96
+ padding: 0;
97
+ line-height: inherit;
98
+ border-radius: 0;
99
+ color: inherit;
100
+ display: inline;
101
+ text-decoration: underline;
102
+ border: none;
103
+ font-weight: 700;
104
+ text-decoration: none;
105
+ }
106
+
107
+ .notilink:hover {
108
+ background: none;
109
+ color: var(--secondary-color);
110
+ }
111
+
112
+ .noti {
113
+ animation: notification 1s infinite;
114
+ }
115
+
116
+ @keyframes notification {
117
+ 0% {
118
+ color: var(--secondary-color);
119
+ opacity: 0;
120
+ }
121
+ 50% {
122
+ color: #c0ff52;
123
+ opacity: 1;
124
+ }
125
+ 100% {
126
+ color: var(--secondary-color);
127
+ opacity: 0;
128
+ }
129
+ }
package/package.json CHANGED
@@ -57,7 +57,7 @@
57
57
  "react-dom": "^17.0.1"
58
58
  },
59
59
  "name": "@visns-studio/visns-components",
60
- "version": "4.3.11",
60
+ "version": "4.4.0",
61
61
  "description": "Various packages to assist in the development of our Custom Applications.",
62
62
  "main": "index.js",
63
63
  "scripts": {