@egen-civitas/esm-globals 1.0.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/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # egen-esm-globals
2
+
3
+ egen-esm-globals provides events, variables, and types which are used
4
+ throughout the rest of egen-esm-core.
@@ -0,0 +1,65 @@
1
+ export interface ConnectivityChangedEvent {
2
+ online: boolean;
3
+ }
4
+ /** @internal */
5
+ export declare function dispatchConnectivityChanged(online: boolean): void;
6
+ /** @category Offline */
7
+ export declare function subscribeConnectivityChanged(cb: (ev: ConnectivityChangedEvent) => void): () => void;
8
+ /** @category Offline */
9
+ export declare function subscribeConnectivity(cb: (ev: ConnectivityChangedEvent) => void): () => void;
10
+ export interface PrecacheStaticDependenciesEvent {
11
+ }
12
+ export declare function dispatchPrecacheStaticDependencies(data?: PrecacheStaticDependenciesEvent): void;
13
+ /** @category Offline */
14
+ export declare function subscribePrecacheStaticDependencies(cb: (data: PrecacheStaticDependenciesEvent) => void): () => void;
15
+ /** @category UI */
16
+ export interface ShowNotificationEvent {
17
+ description: any;
18
+ kind?: 'error' | 'info' | 'info-square' | 'success' | 'warning' | 'warning-alt';
19
+ title?: string;
20
+ action?: any;
21
+ millis?: number;
22
+ }
23
+ export interface ShowActionableNotificationEvent {
24
+ subtitle: any;
25
+ kind?: 'error' | 'info' | 'info-square' | 'success' | 'warning' | 'warning-alt';
26
+ title?: string;
27
+ actionButtonLabel: string | any;
28
+ onActionButtonClick: () => void;
29
+ progressActionLabel?: string;
30
+ }
31
+ /** @category UI */
32
+ export interface ShowToastEvent {
33
+ description: any;
34
+ kind?: 'error' | 'info' | 'info-square' | 'success' | 'warning' | 'warning-alt';
35
+ title?: string;
36
+ actionButtonLabel?: string | any;
37
+ onActionButtonClick?: () => void;
38
+ }
39
+ /** @category UI */
40
+ export interface ShowSnackbarEvent {
41
+ subtitle?: any;
42
+ kind?: 'error' | 'info' | 'info-square' | 'success' | 'warning' | 'warning-alt';
43
+ title: string;
44
+ actionButtonLabel?: string | any;
45
+ onActionButtonClick?: () => void;
46
+ progressActionLabel?: string;
47
+ isLowContrast?: boolean;
48
+ timeoutInMs?: number;
49
+ }
50
+ export declare function dispatchNotificationShown(data: ShowNotificationEvent): void;
51
+ /** @internal */
52
+ export declare function dispatchActionableNotificationShown(data: ShowActionableNotificationEvent): void;
53
+ /** @internal */
54
+ export declare function dispatchSnackbarShown(data: ShowSnackbarEvent): void;
55
+ /** @internal */
56
+ export declare function dispatchToastShown(data: ShowToastEvent): void;
57
+ /** @category UI */
58
+ export declare function subscribeNotificationShown(cb: (data: ShowNotificationEvent) => void): () => void;
59
+ /** @category UI */
60
+ export declare function subscribeActionableNotificationShown(cb: (data: ShowActionableNotificationEvent) => void): () => void;
61
+ /** @category UI */
62
+ export declare function subscribeToastShown(cb: (data: ShowToastEvent) => void): () => void;
63
+ /** @category UI */
64
+ export declare function subscribeSnackbarShown(cb: (data: ShowSnackbarEvent) => void): () => void;
65
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
package/dist/events.js ADDED
@@ -0,0 +1,77 @@
1
+ const connectivityChangedEventName = 'egen:connectivity-changed';
2
+ /** @internal */ export function dispatchConnectivityChanged(online) {
3
+ window.dispatchEvent(new CustomEvent(connectivityChangedEventName, {
4
+ detail: {
5
+ online
6
+ }
7
+ }));
8
+ }
9
+ /** @category Offline */ export function subscribeConnectivityChanged(cb) {
10
+ if (!window.offlineEnabled) {
11
+ return ()=>{};
12
+ }
13
+ const handler = (ev)=>cb(ev.detail);
14
+ window.addEventListener(connectivityChangedEventName, handler);
15
+ return ()=>window.removeEventListener(connectivityChangedEventName, handler);
16
+ }
17
+ /** @category Offline */ export function subscribeConnectivity(cb) {
18
+ cb({
19
+ online: window.offlineEnabled ? navigator.onLine : true
20
+ });
21
+ return subscribeConnectivityChanged(cb);
22
+ }
23
+ const precacheStaticDependenciesEventName = 'egen:precache-static-dependencies';
24
+ export function dispatchPrecacheStaticDependencies(data = {}) {
25
+ window.dispatchEvent(new CustomEvent(precacheStaticDependenciesEventName, {
26
+ detail: data
27
+ }));
28
+ }
29
+ /** @category Offline */ export function subscribePrecacheStaticDependencies(cb) {
30
+ const handler = (ev)=>cb(ev.detail);
31
+ window.addEventListener(precacheStaticDependenciesEventName, handler);
32
+ return ()=>window.removeEventListener(precacheStaticDependenciesEventName, handler);
33
+ }
34
+ const notificationShownName = 'egen:notification-shown';
35
+ const actionableNotificationShownName = 'egen:actionable-notification-shown';
36
+ const toastShownName = 'egen:toast-shown';
37
+ const snackbarShownName = 'egen:snack-bar-shown';
38
+ export function dispatchNotificationShown(data) {
39
+ window.dispatchEvent(new CustomEvent(notificationShownName, {
40
+ detail: data
41
+ }));
42
+ }
43
+ /** @internal */ export function dispatchActionableNotificationShown(data) {
44
+ window.dispatchEvent(new CustomEvent(actionableNotificationShownName, {
45
+ detail: data
46
+ }));
47
+ }
48
+ /** @internal */ export function dispatchSnackbarShown(data) {
49
+ window.dispatchEvent(new CustomEvent(snackbarShownName, {
50
+ detail: data
51
+ }));
52
+ }
53
+ /** @internal */ export function dispatchToastShown(data) {
54
+ window.dispatchEvent(new CustomEvent(toastShownName, {
55
+ detail: data
56
+ }));
57
+ }
58
+ /** @category UI */ export function subscribeNotificationShown(cb) {
59
+ const handler = (ev)=>cb(ev.detail);
60
+ window.addEventListener(notificationShownName, handler);
61
+ return ()=>window.removeEventListener(notificationShownName, handler);
62
+ }
63
+ /** @category UI */ export function subscribeActionableNotificationShown(cb) {
64
+ const handler = (ev)=>cb(ev.detail);
65
+ window.addEventListener(actionableNotificationShownName, handler);
66
+ return ()=>window.removeEventListener(actionableNotificationShownName, handler);
67
+ }
68
+ /** @category UI */ export function subscribeToastShown(cb) {
69
+ const handler = (ev)=>cb(ev.detail);
70
+ window.addEventListener(toastShownName, handler);
71
+ return ()=>window.removeEventListener(toastShownName, handler);
72
+ }
73
+ /** @category UI */ export function subscribeSnackbarShown(cb) {
74
+ const handler = (ev)=>cb(ev.detail);
75
+ window.addEventListener(snackbarShownName, handler);
76
+ return ()=>window.removeEventListener(snackbarShownName, handler);
77
+ }
@@ -0,0 +1,4 @@
1
+ export * from './events.js';
2
+ export * from './types.js';
3
+ export * from './type-utils.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./events.js";
2
+ export * from "./types.js";
3
+ export * from "./type-utils.js";
@@ -0,0 +1,3 @@
1
+ export { type ConnectivityChangedEvent, type PrecacheStaticDependenciesEvent, type ShowNotificationEvent, type ShowActionableNotificationEvent, type ShowToastEvent, type ShowSnackbarEvent, subscribeConnectivity, subscribeConnectivityChanged, subscribePrecacheStaticDependencies, subscribeNotificationShown, subscribeActionableNotificationShown, subscribeToastShown, subscribeSnackbarShown, } from './events.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=public.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,qBAAqB,EAC1B,KAAK,+BAA+B,EACpC,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,mCAAmC,EACnC,0BAA0B,EAC1B,oCAAoC,EACpC,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,aAAa,CAAC;AACrB,cAAc,YAAY,CAAC"}
package/dist/public.js ADDED
@@ -0,0 +1,2 @@
1
+ export { subscribeConnectivity, subscribeConnectivityChanged, subscribePrecacheStaticDependencies, subscribeNotificationShown, subscribeActionableNotificationShown, subscribeToastShown, subscribeSnackbarShown } from "./events.js";
2
+ export * from "./types.js";
@@ -0,0 +1,18 @@
1
+ import type { EgenAppRoutes, EgenRoutes } from './types.js';
2
+ /**
3
+ * Simple type-predicate to ensure that the value can be treated as an EgenAppRoutes
4
+ * object.
5
+ *
6
+ * @param routes the object to check to see if it is an EgenAppRoutes object
7
+ * @returns true if the routes value is an EgenAppRoutes
8
+ */
9
+ export declare function isEgenAppRoutes(routes: EgenAppRoutes | unknown): routes is EgenAppRoutes;
10
+ /**
11
+ * Simple type-predicate to ensure that the value can be treated as an EgenRoutes
12
+ * object.
13
+ *
14
+ * @param routes the object to check to see if it is an EgenRoutes object
15
+ * @returns true if the routes value is an EgenRoutes
16
+ */
17
+ export declare function isEgenRoutes(routes: EgenRoutes | unknown): routes is EgenRoutes;
18
+ //# sourceMappingURL=type-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-utils.d.ts","sourceRoot":"","sources":["../src/type-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,IAAI,aAAa,CAiCxF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,IAAI,UAAU,CAQ/E"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Simple type-predicate to ensure that the value can be treated as an EgenAppRoutes
3
+ * object.
4
+ *
5
+ * @param routes the object to check to see if it is an EgenAppRoutes object
6
+ * @returns true if the routes value is an EgenAppRoutes
7
+ */ export function isEgenAppRoutes(routes) {
8
+ if (routes && typeof routes === 'object') {
9
+ const maybeRoutes = routes;
10
+ if (Object.hasOwn(routes, 'pages')) {
11
+ if (!Boolean(maybeRoutes.pages) || !Array.isArray(maybeRoutes.pages)) {
12
+ return false;
13
+ }
14
+ }
15
+ if (Object.hasOwn(routes, 'extensions')) {
16
+ if (!Boolean(maybeRoutes.extensions) || !Array.isArray(maybeRoutes.extensions)) {
17
+ return false;
18
+ }
19
+ }
20
+ if (Object.hasOwn(routes, 'workspaces')) {
21
+ if (!Boolean(maybeRoutes.workspaces) || !Array.isArray(maybeRoutes.workspaces)) {
22
+ return false;
23
+ }
24
+ }
25
+ if (Object.hasOwn(routes, 'modals')) {
26
+ if (!Boolean(maybeRoutes.modals) || !Array.isArray(maybeRoutes.modals)) {
27
+ return false;
28
+ }
29
+ }
30
+ // A completely empty object is a valid EgenAppRoutes object.
31
+ return true;
32
+ }
33
+ return false;
34
+ }
35
+ /**
36
+ * Simple type-predicate to ensure that the value can be treated as an EgenRoutes
37
+ * object.
38
+ *
39
+ * @param routes the object to check to see if it is an EgenRoutes object
40
+ * @returns true if the routes value is an EgenRoutes
41
+ */ export function isEgenRoutes(routes) {
42
+ if (routes && typeof routes === 'object') {
43
+ const maybeRoutes = routes;
44
+ return Object.entries(maybeRoutes).every(([key, value])=>typeof key === 'string' && isEgenAppRoutes(value));
45
+ }
46
+ return false;
47
+ }
@@ -0,0 +1,414 @@
1
+ import type { i18n } from 'i18next';
2
+ declare global {
3
+ const __webpack_share_scopes__: Record<string, Record<string, {
4
+ loaded?: 1;
5
+ get: () => Promise<unknown>;
6
+ from: string;
7
+ eager: boolean;
8
+ }>>;
9
+ var __webpack_init_sharing__: (scope: string) => Promise<void>;
10
+ interface Window {
11
+ /**
12
+ * Easily copies a text from an element.
13
+ * @param source The source element carrying the text.
14
+ */
15
+ copyText(source: HTMLElement): void;
16
+ /**
17
+ * Gets the Egen SPA base path with a trailing slash.
18
+ */
19
+ getEgenSpaBase(): string;
20
+ /**
21
+ * Starts the Egen SPA application.
22
+ * @param config The configuration to use for running.
23
+ */
24
+ initializeSpa(config: SpaConfig): void;
25
+ /**
26
+ * Indicates whether offline mode is enabled in this install or not.
27
+ * This is used to determine whether offline functionality is present or not.
28
+ */
29
+ offlineEnabled: boolean;
30
+ /**
31
+ * Gets the API base path, e.g. /egen
32
+ */
33
+ egenBase: string;
34
+ /**
35
+ * Gets the SPA base path, e.g. /egen-civitas/spa
36
+ */
37
+ spaBase: string;
38
+ /**
39
+ * Set by the app shell. Indicates whether the app shell is running in production, development, or test mode.
40
+ */
41
+ spaEnv: SpaEnvironment;
42
+ /**
43
+ * The build number of the app shell. Set when the app shell is built by webpack.
44
+ */
45
+ spaVersion: string;
46
+ /**
47
+ * Gets the installed modules, which are tuples consisting of the module's name and exports.
48
+ */
49
+ installedModules: Array<[string, EgenAppRoutes]>;
50
+ /**
51
+ * The i18next instance for the app.
52
+ */
53
+ i18next: i18n;
54
+ /**
55
+ * Mode du système tenant : "off" | "single" | "multi".
56
+ * Depuis EGEN_TENANT_MODE.
57
+ * @default "off"
58
+ */
59
+ egenTenantMode?: 'off' | 'single' | 'multi';
60
+ /**
61
+ * Identifiant du tenant actif (mode "single") ou tenant par défaut.
62
+ * Depuis EGEN_TENANT_ID.
63
+ */
64
+ egenTenantId?: string;
65
+ /**
66
+ * "true" | "false" — active la persistance localStorage du tenant actif.
67
+ * Depuis EGEN_TENANT_PERSIST.
68
+ */
69
+ egenTenantPersist?: string;
70
+ /**
71
+ * Ordre des stratégies de résolution, CSV.
72
+ * Ex: "subdomain,jwt,localStorage"
73
+ * Depuis EGEN_TENANT_RESOLUTION_ORDER.
74
+ */
75
+ egenTenantResolutionOrder?: string;
76
+ /**
77
+ * Préfixe de path URL pour la stratégie "path".
78
+ * Ex: "/t/" pour /t/{tenantSlug}/...
79
+ * Depuis EGEN_TENANT_PATH_PREFIX.
80
+ */
81
+ egenTenantPathPrefix?: string;
82
+ /**
83
+ * Claim JWT portant l'ID tenant. Ex: "tenantId", "tid", "org".
84
+ * Depuis EGEN_TENANT_JWT_CLAIM.
85
+ */
86
+ egenTenantJwtClaim?: string;
87
+ /**
88
+ * Domaine racine explicite (ex: "egen.gabon.gov.ga"), utilisé pour toute
89
+ * dérivation hostname ↔ sous-domaine tenant (voir
90
+ * @egen-civitas/esm-tenant utils/domain-utils.ts). Depuis EGEN_TENANT_ROOT_DOMAIN.
91
+ */
92
+ egenTenantRootDomain?: string;
93
+ }
94
+ }
95
+ export type SpaEnvironment = 'production' | 'development' | 'test';
96
+ export interface ImportMap {
97
+ imports: Record<string, string>;
98
+ }
99
+ /**
100
+ * The configuration passed to the app shell initialization function
101
+ */
102
+ export interface SpaConfig {
103
+ /**
104
+ * The base path or URL for the Egen API / endpoints.
105
+ */
106
+ apiUrl: string;
107
+ /**
108
+ * The base path for the SPA root path.
109
+ */
110
+ spaPath: string;
111
+ /**
112
+ * The environment to use.
113
+ * @default production
114
+ */
115
+ env?: SpaEnvironment;
116
+ /**
117
+ * URLs of configurations to load in the system.
118
+ */
119
+ configUrls?: Array<string>;
120
+ /**
121
+ * Defines if offline should be supported by installing a service worker.
122
+ * @default true
123
+ */
124
+ offline?: boolean;
125
+ }
126
+ /** @internal */
127
+ export type RouteDefinition = RegExp | string | boolean;
128
+ /** @internal */
129
+ type AppComponent = {
130
+ appName: string;
131
+ };
132
+ /**
133
+ * A definition of a page extracted from an app's routes.json
134
+ */
135
+ export type PageDefinition = {
136
+ /**
137
+ * The name of the component exported by this frontend module.
138
+ */
139
+ component: string;
140
+ /**
141
+ * If supplied, the page will only be rendered when this feature flag is enabled.
142
+ */
143
+ featureFlag?: string;
144
+ /**
145
+ * Determines whether the component renders while the browser is connected to the internet. If false, this page will never render while online.
146
+ */
147
+ online?: boolean;
148
+ /**
149
+ * Determines whether the component renders while the browser is not connected to the internet. If false, this page will never render while offline.
150
+ */
151
+ offline?: boolean;
152
+ /**
153
+ * If supplied, the page will be rendered within the DOM element with the specified ID. Defaults to "egen-apps-container" if not supplied.
154
+ */
155
+ containerDomId?: string;
156
+ } & ({
157
+ /**
158
+ * Either a string or a boolean.
159
+ *
160
+ * If a string value, this is used to indicate that this page should be rendered. For example, \"name\" will match when the current page is ${window.spaBase}/name.
161
+ *
162
+ * If a boolean, this either indicates that the component should always be rendered or should never be rendered.
163
+ */
164
+ route: string | boolean;
165
+ /**
166
+ * A regular expression used to match against the current route to determine whether this page should be rendered. Note that ${window.spaBase} will be removed before attempting to match, so setting this to \"^name.+\" will match any route that starts with ${window.spaBase}/name.
167
+ */
168
+ routeRegex?: never;
169
+ } | {
170
+ /**
171
+ * Either a string or a boolean.
172
+ *
173
+ * If a string value, this is used to indicate that this page should be rendered. For example, \"name\" will match when the current page is ${window.spaBase}/name.
174
+ *
175
+ * If a boolean, this either indicates that the component should always be rendered or should never be rendered.
176
+ */
177
+ route?: never;
178
+ /**
179
+ * A regular expression used to match against the current route to determine whether this page should be rendered. Note that ${window.spaBase} will be removed before attempting to match, so setting this to \"^name.+\" will match any route that starts with ${window.spaBase}/name.
180
+ */
181
+ routeRegex: string;
182
+ });
183
+ /**
184
+ * @internal
185
+ * A definition of a page after the app has been registered.
186
+ */
187
+ export type RegisteredPageDefinition = PageDefinition & AppComponent;
188
+ /**
189
+ * A definition of an extension as extracted from an app's routes.json
190
+ */
191
+ export type ExtensionDefinition = {
192
+ /**
193
+ * The name of this extension. This is used to refer to the extension in configuration.
194
+ */
195
+ name: string;
196
+ /**
197
+ * If supplied, the slot that this extension is rendered into by default.
198
+ */
199
+ slot?: string;
200
+ /**
201
+ * If supplied, the slots that this extension is rendered into by default.
202
+ */
203
+ slots?: Array<string>;
204
+ /**
205
+ * Determines whether the component renders while the browser is connected to the internet. If false, this page will never render while online.
206
+ */
207
+ online?: boolean;
208
+ /**
209
+ * Determines whether the component renders while the browser is not connected to the internet. If false, this page will never render while offline.
210
+ */
211
+ offline?: boolean;
212
+ /**
213
+ * Determines the order in which this component renders in its default extension slot. Note that this can be overridden by configuration.
214
+ */
215
+ order?: number;
216
+ /**
217
+ * The user must have ANY of these privileges to see this extension.
218
+ */
219
+ privileges?: string | Array<string>;
220
+ /**
221
+ * The expression that determines whether the extension is displayed.
222
+ */
223
+ displayExpression?: string;
224
+ /**
225
+ * If supplied, the extension will only be rendered when this feature flag is enabled.
226
+ */
227
+ featureFlag?: string;
228
+ /**
229
+ * Meta describes any properties that are passed down to the extension when it is loaded
230
+ */
231
+ meta?: {
232
+ [k: string]: unknown;
233
+ };
234
+ /**
235
+ * The name of the component exported by this frontend module.
236
+ */
237
+ component: string;
238
+ };
239
+ /**
240
+ * A definition of a modal as extracted from an app's routes.json
241
+ */
242
+ export type ModalDefinition = {
243
+ /**
244
+ * The name of this modal. This is used to launch the modal.
245
+ */
246
+ name: string;
247
+ /**
248
+ * The name of the component exported by this frontend module.
249
+ */
250
+ component: string;
251
+ };
252
+ export type WorkspaceWindowState = 'maximized' | 'hidden' | 'normal';
253
+ /**
254
+ * A definition of a workspace as extracted from an app's routes.json
255
+ */
256
+ export type WorkspaceDefinition = {
257
+ /**
258
+ * The name of this workspace. This is used to launch the workspace.
259
+ */
260
+ name: string;
261
+ /**
262
+ * The title of the workspace. This will be looked up as a key in the translations of the module
263
+ * defining the workspace.
264
+ */
265
+ title: string;
266
+ /**
267
+ * The type of the workspace. Only one of each "type" of workspace is allowed to be open at a
268
+ * time. The default is "form". If the right sidebar is in use, then the type determines which
269
+ * right sidebar icon corresponds to the workspace.
270
+ */
271
+ type: string;
272
+ canHide?: boolean;
273
+ canMaximize?: boolean;
274
+ /**
275
+ * Controls the width of the workspace. The default is "narrow" and this should only be
276
+ * changed to "wider" if the workspace itself has internal navigation, like the form editor.
277
+ * The width "extra-wide" is for workspaces that contain their own sidebar.
278
+ */
279
+ width?: 'narrow' | 'wider' | 'extra-wide';
280
+ /**
281
+ * Launches the workspace in the preferred size, it defaults to the 'narrow' width
282
+ */
283
+ preferredWindowSize?: WorkspaceWindowState;
284
+ /**
285
+ * Workspaces can open either independently or as part of a "workspace group". A
286
+ * "workspace group" groups related workspaces together, so that only one is visible
287
+ * at a time. For example,
288
+ *
289
+ * @example
290
+ *
291
+ * {
292
+ * name: 'order-basket',
293
+ * type: 'order',
294
+ * groups: ['entity-workspace-group']
295
+ * }
296
+ *
297
+ * This means that the 'order-basket' workspace can be opened independently, or only
298
+ * in the 'entity-workspace-group'.
299
+ * If a workspace group is already open and a new workspace is launched, and the
300
+ * groups in the newly launched workspace do not include the currently open group’s
301
+ * name, the entire workspace group will close, and the new workspace will launch independently.
302
+ *
303
+ */
304
+ groups: Array<string>;
305
+ /**
306
+ * The name of the component exported by this frontend module.
307
+ */
308
+ component: string;
309
+ };
310
+ export interface WorkspaceGroupDefinition {
311
+ /**
312
+ * Name of the workspace group. This is used to launch the workspace group
313
+ */
314
+ name: string;
315
+ /**
316
+ * List of workspace names which are part of the workspace group.
317
+ */
318
+ members?: Array<string>;
319
+ }
320
+ export interface WorkspaceGroupDefinition2 {
321
+ name: string;
322
+ closeable?: boolean;
323
+ overlay?: boolean;
324
+ /**
325
+ * In app-wide persistence mode, a workspace group renders its
326
+ * action menu without a close button. This is for
327
+ * workspace groups that are meant to be opened for the entire duration of the app
328
+ *
329
+ * In closable persistence mode, a workspace group renders its
330
+ * action menu with a close button. User may explicitly close the group, along
331
+ * with any opened windows / workspaces.
332
+ */
333
+ persistence?: 'app-wide' | 'closable';
334
+ /**
335
+ * URL pattern that defines the scope where workspaces in this group should persist.
336
+ * - If not defined: workspaces close only when navigating to a different app
337
+ * - If defined without capture groups: workspaces close when URL doesn't match pattern
338
+ * - If defined with capture groups: workspaces close when captured values change
339
+ *
340
+ * @example "^/home/appointments" - static scope for appointments dashboard
341
+ * @example "^/entity/([^/]+)/detail" - dynamic scope by entity UUID
342
+ */
343
+ scopePattern?: string;
344
+ }
345
+ export interface WorkspaceWindowDefinition2 {
346
+ name: string;
347
+ icon?: string;
348
+ canMaximize?: boolean;
349
+ group: string;
350
+ order?: number;
351
+ width?: 'narrow' | 'wider' | 'extra-wide';
352
+ }
353
+ export interface WorkspaceDefinition2 {
354
+ name: string;
355
+ component: string;
356
+ window: string;
357
+ }
358
+ /**
359
+ * A definition of a feature flag extracted from the routes.json
360
+ */
361
+ export interface FeatureFlagDefinition {
362
+ /** A code-friendly name for the flag, which will be used to reference it in code */
363
+ flagName: string;
364
+ /** A human-friendly name which will be displayed in the Implementer Tools */
365
+ label: string;
366
+ /** An explanation of what the flag does, which will be displayed in the Implementer Tools */
367
+ description: string;
368
+ }
369
+ /** This interface describes the format of the routes provided by an app */
370
+ export interface EgenAppRoutes {
371
+ /** The version of this frontend module. */
372
+ version?: string;
373
+ /** A list of backend modules necessary for this frontend module and the corresponding required versions. */
374
+ backendDependencies?: Record<string, string>;
375
+ /** A list of backend modules that may enable optional functionality in this frontend module if available and the corresponding required versions. */
376
+ optionalBackendDependencies?: {
377
+ /** The name of the backend dependency and either the required version or an object describing the required version */
378
+ [key: string]: string | {
379
+ /** The minimum version of this optional dependency that must be present. */
380
+ version: string;
381
+ /** The feature flag to enable if this backend dependency is present */
382
+ feature?: FeatureFlagDefinition;
383
+ };
384
+ };
385
+ /** An array of all pages supported by this frontend module. Pages are automatically mounted based on a route. */
386
+ pages?: Array<PageDefinition>;
387
+ /** An array of all extensions supported by this frontend module. Extensions can be mounted in extension slots, either via declarations in this file or configuration. */
388
+ extensions?: Array<ExtensionDefinition>;
389
+ /** An array of all feature flags for any beta-stage features this module provides. */
390
+ featureFlags?: Array<FeatureFlagDefinition>;
391
+ /** An array of all modals supported by this frontend module. Modals can be launched by name. */
392
+ modals?: Array<ModalDefinition>;
393
+ /** An array of all workspaces supported by this frontend module. Workspaces can be launched by name. */
394
+ workspaces?: Array<WorkspaceDefinition>;
395
+ /** An array of all workspace groups supported by this frontend module. */
396
+ workspaceGroups?: Array<WorkspaceGroupDefinition>;
397
+ /** An array of all workspace groups (v2) supported by this frontend module. */
398
+ workspaceGroups2?: Array<WorkspaceGroupDefinition2>;
399
+ /** An array of all workspace windows (v2) supported by this frontend module. */
400
+ workspaceWindows2?: Array<WorkspaceWindowDefinition2>;
401
+ /** An array of all workspaces (v2) supported by this frontend module. */
402
+ workspaces2?: Array<WorkspaceDefinition2>;
403
+ }
404
+ /**
405
+ * This interfaces describes the format of the overall routes.json loaded by the app shell.
406
+ * Basically, this is the same as the app routes, with each routes definition keyed by the app's name
407
+ */
408
+ export type EgenRoutes = Record<string, EgenAppRoutes>;
409
+ export interface ResourceLoader<T = any> {
410
+ (): Promise<T>;
411
+ }
412
+ export type NameUse = 'usual' | 'official' | 'temp' | 'nickname' | 'anonymous' | 'old' | 'maiden';
413
+ export {};
414
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ /*
2
+ * Supported values for FHIR HumanName.use as defined by https://hl7.org/fhir/R4/valueset-name-use.html
3
+ */ export { };
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@egen-civitas/esm-globals",
3
+ "version": "1.0.0",
4
+ "license": "MPL-2.0",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "module": "dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ },
17
+ "./src/public": {
18
+ "types": "./dist/public.d.ts",
19
+ "default": "./dist/public.js"
20
+ }
21
+ },
22
+ "source": true,
23
+ "scripts": {
24
+ "build": "rimraf dist && concurrently \"swc --strip-leading-paths src -d dist\" \"tsc --project tsconfig.build.json\"",
25
+ "build:development": "rimraf dist && concurrently \"swc --strip-leading-paths src -d dist\" \"tsc --project tsconfig.build.json\"",
26
+ "test": "vitest run --passWithNoTests",
27
+ "test:watch": "cross-env TZ=UTC vitest watch --passWithNoTests",
28
+ "coverage": "cross-env TZ=UTC vitest run --coverage --passWithNoTests",
29
+ "typescript": "tsc --project tsconfig.build.json",
30
+ "lint": "eslint src --ext ts,tsx"
31
+ },
32
+ "keywords": [
33
+ "egen",
34
+ "framework",
35
+ "frontend",
36
+ "ui",
37
+ "microfrontends"
38
+ ],
39
+ "browserslist": [
40
+ "extends browserslist-config-egen"
41
+ ],
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/egen-civitas/egen-esm-core.git"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/egen-civitas/egen-esm-core/issues"
48
+ },
49
+ "homepage": "https://github.com/egen-civitas/egen-esm-core#readme",
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
53
+ "dependencies": {
54
+ "@types/fhir": "0.0.31"
55
+ },
56
+ "peerDependencies": {
57
+ "single-spa": "6.x"
58
+ },
59
+ "devDependencies": {
60
+ "@swc/cli": "0.8.1",
61
+ "@swc/core": "1.15.21",
62
+ "concurrently": "^9.2.1",
63
+ "rimraf": "^6.1.3",
64
+ "single-spa": "^6.0.3",
65
+ "vitest": "^4.1.2"
66
+ }
67
+ }