@egen-civitas/esm-extensions 1.2.1 → 1.4.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 +22 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/public.d.ts +1 -0
- package/dist/public.d.ts.map +1 -1
- package/dist/public.js +1 -0
- package/dist/tool-window.d.ts +48 -0
- package/dist/tool-window.d.ts.map +1 -0
- package/dist/tool-window.js +37 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @egen-civitas/esm-extensions
|
|
2
2
|
|
|
3
|
+
## 1.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- af95904: Rail gauche : options globales avec sous-options.
|
|
8
|
+
|
|
9
|
+
- `ToolWindowMeta.global` : une extension du slot `shell-rail-left-slot` (ou `shell-rail-bottom-slot`) déclarée avec `meta.global: true` reste affichée dans le rail quelle que soit l'app active, comme le rail droit. Sans ce drapeau, le comportement est inchangé (seules les extensions de l'app active apparaissent).
|
|
10
|
+
- Nouveau composant `SectionNavPanel` (`section`) : contenu prêt à l'emploi d'une option globale. Il liste, dans la zone gauche, les sous-options d'une section (entrées `NavEntryMeta` déclarées par l'app sur `topbar-level2-nav`), regroupées par `group`, avec icône, et navigue vers la route de la sous-option au clic ; la sous-option de la page courante est marquée active. La zone centrale se met à jour par la navigation habituelle.
|
|
11
|
+
- Liste blanche d'icônes du plan de travail étendue (`Calendar`, `CalendarCheck`, `Compass`, `Contact`, `FileCheck`, `FileText`, `Globe`, `Layers`, `Radio`, `Star`, `Zap`).
|
|
12
|
+
|
|
13
|
+
## 1.3.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 6ddbd06: Shell : plan de travail façon IntelliJ (rails fixes et zones redimensionnables).
|
|
18
|
+
|
|
19
|
+
- `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`.
|
|
20
|
+
- `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.
|
|
21
|
+
- `esm-app-shell` : nouveaux conteneurs `egen-rail-*-container` et `egen-zone-*-container`, montés au démarrage par `renderWorkbench`.
|
|
22
|
+
|
|
23
|
+
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.
|
|
24
|
+
|
|
3
25
|
## 1.2.1
|
|
4
26
|
|
|
5
27
|
### 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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
|
package/dist/public.d.ts.map
CHANGED
|
@@ -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,48 @@
|
|
|
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, sauf celles qui
|
|
18
|
+
* déclarent `meta.global: true` (toujours visibles, quelle que soit l'app active, comme le rail
|
|
19
|
+
* droit). Le rail droit est entièrement global (toutes les apps, y compris celles qui ne sont
|
|
20
|
+
* pas montées).
|
|
21
|
+
*/
|
|
22
|
+
export declare const SHELL_RAIL_LEFT_SLOT = "shell-rail-left-slot";
|
|
23
|
+
export declare const SHELL_RAIL_BOTTOM_SLOT = "shell-rail-bottom-slot";
|
|
24
|
+
export declare const SHELL_RAIL_RIGHT_SLOT = "shell-rail-right-slot";
|
|
25
|
+
/** Zone du shell dans laquelle une fenêtre d'outils affiche son contenu. */
|
|
26
|
+
export type ToolWindowAnchor = 'left' | 'bottom' | 'right';
|
|
27
|
+
/** Slot de rail associé à chaque zone. */
|
|
28
|
+
export declare const TOOL_WINDOW_SLOTS: Readonly<Record<ToolWindowAnchor, string>>;
|
|
29
|
+
/** Métadonnées d'une fenêtre d'outils (bouton de rail + titre de zone). */
|
|
30
|
+
export interface ToolWindowMeta {
|
|
31
|
+
/** Titre par défaut : info-bulle du bouton et en-tête de la zone. */
|
|
32
|
+
title: string;
|
|
33
|
+
/** Clé de traduction du titre (optionnelle). */
|
|
34
|
+
titleKey?: string;
|
|
35
|
+
/** Nom d'icône lucide (ex. `Users`), résolu par le shell dans une liste blanche. */
|
|
36
|
+
icon?: string;
|
|
37
|
+
/** Ordre d'affichage dans le rail (croissant) ; défaut : ordre du slot. */
|
|
38
|
+
order?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Rails gauche et bas : l'entrée reste affichée quelle que soit l'app active (option globale,
|
|
41
|
+
* ex. Annuaire, News), au lieu de n'apparaître que quand son app est montée. Sans effet sur
|
|
42
|
+
* le rail droit, déjà global.
|
|
43
|
+
*/
|
|
44
|
+
global?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** Valide une `meta` d'extension : vrai si c'est une `ToolWindowMeta` exploitable. */
|
|
47
|
+
export declare function isToolWindowMeta(meta: unknown): meta is ToolWindowMeta;
|
|
48
|
+
//# 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;;;;;;;;;;;;;;;;;;;GAmBG;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;IACf;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,cAAc,CAStE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
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, sauf celles qui
|
|
17
|
+
* déclarent `meta.global: true` (toujours visibles, quelle que soit l'app active, comme le rail
|
|
18
|
+
* droit). Le rail droit est entièrement global (toutes les apps, y compris celles qui ne sont
|
|
19
|
+
* pas montées).
|
|
20
|
+
*/ export const SHELL_RAIL_LEFT_SLOT = 'shell-rail-left-slot';
|
|
21
|
+
export const SHELL_RAIL_BOTTOM_SLOT = 'shell-rail-bottom-slot';
|
|
22
|
+
export const SHELL_RAIL_RIGHT_SLOT = 'shell-rail-right-slot';
|
|
23
|
+
/** Slot de rail associé à chaque zone. */ export const TOOL_WINDOW_SLOTS = {
|
|
24
|
+
left: SHELL_RAIL_LEFT_SLOT,
|
|
25
|
+
bottom: SHELL_RAIL_BOTTOM_SLOT,
|
|
26
|
+
right: SHELL_RAIL_RIGHT_SLOT
|
|
27
|
+
};
|
|
28
|
+
/** Valide une `meta` d'extension : vrai si c'est une `ToolWindowMeta` exploitable. */ export function isToolWindowMeta(meta) {
|
|
29
|
+
if (!meta || typeof meta !== 'object') return false;
|
|
30
|
+
const m = meta;
|
|
31
|
+
if (typeof m.title !== 'string' || m.title.length === 0) return false;
|
|
32
|
+
if (m.titleKey !== undefined && typeof m.titleKey !== 'string') return false;
|
|
33
|
+
if (m.icon !== undefined && typeof m.icon !== 'string') return false;
|
|
34
|
+
if (m.order !== undefined && (typeof m.order !== 'number' || !Number.isFinite(m.order))) return false;
|
|
35
|
+
if (m.global !== undefined && typeof m.global !== 'boolean') return false;
|
|
36
|
+
return true;
|
|
37
|
+
}
|