datastake-daf 0.6.587 → 0.6.588

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.
@@ -1508,7 +1508,7 @@ ul.ant-menu.ant-menu-dark.ant-menu-root.ant-menu-vertical::-webkit-scrollbar-thu
1508
1508
 
1509
1509
  .components-layout .sidenav-cont .menus-cont .sidemenu-cont .ant-menu-submenu,
1510
1510
  .components-layout .sidenav-cont .menus-cont .sidemenu-cont .ant-menu-item {
1511
- color: white;
1511
+ color: var(--custom-sidenav-text-color, white) !important;
1512
1512
  }
1513
1513
 
1514
1514
  .components-layout.nested
@@ -13992,15 +13992,36 @@ const createTheme = (overrides = {}) => {
13992
13992
  ...overrides
13993
13993
  };
13994
13994
  };
13995
+
13996
+ /**
13997
+ * Creates an admin theme by merging base theme with app theme and overrides
13998
+ * @param {Object} params - Parameters object
13999
+ * @param {Object} params.appTheme - App-specific theme overrides
14000
+ * @param {Object} params.overrides - Additional theme overrides
14001
+ * @param {string[]} params.keysToRemove - Array of keys to remove from the final theme
14002
+ * @returns {Object} - Merged theme object with specified keys removed
14003
+ *
14004
+ * @example
14005
+ * // Create admin theme without specific color keys
14006
+ * const myTheme = createAdminTheme({
14007
+ * appTheme: { colorPrimary: '#FF0000' },
14008
+ * keysToRemove: ['red1', 'red2', 'red3']
14009
+ * });
14010
+ */
13995
14011
  const createAdminTheme = ({
13996
14012
  appTheme = {},
13997
14013
  overrides = {}
13998
14014
  }) => {
13999
- return {
14015
+ const mergedTheme = {
14000
14016
  ...baseTheme,
14001
14017
  ...appTheme,
14002
14018
  ...overrides
14003
14019
  };
14020
+ const keysToRemove = ['customSidenavColor', 'customSidenavSubMenuColor', 'customSidenavHoverColor', 'customSidenavSubsectionHover', 'customCollapsedSidenavHoverColor', 'customSidenavDisabledMenuItemColor', 'customSidenavTextColor', 'nestedSidenavColor', 'nestedSidenavSubMenuColor', 'nestedSidenavHoverColor', 'nestedCollapsedSidenavHoverColor', 'nestedSidenavDisabledMenuItemColor', 'nestedSidenavSubmenuBgColor', 'customHeaderColor'];
14021
+ keysToRemove.forEach(key => {
14022
+ delete mergedTheme[key];
14023
+ });
14024
+ return mergedTheme;
14004
14025
  };
14005
14026
 
14006
14027
  const getRedirectLink = (link, APP) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datastake-daf",
3
- "version": "0.6.587",
3
+ "version": "0.6.588",
4
4
  "dependencies": {
5
5
  "@ant-design/icons": "^5.2.5",
6
6
  "@antv/g2": "^5.1.1",
@@ -54,7 +54,7 @@ export default function Notifications({
54
54
  return (
55
55
  <NotificationsStyle className={appName}>
56
56
  <div className="notis-title">
57
- <h3>{t('sbg::notification')}</h3>
57
+ <h3>{t('Notification')}</h3>
58
58
  <Dropdown
59
59
  menu={{ items }}
60
60
  trigger="click"
@@ -55,6 +55,7 @@ export const mapTheme = (theme = {}) => ({
55
55
  '--custom-sidenav-subsection-hover':theme.customSidenavSubsectionHover,
56
56
  '--custom-collapsed-sidenav-hover-color':theme.customCollapsedSidenavHoverColor,
57
57
  '--custom-sidenav-disabled-menu-item-color':theme.customSidenavDisabledMenuItemColor,
58
+ '--custom-sidenav-text-color':theme.customSidenavTextColor,
58
59
 
59
60
  '--nested-sidenav-color':theme.nestedSidenavColor,
60
61
  '--nested-sidenav-submenu-color':theme.nestedSidenavSubMenuColor,
@@ -295,10 +295,38 @@ export const createTheme = (overrides = {}) => {
295
295
  };
296
296
  };
297
297
 
298
+ /**
299
+ * Creates an admin theme by merging base theme with app theme and overrides
300
+ * @param {Object} params - Parameters object
301
+ * @param {Object} params.appTheme - App-specific theme overrides
302
+ * @param {Object} params.overrides - Additional theme overrides
303
+ * @param {string[]} params.keysToRemove - Array of keys to remove from the final theme
304
+ * @returns {Object} - Merged theme object with specified keys removed
305
+ *
306
+ * @example
307
+ * // Create admin theme without specific color keys
308
+ * const myTheme = createAdminTheme({
309
+ * appTheme: { colorPrimary: '#FF0000' },
310
+ * keysToRemove: ['red1', 'red2', 'red3']
311
+ * });
312
+ */
298
313
  export const createAdminTheme = ({appTheme = {}, overrides = {}}) => {
299
- return {
314
+ const mergedTheme = {
300
315
  ...baseTheme,
301
316
  ...appTheme,
302
317
  ...overrides,
303
318
  };
319
+
320
+ const keysToRemove = ['customSidenavColor', 'customSidenavSubMenuColor', 'customSidenavHoverColor',
321
+ 'customSidenavSubsectionHover', 'customCollapsedSidenavHoverColor', 'customSidenavDisabledMenuItemColor',
322
+ 'customSidenavTextColor', 'nestedSidenavColor', 'nestedSidenavSubMenuColor', 'nestedSidenavHoverColor',
323
+ 'nestedCollapsedSidenavHoverColor', 'nestedSidenavDisabledMenuItemColor', 'nestedSidenavSubmenuBgColor',
324
+ 'customHeaderColor'
325
+ ];
326
+
327
+ keysToRemove.forEach(key => {
328
+ delete mergedTheme[key];
329
+ });
330
+
331
+ return mergedTheme;
304
332
  }
package/src/layouts.js CHANGED
@@ -1,2 +1 @@
1
- export { default as AppLayout } from './@daf/layouts/AppLayout/index.jsx';
2
- export { default as AuthLayout } from './@daf/layouts/AuthLayout/index.jsx';
1
+ export { default as AppLayout } from './@daf/layouts/AppLayout/index.jsx';
@@ -1508,7 +1508,7 @@ ul.ant-menu.ant-menu-dark.ant-menu-root.ant-menu-vertical::-webkit-scrollbar-thu
1508
1508
 
1509
1509
  .components-layout .sidenav-cont .menus-cont .sidemenu-cont .ant-menu-submenu,
1510
1510
  .components-layout .sidenav-cont .menus-cont .sidemenu-cont .ant-menu-item {
1511
- color: white;
1511
+ color: var(--custom-sidenav-text-color, white) !important;
1512
1512
  }
1513
1513
 
1514
1514
  .components-layout.nested
@@ -1,502 +0,0 @@
1
- import React from "react";
2
- import AuthLayout from "./index.jsx";
3
- import ThemeLayout from "../../core/components/ThemeLayout/index.jsx";
4
-
5
- // Mock translation function
6
- const mockT = (key) => {
7
- const translations = {
8
- "Welcome Back": "Welcome Back",
9
- "Please introduce yourself": "Please introduce yourself",
10
- "Sign In": "Sign In",
11
- "Enter your credentials to access your account": "Enter your credentials to access your account",
12
- "Create Account": "Create Account",
13
- "Join us today and start your journey": "Join us today and start your journey",
14
- "Reset Password": "Reset Password",
15
- "Enter your email to reset your password": "Enter your email to reset your password",
16
- "Back": "Back",
17
- "Email": "Email",
18
- "Password": "Password",
19
- "Remember me": "Remember me",
20
- "Forgot password?": "Forgot password?",
21
- "Log in": "Log in",
22
- "Don't have an account?": "Don't have an account?",
23
- "Sign up": "Sign up",
24
- };
25
- return translations[key] || key;
26
- };
27
-
28
- // Mock form content
29
- const LoginForm = () => (
30
- <div style={{ width: "100%", maxWidth: "400px" }}>
31
- <div style={{ marginBottom: "20px" }}>
32
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
33
- Email
34
- </label>
35
- <input
36
- type="email"
37
- placeholder="Enter your email"
38
- required
39
- style={{
40
- width: "100%",
41
- padding: "12px",
42
- border: "1px solid #ddd",
43
- borderRadius: "8px",
44
- fontSize: "14px"
45
- }}
46
- />
47
- </div>
48
- <div style={{ marginBottom: "20px" }}>
49
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
50
- Password
51
- </label>
52
- <input
53
- type="password"
54
- required
55
- placeholder="Enter your password"
56
- style={{
57
- width: "100%",
58
- padding: "12px",
59
- border: "1px solid #ddd",
60
- borderRadius: "8px",
61
- fontSize: "14px"
62
- }}
63
- />
64
- </div>
65
- <div style={{
66
- display: "flex",
67
- justifyContent: "space-between",
68
- alignItems: "center",
69
- marginBottom: "24px"
70
- }}>
71
- <label style={{ display: "flex", alignItems: "center", fontSize: "14px" }}>
72
- <input type="checkbox" style={{ marginRight: "8px" }} />
73
- Remember me
74
- </label>
75
- <a href="#" style={{ fontSize: "14px", color: "#4F46E5", textDecoration: "none" }}>
76
- Forgot password?
77
- </a>
78
- </div>
79
- <button
80
- style={{
81
- width: "100%",
82
- padding: "12px",
83
- backgroundColor: "#3D8EDB",
84
- color: "white",
85
- border: "none",
86
- borderRadius: "8px",
87
- fontSize: "16px",
88
- fontWeight: "600",
89
- cursor: "pointer"
90
- }}
91
- onClick={() => console.log("Login clicked")}
92
- >
93
- Log in
94
- </button>
95
- <p style={{
96
- textAlign: "center",
97
- marginTop: "24px",
98
- fontSize: "14px",
99
- color: "#6B7280"
100
- }}>
101
-
102
- {/* <a href="#" style={{ color: "#4F46E5", textDecoration: "none", fontWeight: "600" }}>
103
- Sign up
104
- </a> */}
105
- </p>
106
- </div>
107
- );
108
-
109
- const SignupForm = () => (
110
- <div style={{ width: "100%", maxWidth: "400px" }}>
111
- <div style={{ marginBottom: "20px" }}>
112
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
113
- Full Name
114
- </label>
115
- <input
116
- type="text"
117
- placeholder="Enter your full name"
118
- style={{
119
- width: "100%",
120
- padding: "12px",
121
- border: "1px solid #ddd",
122
- borderRadius: "8px",
123
- fontSize: "14px"
124
- }}
125
- />
126
- </div>
127
- <div style={{ marginBottom: "20px" }}>
128
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
129
- Email
130
- </label>
131
- <input
132
- type="email"
133
- placeholder="Enter your email"
134
- style={{
135
- width: "100%",
136
- padding: "12px",
137
- border: "1px solid #ddd",
138
- borderRadius: "8px",
139
- fontSize: "14px"
140
- }}
141
- />
142
- </div>
143
- <div style={{ marginBottom: "20px" }}>
144
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
145
- Password
146
- </label>
147
- <input
148
- type="password"
149
- placeholder="Create a password"
150
- style={{
151
- width: "100%",
152
- padding: "12px",
153
- border: "1px solid #ddd",
154
- borderRadius: "8px",
155
- fontSize: "14px"
156
- }}
157
- />
158
- </div>
159
- <div style={{ marginBottom: "24px" }}>
160
- <label style={{ display: "flex", alignItems: "center", fontSize: "14px" }}>
161
- <input type="checkbox" style={{ marginRight: "8px" }} />
162
- I agree to the Terms and Conditions
163
- </label>
164
- </div>
165
- <button
166
- style={{
167
- width: "100%",
168
- padding: "12px",
169
- backgroundColor: "#3D8EDB",
170
- color: "white",
171
- border: "none",
172
- borderRadius: "8px",
173
- fontSize: "16px",
174
- fontWeight: "600",
175
- cursor: "pointer"
176
- }}
177
- onClick={() => console.log("Sign up clicked")}
178
- >
179
- Create Account
180
- </button>
181
- <p style={{
182
- textAlign: "center",
183
- marginTop: "24px",
184
- fontSize: "14px",
185
- color: "#6B7280"
186
- }}>
187
- Already have an account?{" "}
188
- <a href="#" style={{ color: "#4F46E5", textDecoration: "none", fontWeight: "600" }}>
189
- Log in
190
- </a>
191
- </p>
192
- </div>
193
- );
194
-
195
- export default {
196
- title: "Layouts/AuthLayout",
197
- component: AuthLayout,
198
- tags: ["autodocs"],
199
- decorators: [
200
- (Story) => (
201
- <ThemeLayout>
202
- <div style={{ width: "100vw", height: "100vh" }}>
203
- <Story />
204
- </div>
205
- </ThemeLayout>
206
- ),
207
- ],
208
- argTypes: {
209
- title: {
210
- control: "text",
211
- description: "Main title of the auth page",
212
- },
213
- subTitle: {
214
- control: "text",
215
- description: "Subtitle or description text",
216
- },
217
- appName: {
218
- control: "select",
219
- options: ["default", "sbg", "tif", "mmt", "tazama"],
220
- description: "Application name for theming",
221
- },
222
- showTopHeader: {
223
- control: "boolean",
224
- description: "Show or hide the top navigation bar",
225
- },
226
- showLanguageSelector: {
227
- control: "boolean",
228
- description: "Show or hide the language selector",
229
- },
230
- showBack: {
231
- control: "boolean",
232
- description: "Show or hide the back button",
233
- },
234
- backLabel: {
235
- control: "text",
236
- description: "Label for the back button",
237
- }
238
- }
239
- };
240
-
241
- // Default Login Story
242
- export const Default = {
243
- name: "Login Page",
244
- args: {
245
- title: "Welcome Back",
246
- subTitle: "Please introduce yourself",
247
- appName: "default",
248
- showTopHeader: true,
249
- showLanguageSelector: true,
250
- showBack: false,
251
- backLabel: "Back",
252
- },
253
- render: (args) => (
254
- <AuthLayout
255
- t={mockT}
256
- title={args.title}
257
- subTitle={args.subTitle}
258
- logo="/assets/images/datastake-logo.svg"
259
- appName={args.appName}
260
- rightImageUrl="/assets/images/tif-bg.png"
261
- showTopHeader={args.showTopHeader}
262
- showLanguageSelector={args.showLanguageSelector}
263
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
264
- showBack={args.showBack}
265
- onBack={() => console.log("Back clicked")}
266
- backLabel={args.backLabel}
267
- >
268
- <LoginForm />
269
- </AuthLayout>
270
- ),
271
- };
272
-
273
- // Sign Up Story
274
- export const SignUp = {
275
- name: "Sign Up Page",
276
- render: () => (
277
- <AuthLayout
278
- t={mockT}
279
- title="Create Account"
280
- subTitle="Join us today and start your journey"
281
- logo="/assets/images/datastake-logo.svg"
282
- appName="default"
283
- rightImageUrl="/assets/images/auth-bg-2.svg"
284
- showTopHeader={true}
285
- showLanguageSelector={true}
286
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
287
- >
288
- <SignupForm />
289
- </AuthLayout>
290
- ),
291
- };
292
-
293
- // With Back Button
294
- export const WithBackButton = {
295
- name: "With Back Button",
296
- render: () => (
297
- <AuthLayout
298
- t={mockT}
299
- title="Reset Password"
300
- subTitle="Enter your email to reset your password"
301
- logo="/assets/images/datastake-logo.svg"
302
- appName="default"
303
- rightImageUrl="/assets/images/tif-bg.png"
304
- showTopHeader={true}
305
- showLanguageSelector={false}
306
- showBack={true}
307
- onBack={() => console.log("Back clicked")}
308
- backLabel="Back"
309
- >
310
- <div style={{ width: "100%", maxWidth: "400px" }}>
311
- <div style={{ marginBottom: "20px" }}>
312
- <label style={{ display: "block", marginBottom: "8px", fontSize: "14px", fontWeight: "500" }}>
313
- Email
314
- </label>
315
- <input
316
- type="email"
317
- placeholder="Enter your email"
318
- style={{
319
- width: "100%",
320
- padding: "12px",
321
- border: "1px solid #ddd",
322
- borderRadius: "8px",
323
- fontSize: "14px"
324
- }}
325
- />
326
- </div>
327
- <button
328
- style={{
329
- width: "100%",
330
- padding: "12px",
331
- backgroundColor: "#4F46E5",
332
- color: "white",
333
- border: "none",
334
- borderRadius: "8px",
335
- fontSize: "16px",
336
- fontWeight: "600",
337
- cursor: "pointer"
338
- }}
339
- onClick={() => console.log("Reset clicked")}
340
- >
341
- Send Reset Link
342
- </button>
343
- </div>
344
- </AuthLayout>
345
- ),
346
- };
347
-
348
- // No Header
349
- export const NoHeader = {
350
- name: "Without Top Header",
351
- render: () => (
352
- <AuthLayout
353
- t={mockT}
354
- title="Sign In"
355
- subTitle="Enter your credentials to access your account"
356
- logo="/assets/images/datastake-logo.svg"
357
- appName="default"
358
- rightImageUrl="/assets/images/auth-bg.svg"
359
- showTopHeader={false}
360
- showLanguageSelector={false}
361
- >
362
- <LoginForm />
363
- </AuthLayout>
364
- ),
365
- };
366
-
367
- // SBG Theme
368
- export const SBGTheme = {
369
- name: "SBG Theme",
370
- render: () => (
371
- <AuthLayout
372
- t={mockT}
373
- title="Welcome to SBG"
374
- subTitle="Sustainable Business Growth Platform"
375
- logo="/assets/sbg-images/sbg-logo.svg"
376
- appName="sbg"
377
- rightImageUrl="/assets/images/auth-bg.svg"
378
- showTopHeader={true}
379
- showLanguageSelector={true}
380
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
381
- >
382
- <LoginForm />
383
- </AuthLayout>
384
- ),
385
- };
386
-
387
- // TIF Theme
388
- export const TIFTheme = {
389
- name: "TIF Theme",
390
- render: () => (
391
- <AuthLayout
392
- t={mockT}
393
- title="Welcome to TIF"
394
- subTitle="Transparency & Information Framework"
395
- logo="/assets/images/tif-logo.svg"
396
- appName="tif"
397
- rightImageUrl="/assets/images/tif-bg.png"
398
- showTopHeader={true}
399
- showLanguageSelector={true}
400
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
401
- >
402
- <LoginForm />
403
- </AuthLayout>
404
- ),
405
- };
406
-
407
- // With Additional Content
408
- export const WithAdditionalContent = {
409
- name: "With Additional Content",
410
- render: () => (
411
- <AuthLayout
412
- t={mockT}
413
- title="Welcome Back"
414
- subTitle="Please introduce yourself"
415
- logo="/assets/images/datastake-logo.svg"
416
- appName="default"
417
- rightImageUrl="/assets/images/auth-bg.svg"
418
- showTopHeader={true}
419
- showLanguageSelector={true}
420
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
421
- additionalContent={
422
- <div style={{
423
- marginTop: "32px",
424
- padding: "16px",
425
- backgroundColor: "#F3F4F6",
426
- borderRadius: "8px",
427
- textAlign: "center"
428
- }}>
429
- <p style={{ fontSize: "14px", color: "#6B7280", margin: 0 }}>
430
- Need help? <a href="#" style={{ color: "#4F46E5", textDecoration: "none" }}>Contact Support</a>
431
- </p>
432
- </div>
433
- }
434
- >
435
- <LoginForm />
436
- </AuthLayout>
437
- ),
438
- };
439
-
440
- // Custom Right Image
441
- export const CustomRightImage = {
442
- name: "Custom Right Background",
443
- render: () => (
444
- <AuthLayout
445
- t={mockT}
446
- title="Welcome"
447
- subTitle="Access your dashboard"
448
- logo="/assets/images/datastake-logo.svg"
449
- appName="default"
450
- rightImageUrl="/assets/images/kota-bg.jpg"
451
- showTopHeader={true}
452
- showLanguageSelector={true}
453
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
454
- >
455
- <LoginForm />
456
- </AuthLayout>
457
- ),
458
- };
459
-
460
- // Minimal Setup
461
- export const Minimal = {
462
- name: "Minimal Setup",
463
- render: () => (
464
- <AuthLayout
465
- t={mockT}
466
- title="Sign In"
467
- logo="/assets/images/datastake-logo.svg"
468
- appName="default"
469
- showTopHeader={false}
470
- >
471
- <LoginForm />
472
- </AuthLayout>
473
- ),
474
- };
475
-
476
- // With JSX Subtitle
477
- export const WithJSXSubtitle = {
478
- name: "With JSX Subtitle",
479
- render: () => (
480
- <AuthLayout
481
- t={mockT}
482
- title="Welcome Back"
483
- subTitle={
484
- <span>
485
- New here?{" "}
486
- <a href="#" style={{ color: "#4F46E5", textDecoration: "none", fontWeight: "600" }}>
487
- Create an account
488
- </a>
489
- </span>
490
- }
491
- logo="/assets/images/datastake-logo.svg"
492
- appName="default"
493
- rightImageUrl="/assets/images/auth-bg.svg"
494
- showTopHeader={true}
495
- showLanguageSelector={true}
496
- updateLanguage={(lng) => console.log("Language changed to:", lng)}
497
- >
498
- <LoginForm />
499
- </AuthLayout>
500
- ),
501
- };
502
-
@@ -1,43 +0,0 @@
1
- export const navItems = [
2
- {
3
- key: 'home',
4
- route: '',
5
- label: 'Home',
6
- },
7
- {
8
- key: 'about',
9
- route: 'about',
10
- label: 'About',
11
- },
12
- {
13
- key: 'platform',
14
- route: 'platform',
15
- label: 'Platform',
16
- },
17
- {
18
- key: 'applications',
19
- route: 'applications',
20
- label: 'Applications',
21
- },
22
- {
23
- key: 'buzz',
24
- route: 'buzz',
25
- label: 'Buzz',
26
- },
27
- ];
28
-
29
- export const languages = [
30
- {
31
- value: 'en',
32
- label: '🇬🇧 EN',
33
- },
34
- {
35
- value: 'fr',
36
- label: '🇫🇷 FR',
37
- },
38
- {
39
- value: 'sp',
40
- label: '🇪🇸 ES',
41
- },
42
- ];
43
-