@egen-civitas/esm-extensions 1.2.1 → 1.3.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,17 @@
1
1
  # @egen-civitas/esm-extensions
2
2
 
3
+ ## 1.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 6ddbd06: Shell : plan de travail façon IntelliJ (rails fixes et zones redimensionnables).
8
+
9
+ - `esm-extensions` : contrat des fenêtres d'outils — slots `shell-rail-left-slot`, `shell-rail-bottom-slot` et `shell-rail-right-slot`, `ToolWindowMeta` (`title`, `titleKey`, `icon`, `order`) et `isToolWindowMeta`.
10
+ - `esm-styleguide` : composants `LeftRail`, `RightRail`, `ToolWindowZone` et `Splitter`, store `workbenchStore` (tailles et fenêtres actives mémorisées dans le navigateur), `renderWorkbench`, `useToolWindows`, `useActiveAppModules`. La grille du body passe à rail | zone gauche | centre | zone droite | rail | workspaces, avec une zone basse entre les rails ; la zone centrale devient une carte arrondie.
11
+ - `esm-app-shell` : nouveaux conteneurs `egen-rail-*-container` et `egen-zone-*-container`, montés au démarrage par `renderWorkbench`.
12
+
13
+ Le rail gauche (groupe haut → zone gauche, groupe bas → zone basse) n'affiche que les outils de l'app montée ; le rail droit est global. Rails et zones sont masqués sur les routes publiques, en dessous de 768 px et à l'impression.
14
+
3
15
  ## 1.2.1
4
16
 
5
17
  ### Patch Changes
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ export * from './extensions.js';
2
2
  export * from './helpers.js';
3
3
  export * from './left-nav.js';
4
4
  export * from './nav-entry.js';
5
+ export * from './tool-window.js';
5
6
  export * from './nav-behavior.js';
6
7
  export * from './modals.js';
7
8
  export * from './workspaces.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,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,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,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,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
@@ -2,6 +2,7 @@ export * from "./extensions.js";
2
2
  export * from "./helpers.js";
3
3
  export * from "./left-nav.js";
4
4
  export * from "./nav-entry.js";
5
+ export * from "./tool-window.js";
5
6
  export * from "./nav-behavior.js";
6
7
  export * from "./modals.js";
7
8
  export * from "./workspaces.js";
package/dist/public.d.ts CHANGED
@@ -5,5 +5,6 @@ export { type ExtensionMeta, type ExtensionRegistration, type ExtensionStore, ty
5
5
  export { type WorkspaceRegistration } from './workspaces.js';
6
6
  export { type ExtensionData, type ComponentConfig } from './types.js';
7
7
  export { TOPBAR_LEVEL2_NAV_SLOT, NAV_ALL_WORKSPACES, type NavEntryMeta, isNavEntryMeta, isNavEntryInWorkspace, } from './nav-entry.js';
8
+ export { SHELL_RAIL_LEFT_SLOT, SHELL_RAIL_BOTTOM_SLOT, SHELL_RAIL_RIGHT_SLOT, TOOL_WINDOW_SLOTS, type ToolWindowAnchor, type ToolWindowMeta, isToolWindowMeta, } from './tool-window.js';
8
9
  export { type NavBehavior, type NavBehaviorTarget, type NavSelectContext, registerNavBehavior, getNavBehavior, } from './nav-behavior.js';
9
10
  //# 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,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"}
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,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,cAAc,GACf,MAAM,mBAAmB,CAAC"}
package/dist/public.js CHANGED
@@ -3,4 +3,5 @@ export { setLeftNav, unsetLeftNav } from "./left-nav.js";
3
3
  export { renderExtension } from "./render.js";
4
4
  export { getExtensionStore } from "./store.js";
5
5
  export { TOPBAR_LEVEL2_NAV_SLOT, NAV_ALL_WORKSPACES, isNavEntryMeta, isNavEntryInWorkspace } from "./nav-entry.js";
6
+ export { SHELL_RAIL_LEFT_SLOT, SHELL_RAIL_BOTTOM_SLOT, SHELL_RAIL_RIGHT_SLOT, TOOL_WINDOW_SLOTS, isToolWindowMeta } from "./tool-window.js";
6
7
  export { registerNavBehavior, getNavBehavior } from "./nav-behavior.js";
@@ -0,0 +1,40 @@
1
+ /** @module @category Extension */
2
+ /**
3
+ * Fenêtres d'outils du shell (façon IntelliJ).
4
+ *
5
+ * Le shell porte deux rails fixes (gauche et droite) et trois zones redimensionnables
6
+ * (gauche, droite, bas). Chaque entrée d'un rail est une **extension** : sa `meta`
7
+ * (`ToolWindowMeta`) décrit le bouton du rail, son composant est le contenu de la zone
8
+ * associée, affiché quand le bouton est actif.
9
+ *
10
+ * rail gauche, groupe haut → slot `shell-rail-left-slot` → zone gauche (sidebar de l'app)
11
+ * rail gauche, groupe bas → slot `shell-rail-bottom-slot` → zone basse (ex. terminal)
12
+ * rail droit → slot `shell-rail-right-slot` → zone droite (options globales)
13
+ *
14
+ * Déclaration dans le `routes.json` d'une app :
15
+ * `{ "slot": "shell-rail-left-slot", "component": "projectPanel", "meta": ToolWindowMeta }`.
16
+ *
17
+ * Les rails gauche et bas n'affichent que les extensions de l'app active ; le rail droit est
18
+ * global (toutes les apps, y compris celles qui ne sont pas montées).
19
+ */
20
+ export declare const SHELL_RAIL_LEFT_SLOT = "shell-rail-left-slot";
21
+ export declare const SHELL_RAIL_BOTTOM_SLOT = "shell-rail-bottom-slot";
22
+ export declare const SHELL_RAIL_RIGHT_SLOT = "shell-rail-right-slot";
23
+ /** Zone du shell dans laquelle une fenêtre d'outils affiche son contenu. */
24
+ export type ToolWindowAnchor = 'left' | 'bottom' | 'right';
25
+ /** Slot de rail associé à chaque zone. */
26
+ export declare const TOOL_WINDOW_SLOTS: Readonly<Record<ToolWindowAnchor, string>>;
27
+ /** Métadonnées d'une fenêtre d'outils (bouton de rail + titre de zone). */
28
+ export interface ToolWindowMeta {
29
+ /** Titre par défaut : info-bulle du bouton et en-tête de la zone. */
30
+ title: string;
31
+ /** Clé de traduction du titre (optionnelle). */
32
+ titleKey?: string;
33
+ /** Nom d'icône lucide (ex. `Users`), résolu par le shell dans une liste blanche. */
34
+ icon?: string;
35
+ /** Ordre d'affichage dans le rail (croissant) ; défaut : ordre du slot. */
36
+ order?: number;
37
+ }
38
+ /** Valide une `meta` d'extension : vrai si c'est une `ToolWindowMeta` exploitable. */
39
+ export declare function isToolWindowMeta(meta: unknown): meta is ToolWindowMeta;
40
+ //# sourceMappingURL=tool-window.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-window.d.ts","sourceRoot":"","sources":["../src/tool-window.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAElC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAC3D,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAE7D,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE3D,0CAA0C;AAC1C,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAIxE,CAAC;AAEF,2EAA2E;AAC3E,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAQtE"}
@@ -0,0 +1,34 @@
1
+ /** @module @category Extension */ /**
2
+ * Fenêtres d'outils du shell (façon IntelliJ).
3
+ *
4
+ * Le shell porte deux rails fixes (gauche et droite) et trois zones redimensionnables
5
+ * (gauche, droite, bas). Chaque entrée d'un rail est une **extension** : sa `meta`
6
+ * (`ToolWindowMeta`) décrit le bouton du rail, son composant est le contenu de la zone
7
+ * associée, affiché quand le bouton est actif.
8
+ *
9
+ * rail gauche, groupe haut → slot `shell-rail-left-slot` → zone gauche (sidebar de l'app)
10
+ * rail gauche, groupe bas → slot `shell-rail-bottom-slot` → zone basse (ex. terminal)
11
+ * rail droit → slot `shell-rail-right-slot` → zone droite (options globales)
12
+ *
13
+ * Déclaration dans le `routes.json` d'une app :
14
+ * `{ "slot": "shell-rail-left-slot", "component": "projectPanel", "meta": ToolWindowMeta }`.
15
+ *
16
+ * Les rails gauche et bas n'affichent que les extensions de l'app active ; le rail droit est
17
+ * global (toutes les apps, y compris celles qui ne sont pas montées).
18
+ */ export const SHELL_RAIL_LEFT_SLOT = 'shell-rail-left-slot';
19
+ export const SHELL_RAIL_BOTTOM_SLOT = 'shell-rail-bottom-slot';
20
+ export const SHELL_RAIL_RIGHT_SLOT = 'shell-rail-right-slot';
21
+ /** Slot de rail associé à chaque zone. */ export const TOOL_WINDOW_SLOTS = {
22
+ left: SHELL_RAIL_LEFT_SLOT,
23
+ bottom: SHELL_RAIL_BOTTOM_SLOT,
24
+ right: SHELL_RAIL_RIGHT_SLOT
25
+ };
26
+ /** Valide une `meta` d'extension : vrai si c'est une `ToolWindowMeta` exploitable. */ export function isToolWindowMeta(meta) {
27
+ if (!meta || typeof meta !== 'object') return false;
28
+ const m = meta;
29
+ if (typeof m.title !== 'string' || m.title.length === 0) return false;
30
+ if (m.titleKey !== undefined && typeof m.titleKey !== 'string') return false;
31
+ if (m.icon !== undefined && typeof m.icon !== 'string') return false;
32
+ if (m.order !== undefined && (typeof m.order !== 'number' || !Number.isFinite(m.order))) return false;
33
+ return true;
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@egen-civitas/esm-extensions",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "license": "MPL-2.0",
5
5
  "description": "Coordinates extensions and extension points in the Egen Frontend",
6
6
  "type": "module",