@visns-studio/visns-components 5.14.7 → 5.14.8

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.
package/package.json CHANGED
@@ -88,7 +88,7 @@
88
88
  "react-dom": "^17.0.0 || ^18.0.0"
89
89
  },
90
90
  "name": "@visns-studio/visns-components",
91
- "version": "5.14.7",
91
+ "version": "5.14.8",
92
92
  "description": "Various packages to assist in the development of our Custom Applications.",
93
93
  "main": "src/index.js",
94
94
  "files": [
@@ -3719,9 +3719,9 @@ const DataGrid = forwardRef(
3719
3719
  onClose={modalClose}
3720
3720
  closeOnDocumentClick={false}
3721
3721
  contentStyle={{
3722
- width: windowWidth < 768 ? '95vw' : '80vw',
3722
+ width: windowWidth < 768 ? '95vw' : '90vw',
3723
3723
  minWidth: windowWidth < 768 ? '95vw' : '600px',
3724
- maxWidth: '1200px',
3724
+ maxWidth: '1400px',
3725
3725
  ...(formData.verticalAlign === 'top' && {
3726
3726
  position: 'fixed',
3727
3727
  top: '5vh',
@@ -242,7 +242,7 @@ function GenericDetail({
242
242
 
243
243
  /** Fileupload states */
244
244
  const [files, setFiles] = useState([]);
245
-
245
+
246
246
  // Debug logging for files state changes
247
247
  useEffect(() => {
248
248
  console.log('GenericDetail: Files state changed:', {
@@ -250,7 +250,7 @@ function GenericDetail({
250
250
  filesCount: files ? files.length : 0,
251
251
  filesType: typeof files,
252
252
  isArray: Array.isArray(files),
253
- firstFile: files && files.length > 0 ? files[0] : null
253
+ firstFile: files && files.length > 0 ? files[0] : null,
254
254
  });
255
255
  }, [files]);
256
256
  const [loadingProgress, setLoadingProgress] = useState(0);
@@ -275,6 +275,16 @@ function GenericDetail({
275
275
  const [lightboxOpen, setLightboxOpen] = useState(false);
276
276
  const [lightboxIndex, setLightboxIndex] = useState(0);
277
277
 
278
+ /** Window Width State for Responsive Modal */
279
+ const [windowWidth, setWindowWidth] = useState(window.innerWidth);
280
+
281
+ // Handle window resize for responsive modal
282
+ useEffect(() => {
283
+ const handleResize = () => setWindowWidth(window.innerWidth);
284
+ window.addEventListener('resize', handleResize);
285
+ return () => window.removeEventListener('resize', handleResize);
286
+ }, []);
287
+
278
288
  // Gallery modal close function
279
289
  const modalGalleryClose = () => {
280
290
  setModalGalleryShow(false);
@@ -1437,7 +1447,7 @@ function GenericDetail({
1437
1447
  return renderLink();
1438
1448
  case 'ocrTemplate':
1439
1449
  return (
1440
- <OcrTemplateEnhanced
1450
+ <OcrTemplateEnhanced
1441
1451
  id={id}
1442
1452
  data={data}
1443
1453
  setData={setData}
@@ -1754,14 +1764,20 @@ function GenericDetail({
1754
1764
  // Helper function to get nested object value using dot notation
1755
1765
  const getNestedValue = (obj, path) => {
1756
1766
  if (!obj || !path) return null;
1757
- return path.split('.').reduce((current, key) => {
1758
- return current && current[key] !== undefined ? current[key] : null;
1759
- }, obj);
1767
+ return path
1768
+ .split('.')
1769
+ .reduce((current, key) => {
1770
+ return current &&
1771
+ current[key] !== undefined
1772
+ ? current[key]
1773
+ : null;
1774
+ }, obj);
1760
1775
  };
1761
1776
 
1762
1777
  // Extract files using nested key support
1763
- const files = activeTabConfig.key
1764
- ? getNestedValue(data, activeTabConfig.key) || []
1778
+ const files = activeTabConfig.key
1779
+ ? getNestedValue(data, activeTabConfig.key) ||
1780
+ []
1765
1781
  : [];
1766
1782
 
1767
1783
  const downloadFile = (file) => {
@@ -1874,7 +1890,9 @@ function GenericDetail({
1874
1890
 
1875
1891
  // Create a fetchData function that refetches the main data
1876
1892
  const handleFetchData = () => {
1877
- console.log('GenericDetail: DropZone fetchData called, refetching main data...');
1893
+ console.log(
1894
+ 'GenericDetail: DropZone fetchData called, refetching main data...'
1895
+ );
1878
1896
  setDataReload(!dataReload);
1879
1897
  };
1880
1898
 
@@ -1889,20 +1907,38 @@ function GenericDetail({
1889
1907
  fetchData={handleFetchData}
1890
1908
  files={files}
1891
1909
  settings={{
1892
- url: replaceDropzoneUrlParams(activeTabConfig.url),
1910
+ url: replaceDropzoneUrlParams(
1911
+ activeTabConfig.url
1912
+ ),
1893
1913
  method: 'PUT',
1894
- type: activeTabConfig.filetype === 'image' ? 'gallery' : 'list',
1914
+ type:
1915
+ activeTabConfig.filetype ===
1916
+ 'image'
1917
+ ? 'gallery'
1918
+ : 'list',
1895
1919
  data: {
1896
- file_relationship: activeTabConfig.file_relationship,
1920
+ file_relationship:
1921
+ activeTabConfig.file_relationship,
1897
1922
  },
1898
- folder: activeTabConfig.folder || 'uploads',
1923
+ folder:
1924
+ activeTabConfig.folder ||
1925
+ 'uploads',
1899
1926
  filetype: activeTabConfig.filetype,
1900
- deleteUrl: replaceDropzoneUrlParams(activeTabConfig.deleteUrl) || '/ajax/files/delete',
1927
+ deleteUrl:
1928
+ replaceDropzoneUrlParams(
1929
+ activeTabConfig.deleteUrl
1930
+ ) || '/ajax/files/delete',
1901
1931
  showDescription: true,
1902
1932
  }}
1903
- url={replaceDropzoneUrlParams(activeTabConfig.url)}
1933
+ url={replaceDropzoneUrlParams(
1934
+ activeTabConfig.url
1935
+ )}
1904
1936
  urlKey={activeTabConfig.urlKey}
1905
- deleteUrl={replaceDropzoneUrlParams(activeTabConfig.deleteUrl) || '/ajax/files/delete'}
1937
+ deleteUrl={
1938
+ replaceDropzoneUrlParams(
1939
+ activeTabConfig.deleteUrl
1940
+ ) || '/ajax/files/delete'
1941
+ }
1906
1942
  entityData={data}
1907
1943
  routeParams={routeParams}
1908
1944
  dataKey={activeTabConfig.key}
@@ -2623,19 +2659,27 @@ function GenericDetail({
2623
2659
  className={
2624
2660
  item.size ===
2625
2661
  'full'
2626
- ? item.type === 'ocrTemplate'
2627
- ? styles['fw-grid-item']
2662
+ ? item.type ===
2663
+ 'ocrTemplate'
2664
+ ? styles[
2665
+ 'fw-grid-item'
2666
+ ]
2628
2667
  : `${styles['fw-grid-item']} ${styles.notecolor}`
2629
2668
  : null
2630
2669
  }
2631
2670
  >
2632
- {item.type !== 'ocrTemplate' && (
2671
+ {item.type !==
2672
+ 'ocrTemplate' && (
2633
2673
  <strong>
2634
2674
  {item.label
2635
2675
  ? `${item.label}:`
2636
2676
  : null}
2637
2677
  </strong>
2638
- )}{item.type !== 'ocrTemplate' ? ' ' : ''}
2678
+ )}
2679
+ {item.type !==
2680
+ 'ocrTemplate'
2681
+ ? ' '
2682
+ : ''}
2639
2683
  {item
2640
2684
  .href
2641
2685
  ?.url &&
@@ -3792,8 +3836,9 @@ function GenericDetail({
3792
3836
  onClose={modalClose}
3793
3837
  closeOnDocumentClick={false}
3794
3838
  contentStyle={{
3795
- width: '80vw',
3796
- maxWidth: '1200px',
3839
+ width: windowWidth < 768 ? '95vw' : '90vw',
3840
+ minWidth: windowWidth < 768 ? '95vw' : '600px',
3841
+ maxWidth: '1400px',
3797
3842
  ...(formData.verticalAlign === 'top' && {
3798
3843
  position: 'fixed',
3799
3844
  top: '5vh',
@@ -3804,13 +3849,15 @@ function GenericDetail({
3804
3849
  }}
3805
3850
  >
3806
3851
  <div
3807
- className={`modalwrap top--modal modalWide ${
3852
+ className={`${styles.modalwrap} ${
3853
+ styles['top--modal']
3854
+ } ${styles.modalWide} ${
3808
3855
  formData.verticalAlign === 'top'
3809
3856
  ? 'modal-top-aligned'
3810
3857
  : ''
3811
3858
  }`}
3812
3859
  >
3813
- <div className="modal">
3860
+ <div className={styles.modal}>
3814
3861
  <Form
3815
3862
  closeModal={modalClose}
3816
3863
  columnId={formId}
@@ -19,16 +19,20 @@ import GenericReportForm from './GenericReportForm';
19
19
 
20
20
  import styles from '../styles/GenericIndex.module.scss';
21
21
 
22
- function useWindowHeight() {
22
+ function useWindowDimensions() {
23
23
  const [windowHeight, setWindowHeight] = useState(window.innerHeight);
24
+ const [windowWidth, setWindowWidth] = useState(window.innerWidth);
24
25
 
25
26
  useEffect(() => {
26
- const handleResize = () => setWindowHeight(window.innerHeight);
27
+ const handleResize = () => {
28
+ setWindowHeight(window.innerHeight);
29
+ setWindowWidth(window.innerWidth);
30
+ };
27
31
  window.addEventListener('resize', handleResize);
28
32
  return () => window.removeEventListener('resize', handleResize);
29
33
  }, []);
30
34
 
31
- return windowHeight;
35
+ return { windowHeight, windowWidth };
32
36
  }
33
37
 
34
38
  function useConfig(setting, tabs, filters, setRowsSelected, tableSetting) {
@@ -236,7 +240,7 @@ function GenericIndex({
236
240
  const [customActionModalShow, setCustomActionModalShow] = useState(false);
237
241
  const [customActionFormData, setCustomActionFormData] = useState({});
238
242
  const [customActionConfig, setCustomActionConfig] = useState(null);
239
- const windowHeight = useWindowHeight();
243
+ const { windowHeight, windowWidth } = useWindowDimensions();
240
244
  const { config, setConfig, subnav, setSubnav } = useConfig(
241
245
  setting,
242
246
  setting.tabs,
@@ -1007,8 +1011,9 @@ function GenericIndex({
1007
1011
  onClose={closeCustomActionModal}
1008
1012
  closeOnDocumentClick={false}
1009
1013
  contentStyle={{
1010
- width: '80vw',
1011
- maxWidth: '1200px',
1014
+ width: windowWidth < 768 ? '95vw' : '90vw',
1015
+ minWidth: windowWidth < 768 ? '95vw' : '600px',
1016
+ maxWidth: '1400px',
1012
1017
  ...(customActionFormData.verticalAlign === 'top' && {
1013
1018
  position: 'fixed',
1014
1019
  top: '5vh',
@@ -1019,13 +1024,15 @@ function GenericIndex({
1019
1024
  }}
1020
1025
  >
1021
1026
  <div
1022
- className={`modalwrap top--modal modalWide ${
1027
+ className={`${styles.modalwrap} ${
1028
+ styles['top--modal']
1029
+ } ${styles.modalWide} ${
1023
1030
  customActionFormData.verticalAlign === 'top'
1024
1031
  ? 'modal-top-aligned'
1025
1032
  : ''
1026
1033
  }`}
1027
1034
  >
1028
- <div className="modal">
1035
+ <div className={styles.modal}>
1029
1036
  <Form
1030
1037
  closeModal={closeCustomActionModal}
1031
1038
  formSettings={customActionFormData}
@@ -1,13 +1,11 @@
1
1
  import React, { useState, useCallback } from 'react';
2
- import { useNavigate } from 'react-router-dom';
3
2
  import Table from '../DataGrid';
4
- import { Bell, Check, ArrowLeft } from 'lucide-react';
3
+ import { Bell, Check } from 'lucide-react';
5
4
  import { toast } from 'react-toastify';
6
5
  import CustomFetch from '../Fetch';
7
6
  import styles from '../styles/NotificationList.module.scss';
8
7
 
9
8
  const NotificationList = () => {
10
- const navigate = useNavigate();
11
9
  const [loading, setLoading] = useState(false);
12
10
 
13
11
  const markAllAsRead = useCallback(() => {
@@ -50,25 +48,26 @@ const NotificationList = () => {
50
48
  },
51
49
  columns: [
52
50
  {
53
- id: 'data',
54
- jsonData: 'label',
51
+ id: ['data'],
52
+ nameFrom: 'label',
55
53
  label: 'Message',
56
- type: 'json',
57
- flex: 1,
54
+ type: 'relation',
55
+ minWidth: 300,
56
+ wordWrap: true,
58
57
  },
59
58
  {
60
59
  id: 'created_at',
61
60
  label: 'Created At',
62
61
  type: 'datetime',
63
62
  minWidth: 180,
64
- maxWidth: 180,
63
+ maxWidth: 200,
65
64
  },
66
65
  {
67
66
  id: 'read_at',
68
67
  label: 'Read At',
69
68
  type: 'datetime',
70
69
  minWidth: 180,
71
- maxWidth: 180,
70
+ maxWidth: 200,
72
71
  },
73
72
  ],
74
73
  settings: [],
@@ -111,21 +110,6 @@ const NotificationList = () => {
111
110
  </div>
112
111
  </div>
113
112
  </div>
114
- <div className={styles.grid}>
115
- <div className={styles.grid__row}>
116
- <div className={styles.grid__full}>
117
- <div className={styles.backButtonContainer}>
118
- <button
119
- className={styles.backButton}
120
- onClick={() => navigate('/')}
121
- >
122
- <ArrowLeft size={16} />
123
- <span>Back to Dashboard</span>
124
- </button>
125
- </div>
126
- </div>
127
- </div>
128
- </div>
129
113
  </div>
130
114
  );
131
115
  };
@@ -145,8 +145,9 @@
145
145
  }
146
146
 
147
147
  .modalWide {
148
- width: 80vw;
149
- max-width: 1200px;
148
+ width: 90vw;
149
+ max-width: 1400px;
150
+ min-width: 600px;
150
151
  }
151
152
 
152
153
  .modal {
@@ -11,6 +11,12 @@
11
11
  grid-template-columns: 1fr 1fr 1fr 1fr;
12
12
  gap: 1em;
13
13
  }
14
+
15
+ /* Enhanced styling for wider modals */
16
+ .modal & form {
17
+ gap: 1.5em;
18
+ max-width: none;
19
+ }
14
20
  }
15
21
 
16
22
  .formItem {
@@ -238,9 +244,10 @@ input[type='file'] {
238
244
  .modal__content {
239
245
  width: 100%;
240
246
  position: relative;
241
- padding: 0.75rem;
242
- max-height: 80vh;
247
+ padding: 1rem;
248
+ max-height: 85vh;
243
249
  overflow-y: auto;
250
+ min-height: 400px;
244
251
 
245
252
  .btn {
246
253
  background: var(--primary-color);
@@ -945,3 +945,27 @@
945
945
  }
946
946
  }
947
947
 
948
+ // Modal styles (consistent with DataGrid)
949
+ .modalwrap {
950
+ background: var(--tertiary-color);
951
+ border-radius: 8px;
952
+ overflow: hidden;
953
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
954
+ }
955
+
956
+ .top--modal {
957
+ position: relative;
958
+ z-index: 1000;
959
+ }
960
+
961
+ .modalWide {
962
+ width: 90vw;
963
+ max-width: 1400px;
964
+ min-width: 600px;
965
+ }
966
+
967
+ .modal {
968
+ width: 100%;
969
+ position: relative;
970
+ }
971
+
@@ -1090,3 +1090,27 @@
1090
1090
  filter: brightness(1.1);
1091
1091
  }
1092
1092
  }
1093
+
1094
+ // Modal styles (consistent with DataGrid)
1095
+ .modalwrap {
1096
+ background: var(--tertiary-color);
1097
+ border-radius: 8px;
1098
+ overflow: hidden;
1099
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
1100
+ }
1101
+
1102
+ .top--modal {
1103
+ position: relative;
1104
+ z-index: 1000;
1105
+ }
1106
+
1107
+ .modalWide {
1108
+ width: 90vw;
1109
+ max-width: 1400px;
1110
+ min-width: 600px;
1111
+ }
1112
+
1113
+ .modal {
1114
+ width: 100%;
1115
+ position: relative;
1116
+ }
@@ -84,20 +84,22 @@
84
84
 
85
85
  /* Notification Box Header */
86
86
  .notiboxHeader {
87
- display: flex;
88
- align-items: center;
89
- justify-content: space-between;
90
- padding: 12px 16px;
91
- border-bottom: 1px solid rgba(0, 0, 0, 0.06);
92
- gap: 10px;
87
+ display: flex !important;
88
+ align-items: center !important;
89
+ justify-content: space-between !important;
90
+ padding: 12px 16px !important;
91
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06) !important;
92
+ gap: 12px !important;
93
+ min-height: 48px !important;
93
94
  }
94
95
 
95
96
  .notiboxHeader h3 {
96
- margin: 0;
97
- font-size: 16px;
98
- font-weight: 600;
99
- color: var(--heading-color, #333);
100
- flex-shrink: 0;
97
+ margin: 0 !important;
98
+ font-size: 16px !important;
99
+ font-weight: 600 !important;
100
+ color: #333 !important;
101
+ flex-shrink: 0 !important;
102
+ flex-grow: 1 !important;
101
103
  }
102
104
 
103
105
  /* Notification Scroll Wrap */
@@ -231,42 +233,41 @@
231
233
  }
232
234
 
233
235
  .notiDismiss {
234
- position: absolute;
235
- right: 12px;
236
- top: 10px;
237
- background: transparent;
238
- border: none;
239
- color: #666;
240
- cursor: pointer;
241
- padding: 0;
242
- display: flex;
243
- align-items: center;
244
- justify-content: center;
245
- width: 24px;
246
- height: 24px;
247
- border-radius: 50%;
248
- transition: all 0.2s;
249
- opacity: 0.7;
236
+ position: absolute !important;
237
+ right: 12px !important;
238
+ top: 10px !important;
239
+ background: #f8f9fa !important;
240
+ border: 1px solid #dee2e6 !important;
241
+ color: #6c757d !important;
242
+ cursor: pointer !important;
243
+ padding: 4px !important;
244
+ display: flex !important;
245
+ align-items: center !important;
246
+ justify-content: center !important;
247
+ width: 24px !important;
248
+ height: 24px !important;
249
+ border-radius: 50% !important;
250
+ transition: all 0.2s !important;
251
+ opacity: 1 !important;
252
+ visibility: visible !important;
253
+ z-index: 10 !important;
250
254
  }
251
255
 
252
256
  .notiContent:hover .notiDismiss {
253
- opacity: 1;
257
+ background: #e9ecef !important;
258
+ color: #495057 !important;
259
+ border-color: #adb5bd !important;
254
260
  }
255
261
 
256
262
  .notiDismiss:hover {
257
- background-color: rgba(220, 53, 69, 0.1);
258
- color: #dc3545;
259
- transform: scale(1.1);
263
+ background-color: #dc3545 !important;
264
+ color: #ffffff !important;
265
+ border-color: #dc3545 !important;
260
266
  }
261
267
 
262
268
  .notiDismiss:focus {
263
- outline: none;
264
- box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.3);
265
- background-color: rgba(220, 53, 69, 0.05);
266
- }
267
-
268
- .notiDismiss:active {
269
- transform: scale(0.95);
269
+ outline: none !important;
270
+ box-shadow: 0 0 0 2px rgba(220, 53, 69, 0.3) !important;
270
271
  }
271
272
 
272
273
  /* Empty State */
@@ -322,46 +323,45 @@
322
323
 
323
324
  /* Mark All as Read Button */
324
325
  .markAllBtn {
325
- background-color: var(--primary-color, #0056b3);
326
- color: var(--tertiary-color, white);
327
- padding: 8px 16px;
328
- border-radius: var(--br, 6px);
329
- border: none;
330
- display: flex;
331
- align-items: center;
332
- justify-content: center;
333
- gap: 6px;
334
- font-size: 14px;
335
- font-weight: 500;
336
- cursor: pointer;
337
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
338
- transition: all 0.2s ease;
339
- outline: none;
340
- white-space: nowrap;
341
- flex-shrink: 0;
342
- /* Ensure visibility */
343
- opacity: 1;
326
+ background-color: #6c757d !important;
327
+ color: #ffffff !important;
328
+ padding: 6px 10px !important;
329
+ border-radius: 4px !important;
330
+ border: none !important;
331
+ display: inline-flex !important;
332
+ align-items: center !important;
333
+ justify-content: center !important;
334
+ gap: 4px !important;
335
+ font-size: 12px !important;
336
+ font-weight: 500 !important;
337
+ cursor: pointer !important;
338
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2) !important;
339
+ transition: all 0.2s ease !important;
340
+ outline: none !important;
341
+ white-space: nowrap !important;
342
+ flex-shrink: 0 !important;
343
+ min-width: 120px !important;
344
+ height: 32px !important;
345
+ line-height: 1.2 !important;
346
+ opacity: 1 !important;
347
+ visibility: visible !important;
348
+ position: relative !important;
349
+ z-index: 10 !important;
344
350
  }
345
351
 
346
352
  .markAllBtn:hover:not(:disabled) {
347
- background-color: var(--secondary-color, #004494);
348
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
349
- transform: translateY(-1px);
353
+ background-color: #5a6268 !important;
354
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25) !important;
350
355
  }
351
356
 
352
357
  .markAllBtn:focus:not(:disabled) {
353
- box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb, 0, 86, 179), 0.4);
354
- }
355
-
356
- .markAllBtn:active:not(:disabled) {
357
- transform: translateY(0);
358
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
358
+ box-shadow: 0 0 0 2px rgba(108, 117, 125, 0.4) !important;
359
359
  }
360
360
 
361
361
  .markAllBtn:disabled {
362
- opacity: 0.6;
363
- cursor: not-allowed;
364
- background-color: #6c757d;
362
+ opacity: 0.6 !important;
363
+ cursor: not-allowed !important;
364
+ background-color: #adb5bd !important;
365
365
  }
366
366
 
367
367
  /* Footer Actions */
@@ -374,41 +374,37 @@
374
374
  }
375
375
 
376
376
  .viewAllBtn {
377
- background-color: var(--primary-color, #0056b3);
378
- color: var(--tertiary-color, white);
379
- font-size: 14px;
380
- font-weight: 500;
381
- cursor: pointer;
382
- padding: 10px 20px;
383
- border-radius: var(--br, 6px);
384
- border: none;
385
- width: auto;
386
- min-width: 200px;
387
- text-align: center;
388
- transition: all 0.2s ease;
389
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
390
- outline: none;
391
- position: relative;
392
- z-index: 1;
393
- /* Ensure visibility and proper contrast */
394
- opacity: 1;
395
- display: block;
377
+ background-color: #6c757d !important;
378
+ color: #ffffff !important;
379
+ font-size: 14px !important;
380
+ font-weight: 500 !important;
381
+ cursor: pointer !important;
382
+ padding: 12px 24px !important;
383
+ border-radius: 6px !important;
384
+ border: none !important;
385
+ width: 100% !important;
386
+ max-width: 280px !important;
387
+ text-align: center !important;
388
+ transition: all 0.2s ease !important;
389
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2) !important;
390
+ outline: none !important;
391
+ position: relative !important;
392
+ height: 44px !important;
393
+ opacity: 1 !important;
394
+ visibility: visible !important;
395
+ display: block !important;
396
+ line-height: 1.2 !important;
397
+ z-index: 10 !important;
396
398
  }
397
399
 
398
400
  .viewAllBtn:hover:not(:disabled) {
399
- background-color: var(--secondary-color, #004494);
400
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
401
- transform: translateY(-1px);
401
+ background-color: #5a6268 !important;
402
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.25) !important;
402
403
  }
403
404
 
404
405
  .viewAllBtn:focus:not(:disabled) {
405
- box-shadow: 0 0 0 3px rgba(var(--primary-color-rgb, 0, 86, 179), 0.4);
406
- outline: none;
407
- }
408
-
409
- .viewAllBtn:active:not(:disabled) {
410
- transform: translateY(0);
411
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
406
+ box-shadow: 0 0 0 2px rgba(108, 117, 125, 0.4) !important;
407
+ outline: none !important;
412
408
  }
413
409
 
414
410
  /* Bell Animation */
@@ -1,7 +1,7 @@
1
1
  .notificationListContainer {
2
2
  width: 100%;
3
- max-width: 1200px;
4
- margin: 0 auto;
3
+ margin: 0;
4
+ padding: 0;
5
5
  }
6
6
 
7
7
  .grid {
@@ -88,31 +88,3 @@
88
88
  opacity: 0.6;
89
89
  cursor: not-allowed;
90
90
  }
91
-
92
- .backButtonContainer {
93
- display: flex;
94
- justify-content: center;
95
- padding: 16px 0;
96
- }
97
-
98
- .backButton {
99
- display: flex;
100
- align-items: center;
101
- gap: 8px;
102
- background-color: var(--primary-color);
103
- color: white;
104
- border: none;
105
- border-radius: 6px;
106
- padding: 12px 24px;
107
- font-size: 14px;
108
- font-weight: 500;
109
- cursor: pointer;
110
- transition: all 0.2s ease;
111
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
112
- min-width: 200px;
113
- }
114
-
115
- .backButton:hover {
116
- background-color: var(--primary-color-darker, #0056b3);
117
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
118
- }
@@ -65,9 +65,28 @@
65
65
  box-shadow: 0 0 0 2px rgba(107, 114, 128, 0.3) !important;
66
66
  }
67
67
 
68
- /* Make the modal more compact */
68
+ /* Make the modal use full width like GenericIndex */
69
69
  :global(.swal2-popup.swal2-modal) {
70
- max-width: 90%;
70
+ max-width: 95%;
71
+ width: 95%;
72
+ min-width: 800px;
73
+ }
74
+
75
+ /* Responsive adjustments for smaller screens */
76
+ @media (max-width: 1024px) {
77
+ :global(.swal2-popup.swal2-modal) {
78
+ max-width: 90%;
79
+ width: 90%;
80
+ min-width: 600px;
81
+ }
82
+ }
83
+
84
+ @media (max-width: 768px) {
85
+ :global(.swal2-popup.swal2-modal) {
86
+ max-width: 95%;
87
+ width: 95%;
88
+ min-width: 320px;
89
+ }
71
90
  }
72
91
 
73
92
  /* Reduce spacing between elements */
@@ -225,11 +225,6 @@ input[type]:not([type='search']):not([type='url']):not([type='hidden']):not(
225
225
  backdrop-filter: blur(3px);
226
226
  }
227
227
 
228
- .modalWide {
229
- width: 80vw !important;
230
- max-width: 1200px !important;
231
- }
232
-
233
228
  /* Top-aligned modal styles */
234
229
  .modal-top-aligned {
235
230
  max-height: 90vh !important;