@hai3/framework 0.2.0-alpha.3 → 0.4.0-alpha.0

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/dist/index.js CHANGED
@@ -64,11 +64,10 @@ var HAI3AppBuilderImpl = class {
64
64
  const app = {
65
65
  config: this.config,
66
66
  store,
67
- screensetRegistry: aggregated.registries.screensetRegistry,
68
67
  themeRegistry: aggregated.registries.themeRegistry,
69
- routeRegistry: aggregated.registries.routeRegistry,
70
68
  apiRegistry,
71
69
  i18nRegistry: aggregated.registries.i18nRegistry,
70
+ screensetsRegistry: aggregated.registries.screensetsRegistry,
72
71
  actions: aggregated.actions,
73
72
  destroy: () => this.destroyApp(orderedPlugins, app)
74
73
  };
@@ -127,7 +126,7 @@ Add the missing plugin: .use(${depName}())`
127
126
  const registries = {};
128
127
  const slices = [];
129
128
  const effects2 = [];
130
- const actions = {};
129
+ const actions2 = {};
131
130
  plugins.forEach((plugin) => {
132
131
  if (!plugin.provides) return;
133
132
  if (plugin.provides.registries) {
@@ -140,10 +139,10 @@ Add the missing plugin: .use(${depName}())`
140
139
  effects2.push(...plugin.provides.effects);
141
140
  }
142
141
  if (plugin.provides.actions) {
143
- Object.assign(actions, plugin.provides.actions);
142
+ Object.assign(actions2, plugin.provides.actions);
144
143
  }
145
144
  });
146
- return { registries, slices, effects: effects2, actions };
145
+ return { registries, slices, effects: effects2, actions: actions2 };
147
146
  }
148
147
  /**
149
148
  * Create store with all aggregated slices.
@@ -159,8 +158,8 @@ Add the missing plugin: .use(${depName}())`
159
158
  */
160
159
  createStoreWithSlices(slices) {
161
160
  const store = getStore();
162
- slices.forEach((slice10) => {
163
- registerSlice(slice10);
161
+ slices.forEach((slice11) => {
162
+ registerSlice(slice11);
164
163
  });
165
164
  return store;
166
165
  }
@@ -179,9 +178,6 @@ function createHAI3(config) {
179
178
  return new HAI3AppBuilderImpl(config);
180
179
  }
181
180
 
182
- // src/plugins/screensets.ts
183
- import { screensetRegistry as sdkScreensetRegistry } from "@hai3/screensets";
184
-
185
181
  // src/slices/index.ts
186
182
  import { combineReducers } from "@reduxjs/toolkit";
187
183
 
@@ -478,35 +474,26 @@ var layoutDomainReducers = {
478
474
  var layoutReducer = combineReducers(layoutDomainReducers);
479
475
 
480
476
  // src/plugins/screensets.ts
481
- var screenSlice2 = screenSlice;
482
- var screenActions2 = screenActions;
483
- function screensets(config) {
484
- const screensetRegistry3 = sdkScreensetRegistry;
477
+ function screensets(_config) {
485
478
  return {
486
479
  name: "screensets",
487
480
  dependencies: [],
488
481
  provides: {
489
- registries: {
490
- screensetRegistry: screensetRegistry3
491
- },
492
- slices: [screenSlice2],
482
+ registries: {},
483
+ slices: [screenSlice],
493
484
  actions: {
494
- setActiveScreen: screenActions2.navigateTo,
495
- setScreenLoading: screenActions2.setScreenLoading
485
+ setActiveScreen: screenActions.navigateTo,
486
+ setScreenLoading: screenActions.setScreenLoading
496
487
  }
497
488
  },
498
489
  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
490
  }
505
491
  };
506
492
  }
507
493
 
508
494
  // src/plugins/themes.ts
509
495
  import { eventBus } from "@hai3/state";
496
+ import { HAI3_SHARED_PROPERTY_THEME } from "@hai3/screensets";
510
497
 
511
498
  // src/registries/themeRegistry.ts
512
499
  function createThemeRegistry(config) {
@@ -644,9 +631,14 @@ function themes(config) {
644
631
  changeTheme
645
632
  }
646
633
  },
647
- onInit(_app) {
634
+ onInit(app) {
648
635
  eventBus.on("theme/changed", (payload) => {
649
636
  themeRegistry.apply(payload.themeId);
637
+ try {
638
+ app.screensetsRegistry?.updateSharedProperty(HAI3_SHARED_PROPERTY_THEME, payload.themeId);
639
+ } catch (error) {
640
+ console.error("[HAI3] Failed to propagate theme to MFE domains", error);
641
+ }
650
642
  });
651
643
  const themes2 = themeRegistry.getAll();
652
644
  if (themes2.length > 0) {
@@ -658,18 +650,6 @@ function themes(config) {
658
650
 
659
651
  // src/plugins/layout.ts
660
652
  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
653
  function showPopup(payload) {
674
654
  eventBus2.emit("layout/popup/requested", payload);
675
655
  }
@@ -688,18 +668,20 @@ function toggleMenuCollapsed(payload) {
688
668
  function toggleSidebarCollapsed(payload) {
689
669
  eventBus2.emit("layout/sidebar/collapsed", payload);
690
670
  }
671
+ function setHeaderVisible(_visible) {
672
+ }
691
673
  function layout() {
692
674
  return {
693
675
  name: "layout",
694
676
  dependencies: ["screensets"],
695
677
  provides: {
696
678
  slices: [
697
- headerSlice2,
698
- footerSlice2,
699
- menuSlice2,
700
- sidebarSlice2,
701
- popupSlice2,
702
- overlaySlice2
679
+ headerSlice,
680
+ footerSlice,
681
+ menuSlice,
682
+ sidebarSlice,
683
+ popupSlice,
684
+ overlaySlice
703
685
  ],
704
686
  actions: {
705
687
  showPopup,
@@ -709,463 +691,71 @@ function layout() {
709
691
  toggleMenuCollapsed,
710
692
  toggleSidebarCollapsed,
711
693
  // Direct slice actions for backward compatibility
712
- setHeaderVisible: headerActions2.setVisible,
713
- setFooterVisible: footerActions2.setVisible,
714
- setMenuCollapsed: menuActions2.setCollapsed,
715
- setSidebarCollapsed: sidebarActions2.setCollapsed
694
+ setHeaderVisible,
695
+ setFooterVisible: footerActions.setFooterVisible,
696
+ setMenuCollapsed: menuActions.setMenuCollapsed,
697
+ setSidebarCollapsed: sidebarActions.setSidebarCollapsed
716
698
  }
717
699
  },
718
700
  onInit(app) {
719
701
  const dispatch = app.store.dispatch;
720
702
  eventBus2.on("layout/popup/requested", (payload) => {
721
- dispatch(popupActions2.open({
703
+ dispatch(popupActions.openPopup({
722
704
  id: payload.id,
723
- title: payload.title,
724
- content: payload.content,
725
- size: payload.size
705
+ title: payload.title ?? "",
706
+ component: ""
707
+ // Payload doesn't include component - this needs review
726
708
  }));
727
709
  });
728
710
  eventBus2.on("layout/popup/hidden", () => {
729
- dispatch(popupActions2.close());
711
+ dispatch(popupActions.closeAllPopups());
730
712
  });
731
- eventBus2.on("layout/overlay/requested", (payload) => {
732
- dispatch(overlayActions2.show({ id: payload.id }));
713
+ eventBus2.on("layout/overlay/requested", (_payload) => {
714
+ dispatch(overlayActions.showOverlay());
733
715
  });
734
716
  eventBus2.on("layout/overlay/hidden", () => {
735
- dispatch(overlayActions2.hide());
717
+ dispatch(overlayActions.hideOverlay());
736
718
  });
737
719
  eventBus2.on("layout/menu/collapsed", (payload) => {
738
- dispatch(menuActions2.setCollapsed(payload.collapsed));
720
+ dispatch(menuActions.setMenuCollapsed(payload.collapsed));
739
721
  });
740
722
  eventBus2.on("layout/sidebar/collapsed", (payload) => {
741
- dispatch(sidebarActions2.setCollapsed(payload.collapsed));
723
+ dispatch(sidebarActions.setSidebarCollapsed(payload.collapsed));
742
724
  });
743
725
  }
744
726
  };
745
727
  }
746
728
 
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
- });
975
- });
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
- }
1142
- };
1143
- }
1144
-
1145
729
  // src/plugins/i18n.ts
1146
- import { eventBus as eventBus4 } from "@hai3/state";
730
+ import { eventBus as eventBus3 } from "@hai3/state";
1147
731
  import { i18nRegistry as singletonI18nRegistry, Language } from "@hai3/i18n";
732
+ import { HAI3_SHARED_PROPERTY_LANGUAGE } from "@hai3/screensets";
1148
733
  function setLanguage(payload) {
1149
- eventBus4.emit("i18n/language/changed", payload);
734
+ eventBus3.emit("i18n/language/changed", payload);
1150
735
  }
1151
736
  function i18n() {
1152
- const i18nRegistry3 = singletonI18nRegistry;
737
+ const i18nRegistry2 = singletonI18nRegistry;
1153
738
  return {
1154
739
  name: "i18n",
1155
740
  dependencies: [],
1156
741
  provides: {
1157
742
  registries: {
1158
- i18nRegistry: i18nRegistry3
743
+ i18nRegistry: i18nRegistry2
1159
744
  },
1160
745
  actions: {
1161
746
  setLanguage
1162
747
  }
1163
748
  },
1164
- onInit(_app) {
1165
- eventBus4.on("i18n/language/changed", async (payload) => {
1166
- await i18nRegistry3.setLanguage(payload.language);
749
+ onInit(app) {
750
+ eventBus3.on("i18n/language/changed", async (payload) => {
751
+ await i18nRegistry2.setLanguage(payload.language);
752
+ try {
753
+ app.screensetsRegistry?.updateSharedProperty(HAI3_SHARED_PROPERTY_LANGUAGE, payload.language);
754
+ } catch (error) {
755
+ console.error("[HAI3] Failed to propagate language to MFE domains", error);
756
+ }
1167
757
  });
1168
- i18nRegistry3.setLanguage(Language.English).catch((err) => {
758
+ i18nRegistry2.setLanguage(Language.English).catch((err) => {
1169
759
  console.warn("[HAI3] Failed to load initial translations:", err);
1170
760
  });
1171
761
  }
@@ -1177,16 +767,13 @@ function effects() {
1177
767
  return {
1178
768
  name: "effects",
1179
769
  dependencies: [],
1180
- onInit(app) {
1181
- if (app.config.devMode) {
1182
- console.log("[HAI3] Effects plugin initialized");
1183
- }
770
+ onInit() {
1184
771
  }
1185
772
  };
1186
773
  }
1187
774
 
1188
775
  // src/effects/mockEffects.ts
1189
- import { eventBus as eventBus5, getStore as getStore2 } from "@hai3/state";
776
+ import { eventBus as eventBus4, getStore as getStore2 } from "@hai3/state";
1190
777
  import { apiRegistry as apiRegistry2, isMockPlugin } from "@hai3/api";
1191
778
  function hasPluginManagement(protocol) {
1192
779
  return "plugins" in protocol && typeof protocol.plugins === "object";
@@ -1216,7 +803,7 @@ function syncMockPlugins(enabled) {
1216
803
  }
1217
804
  function initMockEffects() {
1218
805
  const store = getStore2();
1219
- const unsubscribe = eventBus5.on(MockEvents.Toggle, (payload) => {
806
+ const unsubscribe = eventBus4.on(MockEvents.Toggle, (payload) => {
1220
807
  store.dispatch(setMockEnabled(payload.enabled));
1221
808
  syncMockPlugins(payload.enabled);
1222
809
  });
@@ -1229,7 +816,7 @@ function initMockEffects() {
1229
816
  };
1230
817
  }
1231
818
  function toggleMockMode(enabled) {
1232
- eventBus5.emit(MockEvents.Toggle, { enabled });
819
+ eventBus4.emit(MockEvents.Toggle, { enabled });
1233
820
  }
1234
821
 
1235
822
  // src/plugins/mock.ts
@@ -1255,9 +842,6 @@ function mock(config) {
1255
842
  const enabledByDefault = config?.enabledByDefault ?? isDev;
1256
843
  if (enabledByDefault) {
1257
844
  toggleMockMode(true);
1258
- if (isDev) {
1259
- console.log("[HAI3] Mock mode enabled by default (dev environment detected)");
1260
- }
1261
845
  }
1262
846
  },
1263
847
  onDestroy() {
@@ -1269,6 +853,301 @@ function mock(config) {
1269
853
  };
1270
854
  }
1271
855
 
856
+ // src/plugins/microfrontends/index.ts
857
+ import {
858
+ screensetsRegistryFactory,
859
+ HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT3,
860
+ HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT3
861
+ } from "@hai3/screensets";
862
+ import { gtsPlugin } from "@hai3/screensets/plugins/gts";
863
+ import { getStore as getStore4 } from "@hai3/state";
864
+
865
+ // src/plugins/microfrontends/slice.ts
866
+ import { createSlice as createSlice10 } from "@hai3/state";
867
+ var SLICE_KEY10 = "mfe";
868
+ var initialState10 = {
869
+ registrationStates: {},
870
+ errors: {},
871
+ mountedExtensions: {}
872
+ };
873
+ var { slice: slice10, ...actions } = createSlice10({
874
+ name: SLICE_KEY10,
875
+ initialState: initialState10,
876
+ reducers: {
877
+ // Registration state reducers
878
+ setExtensionRegistering: (state, action) => {
879
+ state.registrationStates[action.payload.extensionId] = "registering";
880
+ },
881
+ setExtensionRegistered: (state, action) => {
882
+ state.registrationStates[action.payload.extensionId] = "registered";
883
+ },
884
+ setExtensionUnregistered: (state, action) => {
885
+ state.registrationStates[action.payload.extensionId] = "unregistered";
886
+ },
887
+ setExtensionError: (state, action) => {
888
+ state.registrationStates[action.payload.extensionId] = "error";
889
+ state.errors[action.payload.extensionId] = action.payload.error;
890
+ },
891
+ // Mount state reducers
892
+ setExtensionMounted: (state, action) => {
893
+ state.mountedExtensions[action.payload.domainId] = action.payload.extensionId;
894
+ },
895
+ setExtensionUnmounted: (state, action) => {
896
+ state.mountedExtensions[action.payload.domainId] = void 0;
897
+ }
898
+ }
899
+ });
900
+ var mfeSlice = slice10;
901
+ var {
902
+ setExtensionRegistering,
903
+ setExtensionRegistered,
904
+ setExtensionUnregistered,
905
+ setExtensionError,
906
+ setExtensionMounted,
907
+ setExtensionUnmounted
908
+ } = actions;
909
+ function selectExtensionState(state, extensionId) {
910
+ return state.mfe.registrationStates[extensionId] ?? "unregistered";
911
+ }
912
+ function selectRegisteredExtensions(state) {
913
+ return Object.entries(state.mfe.registrationStates).filter(([_, regState]) => regState === "registered").map(([extensionId]) => extensionId);
914
+ }
915
+ function selectExtensionError(state, extensionId) {
916
+ return state.mfe.errors[extensionId];
917
+ }
918
+ var slice_default = slice10.reducer;
919
+
920
+ // src/plugins/microfrontends/effects.ts
921
+ import { eventBus as eventBus5, getStore as getStore3 } from "@hai3/state";
922
+
923
+ // src/plugins/microfrontends/constants.ts
924
+ var HAI3_POPUP_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.popup.v1";
925
+ var HAI3_SIDEBAR_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.sidebar.v1";
926
+ var HAI3_SCREEN_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.screen.v1";
927
+ var HAI3_OVERLAY_DOMAIN = "gts.hai3.mfes.ext.domain.v1~hai3.screensets.layout.overlay.v1";
928
+ var MfeEvents = {
929
+ RegisterExtensionRequested: "mfe/registerExtensionRequested",
930
+ UnregisterExtensionRequested: "mfe/unregisterExtensionRequested"
931
+ };
932
+
933
+ // src/plugins/microfrontends/effects.ts
934
+ function initMfeEffects(screensetsRegistry2) {
935
+ const store = getStore3();
936
+ const unsubscribers = [];
937
+ const unsubRegisterExtension = eventBus5.on(MfeEvents.RegisterExtensionRequested, async (payload) => {
938
+ const { extension } = payload;
939
+ try {
940
+ store.dispatch(setExtensionRegistering({ extensionId: extension.id }));
941
+ await screensetsRegistry2.registerExtension(extension);
942
+ store.dispatch(setExtensionRegistered({ extensionId: extension.id }));
943
+ } catch (error) {
944
+ const errorMessage = error instanceof Error ? error.message : "Unknown registration error";
945
+ store.dispatch(setExtensionError({ extensionId: extension.id, error: errorMessage }));
946
+ }
947
+ });
948
+ unsubscribers.push(unsubRegisterExtension);
949
+ const unsubUnregisterExtension = eventBus5.on(MfeEvents.UnregisterExtensionRequested, async (payload) => {
950
+ const { extensionId } = payload;
951
+ try {
952
+ await screensetsRegistry2.unregisterExtension(extensionId);
953
+ store.dispatch(setExtensionUnregistered({ extensionId }));
954
+ } catch (error) {
955
+ const errorMessage = error instanceof Error ? error.message : "Unknown unregistration error";
956
+ store.dispatch(setExtensionError({ extensionId, error: errorMessage }));
957
+ }
958
+ });
959
+ unsubscribers.push(unsubUnregisterExtension);
960
+ return () => {
961
+ unsubscribers.forEach((unsub) => unsub.unsubscribe());
962
+ };
963
+ }
964
+
965
+ // src/plugins/microfrontends/actions.ts
966
+ import { eventBus as eventBus6 } from "@hai3/state";
967
+ import {
968
+ HAI3_ACTION_LOAD_EXT,
969
+ HAI3_ACTION_MOUNT_EXT,
970
+ HAI3_ACTION_UNMOUNT_EXT
971
+ } from "@hai3/screensets";
972
+ var screensetsRegistry = null;
973
+ function setMfeRegistry(registry) {
974
+ screensetsRegistry = registry;
975
+ }
976
+ function resolveDomainId(extensionId) {
977
+ if (!screensetsRegistry) {
978
+ throw new Error("MFE registry not initialized. Call setMfeRegistry() before using lifecycle actions.");
979
+ }
980
+ const extension = screensetsRegistry.getExtension(extensionId);
981
+ if (!extension) {
982
+ throw new Error(`Extension '${extensionId}' is not registered. Register it before calling lifecycle actions.`);
983
+ }
984
+ return extension.domain;
985
+ }
986
+ function loadExtension(extensionId) {
987
+ const domainId = resolveDomainId(extensionId);
988
+ screensetsRegistry.executeActionsChain({
989
+ action: {
990
+ type: HAI3_ACTION_LOAD_EXT,
991
+ target: domainId,
992
+ payload: { extensionId }
993
+ }
994
+ }).catch((error) => {
995
+ console.error(`[MFE] Load failed for ${extensionId}:`, error);
996
+ });
997
+ }
998
+ function mountExtension(extensionId) {
999
+ const domainId = resolveDomainId(extensionId);
1000
+ screensetsRegistry.executeActionsChain({
1001
+ action: {
1002
+ type: HAI3_ACTION_MOUNT_EXT,
1003
+ target: domainId,
1004
+ payload: { extensionId }
1005
+ }
1006
+ }).catch((error) => {
1007
+ console.error(`[MFE] Mount failed for ${extensionId}:`, error);
1008
+ });
1009
+ }
1010
+ function unmountExtension(extensionId) {
1011
+ const domainId = resolveDomainId(extensionId);
1012
+ screensetsRegistry.executeActionsChain({
1013
+ action: {
1014
+ type: HAI3_ACTION_UNMOUNT_EXT,
1015
+ target: domainId,
1016
+ payload: { extensionId }
1017
+ }
1018
+ }).catch((error) => {
1019
+ console.error(`[MFE] Unmount failed for ${extensionId}:`, error);
1020
+ });
1021
+ }
1022
+ function registerExtension(extension) {
1023
+ eventBus6.emit(MfeEvents.RegisterExtensionRequested, { extension });
1024
+ }
1025
+ function unregisterExtension(extensionId) {
1026
+ eventBus6.emit(MfeEvents.UnregisterExtensionRequested, { extensionId });
1027
+ }
1028
+
1029
+ // src/plugins/microfrontends/base-domains.ts
1030
+ import {
1031
+ HAI3_ACTION_LOAD_EXT as HAI3_ACTION_LOAD_EXT2,
1032
+ HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT2,
1033
+ HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT2,
1034
+ HAI3_SHARED_PROPERTY_THEME as HAI3_SHARED_PROPERTY_THEME2,
1035
+ HAI3_SHARED_PROPERTY_LANGUAGE as HAI3_SHARED_PROPERTY_LANGUAGE2,
1036
+ HAI3_SCREEN_EXTENSION_TYPE
1037
+ } from "@hai3/screensets";
1038
+ var INIT_ONLY_LIFECYCLE_STAGES = [
1039
+ "gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.init.v1"
1040
+ ];
1041
+ var DEFAULT_LIFECYCLE_STAGES = [
1042
+ "gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.init.v1",
1043
+ "gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.activated.v1",
1044
+ "gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.deactivated.v1",
1045
+ "gts.hai3.mfes.lifecycle.stage.v1~hai3.mfes.lifecycle.destroyed.v1"
1046
+ ];
1047
+ var screenDomain = {
1048
+ id: HAI3_SCREEN_DOMAIN,
1049
+ actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2],
1050
+ extensionsActions: [],
1051
+ sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
1052
+ defaultActionTimeout: 3e4,
1053
+ lifecycleStages: [...INIT_ONLY_LIFECYCLE_STAGES],
1054
+ extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1055
+ extensionsTypeId: HAI3_SCREEN_EXTENSION_TYPE,
1056
+ lifecycle: void 0
1057
+ };
1058
+ var sidebarDomain = {
1059
+ id: HAI3_SIDEBAR_DOMAIN,
1060
+ actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
1061
+ extensionsActions: [],
1062
+ sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
1063
+ defaultActionTimeout: 3e4,
1064
+ lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1065
+ extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1066
+ lifecycle: void 0
1067
+ };
1068
+ var popupDomain = {
1069
+ id: HAI3_POPUP_DOMAIN,
1070
+ actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
1071
+ extensionsActions: [],
1072
+ sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
1073
+ defaultActionTimeout: 3e4,
1074
+ lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1075
+ extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1076
+ lifecycle: void 0
1077
+ };
1078
+ var overlayDomain = {
1079
+ id: HAI3_OVERLAY_DOMAIN,
1080
+ actions: [HAI3_ACTION_LOAD_EXT2, HAI3_ACTION_MOUNT_EXT2, HAI3_ACTION_UNMOUNT_EXT2],
1081
+ extensionsActions: [],
1082
+ sharedProperties: [HAI3_SHARED_PROPERTY_THEME2, HAI3_SHARED_PROPERTY_LANGUAGE2],
1083
+ defaultActionTimeout: 3e4,
1084
+ lifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1085
+ extensionsLifecycleStages: [...DEFAULT_LIFECYCLE_STAGES],
1086
+ lifecycle: void 0
1087
+ };
1088
+
1089
+ // src/plugins/microfrontends/index.ts
1090
+ function microfrontends(config = {}) {
1091
+ const screensetsRegistry2 = screensetsRegistryFactory.build({
1092
+ typeSystem: gtsPlugin,
1093
+ mfeHandlers: config.mfeHandlers
1094
+ });
1095
+ const originalExecuteActionsChain = screensetsRegistry2.executeActionsChain.bind(screensetsRegistry2);
1096
+ screensetsRegistry2.executeActionsChain = async (chain) => {
1097
+ await originalExecuteActionsChain(chain);
1098
+ const actionType = chain.action?.type;
1099
+ if (actionType === HAI3_ACTION_MOUNT_EXT3) {
1100
+ const store = getStore4();
1101
+ const domainId = chain.action.target;
1102
+ const extensionId = chain.action.payload?.extensionId;
1103
+ if (domainId && extensionId) {
1104
+ store.dispatch(setExtensionMounted({ domainId, extensionId }));
1105
+ }
1106
+ } else if (actionType === HAI3_ACTION_UNMOUNT_EXT3) {
1107
+ const store = getStore4();
1108
+ const domainId = chain.action.target;
1109
+ if (domainId) {
1110
+ store.dispatch(setExtensionUnmounted({ domainId }));
1111
+ }
1112
+ }
1113
+ };
1114
+ let effectsCleanup = null;
1115
+ return {
1116
+ name: "microfrontends",
1117
+ dependencies: ["screensets"],
1118
+ // Requires screensets to be initialized
1119
+ provides: {
1120
+ registries: {
1121
+ // Expose the MFE-enabled ScreensetsRegistry
1122
+ // This registry has registerDomain(), registerExtension(), etc.
1123
+ screensetsRegistry: screensetsRegistry2
1124
+ },
1125
+ slices: [mfeSlice],
1126
+ // NOTE: Effects are NOT initialized via provides.effects.
1127
+ // They are initialized in onInit to capture cleanup references.
1128
+ // The framework calls provides.effects at build step 5, then onInit at step 7.
1129
+ // We only initialize effects in onInit to avoid duplicate event listeners.
1130
+ actions: {
1131
+ loadExtension,
1132
+ mountExtension,
1133
+ unmountExtension,
1134
+ registerExtension,
1135
+ unregisterExtension
1136
+ }
1137
+ },
1138
+ onInit() {
1139
+ setMfeRegistry(screensetsRegistry2);
1140
+ effectsCleanup = initMfeEffects(screensetsRegistry2);
1141
+ },
1142
+ onDestroy() {
1143
+ if (effectsCleanup) {
1144
+ effectsCleanup();
1145
+ effectsCleanup = null;
1146
+ }
1147
+ }
1148
+ };
1149
+ }
1150
+
1272
1151
  // src/presets/index.ts
1273
1152
  function full(config) {
1274
1153
  return [
@@ -1276,10 +1155,9 @@ function full(config) {
1276
1155
  screensets({ autoDiscover: true }),
1277
1156
  themes(config?.themes),
1278
1157
  layout(),
1279
- routing(),
1280
- navigation(),
1281
1158
  i18n(),
1282
- mock()
1159
+ mock(),
1160
+ microfrontends(config?.microfrontends)
1283
1161
  ];
1284
1162
  }
1285
1163
  function minimal() {
@@ -1301,31 +1179,55 @@ var presets = {
1301
1179
 
1302
1180
  // src/createHAI3App.ts
1303
1181
  function createHAI3App(config) {
1304
- return createHAI3(config).useAll(full({ themes: config?.themes })).build();
1182
+ return createHAI3(config).useAll(full({
1183
+ themes: config?.themes,
1184
+ microfrontends: config?.microfrontends
1185
+ })).build();
1305
1186
  }
1306
1187
 
1307
- // src/registries/index.ts
1308
- import { createScreensetRegistry, screensetRegistry } from "@hai3/screensets";
1309
-
1310
1188
  // src/index.ts
1311
- import { eventBus as eventBus7, createStore, getStore as getStore4, registerSlice as registerSlice2, hasSlice, createSlice as createSlice10 } from "@hai3/state";
1312
1189
  import {
1313
- LayoutDomain,
1314
- ScreensetCategory
1190
+ HAI3_SCREEN_EXTENSION_TYPE as HAI3_SCREEN_EXTENSION_TYPE2
1191
+ } from "@hai3/screensets";
1192
+ import {
1193
+ HAI3_ACTION_LOAD_EXT as HAI3_ACTION_LOAD_EXT3,
1194
+ HAI3_ACTION_MOUNT_EXT as HAI3_ACTION_MOUNT_EXT4,
1195
+ HAI3_ACTION_UNMOUNT_EXT as HAI3_ACTION_UNMOUNT_EXT4
1196
+ } from "@hai3/screensets";
1197
+ import {
1198
+ HAI3_SHARED_PROPERTY_THEME as HAI3_SHARED_PROPERTY_THEME3,
1199
+ HAI3_SHARED_PROPERTY_LANGUAGE as HAI3_SHARED_PROPERTY_LANGUAGE3
1200
+ } from "@hai3/screensets";
1201
+ import {
1202
+ MfeHandler,
1203
+ MfeBridgeFactory,
1204
+ ScreensetsRegistry,
1205
+ ScreensetsRegistryFactory,
1206
+ screensetsRegistryFactory as screensetsRegistryFactory2,
1207
+ ContainerProvider
1208
+ } from "@hai3/screensets";
1209
+ import { MfeHandlerMF } from "@hai3/screensets/mfe/handler";
1210
+ import { gtsPlugin as gtsPlugin2 } from "@hai3/screensets/plugins/gts";
1211
+ import {
1212
+ createShadowRoot,
1213
+ injectCssVariables,
1214
+ extractGtsPackage
1315
1215
  } from "@hai3/screensets";
1216
+ import { eventBus as eventBus9, createStore, getStore as getStore7, registerSlice as registerSlice2, hasSlice, createSlice as createSlice11 } from "@hai3/state";
1217
+ import { LayoutDomain } from "@hai3/screensets";
1316
1218
 
1317
1219
  // src/effects/tenantEffects.ts
1318
- import { eventBus as eventBus6, getStore as getStore3 } from "@hai3/state";
1220
+ import { eventBus as eventBus7, getStore as getStore5 } from "@hai3/state";
1319
1221
  var TenantEvents = {
1320
1222
  Changed: "app/tenant/changed",
1321
1223
  Cleared: "app/tenant/cleared"
1322
1224
  };
1323
1225
  function initTenantEffects() {
1324
- const store = getStore3();
1325
- const subChanged = eventBus6.on(TenantEvents.Changed, (payload) => {
1226
+ const store = getStore5();
1227
+ const subChanged = eventBus7.on(TenantEvents.Changed, (payload) => {
1326
1228
  store.dispatch(setTenant(payload.tenant));
1327
1229
  });
1328
- const subCleared = eventBus6.on(TenantEvents.Cleared, () => {
1230
+ const subCleared = eventBus7.on(TenantEvents.Cleared, () => {
1329
1231
  store.dispatch(clearTenant());
1330
1232
  });
1331
1233
  return () => {
@@ -1333,14 +1235,17 @@ function initTenantEffects() {
1333
1235
  subCleared.unsubscribe();
1334
1236
  };
1335
1237
  }
1238
+
1239
+ // src/effects/tenantActions.ts
1240
+ import { eventBus as eventBus8, getStore as getStore6 } from "@hai3/state";
1336
1241
  function changeTenant(tenant) {
1337
- eventBus6.emit(TenantEvents.Changed, { tenant });
1242
+ eventBus8.emit(TenantEvents.Changed, { tenant });
1338
1243
  }
1339
1244
  function clearTenantAction() {
1340
- eventBus6.emit(TenantEvents.Cleared, {});
1245
+ eventBus8.emit(TenantEvents.Cleared, {});
1341
1246
  }
1342
1247
  function setTenantLoadingState(loading) {
1343
- getStore3().dispatch(setTenantLoading(loading));
1248
+ getStore6().dispatch(setTenantLoading(loading));
1344
1249
  }
1345
1250
 
1346
1251
  // src/index.ts
@@ -1365,11 +1270,22 @@ import {
1365
1270
  MOCK_PLUGIN,
1366
1271
  isMockPlugin as isMockPlugin2
1367
1272
  } from "@hai3/api";
1368
- import { i18nRegistry as i18nRegistry2, I18nRegistryImpl, createI18nRegistry, Language as Language2, SUPPORTED_LANGUAGES, getLanguageMetadata, TextDirection, LanguageDisplayMode } from "@hai3/i18n";
1273
+ import { i18nRegistry, I18nRegistryImpl, createI18nRegistry, Language as Language2, SUPPORTED_LANGUAGES, getLanguageMetadata, TextDirection, LanguageDisplayMode } from "@hai3/i18n";
1274
+ import {
1275
+ formatDate,
1276
+ formatTime,
1277
+ formatDateTime,
1278
+ formatRelative,
1279
+ formatNumber,
1280
+ formatPercent,
1281
+ formatCompact,
1282
+ formatCurrency,
1283
+ compareStrings,
1284
+ createCollator
1285
+ } from "@hai3/i18n";
1369
1286
  import { I18nRegistryImpl as I18nRegistryImpl2 } from "@hai3/i18n";
1370
1287
 
1371
1288
  // src/compat.ts
1372
- import { screensetRegistry as screensetRegistry2 } from "@hai3/screensets";
1373
1289
  var ACCOUNTS_DOMAIN = "accounts";
1374
1290
 
1375
1291
  // src/migration.ts
@@ -1431,6 +1347,17 @@ export {
1431
1347
  ApiPluginBase,
1432
1348
  ApiProtocol,
1433
1349
  BaseApiService,
1350
+ ContainerProvider,
1351
+ HAI3_ACTION_LOAD_EXT3 as HAI3_ACTION_LOAD_EXT,
1352
+ HAI3_ACTION_MOUNT_EXT4 as HAI3_ACTION_MOUNT_EXT,
1353
+ HAI3_ACTION_UNMOUNT_EXT4 as HAI3_ACTION_UNMOUNT_EXT,
1354
+ HAI3_OVERLAY_DOMAIN,
1355
+ HAI3_POPUP_DOMAIN,
1356
+ HAI3_SCREEN_DOMAIN,
1357
+ HAI3_SCREEN_EXTENSION_TYPE2 as HAI3_SCREEN_EXTENSION_TYPE,
1358
+ HAI3_SHARED_PROPERTY_LANGUAGE3 as HAI3_SHARED_PROPERTY_LANGUAGE,
1359
+ HAI3_SHARED_PROPERTY_THEME3 as HAI3_SHARED_PROPERTY_THEME,
1360
+ HAI3_SIDEBAR_DOMAIN,
1434
1361
  I18nRegistryImpl2 as I18nRegistry,
1435
1362
  I18nRegistryImpl,
1436
1363
  LAYOUT_SLICE_NAME,
@@ -1438,6 +1365,9 @@ export {
1438
1365
  LanguageDisplayMode,
1439
1366
  LayoutDomain,
1440
1367
  MOCK_PLUGIN,
1368
+ MfeBridgeFactory,
1369
+ MfeHandler,
1370
+ MfeHandlerMF,
1441
1371
  MockEventSource,
1442
1372
  MockEvents,
1443
1373
  RestMockPlugin,
@@ -1446,7 +1376,8 @@ export {
1446
1376
  RestProtocol,
1447
1377
  STATE_PATH_MAPPING,
1448
1378
  SUPPORTED_LANGUAGES,
1449
- ScreensetCategory,
1379
+ ScreensetsRegistry,
1380
+ ScreensetsRegistryFactory,
1450
1381
  SseMockPlugin,
1451
1382
  SsePlugin,
1452
1383
  SsePluginWithConfig,
@@ -1463,23 +1394,34 @@ export {
1463
1394
  closeAllPopups,
1464
1395
  closePopup,
1465
1396
  closeTopPopup,
1397
+ compareStrings,
1398
+ createCollator,
1466
1399
  createHAI3,
1467
1400
  createHAI3App,
1468
1401
  createI18nRegistry,
1469
1402
  createLegacySelector,
1470
- createRouteRegistry,
1471
- createScreensetRegistry,
1472
- createSlice10 as createSlice,
1403
+ createShadowRoot,
1404
+ createSlice11 as createSlice,
1473
1405
  createStore,
1474
1406
  createThemeRegistry,
1475
1407
  effects,
1476
- eventBus7 as eventBus,
1408
+ eventBus9 as eventBus,
1409
+ extractGtsPackage,
1477
1410
  footerActions,
1478
1411
  footerSlice,
1412
+ formatCompact,
1413
+ formatCurrency,
1414
+ formatDate,
1415
+ formatDateTime,
1416
+ formatNumber,
1417
+ formatPercent,
1418
+ formatRelative,
1419
+ formatTime,
1479
1420
  full,
1480
1421
  getLanguageMetadata,
1481
1422
  getLayoutDomainState,
1482
- getStore4 as getStore,
1423
+ getStore7 as getStore,
1424
+ gtsPlugin2 as gtsPlugin,
1483
1425
  hasLegacyUicoreState,
1484
1426
  hasNewLayoutState,
1485
1427
  hasSlice,
@@ -1488,9 +1430,10 @@ export {
1488
1430
  headless,
1489
1431
  hideOverlay,
1490
1432
  i18n,
1491
- i18nRegistry2 as i18nRegistry,
1433
+ i18nRegistry,
1492
1434
  initMockEffects,
1493
1435
  initTenantEffects,
1436
+ injectCssVariables,
1494
1437
  isDeprecationWarningsEnabled,
1495
1438
  isMockPlugin2 as isMockPlugin,
1496
1439
  isRestShortCircuit,
@@ -1499,26 +1442,34 @@ export {
1499
1442
  layout,
1500
1443
  layoutDomainReducers,
1501
1444
  layoutReducer,
1445
+ loadExtension,
1502
1446
  menuActions,
1503
1447
  menuSlice,
1448
+ microfrontends,
1504
1449
  minimal,
1505
1450
  mock,
1506
1451
  mockActions,
1507
1452
  mockSlice,
1453
+ mountExtension,
1508
1454
  navigateTo,
1509
- navigation,
1510
1455
  openPopup,
1511
1456
  overlayActions,
1457
+ overlayDomain,
1512
1458
  overlaySlice,
1513
1459
  popupActions,
1460
+ popupDomain,
1514
1461
  popupSlice,
1515
1462
  presets,
1463
+ registerExtension,
1516
1464
  registerSlice2 as registerSlice,
1517
- routing,
1518
1465
  screenActions,
1466
+ screenDomain,
1519
1467
  screenSlice,
1520
- screensetRegistry2 as screensetRegistry,
1521
1468
  screensets,
1469
+ screensetsRegistryFactory2 as screensetsRegistryFactory,
1470
+ selectExtensionError,
1471
+ selectExtensionState,
1472
+ selectRegisteredExtensions,
1522
1473
  setActiveScreen,
1523
1474
  setDeprecationWarnings,
1524
1475
  setFooterConfig,
@@ -1544,6 +1495,7 @@ export {
1544
1495
  setUser,
1545
1496
  showOverlay,
1546
1497
  sidebarActions,
1498
+ sidebarDomain,
1547
1499
  sidebarSlice,
1548
1500
  tenantActions,
1549
1501
  tenantSlice_default as tenantReducer,
@@ -1551,6 +1503,8 @@ export {
1551
1503
  themes,
1552
1504
  toggleMenu,
1553
1505
  toggleMockMode,
1554
- toggleSidebar
1506
+ toggleSidebar,
1507
+ unmountExtension,
1508
+ unregisterExtension
1555
1509
  };
1556
1510
  //# sourceMappingURL=index.js.map