@hai3/framework 0.2.0-alpha.4 → 0.4.0-alpha.1
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/CLAUDE.md +194 -19
- package/commands/hai3-new-action.md +6 -45
- package/dist/index.cjs +498 -521
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +309 -94
- package/dist/index.d.ts +309 -94
- package/dist/index.js +486 -504
- package/dist/index.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +30 -117
- package/dist/types.d.ts +30 -117
- package/llms.txt +122 -13
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -22,6 +22,8 @@ var HAI3AppBuilderImpl = class {
|
|
|
22
22
|
* Add a plugin to the application.
|
|
23
23
|
* Also accepts an array of plugins (for preset support).
|
|
24
24
|
*/
|
|
25
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-app-bootstrap:p1:inst-1
|
|
26
|
+
// @cpt-begin:cpt-hai3-state-framework-composition-builder:p1:inst-1
|
|
25
27
|
use(plugin) {
|
|
26
28
|
if (Array.isArray(plugin)) {
|
|
27
29
|
plugin.forEach((p) => this.use(p));
|
|
@@ -39,6 +41,8 @@ var HAI3AppBuilderImpl = class {
|
|
|
39
41
|
this.plugins.push(resolved);
|
|
40
42
|
return this;
|
|
41
43
|
}
|
|
44
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-app-bootstrap:p1:inst-1
|
|
45
|
+
// @cpt-end:cpt-hai3-state-framework-composition-builder:p1:inst-1
|
|
42
46
|
/**
|
|
43
47
|
* Add multiple plugins at once.
|
|
44
48
|
*/
|
|
@@ -49,6 +53,8 @@ var HAI3AppBuilderImpl = class {
|
|
|
49
53
|
/**
|
|
50
54
|
* Build the application.
|
|
51
55
|
*/
|
|
56
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-app-bootstrap:p1:inst-2
|
|
57
|
+
// @cpt-begin:cpt-hai3-state-framework-composition-builder:p1:inst-2
|
|
52
58
|
build() {
|
|
53
59
|
const orderedPlugins = this.resolveDependencies();
|
|
54
60
|
orderedPlugins.forEach((plugin) => {
|
|
@@ -64,11 +70,10 @@ var HAI3AppBuilderImpl = class {
|
|
|
64
70
|
const app = {
|
|
65
71
|
config: this.config,
|
|
66
72
|
store,
|
|
67
|
-
screensetRegistry: aggregated.registries.screensetRegistry,
|
|
68
73
|
themeRegistry: aggregated.registries.themeRegistry,
|
|
69
|
-
routeRegistry: aggregated.registries.routeRegistry,
|
|
70
74
|
apiRegistry,
|
|
71
75
|
i18nRegistry: aggregated.registries.i18nRegistry,
|
|
76
|
+
screensetsRegistry: aggregated.registries.screensetsRegistry,
|
|
72
77
|
actions: aggregated.actions,
|
|
73
78
|
destroy: () => this.destroyApp(orderedPlugins, app)
|
|
74
79
|
};
|
|
@@ -79,9 +84,13 @@ var HAI3AppBuilderImpl = class {
|
|
|
79
84
|
});
|
|
80
85
|
return app;
|
|
81
86
|
}
|
|
87
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-app-bootstrap:p1:inst-2
|
|
88
|
+
// @cpt-end:cpt-hai3-state-framework-composition-builder:p1:inst-2
|
|
82
89
|
/**
|
|
83
90
|
* Resolve plugin dependencies using topological sort.
|
|
84
91
|
*/
|
|
92
|
+
// @cpt-begin:cpt-hai3-algo-framework-composition-dep-resolution:p1:inst-1
|
|
93
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-plugin-dependency:p1:inst-2
|
|
85
94
|
resolveDependencies() {
|
|
86
95
|
const resolved = [];
|
|
87
96
|
const visited = /* @__PURE__ */ new Set();
|
|
@@ -120,14 +129,17 @@ Add the missing plugin: .use(${depName}())`
|
|
|
120
129
|
this.plugins.forEach(visit);
|
|
121
130
|
return resolved;
|
|
122
131
|
}
|
|
132
|
+
// @cpt-end:cpt-hai3-algo-framework-composition-dep-resolution:p1:inst-1
|
|
133
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-plugin-dependency:p1:inst-2
|
|
123
134
|
/**
|
|
124
135
|
* Aggregate all provides from plugins.
|
|
125
136
|
*/
|
|
137
|
+
// @cpt-begin:cpt-hai3-algo-framework-composition-provides-aggregation:p1:inst-1
|
|
126
138
|
aggregateProvides(plugins) {
|
|
127
139
|
const registries = {};
|
|
128
140
|
const slices = [];
|
|
129
141
|
const effects2 = [];
|
|
130
|
-
const
|
|
142
|
+
const actions2 = {};
|
|
131
143
|
plugins.forEach((plugin) => {
|
|
132
144
|
if (!plugin.provides) return;
|
|
133
145
|
if (plugin.provides.registries) {
|
|
@@ -140,11 +152,12 @@ Add the missing plugin: .use(${depName}())`
|
|
|
140
152
|
effects2.push(...plugin.provides.effects);
|
|
141
153
|
}
|
|
142
154
|
if (plugin.provides.actions) {
|
|
143
|
-
Object.assign(
|
|
155
|
+
Object.assign(actions2, plugin.provides.actions);
|
|
144
156
|
}
|
|
145
157
|
});
|
|
146
|
-
return { registries, slices, effects: effects2, actions };
|
|
158
|
+
return { registries, slices, effects: effects2, actions: actions2 };
|
|
147
159
|
}
|
|
160
|
+
// @cpt-end:cpt-hai3-algo-framework-composition-provides-aggregation:p1:inst-1
|
|
148
161
|
/**
|
|
149
162
|
* Create store with all aggregated slices.
|
|
150
163
|
*
|
|
@@ -159,14 +172,15 @@ Add the missing plugin: .use(${depName}())`
|
|
|
159
172
|
*/
|
|
160
173
|
createStoreWithSlices(slices) {
|
|
161
174
|
const store = getStore();
|
|
162
|
-
slices.forEach((
|
|
163
|
-
registerSlice(
|
|
175
|
+
slices.forEach((slice11) => {
|
|
176
|
+
registerSlice(slice11);
|
|
164
177
|
});
|
|
165
178
|
return store;
|
|
166
179
|
}
|
|
167
180
|
/**
|
|
168
181
|
* Destroy the app and cleanup resources.
|
|
169
182
|
*/
|
|
183
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-teardown:p2:inst-1
|
|
170
184
|
destroyApp(plugins, app) {
|
|
171
185
|
[...plugins].reverse().forEach((plugin) => {
|
|
172
186
|
if (plugin.onDestroy) {
|
|
@@ -174,14 +188,12 @@ Add the missing plugin: .use(${depName}())`
|
|
|
174
188
|
}
|
|
175
189
|
});
|
|
176
190
|
}
|
|
191
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-teardown:p2:inst-1
|
|
177
192
|
};
|
|
178
193
|
function createHAI3(config) {
|
|
179
194
|
return new HAI3AppBuilderImpl(config);
|
|
180
195
|
}
|
|
181
196
|
|
|
182
|
-
// src/plugins/screensets.ts
|
|
183
|
-
import { screensetRegistry as sdkScreensetRegistry } from "@hai3/screensets";
|
|
184
|
-
|
|
185
197
|
// src/slices/index.ts
|
|
186
198
|
import { combineReducers } from "@reduxjs/toolkit";
|
|
187
199
|
|
|
@@ -478,35 +490,26 @@ var layoutDomainReducers = {
|
|
|
478
490
|
var layoutReducer = combineReducers(layoutDomainReducers);
|
|
479
491
|
|
|
480
492
|
// src/plugins/screensets.ts
|
|
481
|
-
|
|
482
|
-
var screenActions2 = screenActions;
|
|
483
|
-
function screensets(config) {
|
|
484
|
-
const screensetRegistry3 = sdkScreensetRegistry;
|
|
493
|
+
function screensets(_config) {
|
|
485
494
|
return {
|
|
486
495
|
name: "screensets",
|
|
487
496
|
dependencies: [],
|
|
488
497
|
provides: {
|
|
489
|
-
registries: {
|
|
490
|
-
|
|
491
|
-
},
|
|
492
|
-
slices: [screenSlice2],
|
|
498
|
+
registries: {},
|
|
499
|
+
slices: [screenSlice],
|
|
493
500
|
actions: {
|
|
494
|
-
setActiveScreen:
|
|
495
|
-
setScreenLoading:
|
|
501
|
+
setActiveScreen: screenActions.navigateTo,
|
|
502
|
+
setScreenLoading: screenActions.setScreenLoading
|
|
496
503
|
}
|
|
497
504
|
},
|
|
498
505
|
onInit() {
|
|
499
|
-
if (config?.autoDiscover) {
|
|
500
|
-
console.log(
|
|
501
|
-
"[HAI3] Auto-discover is enabled. Screensets should be registered via screensetRegistry.register() in your app."
|
|
502
|
-
);
|
|
503
|
-
}
|
|
504
506
|
}
|
|
505
507
|
};
|
|
506
508
|
}
|
|
507
509
|
|
|
508
510
|
// src/plugins/themes.ts
|
|
509
511
|
import { eventBus } from "@hai3/state";
|
|
512
|
+
import { HAI3_SHARED_PROPERTY_THEME } from "@hai3/screensets";
|
|
510
513
|
|
|
511
514
|
// src/registries/themeRegistry.ts
|
|
512
515
|
function createThemeRegistry(config) {
|
|
@@ -644,32 +647,29 @@ function themes(config) {
|
|
|
644
647
|
changeTheme
|
|
645
648
|
}
|
|
646
649
|
},
|
|
647
|
-
|
|
650
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-theme-propagation:p1:inst-2
|
|
651
|
+
// @cpt-begin:cpt-hai3-dod-framework-composition-propagation:p1:inst-1
|
|
652
|
+
onInit(app) {
|
|
648
653
|
eventBus.on("theme/changed", (payload) => {
|
|
649
654
|
themeRegistry.apply(payload.themeId);
|
|
655
|
+
try {
|
|
656
|
+
app.screensetsRegistry?.updateSharedProperty(HAI3_SHARED_PROPERTY_THEME, payload.themeId);
|
|
657
|
+
} catch (error) {
|
|
658
|
+
console.error("[HAI3] Failed to propagate theme to MFE domains", error);
|
|
659
|
+
}
|
|
650
660
|
});
|
|
651
661
|
const themes2 = themeRegistry.getAll();
|
|
652
662
|
if (themes2.length > 0) {
|
|
653
663
|
themeRegistry.apply(themes2[0].id);
|
|
654
664
|
}
|
|
655
665
|
}
|
|
666
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-theme-propagation:p1:inst-2
|
|
667
|
+
// @cpt-end:cpt-hai3-dod-framework-composition-propagation:p1:inst-1
|
|
656
668
|
};
|
|
657
669
|
}
|
|
658
670
|
|
|
659
671
|
// src/plugins/layout.ts
|
|
660
672
|
import { eventBus as eventBus2 } from "@hai3/state";
|
|
661
|
-
var headerSlice2 = headerSlice;
|
|
662
|
-
var footerSlice2 = footerSlice;
|
|
663
|
-
var menuSlice2 = menuSlice;
|
|
664
|
-
var sidebarSlice2 = sidebarSlice;
|
|
665
|
-
var popupSlice2 = popupSlice;
|
|
666
|
-
var overlaySlice2 = overlaySlice;
|
|
667
|
-
var headerActions2 = headerActions;
|
|
668
|
-
var footerActions2 = footerActions;
|
|
669
|
-
var menuActions2 = menuActions;
|
|
670
|
-
var sidebarActions2 = sidebarActions;
|
|
671
|
-
var popupActions2 = popupActions;
|
|
672
|
-
var overlayActions2 = overlayActions;
|
|
673
673
|
function showPopup(payload) {
|
|
674
674
|
eventBus2.emit("layout/popup/requested", payload);
|
|
675
675
|
}
|
|
@@ -688,18 +688,20 @@ function toggleMenuCollapsed(payload) {
|
|
|
688
688
|
function toggleSidebarCollapsed(payload) {
|
|
689
689
|
eventBus2.emit("layout/sidebar/collapsed", payload);
|
|
690
690
|
}
|
|
691
|
+
function setHeaderVisible(_visible) {
|
|
692
|
+
}
|
|
691
693
|
function layout() {
|
|
692
694
|
return {
|
|
693
695
|
name: "layout",
|
|
694
696
|
dependencies: ["screensets"],
|
|
695
697
|
provides: {
|
|
696
698
|
slices: [
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
699
|
+
headerSlice,
|
|
700
|
+
footerSlice,
|
|
701
|
+
menuSlice,
|
|
702
|
+
sidebarSlice,
|
|
703
|
+
popupSlice,
|
|
704
|
+
overlaySlice
|
|
703
705
|
],
|
|
704
706
|
actions: {
|
|
705
707
|
showPopup,
|
|
@@ -709,466 +711,78 @@ function layout() {
|
|
|
709
711
|
toggleMenuCollapsed,
|
|
710
712
|
toggleSidebarCollapsed,
|
|
711
713
|
// Direct slice actions for backward compatibility
|
|
712
|
-
setHeaderVisible
|
|
713
|
-
setFooterVisible:
|
|
714
|
-
setMenuCollapsed:
|
|
715
|
-
setSidebarCollapsed:
|
|
714
|
+
setHeaderVisible,
|
|
715
|
+
setFooterVisible: footerActions.setFooterVisible,
|
|
716
|
+
setMenuCollapsed: menuActions.setMenuCollapsed,
|
|
717
|
+
setSidebarCollapsed: sidebarActions.setSidebarCollapsed
|
|
716
718
|
}
|
|
717
719
|
},
|
|
718
720
|
onInit(app) {
|
|
719
721
|
const dispatch = app.store.dispatch;
|
|
720
722
|
eventBus2.on("layout/popup/requested", (payload) => {
|
|
721
|
-
dispatch(
|
|
723
|
+
dispatch(popupActions.openPopup({
|
|
722
724
|
id: payload.id,
|
|
723
|
-
title: payload.title,
|
|
724
|
-
|
|
725
|
-
|
|
725
|
+
title: payload.title ?? "",
|
|
726
|
+
component: ""
|
|
727
|
+
// Payload doesn't include component - this needs review
|
|
726
728
|
}));
|
|
727
729
|
});
|
|
728
730
|
eventBus2.on("layout/popup/hidden", () => {
|
|
729
|
-
dispatch(
|
|
731
|
+
dispatch(popupActions.closeAllPopups());
|
|
730
732
|
});
|
|
731
|
-
eventBus2.on("layout/overlay/requested", (
|
|
732
|
-
dispatch(
|
|
733
|
+
eventBus2.on("layout/overlay/requested", (_payload) => {
|
|
734
|
+
dispatch(overlayActions.showOverlay());
|
|
733
735
|
});
|
|
734
736
|
eventBus2.on("layout/overlay/hidden", () => {
|
|
735
|
-
dispatch(
|
|
737
|
+
dispatch(overlayActions.hideOverlay());
|
|
736
738
|
});
|
|
737
739
|
eventBus2.on("layout/menu/collapsed", (payload) => {
|
|
738
|
-
dispatch(
|
|
740
|
+
dispatch(menuActions.setMenuCollapsed(payload.collapsed));
|
|
739
741
|
});
|
|
740
742
|
eventBus2.on("layout/sidebar/collapsed", (payload) => {
|
|
741
|
-
dispatch(
|
|
742
|
-
});
|
|
743
|
-
}
|
|
744
|
-
};
|
|
745
|
-
}
|
|
746
|
-
|
|
747
|
-
// src/plugins/navigation.ts
|
|
748
|
-
import { eventBus as eventBus3 } from "@hai3/state";
|
|
749
|
-
import { i18nRegistry } from "@hai3/i18n";
|
|
750
|
-
|
|
751
|
-
// src/utils/basePath.ts
|
|
752
|
-
function normalizeBase(base) {
|
|
753
|
-
if (!base) {
|
|
754
|
-
return "/";
|
|
755
|
-
}
|
|
756
|
-
let normalized = base.startsWith("/") ? base : `/${base}`;
|
|
757
|
-
if (normalized !== "/" && normalized.endsWith("/")) {
|
|
758
|
-
normalized = normalized.slice(0, -1);
|
|
759
|
-
}
|
|
760
|
-
return normalized;
|
|
761
|
-
}
|
|
762
|
-
function stripBase(pathname, base) {
|
|
763
|
-
if (base === "/") {
|
|
764
|
-
return pathname;
|
|
765
|
-
}
|
|
766
|
-
if (!pathname.startsWith(base)) {
|
|
767
|
-
return null;
|
|
768
|
-
}
|
|
769
|
-
const nextChar = pathname.charAt(base.length);
|
|
770
|
-
if (nextChar && nextChar !== "/") {
|
|
771
|
-
return null;
|
|
772
|
-
}
|
|
773
|
-
return pathname.slice(base.length) || "/";
|
|
774
|
-
}
|
|
775
|
-
function prependBase(path, base) {
|
|
776
|
-
if (base === "/") {
|
|
777
|
-
return path;
|
|
778
|
-
}
|
|
779
|
-
const cleanPath = path.startsWith("/") ? path : `/${path}`;
|
|
780
|
-
return `${base}${cleanPath}`;
|
|
781
|
-
}
|
|
782
|
-
function resolveBase(pluginConfig, appConfig) {
|
|
783
|
-
const rawBase = pluginConfig?.base ?? appConfig?.base ?? "/";
|
|
784
|
-
return normalizeBase(rawBase);
|
|
785
|
-
}
|
|
786
|
-
|
|
787
|
-
// src/utils/routeMatcher.ts
|
|
788
|
-
import { match, compile } from "path-to-regexp";
|
|
789
|
-
function compileRoute(pattern, screensetId, screenId) {
|
|
790
|
-
return {
|
|
791
|
-
pattern,
|
|
792
|
-
screensetId,
|
|
793
|
-
screenId,
|
|
794
|
-
matcher: match(pattern, { decode: decodeURIComponent }),
|
|
795
|
-
toPath: compile(pattern, { encode: encodeURIComponent })
|
|
796
|
-
};
|
|
797
|
-
}
|
|
798
|
-
function matchPath(path, routes) {
|
|
799
|
-
for (const route of routes) {
|
|
800
|
-
const result = route.matcher(path);
|
|
801
|
-
if (result) {
|
|
802
|
-
return {
|
|
803
|
-
screensetId: route.screensetId,
|
|
804
|
-
screenId: route.screenId,
|
|
805
|
-
params: result.params
|
|
806
|
-
};
|
|
807
|
-
}
|
|
808
|
-
}
|
|
809
|
-
return void 0;
|
|
810
|
-
}
|
|
811
|
-
function generatePath(route, params) {
|
|
812
|
-
return route.toPath(params);
|
|
813
|
-
}
|
|
814
|
-
function extractRequiredParams(pattern) {
|
|
815
|
-
const params = [];
|
|
816
|
-
const matches = pattern.match(/:([^/]+)/g);
|
|
817
|
-
if (matches) {
|
|
818
|
-
for (const match2 of matches) {
|
|
819
|
-
params.push(match2.slice(1));
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
return params;
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
// src/plugins/navigation.ts
|
|
826
|
-
var screenActions3 = screenActions;
|
|
827
|
-
var menuActions3 = menuActions;
|
|
828
|
-
function navigateToScreen(payload) {
|
|
829
|
-
eventBus3.emit("navigation/screen/navigated", payload);
|
|
830
|
-
}
|
|
831
|
-
function navigateToScreenset(payload) {
|
|
832
|
-
eventBus3.emit("navigation/screenset/navigated", payload);
|
|
833
|
-
}
|
|
834
|
-
function navigation(config) {
|
|
835
|
-
return {
|
|
836
|
-
name: "navigation",
|
|
837
|
-
dependencies: ["screensets"],
|
|
838
|
-
provides: {
|
|
839
|
-
actions: {
|
|
840
|
-
navigateToScreen,
|
|
841
|
-
navigateToScreenset
|
|
842
|
-
}
|
|
843
|
-
},
|
|
844
|
-
onInit(app) {
|
|
845
|
-
const dispatch = app.store.dispatch;
|
|
846
|
-
const base = resolveBase(config, app.config);
|
|
847
|
-
const routerMode = app.config.routerMode ?? "browser";
|
|
848
|
-
let currentScreensetId = null;
|
|
849
|
-
const getCurrentPath = () => {
|
|
850
|
-
if (typeof window === "undefined") return "/";
|
|
851
|
-
switch (routerMode) {
|
|
852
|
-
case "hash":
|
|
853
|
-
return window.location.hash.slice(1) || "/";
|
|
854
|
-
case "memory":
|
|
855
|
-
return "/";
|
|
856
|
-
case "browser":
|
|
857
|
-
default:
|
|
858
|
-
return window.location.pathname;
|
|
859
|
-
}
|
|
860
|
-
};
|
|
861
|
-
const updateURL = (path) => {
|
|
862
|
-
if (typeof window === "undefined" || routerMode === "memory") {
|
|
863
|
-
return;
|
|
864
|
-
}
|
|
865
|
-
const url = prependBase(path, base);
|
|
866
|
-
switch (routerMode) {
|
|
867
|
-
case "hash":
|
|
868
|
-
if (window.location.hash !== `#${url}`) {
|
|
869
|
-
window.location.hash = url;
|
|
870
|
-
}
|
|
871
|
-
break;
|
|
872
|
-
case "browser":
|
|
873
|
-
default:
|
|
874
|
-
if (window.location.pathname !== url) {
|
|
875
|
-
window.history.pushState(null, "", url);
|
|
876
|
-
}
|
|
877
|
-
break;
|
|
878
|
-
}
|
|
879
|
-
};
|
|
880
|
-
const loadScreensetTranslations = async (screensetId, language) => {
|
|
881
|
-
await i18nRegistry.loadScreensetTranslations(
|
|
882
|
-
screensetId,
|
|
883
|
-
language
|
|
884
|
-
);
|
|
885
|
-
};
|
|
886
|
-
const updateScreensetMenu = (screenset) => {
|
|
887
|
-
const menuItems = screenset.menu.map((item) => ({
|
|
888
|
-
id: item.menuItem.screenId ?? item.menuItem.id,
|
|
889
|
-
label: item.menuItem.label,
|
|
890
|
-
icon: item.menuItem.icon
|
|
891
|
-
}));
|
|
892
|
-
dispatch(menuActions3.setMenuItems(menuItems));
|
|
893
|
-
};
|
|
894
|
-
const activateScreenset = (screensetId) => {
|
|
895
|
-
if (screensetId === currentScreensetId) {
|
|
896
|
-
return;
|
|
897
|
-
}
|
|
898
|
-
const screenset = app.screensetRegistry.get(screensetId);
|
|
899
|
-
if (!screenset) {
|
|
900
|
-
return;
|
|
901
|
-
}
|
|
902
|
-
currentScreensetId = screensetId;
|
|
903
|
-
loadScreensetTranslations(screensetId).catch((err) => {
|
|
904
|
-
console.warn(`[HAI3] Failed to load translations for screenset ${screensetId}:`, err);
|
|
905
|
-
});
|
|
906
|
-
updateScreensetMenu(screenset);
|
|
907
|
-
};
|
|
908
|
-
const extractInternalPath = () => {
|
|
909
|
-
const currentPath = getCurrentPath();
|
|
910
|
-
return stripBase(currentPath, base) || "/";
|
|
911
|
-
};
|
|
912
|
-
const activateFromRouteMatch = (match2) => {
|
|
913
|
-
activateScreenset(match2.screensetId);
|
|
914
|
-
dispatch(screenActions3.navigateTo(match2.screenId));
|
|
915
|
-
};
|
|
916
|
-
const matchCurrentPath = () => {
|
|
917
|
-
const path = extractInternalPath();
|
|
918
|
-
return app.routeRegistry?.matchRoute(path);
|
|
919
|
-
};
|
|
920
|
-
eventBus3.on("navigation/screen/navigated", (payload) => {
|
|
921
|
-
if (!app.routeRegistry?.hasScreen(payload.screensetId, payload.screenId)) {
|
|
922
|
-
console.warn(
|
|
923
|
-
`Screen "${payload.screenId}" in screenset "${payload.screensetId}" not found.`
|
|
924
|
-
);
|
|
925
|
-
return;
|
|
926
|
-
}
|
|
927
|
-
const pattern = app.routeRegistry?.getRoutePattern(payload.screenId);
|
|
928
|
-
if (pattern) {
|
|
929
|
-
const requiredParams = extractRequiredParams(pattern);
|
|
930
|
-
const providedParams = payload.params || {};
|
|
931
|
-
const missingParams = requiredParams.filter((param) => !(param in providedParams));
|
|
932
|
-
if (missingParams.length > 0) {
|
|
933
|
-
console.warn(
|
|
934
|
-
`Screen "${payload.screenId}" requires route params [${requiredParams.join(", ")}] but missing: [${missingParams.join(", ")}]`
|
|
935
|
-
);
|
|
936
|
-
return;
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
activateScreenset(payload.screensetId);
|
|
940
|
-
dispatch(screenActions3.navigateTo(payload.screenId));
|
|
941
|
-
const path = app.routeRegistry?.generatePath(payload.screenId, payload.params) ?? `/${payload.screenId}`;
|
|
942
|
-
updateURL(path);
|
|
943
|
-
});
|
|
944
|
-
eventBus3.on("navigation/screenset/navigated", (payload) => {
|
|
945
|
-
const screenset = app.screensetRegistry.get(payload.screensetId);
|
|
946
|
-
if (!screenset) {
|
|
947
|
-
console.warn(`Screenset "${payload.screensetId}" not found.`);
|
|
948
|
-
return;
|
|
949
|
-
}
|
|
950
|
-
navigateToScreen({
|
|
951
|
-
screensetId: payload.screensetId,
|
|
952
|
-
screenId: screenset.defaultScreen
|
|
953
|
-
});
|
|
954
|
-
});
|
|
955
|
-
let lastLoadedLanguage = null;
|
|
956
|
-
i18nRegistry.subscribe(() => {
|
|
957
|
-
const currentLanguage = i18nRegistry.getLanguage();
|
|
958
|
-
if (!currentLanguage || currentLanguage === lastLoadedLanguage) {
|
|
959
|
-
return;
|
|
960
|
-
}
|
|
961
|
-
if (!currentScreensetId) {
|
|
962
|
-
return;
|
|
963
|
-
}
|
|
964
|
-
const screenset = app.screensetRegistry.get(currentScreensetId);
|
|
965
|
-
if (!screenset) {
|
|
966
|
-
return;
|
|
967
|
-
}
|
|
968
|
-
lastLoadedLanguage = currentLanguage;
|
|
969
|
-
loadScreensetTranslations(currentScreensetId, currentLanguage).then(() => updateScreensetMenu(screenset)).catch((err) => {
|
|
970
|
-
console.warn(
|
|
971
|
-
`[HAI3] Failed to reload translations for screenset ${currentScreensetId}:`,
|
|
972
|
-
err
|
|
973
|
-
);
|
|
974
|
-
});
|
|
743
|
+
dispatch(sidebarActions.setSidebarCollapsed(payload.collapsed));
|
|
975
744
|
});
|
|
976
|
-
if (typeof window !== "undefined" && routerMode !== "memory") {
|
|
977
|
-
const handleURLChange = () => {
|
|
978
|
-
const match3 = matchCurrentPath();
|
|
979
|
-
if (match3) {
|
|
980
|
-
activateFromRouteMatch(match3);
|
|
981
|
-
}
|
|
982
|
-
};
|
|
983
|
-
if (routerMode === "hash") {
|
|
984
|
-
window.addEventListener("hashchange", handleURLChange);
|
|
985
|
-
} else {
|
|
986
|
-
window.addEventListener("popstate", handleURLChange);
|
|
987
|
-
}
|
|
988
|
-
const match2 = matchCurrentPath();
|
|
989
|
-
const autoNavigate = app.config.autoNavigate !== false;
|
|
990
|
-
if (match2) {
|
|
991
|
-
activateFromRouteMatch(match2);
|
|
992
|
-
} else if (autoNavigate) {
|
|
993
|
-
const screensets2 = app.screensetRegistry.getAll();
|
|
994
|
-
if (screensets2.length > 0) {
|
|
995
|
-
navigateToScreenset({ screensetId: screensets2[0].id });
|
|
996
|
-
}
|
|
997
|
-
}
|
|
998
|
-
} else if (routerMode === "memory") {
|
|
999
|
-
const autoNavigate = app.config.autoNavigate !== false;
|
|
1000
|
-
if (autoNavigate) {
|
|
1001
|
-
const screensets2 = app.screensetRegistry.getAll();
|
|
1002
|
-
if (screensets2.length > 0) {
|
|
1003
|
-
navigateToScreenset({ screensetId: screensets2[0].id });
|
|
1004
|
-
}
|
|
1005
|
-
}
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
1008
|
-
};
|
|
1009
|
-
}
|
|
1010
|
-
|
|
1011
|
-
// src/registries/routeRegistry.ts
|
|
1012
|
-
function createRouteRegistry(screensetRegistry3) {
|
|
1013
|
-
let routes = null;
|
|
1014
|
-
function buildRoutes() {
|
|
1015
|
-
if (routes !== null) {
|
|
1016
|
-
return routes;
|
|
1017
|
-
}
|
|
1018
|
-
routes = [];
|
|
1019
|
-
const screensets2 = screensetRegistry3.getAll();
|
|
1020
|
-
screensets2.forEach((screenset) => {
|
|
1021
|
-
screenset.menu.forEach((menuScreenItem) => {
|
|
1022
|
-
const screenId = menuScreenItem.menuItem.screenId ?? menuScreenItem.menuItem.id;
|
|
1023
|
-
if (screenId && menuScreenItem.screen) {
|
|
1024
|
-
const pattern = menuScreenItem.menuItem.path ?? `/${screenId}`;
|
|
1025
|
-
const compiledRoute = compileRoute(pattern, screenset.id, screenId);
|
|
1026
|
-
routes.push({
|
|
1027
|
-
screensetId: screenset.id,
|
|
1028
|
-
screenId,
|
|
1029
|
-
loader: menuScreenItem.screen,
|
|
1030
|
-
pattern,
|
|
1031
|
-
compiledRoute
|
|
1032
|
-
});
|
|
1033
|
-
}
|
|
1034
|
-
});
|
|
1035
|
-
});
|
|
1036
|
-
routes.sort((a, b) => {
|
|
1037
|
-
const aHasParams = a.pattern.includes(":");
|
|
1038
|
-
const bHasParams = b.pattern.includes(":");
|
|
1039
|
-
if (!aHasParams && bHasParams) return -1;
|
|
1040
|
-
if (aHasParams && !bHasParams) return 1;
|
|
1041
|
-
return 0;
|
|
1042
|
-
});
|
|
1043
|
-
return routes;
|
|
1044
|
-
}
|
|
1045
|
-
return {
|
|
1046
|
-
/**
|
|
1047
|
-
* Check if a screen exists by screenId only (globally unique).
|
|
1048
|
-
*/
|
|
1049
|
-
hasScreenById(screenId) {
|
|
1050
|
-
const allRoutes = buildRoutes();
|
|
1051
|
-
return allRoutes.some((route) => route.screenId === screenId);
|
|
1052
|
-
},
|
|
1053
|
-
/**
|
|
1054
|
-
* Check if a screen exists by both screensetId and screenId (explicit lookup when screenset context is known).
|
|
1055
|
-
*/
|
|
1056
|
-
hasScreen(screensetId, screenId) {
|
|
1057
|
-
const allRoutes = buildRoutes();
|
|
1058
|
-
return allRoutes.some(
|
|
1059
|
-
(route) => route.screensetId === screensetId && route.screenId === screenId
|
|
1060
|
-
);
|
|
1061
|
-
},
|
|
1062
|
-
/**
|
|
1063
|
-
* Get screenset ID for a given screen ID (reverse lookup).
|
|
1064
|
-
* Screen IDs are globally unique across all screensets.
|
|
1065
|
-
*/
|
|
1066
|
-
getScreensetForScreen(screenId) {
|
|
1067
|
-
const allRoutes = buildRoutes();
|
|
1068
|
-
const route = allRoutes.find((r) => r.screenId === screenId);
|
|
1069
|
-
return route?.screensetId;
|
|
1070
|
-
},
|
|
1071
|
-
/**
|
|
1072
|
-
* Get screen loader by screenId only.
|
|
1073
|
-
*/
|
|
1074
|
-
getScreenById(screenId) {
|
|
1075
|
-
const allRoutes = buildRoutes();
|
|
1076
|
-
const route = allRoutes.find((r) => r.screenId === screenId);
|
|
1077
|
-
return route?.loader;
|
|
1078
|
-
},
|
|
1079
|
-
/**
|
|
1080
|
-
* Get screen loader by both screensetId and screenId (explicit lookup when screenset context is known).
|
|
1081
|
-
*/
|
|
1082
|
-
getScreen(screensetId, screenId) {
|
|
1083
|
-
const allRoutes = buildRoutes();
|
|
1084
|
-
const route = allRoutes.find(
|
|
1085
|
-
(r) => r.screensetId === screensetId && r.screenId === screenId
|
|
1086
|
-
);
|
|
1087
|
-
return route?.loader;
|
|
1088
|
-
},
|
|
1089
|
-
/**
|
|
1090
|
-
* Get all routes.
|
|
1091
|
-
*/
|
|
1092
|
-
getAll() {
|
|
1093
|
-
const allRoutes = buildRoutes();
|
|
1094
|
-
return allRoutes.map(({ screensetId, screenId }) => ({
|
|
1095
|
-
screensetId,
|
|
1096
|
-
screenId
|
|
1097
|
-
}));
|
|
1098
|
-
},
|
|
1099
|
-
/**
|
|
1100
|
-
* Match a URL path against registered routes, extracting params.
|
|
1101
|
-
* Returns the first matching route with extracted params, or undefined if no match.
|
|
1102
|
-
*/
|
|
1103
|
-
matchRoute(path) {
|
|
1104
|
-
const allRoutes = buildRoutes();
|
|
1105
|
-
const compiledRoutes = allRoutes.map((r) => r.compiledRoute);
|
|
1106
|
-
return matchPath(path, compiledRoutes);
|
|
1107
|
-
},
|
|
1108
|
-
/**
|
|
1109
|
-
* Generate a URL path for a screen with given params.
|
|
1110
|
-
*/
|
|
1111
|
-
generatePath(screenId, params = {}) {
|
|
1112
|
-
const allRoutes = buildRoutes();
|
|
1113
|
-
const route = allRoutes.find((r) => r.screenId === screenId);
|
|
1114
|
-
if (!route) {
|
|
1115
|
-
console.warn(`Route not found for screen: ${screenId}`);
|
|
1116
|
-
return `/${screenId}`;
|
|
1117
|
-
}
|
|
1118
|
-
return generatePath(route.compiledRoute, params);
|
|
1119
|
-
},
|
|
1120
|
-
/**
|
|
1121
|
-
* Get the route pattern for a screen.
|
|
1122
|
-
*/
|
|
1123
|
-
getRoutePattern(screenId) {
|
|
1124
|
-
const allRoutes = buildRoutes();
|
|
1125
|
-
const route = allRoutes.find((r) => r.screenId === screenId);
|
|
1126
|
-
return route?.pattern;
|
|
1127
|
-
}
|
|
1128
|
-
};
|
|
1129
|
-
}
|
|
1130
|
-
|
|
1131
|
-
// src/plugins/routing.ts
|
|
1132
|
-
function routing() {
|
|
1133
|
-
return {
|
|
1134
|
-
name: "routing",
|
|
1135
|
-
dependencies: ["screensets"],
|
|
1136
|
-
onRegister(_app) {
|
|
1137
|
-
},
|
|
1138
|
-
onInit(app) {
|
|
1139
|
-
const routeRegistry = createRouteRegistry(app.screensetRegistry);
|
|
1140
|
-
app.routeRegistry = routeRegistry;
|
|
1141
745
|
}
|
|
1142
746
|
};
|
|
1143
747
|
}
|
|
1144
748
|
|
|
1145
749
|
// src/plugins/i18n.ts
|
|
1146
|
-
import { eventBus as
|
|
750
|
+
import { eventBus as eventBus3 } from "@hai3/state";
|
|
1147
751
|
import { i18nRegistry as singletonI18nRegistry, Language } from "@hai3/i18n";
|
|
752
|
+
import { HAI3_SHARED_PROPERTY_LANGUAGE } from "@hai3/screensets";
|
|
1148
753
|
function setLanguage(payload) {
|
|
1149
|
-
|
|
754
|
+
eventBus3.emit("i18n/language/changed", payload);
|
|
1150
755
|
}
|
|
1151
756
|
function i18n() {
|
|
1152
|
-
const
|
|
757
|
+
const i18nRegistry2 = singletonI18nRegistry;
|
|
1153
758
|
return {
|
|
1154
759
|
name: "i18n",
|
|
1155
760
|
dependencies: [],
|
|
1156
761
|
provides: {
|
|
1157
762
|
registries: {
|
|
1158
|
-
i18nRegistry:
|
|
763
|
+
i18nRegistry: i18nRegistry2
|
|
1159
764
|
},
|
|
1160
765
|
actions: {
|
|
1161
766
|
setLanguage
|
|
1162
767
|
}
|
|
1163
768
|
},
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
769
|
+
// @cpt-begin:cpt-hai3-flow-framework-composition-i18n-propagation:p1:inst-2
|
|
770
|
+
// @cpt-begin:cpt-hai3-dod-framework-composition-propagation:p1:inst-2
|
|
771
|
+
onInit(app) {
|
|
772
|
+
eventBus3.on("i18n/language/changed", async (payload) => {
|
|
773
|
+
await i18nRegistry2.setLanguage(payload.language);
|
|
774
|
+
try {
|
|
775
|
+
app.screensetsRegistry?.updateSharedProperty(HAI3_SHARED_PROPERTY_LANGUAGE, payload.language);
|
|
776
|
+
} catch (error) {
|
|
777
|
+
console.error("[HAI3] Failed to propagate language to MFE domains", error);
|
|
778
|
+
}
|
|
1167
779
|
});
|
|
1168
|
-
|
|
780
|
+
i18nRegistry2.setLanguage(Language.English).catch((err) => {
|
|
1169
781
|
console.warn("[HAI3] Failed to load initial translations:", err);
|
|
1170
782
|
});
|
|
1171
783
|
}
|
|
784
|
+
// @cpt-end:cpt-hai3-flow-framework-composition-i18n-propagation:p1:inst-2
|
|
785
|
+
// @cpt-end:cpt-hai3-dod-framework-composition-propagation:p1:inst-2
|
|
1172
786
|
};
|
|
1173
787
|
}
|
|
1174
788
|
|
|
@@ -1177,16 +791,13 @@ function effects() {
|
|
|
1177
791
|
return {
|
|
1178
792
|
name: "effects",
|
|
1179
793
|
dependencies: [],
|
|
1180
|
-
onInit(
|
|
1181
|
-
if (app.config.devMode) {
|
|
1182
|
-
console.log("[HAI3] Effects plugin initialized");
|
|
1183
|
-
}
|
|
794
|
+
onInit() {
|
|
1184
795
|
}
|
|
1185
796
|
};
|
|
1186
797
|
}
|
|
1187
798
|
|
|
1188
799
|
// src/effects/mockEffects.ts
|
|
1189
|
-
import { eventBus as
|
|
800
|
+
import { eventBus as eventBus4, getStore as getStore2 } from "@hai3/state";
|
|
1190
801
|
import { apiRegistry as apiRegistry2, isMockPlugin } from "@hai3/api";
|
|
1191
802
|
function hasPluginManagement(protocol) {
|
|
1192
803
|
return "plugins" in protocol && typeof protocol.plugins === "object";
|
|
@@ -1216,7 +827,7 @@ function syncMockPlugins(enabled) {
|
|
|
1216
827
|
}
|
|
1217
828
|
function initMockEffects() {
|
|
1218
829
|
const store = getStore2();
|
|
1219
|
-
const unsubscribe =
|
|
830
|
+
const unsubscribe = eventBus4.on(MockEvents.Toggle, (payload) => {
|
|
1220
831
|
store.dispatch(setMockEnabled(payload.enabled));
|
|
1221
832
|
syncMockPlugins(payload.enabled);
|
|
1222
833
|
});
|
|
@@ -1229,7 +840,7 @@ function initMockEffects() {
|
|
|
1229
840
|
};
|
|
1230
841
|
}
|
|
1231
842
|
function toggleMockMode(enabled) {
|
|
1232
|
-
|
|
843
|
+
eventBus4.emit(MockEvents.Toggle, { enabled });
|
|
1233
844
|
}
|
|
1234
845
|
|
|
1235
846
|
// src/plugins/mock.ts
|
|
@@ -1255,9 +866,6 @@ function mock(config) {
|
|
|
1255
866
|
const enabledByDefault = config?.enabledByDefault ?? isDev;
|
|
1256
867
|
if (enabledByDefault) {
|
|
1257
868
|
toggleMockMode(true);
|
|
1258
|
-
if (isDev) {
|
|
1259
|
-
console.log("[HAI3] Mock mode enabled by default (dev environment detected)");
|
|
1260
|
-
}
|
|
1261
869
|
}
|
|
1262
870
|
},
|
|
1263
871
|
onDestroy() {
|
|
@@ -1269,18 +877,314 @@ function mock(config) {
|
|
|
1269
877
|
};
|
|
1270
878
|
}
|
|
1271
879
|
|
|
880
|
+
// src/plugins/microfrontends/index.ts
|
|
881
|
+
import {
|
|
882
|
+
screensetsRegistryFactory,
|
|
883
|
+
HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT3,
|
|
884
|
+
HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT3
|
|
885
|
+
} from "@hai3/screensets";
|
|
886
|
+
import { getStore as getStore4 } from "@hai3/state";
|
|
887
|
+
|
|
888
|
+
// src/plugins/microfrontends/slice.ts
|
|
889
|
+
import { createSlice as createSlice10 } from "@hai3/state";
|
|
890
|
+
var SLICE_KEY10 = "mfe";
|
|
891
|
+
var initialState10 = {
|
|
892
|
+
registrationStates: {},
|
|
893
|
+
errors: {},
|
|
894
|
+
mountedExtensions: {}
|
|
895
|
+
};
|
|
896
|
+
var { slice: slice10, ...actions } = createSlice10({
|
|
897
|
+
name: SLICE_KEY10,
|
|
898
|
+
initialState: initialState10,
|
|
899
|
+
reducers: {
|
|
900
|
+
// Registration state reducers
|
|
901
|
+
setExtensionRegistering: (state, action) => {
|
|
902
|
+
state.registrationStates[action.payload.extensionId] = "registering";
|
|
903
|
+
},
|
|
904
|
+
setExtensionRegistered: (state, action) => {
|
|
905
|
+
state.registrationStates[action.payload.extensionId] = "registered";
|
|
906
|
+
},
|
|
907
|
+
setExtensionUnregistered: (state, action) => {
|
|
908
|
+
state.registrationStates[action.payload.extensionId] = "unregistered";
|
|
909
|
+
},
|
|
910
|
+
setExtensionError: (state, action) => {
|
|
911
|
+
state.registrationStates[action.payload.extensionId] = "error";
|
|
912
|
+
state.errors[action.payload.extensionId] = action.payload.error;
|
|
913
|
+
},
|
|
914
|
+
// Mount state reducers
|
|
915
|
+
setExtensionMounted: (state, action) => {
|
|
916
|
+
state.mountedExtensions[action.payload.domainId] = action.payload.extensionId;
|
|
917
|
+
},
|
|
918
|
+
setExtensionUnmounted: (state, action) => {
|
|
919
|
+
state.mountedExtensions[action.payload.domainId] = void 0;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
});
|
|
923
|
+
var mfeSlice = slice10;
|
|
924
|
+
var {
|
|
925
|
+
setExtensionRegistering,
|
|
926
|
+
setExtensionRegistered,
|
|
927
|
+
setExtensionUnregistered,
|
|
928
|
+
setExtensionError,
|
|
929
|
+
setExtensionMounted,
|
|
930
|
+
setExtensionUnmounted
|
|
931
|
+
} = actions;
|
|
932
|
+
function selectExtensionState(state, extensionId) {
|
|
933
|
+
return state.mfe.registrationStates[extensionId] ?? "unregistered";
|
|
934
|
+
}
|
|
935
|
+
function selectRegisteredExtensions(state) {
|
|
936
|
+
return Object.entries(state.mfe.registrationStates).filter(([_, regState]) => regState === "registered").map(([extensionId]) => extensionId);
|
|
937
|
+
}
|
|
938
|
+
function selectExtensionError(state, extensionId) {
|
|
939
|
+
return state.mfe.errors[extensionId];
|
|
940
|
+
}
|
|
941
|
+
var slice_default = slice10.reducer;
|
|
942
|
+
|
|
943
|
+
// src/plugins/microfrontends/effects.ts
|
|
944
|
+
import { eventBus as eventBus5, getStore as getStore3 } from "@hai3/state";
|
|
945
|
+
|
|
946
|
+
// src/plugins/microfrontends/constants.ts
|
|
947
|
+
var HAI3_POPUP_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.popup.v1";
|
|
948
|
+
var HAI3_SIDEBAR_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.sidebar.v1";
|
|
949
|
+
var HAI3_SCREEN_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.screen.v1";
|
|
950
|
+
var HAI3_OVERLAY_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.overlay.v1";
|
|
951
|
+
var MfeEvents = {
|
|
952
|
+
RegisterExtensionRequested: "mfe/registerExtensionRequested",
|
|
953
|
+
UnregisterExtensionRequested: "mfe/unregisterExtensionRequested"
|
|
954
|
+
};
|
|
955
|
+
|
|
956
|
+
// src/plugins/microfrontends/effects.ts
|
|
957
|
+
function initMfeEffects(screensetsRegistry2) {
|
|
958
|
+
const store = getStore3();
|
|
959
|
+
const unsubscribers = [];
|
|
960
|
+
const unsubRegisterExtension = eventBus5.on(MfeEvents.RegisterExtensionRequested, async (payload) => {
|
|
961
|
+
const { extension } = payload;
|
|
962
|
+
try {
|
|
963
|
+
store.dispatch(setExtensionRegistering({ extensionId: extension.id }));
|
|
964
|
+
await screensetsRegistry2.registerExtension(extension);
|
|
965
|
+
store.dispatch(setExtensionRegistered({ extensionId: extension.id }));
|
|
966
|
+
} catch (error) {
|
|
967
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown registration error";
|
|
968
|
+
store.dispatch(setExtensionError({ extensionId: extension.id, error: errorMessage }));
|
|
969
|
+
}
|
|
970
|
+
});
|
|
971
|
+
unsubscribers.push(unsubRegisterExtension);
|
|
972
|
+
const unsubUnregisterExtension = eventBus5.on(MfeEvents.UnregisterExtensionRequested, async (payload) => {
|
|
973
|
+
const { extensionId } = payload;
|
|
974
|
+
try {
|
|
975
|
+
await screensetsRegistry2.unregisterExtension(extensionId);
|
|
976
|
+
store.dispatch(setExtensionUnregistered({ extensionId }));
|
|
977
|
+
} catch (error) {
|
|
978
|
+
const errorMessage = error instanceof Error ? error.message : "Unknown unregistration error";
|
|
979
|
+
store.dispatch(setExtensionError({ extensionId, error: errorMessage }));
|
|
980
|
+
}
|
|
981
|
+
});
|
|
982
|
+
unsubscribers.push(unsubUnregisterExtension);
|
|
983
|
+
return () => {
|
|
984
|
+
unsubscribers.forEach((unsub) => unsub.unsubscribe());
|
|
985
|
+
};
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
// src/plugins/microfrontends/actions.ts
|
|
989
|
+
import { eventBus as eventBus6 } from "@hai3/state";
|
|
990
|
+
import {
|
|
991
|
+
HAI3_ACTION_LOAD_EXT,
|
|
992
|
+
HAI3_ACTION_MOUNT_EXT,
|
|
993
|
+
HAI3_ACTION_UNMOUNT_EXT
|
|
994
|
+
} from "@hai3/screensets";
|
|
995
|
+
var screensetsRegistry = null;
|
|
996
|
+
function setMfeRegistry(registry) {
|
|
997
|
+
screensetsRegistry = registry;
|
|
998
|
+
}
|
|
999
|
+
function resolveDomainId(extensionId) {
|
|
1000
|
+
if (!screensetsRegistry) {
|
|
1001
|
+
throw new Error("MFE registry not initialized. Call setMfeRegistry() before using lifecycle actions.");
|
|
1002
|
+
}
|
|
1003
|
+
const extension = screensetsRegistry.getExtension(extensionId);
|
|
1004
|
+
if (!extension) {
|
|
1005
|
+
throw new Error(`Extension '${extensionId}' is not registered. Register it before calling lifecycle actions.`);
|
|
1006
|
+
}
|
|
1007
|
+
return extension.domain;
|
|
1008
|
+
}
|
|
1009
|
+
function loadExtension(extensionId) {
|
|
1010
|
+
const domainId = resolveDomainId(extensionId);
|
|
1011
|
+
screensetsRegistry.executeActionsChain({
|
|
1012
|
+
action: {
|
|
1013
|
+
type: HAI3_ACTION_LOAD_EXT,
|
|
1014
|
+
target: domainId,
|
|
1015
|
+
payload: { extensionId }
|
|
1016
|
+
}
|
|
1017
|
+
}).catch((error) => {
|
|
1018
|
+
console.error(`[MFE] Load failed for ${extensionId}:`, error);
|
|
1019
|
+
});
|
|
1020
|
+
}
|
|
1021
|
+
function mountExtension(extensionId) {
|
|
1022
|
+
const domainId = resolveDomainId(extensionId);
|
|
1023
|
+
screensetsRegistry.executeActionsChain({
|
|
1024
|
+
action: {
|
|
1025
|
+
type: HAI3_ACTION_MOUNT_EXT,
|
|
1026
|
+
target: domainId,
|
|
1027
|
+
payload: { extensionId }
|
|
1028
|
+
}
|
|
1029
|
+
}).catch((error) => {
|
|
1030
|
+
console.error(`[MFE] Mount failed for ${extensionId}:`, error);
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1033
|
+
function unmountExtension(extensionId) {
|
|
1034
|
+
const domainId = resolveDomainId(extensionId);
|
|
1035
|
+
screensetsRegistry.executeActionsChain({
|
|
1036
|
+
action: {
|
|
1037
|
+
type: HAI3_ACTION_UNMOUNT_EXT,
|
|
1038
|
+
target: domainId,
|
|
1039
|
+
payload: { extensionId }
|
|
1040
|
+
}
|
|
1041
|
+
}).catch((error) => {
|
|
1042
|
+
console.error(`[MFE] Unmount failed for ${extensionId}:`, error);
|
|
1043
|
+
});
|
|
1044
|
+
}
|
|
1045
|
+
function registerExtension(extension) {
|
|
1046
|
+
eventBus6.emit(MfeEvents.RegisterExtensionRequested, { extension });
|
|
1047
|
+
}
|
|
1048
|
+
function unregisterExtension(extensionId) {
|
|
1049
|
+
eventBus6.emit(MfeEvents.UnregisterExtensionRequested, { extensionId });
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
// src/plugins/microfrontends/base-domains.ts
|
|
1053
|
+
import {
|
|
1054
|
+
HAI3_ACTION_LOAD_EXT as HAI3_ACTION_LOAD_EXT2,
|
|
1055
|
+
HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT2,
|
|
1056
|
+
HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT2,
|
|
1057
|
+
HAI3_SHARED_PROPERTY_THEME as HAI3_SHARED_PROPERTY_THEME2,
|
|
1058
|
+
HAI3_SHARED_PROPERTY_LANGUAGE as HAI3_SHARED_PROPERTY_LANGUAGE2,
|
|
1059
|
+
HAI3_SCREEN_EXTENSION_TYPE
|
|
1060
|
+
} from "@hai3/screensets";
|
|
1061
|
+
var INIT_ONLY_LIFECYCLE_STAGES = [
|
|
1062
|
+
"gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.init.v1"
|
|
1063
|
+
];
|
|
1064
|
+
var DEFAULT_LIFECYCLE_STAGES = [
|
|
1065
|
+
"gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.init.v1",
|
|
1066
|
+
"gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.activated.v1",
|
|
1067
|
+
"gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.deactivated.v1",
|
|
1068
|
+
"gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.destroyed.v1"
|
|
1069
|
+
];
|
|
1070
|
+
var screenDomain = {
|
|
1071
|
+
id: HAI3_SCREEN_DOMAIN,
|
|
1072
|
+
actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2],
|
|
1073
|
+
extensionsActions: [],
|
|
1074
|
+
sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
|
|
1075
|
+
defaultActionTimeout: 3e4,
|
|
1076
|
+
lifecycleStages: [...INIT_ONLY_LIFECYCLE_STAGES],
|
|
1077
|
+
extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1078
|
+
extensionsTypeId: HAI3_SCREEN_EXTENSION_TYPE,
|
|
1079
|
+
lifecycle: void 0
|
|
1080
|
+
};
|
|
1081
|
+
var sidebarDomain = {
|
|
1082
|
+
id: HAI3_SIDEBAR_DOMAIN,
|
|
1083
|
+
actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
|
|
1084
|
+
extensionsActions: [],
|
|
1085
|
+
sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
|
|
1086
|
+
defaultActionTimeout: 3e4,
|
|
1087
|
+
lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1088
|
+
extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1089
|
+
lifecycle: void 0
|
|
1090
|
+
};
|
|
1091
|
+
var popupDomain = {
|
|
1092
|
+
id: HAI3_POPUP_DOMAIN,
|
|
1093
|
+
actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
|
|
1094
|
+
extensionsActions: [],
|
|
1095
|
+
sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
|
|
1096
|
+
defaultActionTimeout: 3e4,
|
|
1097
|
+
lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1098
|
+
extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1099
|
+
lifecycle: void 0
|
|
1100
|
+
};
|
|
1101
|
+
var overlayDomain = {
|
|
1102
|
+
id: HAI3_OVERLAY_DOMAIN,
|
|
1103
|
+
actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
|
|
1104
|
+
extensionsActions: [],
|
|
1105
|
+
sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
|
|
1106
|
+
defaultActionTimeout: 3e4,
|
|
1107
|
+
lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1108
|
+
extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
|
|
1109
|
+
lifecycle: void 0
|
|
1110
|
+
};
|
|
1111
|
+
|
|
1112
|
+
// src/plugins/microfrontends/index.ts
|
|
1113
|
+
function microfrontends(config) {
|
|
1114
|
+
const screensetsRegistry2 = screensetsRegistryFactory.build({
|
|
1115
|
+
typeSystem: config.typeSystem,
|
|
1116
|
+
mfeHandlers: config.mfeHandlers
|
|
1117
|
+
});
|
|
1118
|
+
const originalExecuteActionsChain = screensetsRegistry2.executeActionsChain.bind(screensetsRegistry2);
|
|
1119
|
+
screensetsRegistry2.executeActionsChain = async (chain) => {
|
|
1120
|
+
await originalExecuteActionsChain(chain);
|
|
1121
|
+
const actionType = chain.action?.type;
|
|
1122
|
+
if (actionType === HAI3_ACTION_MOUNT_EXT3) {
|
|
1123
|
+
const store = getStore4();
|
|
1124
|
+
const domainId = chain.action.target;
|
|
1125
|
+
const extensionId = chain.action.payload?.extensionId;
|
|
1126
|
+
if (domainId && extensionId) {
|
|
1127
|
+
store.dispatch(setExtensionMounted({ domainId, extensionId }));
|
|
1128
|
+
}
|
|
1129
|
+
} else if (actionType === HAI3_ACTION_UNMOUNT_EXT3) {
|
|
1130
|
+
const store = getStore4();
|
|
1131
|
+
const domainId = chain.action.target;
|
|
1132
|
+
if (domainId) {
|
|
1133
|
+
store.dispatch(setExtensionUnmounted({ domainId }));
|
|
1134
|
+
}
|
|
1135
|
+
}
|
|
1136
|
+
};
|
|
1137
|
+
let effectsCleanup = null;
|
|
1138
|
+
return {
|
|
1139
|
+
name: "microfrontends",
|
|
1140
|
+
dependencies: ["screensets"],
|
|
1141
|
+
// Requires screensets to be initialized
|
|
1142
|
+
provides: {
|
|
1143
|
+
registries: {
|
|
1144
|
+
// Expose the MFE-enabled ScreensetsRegistry
|
|
1145
|
+
// This registry has registerDomain(), registerExtension(), etc.
|
|
1146
|
+
screensetsRegistry: screensetsRegistry2
|
|
1147
|
+
},
|
|
1148
|
+
slices: [mfeSlice],
|
|
1149
|
+
// NOTE: Effects are NOT initialized via provides.effects.
|
|
1150
|
+
// They are initialized in onInit to capture cleanup references.
|
|
1151
|
+
// The framework calls provides.effects at build step 5, then onInit at step 7.
|
|
1152
|
+
// We only initialize effects in onInit to avoid duplicate event listeners.
|
|
1153
|
+
actions: {
|
|
1154
|
+
loadExtension,
|
|
1155
|
+
mountExtension,
|
|
1156
|
+
unmountExtension,
|
|
1157
|
+
registerExtension,
|
|
1158
|
+
unregisterExtension
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
onInit() {
|
|
1162
|
+
setMfeRegistry(screensetsRegistry2);
|
|
1163
|
+
effectsCleanup = initMfeEffects(screensetsRegistry2);
|
|
1164
|
+
},
|
|
1165
|
+
onDestroy() {
|
|
1166
|
+
if (effectsCleanup) {
|
|
1167
|
+
effectsCleanup();
|
|
1168
|
+
effectsCleanup = null;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
};
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1272
1174
|
// src/presets/index.ts
|
|
1273
1175
|
function full(config) {
|
|
1274
|
-
|
|
1176
|
+
const plugins = [
|
|
1275
1177
|
effects(),
|
|
1276
1178
|
screensets({ autoDiscover: true }),
|
|
1277
1179
|
themes(config?.themes),
|
|
1278
1180
|
layout(),
|
|
1279
|
-
routing(),
|
|
1280
|
-
navigation(),
|
|
1281
1181
|
i18n(),
|
|
1282
1182
|
mock()
|
|
1283
1183
|
];
|
|
1184
|
+
if (config?.microfrontends) {
|
|
1185
|
+
plugins.push(microfrontends(config.microfrontends));
|
|
1186
|
+
}
|
|
1187
|
+
return plugins;
|
|
1284
1188
|
}
|
|
1285
1189
|
function minimal() {
|
|
1286
1190
|
return [
|
|
@@ -1301,31 +1205,56 @@ var presets = {
|
|
|
1301
1205
|
|
|
1302
1206
|
// src/createHAI3App.ts
|
|
1303
1207
|
function createHAI3App(config) {
|
|
1304
|
-
return createHAI3(config).useAll(full({
|
|
1208
|
+
return createHAI3(config).useAll(full({
|
|
1209
|
+
themes: config?.themes,
|
|
1210
|
+
microfrontends: config?.microfrontends
|
|
1211
|
+
})).build();
|
|
1305
1212
|
}
|
|
1306
1213
|
|
|
1307
|
-
// src/registries/index.ts
|
|
1308
|
-
import { createScreensetRegistry, screensetRegistry } from "@hai3/screensets";
|
|
1309
|
-
|
|
1310
1214
|
// src/index.ts
|
|
1311
|
-
import { eventBus as eventBus7, createStore, getStore as getStore4, registerSlice as registerSlice2, hasSlice, createSlice as createSlice10 } from "@hai3/state";
|
|
1312
1215
|
import {
|
|
1313
|
-
|
|
1314
|
-
|
|
1216
|
+
HAI3_SCREEN_EXTENSION_TYPE as HAI3_SCREEN_EXTENSION_TYPE2,
|
|
1217
|
+
HAI3_MFE_ENTRY_MF
|
|
1218
|
+
} from "@hai3/screensets";
|
|
1219
|
+
import {
|
|
1220
|
+
HAI3_ACTION_LOAD_EXT as HAI3_ACTION_LOAD_EXT3,
|
|
1221
|
+
HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT4,
|
|
1222
|
+
HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT4
|
|
1223
|
+
} from "@hai3/screensets";
|
|
1224
|
+
import {
|
|
1225
|
+
HAI3_SHARED_PROPERTY_THEME as HAI3_SHARED_PROPERTY_THEME3,
|
|
1226
|
+
HAI3_SHARED_PROPERTY_LANGUAGE as HAI3_SHARED_PROPERTY_LANGUAGE3
|
|
1227
|
+
} from "@hai3/screensets";
|
|
1228
|
+
import {
|
|
1229
|
+
MfeHandler,
|
|
1230
|
+
MfeBridgeFactory,
|
|
1231
|
+
ScreensetsRegistry,
|
|
1232
|
+
ScreensetsRegistryFactory,
|
|
1233
|
+
screensetsRegistryFactory as screensetsRegistryFactory2,
|
|
1234
|
+
ContainerProvider
|
|
1235
|
+
} from "@hai3/screensets";
|
|
1236
|
+
import { MfeHandlerMF } from "@hai3/screensets/mfe/handler";
|
|
1237
|
+
import { gtsPlugin } from "@hai3/screensets/plugins/gts";
|
|
1238
|
+
import {
|
|
1239
|
+
createShadowRoot,
|
|
1240
|
+
injectCssVariables,
|
|
1241
|
+
extractGtsPackage
|
|
1315
1242
|
} from "@hai3/screensets";
|
|
1243
|
+
import { eventBus as eventBus9, createStore, getStore as getStore7, registerSlice as registerSlice2, hasSlice, createSlice as createSlice11 } from "@hai3/state";
|
|
1244
|
+
import { LayoutDomain } from "@hai3/screensets";
|
|
1316
1245
|
|
|
1317
1246
|
// src/effects/tenantEffects.ts
|
|
1318
|
-
import { eventBus as
|
|
1247
|
+
import { eventBus as eventBus7, getStore as getStore5 } from "@hai3/state";
|
|
1319
1248
|
var TenantEvents = {
|
|
1320
1249
|
Changed: "app/tenant/changed",
|
|
1321
1250
|
Cleared: "app/tenant/cleared"
|
|
1322
1251
|
};
|
|
1323
1252
|
function initTenantEffects() {
|
|
1324
|
-
const store =
|
|
1325
|
-
const subChanged =
|
|
1253
|
+
const store = getStore5();
|
|
1254
|
+
const subChanged = eventBus7.on(TenantEvents.Changed, (payload) => {
|
|
1326
1255
|
store.dispatch(setTenant(payload.tenant));
|
|
1327
1256
|
});
|
|
1328
|
-
const subCleared =
|
|
1257
|
+
const subCleared = eventBus7.on(TenantEvents.Cleared, () => {
|
|
1329
1258
|
store.dispatch(clearTenant());
|
|
1330
1259
|
});
|
|
1331
1260
|
return () => {
|
|
@@ -1333,14 +1262,17 @@ function initTenantEffects() {
|
|
|
1333
1262
|
subCleared.unsubscribe();
|
|
1334
1263
|
};
|
|
1335
1264
|
}
|
|
1265
|
+
|
|
1266
|
+
// src/effects/tenantActions.ts
|
|
1267
|
+
import { eventBus as eventBus8, getStore as getStore6 } from "@hai3/state";
|
|
1336
1268
|
function changeTenant(tenant) {
|
|
1337
|
-
|
|
1269
|
+
eventBus8.emit(TenantEvents.Changed, { tenant });
|
|
1338
1270
|
}
|
|
1339
1271
|
function clearTenantAction() {
|
|
1340
|
-
|
|
1272
|
+
eventBus8.emit(TenantEvents.Cleared, {});
|
|
1341
1273
|
}
|
|
1342
1274
|
function setTenantLoadingState(loading) {
|
|
1343
|
-
|
|
1275
|
+
getStore6().dispatch(setTenantLoading(loading));
|
|
1344
1276
|
}
|
|
1345
1277
|
|
|
1346
1278
|
// src/index.ts
|
|
@@ -1365,11 +1297,22 @@ import {
|
|
|
1365
1297
|
MOCK_PLUGIN,
|
|
1366
1298
|
isMockPlugin as isMockPlugin2
|
|
1367
1299
|
} from "@hai3/api";
|
|
1368
|
-
import { i18nRegistry
|
|
1300
|
+
import { i18nRegistry, I18nRegistryImpl, createI18nRegistry, Language as Language2, SUPPORTED_LANGUAGES, getLanguageMetadata, TextDirection, LanguageDisplayMode } from "@hai3/i18n";
|
|
1301
|
+
import {
|
|
1302
|
+
formatDate,
|
|
1303
|
+
formatTime,
|
|
1304
|
+
formatDateTime,
|
|
1305
|
+
formatRelative,
|
|
1306
|
+
formatNumber,
|
|
1307
|
+
formatPercent,
|
|
1308
|
+
formatCompact,
|
|
1309
|
+
formatCurrency,
|
|
1310
|
+
compareStrings,
|
|
1311
|
+
createCollator
|
|
1312
|
+
} from "@hai3/i18n";
|
|
1369
1313
|
import { I18nRegistryImpl as I18nRegistryImpl2 } from "@hai3/i18n";
|
|
1370
1314
|
|
|
1371
1315
|
// src/compat.ts
|
|
1372
|
-
import { screensetRegistry as screensetRegistry2 } from "@hai3/screensets";
|
|
1373
1316
|
var ACCOUNTS_DOMAIN = "accounts";
|
|
1374
1317
|
|
|
1375
1318
|
// src/migration.ts
|
|
@@ -1431,6 +1374,18 @@ export {
|
|
|
1431
1374
|
ApiPluginBase,
|
|
1432
1375
|
ApiProtocol,
|
|
1433
1376
|
BaseApiService,
|
|
1377
|
+
ContainerProvider,
|
|
1378
|
+
HAI3_ACTION_LOAD_EXT3 as HAI3_ACTION_LOAD_EXT,
|
|
1379
|
+
HAI3_ACTION_MOUNT_EXT4 as HAI3_ACTION_MOUNT_EXT,
|
|
1380
|
+
HAI3_ACTION_UNMOUNT_EXT4 as HAI3_ACTION_UNMOUNT_EXT,
|
|
1381
|
+
HAI3_MFE_ENTRY_MF,
|
|
1382
|
+
HAI3_OVERLAY_DOMAIN,
|
|
1383
|
+
HAI3_POPUP_DOMAIN,
|
|
1384
|
+
HAI3_SCREEN_DOMAIN,
|
|
1385
|
+
HAI3_SCREEN_EXTENSION_TYPE2 as HAI3_SCREEN_EXTENSION_TYPE,
|
|
1386
|
+
HAI3_SHARED_PROPERTY_LANGUAGE3 as HAI3_SHARED_PROPERTY_LANGUAGE,
|
|
1387
|
+
HAI3_SHARED_PROPERTY_THEME3 as HAI3_SHARED_PROPERTY_THEME,
|
|
1388
|
+
HAI3_SIDEBAR_DOMAIN,
|
|
1434
1389
|
I18nRegistryImpl2 as I18nRegistry,
|
|
1435
1390
|
I18nRegistryImpl,
|
|
1436
1391
|
LAYOUT_SLICE_NAME,
|
|
@@ -1438,6 +1393,9 @@ export {
|
|
|
1438
1393
|
LanguageDisplayMode,
|
|
1439
1394
|
LayoutDomain,
|
|
1440
1395
|
MOCK_PLUGIN,
|
|
1396
|
+
MfeBridgeFactory,
|
|
1397
|
+
MfeHandler,
|
|
1398
|
+
MfeHandlerMF,
|
|
1441
1399
|
MockEventSource,
|
|
1442
1400
|
MockEvents,
|
|
1443
1401
|
RestMockPlugin,
|
|
@@ -1446,7 +1404,8 @@ export {
|
|
|
1446
1404
|
RestProtocol,
|
|
1447
1405
|
STATE_PATH_MAPPING,
|
|
1448
1406
|
SUPPORTED_LANGUAGES,
|
|
1449
|
-
|
|
1407
|
+
ScreensetsRegistry,
|
|
1408
|
+
ScreensetsRegistryFactory,
|
|
1450
1409
|
SseMockPlugin,
|
|
1451
1410
|
SsePlugin,
|
|
1452
1411
|
SsePluginWithConfig,
|
|
@@ -1463,23 +1422,34 @@ export {
|
|
|
1463
1422
|
closeAllPopups,
|
|
1464
1423
|
closePopup,
|
|
1465
1424
|
closeTopPopup,
|
|
1425
|
+
compareStrings,
|
|
1426
|
+
createCollator,
|
|
1466
1427
|
createHAI3,
|
|
1467
1428
|
createHAI3App,
|
|
1468
1429
|
createI18nRegistry,
|
|
1469
1430
|
createLegacySelector,
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
createSlice10 as createSlice,
|
|
1431
|
+
createShadowRoot,
|
|
1432
|
+
createSlice11 as createSlice,
|
|
1473
1433
|
createStore,
|
|
1474
1434
|
createThemeRegistry,
|
|
1475
1435
|
effects,
|
|
1476
|
-
|
|
1436
|
+
eventBus9 as eventBus,
|
|
1437
|
+
extractGtsPackage,
|
|
1477
1438
|
footerActions,
|
|
1478
1439
|
footerSlice,
|
|
1440
|
+
formatCompact,
|
|
1441
|
+
formatCurrency,
|
|
1442
|
+
formatDate,
|
|
1443
|
+
formatDateTime,
|
|
1444
|
+
formatNumber,
|
|
1445
|
+
formatPercent,
|
|
1446
|
+
formatRelative,
|
|
1447
|
+
formatTime,
|
|
1479
1448
|
full,
|
|
1480
1449
|
getLanguageMetadata,
|
|
1481
1450
|
getLayoutDomainState,
|
|
1482
|
-
|
|
1451
|
+
getStore7 as getStore,
|
|
1452
|
+
gtsPlugin,
|
|
1483
1453
|
hasLegacyUicoreState,
|
|
1484
1454
|
hasNewLayoutState,
|
|
1485
1455
|
hasSlice,
|
|
@@ -1488,9 +1458,10 @@ export {
|
|
|
1488
1458
|
headless,
|
|
1489
1459
|
hideOverlay,
|
|
1490
1460
|
i18n,
|
|
1491
|
-
|
|
1461
|
+
i18nRegistry,
|
|
1492
1462
|
initMockEffects,
|
|
1493
1463
|
initTenantEffects,
|
|
1464
|
+
injectCssVariables,
|
|
1494
1465
|
isDeprecationWarningsEnabled,
|
|
1495
1466
|
isMockPlugin2 as isMockPlugin,
|
|
1496
1467
|
isRestShortCircuit,
|
|
@@ -1499,26 +1470,34 @@ export {
|
|
|
1499
1470
|
layout,
|
|
1500
1471
|
layoutDomainReducers,
|
|
1501
1472
|
layoutReducer,
|
|
1473
|
+
loadExtension,
|
|
1502
1474
|
menuActions,
|
|
1503
1475
|
menuSlice,
|
|
1476
|
+
microfrontends,
|
|
1504
1477
|
minimal,
|
|
1505
1478
|
mock,
|
|
1506
1479
|
mockActions,
|
|
1507
1480
|
mockSlice,
|
|
1481
|
+
mountExtension,
|
|
1508
1482
|
navigateTo,
|
|
1509
|
-
navigation,
|
|
1510
1483
|
openPopup,
|
|
1511
1484
|
overlayActions,
|
|
1485
|
+
overlayDomain,
|
|
1512
1486
|
overlaySlice,
|
|
1513
1487
|
popupActions,
|
|
1488
|
+
popupDomain,
|
|
1514
1489
|
popupSlice,
|
|
1515
1490
|
presets,
|
|
1491
|
+
registerExtension,
|
|
1516
1492
|
registerSlice2 as registerSlice,
|
|
1517
|
-
routing,
|
|
1518
1493
|
screenActions,
|
|
1494
|
+
screenDomain,
|
|
1519
1495
|
screenSlice,
|
|
1520
|
-
screensetRegistry2 as screensetRegistry,
|
|
1521
1496
|
screensets,
|
|
1497
|
+
screensetsRegistryFactory2 as screensetsRegistryFactory,
|
|
1498
|
+
selectExtensionError,
|
|
1499
|
+
selectExtensionState,
|
|
1500
|
+
selectRegisteredExtensions,
|
|
1522
1501
|
setActiveScreen,
|
|
1523
1502
|
setDeprecationWarnings,
|
|
1524
1503
|
setFooterConfig,
|
|
@@ -1544,6 +1523,7 @@ export {
|
|
|
1544
1523
|
setUser,
|
|
1545
1524
|
showOverlay,
|
|
1546
1525
|
sidebarActions,
|
|
1526
|
+
sidebarDomain,
|
|
1547
1527
|
sidebarSlice,
|
|
1548
1528
|
tenantActions,
|
|
1549
1529
|
tenantSlice_default as tenantReducer,
|
|
@@ -1551,6 +1531,8 @@ export {
|
|
|
1551
1531
|
themes,
|
|
1552
1532
|
toggleMenu,
|
|
1553
1533
|
toggleMockMode,
|
|
1554
|
-
toggleSidebar
|
|
1534
|
+
toggleSidebar,
|
|
1535
|
+
unmountExtension,
|
|
1536
|
+
unregisterExtension
|
|
1555
1537
|
};
|
|
1556
1538
|
//# sourceMappingURL=index.js.map
|