@creezio/interactive-demo 0.22.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.
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Collecteur des contributions démo des modules métier.
3
+ *
4
+ * Chaque module du registre marque (`BrandModuleDef.demo`) peut contribuer
5
+ * des scénarios de démo interactive ; ce collecteur les agrège en la liste
6
+ * de DÉFAUTS servie par `createInteractiveDemoMount` :
7
+ *
8
+ * ```ts
9
+ * createInteractiveDemoMount({ defaults: collectDemoScenarios() });
10
+ * ```
11
+ *
12
+ * Contrat :
13
+ * - **validation** : chaque scénario passe `validateDemoScenario` — un
14
+ * scénario invalide est une erreur de module (bug), pas un cas runtime ;
15
+ * - **dédup par id** : un même id contribué deux fois par le MÊME module
16
+ * (module listé en double dans le registre) est ignoré silencieusement ;
17
+ * un même id contribué par DEUX modules différents est un conflit, sauf
18
+ * `os-tour` (`genericOsTourScenario` partagé — premier gagne) ;
19
+ * - **erreurs claires** : toutes les erreurs sont agrégées puis levées en
20
+ * UNE Error listant module + scénario + codes de validation — le boot
21
+ * échoue explicitement plutôt que de servir une démo tronquée ;
22
+ * - **ordre stable** : la sortie suit l'ordre du registre (contributions)
23
+ * puis l'ordre de déclaration dans chaque module — jamais de tri implicite.
24
+ *
25
+ * Zéro texte métier ici : les scénarios vivent dans les modules marque.
26
+ */
27
+ import { validateDemoScenario } from "./types.js";
28
+ /**
29
+ * Agrège les scénarios démo contribués par les modules métier.
30
+ *
31
+ * Renvoie les scénarios valides dans l'ordre stable contributions →
32
+ * déclaration. Lève une Error unique listant TOUTES les erreurs si un
33
+ * scénario est invalide (`validateDemoScenario`) ou si deux modules
34
+ * différents contribuent le même id.
35
+ */
36
+ export function collectInteractiveDemoDefaults(contributions) {
37
+ const errors = [];
38
+ const out = [];
39
+ const ownerById = new Map();
40
+ for (const contribution of contributions ?? []) {
41
+ if (!contribution || typeof contribution !== "object") {
42
+ errors.push("contribution_invalide");
43
+ continue;
44
+ }
45
+ const moduleId = typeof contribution.moduleId === "string" && contribution.moduleId.trim()
46
+ ? contribution.moduleId
47
+ : "<module_inconnu>";
48
+ if (moduleId === "<module_inconnu>") {
49
+ errors.push("module_id_requis");
50
+ }
51
+ const scenarios = contribution.scenarios;
52
+ if (!Array.isArray(scenarios)) {
53
+ errors.push(`${moduleId}: scenarios_requis (tableau)`);
54
+ continue;
55
+ }
56
+ for (const scenario of scenarios) {
57
+ const id = scenario && typeof scenario === "object" && !Array.isArray(scenario)
58
+ ? scenario.id
59
+ : undefined;
60
+ const at = `${moduleId}:${typeof id === "string" && id ? id : "<sans_id>"}`;
61
+ // Dédup par id : doublon interne au même module = ignoré (registre
62
+ // listé deux fois) ; doublon entre modules distincts = conflit —
63
+ // sauf `os-tour` (scénario OS partagé : premier gagne, les suivants
64
+ // sont le même `genericOsTourScenario` posé par chaque stub module).
65
+ if (typeof id === "string" && id && ownerById.has(id)) {
66
+ const owner = ownerById.get(id);
67
+ if (owner === moduleId || id === "os-tour")
68
+ continue;
69
+ errors.push(`scenario en double: ${id} (modules ${owner} et ${moduleId})`);
70
+ continue;
71
+ }
72
+ const validation = validateDemoScenario(scenario);
73
+ if (validation.length > 0) {
74
+ errors.push(`${at}: ${validation.join(", ")}`);
75
+ continue;
76
+ }
77
+ ownerById.set(id, moduleId);
78
+ out.push(scenario);
79
+ }
80
+ }
81
+ if (errors.length > 0) {
82
+ throw new Error("collectInteractiveDemoDefaults — contributions invalides :\n" +
83
+ errors.map((e) => ` - ${e}`).join("\n"));
84
+ }
85
+ return out;
86
+ }
87
+ //# sourceMappingURL=contributions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contributions.js","sourceRoot":"","sources":["../src/contributions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Scénario de base générique — visite du socle OS Creezio (sidebar,
3
+ * recherche, assistant). Sert de démo « jour 1 » à toute marque qui n'a pas
4
+ * encore déclaré son scénario produit, et de fixture aux gates kit.
5
+ *
6
+ * Aucun texte métier marque : uniquement les surfaces OS communes.
7
+ */
8
+ import type { DemoScenario, DemoStep } from "./types.js";
9
+ export type GenericOsTourOptions = {
10
+ /** Nom du produit affiché dans les cartes (ex. « WinHub »). */
11
+ productName: string;
12
+ /** Route d'atterrissage de fin de visite (défaut `/`). */
13
+ homeHref?: string;
14
+ };
15
+ export type OsFeatureChaptersOptions = {
16
+ /** Inclut les chapitres réservés aux administrateurs (défaut `false`). */
17
+ isAdmin?: boolean;
18
+ };
19
+ /**
20
+ * Chapitres composables présentant les fonctionnalités natives de l'OS
21
+ * Creezio : Tâches, Mails, Assistant IA, Préférences pour tous les rôles ;
22
+ * `isAdmin: true` ajoute Collaborateurs, Configuration et les pages Admin
23
+ * (Analytics, Database, Plugins, Intégrations, API, MCP, Logs API/MCP).
24
+ *
25
+ * Toutes les cibles sont `optional` (skip silencieux si la marque n'expose
26
+ * pas la surface) et tous les ids sont préfixés `os-` — composables dans
27
+ * n'importe quel scénario marque.
28
+ */
29
+ export declare function osFeatureChapters(opts?: OsFeatureChaptersOptions): DemoStep[];
30
+ /** Visite guidée générique du shell OS (nav, chapitres OS, assistant). */
31
+ export declare function genericOsTourScenario(opts: GenericOsTourOptions): DemoScenario;
32
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../src/generic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG;IACjC,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,0EAA0E;IAC1E,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA0DF;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,GAAE,wBAA6B,GAClC,QAAQ,EAAE,CA0FZ;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,oBAAoB,GACzB,YAAY,CAkCd"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Scénario de base générique — visite du socle OS Creezio (sidebar,
3
+ * recherche, assistant). Sert de démo « jour 1 » à toute marque qui n'a pas
4
+ * encore déclaré son scénario produit, et de fixture aux gates kit.
5
+ *
6
+ * Aucun texte métier marque : uniquement les surfaces OS communes.
7
+ */
8
+ /** Titre de la page courante (h1 du contenu principal en priorité). */
9
+ const PAGE_TITLE_SELECTOR = "main h1, h1";
10
+ /** Chapitre standard : clic sur le libellé de nav + carte sur le titre de page. */
11
+ function clickChapter(slug, navLabel, title, body) {
12
+ return [
13
+ {
14
+ id: `os-${slug}-nav`,
15
+ kind: "click",
16
+ target: { text: navLabel },
17
+ optional: true,
18
+ },
19
+ {
20
+ id: `os-${slug}-carte`,
21
+ kind: "highlight",
22
+ target: { selector: PAGE_TITLE_SELECTOR },
23
+ title,
24
+ body,
25
+ optional: true,
26
+ },
27
+ ];
28
+ }
29
+ /**
30
+ * Chapitre admin : navigation directe (le groupe Admin de la sidebar peut
31
+ * être replié — un clic sur le libellé échouerait) + carte sur le titre.
32
+ */
33
+ function navigateChapter(slug, href, title, body) {
34
+ return [
35
+ {
36
+ id: `os-${slug}-nav`,
37
+ kind: "navigate",
38
+ href,
39
+ optional: true,
40
+ },
41
+ {
42
+ id: `os-${slug}-carte`,
43
+ kind: "highlight",
44
+ target: { selector: PAGE_TITLE_SELECTOR },
45
+ title,
46
+ body,
47
+ optional: true,
48
+ },
49
+ ];
50
+ }
51
+ /**
52
+ * Chapitres composables présentant les fonctionnalités natives de l'OS
53
+ * Creezio : Tâches, Mails, Assistant IA, Préférences pour tous les rôles ;
54
+ * `isAdmin: true` ajoute Collaborateurs, Configuration et les pages Admin
55
+ * (Analytics, Database, Plugins, Intégrations, API, MCP, Logs API/MCP).
56
+ *
57
+ * Toutes les cibles sont `optional` (skip silencieux si la marque n'expose
58
+ * pas la surface) et tous les ids sont préfixés `os-` — composables dans
59
+ * n'importe quel scénario marque.
60
+ */
61
+ export function osFeatureChapters(opts = {}) {
62
+ const steps = [
63
+ ...clickChapter("taches", "Tâches", "Tâches", "Un kanban natif pour organiser le travail de l'équipe, colonne par colonne. L'assistant IA peut y créer des missions et suivre leur avancement."),
64
+ ...clickChapter("mails", "Mails", "Mails", "La boîte de réception connectée de l'équipe, directement dans l'application. Lisez, répondez et classez vos messages sans changer d'outil."),
65
+ {
66
+ id: "os-assistant-carte",
67
+ kind: "highlight",
68
+ target: { selector: "[data-creezio-assistant-ui]" },
69
+ title: "Assistant IA",
70
+ body: "L'assistant répond en s'appuyant sur les données réelles de votre espace. Il peut aussi agir dans l'interface à votre place, comme un collègue.",
71
+ optional: true,
72
+ },
73
+ ...clickChapter("parametres", "Préférences", "Préférences", "Chaque utilisateur ajuste ici son expérience : profil, apparence, notifications. Les réglages sont propres à votre compte et appliqués immédiatement."),
74
+ ];
75
+ if (opts.isAdmin) {
76
+ steps.push(...clickChapter("collaborateurs", "Collaborateurs", "Collaborateurs", "Invitez votre équipe et gérez les comptes depuis cette page. Chaque collaborateur dispose de son propre accès sécurisé."), ...clickChapter("configuration", "Configuration", "Configuration", "Le centre de contrôle de l'application : identité, modules et comportements globaux. Une page réservée aux administrateurs de l'espace."), ...navigateChapter("analytics", "/admin/analytics", "Analytics", "Suivez l'usage réel de l'application : activité, volumes et tendances. Des indicateurs prêts à l'emploi, sans configuration."), ...navigateChapter("database", "/admin/database", "Database", "Explorez et modifiez les données directement depuis l'administration. Chaque table est consultable et éditable en toute sécurité."), ...navigateChapter("plugins", "/admin/plugins", "Plugins", "Étendez l'application avec des plugins installables à chaud. Chacun s'exécute isolé, avec ses propres données."), ...navigateChapter("integrations", "/admin/integrations", "Intégrations", "Connectez vos services tiers et gérez leurs clés au même endroit. Les intégrations deviennent ensuite disponibles pour les modules et les automatisations."), ...navigateChapter("api", "/admin/api", "API", "Une façade HTTP complète expose vos données aux outils externes. Créez des clés d'accès et suivez leur utilisation depuis cette page."), ...navigateChapter("mcp", "/admin/mcp", "MCP", "Le serveur MCP permet aux agents IA externes de piloter l'application. Vous contrôlez ici les accès et les outils exposés."), ...navigateChapter("request-logs", "/admin/request-logs", "Logs API / MCP", "Chaque requête API ou MCP est journalisée ici en détail. Idéal pour auditer les accès et diagnostiquer un comportement inattendu."));
77
+ }
78
+ return steps;
79
+ }
80
+ /** Visite guidée générique du shell OS (nav, chapitres OS, assistant). */
81
+ export function genericOsTourScenario(opts) {
82
+ const product = opts.productName;
83
+ const home = opts.homeHref ?? "/";
84
+ return {
85
+ id: "os-tour",
86
+ title: `Découvrir ${product}`,
87
+ description: "Visite guidée des surfaces de base de l'application.",
88
+ enabled: true,
89
+ autoStart: false,
90
+ steps: [
91
+ {
92
+ id: "welcome",
93
+ kind: "say",
94
+ title: `Bienvenue sur ${product}`,
95
+ body: "Suivez le curseur : cette visite guidée vous présente l'application en direct. Vous pouvez la quitter à tout moment.",
96
+ },
97
+ {
98
+ id: "sidebar",
99
+ kind: "highlight",
100
+ target: { selector: "aside, nav" },
101
+ title: "Votre espace de travail",
102
+ body: "La navigation regroupe toutes les sections de l'application. Chaque module y ajoute automatiquement son entrée.",
103
+ optional: true,
104
+ },
105
+ ...osFeatureChapters({ isAdmin: false }),
106
+ {
107
+ id: "end",
108
+ kind: "navigate",
109
+ href: home,
110
+ title: "À vous de jouer",
111
+ body: "Vous pouvez relancer cette visite à tout moment depuis le bouton « Visite guidée ».",
112
+ },
113
+ ],
114
+ };
115
+ }
116
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../src/generic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @creezio/interactive-demo — surface publique runtime.
3
+ *
4
+ * Moteur de démo interactive native (product tour live « Storylane-like »,
5
+ * joué dans l'app par un faux curseur) : types de scénario déclaratifs,
6
+ * collecteur des contributions des modules métier
7
+ * (`collectInteractiveDemoDefaults`), contenu hybride DB (migrations +
8
+ * merge + mount api-kernel) et scénario générique OS. Les composants React
9
+ * vivent dans `@creezio/interactive-demo/ui`.
10
+ */
11
+ export type { DemoTarget, DemoStepBase, DemoSayStep, DemoNavigateStep, DemoHighlightStep, DemoClickStep, DemoTypeStep, DemoScrollStep, DemoWaitStep, DemoWaitForStep, DemoStep, DemoStepKind, DemoScenario, DemoScenarioOverride, } from "./types.js";
12
+ export { validateDemoScenario, scenarioMatchesRole } from "./types.js";
13
+ export { collectInteractiveDemoDefaults } from "./contributions.js";
14
+ export type { DemoModuleContribution } from "./contributions.js";
15
+ export { INTERACTIVE_DEMO_SCHEMA_SQL, interactiveDemoMigrations, mergeDemoScenarios, createInteractiveDemoMount, } from "./content.js";
16
+ export type { InteractiveDemoMountOptions } from "./content.js";
17
+ export { genericOsTourScenario, osFeatureChapters } from "./generic.js";
18
+ export type { GenericOsTourOptions, OsFeatureChaptersOptions } from "./generic.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @creezio/interactive-demo — surface publique runtime.
3
+ *
4
+ * Moteur de démo interactive native (product tour live « Storylane-like »,
5
+ * joué dans l'app par un faux curseur) : types de scénario déclaratifs,
6
+ * collecteur des contributions des modules métier
7
+ * (`collectInteractiveDemoDefaults`), contenu hybride DB (migrations +
8
+ * merge + mount api-kernel) et scénario générique OS. Les composants React
9
+ * vivent dans `@creezio/interactive-demo/ui`.
10
+ */
11
+ export { validateDemoScenario, scenarioMatchesRole } from "./types.js";
12
+ export { collectInteractiveDemoDefaults } from "./contributions.js";
13
+ export { INTERACTIVE_DEMO_SCHEMA_SQL, interactiveDemoMigrations, mergeDemoScenarios, createInteractiveDemoMount, } from "./content.js";
14
+ export { genericOsTourScenario, osFeatureChapters } from "./generic.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAGpE,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Contrat déclaratif des scénarios de démo interactive.
3
+ *
4
+ * Un scénario = une liste ordonnée d'étapes JSON-sérialisables : c'est ce
5
+ * format qui vit en DB (overrides) et dans le fichier de défauts marque
6
+ * (`server/src/electron/brand-interactive-demo-content.ts`). Ajouter /
7
+ * enlever / réordonner des étapes = éditer ce tableau, rien d'autre.
8
+ */
9
+ /**
10
+ * Désignation d'un élément de la page.
11
+ *
12
+ * - `string` : essayé comme sélecteur CSS, puis comme `data-aid`, puis comme
13
+ * libellé d'élément interactif (texte visible / aria-label / placeholder) ;
14
+ * - objet : critères explicites, essayés dans l'ordre `selector` → `aid` →
15
+ * `text` — `within` restreint la recherche à un conteneur (sélecteur CSS).
16
+ */
17
+ export type DemoTarget = string | {
18
+ /** Sélecteur CSS exact. */
19
+ selector?: string;
20
+ /** Valeur de l'attribut `data-aid` (kit shell-ui). */
21
+ aid?: string;
22
+ /** Libellé d'élément interactif (match exact puis inclusif, accents ignorés). */
23
+ text?: string;
24
+ /** Sélecteur CSS du conteneur dans lequel chercher. */
25
+ within?: string;
26
+ };
27
+ /** Champs communs à toutes les étapes. */
28
+ export type DemoStepBase = {
29
+ /** Id stable (clé d'édition — jamais renommer une étape publiée). */
30
+ id: string;
31
+ /** Titre affiché dans la carte de narration. */
32
+ title?: string;
33
+ /** Texte de la carte (phrases courtes, markdown non interprété). */
34
+ body?: string;
35
+ /**
36
+ * Étape tolérante : cible introuvable → l'étape est sautée avec une note
37
+ * discrète au lieu d'interrompre la démo. Défaut `true` pour les étapes
38
+ * DOM-dépendantes (une démo ne doit jamais bloquer l'utilisateur).
39
+ */
40
+ optional?: boolean;
41
+ /** Avance automatique après N ms (sinon attente du bouton « Suivant »). */
42
+ autoAdvanceMs?: number;
43
+ /** Pause avant l'exécution de l'étape (laisser la page se poser). */
44
+ delayMs?: number;
45
+ /** Timeout de résolution de cible (défaut 6000 ms). */
46
+ timeoutMs?: number;
47
+ };
48
+ /** Carte de narration plein écran (pas de cible). */
49
+ export type DemoSayStep = DemoStepBase & {
50
+ kind: "say";
51
+ title: string;
52
+ };
53
+ /** Navigation SPA vers une route de l'app. */
54
+ export type DemoNavigateStep = DemoStepBase & {
55
+ kind: "navigate";
56
+ href: string;
57
+ };
58
+ /** Spotlight + carte ancrée sur un élément (sans interaction). */
59
+ export type DemoHighlightStep = DemoStepBase & {
60
+ kind: "highlight";
61
+ target: DemoTarget;
62
+ /** Placement préféré de la carte (défaut `auto`). */
63
+ placement?: "top" | "bottom" | "left" | "right" | "auto";
64
+ };
65
+ /** Le faux curseur se déplace jusqu'à la cible et clique réellement. */
66
+ export type DemoClickStep = DemoStepBase & {
67
+ kind: "click";
68
+ target: DemoTarget;
69
+ };
70
+ /** Le faux curseur clique un champ puis tape le texte caractère par caractère. */
71
+ export type DemoTypeStep = DemoStepBase & {
72
+ kind: "type";
73
+ target: DemoTarget;
74
+ text: string;
75
+ /** Envoie Entrée + submit du formulaire après la frappe. */
76
+ submit?: boolean;
77
+ };
78
+ /** Défilement d'une page (ou jusqu'à une cible). */
79
+ export type DemoScrollStep = DemoStepBase & {
80
+ kind: "scroll";
81
+ direction?: "down" | "up";
82
+ target?: DemoTarget;
83
+ };
84
+ /** Pause simple. */
85
+ export type DemoWaitStep = DemoStepBase & {
86
+ kind: "wait";
87
+ ms: number;
88
+ };
89
+ /**
90
+ * Attente active d'une condition de page (polling, même cadence que la
91
+ * résolution de cible) :
92
+ *
93
+ * - `target` posé (sans `absent`) → attendre que la cible EXISTE ;
94
+ * - `target` + `absent: true` → attendre que la cible N'EXISTE PLUS ;
95
+ * - `url` posé → attendre que `location.pathname` commence par `url` ;
96
+ * - `target` + `url` → ET logique des deux conditions.
97
+ *
98
+ * Au moins un des deux critères (`target` ou `url`) est requis. Timeout
99
+ * défaut 8000 ms ; au timeout, même politique que la cible introuvable
100
+ * (`optional !== false` → étape sautée avec note ; `optional: false` →
101
+ * démo interrompue). Étape silencieuse par défaut : la carte n'est
102
+ * affichée pendant l'attente que si `title`/`body` sont posés.
103
+ */
104
+ export type DemoWaitForStep = DemoStepBase & {
105
+ kind: "waitFor";
106
+ /** Cible attendue (présente, ou absente si `absent: true`). */
107
+ target?: DemoTarget;
108
+ /** Inverse la condition cible : attendre la disparition. */
109
+ absent?: boolean;
110
+ /** Préfixe attendu de `location.pathname` (doit commencer par `/`). */
111
+ url?: string;
112
+ };
113
+ export type DemoStep = DemoSayStep | DemoNavigateStep | DemoHighlightStep | DemoClickStep | DemoTypeStep | DemoScrollStep | DemoWaitStep | DemoWaitForStep;
114
+ export type DemoStepKind = DemoStep["kind"];
115
+ /** Scénario complet (défauts marque OU résultat du merge défauts + override). */
116
+ export type DemoScenario = {
117
+ /** Id stable (clé de merge défauts/override). */
118
+ id: string;
119
+ /** Titre affiché dans le lanceur et la carte d'intro. */
120
+ title: string;
121
+ /** Sous-titre du lanceur. */
122
+ description?: string;
123
+ /** `false` = scénario désactivé (jamais proposé). Défaut `true`. */
124
+ enabled?: boolean;
125
+ /**
126
+ * Candidat au lancement automatique à la première visite (après setup /
127
+ * onboarding). Un seul scénario `autoStart` est lancé ; « déjà vu » est
128
+ * persisté par utilisateur (preferences + localStorage).
129
+ */
130
+ autoStart?: boolean;
131
+ /**
132
+ * Rôles autorisés à voir le scénario dans le lanceur et l'autoStart.
133
+ * Absent ou vide = visible pour tous. Un lancement explicite
134
+ * (`startInteractiveDemo(id)`) ignore ce filtre.
135
+ */
136
+ roles?: string[];
137
+ steps: DemoStep[];
138
+ };
139
+ /**
140
+ * Override partiel stocké en DB (une ligne par scénario) : les champs
141
+ * présents priment sur les défauts. `steps` fourni = REMPLACE le tableau
142
+ * entier (édition explicite : ajouter/enlever/réordonner sans règles de
143
+ * merge ambiguës). Un override dont l'id est inconnu des défauts et qui
144
+ * porte `title` + `steps` devient un scénario additionnel.
145
+ */
146
+ export type DemoScenarioOverride = Partial<DemoScenario> & {
147
+ id: string;
148
+ };
149
+ /**
150
+ * Filtre par rôle du lanceur et de l'autoStart : un scénario sans `roles`
151
+ * (ou avec un tableau vide) est visible pour tous ; `role` null/undefined
152
+ * = pas de filtrage (comportement historique).
153
+ */
154
+ export declare function scenarioMatchesRole(scenario: Pick<DemoScenario, "roles">, role?: string | null): boolean;
155
+ /**
156
+ * Validation pure d'un scénario (défauts marque ou scénario mergé) —
157
+ * renvoie la liste des erreurs (vide = valide). Jamais de throw.
158
+ */
159
+ export declare function validateDemoScenario(scenario: unknown): string[];
160
+ //# 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,132 @@
1
+ /**
2
+ * Contrat déclaratif des scénarios de démo interactive.
3
+ *
4
+ * Un scénario = une liste ordonnée d'étapes JSON-sérialisables : c'est ce
5
+ * format qui vit en DB (overrides) et dans le fichier de défauts marque
6
+ * (`server/src/electron/brand-interactive-demo-content.ts`). Ajouter /
7
+ * enlever / réordonner des étapes = éditer ce tableau, rien d'autre.
8
+ */
9
+ const STEP_KINDS = [
10
+ "say",
11
+ "navigate",
12
+ "highlight",
13
+ "click",
14
+ "type",
15
+ "scroll",
16
+ "wait",
17
+ "waitFor",
18
+ ];
19
+ /**
20
+ * Filtre par rôle du lanceur et de l'autoStart : un scénario sans `roles`
21
+ * (ou avec un tableau vide) est visible pour tous ; `role` null/undefined
22
+ * = pas de filtrage (comportement historique).
23
+ */
24
+ export function scenarioMatchesRole(scenario, role) {
25
+ if (role == null)
26
+ return true;
27
+ const roles = scenario.roles;
28
+ if (!Array.isArray(roles) || roles.length === 0)
29
+ return true;
30
+ return roles.includes(role);
31
+ }
32
+ function isValidTarget(t) {
33
+ if (typeof t === "string")
34
+ return t.trim().length > 0;
35
+ if (!t || typeof t !== "object" || Array.isArray(t))
36
+ return false;
37
+ const o = t;
38
+ return ["selector", "aid", "text"].some((k) => typeof o[k] === "string" && o[k].trim().length > 0);
39
+ }
40
+ /**
41
+ * Validation pure d'un scénario (défauts marque ou scénario mergé) —
42
+ * renvoie la liste des erreurs (vide = valide). Jamais de throw.
43
+ */
44
+ export function validateDemoScenario(scenario) {
45
+ const errors = [];
46
+ if (!scenario || typeof scenario !== "object" || Array.isArray(scenario)) {
47
+ return ["scenario_invalide"];
48
+ }
49
+ const s = scenario;
50
+ if (typeof s.id !== "string" || !s.id.trim())
51
+ errors.push("id_requis");
52
+ if (typeof s.title !== "string" || !s.title.trim())
53
+ errors.push("titre_requis");
54
+ if (s.roles !== undefined &&
55
+ (!Array.isArray(s.roles) ||
56
+ s.roles.some((r) => typeof r !== "string" || !r.trim()))) {
57
+ errors.push("roles_invalide");
58
+ }
59
+ if (!Array.isArray(s.steps) || s.steps.length === 0) {
60
+ errors.push("etapes_requises");
61
+ return errors;
62
+ }
63
+ const seen = new Set();
64
+ s.steps.forEach((step, i) => {
65
+ const at = `etape_${i}`;
66
+ if (!step || typeof step !== "object") {
67
+ errors.push(`${at}_invalide`);
68
+ return;
69
+ }
70
+ const st = step;
71
+ if (typeof st.id !== "string" || !st.id.trim())
72
+ errors.push(`${at}_id_requis`);
73
+ else if (seen.has(st.id))
74
+ errors.push(`${at}_id_duplique`);
75
+ else
76
+ seen.add(st.id);
77
+ if (!STEP_KINDS.includes(st.kind)) {
78
+ errors.push(`${at}_kind_invalide`);
79
+ return;
80
+ }
81
+ switch (st.kind) {
82
+ case "say":
83
+ if (typeof st.title !== "string" || !st.title.trim()) {
84
+ errors.push(`${at}_titre_requis`);
85
+ }
86
+ break;
87
+ case "navigate":
88
+ if (typeof st.href !== "string" || !st.href.startsWith("/")) {
89
+ errors.push(`${at}_href_invalide`);
90
+ }
91
+ break;
92
+ case "highlight":
93
+ case "click":
94
+ if (!isValidTarget(st.target))
95
+ errors.push(`${at}_cible_invalide`);
96
+ break;
97
+ case "type":
98
+ if (!isValidTarget(st.target))
99
+ errors.push(`${at}_cible_invalide`);
100
+ if (typeof st.text !== "string")
101
+ errors.push(`${at}_texte_requis`);
102
+ break;
103
+ case "scroll":
104
+ if (st.target !== undefined && !isValidTarget(st.target)) {
105
+ errors.push(`${at}_cible_invalide`);
106
+ }
107
+ break;
108
+ case "wait":
109
+ if (typeof st.ms !== "number" || !(st.ms > 0))
110
+ errors.push(`${at}_ms_invalide`);
111
+ break;
112
+ case "waitFor": {
113
+ const hasTarget = st.target !== undefined;
114
+ const hasUrl = st.url !== undefined;
115
+ if (!hasTarget && !hasUrl) {
116
+ errors.push(`${at}_cible_ou_url_requise`);
117
+ break;
118
+ }
119
+ if (hasTarget && !isValidTarget(st.target)) {
120
+ errors.push(`${at}_cible_invalide`);
121
+ }
122
+ if (hasUrl &&
123
+ (typeof st.url !== "string" || !st.url.startsWith("/"))) {
124
+ errors.push(`${at}_url_invalide`);
125
+ }
126
+ break;
127
+ }
128
+ }
129
+ });
130
+ return errors;
131
+ }
132
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}