@egen-civitas/esm-extensions 1.1.0 → 1.2.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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # @egen-civitas/esm-extensions
2
2
 
3
+ ## 1.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 6700454: Navigation de niveau 2 de la TopBar : contextualisation par espace et surcharge de comportement par app (changements additifs, sans rupture).
8
+
9
+ - `NavEntryMeta.workspaces` : espaces (`intranet`, `extranet`…) où l'entrée apparaît ; absent, vide ou `'*'` = tous. Nouveau helper `isNavEntryInWorkspace` et constante `NAV_ALL_WORKSPACES`.
10
+ - `NavEntryMeta.group` devient facultatif : une entrée sans `group` est un lien simple (une section à entrée unique devient un bouton direct, sans menu déroulant).
11
+ - `NavEntryMeta.sectionRoute` : route du bouton de la section lui-même.
12
+ - `registerNavBehavior({ entry } | { section }, { onSelect })` / `getNavBehavior` : une app remplace (ou enrichit via `ctx.runDefault()`) la logique globale appliquée au clic sur son bouton de navigation.
13
+ - Mocks `esm-framework` (`mock` et `mock-jest`) : `registerNavBehavior`, `getNavBehavior` et réexport des constantes/validateurs purs.
14
+
15
+ ## 1.1.1
16
+
17
+ ### Patch Changes
18
+
19
+ - b49f9e8: Suppression définitive de la barre latérale globale : le conteneur `#egen-left-nav-container` est retiré du shell (il n'était plus que masqué) ainsi que ses règles CSS. `LeftNavMenu`, `useLeftNav`, `setLeftNav` et `unsetLeftNav` sont marqués `@deprecated` : la navigation de niveau 2 est portée par la TopBar (slot `topbar-level2-nav`) ; une app qui veut une navigation interne affiche sa propre barre latérale.
20
+
3
21
  ## 1.1.0
4
22
 
5
23
  ### Minor Changes
@@ -25,13 +25,13 @@ export interface SetLeftNavParams {
25
25
  /**
26
26
  * Sets the current left nav context. Must be paired with {@link unsetLeftNav}.
27
27
  *
28
- * @deprecated Please use {@link useLeftNav} instead. This function will be made internal in a future release.
28
+ * @deprecated Il n'existe plus de barre latérale globale : la navigation de niveau 2 est portée par la TopBar (slot `topbar-level2-nav`, type `NavEntryMeta`). Une app qui a besoin d'une navigation interne affiche sa propre barre latérale.
29
29
  */
30
30
  export declare function setLeftNav({ name, basePath, mode, componentContext, state }: SetLeftNavParams): void;
31
31
  /**
32
32
  * Unsets the left nav context if the current context is for the supplied name.
33
33
  *
34
- * @deprecated Please use {@link useLeftNav} instead. This function will be made internal in a future release.
34
+ * @deprecated Il n'existe plus de barre latérale globale : la navigation de niveau 2 est portée par la TopBar (slot `topbar-level2-nav`, type `NavEntryMeta`). Une app qui a besoin d'une navigation interne affiche sa propre barre latérale.
35
35
  */
36
36
  export declare function unsetLeftNav(name: string): void;
37
37
  export {};
package/dist/left-nav.js CHANGED
@@ -7,7 +7,7 @@ import { createGlobalStore } from "@egen-civitas/esm-state";
7
7
  /**
8
8
  * Sets the current left nav context. Must be paired with {@link unsetLeftNav}.
9
9
  *
10
- * @deprecated Please use {@link useLeftNav} instead. This function will be made internal in a future release.
10
+ * @deprecated Il n'existe plus de barre latérale globale : la navigation de niveau 2 est portée par la TopBar (slot `topbar-level2-nav`, type `NavEntryMeta`). Une app qui a besoin d'une navigation interne affiche sa propre barre latérale.
11
11
  */ export function setLeftNav({ name, basePath, mode, componentContext, state }) {
12
12
  leftNavStore.setState({
13
13
  slotName: name,
@@ -20,7 +20,7 @@ import { createGlobalStore } from "@egen-civitas/esm-state";
20
20
  /**
21
21
  * Unsets the left nav context if the current context is for the supplied name.
22
22
  *
23
- * @deprecated Please use {@link useLeftNav} instead. This function will be made internal in a future release.
23
+ * @deprecated Il n'existe plus de barre latérale globale : la navigation de niveau 2 est portée par la TopBar (slot `topbar-level2-nav`, type `NavEntryMeta`). Une app qui a besoin d'une navigation interne affiche sa propre barre latérale.
24
24
  */ export function unsetLeftNav(name) {
25
25
  if (leftNavStore.getState().slotName === name) {
26
26
  leftNavStore.setState(leftNavStore.getInitialState(), true);
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Cible d'un comportement de navigation : une entrée (le lien d'un menu, identifiée par le nom de
3
+ * son extension dans `routes.json`) ou une section (le bouton de niveau 2, identifié par `section`).
4
+ */
5
+ export type NavBehaviorTarget = {
6
+ entry: string;
7
+ } | {
8
+ section: string;
9
+ };
10
+ /** Contexte transmis à `NavBehavior.onSelect` quand l'utilisateur active un bouton de navigation. */
11
+ export interface NavSelectContext {
12
+ /** Ce qui a été activé. */
13
+ target: NavBehaviorTarget;
14
+ /** Route visée, relative à la base SPA (ex. `annuaire/contacts`) ; absente pour une section sans `sectionRoute`. */
15
+ route?: string;
16
+ /** Identifiant de l'espace actif (ex. `intranet`). */
17
+ workspaceId: string;
18
+ /**
19
+ * Exécute la logique globale de la TopBar (son, fermeture du menu, navigation). Un comportement
20
+ * qui REMPLACE le défaut peut ne pas l'appeler ; un qui l'ENRICHIT l'appelle (avant ou après).
21
+ */
22
+ runDefault: () => void;
23
+ }
24
+ export interface NavBehavior {
25
+ /** Remplace la logique globale appliquée au clic. Appeler `ctx.runDefault()` pour la conserver. */
26
+ onSelect: (ctx: NavSelectContext) => void;
27
+ }
28
+ interface NavBehaviorStore {
29
+ behaviors: Record<string, NavBehavior>;
30
+ }
31
+ /** @internal */
32
+ export declare const navBehaviorStore: import("zustand").StoreApi<NavBehaviorStore>;
33
+ /**
34
+ * Déclare le comportement d'un bouton de navigation du niveau 2 de la TopBar, à appeler au
35
+ * démarrage de l'app (`startupApp`). Sans comportement déclaré, la TopBar applique sa logique
36
+ * globale. Un seul comportement par cible : le dernier enregistré l'emporte.
37
+ *
38
+ * @returns Une fonction qui retire ce comportement (sans effet s'il a été remplacé depuis).
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * registerNavBehavior({ entry: 'annuaire-nav-contacts' }, {
43
+ * onSelect: ({ runDefault }) => {
44
+ * trackEvent('annuaire.contacts');
45
+ * runDefault();
46
+ * },
47
+ * });
48
+ * ```
49
+ */
50
+ export declare function registerNavBehavior(target: NavBehaviorTarget, behavior: NavBehavior): () => void;
51
+ /** Comportement déclaré pour une cible, s'il y en a un. */
52
+ export declare function getNavBehavior(target: NavBehaviorTarget): NavBehavior | undefined;
53
+ export {};
54
+ //# sourceMappingURL=nav-behavior.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nav-behavior.d.ts","sourceRoot":"","sources":["../src/nav-behavior.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,qGAAqG;AACrG,MAAM,WAAW,gBAAgB;IAC/B,2BAA2B;IAC3B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,oHAAoH;IACpH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,mGAAmG;IACnG,QAAQ,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC3C;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACxC;AAED,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,8CAA0E,CAAC;AAKxG;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,GAAG,MAAM,IAAI,CAShG;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAEjF"}
@@ -0,0 +1,41 @@
1
+ /** @module @category Extension */ import { createGlobalStore } from "@egen-civitas/esm-state";
2
+ /** @internal */ export const navBehaviorStore = createGlobalStore('nav-behaviors', {
3
+ behaviors: {}
4
+ });
5
+ const keyOf = (target)=>'entry' in target ? `entry:${target.entry}` : `section:${target.section}`;
6
+ /**
7
+ * Déclare le comportement d'un bouton de navigation du niveau 2 de la TopBar, à appeler au
8
+ * démarrage de l'app (`startupApp`). Sans comportement déclaré, la TopBar applique sa logique
9
+ * globale. Un seul comportement par cible : le dernier enregistré l'emporte.
10
+ *
11
+ * @returns Une fonction qui retire ce comportement (sans effet s'il a été remplacé depuis).
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * registerNavBehavior({ entry: 'annuaire-nav-contacts' }, {
16
+ * onSelect: ({ runDefault }) => {
17
+ * trackEvent('annuaire.contacts');
18
+ * runDefault();
19
+ * },
20
+ * });
21
+ * ```
22
+ */ export function registerNavBehavior(target, behavior) {
23
+ const key = keyOf(target);
24
+ navBehaviorStore.setState((s)=>({
25
+ behaviors: {
26
+ ...s.behaviors,
27
+ [key]: behavior
28
+ }
29
+ }));
30
+ return ()=>{
31
+ const { behaviors } = navBehaviorStore.getState();
32
+ if (behaviors[key] !== behavior) return;
33
+ const { [key]: _removed, ...rest } = behaviors;
34
+ navBehaviorStore.setState({
35
+ behaviors: rest
36
+ });
37
+ };
38
+ }
39
+ /** Comportement déclaré pour une cible, s'il y en a un. */ export function getNavBehavior(target) {
40
+ return navBehaviorStore.getState().behaviors[keyOf(target)];
41
+ }
@@ -13,8 +13,12 @@ export declare const TOPBAR_LEVEL2_NAV_SLOT = "topbar-level2-nav";
13
13
  export interface NavEntryMeta {
14
14
  /** Entrée de niveau 2 (ex. `informations`) ; regroupe les colonnes du méga-menu. */
15
15
  section: string;
16
- /** Colonne du méga-menu (ex. `news`). */
17
- group: string;
16
+ /**
17
+ * Colonne du méga-menu (ex. `news`). Facultative : une entrée sans `group` est un lien simple.
18
+ * Une section dont toutes les entrées sont sans `group` et qui n'en a qu'une devient un bouton
19
+ * direct (sans menu déroulant) ; avec plusieurs, un menu à une seule colonne sans titre.
20
+ */
21
+ group?: string;
18
22
  /** Texte par défaut, utilisé si `labelKey` n'a pas de traduction. */
19
23
  label: string;
20
24
  /** Clé de traduction du libellé (optionnelle). */
@@ -32,7 +36,24 @@ export interface NavEntryMeta {
32
36
  sectionLabelKey?: string;
33
37
  groupLabel?: string;
34
38
  groupLabelKey?: string;
39
+ /**
40
+ * Espaces (Intranet, Extranet…) dans lesquels l'entrée apparaît, par identifiant d'espace
41
+ * (ex. `['intranet']`). Absent, vide ou contenant `'*'` : tous les espaces. Toutes les
42
+ * entrées d'une même `section` n'ont pas à partager la même liste : la section d'un espace
43
+ * est composée des seules entrées qui y sont visibles.
44
+ */
45
+ workspaces?: string[];
46
+ /**
47
+ * Route du bouton de la section lui-même (cliquable en plus de son menu), relative à la base SPA.
48
+ * Doit exister dans un `pages[].route`. Si plusieurs entrées d'une section la renseignent, la
49
+ * première dans l'ordre du slot l'emporte.
50
+ */
51
+ sectionRoute?: string;
35
52
  }
53
+ /** Valeur de `NavEntryMeta.workspaces` qui désigne « tous les espaces ». */
54
+ export declare const NAV_ALL_WORKSPACES = "*";
36
55
  /** Valide une `meta` d'extension : vrai si c'est une `NavEntryMeta` exploitable. */
37
56
  export declare function isNavEntryMeta(meta: unknown): meta is NavEntryMeta;
57
+ /** Vrai si l'entrée doit être affichée dans l'espace `workspaceId` (voir `NavEntryMeta.workspaces`). */
58
+ export declare function isNavEntryInWorkspace(meta: NavEntryMeta, workspaceId: string): boolean;
38
59
  //# sourceMappingURL=nav-entry.d.ts.map
@@ -1 +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"}
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;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,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;IACvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,4EAA4E;AAC5E,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CAelE;AAED,wGAAwG;AACxG,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAItF"}
package/dist/nav-entry.js CHANGED
@@ -3,13 +3,26 @@
3
3
  * (niveau 2 de la TopBar). Déclaré dans le `routes.json` de l'app :
4
4
  * `{ "slot": "topbar-level2-nav", "component": "navEntry", "meta": NavEntryMeta }`.
5
5
  */ export const TOPBAR_LEVEL2_NAV_SLOT = 'topbar-level2-nav';
6
+ /** Valeur de `NavEntryMeta.workspaces` qui désigne « tous les espaces ». */ export const NAV_ALL_WORKSPACES = '*';
6
7
  /** Valide une `meta` d'extension : vrai si c'est une `NavEntryMeta` exploitable. */ export function isNavEntryMeta(meta) {
7
8
  if (!meta || typeof meta !== 'object') return false;
8
9
  const m = meta;
9
- return [
10
+ if (![
10
11
  'section',
11
- 'group',
12
12
  'label',
13
13
  'route'
14
- ].every((k)=>typeof m[k] === 'string' && m[k].length > 0);
14
+ ].every((k)=>typeof m[k] === 'string' && m[k].length > 0)) {
15
+ return false;
16
+ }
17
+ if (m.group !== undefined && (typeof m.group !== 'string' || m.group.length === 0)) return false;
18
+ if (m.sectionRoute !== undefined && (typeof m.sectionRoute !== 'string' || m.sectionRoute.length === 0)) return false;
19
+ if (m.workspaces !== undefined && !(Array.isArray(m.workspaces) && m.workspaces.every((w)=>typeof w === 'string'))) {
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ /** Vrai si l'entrée doit être affichée dans l'espace `workspaceId` (voir `NavEntryMeta.workspaces`). */ export function isNavEntryInWorkspace(meta, workspaceId) {
25
+ const { workspaces } = meta;
26
+ if (!workspaces || workspaces.length === 0) return true;
27
+ return workspaces.includes(NAV_ALL_WORKSPACES) || workspaces.includes(workspaceId);
15
28
  }
package/dist/public.d.ts CHANGED
@@ -4,5 +4,6 @@ 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
+ export { TOPBAR_LEVEL2_NAV_SLOT, NAV_ALL_WORKSPACES, type NavEntryMeta, isNavEntryMeta, isNavEntryInWorkspace, } from './nav-entry.js';
8
+ export { type NavBehavior, type NavBehaviorTarget, type NavSelectContext, registerNavBehavior, getNavBehavior, } from './nav-behavior.js';
8
9
  //# 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;AACtE,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,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,EACL,sBAAsB,EACtB,kBAAkB,EAClB,KAAK,YAAY,EACjB,cAAc,EACd,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
package/dist/public.js CHANGED
@@ -2,4 +2,5 @@ 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";
5
+ export { TOPBAR_LEVEL2_NAV_SLOT, NAV_ALL_WORKSPACES, isNavEntryMeta, isNavEntryInWorkspace } from "./nav-entry.js";
6
+ export { registerNavBehavior, getNavBehavior } from "./nav-behavior.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egen-civitas/esm-extensions",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Coordinates extensions and extension points in the Egen Frontend",
6
6
  "type": "module",