@genesislcap/blank-app-seed 5.7.0-prerelease.2 → 5.7.0-prerelease.21

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 (77) hide show
  1. package/.genx/configure.js +114 -0
  2. package/.genx/package.json +5 -2
  3. package/.genx/prompts/api.js +25 -0
  4. package/.genx/prompts/ui.js +12 -0
  5. package/.genx/prompts.js +8 -2
  6. package/.genx/static.js +1 -0
  7. package/.genx/templates/angular/component/component.hbs +31 -3
  8. package/.genx/templates/angular/entityManager.hbs +17 -6
  9. package/.genx/templates/angular/grid.hbs +5 -2
  10. package/.genx/templates/angular/slices/eventing.slice.hbs +41 -0
  11. package/.genx/templates/angular/store.hbs +16 -0
  12. package/.genx/templates/react/component/component.hbs +84 -15
  13. package/.genx/templates/react/entityManager.hbs +11 -17
  14. package/.genx/templates/react/grid.hbs +5 -9
  15. package/.genx/templates/react/gridLayout.hbs +4 -4
  16. package/.genx/templates/react/horizontalLayout.hbs +1 -1
  17. package/.genx/templates/react/route.hbs +12 -1
  18. package/.genx/templates/react/slices/eventing.slice.hbs +39 -0
  19. package/.genx/templates/react/store.hbs +24 -0
  20. package/.genx/templates/react/tabsLayout.hbs +1 -1
  21. package/.genx/templates/web-components/component/component.hbs +26 -0
  22. package/.genx/templates/web-components/entityManager.hbs +17 -9
  23. package/.genx/templates/web-components/grid.hbs +13 -5
  24. package/.genx/templates/web-components/slices/eventing.slice.hbs +44 -0
  25. package/.genx/templates/web-components/store.hbs +18 -0
  26. package/.genx/utils/fontUtils.js +75 -0
  27. package/.genx/utils/formatRouteData.js +5 -0
  28. package/.genx/utils/generateRoute.js +1 -1
  29. package/.genx/utils/generateStore.js +98 -0
  30. package/.genx/utils/index.js +4 -0
  31. package/.genx/versions.json +3 -3
  32. package/.github/CODEOWNERS +1 -1
  33. package/.github/pull_request_template.md +6 -0
  34. package/.github/workflows/upgrade.yml +0 -1
  35. package/CHANGELOG.md +168 -0
  36. package/client-tmp/angular/package.json +5 -0
  37. package/client-tmp/angular/src/app/app.component.ts +2 -31
  38. package/client-tmp/angular/src/app/app.module.ts +3 -0
  39. package/client-tmp/angular/src/app/layouts/default/default.layout.css +8 -0
  40. package/client-tmp/angular/src/app/layouts/default/default.layout.html +3 -0
  41. package/client-tmp/angular/src/styles/design-tokens.json +1 -1
  42. package/client-tmp/angular/src/styles/styles.css +15 -1
  43. package/client-tmp/react/index.html +0 -1
  44. package/client-tmp/react/package.json +16 -28
  45. package/client-tmp/react/public/index.html +3 -1
  46. package/client-tmp/react/src/App.tsx +12 -29
  47. package/client-tmp/react/src/components/routes/AppRoutes.tsx +4 -4
  48. package/client-tmp/react/src/config.ts +1 -1
  49. package/client-tmp/react/src/layouts/blank/BlankLayout.tsx +1 -1
  50. package/client-tmp/react/src/layouts/default/DefaultLayout.module.css +8 -0
  51. package/client-tmp/react/src/layouts/default/DefaultLayout.tsx +7 -4
  52. package/client-tmp/react/src/main.tsx +1 -1
  53. package/client-tmp/react/src/pages/AuthPage/AuthPage.tsx +1 -1
  54. package/client-tmp/react/src/pages/NotFoundPage/NotFoundPage.tsx +1 -1
  55. package/client-tmp/react/src/pages/NotPermittedPage/NotPermittedPage.test.tsx +1 -1
  56. package/client-tmp/react/src/pages/NotPermittedPage/NotPermittedPage.tsx +1 -1
  57. package/client-tmp/react/src/pbc/container.tsx +1 -1
  58. package/client-tmp/react/src/share/foundation-login.ts +2 -2
  59. package/client-tmp/react/src/store/RoutesContext.tsx +6 -6
  60. package/client-tmp/react/src/styles/design-tokens.json +1 -1
  61. package/client-tmp/react/src/styles/styles.css +15 -1
  62. package/client-tmp/react/src/utils/getLayoutNameByRoute.ts +1 -1
  63. package/client-tmp/react/src/utils/goldenLayout.helper.ts +59 -0
  64. package/client-tmp/react/test/e2e/fixture.ts +1 -1
  65. package/client-tmp/web-components/package.json +4 -0
  66. package/client-tmp/web-components/src/layouts/default.ts +12 -2
  67. package/client-tmp/web-components/src/main/main.css +12 -0
  68. package/client-tmp/web-components/src/main/main.template.ts +0 -1
  69. package/client-tmp/web-components/src/main/main.ts +1 -34
  70. package/client-tmp/web-components/src/styles/design-tokens.json +1 -1
  71. package/client-tmp/web-components/src/styles/typography.ts +6 -4
  72. package/package.json +1 -1
  73. package/client-tmp/angular/src/app/store/store.ts +0 -34
  74. package/client-tmp/react/lint-css.ts +0 -19
  75. package/client-tmp/react/src/services/store.service.ts +0 -48
  76. package/client-tmp/react/vite.config.ts +0 -70
  77. package/client-tmp/web-components/src/store/store.ts +0 -29
package/CHANGELOG.md CHANGED
@@ -1,5 +1,173 @@
1
1
  # Changelog
2
2
 
3
+ ## [5.7.0-prerelease.21](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.20...v5.7.0-prerelease.21) (2025-10-31)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * use relative logo source instead of absolute GENC-1232 1002762
9
+ * use relative logo source instead of absolute GENC-1232 (#533) 71a9b23
10
+
11
+ ## [5.7.0-prerelease.20](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.19...v5.7.0-prerelease.20) (2025-10-29)
12
+
13
+
14
+ ### Bug Fixes
15
+
16
+ * bump fui version to fix modal regression 4594a2d
17
+ * bump fui version to fix modal regression (#532) ad41045
18
+
19
+ ## [5.7.0-prerelease.19](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.18...v5.7.0-prerelease.19) (2025-10-28)
20
+
21
+
22
+ ### Features
23
+
24
+ * bump fui versions to receive light mode fixes 6f244c5
25
+ * bump fui versions to receive light mode fixes (#530) 3df2a30
26
+
27
+ ## [5.7.0-prerelease.18](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.17...v5.7.0-prerelease.18) (2025-10-28)
28
+
29
+
30
+ ### Features
31
+
32
+ * fix setting fonts and set css used for handlers GENC-1232 de493e3
33
+ * optionally set fonts in generated app via genx GENC-1232 (#531) 596f933
34
+
35
+ ## [5.7.0-prerelease.17](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.16...v5.7.0-prerelease.17) (2025-10-24)
36
+
37
+
38
+ ### Bug Fixes
39
+
40
+ * handling of optional headerlogo GENC-1232 ece95a3
41
+ * handling of optional headerlogo GENC-1232 (#529) 88ed8d6
42
+
43
+ ## [5.7.0-prerelease.16](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.15...v5.7.0-prerelease.16) (2025-10-23)
44
+
45
+
46
+ ### Features
47
+
48
+ * configure foundation header logo during init GENC-1232 fa452b4
49
+ * optionally set header logo during genx init GENC-1232 (#528) 86c8950
50
+ * set logo styles GENC-1232 950a6b6
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * apply logo styles by default GENC-1232 00814d8
56
+ * erronous ifAny check in react for datasourceConfig GENC-1232 c109583
57
+ * linting error in generated app GENC-1232 4c176cc
58
+ * linting error in generated app react and angular GENC-1232 a95c6a5
59
+ * logo configuration in angular GENC-1232 14445fc
60
+
61
+ ## [5.7.0-prerelease.15](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.14...v5.7.0-prerelease.15) (2025-10-22)
62
+
63
+
64
+ ### Bug Fixes
65
+
66
+ * updating server version information for Auth [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) 9b0d2cf
67
+
68
+ ## [5.7.0-prerelease.14](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.13...v5.7.0-prerelease.14) (2025-10-22)
69
+
70
+
71
+ ### Bug Fixes
72
+
73
+ * updating server version information for GSF [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) 80b9ac5
74
+
75
+ ## [5.7.0-prerelease.13](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.12...v5.7.0-prerelease.13) (2025-10-22)
76
+
77
+
78
+ ### Features
79
+
80
+ * add ability to set design tokens for generated application GENC-1232 bfcf676
81
+ * add ability to set design tokens for generated application GENC-1232 (#526) c01a7f3
82
+
83
+
84
+ ### Bug Fixes
85
+
86
+ * logic applying design token option GENC-1232 a42f6b6
87
+ * logic applying design token option GENC-1232 760e6c1
88
+ * logic applying design token option GENC-1232 7e25e01
89
+ * logic applying design token option GENC-1232 f11fd09
90
+ * logic applying design token option GENC-1232 54b2e75
91
+ * logic applying design token option GENC-1232 63faf22
92
+ * logic applying design token option GENC-1232 6de63aa
93
+ * logic applying design token option GENC-1232 d721477
94
+ * logic applying design token option GENC-1232 a66eada
95
+ * logic applying design token option GENC-1232 3c72211
96
+ * template example shoudl be using light mode value GENC-1232 b87024f
97
+
98
+ ## [5.7.0-prerelease.12](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.11...v5.7.0-prerelease.12) (2025-10-22)
99
+
100
+
101
+ ### Features
102
+
103
+ * grid interactions web-components/react/angular GENC-1211 ddcf44c
104
+ * grid interactions web-components/react/angular GENC-1211 (#527) a9a112b
105
+
106
+ ## [5.7.0-prerelease.11](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.10...v5.7.0-prerelease.11) (2025-10-21)
107
+
108
+
109
+ ### Bug Fixes
110
+
111
+ * updating server version information for Auth [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) a597461
112
+
113
+ ## [5.7.0-prerelease.10](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.9...v5.7.0-prerelease.10) (2025-10-21)
114
+
115
+
116
+ ### Bug Fixes
117
+
118
+ * updating server version information for GSF [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) f1c7a32
119
+
120
+ ## [5.7.0-prerelease.9](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.8...v5.7.0-prerelease.9) (2025-10-21)
121
+
122
+
123
+ ### Bug Fixes
124
+
125
+ * updating server version information for Auth [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) b666a8b
126
+
127
+ ## [5.7.0-prerelease.8](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.7...v5.7.0-prerelease.8) (2025-10-21)
128
+
129
+
130
+ ### Bug Fixes
131
+
132
+ * updating server version information for GSF [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) bc1fc15
133
+
134
+ ## [5.7.0-prerelease.7](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.6...v5.7.0-prerelease.7) (2025-10-20)
135
+
136
+
137
+ ### Bug Fixes
138
+
139
+ * updating server version information for Auth [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) db1cff2
140
+
141
+ ## [5.7.0-prerelease.6](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.5...v5.7.0-prerelease.6) (2025-10-20)
142
+
143
+
144
+ ### Bug Fixes
145
+
146
+ * updating server version information for GSF [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) 24510a4
147
+
148
+ ## [5.7.0-prerelease.5](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.4...v5.7.0-prerelease.5) (2025-10-17)
149
+
150
+
151
+ ### Bug Fixes
152
+
153
+ * add proxy for vite with react ff07e8f
154
+ * add proxy for vite with react adb23b4
155
+ * add proxy for vite with react (#518) 65bab7f
156
+
157
+ ## [5.7.0-prerelease.4](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.3...v5.7.0-prerelease.4) (2025-10-17)
158
+
159
+
160
+ ### Bug Fixes
161
+
162
+ * updating server version information for Auth [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) de06d08
163
+
164
+ ## [5.7.0-prerelease.3](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.2...v5.7.0-prerelease.3) (2025-10-17)
165
+
166
+
167
+ ### Bug Fixes
168
+
169
+ * updating server version information for GSF [PSD-0](https://github.com/genesiscommunitysuccess/blank-app-seed/issues/0) 3ebdac7
170
+
3
171
  ## [5.7.0-prerelease.2](https://github.com/genesiscommunitysuccess/blank-app-seed/compare/v5.7.0-prerelease.1...v5.7.0-prerelease.2) (2025-10-16)
4
172
 
5
173
 
@@ -78,6 +78,7 @@
78
78
  "@angular/platform-browser-dynamic": "^18.0.4",
79
79
  "@angular/router": "^18.0.4",
80
80
  "@genesislcap/foundation-comms": "{{versions.UI}}",
81
+ "@genesislcap/foundation-criteria": "{{versions.UI}}",
81
82
  "@genesislcap/foundation-entity-management": "{{versions.UI}}",
82
83
  "@genesislcap/foundation-events": "{{versions.UI}}",
83
84
  {{#if FDC3.includeDependencies}}
@@ -102,6 +103,8 @@
102
103
  "@genesislcap/rapid-design-system": "{{versions.UI}}",
103
104
  "@genesislcap/rapid-grid-pro": "{{versions.UI}}",
104
105
  "@genesislcap/web-core": "{{versions.UI}}",
106
+ "@genesislcap/foundation-redux": "{{versions.UI}}",
107
+ "@reduxjs/angular-redux": "^1.0.1",
105
108
  "numeral": "2.0.6",
106
109
  "tslib": "^2.3.0",
107
110
  "zone.js": "~0.14.3"
@@ -117,6 +120,7 @@
117
120
  "@angular/platform-browser-dynamic": "^18.0.4",
118
121
  "@angular/router": "^18.0.4",
119
122
  "@genesislcap/foundation-comms": "{{versions.UI}}",
123
+ "@genesislcap/foundation-criteria": "{{versions.UI}}",
120
124
  "@genesislcap/foundation-entity-management": "{{versions.UI}}",
121
125
  "@genesislcap/foundation-events": "{{versions.UI}}",
122
126
  {{#if FDC3.includeDependencies}}
@@ -139,6 +143,7 @@
139
143
  "@genesislcap/grid-tabulator": "{{versions.UI}}",
140
144
  "@genesislcap/rapid-design-system": "{{versions.UI}}",
141
145
  "@genesislcap/rapid-grid-pro": "{{versions.UI}}",
146
+ "@genesislcap/foundation-redux": "{{versions.UI}}",
142
147
  "@genesislcap/web-core": "{{versions.UI}}",
143
148
  "numeral": "2.0.6",
144
149
  "tslib": "^2.3.0",
@@ -5,8 +5,7 @@ import getLayoutNameByRoute from './utils/getLayoutNameByRoute';
5
5
  import type { LayoutComponentName } from './types/layout';
6
6
  import { configureFoundationAuth } from './share/foundation-auth';
7
7
  import { registerComponents } from './share/genesis-components';
8
- import { getStore } from './store';
9
- import { customEventFactory, registerStylesTarget } from '../pbc/utils';
8
+ import { registerStylesTarget } from '../pbc/utils';
10
9
  {{#if FDC3.channels.length}}
11
10
  import { listenToChannel, onFDC3Ready } from './utils';
12
11
  {{/if}}
@@ -16,10 +15,9 @@ import { listenToChannel, onFDC3Ready } from './utils';
16
15
  templateUrl: './app.component.html',
17
16
  styleUrl: './app.component.css',
18
17
  })
19
- export class AppComponent implements OnInit, OnDestroy, AfterViewInit {
18
+ export class AppComponent implements OnInit, AfterViewInit {
20
19
  layoutName?: LayoutComponentName;
21
20
  title = '{{capitalCase appName}}';
22
- store = getStore();
23
21
 
24
22
  // @ts-ignore
25
23
  @Connect connect: Connect;
@@ -40,42 +38,15 @@ export class AppComponent implements OnInit, OnDestroy, AfterViewInit {
40
38
  }
41
39
 
42
40
  ngOnInit() {
43
- this.addEventListeners();
44
- this.readyStore();
45
41
  registerStylesTarget(this.el.nativeElement, 'main');
46
42
  this.loadRemotes();
47
43
  }
48
44
 
49
- ngOnDestroy() {
50
- this.removeEventListeners();
51
- this.disconnectStore();
52
- }
53
45
 
54
46
  async loadRemotes() {
55
47
  await registerComponents();
56
48
  }
57
49
 
58
- addEventListeners() {
59
- this.el.nativeElement.addEventListener('store-connected', this.store.onConnected);
60
- }
61
-
62
- removeEventListeners() {
63
- this.el.nativeElement.removeEventListener('store-connected', this.store.onConnected);
64
- }
65
-
66
- readyStore() {
67
- this.dispatchCustomEvent('store-connected', this.el.nativeElement);
68
- this.dispatchCustomEvent('store-ready', true);
69
- }
70
-
71
- disconnectStore() {
72
- this.dispatchCustomEvent('store-disconnected');
73
- }
74
-
75
- dispatchCustomEvent(type: string, detail?: any) {
76
- this.el.nativeElement.dispatchEvent(customEventFactory(type, detail));
77
- }
78
-
79
50
  ngAfterViewInit() {
80
51
  {{#if FDC3.channels.length}}
81
52
  onFDC3Ready(this.FDC3ReadyHandler);
@@ -9,6 +9,8 @@ import { DefaultLayoutComponent } from './layouts/default/default.layout';
9
9
  import { BlankLayoutComponent } from './layouts/blank/blank.layout';
10
10
  import { LayoutLazyLoadDirective } from './directive/app-lazy-load.directive';
11
11
  import { RouteService } from './services/route.service';
12
+ import { provideRedux } from '@reduxjs/angular-redux';
13
+ import { reduxStore } from './store/store';
12
14
 
13
15
  @NgModule({
14
16
  declarations: [
@@ -26,6 +28,7 @@ import { RouteService } from './services/route.service';
26
28
  ],
27
29
  providers: [
28
30
  RouteService,
31
+ provideRedux({ store: reduxStore as any }),
29
32
  {
30
33
  provide: APP_INITIALIZER,
31
34
  useFactory: (service: RouteService, router: Router) => () => router.resetConfig(service.allRoutes()),
@@ -33,6 +33,14 @@ foundation-header::part(background) {
33
33
  box-sizing: border-box;
34
34
  }
35
35
 
36
+ foundation-header::part(logo) {
37
+ max-width: 50px;
38
+ max-height: 24px;
39
+ width: auto;
40
+ height: auto;
41
+ object-fit: contain;
42
+ }
43
+
36
44
  .routes-wrapper {
37
45
  display: flex;
38
46
  gap: calc(var(--design-unit) * 2px);
@@ -1,6 +1,9 @@
1
1
  <rapid-design-system-provider #designSystemProvider>
2
2
  <pbc-elements-renderer [target]="['layout-start']"></pbc-elements-renderer>
3
3
  <foundation-header
4
+ {{#if headerLogoSrc}}
5
+ logo-src="assets/{{headerLogoSrc}}"
6
+ {{/if}}
4
7
  #foundationHeader
5
8
  show-luminance-toggle-button
6
9
  show-misc-toggle-button
@@ -12,7 +12,7 @@
12
12
  },
13
13
  "fontFamily": {
14
14
  "bodyFont": {
15
- "$value": "Roboto, \"Segoe UI\", Arial, Helvetica, sans-serif",
15
+ "$value": "{{#if fontFamily}}{{fontFamily}}, {{/if}}Roboto, \"Segoe UI\", Arial, Helvetica, sans-serif",
16
16
  "$type": "fontFamily"
17
17
  }
18
18
  },
@@ -1,11 +1,25 @@
1
+ {{#if fontData}}
2
+ {{#each fontData}}
3
+ @font-face {
4
+ font-family: "{{../fontFamily}}";
5
+ src: url("../assets/fonts/{{filename}}") format("{{format}}");
6
+ font-weight: {{weight}};
7
+ font-style: normal;
8
+ font-display: swap;
9
+ }
10
+ {{/each}}
11
+ {{/if}}
12
+
13
+ {{#unless fontFamily}}
1
14
  @font-face {
2
15
  font-family: Segoe UI;
3
16
  font-weight: 300;
4
17
  src: local("Segoe UI Semilight"), local("Segoe UI");
5
18
  }
19
+ {{/unless}}
6
20
 
7
21
  * {
8
- font-family: "Segoe UI", "Helvetica Neue", Arial, sans-serif;
22
+ font-family: {{#if fontFamily}}"{{fontFamily}}", {{/if}}"Segoe UI", "Helvetica Neue", Arial, sans-serif;
9
23
  font-style: normal;
10
24
  font-weight: normal;
11
25
  }
@@ -2,7 +2,6 @@
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
6
  <title>{{capitalCase appName}}</title>
8
7
  </head>
@@ -3,27 +3,28 @@
3
3
  "version": "{{applicationVersionWeb}}",
4
4
  "private": true,
5
5
  "config": {
6
+ "API_HOST": "{{apiHost}}",
7
+ "PORT": 6060,
8
+ "ENABLE_SSO": {{enableSSO}},
6
9
  "PERSIST_LAYOUT_IN_DEV": false
7
10
  },
8
11
  "scripts": {
9
12
  "baseline": "npm run clean && npm run bootstrap",
10
- "bootstrap": "npm i --legacy-peer-deps",
13
+ "bootstrap": "npm i --no-fund --no-audit",
11
14
  "bootstrap:ci": "npm ci --no-fund --no-audit",
12
- "build": "webpack --mode production",
13
- "build:vite": "vite build",
15
+ "build": "genx build -b vite",
14
16
  "build:stats": "npm run build --stats-json",
15
17
  "clean": "genx clean dist node_modules",
16
- "dev": "webpack serve --mode development",
17
- "dev:vite": "vite build && vite preview",
18
+ "dev": "genx dev -b vite -e API_HOST,PORT,ENABLE_SSO,PERSIST_LAYOUT_IN_DEV",
18
19
  "dev:docker": "npm run dev -- --host 0.0.0.0",
19
20
  "dev:no-open": "NO_OPEN=true npm run dev",
20
21
  "dev:intellij": "npm run dev",
21
22
  "dev:https": "HTTPS=true npm run dev",
22
23
  "dsconfig": "dsconfig --path src/styles/design-tokens.json",
23
- "lint": "eslint src/**/*.ts src/**/*.tsx",
24
- "lint:fix": "eslint src/**/*.ts src/**/*.tsx --fix",
25
- "lint:eslint": "npm lint",
26
- "lint:stylelint": "npx ts-node lint-css.ts",
24
+ "lint": "genx lint --profile",
25
+ "lint:fix": "genx lint --fix",
26
+ "lint:eslint": "genx lint -l eslint --profile",
27
+ "lint:stylelint": "genx lint -l stylelint",
27
28
  "stats": "webpack --mode production --json > stats.json",
28
29
  "test": "jest",
29
30
  "test:coverage": "jest --coverage",
@@ -40,6 +41,7 @@
40
41
  "@ag-grid-enterprise/row-grouping": "29.2.0",
41
42
  "@ag-grid-enterprise/server-side-row-model": "29.2.0",
42
43
  "@genesislcap/foundation-comms": "{{versions.UI}}",
44
+ "@genesislcap/foundation-criteria": "{{versions.UI}}",
43
45
  "@genesislcap/foundation-entity-management": "{{versions.UI}}",
44
46
  {{#if FDC3.includeDependencies}}
45
47
  "@genesislcap/foundation-fdc3": "{{versions.UI}}",
@@ -56,6 +58,7 @@
56
58
  "@genesislcap/foundation-user": "{{versions.UI}}",
57
59
  "@genesislcap/foundation-utils": "{{versions.UI}}",
58
60
  "@genesislcap/foundation-zero-grid-tabulator": "{{versions.UI}}",
61
+ "@genesislcap/foundation-redux": "{{versions.UI}}",
59
62
  "@genesislcap/rapid-design-system": "{{versions.UI}}",
60
63
  "@genesislcap/rapid-grid-pro": "{{versions.UI}}",
61
64
  "@genesislcap/rapid-grid-tabulator": "{{versions.UI}}",
@@ -66,6 +69,7 @@
66
69
  "history": "^5.3.0",
67
70
  "react": "^19.0.0",
68
71
  "react-dom": "^19.0.0",
72
+ "react-redux": "^9.1.2",
69
73
  "react-router-dom": "^7.1.3",
70
74
  "web-vitals": "^2.1.4"
71
75
  },
@@ -73,9 +77,6 @@
73
77
  "@analytics/core": "0.12.17"
74
78
  },
75
79
  "devDependencies": {
76
- "@babel/core": "^7.25.2",
77
- "@babel/preset-env": "^7.25.4",
78
- "@babel/preset-react": "^7.26.3",
79
80
  "@genesislcap/design-system-configurator": "{{versions.UI}}",
80
81
  "@genesislcap/eslint-config": "{{versions.UI}}",
81
82
  "@genesislcap/prettier-config": "{{versions.UI}}",
@@ -88,26 +89,13 @@
88
89
  "@types/css-modules": "^1.0.5",
89
90
  "@types/jest": "^29.5.12",
90
91
  "@types/node": "^20.14.10",
91
- "@types/react": "^19.0.1",
92
- "@types/react-dom": "^19.0.2",
93
- "@typescript-eslint/parser": "^7.13.1",
94
- "@vitejs/plugin-react": "^4.3.1",
95
- "babel-loader": "^9.2.1",
96
- "babel-plugin-react-require": "^4.0.3",
97
- "dotenv-webpack": "^8.1.0",
98
- "eslint": "^8.57.0",
92
+ "@types/react": "^19.2.0",
93
+ "@types/react-dom": "^19.2.0",
99
94
  "eslint-plugin-react-hooks": "^5.1.0",
100
95
  "eslint-plugin-react-refresh": "^0.4.16",
101
- "file-loader": "^6.2.0",
102
96
  "jest": "^29.7.0",
103
97
  "jest-environment-jsdom": "^29.7.0",
104
98
  "ts-jest": "^29.2.5",
105
- "ts-node": "^10.9.2",
106
- "typescript": "^5.2.2",
107
- "vite": "^5.3.1",
108
- "vite-plugin-tsconfig-paths": "^1.4.1",
109
- "webpack": "^5.94.0",
110
- "webpack-cli": "^5.1.4",
111
- "webpack-dev-server": "^5.1.0"
99
+ "ts-node": "^10.9.2"
112
100
  }
113
101
  }
@@ -5,9 +5,11 @@
5
5
  <link rel="icon" type="image/x-icon" href="favicon.ico">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>{{capitalCase appName}}</title>
8
+ <link rel="stylesheet" href="/{{appName}}.css" />
8
9
  </head>
9
10
  <body>
10
11
  <div id="root"></div>
11
- <script src="/bundle.js"></script>
12
+ <script>window.process = window.process || { env: {} };</script>
13
+ <script type="module" src="/{{appName}}.mjs"></script>
12
14
  </body>
13
15
  </html>
@@ -7,26 +7,19 @@ import {
7
7
  onFDC3Ready,
8
8
  {{/if}}
9
9
  } from './utils';
10
- import { customEventFactory, registerStylesTarget } from '@/pbc/utils';
10
+ import { customEventFactory, registerStylesTarget } from './pbc/utils';
11
11
  import { RoutesProvider } from './store/RoutesContext';
12
12
  import { registerComponents as genesisRegisterComponents } from './share/genesis-components';
13
- import { storeService } from '@/services/store.service';
14
13
  import AppRoutes from './components/routes/AppRoutes';
15
14
  import NotFoundPage from "@/pages/NotFoundPage/NotFoundPage.tsx";
16
-
15
+ import { reduxStore } from './store/store';
16
+ import { Provider } from 'react-redux';
17
17
 
18
18
  interface AppProps {
19
19
  rootElement: HTMLElement;
20
20
  }
21
21
 
22
- const App: React.FC<AppProps> = ({ rootElement }) => {
23
- const [isStoreConnected, setIsStoreConnected] = useState(false);
24
- const dispatchCustomEvent = (type: string, detail?: any) => {
25
- rootElement.dispatchEvent(customEventFactory(type, detail));
26
- };
27
- const handleStoreConnected = (event: CustomEvent) => {
28
- storeService.onConnected(event);
29
- };
22
+ const App: React.FC<AppProps> = ({}) => {
30
23
  {{#if FDC3.channels.length~}}
31
24
  const FDC3ReadyHandler = () => {
32
25
  {{#each FDC3.channels}}
@@ -47,30 +40,20 @@ const App: React.FC<AppProps> = ({ rootElement }) => {
47
40
  {{#if FDC3.channels.length~}}
48
41
  onFDC3Ready(FDC3ReadyHandler);
49
42
  {{/if}}
50
- if (!isStoreConnected) {
51
- rootElement.addEventListener('store-connected', handleStoreConnected);
52
- dispatchCustomEvent('store-connected', rootElement);
53
- dispatchCustomEvent('store-ready', true);
54
- setIsStoreConnected(true);
55
- }
56
43
 
57
- return () => {
58
- if (isStoreConnected) {
59
- rootElement.removeEventListener('store-connected', handleStoreConnected);
60
- dispatchCustomEvent('store-disconnected');
61
- }
62
- };
63
- }, [isStoreConnected]);
44
+ }, []);
64
45
 
65
46
  const baseElement = document.querySelector('base');
66
47
  const basePath = baseElement?.getAttribute('href') || '';
67
48
 
68
49
  return (
69
- <RoutesProvider>
70
- <Router basename={basePath}>
71
- <AppRoutes />
72
- </Router>
73
- </RoutesProvider>
50
+ <Provider store={reduxStore}>
51
+ <RoutesProvider>
52
+ <Router basename={basePath}>
53
+ <AppRoutes />
54
+ </Router>
55
+ </RoutesProvider>
56
+ </Provider>
74
57
  );
75
58
  };
76
59
 
@@ -1,11 +1,11 @@
1
1
  import { Routes, Route, Navigate } from 'react-router-dom';
2
2
  import AuthPage from '../../pages/AuthPage/AuthPage';
3
- import {{pascalCase routes.[0].name}} from '@/pages/{{pascalCase routes.[0].name}}/{{pascalCase routes.[0].name}}';
3
+ import {{pascalCase routes.[0].name}} from '../../pages/{{pascalCase routes.[0].name}}/{{pascalCase routes.[0].name}}';
4
4
  import DefaultLayout from '../../layouts/default/DefaultLayout';
5
5
  import ProtectedRoute from './ProtectedRoute';
6
- import { useRoutesContext } from '@/store/RoutesContext';
7
- import PBCContainer from '@/pbc/container';
8
- import NotFoundPage from '@/pages/NotFoundPage/NotFoundPage.tsx';
6
+ import { useRoutesContext } from '../../store/RoutesContext';
7
+ import PBCContainer from '../../pbc/container';
8
+ import NotFoundPage from '../../pages/NotFoundPage/NotFoundPage.tsx';
9
9
 
10
10
  const AppRoutes = () => {
11
11
  const routes = useRoutesContext();
@@ -1,5 +1,5 @@
1
1
  import { RouteLayouts } from './types/RouteLayouts';
2
- import { environment } from '@environment';
2
+ import { environment } from './environments/environment';
3
3
 
4
4
  export const routeLayouts: RouteLayouts = {
5
5
  '/login': 'blank',
@@ -1,7 +1,7 @@
1
1
  import React, { ReactNode, useEffect, useRef } from 'react';
2
2
  import { configureDesignSystem } from '@genesislcap/foundation-ui';
3
3
  import styles from './BlankLayout.module.css';
4
- import * as designTokens from '@/styles/design-tokens.json';
4
+ import * as designTokens from '../../styles/design-tokens.json';
5
5
 
6
6
  interface BlankLayoutProps {
7
7
  children: ReactNode;
@@ -17,6 +17,14 @@
17
17
  border: none;
18
18
  }
19
19
 
20
+ .default-layout foundation-header::part(logo) {
21
+ max-width: 50px;
22
+ max-height: 24px;
23
+ width: auto;
24
+ height: auto;
25
+ object-fit: contain;
26
+ }
27
+
20
28
  .routes-wrapper {
21
29
  display: flex;
22
30
  gap: calc(var(--design-unit) * 2px);
@@ -6,10 +6,10 @@ import {
6
6
  StandardLuminance,
7
7
  } from '@microsoft/fast-components';
8
8
  import styles from './DefaultLayout.module.css';
9
- import PBCElementsRenderer from '@/pbc/elementsRenderer';
10
- import * as designTokens from '@/styles/design-tokens.json';
11
- import { useRoutesContext } from '@/store/RoutesContext';
12
- import { AUTH_PATH } from '@/config';
9
+ import PBCElementsRenderer from '../../pbc/elementsRenderer';
10
+ import * as designTokens from '../../styles/design-tokens.json';
11
+ import { useRoutesContext } from '../../store/RoutesContext';
12
+ import { AUTH_PATH } from '../../config';
13
13
  import { LOGOUT_URL } from '@genesislcap/foundation-utils';
14
14
 
15
15
  interface DefaultLayoutProps {}
@@ -57,6 +57,9 @@ const DefaultLayout: React.FC<DefaultLayoutProps> = () => {
57
57
  <rapid-design-system-provider ref={designSystemProviderRef} class={className}>
58
58
  <PBCElementsRenderer target={['layout-start']} />
59
59
  <foundation-header
60
+ {{#if headerLogoSrc}}
61
+ logo-src="{{headerLogoSrc}}"
62
+ {{/if}}
60
63
  onluminance-icon-clicked={onLuminanceToggle}
61
64
  logout={async () => {
62
65
  await fetch(LOGOUT_URL);
@@ -2,7 +2,7 @@ import React from 'react'
2
2
  import ReactDOM from 'react-dom/client'
3
3
  import App from './App.tsx'
4
4
 
5
- import { registerPBCs } from '@/pbc/utils';
5
+ import { registerPBCs } from './pbc/utils';
6
6
  import { createLogger } from '@genesislcap/foundation-logger';
7
7
 
8
8
  import './styles/styles.css'
@@ -1,6 +1,6 @@
1
1
  import React, {useEffect} from 'react';
2
2
  import './AuthPage.css';
3
- import { configureFoundationLogin } from "@/share/foundation-login.ts";
3
+ import { configureFoundationLogin } from '../../share/foundation-login.ts';
4
4
  import { useNavigate, useLocation } from 'react-router-dom';
5
5
 
6
6
  const AuthPage: React.FC = () => {
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import ErrorMessage from '@/components/ErrorMessage/ErrorMessage';
2
+ import ErrorMessage from '../../components/ErrorMessage/ErrorMessage';
3
3
  import './NotFoundPage.css';
4
4
 
5
5
  const NotFoundPage: React.FC = () => {
@@ -1,7 +1,7 @@
1
1
  import { render, screen } from '@testing-library/react';
2
2
  import NotPermittedPage from './NotPermittedPage';
3
3
 
4
- jest.mock('@/components/ErrorMessage/ErrorMessage', () => {
4
+ jest.mock('../../components/ErrorMessage/ErrorMessage', () => {
5
5
  return jest.fn((props: { message: string }) => <h1 data-testid="error-message">{props.message}</h1>);
6
6
  });
7
7