@egen-civitas/esm-extensions 1.0.1 → 1.1.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/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # @egen-civitas/esm-extensions
2
+
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 48e7980: Navigation de niveau 2 pilotée par les apps : nouveau type partagé `NavEntryMeta`, constante `TOPBAR_LEVEL2_NAV_SLOT` (`topbar-level2-nav`) et validateur `isNavEntryMeta` dans `esm-extensions`. La colonne de navigation latérale globale (`leftNav`) est retirée de la grille du shell : seuls la TopBar et le footer sont globaux ; une app qui veut une sidebar la fournit dans son propre contenu.
8
+
9
+ ## 1.0.2
10
+
11
+ ### Patch Changes
12
+
13
+ - c82f723: Corrige une série de dépendances manquantes/mal déclarées trouvées en débloquant la CI (l'installation était bloquée depuis fin août, masquant ces problèmes) :
14
+
15
+ - `esm-tenant` : `happy-dom` manquait alors que ses tests l'utilisent (ni dep, ni peerDep) → ajouté en devDependency.
16
+ - `esm-ai-tools` : `swr` est chargé via un `import()` dynamique dans `native/index.ts` mais n'était déclaré nulle part → ajouté en peerDependency (`2.x`, cohérent avec `esm-styleguide`/`esm-react-utils`/`esm-framework`).
17
+ - `esm-api`, `esm-data-api` : `rxjs` utilisé au runtime mais absent de peerDependencies → ajouté (`7.x`).
18
+ - `esm-navigation`, `esm-styleguide`, `esm-react-utils` : `single-spa` utilisé au runtime mais absent de peerDependencies → ajouté (`6.x`).
19
+ - `esm-extensions` : `react` utilisé au runtime mais absent de peerDependencies → ajouté (`18.x`).
20
+ - `esm-ai-framework` : `framework.test.ts` faisait `require('@egen-civitas/esm-ai-tools')` en plein milieu du corps de 3 tests (au lieu d'un import statique en haut de fichier) — ce require contournait le mock de `@egen-civitas/esm-styleguide` et déclenchait une résolution Node native qui tentait de charger pour de vrai des fichiers `.module.scss` compilés (`Unknown file extension ".scss"`). Remplacé par un import statique de `hasTool`/`getTool`/`overrideTool`, et ajout d'un `vi.mock('@egen-civitas/esm-styleguide', ...)` en tête de fichier (même pattern déjà utilisé dans `esm-ai-tools/src/native/native.test.ts`).
21
+
22
+ Tous les fixes vérifiés par reproduction isolée réelle (installation + exécution effective des tests concernés), pas seulement par lecture de code.
23
+
24
+ - Updated dependencies [c82f723]
25
+ - @egen-civitas/esm-api@1.1.1
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from './extensions.js';
2
2
  export * from './helpers.js';
3
3
  export * from './left-nav.js';
4
+ export * from './nav-entry.js';
4
5
  export * from './modals.js';
5
6
  export * from './workspaces.js';
6
7
  export * from './workspaces2.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  export * from "./extensions.js";
2
2
  export * from "./helpers.js";
3
3
  export * from "./left-nav.js";
4
+ export * from "./nav-entry.js";
4
5
  export * from "./modals.js";
5
6
  export * from "./workspaces.js";
6
7
  export * from "./workspaces2.js";
@@ -0,0 +1,38 @@
1
+ /** @module @category Extension */
2
+ /**
3
+ * Nom du slot sur lequel chaque app déclare ses entrées de navigation
4
+ * (niveau 2 de la TopBar). Déclaré dans le `routes.json` de l'app :
5
+ * `{ "slot": "topbar-level2-nav", "component": "navEntry", "meta": NavEntryMeta }`.
6
+ */
7
+ export declare const TOPBAR_LEVEL2_NAV_SLOT = "topbar-level2-nav";
8
+ /**
9
+ * Métadonnées d'une entrée de navigation du niveau 2 de la TopBar.
10
+ * Partagé par les apps (qui le déclarent dans `meta`) et par la TopBar
11
+ * (qui le lit via `useExtensionSlotMeta<NavEntryMeta>(TOPBAR_LEVEL2_NAV_SLOT)`).
12
+ */
13
+ export interface NavEntryMeta {
14
+ /** Entrée de niveau 2 (ex. `informations`) ; regroupe les colonnes du méga-menu. */
15
+ section: string;
16
+ /** Colonne du méga-menu (ex. `news`). */
17
+ group: string;
18
+ /** Texte par défaut, utilisé si `labelKey` n'a pas de traduction. */
19
+ label: string;
20
+ /** Clé de traduction du libellé (optionnelle). */
21
+ labelKey?: string;
22
+ /** Description par défaut. */
23
+ description?: string;
24
+ /** Clé de traduction de la description (optionnelle). */
25
+ descriptionKey?: string;
26
+ /** Nom d'icône lucide (ex. `Star`), résolu par la TopBar dans une liste blanche. */
27
+ icon?: string;
28
+ /** Route cible, relative à la base SPA (ex. `informations/news`). Doit exister dans un `pages[].route`. */
29
+ route: string;
30
+ /** Libellé/clé de la section et du groupe, si différents de leur identifiant. */
31
+ sectionLabel?: string;
32
+ sectionLabelKey?: string;
33
+ groupLabel?: string;
34
+ groupLabelKey?: string;
35
+ }
36
+ /** Valide une `meta` d'extension : vrai si c'est une `NavEntryMeta` exploitable. */
37
+ export declare function isNavEntryMeta(meta: unknown): meta is NavEntryMeta;
38
+ //# sourceMappingURL=nav-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-entry.d.ts","sourceRoot":"","sources":["../src/nav-entry.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2GAA2G;IAC3G,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CAIlE"}
@@ -0,0 +1,15 @@
1
+ /** @module @category Extension */ /**
2
+ * Nom du slot sur lequel chaque app déclare ses entrées de navigation
3
+ * (niveau 2 de la TopBar). Déclaré dans le `routes.json` de l'app :
4
+ * `{ "slot": "topbar-level2-nav", "component": "navEntry", "meta": NavEntryMeta }`.
5
+ */ export const TOPBAR_LEVEL2_NAV_SLOT = 'topbar-level2-nav';
6
+ /** Valide une `meta` d'extension : vrai si c'est une `NavEntryMeta` exploitable. */ export function isNavEntryMeta(meta) {
7
+ if (!meta || typeof meta !== 'object') return false;
8
+ const m = meta;
9
+ return [
10
+ 'section',
11
+ 'group',
12
+ 'label',
13
+ 'route'
14
+ ].every((k)=>typeof m[k] === 'string' && m[k].length > 0);
15
+ }
package/dist/public.d.ts CHANGED
@@ -4,4 +4,5 @@ export { type CancelLoading, renderExtension } from './render.js';
4
4
  export { type ExtensionMeta, type ExtensionRegistration, type ExtensionStore, type AssignedExtension, type ConnectedExtension, type ExtensionSlotState, getExtensionStore, } from './store.js';
5
5
  export { type WorkspaceRegistration } from './workspaces.js';
6
6
  export { type ExtensionData, type ComponentConfig } from './types.js';
7
+ export { TOPBAR_LEVEL2_NAV_SLOT, type NavEntryMeta, isNavEntryMeta } from './nav-entry.js';
7
8
  //# sourceMappingURL=public.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,KAAK,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../src/public.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,SAAS,EACT,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,KAAK,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
package/dist/public.js CHANGED
@@ -2,3 +2,4 @@ export { getExtensionNameFromId, registerExtension, attach, detach, detachAll, g
2
2
  export { setLeftNav, unsetLeftNav } from "./left-nav.js";
3
3
  export { renderExtension } from "./render.js";
4
4
  export { getExtensionStore } from "./store.js";
5
+ export { TOPBAR_LEVEL2_NAV_SLOT, isNavEntryMeta } from "./nav-entry.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egen-civitas/esm-extensions",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Coordinates extensions and extension points in the Egen Frontend",
6
6
  "type": "module",
@@ -63,7 +63,7 @@
63
63
  "lodash-es": "^4.17.21"
64
64
  },
65
65
  "peerDependencies": {
66
- "@egen-civitas/esm-api": "^1.0.0",
66
+ "@egen-civitas/esm-api": "^1.1.1",
67
67
  "@egen-civitas/esm-config": "^1.0.0",
68
68
  "@egen-civitas/esm-expression-evaluator": "^1.0.0",
69
69
  "@egen-civitas/esm-feature-flags": "^1.0.0",
@@ -71,10 +71,11 @@
71
71
  "@egen-civitas/esm-state": "^1.0.0",
72
72
  "@egen-civitas/esm-translations": "^1.0.0",
73
73
  "@egen-civitas/esm-utils": "^1.0.0",
74
+ "react": "18.x",
74
75
  "single-spa": "6.x"
75
76
  },
76
77
  "devDependencies": {
77
- "@egen-civitas/esm-api": "^1.0.0",
78
+ "@egen-civitas/esm-api": "^1.1.1",
78
79
  "@egen-civitas/esm-config": "^1.0.0",
79
80
  "@egen-civitas/esm-expression-evaluator": "^1.0.0",
80
81
  "@egen-civitas/esm-feature-flags": "^1.0.0",
@@ -94,4 +95,4 @@
94
95
  "single-spa": "^6.0.3",
95
96
  "vitest": "^4.1.2"
96
97
  }
97
- }
98
+ }