ui-soxo-bootstrap-core 2.6.1-dev.2 → 2.6.1-dev.20

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 (66) hide show
  1. package/core/components/extra-info/extra-info-details.js +2 -2
  2. package/core/components/index.js +2 -11
  3. package/core/components/landing-api/landing-api.js +91 -15
  4. package/core/components/landing-api/landing-api.scss +22 -0
  5. package/core/components/license-management/license-alert.js +97 -0
  6. package/core/lib/Store.js +3 -3
  7. package/core/lib/components/global-header/animations.js +78 -4
  8. package/core/lib/components/global-header/global-header.js +224 -255
  9. package/core/lib/components/global-header/global-header.scss +162 -24
  10. package/core/lib/components/sidemenu/animations.js +84 -2
  11. package/core/lib/components/sidemenu/sidemenu.js +191 -65
  12. package/core/lib/components/sidemenu/sidemenu.scss +221 -14
  13. package/core/lib/elements/basic/country-phone-input/country-phone-input.js +14 -8
  14. package/core/lib/elements/basic/dragabble-wrapper/draggable-wrapper.js +1 -1
  15. package/core/lib/elements/basic/menu-tree/menu-tree.js +26 -13
  16. package/core/lib/models/forms/components/form-creator/form-creator.scss +4 -3
  17. package/core/lib/models/menus/components/menu-list/menu-list.js +424 -467
  18. package/core/lib/models/process/components/process-dashboard/process-dashboard.js +469 -3
  19. package/core/lib/models/process/components/process-dashboard/process-dashboard.scss +4 -0
  20. package/core/lib/pages/change-password/change-password.js +17 -24
  21. package/core/lib/pages/change-password/change-password.scss +45 -48
  22. package/core/lib/pages/login/commnication-mode-selection.js +2 -2
  23. package/core/lib/pages/login/login.js +47 -62
  24. package/core/lib/pages/login/login.scss +9 -0
  25. package/core/lib/pages/login/reset-password.js +17 -17
  26. package/core/lib/pages/login/reset-password.scss +10 -1
  27. package/core/lib/pages/profile/themes.json +4 -4
  28. package/core/lib/utils/api/api.utils.js +30 -18
  29. package/core/lib/utils/common/common.utils.js +49 -35
  30. package/core/lib/utils/http/http.utils.js +2 -1
  31. package/core/lib/utils/index.js +4 -1
  32. package/core/models/base/base.js +7 -3
  33. package/core/models/core-scripts/core-scripts.js +134 -126
  34. package/core/models/doctor/components/doctor-add/doctor-add.js +9 -4
  35. package/core/models/menus/components/menu-add/menu-add.js +1 -1
  36. package/core/models/menus/components/menu-lists/menu-lists.js +53 -54
  37. package/core/models/menus/menus.js +27 -2
  38. package/core/models/roles/components/role-add/role-add.js +92 -59
  39. package/core/models/roles/components/role-list/role-list.js +1 -1
  40. package/core/models/staff/components/staff-add/staff-add.js +20 -32
  41. package/core/models/users/components/assign-role/assign-role.js +145 -50
  42. package/core/models/users/components/assign-role/assign-role.scss +209 -45
  43. package/core/models/users/components/assign-role/avatar-props.js +45 -0
  44. package/core/models/users/components/user-add/user-add.js +46 -55
  45. package/core/models/users/components/user-add/user-edit.js +25 -4
  46. package/core/models/users/users.js +9 -1
  47. package/core/modules/dashboard/components/dashboard-card/menu-dashboard-card.js +1 -1
  48. package/core/modules/reporting/components/reporting-dashboard/README.md +316 -0
  49. package/core/modules/reporting/components/reporting-dashboard/adavance-search/advance-search.js +147 -0
  50. package/core/modules/reporting/components/reporting-dashboard/adavance-search/advance-search.scss +76 -0
  51. package/core/modules/reporting/components/reporting-dashboard/display-columns/build-display-columns.js +90 -0
  52. package/core/modules/reporting/components/reporting-dashboard/display-columns/build-display-columns.test.js +74 -0
  53. package/core/modules/reporting/components/reporting-dashboard/display-columns/display-cell-renderer.js +252 -0
  54. package/core/modules/reporting/components/reporting-dashboard/display-columns/display-cell-renderer.test.js +126 -0
  55. package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.js +326 -436
  56. package/core/modules/reporting/components/reporting-dashboard/reporting-dashboard.scss +7 -0
  57. package/core/modules/steps/action-buttons.js +33 -15
  58. package/core/modules/steps/action-buttons.scss +55 -9
  59. package/core/modules/steps/chat-assistant.js +141 -0
  60. package/core/modules/steps/openai-realtime.js +275 -0
  61. package/core/modules/steps/readme.md +167 -0
  62. package/core/modules/steps/steps.js +1078 -57
  63. package/core/modules/steps/steps.scss +539 -90
  64. package/core/modules/steps/timeline.js +21 -19
  65. package/core/modules/steps/voice-navigation.js +709 -0
  66. package/package.json +2 -1
@@ -1,4 +1,52 @@
1
1
  .sidemenu {
2
+ .side-loader-shell {
3
+ margin: 14px 12px 10px;
4
+ padding: 10px;
5
+ border-radius: 14px;
6
+ border: 1px solid rgba(222, 229, 239, 0.9);
7
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(248, 250, 255, 0.95) 100%);
8
+ box-shadow: 0 8px 18px rgba(16, 24, 40, 0.05);
9
+ display: grid;
10
+ gap: 8px;
11
+ }
12
+
13
+ .side-loader-chip,
14
+ .side-loader-row {
15
+ display: flex;
16
+ align-items: center;
17
+ gap: 10px;
18
+ min-height: 30px;
19
+ }
20
+
21
+ .side-loader-dot {
22
+ width: 14px;
23
+ height: 14px;
24
+ border-radius: 999px;
25
+ background: linear-gradient(90deg, #eef1f5 0%, #f7f8fb 50%, #eef1f5 100%);
26
+ background-size: 220% 100%;
27
+ animation: side-shimmer 1.4s linear infinite;
28
+ flex: 0 0 auto;
29
+ }
30
+
31
+ .side-loader-line {
32
+ height: 10px;
33
+ border-radius: 999px;
34
+ width: 100%;
35
+ background: linear-gradient(90deg, #edf0f4 0%, #f8f9fb 50%, #edf0f4 100%);
36
+ background-size: 220% 100%;
37
+ animation: side-shimmer 1.4s linear infinite;
38
+ }
39
+
40
+ .side-loader-list {
41
+ margin: 8px;
42
+ padding: 8px 6px 18px;
43
+ border-radius: 14px;
44
+ border: 1px solid rgba(229, 234, 242, 0.85);
45
+ background: rgba(255, 255, 255, 0.88);
46
+ display: grid;
47
+ gap: 4px;
48
+ }
49
+
2
50
  .intro {
3
51
  .logo-wrapper {
4
52
  border-bottom: none;
@@ -40,18 +88,26 @@
40
88
  padding: 5px 16px;
41
89
  position: fixed;
42
90
  z-index: 1000;
43
- width: 17%;
44
- background: #fff;
91
+ // width: 17%;
92
+ background: rgba(255, 255, 255, 0.95);
93
+ backdrop-filter: blur(10px);
45
94
  // border-bottom: 1.5px solid #24aeb8;
46
95
  &.close {
47
96
  width: 6% !important;
48
97
  }
49
98
 
50
99
  .logo-wrapper {
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: space-between;
103
+ gap: 8px;
51
104
  // height: 15px;
52
105
  // border-bottom: 1px solid #eaeaea;
53
106
 
54
107
  .sidemenu-brand-logo {
108
+ transition:
109
+ transform 220ms ease,
110
+ filter 220ms ease;
55
111
  // width: 50%;
56
112
  // margin: 10px;
57
113
  // width: 200px;
@@ -75,6 +131,11 @@
75
131
  }
76
132
 
77
133
  cursor: pointer;
134
+
135
+ &:hover {
136
+ transform: translateY(-1px) scale(1.01);
137
+ filter: saturate(1.05);
138
+ }
78
139
  }
79
140
  }
80
141
 
@@ -94,20 +155,22 @@
94
155
  }
95
156
 
96
157
  .menu-item {
97
- padding-top: 10px;
158
+ padding-top: 8px;
98
159
  // height: calc(100vh - 48px); /* Adjust height */
99
160
  height: 100vh;
100
161
  margin-top: 0px;
101
162
  width: 256px;
102
163
  top: 48px;
103
- border-bottom: 1px solid #f0f0f0;
164
+ border-right: 1px solid rgba(226, 231, 239, 0.9);
165
+ border-bottom: 1px solid rgba(240, 243, 248, 0.8);
104
166
  position: fixed;
105
167
  height: 100vh;
106
168
  margin-top: 0;
107
169
  overflow-y: scroll;
108
170
  overflow-x: hidden;
109
171
  width: 211px;
110
- padding-bottom: 50px;
172
+ padding-bottom: 24px;
173
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.97) 0%, rgba(249, 250, 252, 0.98) 100%);
111
174
 
112
175
  /* Custom Scrollbar like macOS */
113
176
  scrollbar-width: thin; /* For Firefox */
@@ -142,18 +205,57 @@
142
205
  margin: 80px;
143
206
  }
144
207
 
208
+ .menu-motion-shell {
209
+ padding: 6px 6px 14px;
210
+ }
211
+
145
212
  .ant-menu-inline {
146
213
  border: none !important;
147
214
  }
148
215
 
149
216
  .menu-collapsed {
150
- width: 81px;
217
+ width: 100%;
218
+ min-width: 0;
151
219
  display: flex;
152
220
  align-items: center;
153
221
  gap: 8px;
154
222
  cursor: pointer;
155
223
  }
156
224
 
225
+ .menu-icon-wrap {
226
+ width: 24px;
227
+ height: 24px;
228
+ min-width: 24px;
229
+ border-radius: 8px;
230
+ display: inline-flex;
231
+ align-items: center;
232
+ justify-content: center;
233
+ color: inherit;
234
+ transition:
235
+ background-color 220ms ease,
236
+ transform 220ms ease;
237
+ }
238
+
239
+ .menu-image-icon {
240
+ width: 18px;
241
+ height: 18px;
242
+ object-fit: contain;
243
+ display: block;
244
+ }
245
+
246
+ .menu-label-wrap {
247
+ min-width: 0;
248
+ display: inline-flex;
249
+ align-items: center;
250
+ }
251
+
252
+ .caption,
253
+ .menu-label-wrap {
254
+ overflow: hidden;
255
+ text-overflow: ellipsis;
256
+ white-space: nowrap;
257
+ }
258
+
157
259
  .menu-collapsed .anticon {
158
260
  margin-right: 8px;
159
261
  }
@@ -178,6 +280,102 @@
178
280
  /* Style selected item */
179
281
  .ant-menu {
180
282
  background-color: transparent !important;
283
+ padding: 4px 0 28px;
284
+ }
285
+
286
+ .ant-menu-item,
287
+ .ant-menu-submenu-title {
288
+ width: calc(100% - 12px) !important;
289
+ margin: 3px 6px !important;
290
+ padding-right: 10px !important;
291
+ border-radius: 12px;
292
+ height: 40px !important;
293
+ line-height: 40px !important;
294
+ transition:
295
+ background-color 180ms ease,
296
+ box-shadow 180ms ease,
297
+ transform 180ms ease;
298
+ border: 1px solid transparent;
299
+ }
300
+
301
+ .ant-menu-item::after,
302
+ .ant-menu-submenu-title::after {
303
+ display: none !important;
304
+ }
305
+
306
+ .ant-menu-submenu-arrow {
307
+ transition:
308
+ transform 200ms ease,
309
+ opacity 200ms ease;
310
+ }
311
+
312
+ .ant-menu-item:hover,
313
+ .ant-menu-submenu-title:hover {
314
+ background: linear-gradient(180deg, rgba(247, 248, 251, 0.98) 0%, rgba(242, 244, 248, 0.98) 100%) !important;
315
+ border-color: rgba(224, 229, 238, 0.95);
316
+ transform: translateX(1px);
317
+ }
318
+
319
+ .ant-menu-item:hover .menu-icon-wrap,
320
+ .ant-menu-submenu-title:hover .menu-icon-wrap {
321
+ background: rgba(100, 116, 139, 0.1);
322
+ transform: scale(1.03);
323
+ }
324
+
325
+ .ant-menu-item-selected,
326
+ .ant-menu-submenu-selected > .ant-menu-submenu-title {
327
+ background: linear-gradient(180deg, rgba(244, 247, 251, 0.98) 0%, rgba(238, 242, 247, 0.98) 100%) !important;
328
+ border-color: rgba(214, 222, 233, 0.95) !important;
329
+ box-shadow:
330
+ inset 0 1px 0 rgba(255, 255, 255, 0.7),
331
+ 0 2px 8px rgba(71, 85, 105, 0.08);
332
+ }
333
+
334
+ .ant-menu-item-selected::before,
335
+ .ant-menu-submenu-selected > .ant-menu-submenu-title::before {
336
+ content: '';
337
+ position: absolute;
338
+ left: 6px;
339
+ top: 8px;
340
+ bottom: 8px;
341
+ width: 3px;
342
+ border-radius: 999px;
343
+ background: linear-gradient(180deg, #64748b 0%, #475569 100%);
344
+ opacity: 0.95;
345
+ }
346
+
347
+ .ant-menu-sub.ant-menu-inline {
348
+ background: transparent !important;
349
+ padding-top: 2px;
350
+ }
351
+
352
+ .ant-menu-sub.ant-menu-inline > .ant-menu-item {
353
+ height: 36px !important;
354
+ line-height: 36px !important;
355
+ border-radius: 10px;
356
+ margin-left: 18px !important;
357
+ width: calc(100% - 24px) !important;
358
+ }
359
+
360
+ .ant-menu-inline-collapsed > .ant-menu-item,
361
+ .ant-menu-inline-collapsed > .ant-menu-submenu > .ant-menu-submenu-title {
362
+ padding-inline: calc(50% - 12px) !important;
363
+ width: calc(100% - 12px) !important;
364
+ margin: 4px 6px !important;
365
+ }
366
+
367
+ .ant-menu-inline-collapsed .menu-collapsed {
368
+ justify-content: center;
369
+ gap: 0;
370
+ }
371
+
372
+ .ant-menu-inline-collapsed .menu-label-wrap {
373
+ display: none !important;
374
+ }
375
+
376
+ .ant-menu-inline-collapsed .menu-icon-wrap,
377
+ .ant-menu-inline-collapsed .menu-collapsed .anticon {
378
+ margin-right: 0 !important;
181
379
  }
182
380
  // .ant-menu-inline .ant-menu-item::after{
183
381
  // border-right: none;
@@ -232,6 +430,15 @@
232
430
  }
233
431
  }
234
432
  }
433
+
434
+ @keyframes side-shimmer {
435
+ 0% {
436
+ background-position: 200% 0;
437
+ }
438
+ 100% {
439
+ background-position: -20% 0;
440
+ }
441
+ }
235
442
  @media only screen and (max-width: 768px) {
236
443
  .sidemenu {
237
444
  // width: 100% !important;
@@ -245,7 +452,7 @@
245
452
  .intro {
246
453
  width: 210px;
247
454
  height: 60px;
248
- padding: 0px;
455
+ padding: 6px 8px;
249
456
  // width: 100% !important;
250
457
  // padding: 10px 16px;
251
458
  }
@@ -253,6 +460,7 @@
253
460
  .menu-item {
254
461
  width: 100% !important;
255
462
  top: 62px;
463
+ border-right: none;
256
464
  }
257
465
 
258
466
  .sidebar-footer {
@@ -261,17 +469,16 @@
261
469
  }
262
470
  }
263
471
 
264
- .ant-menu-item:hover {
265
- background-color: #e6f7ff !important;
266
- color: #1677ff !important;
267
- }
268
-
269
472
  /* Tooltip styling if needed */
270
473
  .ant-tooltip-inner {
271
474
  max-width: 200px;
272
475
  white-space: nowrap;
273
476
  overflow: hidden;
274
477
  text-overflow: ellipsis;
275
- background-color: #ffffff !important;
276
- color: #000000 !important;
478
+ background-color: rgba(255, 255, 255, 0.98) !important;
479
+ color: #111827 !important;
480
+ border: 1px solid rgba(224, 229, 238, 0.95);
481
+ box-shadow: 0 8px 20px rgba(15, 23, 42, 0.08);
482
+ border-radius: 10px;
483
+ font-weight: 500;
277
484
  }
@@ -11,7 +11,17 @@ import 'react-phone-input-2/lib/style.css';
11
11
  import PropTypes from 'prop-types';
12
12
  import './phone-input.scss';
13
13
 
14
- export default function CountryPhoneInput({ value, onChange, disabled, disableCountryCode, required, defaultCountryCode, onBlur,className }) {
14
+ export default function CountryPhoneInput({
15
+ value,
16
+ onChange,
17
+ disabled,
18
+ disableCountryCode,
19
+ required,
20
+ defaultCountryCode,
21
+ onBlur,
22
+ className,
23
+ onKeyDown,
24
+ }) {
15
25
  const inputRef = useRef();
16
26
  const hasInitializedRef = useRef(false); // IMPORTANT
17
27
 
@@ -21,11 +31,7 @@ export default function CountryPhoneInput({ value, onChange, disabled, disableCo
21
31
  * run ONLY ONCE when initial value has dial code
22
32
  */
23
33
  useEffect(() => {
24
- if (
25
- !hasInitializedRef.current &&
26
- value?.code?.dialCode &&
27
- value?.value
28
- ) {
34
+ if (!hasInitializedRef.current && value?.code?.dialCode && value?.value) {
29
35
  setPhone(value.code.dialCode + value.value);
30
36
  hasInitializedRef.current = true; // 👈 mark as done
31
37
  }
@@ -54,7 +60,7 @@ export default function CountryPhoneInput({ value, onChange, disabled, disableCo
54
60
  // country={disableCountryCode ? false : 'in'}
55
61
  value={phone}
56
62
  onChange={handleInput}
57
- inputProps={{ required: required }}
63
+ inputProps={{ required: required, onKeyDown: onKeyDown }}
58
64
  disabled={disabled}
59
65
  onBlur={onBlur}
60
66
  />
@@ -73,4 +79,4 @@ CountryPhoneInput.propTypes = {
73
79
  disableCountryCode: PropTypes.bool,
74
80
  /** A boolean indicating whether the input is required or not. This prop is optional. */
75
81
  required: PropTypes.bool,
76
- };
82
+ };
@@ -102,7 +102,7 @@ export default function DraggableWrapper({ id, index, movePanel, item, dragEnabl
102
102
  >
103
103
  <div style={{ flex: 1 }}>
104
104
  {dragEnabled && <span style={{ marginRight: 8 }}>⋮⋮</span>}
105
- <span>{item.name}</span>
105
+ <span>{item.caption}</span>
106
106
  {dragEnabled ? (
107
107
  <span style={{ marginLeft: 8, fontSize: 11, color: '#999' }}>(Level {level})</span>
108
108
  ) : (
@@ -23,7 +23,7 @@
23
23
  */
24
24
 
25
25
  import React from 'react';
26
- import { Checkbox, Collapse } from 'antd';
26
+ import { Checkbox, Collapse, Tag } from 'antd';
27
27
 
28
28
  const { Panel } = Collapse;
29
29
 
@@ -73,11 +73,15 @@ export const MenuTree = ({ menus, selectedMenus = [], toggleMenu, parentId = nul
73
73
  background: '#fff',
74
74
  display: 'flex',
75
75
  alignItems: 'center',
76
- gap: 8,
76
+ justifyContent: 'space-between',
77
77
  }}
78
78
  >
79
- {showCheckbox && <Checkbox checked={selectedMenus.includes(menu.id)} onChange={(e) => onParentChange(e.target.checked)} />}
80
- <span>{menu.title || menu.caption}</span>
79
+ {/* Left Side */}
80
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
81
+ {showCheckbox && <Checkbox checked={selectedMenus.includes(menu.id)} onChange={(e) => onParentChange(e.target.checked)} />}
82
+ <span>{menu.caption}</span>
83
+ </div>
84
+ <Tag color={menu.is_visible === true ? 'green' : 'blue'}>{menu.is_visible === true ? 'VISIBLE' : 'HIDDEN'}</Tag>{' '}
81
85
  </div>
82
86
  );
83
87
  }
@@ -91,15 +95,24 @@ export const MenuTree = ({ menus, selectedMenus = [], toggleMenu, parentId = nul
91
95
  <Panel
92
96
  key={menu.id}
93
97
  header={
94
- <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
95
- {showCheckbox && (
96
- <Checkbox
97
- checked={children.every((c) => selectedMenus.includes(c.id))}
98
- indeterminate={children.some((c) => selectedMenus.includes(c.id)) && !children.every((c) => selectedMenus.includes(c.id))}
99
- onChange={(e) => onParentChange(e.target.checked)}
100
- />
101
- )}
102
- <span>{menu.title || menu.caption}</span>
98
+ <div
99
+ style={{
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ justifyContent: 'space-between',
103
+ }}
104
+ >
105
+ <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
106
+ {showCheckbox && (
107
+ <Checkbox
108
+ checked={children.every((c) => selectedMenus.includes(c.id))}
109
+ indeterminate={children.some((c) => selectedMenus.includes(c.id)) && !children.every((c) => selectedMenus.includes(c.id))}
110
+ onChange={(e) => onParentChange(e.target.checked)}
111
+ />
112
+ )}
113
+ <span>{menu.caption}</span>
114
+ </div>
115
+ <Tag color={menu.is_visible === true ? 'green' : 'blue'}>{menu.is_visible === true ? 'VISIBLE' : 'HIDDEN'}</Tag>{' '}
103
116
  </div>
104
117
  }
105
118
  >
@@ -4,7 +4,7 @@
4
4
  }
5
5
 
6
6
  .new-record {
7
- gap: 10px !important;
7
+ gap: 10px !important;
8
8
  }
9
9
 
10
10
  .form-item-element {
@@ -22,9 +22,10 @@
22
22
  // right: 0px;
23
23
  }
24
24
  }
25
-
25
+
26
26
  }
27
- .submit-button{
27
+
28
+ .submit-button {
28
29
  margin-top: 10px;
29
30
  }
30
31
  }