living-documentation 7.14.0 → 7.15.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/dist/src/frontend/admin.html +53 -0
- package/dist/src/frontend/config.js +2 -0
- package/dist/src/frontend/i18n/en.json +4 -0
- package/dist/src/frontend/i18n/fr.json +4 -0
- package/dist/src/frontend/index.html +3 -0
- package/dist/src/frontend/sidebar.js +74 -0
- package/dist/src/frontend/state.js +2 -0
- package/dist/src/lib/config.d.ts +2 -0
- package/dist/src/lib/config.d.ts.map +1 -1
- package/dist/src/lib/config.js +2 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/routes/config.d.ts.map +1 -1
- package/dist/src/routes/config.js +2 -0
- package/dist/src/routes/config.js.map +1 -1
- package/package.json +1 -1
|
@@ -274,6 +274,49 @@
|
|
|
274
274
|
info on each node — useful for diagnosing snap-to-grid issues.
|
|
275
275
|
</p>
|
|
276
276
|
</div>
|
|
277
|
+
<div class="px-5 py-4">
|
|
278
|
+
<label class="flex items-center gap-3 cursor-pointer">
|
|
279
|
+
<input
|
|
280
|
+
id="field-exclusive-folder"
|
|
281
|
+
name="exclusiveFolderExpansion"
|
|
282
|
+
type="checkbox"
|
|
283
|
+
class="w-4 h-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"
|
|
284
|
+
/>
|
|
285
|
+
<span
|
|
286
|
+
class="text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
287
|
+
data-i18n="admin.appearance.exclusive_folder_label">Exclusive folder expansion in sidebar</span
|
|
288
|
+
>
|
|
289
|
+
</label>
|
|
290
|
+
<p
|
|
291
|
+
class="mt-1 text-xs text-gray-400 dark:text-gray-500 ml-7"
|
|
292
|
+
data-i18n="admin.appearance.exclusive_folder_hint"
|
|
293
|
+
>
|
|
294
|
+
When enabled, opening a folder in the sidebar automatically
|
|
295
|
+
closes any other open folder at the same level (and its
|
|
296
|
+
children).
|
|
297
|
+
</p>
|
|
298
|
+
</div>
|
|
299
|
+
<div class="px-5 py-4">
|
|
300
|
+
<label class="flex items-center gap-3 cursor-pointer">
|
|
301
|
+
<input
|
|
302
|
+
id="field-exclusive-category"
|
|
303
|
+
name="exclusiveCategoryExpansion"
|
|
304
|
+
type="checkbox"
|
|
305
|
+
class="w-4 h-4 rounded border-gray-300 dark:border-gray-600 text-blue-600 focus:ring-blue-500"
|
|
306
|
+
/>
|
|
307
|
+
<span
|
|
308
|
+
class="text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
309
|
+
data-i18n="admin.appearance.exclusive_category_label">Exclusive category expansion in sidebar</span
|
|
310
|
+
>
|
|
311
|
+
</label>
|
|
312
|
+
<p
|
|
313
|
+
class="mt-1 text-xs text-gray-400 dark:text-gray-500 ml-7"
|
|
314
|
+
data-i18n="admin.appearance.exclusive_category_hint"
|
|
315
|
+
>
|
|
316
|
+
When enabled, opening a category automatically closes any
|
|
317
|
+
other open category under the same parent folder.
|
|
318
|
+
</p>
|
|
319
|
+
</div>
|
|
277
320
|
<div class="px-5 py-4 space-y-1.5">
|
|
278
321
|
<label
|
|
279
322
|
class="block text-sm font-medium text-gray-700 dark:text-gray-300"
|
|
@@ -526,6 +569,10 @@
|
|
|
526
569
|
cfg.filenamePattern || "";
|
|
527
570
|
document.getElementById("field-debug").checked =
|
|
528
571
|
!!cfg.showDiagramDebug;
|
|
572
|
+
document.getElementById("field-exclusive-folder").checked =
|
|
573
|
+
!!cfg.exclusiveFolderExpansion;
|
|
574
|
+
document.getElementById("field-exclusive-category").checked =
|
|
575
|
+
!!cfg.exclusiveCategoryExpansion;
|
|
529
576
|
document.getElementById("field-blocked-extensions").value =
|
|
530
577
|
(cfg.blockedFileExtensions || []).join(" ");
|
|
531
578
|
updatePreview(cfg.filenamePattern);
|
|
@@ -568,6 +615,12 @@
|
|
|
568
615
|
language: document.getElementById("field-language").value,
|
|
569
616
|
filenamePattern,
|
|
570
617
|
showDiagramDebug: document.getElementById("field-debug").checked,
|
|
618
|
+
exclusiveFolderExpansion: document.getElementById(
|
|
619
|
+
"field-exclusive-folder",
|
|
620
|
+
).checked,
|
|
621
|
+
exclusiveCategoryExpansion: document.getElementById(
|
|
622
|
+
"field-exclusive-category",
|
|
623
|
+
).checked,
|
|
571
624
|
diagramNodePalette: [...nodePalette],
|
|
572
625
|
diagramEdgePalette: [...edgePalette],
|
|
573
626
|
sourceRoot: sourceRootRaw === "" ? null : sourceRootRaw,
|
|
@@ -12,6 +12,8 @@ async function loadConfig() {
|
|
|
12
12
|
document.getElementById("welcome-pattern").textContent =
|
|
13
13
|
cfg.filenamePattern + ".md";
|
|
14
14
|
}
|
|
15
|
+
exclusiveFolderExpansion = !!cfg.exclusiveFolderExpansion;
|
|
16
|
+
exclusiveCategoryExpansion = !!cfg.exclusiveCategoryExpansion;
|
|
15
17
|
} catch {
|
|
16
18
|
await window.initI18n('en');
|
|
17
19
|
/* non-fatal */
|
|
@@ -316,6 +316,10 @@
|
|
|
316
316
|
"admin.appearance.language_hint": "Interface language for all pages.",
|
|
317
317
|
"admin.appearance.debug_label": "Show debug button in diagram editor",
|
|
318
318
|
"admin.appearance.debug_hint": "Displays a Debug button that overlays raw position and size info on each node — useful for diagnosing snap-to-grid issues.",
|
|
319
|
+
"admin.appearance.exclusive_folder_label": "Exclusive folder expansion in sidebar",
|
|
320
|
+
"admin.appearance.exclusive_folder_hint": "When enabled, opening a folder in the sidebar automatically closes any other open folder at the same level (and its children).",
|
|
321
|
+
"admin.appearance.exclusive_category_label": "Exclusive category expansion in sidebar",
|
|
322
|
+
"admin.appearance.exclusive_category_hint": "When enabled, opening a category automatically closes any other open category under the same parent folder.",
|
|
319
323
|
|
|
320
324
|
"admin.pattern.label": "Filename Pattern",
|
|
321
325
|
"admin.pattern.hint": "Parsed for date, category, and title.",
|
|
@@ -316,6 +316,10 @@
|
|
|
316
316
|
"admin.appearance.language_hint": "Langue de l'interface pour toutes les pages.",
|
|
317
317
|
"admin.appearance.debug_label": "Afficher le bouton debug dans l'éditeur de diagrammes",
|
|
318
318
|
"admin.appearance.debug_hint": "Affiche un bouton Debug qui superpose les informations brutes de position et de taille sur chaque nœud — utile pour diagnostiquer les problèmes de grille.",
|
|
319
|
+
"admin.appearance.exclusive_folder_label": "Ouverture exclusive des dossiers dans la barre latérale",
|
|
320
|
+
"admin.appearance.exclusive_folder_hint": "Si activé, l'ouverture d'un dossier dans la barre latérale referme automatiquement tout autre dossier ouvert au même niveau (ainsi que ses enfants).",
|
|
321
|
+
"admin.appearance.exclusive_category_label": "Ouverture exclusive des catégories dans la barre latérale",
|
|
322
|
+
"admin.appearance.exclusive_category_hint": "Si activé, l'ouverture d'une catégorie referme automatiquement toute autre catégorie ouverte sous le même dossier parent.",
|
|
319
323
|
|
|
320
324
|
"admin.pattern.label": "Modèle de nom de fichier",
|
|
321
325
|
"admin.pattern.hint": "Analysé pour extraire la date, la catégorie et le titre.",
|
|
@@ -202,6 +202,57 @@ function renderDocItem(doc) {
|
|
|
202
202
|
</button>`;
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
+
function setInstantCollapse(el) {
|
|
206
|
+
el.classList.add("no-transition");
|
|
207
|
+
el.classList.add("collapsed");
|
|
208
|
+
el.classList.remove("expanded");
|
|
209
|
+
// Force reflow so the collapsed state is committed while transitions are off
|
|
210
|
+
void el.offsetHeight;
|
|
211
|
+
requestAnimationFrame(() => el.classList.remove("no-transition"));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function collapseCategoryByKey(key, instant = false) {
|
|
215
|
+
const parts = key.split("|");
|
|
216
|
+
const catNodeId =
|
|
217
|
+
"cat-" + parts.map((p) => p.replace(/\W/g, "-")).join("-");
|
|
218
|
+
const el = document.getElementById(catNodeId);
|
|
219
|
+
const arrow = document.getElementById("arrow-" + catNodeId);
|
|
220
|
+
if (el) {
|
|
221
|
+
if (instant) setInstantCollapse(el);
|
|
222
|
+
else {
|
|
223
|
+
el.classList.add("collapsed");
|
|
224
|
+
el.classList.remove("expanded");
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (arrow) arrow.style.transform = "";
|
|
228
|
+
expandedCategories.delete(key);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function collapseFolderAndDescendants(pathKey, instant = false) {
|
|
232
|
+
const parts = pathKey.split("|");
|
|
233
|
+
const nodeId =
|
|
234
|
+
"folder-" + parts.map((p) => p.replace(/\W/g, "-")).join("-");
|
|
235
|
+
const el = document.getElementById(nodeId);
|
|
236
|
+
const arrow = document.getElementById("arrow-" + nodeId);
|
|
237
|
+
if (el) {
|
|
238
|
+
if (instant) setInstantCollapse(el);
|
|
239
|
+
else {
|
|
240
|
+
el.classList.add("collapsed");
|
|
241
|
+
el.classList.remove("expanded");
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (arrow) arrow.style.transform = "";
|
|
245
|
+
expandedFolders.delete(pathKey);
|
|
246
|
+
|
|
247
|
+
const prefix = pathKey + "|";
|
|
248
|
+
for (const key of [...expandedFolders]) {
|
|
249
|
+
if (key.startsWith(prefix)) collapseFolderAndDescendants(key, instant);
|
|
250
|
+
}
|
|
251
|
+
for (const key of [...expandedCategories]) {
|
|
252
|
+
if (key.startsWith(prefix)) collapseCategoryByKey(key, instant);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
205
256
|
function toggleCategory(key) {
|
|
206
257
|
const parts = key.split("|");
|
|
207
258
|
const catNodeId =
|
|
@@ -210,6 +261,17 @@ function toggleCategory(key) {
|
|
|
210
261
|
const arrow = document.getElementById("arrow-" + catNodeId);
|
|
211
262
|
if (!el) return;
|
|
212
263
|
const expanding = el.classList.contains("collapsed");
|
|
264
|
+
|
|
265
|
+
if (expanding && exclusiveCategoryExpansion) {
|
|
266
|
+
const parentPath = parts.slice(0, -1).join("|");
|
|
267
|
+
for (const otherKey of [...expandedCategories]) {
|
|
268
|
+
if (otherKey === key) continue;
|
|
269
|
+
const otherParts = otherKey.split("|");
|
|
270
|
+
const otherParent = otherParts.slice(0, -1).join("|");
|
|
271
|
+
if (otherParent === parentPath) collapseCategoryByKey(otherKey, true);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
213
275
|
el.classList.toggle("collapsed", !expanding);
|
|
214
276
|
el.classList.toggle("expanded", expanding);
|
|
215
277
|
if (arrow) arrow.style.transform = expanding ? "rotate(90deg)" : "";
|
|
@@ -225,6 +287,18 @@ function toggleFolder(pathKey) {
|
|
|
225
287
|
const arrow = document.getElementById("arrow-" + nodeId);
|
|
226
288
|
if (!el) return;
|
|
227
289
|
const expanding = el.classList.contains("collapsed");
|
|
290
|
+
|
|
291
|
+
if (expanding && exclusiveFolderExpansion) {
|
|
292
|
+
const parentPath = parts.slice(0, -1).join("|");
|
|
293
|
+
for (const otherKey of [...expandedFolders]) {
|
|
294
|
+
if (otherKey === pathKey) continue;
|
|
295
|
+
const otherParts = otherKey.split("|");
|
|
296
|
+
const otherParent = otherParts.slice(0, -1).join("|");
|
|
297
|
+
if (otherParent === parentPath)
|
|
298
|
+
collapseFolderAndDescendants(otherKey, true);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
228
302
|
el.classList.toggle("collapsed", !expanding);
|
|
229
303
|
el.classList.toggle("expanded", expanding);
|
|
230
304
|
if (arrow) arrow.style.transform = expanding ? "rotate(90deg)" : "";
|
package/dist/src/lib/config.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface LivingDocConfig {
|
|
|
11
11
|
diagramEdgePalette: string[] | null;
|
|
12
12
|
sourceRoot: string | null;
|
|
13
13
|
blockedFileExtensions: string[];
|
|
14
|
+
exclusiveFolderExpansion: boolean;
|
|
15
|
+
exclusiveCategoryExpansion: boolean;
|
|
14
16
|
}
|
|
15
17
|
export declare function getConfigPath(docsPath: string): string;
|
|
16
18
|
export declare function readConfig(docsPath: string): LivingDocConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,wBAAwB,EAAE,OAAO,CAAC;IAClC,0BAA0B,EAAE,OAAO,CAAC;CACrC;AAgED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAY5D;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,GAC9B,eAAe,CAMjB"}
|
package/dist/src/lib/config.js
CHANGED
|
@@ -62,6 +62,8 @@ const DEFAULTS = {
|
|
|
62
62
|
diagramEdgePalette: DEFAULT_DIAGRAM_EDGE_PALETTE,
|
|
63
63
|
sourceRoot: null,
|
|
64
64
|
blockedFileExtensions: DEFAULT_BLOCKED_FILE_EXTENSIONS,
|
|
65
|
+
exclusiveFolderExpansion: false,
|
|
66
|
+
exclusiveCategoryExpansion: false,
|
|
65
67
|
};
|
|
66
68
|
function getConfigPath(docsPath) {
|
|
67
69
|
return path_1.default.join(docsPath, CONFIG_FILENAME);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":";;;;;AAkFA,sCAEC;AAED,gCAYC;AAED,kCASC;AA7GD,4CAAoB;AACpB,gDAAwB;AAmBxB,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,mGAAmG;AACnG,yFAAyF;AACzF,MAAM,4BAA4B,GAAG;IACnC,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,UAAU;IACrB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;CACvB,CAAC;AAEF,MAAM,4BAA4B,GAAG;IACnC,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;IACT,SAAS;CACV,CAAC;AAEF,MAAM,+BAA+B,GAAG;IACtC,KAAK;IACL,IAAI;IACJ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACN,CAAC;AAEF,MAAM,QAAQ,GAAoB;IAChC,UAAU,EAAE,GAAG;IACf,eAAe,EAAE,mCAAmC;IACpD,KAAK,EAAE,sBAAsB;IAC7B,KAAK,EAAE,QAAQ;IACf,QAAQ,EAAE,IAAI;IACd,IAAI,EAAE,IAAI;IACV,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,KAAK;IACvB,kBAAkB,EAAE,4BAA4B;IAChD,kBAAkB,EAAE,4BAA4B;IAChD,UAAU,EAAE,IAAI;IAChB,qBAAqB,EAAE,+BAA+B;IACtD,wBAAwB,EAAE,KAAK;IAC/B,0BAA0B,EAAE,KAAK;CAClC,CAAC;AAEF,SAAgB,aAAa,CAAC,QAAgB;IAC5C,OAAO,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED,SAAgB,UAAU,CAAC,QAAgB;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA6B,CAAC;YAC3D,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,OAAO,EAAE,GAAG,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AAC/C,CAAC;AAED,SAAgB,WAAW,CACzB,QAAgB,EAChB,KAA+B;IAE/B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,OAAO,GAAoB,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;IAC1D,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3C,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AAIpD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuGrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":";;;;;AAIA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/routes/config.ts"],"names":[],"mappings":"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"}
|