@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.
- package/README.md +138 -0
- package/dist/content.d.ts +49 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +329 -0
- package/dist/content.js.map +1 -0
- package/dist/contributions.d.ts +48 -0
- package/dist/contributions.d.ts.map +1 -0
- package/dist/contributions.js +87 -0
- package/dist/contributions.js.map +1 -0
- package/dist/generic.d.ts +32 -0
- package/dist/generic.d.ts.map +1 -0
- package/dist/generic.js +116 -0
- package/dist/generic.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +132 -0
- package/dist/types.js.map +1 -0
- package/dist-cjs/content.js +335 -0
- package/dist-cjs/content.js.map +1 -0
- package/dist-cjs/contributions.js +90 -0
- package/dist-cjs/contributions.js.map +1 -0
- package/dist-cjs/generic.js +120 -0
- package/dist-cjs/generic.js.map +1 -0
- package/dist-cjs/index.js +27 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/types.js +136 -0
- package/dist-cjs/types.js.map +1 -0
- package/package.json +67 -0
- package/ui/demo-player.tsx +563 -0
- package/ui/demo-root.tsx +312 -0
- package/ui/dom.ts +280 -0
- package/ui/fake-cursor.ts +157 -0
- package/ui/index.ts +25 -0
- package/ui/interactive-demo.css +423 -0
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Contenu démo interactive hybride (ADR-module-natif-hybride).
|
|
4
|
+
*
|
|
5
|
+
* Le kit fournit le moteur générique : la marque déclare ses scénarios par
|
|
6
|
+
* défaut dans UN fichier explicite
|
|
7
|
+
* (`server/src/electron/brand-interactive-demo-content.ts`), les overrides
|
|
8
|
+
* vivent en `brand.db` (table `interactive_demo_content`, une ligne par
|
|
9
|
+
* scénario), et le runtime sert toujours `merge(défauts marque, overrides
|
|
10
|
+
* DB)`. Le « déjà vu » par utilisateur atterrit dans
|
|
11
|
+
* `interactive_demo_preferences` via le même mount.
|
|
12
|
+
*
|
|
13
|
+
* Zéro texte métier ici (ADR-no-brand-domain-in-native-packages) —
|
|
14
|
+
* imports type-only pour ne pas créer de cycle runtime.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.INTERACTIVE_DEMO_SCHEMA_SQL = void 0;
|
|
18
|
+
exports.interactiveDemoMigrations = interactiveDemoMigrations;
|
|
19
|
+
exports.mergeDemoScenarios = mergeDemoScenarios;
|
|
20
|
+
exports.createInteractiveDemoMount = createInteractiveDemoMount;
|
|
21
|
+
const types_js_1 = require("./types.js");
|
|
22
|
+
/* ------------------------------------------------------------- migrations */
|
|
23
|
+
exports.INTERACTIVE_DEMO_SCHEMA_SQL = `-- Scénarios démo interactive hybride + preferences (@creezio/interactive-demo)
|
|
24
|
+
|
|
25
|
+
CREATE TABLE IF NOT EXISTS interactive_demo_content (
|
|
26
|
+
key TEXT PRIMARY KEY,
|
|
27
|
+
value_json TEXT NOT NULL,
|
|
28
|
+
updated_at TEXT NOT NULL
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE TABLE IF NOT EXISTS interactive_demo_preferences (
|
|
32
|
+
id TEXT PRIMARY KEY,
|
|
33
|
+
user_key TEXT NOT NULL,
|
|
34
|
+
key TEXT NOT NULL,
|
|
35
|
+
value_json TEXT NOT NULL,
|
|
36
|
+
updated_at TEXT NOT NULL,
|
|
37
|
+
UNIQUE(user_key, key)
|
|
38
|
+
);
|
|
39
|
+
`;
|
|
40
|
+
/** Migrations brand.db du module (à composer dans `brand-migrations.ts` marque). */
|
|
41
|
+
function interactiveDemoMigrations() {
|
|
42
|
+
return [
|
|
43
|
+
{
|
|
44
|
+
id: "interactive_demo_001_content_prefs",
|
|
45
|
+
sql: exports.INTERACTIVE_DEMO_SCHEMA_SQL,
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
/* ------------------------------------------------------------------ merge */
|
|
50
|
+
function cloneScenario(s) {
|
|
51
|
+
return {
|
|
52
|
+
...s,
|
|
53
|
+
...(Array.isArray(s.roles) ? { roles: [...s.roles] } : {}),
|
|
54
|
+
steps: s.steps.map((st) => ({ ...st })),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Merge pur défauts marque + overrides DB.
|
|
59
|
+
*
|
|
60
|
+
* - scénario par `id` : champs présents dans l'override priment ;
|
|
61
|
+
* - `steps` d'un override REMPLACE le tableau des défauts (édition
|
|
62
|
+
* explicite — pas de merge étape par étape) ;
|
|
63
|
+
* - `enabled: false` désactive un scénario par défaut sans le supprimer ;
|
|
64
|
+
* - un override inconnu des défauts portant `title` + `steps` valides est
|
|
65
|
+
* ajouté en fin (scénario créé par l'admin).
|
|
66
|
+
*/
|
|
67
|
+
function mergeDemoScenarios(defaults, overrides) {
|
|
68
|
+
const base = defaults.map(cloneScenario);
|
|
69
|
+
if (!Array.isArray(overrides) || overrides.length === 0)
|
|
70
|
+
return base;
|
|
71
|
+
const byId = new Map();
|
|
72
|
+
for (const o of overrides) {
|
|
73
|
+
if (o && typeof o.id === "string" && o.id)
|
|
74
|
+
byId.set(o.id, o);
|
|
75
|
+
}
|
|
76
|
+
const merged = base.map((s) => {
|
|
77
|
+
const o = byId.get(s.id);
|
|
78
|
+
if (!o)
|
|
79
|
+
return s;
|
|
80
|
+
byId.delete(s.id);
|
|
81
|
+
return {
|
|
82
|
+
...s,
|
|
83
|
+
...(typeof o.title === "string" && o.title ? { title: o.title } : {}),
|
|
84
|
+
...(typeof o.description === "string" ? { description: o.description } : {}),
|
|
85
|
+
...(typeof o.enabled === "boolean" ? { enabled: o.enabled } : {}),
|
|
86
|
+
...(typeof o.autoStart === "boolean" ? { autoStart: o.autoStart } : {}),
|
|
87
|
+
...(Array.isArray(o.roles) ? { roles: [...o.roles] } : {}),
|
|
88
|
+
...(Array.isArray(o.steps) && o.steps.length > 0
|
|
89
|
+
? { steps: o.steps.map((st) => ({ ...st })) }
|
|
90
|
+
: {}),
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
// Scénarios ajoutés par override (inconnus des défauts) : exigés complets.
|
|
94
|
+
for (const o of byId.values()) {
|
|
95
|
+
const candidate = { enabled: true, ...o };
|
|
96
|
+
if ((0, types_js_1.validateDemoScenario)(candidate).length === 0) {
|
|
97
|
+
merged.push(cloneScenario(candidate));
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return merged;
|
|
101
|
+
}
|
|
102
|
+
/* ------------------------------------------------------------------ mount */
|
|
103
|
+
const CONTENT_PREFIX = "scenario:";
|
|
104
|
+
function nowIso() {
|
|
105
|
+
return new Date().toISOString();
|
|
106
|
+
}
|
|
107
|
+
function newId() {
|
|
108
|
+
return Date.now().toString(36) + Math.random().toString(36).slice(2, 10);
|
|
109
|
+
}
|
|
110
|
+
/** Lit tous les overrides DB (lignes illisibles ignorées — jamais de throw). */
|
|
111
|
+
function readOverrides(db) {
|
|
112
|
+
try {
|
|
113
|
+
const rows = db
|
|
114
|
+
.prepare(`SELECT key, value_json FROM interactive_demo_content
|
|
115
|
+
WHERE key LIKE ? ORDER BY key`)
|
|
116
|
+
.all(`${CONTENT_PREFIX}%`);
|
|
117
|
+
const out = [];
|
|
118
|
+
for (const r of rows) {
|
|
119
|
+
try {
|
|
120
|
+
const parsed = JSON.parse(r.value_json);
|
|
121
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
122
|
+
const id = r.key.slice(CONTENT_PREFIX.length);
|
|
123
|
+
out.push({ ...parsed, id });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
/* ligne illisible ignorée */
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return [];
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Mount api-kernel `/api/v1/modules/interactive-demo/*` (dbLayer brand) :
|
|
138
|
+
*
|
|
139
|
+
* - `GET scenarios` → `{ ok, scenarios: merge(défauts, overrides), overrides: [ids] }`
|
|
140
|
+
* - `GET scenarios/:id` → `{ ok, scenario }` (mergé) ou 404
|
|
141
|
+
* - `PUT scenarios/:id` → stocke l'override (steps = remplacement), répond le scénario mergé
|
|
142
|
+
* - `DELETE scenarios/:id` → supprime l'override (retour aux défauts)
|
|
143
|
+
* - `GET preferences?user=<k>` → `{ ok, user, answers }` (clés `seen:<scenarioId>`…)
|
|
144
|
+
* - `PUT preferences` → `{ user, answers }` upsert par clé
|
|
145
|
+
*
|
|
146
|
+
* db absent → 503 `db_unavailable` ; body invalide → 400 (jamais de throw).
|
|
147
|
+
*/
|
|
148
|
+
function createInteractiveDemoMount(opts) {
|
|
149
|
+
const defaults = opts.defaults;
|
|
150
|
+
return {
|
|
151
|
+
dbLayer: "brand",
|
|
152
|
+
operations: [
|
|
153
|
+
{
|
|
154
|
+
id: "list-scenarios",
|
|
155
|
+
method: "GET",
|
|
156
|
+
path: "/scenarios",
|
|
157
|
+
description: "Lister les scénarios de démo interactive",
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
id: "get-scenario",
|
|
161
|
+
method: "GET",
|
|
162
|
+
path: "/scenarios/:id",
|
|
163
|
+
description: "Lire un scénario de démo",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: "put-scenario",
|
|
167
|
+
method: "PUT",
|
|
168
|
+
path: "/scenarios/:id",
|
|
169
|
+
description: "Écrire un override de scénario",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
id: "delete-scenario",
|
|
173
|
+
method: "DELETE",
|
|
174
|
+
path: "/scenarios/:id",
|
|
175
|
+
description: "Supprimer un override de scénario",
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
id: "get-preferences",
|
|
179
|
+
method: "GET",
|
|
180
|
+
path: "/preferences",
|
|
181
|
+
description: "Lire les préférences démo d'un utilisateur",
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: "put-preferences",
|
|
185
|
+
method: "PUT",
|
|
186
|
+
path: "/preferences",
|
|
187
|
+
description: "Enregistrer les préférences démo",
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
handle: async ({ req, subPath, db }) => {
|
|
191
|
+
if (!db) {
|
|
192
|
+
return { status: 503, body: { ok: false, error: "db_unavailable" } };
|
|
193
|
+
}
|
|
194
|
+
const method = req.method.toUpperCase();
|
|
195
|
+
const parts = subPath.split("/").filter(Boolean);
|
|
196
|
+
const head = parts[0] || "";
|
|
197
|
+
if (head === "scenarios" && parts.length === 1) {
|
|
198
|
+
if (method === "GET") {
|
|
199
|
+
const overrides = readOverrides(db);
|
|
200
|
+
return {
|
|
201
|
+
status: 200,
|
|
202
|
+
body: {
|
|
203
|
+
ok: true,
|
|
204
|
+
scenarios: mergeDemoScenarios(defaults, overrides),
|
|
205
|
+
overrides: overrides.map((o) => o.id),
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
return { status: 405, body: { ok: false, error: "method_not_allowed" } };
|
|
210
|
+
}
|
|
211
|
+
if (head === "scenarios" && parts.length === 2) {
|
|
212
|
+
const id = decodeURIComponent(parts[1]);
|
|
213
|
+
if (method === "GET") {
|
|
214
|
+
const merged = mergeDemoScenarios(defaults, readOverrides(db));
|
|
215
|
+
const scenario = merged.find((s) => s.id === id);
|
|
216
|
+
if (!scenario) {
|
|
217
|
+
return { status: 404, body: { ok: false, error: "not_found" } };
|
|
218
|
+
}
|
|
219
|
+
return { status: 200, body: { ok: true, scenario } };
|
|
220
|
+
}
|
|
221
|
+
if (method === "PUT") {
|
|
222
|
+
const body = req.body;
|
|
223
|
+
if (!body || typeof body !== "object" || Array.isArray(body)) {
|
|
224
|
+
return { status: 400, body: { ok: false, error: "invalid_body" } };
|
|
225
|
+
}
|
|
226
|
+
const override = { ...body, id };
|
|
227
|
+
// Un scénario inconnu des défauts doit être complet et valide.
|
|
228
|
+
const isKnown = defaults.some((s) => s.id === id);
|
|
229
|
+
if (!isKnown) {
|
|
230
|
+
const errors = (0, types_js_1.validateDemoScenario)({ enabled: true, ...override });
|
|
231
|
+
if (errors.length > 0) {
|
|
232
|
+
return {
|
|
233
|
+
status: 400,
|
|
234
|
+
body: { ok: false, error: "scenario_invalide", details: errors },
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else if (Array.isArray(override.steps) || override.roles !== undefined) {
|
|
239
|
+
const defaultScenario = defaults.find((s) => s.id === id);
|
|
240
|
+
const errors = (0, types_js_1.validateDemoScenario)({
|
|
241
|
+
...defaultScenario,
|
|
242
|
+
...override,
|
|
243
|
+
});
|
|
244
|
+
if (errors.length > 0) {
|
|
245
|
+
return {
|
|
246
|
+
status: 400,
|
|
247
|
+
body: { ok: false, error: "scenario_invalide", details: errors },
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
db
|
|
252
|
+
.prepare(`INSERT INTO interactive_demo_content (key, value_json, updated_at)
|
|
253
|
+
VALUES (?, ?, ?)
|
|
254
|
+
ON CONFLICT(key) DO UPDATE SET
|
|
255
|
+
value_json = excluded.value_json,
|
|
256
|
+
updated_at = excluded.updated_at`)
|
|
257
|
+
.run(`${CONTENT_PREFIX}${id}`, JSON.stringify(override), nowIso());
|
|
258
|
+
const merged = mergeDemoScenarios(defaults, readOverrides(db));
|
|
259
|
+
return {
|
|
260
|
+
status: 200,
|
|
261
|
+
body: {
|
|
262
|
+
ok: true,
|
|
263
|
+
scenario: merged.find((s) => s.id === id) ?? null,
|
|
264
|
+
hasOverride: true,
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
if (method === "DELETE") {
|
|
269
|
+
db
|
|
270
|
+
.prepare(`DELETE FROM interactive_demo_content WHERE key = ?`)
|
|
271
|
+
.run(`${CONTENT_PREFIX}${id}`);
|
|
272
|
+
const merged = mergeDemoScenarios(defaults, readOverrides(db));
|
|
273
|
+
return {
|
|
274
|
+
status: 200,
|
|
275
|
+
body: {
|
|
276
|
+
ok: true,
|
|
277
|
+
scenario: merged.find((s) => s.id === id) ?? null,
|
|
278
|
+
hasOverride: false,
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
return { status: 405, body: { ok: false, error: "method_not_allowed" } };
|
|
283
|
+
}
|
|
284
|
+
if (head === "preferences" && parts.length === 1) {
|
|
285
|
+
if (method === "GET") {
|
|
286
|
+
const raw = req.query?.user;
|
|
287
|
+
const user = String(Array.isArray(raw) ? raw[0] ?? "" : raw ?? "").trim();
|
|
288
|
+
if (!user) {
|
|
289
|
+
return { status: 400, body: { ok: false, error: "user_required" } };
|
|
290
|
+
}
|
|
291
|
+
const rows = db
|
|
292
|
+
.prepare(`SELECT key, value_json FROM interactive_demo_preferences
|
|
293
|
+
WHERE user_key = ? ORDER BY key`)
|
|
294
|
+
.all(user);
|
|
295
|
+
const answers = {};
|
|
296
|
+
for (const r of rows) {
|
|
297
|
+
try {
|
|
298
|
+
answers[r.key] = JSON.parse(r.value_json);
|
|
299
|
+
}
|
|
300
|
+
catch {
|
|
301
|
+
answers[r.key] = r.value_json;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
return { status: 200, body: { ok: true, user, answers } };
|
|
305
|
+
}
|
|
306
|
+
if (method === "PUT") {
|
|
307
|
+
const body = (req.body || {});
|
|
308
|
+
const user = String(body.user ?? "").trim();
|
|
309
|
+
const answers = body.answers;
|
|
310
|
+
if (!user || !answers || typeof answers !== "object" || Array.isArray(answers)) {
|
|
311
|
+
return { status: 400, body: { ok: false, error: "invalid_body" } };
|
|
312
|
+
}
|
|
313
|
+
const ts = nowIso();
|
|
314
|
+
let saved = 0;
|
|
315
|
+
for (const [key, value] of Object.entries(answers)) {
|
|
316
|
+
if (value === undefined)
|
|
317
|
+
continue;
|
|
318
|
+
db
|
|
319
|
+
.prepare(`INSERT INTO interactive_demo_preferences (id, user_key, key, value_json, updated_at)
|
|
320
|
+
VALUES (?, ?, ?, ?, ?)
|
|
321
|
+
ON CONFLICT(user_key, key) DO UPDATE SET
|
|
322
|
+
value_json = excluded.value_json,
|
|
323
|
+
updated_at = excluded.updated_at`)
|
|
324
|
+
.run(newId(), user, key, JSON.stringify(value), ts);
|
|
325
|
+
saved++;
|
|
326
|
+
}
|
|
327
|
+
return { status: 200, body: { ok: true, user, saved } };
|
|
328
|
+
}
|
|
329
|
+
return { status: 405, body: { ok: false, error: "method_not_allowed" } };
|
|
330
|
+
}
|
|
331
|
+
return { status: 404, body: { ok: false, error: "not_found" } };
|
|
332
|
+
},
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Collecteur des contributions démo des modules métier.
|
|
4
|
+
*
|
|
5
|
+
* Chaque module du registre marque (`BrandModuleDef.demo`) peut contribuer
|
|
6
|
+
* des scénarios de démo interactive ; ce collecteur les agrège en la liste
|
|
7
|
+
* de DÉFAUTS servie par `createInteractiveDemoMount` :
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* createInteractiveDemoMount({ defaults: collectDemoScenarios() });
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* Contrat :
|
|
14
|
+
* - **validation** : chaque scénario passe `validateDemoScenario` — un
|
|
15
|
+
* scénario invalide est une erreur de module (bug), pas un cas runtime ;
|
|
16
|
+
* - **dédup par id** : un même id contribué deux fois par le MÊME module
|
|
17
|
+
* (module listé en double dans le registre) est ignoré silencieusement ;
|
|
18
|
+
* un même id contribué par DEUX modules différents est un conflit, sauf
|
|
19
|
+
* `os-tour` (`genericOsTourScenario` partagé — premier gagne) ;
|
|
20
|
+
* - **erreurs claires** : toutes les erreurs sont agrégées puis levées en
|
|
21
|
+
* UNE Error listant module + scénario + codes de validation — le boot
|
|
22
|
+
* échoue explicitement plutôt que de servir une démo tronquée ;
|
|
23
|
+
* - **ordre stable** : la sortie suit l'ordre du registre (contributions)
|
|
24
|
+
* puis l'ordre de déclaration dans chaque module — jamais de tri implicite.
|
|
25
|
+
*
|
|
26
|
+
* Zéro texte métier ici : les scénarios vivent dans les modules marque.
|
|
27
|
+
*/
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.collectInteractiveDemoDefaults = collectInteractiveDemoDefaults;
|
|
30
|
+
const types_js_1 = require("./types.js");
|
|
31
|
+
/**
|
|
32
|
+
* Agrège les scénarios démo contribués par les modules métier.
|
|
33
|
+
*
|
|
34
|
+
* Renvoie les scénarios valides dans l'ordre stable contributions →
|
|
35
|
+
* déclaration. Lève une Error unique listant TOUTES les erreurs si un
|
|
36
|
+
* scénario est invalide (`validateDemoScenario`) ou si deux modules
|
|
37
|
+
* différents contribuent le même id.
|
|
38
|
+
*/
|
|
39
|
+
function collectInteractiveDemoDefaults(contributions) {
|
|
40
|
+
const errors = [];
|
|
41
|
+
const out = [];
|
|
42
|
+
const ownerById = new Map();
|
|
43
|
+
for (const contribution of contributions ?? []) {
|
|
44
|
+
if (!contribution || typeof contribution !== "object") {
|
|
45
|
+
errors.push("contribution_invalide");
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const moduleId = typeof contribution.moduleId === "string" && contribution.moduleId.trim()
|
|
49
|
+
? contribution.moduleId
|
|
50
|
+
: "<module_inconnu>";
|
|
51
|
+
if (moduleId === "<module_inconnu>") {
|
|
52
|
+
errors.push("module_id_requis");
|
|
53
|
+
}
|
|
54
|
+
const scenarios = contribution.scenarios;
|
|
55
|
+
if (!Array.isArray(scenarios)) {
|
|
56
|
+
errors.push(`${moduleId}: scenarios_requis (tableau)`);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
for (const scenario of scenarios) {
|
|
60
|
+
const id = scenario && typeof scenario === "object" && !Array.isArray(scenario)
|
|
61
|
+
? scenario.id
|
|
62
|
+
: undefined;
|
|
63
|
+
const at = `${moduleId}:${typeof id === "string" && id ? id : "<sans_id>"}`;
|
|
64
|
+
// Dédup par id : doublon interne au même module = ignoré (registre
|
|
65
|
+
// listé deux fois) ; doublon entre modules distincts = conflit —
|
|
66
|
+
// sauf `os-tour` (scénario OS partagé : premier gagne, les suivants
|
|
67
|
+
// sont le même `genericOsTourScenario` posé par chaque stub module).
|
|
68
|
+
if (typeof id === "string" && id && ownerById.has(id)) {
|
|
69
|
+
const owner = ownerById.get(id);
|
|
70
|
+
if (owner === moduleId || id === "os-tour")
|
|
71
|
+
continue;
|
|
72
|
+
errors.push(`scenario en double: ${id} (modules ${owner} et ${moduleId})`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const validation = (0, types_js_1.validateDemoScenario)(scenario);
|
|
76
|
+
if (validation.length > 0) {
|
|
77
|
+
errors.push(`${at}: ${validation.join(", ")}`);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
ownerById.set(id, moduleId);
|
|
81
|
+
out.push(scenario);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (errors.length > 0) {
|
|
85
|
+
throw new Error("collectInteractiveDemoDefaults — contributions invalides :\n" +
|
|
86
|
+
errors.map((e) => ` - ${e}`).join("\n"));
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=contributions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contributions.js","sourceRoot":"","sources":["../src/contributions.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;;AAyBH,wEA4DC;AAlFD,yCAAkD;AAclD;;;;;;;GAOG;AACH,SAAgB,8BAA8B,CAC5C,aAAgD;IAEhD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,KAAK,MAAM,YAAY,IAAI,aAAa,IAAI,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrC,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GACZ,OAAO,YAAY,CAAC,QAAQ,KAAK,QAAQ,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE;YACvE,CAAC,CAAC,YAAY,CAAC,QAAQ;YACvB,CAAC,CAAC,kBAAkB,CAAC;QACzB,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,SAAS,GAAI,YAAuC,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,8BAA8B,CAAC,CAAC;YACvD,SAAS;QACX,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,EAAE,GACN,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAClE,CAAC,CAAE,QAAkC,CAAC,EAAE;gBACxC,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,EAAE,GAAG,GAAG,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAE5E,mEAAmE;YACnE,iEAAiE;YACjE,oEAAoE;YACpE,qEAAqE;YACrE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACtD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;gBACjC,IAAI,KAAK,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS;oBAAE,SAAS;gBACrD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,aAAa,KAAK,OAAO,QAAQ,GAAG,CAAC,CAAC;gBAC3E,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,IAAA,+BAAoB,EAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/C,SAAS;YACX,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,EAAG,EAAE,QAAQ,CAAC,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,QAAwB,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Scénario de base générique — visite du socle OS Creezio (sidebar,
|
|
4
|
+
* recherche, assistant). Sert de démo « jour 1 » à toute marque qui n'a pas
|
|
5
|
+
* encore déclaré son scénario produit, et de fixture aux gates kit.
|
|
6
|
+
*
|
|
7
|
+
* Aucun texte métier marque : uniquement les surfaces OS communes.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.osFeatureChapters = osFeatureChapters;
|
|
11
|
+
exports.genericOsTourScenario = genericOsTourScenario;
|
|
12
|
+
/** Titre de la page courante (h1 du contenu principal en priorité). */
|
|
13
|
+
const PAGE_TITLE_SELECTOR = "main h1, h1";
|
|
14
|
+
/** Chapitre standard : clic sur le libellé de nav + carte sur le titre de page. */
|
|
15
|
+
function clickChapter(slug, navLabel, title, body) {
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
id: `os-${slug}-nav`,
|
|
19
|
+
kind: "click",
|
|
20
|
+
target: { text: navLabel },
|
|
21
|
+
optional: true,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: `os-${slug}-carte`,
|
|
25
|
+
kind: "highlight",
|
|
26
|
+
target: { selector: PAGE_TITLE_SELECTOR },
|
|
27
|
+
title,
|
|
28
|
+
body,
|
|
29
|
+
optional: true,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Chapitre admin : navigation directe (le groupe Admin de la sidebar peut
|
|
35
|
+
* être replié — un clic sur le libellé échouerait) + carte sur le titre.
|
|
36
|
+
*/
|
|
37
|
+
function navigateChapter(slug, href, title, body) {
|
|
38
|
+
return [
|
|
39
|
+
{
|
|
40
|
+
id: `os-${slug}-nav`,
|
|
41
|
+
kind: "navigate",
|
|
42
|
+
href,
|
|
43
|
+
optional: true,
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
id: `os-${slug}-carte`,
|
|
47
|
+
kind: "highlight",
|
|
48
|
+
target: { selector: PAGE_TITLE_SELECTOR },
|
|
49
|
+
title,
|
|
50
|
+
body,
|
|
51
|
+
optional: true,
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Chapitres composables présentant les fonctionnalités natives de l'OS
|
|
57
|
+
* Creezio : Tâches, Mails, Assistant IA, Préférences pour tous les rôles ;
|
|
58
|
+
* `isAdmin: true` ajoute Collaborateurs, Configuration et les pages Admin
|
|
59
|
+
* (Analytics, Database, Plugins, Intégrations, API, MCP, Logs API/MCP).
|
|
60
|
+
*
|
|
61
|
+
* Toutes les cibles sont `optional` (skip silencieux si la marque n'expose
|
|
62
|
+
* pas la surface) et tous les ids sont préfixés `os-` — composables dans
|
|
63
|
+
* n'importe quel scénario marque.
|
|
64
|
+
*/
|
|
65
|
+
function osFeatureChapters(opts = {}) {
|
|
66
|
+
const steps = [
|
|
67
|
+
...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."),
|
|
68
|
+
...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."),
|
|
69
|
+
{
|
|
70
|
+
id: "os-assistant-carte",
|
|
71
|
+
kind: "highlight",
|
|
72
|
+
target: { selector: "[data-creezio-assistant-ui]" },
|
|
73
|
+
title: "Assistant IA",
|
|
74
|
+
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.",
|
|
75
|
+
optional: true,
|
|
76
|
+
},
|
|
77
|
+
...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."),
|
|
78
|
+
];
|
|
79
|
+
if (opts.isAdmin) {
|
|
80
|
+
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."));
|
|
81
|
+
}
|
|
82
|
+
return steps;
|
|
83
|
+
}
|
|
84
|
+
/** Visite guidée générique du shell OS (nav, chapitres OS, assistant). */
|
|
85
|
+
function genericOsTourScenario(opts) {
|
|
86
|
+
const product = opts.productName;
|
|
87
|
+
const home = opts.homeHref ?? "/";
|
|
88
|
+
return {
|
|
89
|
+
id: "os-tour",
|
|
90
|
+
title: `Découvrir ${product}`,
|
|
91
|
+
description: "Visite guidée des surfaces de base de l'application.",
|
|
92
|
+
enabled: true,
|
|
93
|
+
autoStart: false,
|
|
94
|
+
steps: [
|
|
95
|
+
{
|
|
96
|
+
id: "welcome",
|
|
97
|
+
kind: "say",
|
|
98
|
+
title: `Bienvenue sur ${product}`,
|
|
99
|
+
body: "Suivez le curseur : cette visite guidée vous présente l'application en direct. Vous pouvez la quitter à tout moment.",
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "sidebar",
|
|
103
|
+
kind: "highlight",
|
|
104
|
+
target: { selector: "aside, nav" },
|
|
105
|
+
title: "Votre espace de travail",
|
|
106
|
+
body: "La navigation regroupe toutes les sections de l'application. Chaque module y ajoute automatiquement son entrée.",
|
|
107
|
+
optional: true,
|
|
108
|
+
},
|
|
109
|
+
...osFeatureChapters({ isAdmin: false }),
|
|
110
|
+
{
|
|
111
|
+
id: "end",
|
|
112
|
+
kind: "navigate",
|
|
113
|
+
href: home,
|
|
114
|
+
title: "À vous de jouer",
|
|
115
|
+
body: "Vous pouvez relancer cette visite à tout moment depuis le bouton « Visite guidée ».",
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=generic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic.js","sourceRoot":"","sources":["../src/generic.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAkFH,8CA4FC;AAGD,sDAoCC;AArMD,uEAAuE;AACvE,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAE1C,mFAAmF;AACnF,SAAS,YAAY,CACnB,IAAY,EACZ,QAAgB,EAChB,KAAa,EACb,IAAY;IAEZ,OAAO;QACL;YACE,EAAE,EAAE,MAAM,IAAI,MAAM;YACpB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,MAAM,IAAI,QAAQ;YACtB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACzC,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,IAAY;IAEZ,OAAO;QACL;YACE,EAAE,EAAE,MAAM,IAAI,MAAM;YACpB,IAAI,EAAE,UAAU;YAChB,IAAI;YACJ,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,MAAM,IAAI,QAAQ;YACtB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,mBAAmB,EAAE;YACzC,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAC/B,OAAiC,EAAE;IAEnC,MAAM,KAAK,GAAe;QACxB,GAAG,YAAY,CACb,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iJAAiJ,CAClJ;QACD,GAAG,YAAY,CACb,OAAO,EACP,OAAO,EACP,OAAO,EACP,4IAA4I,CAC7I;QACD;YACE,EAAE,EAAE,oBAAoB;YACxB,IAAI,EAAE,WAAW;YACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,6BAA6B,EAAE;YACnD,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,iJAAiJ;YACvJ,QAAQ,EAAE,IAAI;SACf;QACD,GAAG,YAAY,CACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,uJAAuJ,CACxJ;KACF,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CACR,GAAG,YAAY,CACb,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,yHAAyH,CAC1H,EACD,GAAG,YAAY,CACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,yIAAyI,CAC1I,EACD,GAAG,eAAe,CAChB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,8HAA8H,CAC/H,EACD,GAAG,eAAe,CAChB,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,mIAAmI,CACpI,EACD,GAAG,eAAe,CAChB,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,gHAAgH,CACjH,EACD,GAAG,eAAe,CAChB,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,4JAA4J,CAC7J,EACD,GAAG,eAAe,CAChB,KAAK,EACL,YAAY,EACZ,KAAK,EACL,uIAAuI,CACxI,EACD,GAAG,eAAe,CAChB,KAAK,EACL,YAAY,EACZ,KAAK,EACL,4HAA4H,CAC7H,EACD,GAAG,eAAe,CAChB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,mIAAmI,CACpI,CACF,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0EAA0E;AAC1E,SAAgB,qBAAqB,CACnC,IAA0B;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC;IAClC,OAAO;QACL,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,aAAa,OAAO,EAAE;QAC7B,WAAW,EAAE,sDAAsD;QACnE,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,KAAK;gBACX,KAAK,EAAE,iBAAiB,OAAO,EAAE;gBACjC,IAAI,EAAE,sHAAsH;aAC7H;YACD;gBACE,EAAE,EAAE,SAAS;gBACb,IAAI,EAAE,WAAW;gBACjB,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;gBAClC,KAAK,EAAE,yBAAyB;gBAChC,IAAI,EAAE,iHAAiH;gBACvH,QAAQ,EAAE,IAAI;aACf;YACD,GAAG,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACxC;gBACE,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,iBAAiB;gBACxB,IAAI,EAAE,qFAAqF;aAC5F;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @creezio/interactive-demo — surface publique runtime.
|
|
4
|
+
*
|
|
5
|
+
* Moteur de démo interactive native (product tour live « Storylane-like »,
|
|
6
|
+
* joué dans l'app par un faux curseur) : types de scénario déclaratifs,
|
|
7
|
+
* collecteur des contributions des modules métier
|
|
8
|
+
* (`collectInteractiveDemoDefaults`), contenu hybride DB (migrations +
|
|
9
|
+
* merge + mount api-kernel) et scénario générique OS. Les composants React
|
|
10
|
+
* vivent dans `@creezio/interactive-demo/ui`.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.osFeatureChapters = exports.genericOsTourScenario = exports.createInteractiveDemoMount = exports.mergeDemoScenarios = exports.interactiveDemoMigrations = exports.INTERACTIVE_DEMO_SCHEMA_SQL = exports.collectInteractiveDemoDefaults = exports.scenarioMatchesRole = exports.validateDemoScenario = void 0;
|
|
14
|
+
var types_js_1 = require("./types.js");
|
|
15
|
+
Object.defineProperty(exports, "validateDemoScenario", { enumerable: true, get: function () { return types_js_1.validateDemoScenario; } });
|
|
16
|
+
Object.defineProperty(exports, "scenarioMatchesRole", { enumerable: true, get: function () { return types_js_1.scenarioMatchesRole; } });
|
|
17
|
+
var contributions_js_1 = require("./contributions.js");
|
|
18
|
+
Object.defineProperty(exports, "collectInteractiveDemoDefaults", { enumerable: true, get: function () { return contributions_js_1.collectInteractiveDemoDefaults; } });
|
|
19
|
+
var content_js_1 = require("./content.js");
|
|
20
|
+
Object.defineProperty(exports, "INTERACTIVE_DEMO_SCHEMA_SQL", { enumerable: true, get: function () { return content_js_1.INTERACTIVE_DEMO_SCHEMA_SQL; } });
|
|
21
|
+
Object.defineProperty(exports, "interactiveDemoMigrations", { enumerable: true, get: function () { return content_js_1.interactiveDemoMigrations; } });
|
|
22
|
+
Object.defineProperty(exports, "mergeDemoScenarios", { enumerable: true, get: function () { return content_js_1.mergeDemoScenarios; } });
|
|
23
|
+
Object.defineProperty(exports, "createInteractiveDemoMount", { enumerable: true, get: function () { return content_js_1.createInteractiveDemoMount; } });
|
|
24
|
+
var generic_js_1 = require("./generic.js");
|
|
25
|
+
Object.defineProperty(exports, "genericOsTourScenario", { enumerable: true, get: function () { return generic_js_1.genericOsTourScenario; } });
|
|
26
|
+
Object.defineProperty(exports, "osFeatureChapters", { enumerable: true, get: function () { return generic_js_1.osFeatureChapters; } });
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAkBH,uCAAuE;AAA9D,gHAAA,oBAAoB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AAElD,uDAAoE;AAA3D,kIAAA,8BAA8B,OAAA;AAGvC,2CAKsB;AAJpB,yHAAA,2BAA2B,OAAA;AAC3B,uHAAA,yBAAyB,OAAA;AACzB,gHAAA,kBAAkB,OAAA;AAClB,wHAAA,0BAA0B,OAAA;AAI5B,2CAAwE;AAA/D,mHAAA,qBAAqB,OAAA;AAAE,+GAAA,iBAAiB,OAAA"}
|